精华内容
下载资源
问答
  • 线程:分为守护线程用户线程 用户线程:当一个进程不包含任何存活用户线程,...线程不安全的原因:多个线程去争取一个数据,导致线程获得值跟实际值有偏差,运行结果不符合预期 解决线程不安全问题...

    线程:分为守护线程和用户线程

    用户线程:当一个进程不包含任何的存活的用户线程,进程结束

    守护线程:守护用户线程的,当最后一个用户线程结束时,所有守护线程自动死亡

    守护线程是依赖于用户线程,用户线程退出了,守护线程也就会退出,典型的守护线程如垃圾回收线程。

    用户线程是独立存在的,不会因为其他用户线程退出而退出。

    默认情况下启动的线程是用户线程,通过setDaemon(true)将线程设置成守护线程,这个函数务必在线程启动前进行调用,否则会报java.lang.IllegalThreadStateException异常,启动的线程无法变成守护线程,而是用户线程。

     

    在线程启动之后设置为守护线程,运行出现IllegalThreadStateException

     

    设置线程的守护线程必须在启动之前就设置

     

    当主线程结束之后,紧接着守护线程也就自动结束了

     

    线程不安全的原因:多个线程去争取一个数据,导致线程获得的值跟实际的值有偏差,运行结果不符合预期

    解决线程不安全的问题: 线程同步

     

    线程同步的方法一:修饰代码块

    注意这里的Object o,一定要是只有一个,不能所有的线程在运行时都创建一个,这样每个线程都有各自的锁,就锁不住其他线程。必须是所有线程公用一把锁,当其中一个线程进入同步代码快时,其他线程没有或得锁就不能进入

    格式:

    synchronzied(o){

        同步代码块;

    }

    比如:这么一个加锁的代码

    反编译的结果:

     


    线程同步的方法二:修饰方法

    使用的是同步方法,在方法的前面加上synchronized,注意同步方法锁的对象是this,方法是在类里面被调用的,那么锁的对象就是类的this,静态类就是锁的类.class

    如果 在一个类中有多个方法都使用了同步方法,那么其中一个同步方法在执行的时候,其他的方法这个时候只能处于等待的状态,执行不了,因为获取不到锁,所有的同步方法等的都是同一把锁

     

    线程的同步的方法一 和方法二 都属于 隐式锁

     

    有隐式锁肯定就有显式锁

     

    显式锁的使用:

    创建出一个锁

    在需要加锁的代码前,开启锁

    结束时,关闭锁

     

    隐式锁(又称为监视器锁)和显式锁的比较

     

    上面介绍了隐式锁的使用,接下来我们就看看两者的区别吧

     

    Sync是隐式锁。Lock是显示锁

    所谓的显示和隐式就是在使用的时候,使用者要不要手动写代码去获取锁和释放锁的操作。

    我们大家都知道,在使用sync关键字的时候,我们使用者根本不用写其他的代码,然后程序就能够获取锁和释放锁了。那是因为当sync代码块执行完成之后,系统会自动的让程序释放占用的锁。Sync是由系统维护的,如果非逻辑问题的话话,是不会出现死锁的。

    在使用lock的时候,我们使用者需要手动的获取和释放锁。如果没有释放锁,就有可能导致出现死锁的现象。手动获取锁方法:lock.lock()。释放锁:unlock方法。需要配合tyr/finaly语句块来完成。

     

     

     

    展开全文
  • NS2网络模拟器的原理和应用 内容简介 本书要介绍的是由UC Berkeley设计、起初由VINT Project团队维护的一套网络仿真软件NS2(Network Simulator-Version 2,简称NS2)。NS2是一个面向对象的、用离散事件驱动的、利用...
  • NS2网络模拟器的原理和应用 内容简介 本书要介绍的是由UC Berkeley设计、起初由VINT Project团队维护的一套网络仿真软件NS2(Network Simulator-Version 2,简称NS2)。NS2是一个面向对象的、用离散事件驱动的、利用...
  • NS2网络模拟器的原理和应用 内容简介 本书要介绍的是由UC Berkeley设计、起初由VINT Project团队维护的一套网络仿真软件NS2(Network Simulator-Version 2,简称NS2)。NS2是一个面向对象的、用离散事件驱动的、利用...
  • NS2网络模拟器的原理和应用 内容简介 本书要介绍的是由UC Berkeley设计、起初由VINT Project团队维护的一套网络仿真软件NS2(Network Simulator-Version 2,简称NS2)。NS2是一个面向对象的、用离散事件驱动的、利用...
  • NS2网络模拟器的原理和应用 内容简介 本书要介绍的是由UC Berkeley设计、起初由VINT Project团队维护的一套网络仿真软件NS2(Network Simulator-Version 2,简称NS2)。NS2是一个面向对象的、用离散事件驱动的、利用...
  • 我是这样理解的,首先根据量子比特态叠加的原理,可以实现并行计算,比如只需用两个量子比特经过一个类似半加器的双量子比特门就可以同时计算出1+1、1+0、0+1、0+0四个结果而经典比特需要经过四次计算才能得到这四...
  • 计算机系统吞吐量是指流入,处理流出系统信息速率。它取决于信息能够多快地输入内存,CPU能够多快地取指令,数据能够多快地从内存取出或存入,以及所得结果能够多快地从内存送给一台外围设备。这些步骤中每...
        

    初次接触硬件相关的知识,还作为一门核心专业课,毕竟以前接触的大部分都是软件相关的。所以还是有些迷惑的,在此记录一下一些基本概念,一来方便复习,二来引起自己的重视



    **计算机的吞吐量: **

    计算机系统的吞吐量是指流入,处理和流出系统的信息的速率。它取决于信息能够多快地输入内存,CPU能够多快地取指令,数据能够多快地从内存取出或存入,以及所得结果能够多快地从内存送给一台外围设备。这些步骤中的每一步都关系到主存,因此,系统吞吐量主要取决于主存的存取周期。由于上述原因,采用双端口存储器可以增加主存的有效速度

    响应时间

    响应时间是指完成一个任务的全部时间,包括磁盘访问时间、存储器访问时间、I/O访问时间等。在多道程序时,CPU在一个程序处于I/O等待时会转去执行另外一个程序,这样就会减少等待时间

    利用率 

    表示在给定的时间间隔内,系统被实际使用的时间所占的比率,一般用百分比表示。

    处理机字长 
    指处理机运算器中一次能够完成二进制数运算的位数。当前处理机的字长有8位、16位、32位、64位。字长越长,表示计算的精度越高

    总线宽度 

    一般指CPU中运算器与存储器之间进行互连的内部总线二进制位数。

    存储器容量

    存储器中所有存储单元的总数目,通常用KB、MB、GB、TB来表示。  其中K=210,M=220,G=230,T=240,B=8位(1个字节)。 存储器容量越大,记忆的二进制数越多。

    存储器带宽

    存储器的速度指标,单位时间内从存储器读出的二进制数信息量,一般用字节数/秒表示

    主频/时钟周期  

    CPU的工作节拍受主时钟控制,主时钟不断产生固定频率的时钟,主时钟的频率(f)叫CPU的主频。度量单位是MHz(兆赫兹)、GHz(吉赫兹)。例如Pentium系列机为60MHz~266MHz,而Pentium 4升至3.6GHz。 主频的倒数称为CPU时钟周期(T),即T=1/f,度量单位是微秒、纳秒

    CPU执行时间 

    表示CPU执行一段程序所占用的CPU时间,可用下式计算:CPU执行时间 = CPU时钟周期数 × CPU时钟周期长

    冯·诺依曼体系结构
    计算机组成原理讨论的基础就是冯·诺依曼的计算机,其基本设计思想就是存储程序和程序控制,具有以下特点:
    (1)由运算器、存储器、控制器、输入设备和输出设备五大部件组成计算机系统,并规定了这五部分的基本功能。
    (2)采用存储程序的方式,程序和数据放在同一个存储器中,指令和数据一样可以送到运算器运算,即由指令组成的程序是可以修改的。
    (3)数据以二进制数码表示。
    (4)指令由操作码和地址码组成。
    (5)指令在存储器中按顺序存放,由指令计数器(PC)指明要执行的指令所在单元地址,一般按顺序递增,但可按运算结果或外界条件改变。
    (6)机器以运算器为中心,I/O设备与存储器间数据传送都通过运算器。


    展开全文
  • 麦肯锡 金字塔原理

    2019-04-26 15:32:18
    她曾经为美国、欧洲亚洲众多企业及哈佛大学、斯坦福大学等世界名校讲授金字塔原理40余年,受到社会各界人士一致好评。 ——· 本书金句 ·—— 1.对于读者来说,最容易理解行文顺序是:先理解主要、抽象...
  • 二八原理告诉人们:在投入和产出、努力与收获、原因和结果之间,普遍存在着不平衡关系。少投入,可以得到多产出;小努力,可以获得大成绩;关键少数,往往是决定整个组织产出、盈利和成败主要因素。 ...

    二八原理:你必须知悉的二八原理 无处不在的二八原理

    二八原理是一项对提高人类效率影响深远的法则。就是要让有限的时间产生出更多的成果。二八原理告诉人们:在投入和产出、努力与收获、原因和结果之间,普遍存在着不平衡关系。少的投入,可以得到多的产出;小的努力,可以获得大的成绩;关键的少数,往往是决定整个组织的产出、盈利和成败的主要因素。

    小时候老师经常教导说:“一分付出一分回报”。用数学的术语讲,就是付出和回报是呈线性相关的。很多人受此影响(可能是潜意识的影响),都习惯于平均分配 时间、精力来处理问题。结果就导致我前面所说的投入很多,回报很少。因此,要运用二八原理之前,你先得改变自己头脑中的思维定势,要以“不平等”的观点来 看周围的问题。(关于改变思维定势,关键还是靠自己,俺帮不上太大忙)

     

    QQ在通信与传输的一些知识

    QQ通信原理概述

     

    打工与创业一些内在的区别 打工是最愚蠢的投资

    1. 打工是靠自己的能力吃饭,创业是靠自己的智慧和思考吃饭;
    2. 打工是靠别人给自己的平台来展示能力,创业是靠自己的决心和眼光创造一个平台;
    3. 打工是做好自己的本分工作就好,创业是要思考体系运作的每一个环节;
    4. 打工时想用自己的专业知识吃饭,存钱养家,创业时候想的是如何利用社会资源来赚钱养活组织和员工;
    5. 打工的人一般都比较天真,认为辛苦和听话就可以长保无忧,创业的时候才知道市场的变幻简直就是日不可测,日不可知;
    6. 打工搞好上司和同事关系就可以生活,创业要搞好客户和社会方方面面的关系才能生存;
    7. 打工要看上司和老板的脸色,创业看社会消费者和主管行政部门的脸色和媒体的脸色;
    8. 打工碰到问题就是解决问题,创业就要想这个问题的根源是什么,怎么解决,还要怎么预防
    9. 打工碰到困扰自己的问题就回避,认为不能解决,创业碰到自己头疼的问题必须要勇敢面对,并积极的想办法解决;
    10. 打工碰到一些困难就打退堂鼓,想圈起行李走人或是逃避责任,而创业碰到困难必须要面对解决,把问题的最终解决在自己的手中;
    11. 打工就是做学生,只要学习成绩好就好,创业就是做老师,要教好学生,还有想办法搞好学生思想工作,做好外部职称评定工作;
    12. 打工就是上大学,越自由越好,最好不要管理,越散漫越开心,这就是性格和酷,能随心所欲是欢喜不尽,创业就是办大学,最好是军训和男女不能同居,唯恐出一点点差错,毁了所有的心血和劳动;
    13. 打工的时候,不希望有人来管理自己,觉得自己很了不起,一点点都看不起那些比自己低的人呢,创业的时候才知道,多么希望有个好的导师和善知识来指点 和帮助自己,越来越感觉到自己其实最没有什么了不起,所有比自己差的人都要尊重起来,因为没有任何人可以短缺;
    14. 打工的时候不希望求别人,不希望去打搅人,创业的时候天天都得去求别人,天天都得主动出击给朋友客户信息和短信,麻烦别人;
    15. 打工时候看到对方给的名片是某某跨国公司的某某总监,年薪XX万,心理就羡慕和自卑,极度的恭敬和小心,创业时候,只有一个人,也敢对自己人说,将来要培养这样的总监经理几十个;
    16. 打工的时候把恋人当恋人,双方互不干涉,当盖身的被子,给自己取暖遮寒,创业的时候把恋人老婆当宝贝和珍宝,唯恐她跑了自己事业不能成功,必须要双方保稳定和同心协力;
    17. 打工的人把希望寄托给伯乐,创业的人把希望交给自己
    18. 打工的人把梦想托付给机会,创业的人把生命交付给信念和上帝;
    19. 打工的人若是要能比喻就好比是家狗,创业的人是好比是野狼。这个世界上最终是狼比狗少,因为大部分人呢都愿意做狗。这是自然界的物种存在的现象;

    我曾经问过我的一个朋友为什么不去打工?他的回答很惊人:“说句得罪点,出去打工简直就是愚蠢浪费青春。为什么你一直是打工仔?因为你安于现状。因为你没 有勇气,你天生胆小怕事不敢另择它路。所以你是打工仔。因为你没有勇往直前,没有超越自我的精神。所以,你还是一个打工仔。你想过了改变你的生活,改变你 穷困的命运,但是你没有做。因为你不敢做。你害怕输,你害怕输的一穷再穷。你最后不敢想,还是在打工,所以你还是打工仔。。。你努力了,你拼搏了,你抱着 雄心大志。结果你没看到预想的成就。你放弃了。你只还是一个打工仔。。为什么你一直是打工仔?因为你随波逐流。近墨者黑,不思上进,分钱没得,死爱闹热, 所以你一直是打工仔。因为你畏惧你父母,你听信你亲戚,你没有主张,你不敢一个人做决定。所以,你只不过还是一直是一个打工仔。你观念传统,只想打工赚点 钱结婚生子,然后生病老死,走你父母一模一样的路,所以你一直是打工仔。你天生脆弱、脑筋迟钝只想做按班就部的工作,你想做无本的生意,你想坐在家里等天 上掉陷饼,所以你一直是一个打工仔。你抱怨没有机遇,机遇来到你身边的时候你又抓不住。因为你不会抓。所以你还是一直是打工仔。因为你的贫穷,所以你自 卑。你退缩了。你什么都不敢做。你只会给别人打工。所以你一直是打工仔。你没有特别技能,你只有使蛮力。你和你父母一样,恶性循环,所以,你一直永远的一 个一直在打工的打工仔。

    我没能力。错。不给自己机会去锻炼,又有谁一出生就有跑的能力?跳的能力?一毕业就是社会精英?一创业就马上成功?当别人很努力的学习,很努力的积累,努 力的找方法,而他每天就做了很少一点就觉得乏味,学了一些就觉得没意思,看了一些就不想看,跟自己跟别人说没兴趣学,然后半辈子过去,一事无成,然后牢骚 上天不给机会。能力是努力修来的,不努力想有能力,天才都会成蠢材,但努力,再笨的人也能成精英。

     

     

    我们的互联网正处在一个体验大于功能的时代 用户体验显得无比重要

    1. 一个产品能让你打电话 —— 是产品的功能特性,不是用户体验
    2. 一个产品能让你打电话,查找联系人时,还能看到对方头像和更有趣的信息 —— 这里已经涉及到了用户体验。

     

    程序员一生的学习与发展 从一生的角度看程序员的学习和发展

     

     我们可以讲,一个人的资本是可自由支配的时间,而目标产出是财务自由。至于怎么分配时间,《货殖列传》里有段话可以做点参考:

    是以无财作力,少有斗智,既饶争时,此其大经也。 

    (什么也没有的时候要靠力气赚钱,小有财富的时候要靠智慧赚钱,比较富裕的时候则要靠把握天时机会了。)

    短短十几年,程序员已走过了三代 软件开发十年小史

    第一代程序员大致上是基于DOS来做开发,常用的开发环境叫Turbo C。 那一代程序员应该是国际水准,大家玩的东西是一样的能鼓捣出WPS,UCDOS,KV300的人绝对是超一流选手,世界上的高手也就这个水平,至少不会差很多

    第二代程序员大致上是基于Windows来做开发的,常用的开发环境是VC,C++Builder,Delphi,VB来做开发的。

    第三代程序员不太好界定,但大致可以说是以Web为核心吧,更多的体现一种联通(网络)的特质。更多的会涉及Html,CSS,VBScript,Javascript,PHP这类东西。

    心理传染与恐怖的“模仿者效应” 维稳物理学

    连环自杀  骚乱的参与者是两个无辜者死亡而抗议,但事情发展的结果是,用纽约时报采访的其中一个十五岁少年的话说, “烧汽车很好玩”。那些打砸抢烧者已经不再介意为什么要上街抗议,他们只是为了参与而参与。

    说每个人其实都有一个参与骚乱的“阈值”。有些人可能只要看到街上有人抗议就会迅速加入进去并把抗议变成骚乱,而有些人则需要有很多人参与了他才会参与。 假设街上站着100个人,它们参加骚乱的阈值分别从0到99。比如其中阈值是3的人只要看到街上有3个人骚乱他就会参与。

    一些常见的错误建议,毕业生要注意 送给毕业生的一个学习建议

     

     

    毕业生刚进社会工作,经验欠缺,这时会有很多人给一些建议。先来看一些常见的误区

    1. 基础最重要,所以什么英语数学应该努力学好。
    2. 交际比技术更重要
    3. 刻苦勤奋最重要
    4. 多学几门

    我相信比你基础差,但是成功的也大有人在。

    很多习惯于补基础的人有一种思维,就是我对基础学好了,就自然而然懂得开发程序。事实不是如此。基础是一种素养,但是不代表你有基础就能灵活善用。大多数情况你会成为“书呆子”。

    书呆子的特点就是擅长“茴”字有四种写法的思维。你专注这些学术细节,你反而减少将其实用化的动力,你会觉得沾沾自喜:别人都不懂。

    这是一种应试的思维,我就懂最细微的地方,我的知识是最丰富的,并不去衡量知识的质量,而只是执着于数量。不去提高思想的层面,而只是疯狂的储存知识。

    我认为,基础只是提供“米”,让你可能去做出好饭,但是你觉得“米”越多,你的饭就越香,那就是大错特错。无米之炊当然不可能,但是也不要太过学究化。

    要善于应用,就要多实践。要将知识运用起来,就是要去解决实际的编程问题。

    实际的编程问题,和教程的差别在于,教程用最简易的方法去让你接触一种新的知识,是以学习知识为目的。而实际编程问题是以解决问题为目的。

    解决问题未必需要你掌握新的知识,而恰恰是让你运用旧的知识,以一种你没有接触过的方式去组织起来。在解决问题的过程中,你才能学会权衡利弊,学会如何不运用最复杂的最高难度的知识,也能漂漂亮亮的去完成任务。 

    建议,应该以一个你感兴趣的项目为追求,你会知道你想做什么,你会知道结果是怎样,只是你还没有把他做出来。

    不依赖复杂的专业知识,而只是依赖你的一般常识,而又有一定的深度的。

    只有围绕具体的问题,你才能将无边无际的知识做出筛选。你这辈子也不可能成为万事通。

    2.交际比技术重要或者技术比交际重要,这个都无所谓。这不过是两种价值观而已,值得注意的是他的潜台词:技术不重要,所以不用花心思。 

    3.世界上没有懒人,或说没有特别勤奋的人。说勤奋重要的目的在于:不求方法,不做辛苦的思维,盲目去灌输知识。说到底是一种惰性! 

    4.讲:多学几门的人,在于它缺乏核心支柱,如第一项所分析的,没有中心的人,知识都是扁平化的,对于他来说都一样。而有中心的人,多学几门,和专 注一门是不矛盾的,因为有主次的分别。如果你觉得什么都想学,并不是你以前学的那种不好,而是你还没找到自己喜欢的项目,没有自己的价值取向,就算你学会 10种语言,你还只是“学会”,而你永远写不出好的文字。与其忙碌的平行学习,做这些无用功,不如加深对当前所学知识的认识。

    善用思维导图来整理发散的思维 思维整理术

    思维导图的使用范围

    除了用来整理创意外,思维导图还能用到生活中来。

    • 读书笔记:看书很多时候会看过就忘记了,如果能通过思维导图记录,那么就能根据线索勾出 很多回忆。也能帮你从脑中建立起思维框架。
    • 项目、目标管理:对于自己、项目的计划也可以选用思维导图整理,先对项目进行分析,一项项罗列出来,划分他们各自的重要性,那么接下来的工作计划该怎么实施就很清晰了。

    思维导图就是一幅幅帮助你了解和掌握大脑工作原理的使用说明书,它能增强你的记忆力、立体思维能力和你的总体规划能力。

    二八原理:软件开发中的二八原理 Do not work hard, work smart!

    需求分析在整个开发过程中占的工作量不大,但是产生的影响巨大(这又是一个二八原理的例子)。既然需求分析如此重要,照理说应该安排最强的人来搞。但实际情况往往不是如此:很多公司负责需求分析的人并不胜任这项工作

    项目管理

    如果你是个项目经理,在排项目计划时,就得尽量优先安排重点功能的开发/测试,而且要安排能力强的人员来完成。按照我以前的做法,重点功能排计划至 少得留出1/3的时间余量,以防万一(事实证明,几乎每个稍大点的项目都会出现万一)。至于非重点功能,尽量排到后面,安排能力一般的人开发/测试。

    然后,在项目进行过程中,肯定要有定期的例会。作为项目经理,你应该主要关注重点功能的进度情况和风险情况。

    一旦项目有延期的风险,就从非重点功能开始裁减(俗称砍功能)。由于是裁减非重点功能,不至于产生致命的影响。

    设计界面

    设计界面时,你得保证所有的常用功能都放在显著的位置(比如工具条);还得保证它们用起来方便(比如提供快捷键和右键菜单支持)。

    对于卖点,它不一定是常用功能,它的目的是激起用户的购买欲望和使用欲望。因此你要把它们设计得比较酷,有噱头。

    对于利益相关的功能,大部分情况下都是侧重于业务逻辑实现。如果它既不是常用功能、也不是卖点,那么界面设计方面倒不一定要额外花大力气。

    其它的非重点功能,只要按照常规方法设计,不用花太大精力。

    编写代码

    你首先得用主要精力完成上述所说的重点功能,而且要保证它们的代码质量尽可能好,尽可能方便维护(重点功能往往是经常有需求变更,经常被修改的)。

    对于重点功能中的“常用功能”,要保证时间性能够好(能快速响应)。对于"用户利益相关的功能",要保证bug尽可能少(尤其是安全性、稳定性、健壮性的bug)。

    至于其它的非重点功能,只要不出明显bug,有点小缺陷无伤大雅。

    测试

    如果你是个测试人员,你同样要把主要精力用于测试那些重点功能。对于“用户利益相关的功能”,多进行一些健壮性测试、稳定性、安全性等测试(比如测试保存大文件是否会出错)。对于常用功能,主要进行易用性和性能测试(比如拷贝、粘贴是否易用)。

    至于其它功能,只要进行普通的测试,保证它不出现明显和严重bug即可。要知道Windows 2000发布的时候,尚遗留上千个未修复的bug(当然都是低优先级的),微软不也照样发布。

    产品演示

    有些软件开发完之后,会搞一些Demo进行宣传。如果你是负责进行Demo的人,你肯定要把主要的Demo时间用来秀软件的卖点,这样给客户的印象最深刻,效果最好;至于非卖点的功能,都未必要提及。

    二八原理:员工的三种类型 团队建设需要知道的二八原理

    按照二八原理,优秀的员工在整个行业中大约占5%-20%;同理,糟糕的员工也大约占类似的比例。剩下那60%-90%的员工,我们称之为平庸的员工(说好听点叫普通的员工)

    优秀 平庸 糟糕

    二八原理:人才招聘中的二八原理 如何找到优秀的软件开发人才

    先确定比例

    在之前的博文里,我们已经介绍了优秀员工的稀缺性(只占5%-20%)。所以你不要指望团队里所有人都是优秀员工,这不现实(尤其是在中国)。如果你有这种企图,那你就会陷入完美主义的焦油坑。

    另一方面,如果整个团队中优秀员工的比例太低(甚至趋向于0),那也非常棘手。这样的团队效率会很差,基本上干不了太多实事。而且要改良这样的团队,难度也是大大滴。

    所以,根据我个人的经验,让团队中优秀人员的比例略高于业界平均水平是比较合适的(大概在1/5到1/3)。只要保证大约这个比例的人是优秀的就差不多了。

    再确定顺序

    比例确定好了,后面就是招聘顺序的问题。一定要先把优秀的人搞到手,再去招平庸的人。这个顺序很重要。

    以盖房子来打个比方(我对盖楼不熟,说错了别丢臭鸡蛋):盖房子要先把钢筋水泥框架搭好,后面再来沿着框架砌墙。只要水泥框架做的尺寸不差,那么砌墙也错不到哪儿去;反之,如果框架搭歪了(甚至搭错了),墙就很难砌好,房子也就成危房了。

    从这个例子可以看出:团队中的优秀人员就相当于团队栋梁。一定要先搞定栋梁,后面的事情就好办多了。

    如何找到优秀人才

    1. 通过朋友/熟人介绍

    2. 通过网上社区(比如BBS、邮件列表、SNS)

    3. 通过挖墙角

    二八原理:员工激励中的二八原理 如何发挥员工积极性

    在知识密集型的企业内,激励就显得非常重要。企业要通过激励手段,让员工觉得工作很爽、很high,然后干活就会很主动、很自觉。有效的激励措施是双赢的,不但对企业有好处(提高了产出和效率),而且对员工也有好处(得到了所需要的东西,后面会说到)。

    激励的对象(应该激励哪些人)

    在这三种人当中,我们应该把大部分(80%左右)的激励放在优秀人员身上,小部分(20%左右)用于平庸员工,效果才会最好

    不过我观察下来,发现很多管理岗位的同学却是反其道而行之,总是花很多力气妄图改变糟糕员工的状态,到头来效果往往不甚理想。我猜测这有可能是受了学校老 师的影响。记得以前在中小学的时候,老师们总是花很多精力在“差等生”身上。但是大伙儿要明白,公司和学校有一个本质的区别:公司是商业机构,以盈利为目 的;而学校则不是。所以,有些学校的做事方式,在公司中是不宜使用的。

    激励的方法(应该选哪种激励方式)

    1. 经济利益

    要了解某员工是否看重钱,相对比较容易。我一般在面试新人时就可以看出来了。那些在面试中对薪水、福利、待遇打听特详细的家伙,多半比较看重经济利益。

    使用这种激励方式的难点在于搞好平衡。假设有两个同样优秀的人,一个看重钱,另一个不看重。这时候,你不能让两人的经济利益相差太大。否则就会丧失公信力。

    2. 名誉 虚荣心

    3. 尊重

    4. 成就感

    5. 权力

    6. 个人能力  就是给予某员工学习/锻炼的机会(比如培训),使其个人能力获得提升。这个方式对于爱学习、注重个人发展的家伙,效果较好。

    激励方式总结

    说到这里,几种常见的激励方式也聊得差不多了,我稍微总结一下。对于上面提到的名誉、尊重、成就感(其实还有认同感、归属感......限于篇幅没 提及)这几种方式,属于心理学层面的激励,相对来说激励成本较低。而且,大伙儿要记住:80%左右的员工是偏感性的,心理学层面的激励对感性的人挺有效 果。

    另外,我要提醒一下,用权力的方式来激励是有一定危险性的。一定要确保被授予权力的人确实有相应的能力,否则产生的后患就如滔滔江水,绵绵不绝。

    对任何一个被激励员工,都需要把上述几种激励方式配合使用。要明确员工最想要的是什么,然后再决定哪种方式为主、那种方式为辅。

     

    保持自己一直处在“学习区”才能持续进步 成年人的思想还能进步么?

    赵本山就一直都在不停的进步。 郑智化在过去十多年内就没有任何进步。

    我认为阻碍人进步的因素有两个。

    第一个是早期的辉煌会把人的思想留住。有些人曾经在比如说大学时代是一个很优秀的学生,进入社会之后一旦受到挫折,他的思想就会永远用来回忆大学时光。梁启超说,“老年人常思既往,少年人常思将来”。一个人一旦开始回忆,他基本上就会停止进步。

    第二个因素更普遍,需要详细说说。心理学认为人对于外部世界的认识可以分为三个区域:舒适区(comfort zone) ,学习区(learning zone),和恐慌区(panic zone)。

    比如说我们看一本书,如果这本书所说的内容都是我们所熟悉的,完全符合我们已有的世界观和人生观,这本书就在我们的舒适区内。但如果这本书说的内容 与我们原有的世界观和人生观不符,但是我们思考之后仍然能够理解接受,那么这本书就在我们的学习区内。如果这本书我们根本就理解不,那么就是在恐慌区。

    心理学研究说,只有在“学习区”内做事,人才会进步。绝大多数人工作以后干的事情都是他的舒适区内的某种意义上的重复劳动,这怎么能进步呢?

    金庸小说和各种消遣读物都在舒适区。一个很有意思的现象是很多三十多岁的人仍然一天到晚谈金庸。其实这些东西都应该在大学毕业以前看完就没必要再提。三十以后还整天谈金庸的人,可能四十岁以后唯一的谈资就是他们的孩子。

    现代社会分工的一个特点是尽量把人往他自己的舒适区里分。你想干有挑战的工作,你老板却只想给你你胜任的工作。所有人都想永远挑战自我,但实际生活中人们 主要的时间都在做一些驾轻就熟的事情。随着年龄的增长,一个人获得挑战自我的机会会越来越少。这往往并不是年龄歧视,而更多的是市场合理调配的必然结果。 只有那些有特殊机遇的人才能不断尝试新的生活。

    可能很多人会说赵本山活的那么累有什么可值得学习的?但我说的进步是思想上的。一个人的进步不见得非得从演员变商人。那些最牛B 的科学家一生都是科学家,但他们一生都在不断的进步。他们的世界观和人生观不是定死的,而是活的,不停地演化。

     

    中国SNS三种不同的社交文化 浅谈社交文化

    微博、QQ和人人网。个人角度来看,三个不同的场景开发出的产品代表三种不同的社交文化。分别是:拉、推和摆。大家能猜一下三个产品分别对应的的社交文化吗?

    1. 拉  大多数情况下,QQ好友都是自己认识,其中大多数见过面。但是,在QQ中,你需要和对方聊天,语音或者视频聊天时,你必须主动发起,或者对方主动发起。这里我用拉来表示这个行为,就是说,你一个人,你要和对方聊天,你需要把对方“拉”进来,然后进行对话。然后时间久了,大家都不想主动。

    比如说一般的好友,同学,同事。你上了QQ,你看他/她也在线,你需要鼓起勇气,点开ta的头像,然后发起对话。并且你不知道对方是否对你要说的话题感兴趣。所以时间久了,大家上QQ就隐身

    2. 摆 微博一方面主要因为名人多,另一方面草根人多。大家都可以去关注一个人,去评论一个人的微博,当然也可以转发微博。形成了一个庞大的交互网络,大家畅所欲言。

    微博属于“摆”的文化。特别是名人,这里名人已经不是小时候大家眼中的明星或者歌手,演员之类的了。当然大家可能也关注的。但是像薛蛮子,李开复,郑克强 (南昌大学前党委书记)已经慢慢积累了名气和公信力,慢慢收到的大家的认可。大家也把他们当做名人,关注他们发的微博,关注他们在微博中阐述的生活的哲理 和对某件事的看法或者思考。而这一切都可以被广大的微博人看到,然后你加上你的思考,得出一个完美的结果。所以这也是微博如此火热的原因。大家把自己的观点或者态度摆出来,然后由大家去评论或者交流。这好比菜市场,大家把自己的家的菜摆出来,让顾客选购的。当 然这些菜也就是博主的微博了,虽然只有140个字,但是大多数是他们自己写的,也就是他们种的菜,所以大家有义务去保护它。在微博禁忌进行人身攻击。要不 你和我一样,只查看或者转发微博。

    3. 推

    人人网的社交文化是:推。超市购物

     

    转载于:https://www.cnblogs.com/dqxu/p/4925555.html

    展开全文
  • Spark基本原理

    2018-07-13 21:47:00
    Spark比Hadoop快的原因:Hadoop在MapReduce后会将结果写入磁盘,第二次MapReduce再取出,Spark去除了两次运算间多余IO消耗,直接将数据缓存在内存中。 Spark运行原理 提交作业->启动Driver进程->申请资源,...

    Hadoop和Spark关系

    Spark比Hadoop快的原因:Hadoop在MapReduce后会将结果写入磁盘,第二次MapReduce再取出,Spark去除了两次运算间多余的IO消耗,直接将数据缓存在内存中。

    Spark运行原理

    提交作业->启动Driver进程->申请资源,即Executor进程->作业代码分拆为stage执行->从上一次stage拉取所需key执行,直至任务完成->保存到Executor进程的内存或磁盘

    Spark基本运行原理

    我们使用spark-submit提交一个Spark作业之后,这个作业就会启动一个对应的Driver进程。根据你使用的部署模式(deploy-mode)不同,Driver进程可能在本地启动,也可能在集群中某个工作节点上启动。而Driver进程要做的第一件事情,就是向集群管理器(可以是Spark Standalone集群,也可以是其他的资源管理集群,美团•大众点评使用的是YARN作为资源管理集群)申请运行Spark作业需要使用的资源,这里的资源指的就是Executor进程。YARN集群管理器会根据我们为Spark作业设置的资源参数,在各个工作节点上,启动一定数量的Executor进程,每个Executor进程都占有一定数量的内存和CPU core。

    在申请到了作业执行所需的资源之后,Driver进程就会开始调度和执行我们编写的作业代码了。Driver进程会将我们编写的Spark作业代码分拆为多个stage,每个stage执行一部分代码片段,并为每个stage创建一批Task,然后将这些Task分配到各个Executor进程中执行。Task是最小的计算单元,负责执行一模一样的计算逻辑(也就是我们自己编写的某个代码片段),只是每个Task处理的数据不同而已。一个stage的所有Task都执行完毕之后,会在各个节点本地的磁盘文件中写入计算中间结果,然后Driver就会调度运行下一个stage。下一个stage的Task的输入数据就是上一个stage输出的中间结果。如此循环往复,直到将我们自己编写的代码逻辑全部执行完,并且计算完所有的数据,得到我们想要的结果为止。

    Spark是根据shuffle类算子来进行stage的划分。如果我们的代码中执行了某个shuffle类算子(比如reduceByKey、join等),那么就会在该算子处,划分出一个stage界限来。可以大致理解为,shuffle算子执行之前的代码会被划分为一个stage,shuffle算子执行以及之后的代码会被划分为下一个stage。因此一个stage刚开始执行的时候,它的每个Task可能都会从上一个stage的Task所在的节点,去通过网络传输拉取需要自己处理的所有key,然后对拉取到的所有相同的key使用我们自己编写的算子函数执行聚合操作(比如reduceByKey()算子接收的函数),这个过程就是shuffle。

    当我们在代码中执行了cache/persist等持久化操作时,根据我们选择的持久化级别的不同,每个Task计算出来的数据也会保存到Executor进程的内存或者所在节点的磁盘文件中。

    因此Executor的内存主要分为三块:第一块是让Task执行我们自己编写的代码时使用,默认是占Executor总内存的20%;第二块是让Task通过shuffle过程拉取了上一个stage的Task的输出后,进行聚合等操作时使用,默认也是占Executor总内存的20%;第三块是让RDD持久化时使用,默认占Executor总内存的60%。

    Task的执行速度是跟每个Executor进程的CPU core数量有直接关系的。一个CPU core同一时间只能执行一个线程。而每个Executor进程上分配到的多个Task,都是以每个Task一条线程的方式,多线程并发运行的。如果CPU core数量比较充足,而且分配到的Task数量比较合理,那么通常来说,可以比较快速和高效地执行完这些Task线程。

    RDD

    • RDD是Spark提供的核心抽象,全称为Resillient Distributed Dataset,即弹性分布式数据集;
    • RDD最重要的特性就是,提供了容错性,Spark可以重算
    • RDD存放在内存中,但是内存不足时可以写入磁盘缓存(弹性)
    1. RDD分布式是什么意思?

      一个RDD,在逻辑上抽象地代表了一个HDFS文件;它实际上是被分为多个存放在spark不同节点上的分区。比如说,RDD有900万数据。分为9个partition,9个分区。

    2. RDD弹性是什么意思,体现在哪一方面? 容错性体现在哪方面?

      a.RDD自动进行内存和磁盘之间权衡和切换的机制,就是RDD的弹性的特点所在。b.当它发现自己的数据丢失,会自动从自己来源的数据进行重计算,这一切对用户是完全透明的。

    shuffle和stage

    shuffle是划分DAG中stage的标识,同时影响 Spark 执行速度的关键步骤。如下 DAG 流程图中,分别读取数据,经过处理后 join 2个 RDD 得到结果:

    20161103173806275

    RDD 的Transformation函数中,又分为窄依赖(narrow dependency)和宽依赖(wide dependency)的操作.窄依赖跟宽依赖的区别是是否发生shuffle(洗牌) 操作.宽依赖会发生shuffle操作. 窄依赖是子 RDD的各个分片(partition)不依赖于其他分片,能够独立计算得到结果,宽依赖指 RDD 的各个分片会依赖于父RDD 的多个分片,所以会造成父 RDD 的各个分片在集群中重新分片。例子:

    // Map: "cat" -> c, cat
    val rdd1 = rdd.Map(x => (x.charAt(0), x))
    // groupby same key and count
    val rdd2 = rdd1.groupBy(x => x._1).
                    Map(x => (x._1, x._2.toList.length))

    第一个Map操作将 RDD 里的各个元素进行映射, RDD 的各个数据元素之间不存在依赖,可以在集群的各个内存中独立计算,也就是并行化,第二个 groupby之后的 Map 操作,为了计算相同 key 下的元素个数,需要把相同 key 的元素聚集到同一个 partition 下,所以造成了数据在内存中的重新分布,即 shuffle 操作.shuffle 操作是 spark中最耗时的操作,应尽量避免不必要的 shuffle.

    开发调优

    • 避免创建重复的RDD
    • 尽可能复用同一个RDD
    • 对多次使用的RDD进行持久化

    资源参数调优

    num-executors

    • 参数说明:该参数用于设置Spark作业总共要用多少个Executor进程来执行。Driver在向YARN集群管理器申请资源时,YARN集群管理器会尽可能按照你的设置来在集群的各个工作节点上,启动相应数量的Executor进程。这个参数非常之重要,如果不设置的话,默认只会给你启动少量的Executor进程,此时你的Spark作业的运行速度是非常慢的。
    • 参数调优建议:每个Spark作业的运行一般设置50~100个左右的Executor进程比较合适,设置太少或太多的Executor进程都不好。设置的太少,无法充分利用集群资源;设置的太多的话,大部分队列可能无法给予充分的资源。

    executor-memory

    • 参数说明:该参数用于设置每个Executor进程的内存。Executor内存的大小,很多时候直接决定了Spark作业的性能,而且跟常见的JVM OOM异常,也有直接的关联。
    • 参数调优建议:每个Executor进程的内存设置4G~8G较为合适。但是这只是一个参考值,具体的设置还是得根据不同部门的资源队列来定。可以看看自己团队的资源队列的最大内存限制是多少,num-executors乘以executor-memory,是不能超过队列的最大内存量的。此外,如果你是跟团队里其他人共享这个资源队列,那么申请的内存量最好不要超过资源队列最大总内存的1/3~1/2,避免你自己的Spark作业占用了队列所有的资源,导致别的同学的作业无法运行。

    executor-cores

    • 参数说明:该参数用于设置每个Executor进程的CPU core数量。这个参数决定了每个Executor进程并行执行task线程的能力。因为每个CPU core同一时间只能执行一个task线程,因此每个Executor进程的CPU core数量越多,越能够快速地执行完分配给自己的所有task线程。
    • 参数调优建议:Executor的CPU core数量设置为2~4个较为合适。同样得根据不同部门的资源队列来定,可以看看自己的资源队列的最大CPU core限制是多少,再依据设置的Executor数量,来决定每个Executor进程可以分配到几个CPU core。同样建议,如果是跟他人共享这个队列,那么num-executors * executor-cores不要超过队列总CPU core的1/3~1/2左右比较合适,也是避免影响其他同学的作业运行。

    driver-memory

    • 参数说明:该参数用于设置Driver进程的内存。
    • 参数调优建议:Driver的内存通常来说不设置,或者设置1G左右应该就够了。唯一需要注意的一点是,如果需要使用collect算子将RDD的数据全部拉取到Driver上进行处理,那么必须确保Driver的内存足够大,否则会出现OOM内存溢出的问题。

    spark.default.parallelism

    • 参数说明:该参数用于设置每个stage的默认task数量。这个参数极为重要,如果不设置可能会直接影响你的Spark作业性能。
    • 参数调优建议:Spark作业的默认task数量为500~1000个较为合适。很多同学常犯的一个错误就是不去设置这个参数,那么此时就会导致Spark自己根据底层HDFS的block数量来设置task的数量,默认是一个HDFS block对应一个task。通常来说,Spark默认设置的数量是偏少的(比如就几十个task),如果task数量偏少的话,就会导致你前面设置好的Executor的参数都前功尽弃。试想一下,无论你的Executor进程有多少个,内存和CPU有多大,但是task只有1个或者10个,那么90%的Executor进程可能根本就没有task执行,也就是白白浪费了资源!因此Spark官网建议的设置原则是,设置该参数为num-executors * executor-cores的2~3倍较为合适,比如Executor的总CPU core数量为300个,那么设置1000个task是可以的,此时可以充分地利用Spark集群的资源。

    spark.storage.memoryFraction

    • 参数说明:该参数用于设置RDD持久化数据在Executor内存中能占的比例,默认是0.6。也就是说,默认Executor 60%的内存,可以用来保存持久化的RDD数据。根据你选择的不同的持久化策略,如果内存不够时,可能数据就不会持久化,或者数据会写入磁盘。
    • 参数调优建议:如果Spark作业中,有较多的RDD持久化操作,该参数的值可以适当提高一些,保证持久化的数据能够容纳在内存中。避免内存不够缓存所有的数据,导致数据只能写入磁盘中,降低了性能。但是如果Spark作业中的shuffle类操作比较多,而持久化操作比较少,那么这个参数的值适当降低一些比较合适。此外,如果发现作业由于频繁的gc导致运行缓慢(通过spark web ui可以观察到作业的gc耗时),意味着task执行用户代码的内存不够用,那么同样建议调低这个参数的值。

    spark.shuffle.memoryFraction

    • 参数说明:该参数用于设置shuffle过程中一个task拉取到上个stage的task的输出后,进行聚合操作时能够使用的Executor内存的比例,默认是0.2。也就是说,Executor默认只有20%的内存用来进行该操作。shuffle操作在进行聚合时,如果发现使用的内存超出了这个20%的限制,那么多余的数据就会溢写到磁盘文件中去,此时就会极大地降低性能。
    • 参数调优建议:如果Spark作业中的RDD持久化操作较少,shuffle操作较多时,建议降低持久化操作的内存占比,提高shuffle操作的内存占比比例,避免shuffle过程中数据过多时内存不够用,必须溢写到磁盘上,降低了性能。此外,如果发现作业由于频繁的gc导致运行缓慢,意味着task执行用户代码的内存不够用,那么同样建议调低这个参数的值。
      ***

      http://blog.csdn.net/ap0810217/article/details/55195962
      https://tech.meituan.com/spark-tuning-basic.html
      http://blog.csdn.net/databatman/article/details/53023818

    转载于:https://www.cnblogs.com/mengnan/p/9307554.html

    展开全文
  • 给出应用条件,并分析了产生误差的原因和最大误差范围。同时,对这一方法应用范围进行了拓展,给出了输入方波不 对称时,对占空比限制的关系式。我们用软件仿真和试验结果验证了结论.并介绍了我们如何将D触发器...
  • Spark基本架构及原理

    2019-01-10 15:43:00
    Hadoop Spark 的关系 Spark 运算比 Hadoop MapReduce 框架快的原因是:  因为 Hadoop 在一次 MapReduce 运算之后,会将数据运算结果从内存写入到磁盘中,第二次 Mapredue 运算时在从磁盘中读取数据,所以其...
  • 第7章 使用ER到关系的映射EER到关系的映射进行关系数据库设计 147 7.1 使用ER到关系的映射进行关系数据库设计 147 7.1.1 ER到关系的映射算法 147 7.1.2 ER模型构造映射的讨论总结 151 7.2 EER...
  • 事务处理原理 第2版

    热门讨论 2012-12-30 10:49:38
    数据库系统确保每个事务作为一个整体而执行,确保每个事务不受其他事务干扰,确保每个事务生成的结果在硬件软件发生故障情况下能够保留下来。此行为是通过锁定、写日志、通信协议复制等技术实现。这些技术...
  • 第二部分讲述面向数据库概念、语言、设计及对象-关系和扩展-关系系统;第三部分主要描述了数据库安全客户-服务器体系结构;第四部分简要介绍了xml、数据挖掘数据仓库等几种新兴技术。  本书是高等院校计算机...
  • 常见芯片故障现象1994-06-24■逻辑功能错我们可以把各种芯片看成是一个具有一定功能“黑盒子”,对这个黑盒子内部结构工作原理可以不作过多了解,只要知道它输入信号与输出信号之间对应逻辑关系就行了...
  • 第六题答案:管理学的研究对象:各种管理工作中普遍适用的原理与方法。管理学的研究方法:归纳法、试验法、演绎法 一:归纳法通过对客观存在的一系列典型事物(经验)进行观察,从掌握典型事物的典型特点、典型关系...
  • 数据集成原理带书签可复制 pdf

    热门讨论 2015-02-07 12:58:47
    1.2.3 社会管理原因 22 1.2.4 设定预期 23 1.3 数据集成架构 23 1.3.1 数据集成系统组成部分 23 1.3.2 数据集成实例 25 1.4 全书概览 28 参考文献注释 29 第一部分 数据集成技术基础 31 第2章...
  • 上一讲中我们介绍过,卡尔曼滤波是可以得到解析解,而原因是由于ztz_tzt​zt−1z_{t-1}zt−1​之间满足线性关系,且变量服从高斯分布。我们回想一下,正是因为高斯分布完美特性,导致了我们可以拿出滤波结果的...
  • 由于各种原因,回归系数可能不稳定。回归分析要求因变量Y为正态分布...分位数回归(Quantile regression, QR回归),其原理是将数据按因变量进行拆分成多个分位数点,研究不同分位点情况下时回归影响关系情况。总结...
  • 打印结果是3 ,并且静态代码块不会执行,原因是x是常量,在编译期就会放到MyTest8常量池当中,然后FinalTestMyTest8就没有任何关系了,可以通过反编译的结果看到。 把xfinal去掉之后,静态代码块会打印,再去...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 299
精华内容 119
关键字:

原因和结果关系的原理