Eric Chang's Blog


  • 首页

  • 归档

  • 分类

  • 标签

  • 生活

  • 关于

  • 搜索

MapReduce过程名词解释

发表于 2015-04-01 | 分类于 hadoop |

引言

  • 在mapreduce的运行过程中,有很多精巧的机制保证整个作业运行在高效率、相对公平和高容错性的环境下。
  • mapreduce运行过程中(特别是shuffle过程中)有很多容易混淆的名词。本文通过罗列这些名词的含义来对这些过程加以解释说明。

名词解释

名词 含义
shuffle 将map的输出作为输入传给reducer的过程的总称;
spill map的结果从内存往磁盘写数据的过程;中文译为“溢写”,但并不一定是当内存溢出后才写入磁盘;
partitioner 指partitioner接口,作用是根据key或value及reduce的数量决定当前的这对输出数据应交给哪个reduce task处理;
sort 指快速排序;当map内存占用达到一定比例时,需对于内存中的key做sort,以便combiner过程;
combiner 将一个map内存中具有相同对的value加起来,以减少spill到磁盘的数据量;将已经写到磁盘的文件进行上述动作也称为combiner;
merge 若map产生的数据量较大,一个map会有多个spill过程从而在磁盘中产生多个spill文件。将磁盘中多个spill文件合并成一个的过程称为spill;merge的本质是合并文件的过程,具有相同key的value并没有在merge过程中相加,而是在combiner中实现;

MapReduce过程详解

发表于 2015-04-01 | 分类于 hadoop |

引言

  • mapreduce的过程看似简单,其实,要保证数据处理过程中的高效率、高容错性,mapreduce中有很多精巧的机制值得我们学习和参考。本文主要介绍mapreduce的过程以及其中涉及到的重要的思想。

Mapreduce总体过程

  • 作业启动
  • 作业初始化
  • 作业/任务调度
  • Map任务执行
  • shuffle
  • Reduce任务执行
  • 作业完成

作业启动

  • 用户编写mapreduce程序,并且打成jar包,将jar包放在本地集群,将输入数据放在HDFS上面;
  • 用户执行”hadoop jar“命令,启动作业;
  • JobClient是大boss,他收到任务后,向”业务主管“JobTracker申请新的作业ID,YARN界面上显示的ID即job ID;
  • JobClient检查输入输出路径、检查这个路径的权限等,如果一切正常则开始下一步;

作业初始化

  • JobTracker可能会收到JobClient不同作业的请求,维护一个队列处理这些请求,交由作业调度器调度作业(见【附录–作业调度机制】);
  • 分片数量由用户指定(见【附录–map数量的确定】),分片数量等于map数量,JobTracker根据map数量创建一批map任务;

作业/任务调度

  • map任务分配是被动的而不是主动的。TaskTracker启动后,通过心跳和JobTracker保持联系并查询是否有任务可做,如果有任务则被分配任务;
  • 每个TaskTracker有固定数量的map任务槽和reduce任务槽若干个,分别用来接收map和reduce任务,系统会自动优先填满map任务槽,待map任务槽被填满后才会被分配reduce任务(因为map的优先级总是高于reduce);

Map任务执行

  • 某个TaskTracker领取map任务;
  • 这个TaskTracker将作业的jar包文件和相关配置文件复制到本地工作目录下(传输jar包而不传输数据的原则,代码靠近数据的原则);
  • TaskTracker启动单独的JVM运行这个map任务;
  • map的输出结果中相同的key不一定在一块,为了下面的combine过程简洁,这里对map输出结果中的key进行快速排序(sort过程);
  • map任务的结果存入内存,并在内存有限的情况下定期写入磁盘(spill过程),将某一个map的输出的相同的key的value合并(即combine过程),spill与combine经常交替进行;
  • 多次spill会产生许多小文件在磁盘中,merge过程将他们合并;
  • TaskTracker和JobTracker定期通信,报告进度;

shuffle

  • map的输出是(key, value)对(下面简称KV对);
  • 将某一个map的输出的相同的key的value合并,即combine过程;
  • 决定这个map的结果给哪一个reduce:通过hash(key)mod(reduce数目)计算出partition的ID,上述的key就被分配给这个partition;一个partition中可以有多个key,但是同一个key只存在于一个partition中;一个partition对应一个reduce;
  • 有的partition负载可能很重,有的则很轻,需要通过一定的协调机制平衡负载(比如根据自己的需求重写partition函数);
  • partiton作为reduce的输入,每个reducer获得的是每个Key在在每个mapper上输出的结果,它需要使用reduce函数把相同Key的不同mapper的输出统计在一起。

Reduce任务执行

  • 在部分map任务执行完后(不用等到所有map任务结束)JobTracker开始分配reduce任务到TaskTracker;
  • TaskTracker启动单独的JVM运行这个reduce任务;
  • TaskTracker从远地下载中间结果文件到本地(指partition文件、一个partition对应一个reduce),为reduce任务真正开展做准备,但不会开始执行reduce()函数;
  • 待所有的map任务都完成以后,JobTracker通知所有的TaskTracker开始做reduce任务;
  • TaskTracker和JobTracker定期通信,报告进度;

作业完成

  • 每个TaskTracker都将reduce任务的结果文件放到HDFS的临时文件中;
  • 当所有reduce任务完成后,这些临时文件会合并成最终输出文件放在用户指定的输出目录下;
  • JobTracker收到所有任务的完成通知后,并通知JobClient作业已经完成,YARN管理系统会显示已完成的信息;

附录一:map数量的确定

  • 用户通过指定期望的map数和期望的分片最小值来调控map数量,具体是系统通过下面几步算出map个数;

map num

附录二:作业调度机制

  • JobTracker可同时调度多个作业任务,具体有如下几种调度机制:
  • 先进先出调度机制:设定VERY_HIGH、HIGH、NORMAL、LOW、VERY_LOW五个等级的优先级,任务优先级高的先执行,如果优先级相同,先进入调度器的任务先执行;
  • 公平调度机制:JobTracker掌管着所有的资源,平均为进入队列的任务分配资源,支持资源抢占;
  • 能力调度器:如果一个任务所需资源多,就为他多分配资源,反之少分配资源;

###附录三:JobTracker容错机制

  • 心跳机制:JobTracker和TaskTracker定期通信(通过mapred.tasktracker.expiry.interval设定间隔时间,默认为10分钟),TaskTracker报告任务完成情况;未正常返回的任务,JobTracker会重新分配TaskTracker去完成;
  • 黑名单机制:每个job维护一个TaskTracker黑名单,一旦TaskTracker无法完成任务即进入黑名单,JobTracker不会再给他分配任务;
  • 集群黑名单:如果一个TaskTracker进入job黑名单的次数过多,或者这个TaskTracker进入job黑名单的次数明显超过平均进入次数,则将其加入集群黑名单,以后不再向其分配任务;
  • 检错机制:如果JobTracker发现某个TaskTracker不正常或者完成任务速度明天低于平均水平,JobTracker会将这个任务另外交由另外一个TaskTracker去完成,如果这个TaskTracker完成的非常快,则JobTracker认为原来的TaskTracker有问题,遂kill原TaskTracker进程,并且判断是否将其加入黑名单;

退出Docker后如何再次进入Hadoop运行环境

发表于 2015-03-12 | 分类于 hadoop |

引言

  • docker是单机上模拟集群的好工具。它既具有虚拟机的特性,同时,由于它不包含操作系统内核,docker比传统的的虚拟机显得更加轻量级。
  • 本文主要讲述了在退出docker后,如何再次进入hadoop运行环境;

docker再次进入hadoop运行环境的几个步骤

  • 启动docker;
  • 用secureCRT连接192.168.59.103,用户名docker,密码tcuser(官方默认初始密码);
  • 用docker images可以看到已经安装的master、slave1、slave2三个镜像;
  • 用下面的命令启动三个镜像的容器:
    • docker start master
    • docker start slave1
    • docker start slave2
  • 用docker ps可以看到已经启动的三个容器;
  • 分别开三个选项卡,然后分别用下面命令进入相应容器(首次建立运行环境时已经配置过hosts文件,所以这里不用写ip):
    • docker attach master
    • docker attach slave1
    • docker attach slave2
  • 用chkconfig检查和hadoop相关的服务是否已经启动,没有启动的话按照类似下面的命令启动:service hadoop-hdfs-namenode start;

DIY年夜饭2015

发表于 2015-02-18 |

引言

  • 今年继续DIY全家人的年夜饭,先上图一张:

whole pic

  • 下面是我做的几道菜,如果您也对烹饪感兴趣,欢迎联系我,联系方式在“关于”额。

我做的年夜饭

  • 三色菜丁:黄瓜、胡萝卜、虾仁。

三色菜丁

  • 清蒸草鱼:

清蒸草鱼

  • 炸鸡翅:

炸鸡翅

  • 红烧肉:

红烧肉

  • 鸡蛋南瓜汤:

鸡蛋南瓜汤

Java命名规范

发表于 2015-01-31 | 分类于 Java |

引言

  • 编写java程序时,程序的易读性是评判程序好坏的很重要的指标,那么写java时,对象的命名要注意哪些方面呢?请看本节分解!
  • 参考:google java style

命名注意事项

  • Package names:全部小写,不要加特殊字符,比如com.example.deepspace,以下写法是错误的com.example.deepSpace,com.example.deep_space;
  • Class names:写成UpperCamelCase,比如HashIntegrationTest,Character;
  • Method names:写成lowerCamelCase,比如sendMessage,testPop_emptyStack;
  • Constant names:写成全部大写形式,比如CONSTANT_CASE,static final int NUMBER = 5;,static final ImmutableList<String> NAMES = ImmutableList.of("Ed", "Ann");,static final Joiner COMMA_JOINER = Joiner.on(',');,static final SomeMutableType[] EMPTY_ARRAY = {};;

其他注意事项

  • 不要在程序中写孤零零的数字,要么它有明确的含义(60×60×24),要么就将他定义为final常量放在程序最上面,程序中引用即可;
  • 名称的含义尽量明确,尽量用全称,不要用缩写,除非是大家都公认的名称,比如:num,temp;
  • 程序中的注释就少不就多,而且尽量用英文注释;
  • 尽量避免代码重复;
  • 写程序的过程中要考虑代码的可移植性;

计算机开机过程详解

发表于 2015-01-12 | 分类于 computer |

引言

  • 计算机开机过程似乎是个非常复杂的过程,本文为您梳理出计算机开机最重要的若干阶段,让您对计算机开机过程一目了然;
  • 参考资料:计算机是如何启动的

第一阶段:BIOS

  • 按下开机键,读取ROM内容;
  • 硬件自检,屏幕会显示检测的CPU、内存、硬盘的信息,如果有错则蜂鸣;
  • 按照用户的设定,决定计算机从哪里启动(是从硬盘、还是从DVD、还是从优盘),这一步之前用户可以通过长按F12修改从哪里启动;

第二阶段:主引导记录

  • 磁盘逻辑结构见下图:

disk

  • 决定从硬盘启动;
  • 从硬盘的0号扇区读取主引导记录(master boot record,MBR);
  • MBR结尾是分区表(上图),告诉计算机每个分区的起始和终止地址;
  • 确定活动分区(装有操作系统的分区),读取这个分区的引导块(第一个块),执行它;
  • 引导块中的程序负责装载该分区的操作系统;
  • 操作系统启动,加载操作系统内核,启动任务管理器等;

家常菜谱汇总

发表于 2015-01-07 |

引言

  • 在编代码累的时候,不妨给自己放松一下,做一道可口美味的佳肴犒劳一下自己;
  • 作为一个吃货,不仅要会吃,而且要会做,这才叫高端大气上档次的吃货;
  • 如果遇见朋友来家中做客,亲自下厨不仅给朋友不一样的体验,而且能够让对方切身感受到自己的真诚;
  • 喜欢做饭的我在此给大家分享下家常菜的菜谱,欢迎补充;

基础家常菜

菜名 所需食材 制作工艺
拍黄瓜 黄瓜、蒜 黄瓜洗净,拍成小块,加入醋、蒜汁、香菜、芝麻酱等
地三鲜 土豆,茄子,青椒 去皮切滚刀块–热油加郫县豆瓣和蒜–爆炒不要加水
麻婆豆腐 嫩豆腐、麻婆豆腐调料、葱 嫩豆腐切块–下热油锅–加混合到水里的调料汁–三分钟即可出锅–用绿色葱装饰
葱香豆腐 老豆腐、鸡蛋、粉芡、葱姜、番茄酱(番茄)、糖盐 老豆腐从里到外依次裹上:盐、葱姜、粉芡、鸡蛋液;炸豆腐至金黄色;锅中加少量水、糖,放入豆腐、番茄酱红烧;
手撕包菜 包菜(圆白菜) 热油下葱姜蒜和干辣椒–下包菜爆炒–放酱油、陈醋、少量糖即可(不加水)
蒜茄子 茄子、芝麻酱、蒜 茄子切条蒸熟–拌入蒜汁、芝麻酱、香菜
鲜汁香煎带鱼 带鱼 带鱼切段刨肚洗净控干–加料酒、盐、葱姜腌制–裹上薄面控干–油炸熟透;少量热油放入葱姜、料酒–出锅放入酱油–浇到带鱼表面;
三色虾仁 虾仁、黄瓜、胡萝卜、料酒 虾仁洗净,用少量料酒腌制(不要放淀粉之类的!),黄瓜和胡萝卜切丁,热油炒虾仁盛出,热油炒黄瓜胡萝卜,放入虾仁,爆炒即可出锅
乡野小炒鸡 N个冰冻鸡腿、土豆块、香菇 鸡肉剁块洗净(也可稍微过开水去血)– 放盐腌制–放葱姜、酱油、郫县豆瓣(料酒和糖同放同不放)腌制一个小时,热油下锅爆炒–加水刚好没过鸡块(只加一次水且千万不要加多)–炖熟–加入土豆块、香菇–炖熟
粉蒸肉 带皮的五花肉、粉蒸肉调料 肉切成薄片(否则蒸不熟)–将肉和粉蒸肉调料拌在一起,下锅蒸熟即可出锅
红烧肉 五花肉、葱姜、红烧肉专用调料 上等五花肉整块放在清水中煮差不多熟,将肉捞出切块,热锅热油,下大料和姜片,然后下煮过的肉,加入料酒,炒至肉表面金黄,加少量水再次炖煮保证熟透,加入生抽或红烧肉专用调味料,小火炖煮、大火收汁即可上桌
五彩菜丁 绿色青椒(红色青椒)、胡萝卜、老豆腐、土豆、黄瓜、洋葱、黑木耳 所有食材切成大小不一的块状–加入郫县豆瓣–爆炒出锅

高端大气上档次的美味佳肴

菜名 所需食材 制作工艺
清蒸鲈鱼(草鱼) 鲈鱼(草鱼)、葱姜、生抽料酒 鲈鱼杀好洗净,用盐、料酒、葱姜、生抽腌制鲈鱼,下锅蒸15分钟即可,放上葱丝、姜丝,热油浇在鱼身上即可上桌
油焖香辣虾 大对虾N只 虾洗净剪去须须(不剥壳不剪头)–盐、葱姜、料酒腌制一小时–裹淀粉油炸大虾–加入腌制时用的调料闷熟–必要时可每个虾单独装盘,盘中黄色汤汁、配以绿色西兰花、红色椒丝、黑色胡椒酱;
香酥龙利鱼排 龙利鱼、鸡蛋、面包糠、番茄酱、菜花 龙利鱼去头剥皮切片–用盐和胡椒粉腌制鱼片–鱼片先蘸干面粉,再拖鸡蛋液,然后裹上面包糠–热油将鱼片炸熟摆盘–淋上少量番茄酱配色、加绿色菜花装饰
椒丝糖醋排骨 排骨,青椒,多种调味料 排骨煮30分钟撇沫子(尽量弄熟了)–料酒、酱油、香醋腌制排骨–油炸排骨并烧熟盛出–三勺白糖、两勺酱油、一勺料酒、3勺香醋、5勺清水制作汤汁–油锅中爆葱姜蒜–排骨下油锅翻炒–浇上汤汁后炒熟并收汁装盘–排骨成盘里–加青椒葱丝、胡萝卜雕花等配色
鲜鸡蛋肉卷 肉馅、香菇、鸡蛋、葱姜、大豆酱、蒸包子专用调料 猪肉馅剁碎,放入拌馅专用调料、大豆酱、酱油、盐、葱姜、香菇等–平底锅加热,放入少量油,倒入一个打碎的鸡蛋(一个鸡蛋饼只用一个鸡蛋),用铲子摊成薄饼状,等放凉后出锅–将肉馅均匀摊在鸡蛋饼上(不要太厚),卷起来–将鸡蛋卷蒸熟(10分钟),出锅切片即可
牛肉小丸子 牛肉馅、专用调料、大豆酱、酱油、葱姜、鸡蛋、淀粉、娃娃菜、香菜等 牛肉馅剁碎,加入拌馅专用调料、大豆酱、酱油、葱姜、鸡蛋、鸡精、胡椒粉、香油、淀粉(使丸子不易碎)等–油锅炸丸子–娃娃菜下锅翻炒–成盘待用–将炸过的牛肉丸子加水炖煮,待丸子漂浮起来后,放入刚刚炒过的娃娃菜,加盐和鸡精–娃娃菜在下,牛肉丸在上盛入小碗中,加入香菜和青椒丝调色;

远离压力小窍门

发表于 2015-01-06 |

引言

  • 现代社会生活节奏快,人人都有压力,可能还是很沉重的压力;
  • 互联网行业尤其如此,但是我们不要抱怨压力,而要善于释放压力,将压力变成提升自己、完善自己的动力;
  • 本文分享几种释放压力的好方法,有需要的朋友不妨一试,欢迎补充;

时间遗忘法

  • 时间是最好的解药,当我们出现情感问题与心理压力时,随着时间的逝去,积极地忘记过去的、眼前的不愉快,随时修正自己的认知观念,那么,痛苦的经历将不再会影响你的未来。

音乐放松法

  • 音乐与声音可以影响我们的情绪。他人的赞扬声、指责声、议论声等都会影响你的心态,优美的轻音乐可以调整我们的情绪与心理压力,让我们的心灵放松下来,享受被音乐包围的美妙感觉。

自信激励法

  • 心理暗示的作用大到你自己都无法想象的程度。多鼓励自己,能让自己更自信与振作起来。只要你相信自己是最好的、最可以依赖的,是无所不能的,那么,你可能就真的可以做到无所不能。

顺其自然法

  • 顺其自然看起来很简单,做起来却很难,但是,它的效果也是最显著的。当你能做到宠辱不惊,去留无意,那么还有什么不能放下的,还有什么心理压力不能放松呢?

淡化功利法

  • 面对一个功利价值观比较盛行的社会,很多人都是为了功利而在努力奋斗着。适当的功利心并没有坏处,但是过度就会让我们的心理压力增大。建立合理的、客观的自我期望值,奋斗目标要合理。

换位思考法

  • 换一个角度,换一种认知去看待问题,也许在你眼中那些不公平的事情、不协调的人际关系、不愉快的情感体验就会一笑而过!

相互拥抱

  • 2007年的一项动物实验中,一只草原田鼠与群体隔离单独饲养后,其身上表现出不安、压力、忧郁等症状,经注射催产素后症状便得到缓解。催产素虽然一般在性行为、分娩、哺乳时自然分泌,但如果有与朋友作轻度肌肤接触的拥抱或者与爱犬嬉戏等行为,也能促使催产素分泌。

有计划地担忧

  • 美国宾夕法尼亚大学研究发现,一天专门抽出30分钟时间忧虑,有助缓解心理压力。研究指出,安排出固定的时间去思考需要担忧的问题,而不是浪费过多时间与精力去作无谓的忧虑,更有助于把心思集中在工作、学习与生活上,能更有效地减轻心理压力。

生活中的10大心理学效应

发表于 2015-01-05 |

引言

  • 偶尔在网上看到了心理学效应的总结,自己归纳整理了下,在此分享给喜欢心理学的朋友们;

瓦拉赫效应

  • 奥托•瓦拉赫是诺贝尔化学奖获得者,他的成功过程极富传奇色彩。瓦拉赫在开始读中学时,父母为他选择了一条文学之路,不料一学期下来,教师为他写下了这样的评语:“瓦拉赫很用功。但过分拘泥,难以造就文学之材。”此后,父母又让他改学油画,可瓦拉赫既不善于构图,又不会润色,成绩全班倒数第一。面对如此“笨拙”的学生,绝大部分老师认为他成才无望,只有化学老师认为做事一丝不苟,具备做好化学实验的素质,建议他学化学,这下瓦拉赫智慧的火花一下子被点燃了,终于获得了成功。瓦拉赫的成功说明了这样一个道理:学生的智能发展是不均衡的,都有智慧的强点和弱点,他们一旦找到了发挥自己智慧的最佳点,使智能得到充分发挥,便可取得惊人的成绩。后人称这种现象为“瓦拉赫效应”。

门坎效应

  • 所谓门坎效应,是指一个人接受了较低层次的要求后,适当引导,往往会逐步接受更高层次的要求。该效应是美国社会心理学家弗里德曼与弗雷瑟于1966年在做无压力屈从:登门坎技术的现场实验中提出的。

共生效应

  • 自然界有这样一种现象:当一株植物单独生长时,显得矮小、单调,而与众多同类植物一起生长时,则根深叶茂,生机盎然。人们把植物界中这种相互影响、相互促进的现象,称之为“共生效应”。事实上,我们人类群体中也存在“共生效应”。英国“卡迪文实验室”从1901年至1982年先后出现了25位诺贝尔获奖者,便是“共生效应”一个杰出的典型。

刻板效应

  • 社会心理学认为,那种用老眼光看人造成的影响称为“刻板效应”。它是对人的一种固定而笼统的看法,从而产生一种刻板印象。在学校经常可见到这种现象,教师对那些天资聪颖、学习成绩优秀的学生,脸上往往流露出喜爱的神色,并受到器重和青睐。而天资愚笨、学习成绩较差的学生则往往受到歧视,教师表现出急躁、厌烦的情绪,令人沮丧的话常挂在嘴边。实践证明,经常受到这种“待遇”的学生,会顿觉凉水浇身,丧失了学习信心,失掉了克服困难的勇气,以至产生颓废情绪。

首因效应

  • 首因效应有时又称为第一印象的作用,指的是知觉对象给知觉者留下第一印象对社会知觉的影响作用。具体说,就是初次与人或事接触时,在心理上产生对某人或某事带有情感因素的定势,从而影响到以后对该人或该事的评价。所以,我们可以看出,对决策中收集正确的情报加以分析而言,这种效应是不利的。无论第一印象是好或是坏都是片面的,不利于全面地了解、分析。
    第一印象所产生的作用称之为首因效应。根据第一印象来评价一个人的好坏,往往比较偏颇。如果在招聘考试和考察员工绩效时,只凭第一印象,就会被某些表面现象蒙蔽。
    首因效应在招聘过程中主要表现有两个方面:一是以貌取人。对仪表堂堂、风度翩翩的应聘者容易赢得主考官的好感,二是以言取人,那些口若悬河、对答如流者往往给人留下好印象。因此在选拔人才时,既要听其言、观其貌,还要察其行、考其绩。

近因效应

  • 近因效应指的是某人或某事的近期表现在头脑中占据优势,从而改变了对该人或该事的一贯看法。近因效应与首因效应是相对应的两种效应。首因效应一般在较陌生的情况下产生影响,而近因效应一般在较熟悉的情况下产生影响。两者都是对人或事的片面了解而主观臆断,使得决策信息失真。

晕轮效应(光环效应)

  • 晕轮效应是指某人或某事由于其突出的特征留下了深刻的印象,而忽视了其它的心理和行为品质。它有时会产生“积极肯定的晕轮”,有时会产生“消极否定的晕轮”,这都会干扰对信息的评价,要克服晕轮效应就必须坚持客观,不掺杂主观成分。

蝴蝶效应

  • 1960年,美国麻省理工学院教授洛伦兹研究“长期天气预报”问题时,出现了疑难问题:她在计算机上用一组简化数据模拟天气的演变,原本是想利用计算机的高速运算来提高天气预报的准确性。但是,事与愿违,多次计算表明,初始条件的极微小差异,会导致错误的结论。心理情绪也是如此,有一组漫画显示,一个人在单位被领导训了一顿,心里很恼火,回家冲妻子发起了脾气,妻子无来由地被训,也很生气,就摔门而去。走在街上,一条宠物狗拦住了去路,“汪汪”狂吠,妻子更生气啦,就一脚踢过去,小狗受到踢打,狂奔路过一个老人面前,把老人吓了一跳。正巧这位老人有心脏病,被突然冲出的小狗一吓,当场心脏病发作,不治身亡。
    洛伦兹发现了微小差异导致的巨大反差,她用一个形象的比喻来表达这个发现,一只小小的蝴蝶在巴西上空振动翅膀,它煽动起来的小小漩涡与其他气流汇合,可能在一个月后的美国得克萨斯州会引起一场风暴——这就是混沌学中著名的“蝴蝶效应”。
    在对人力资源的管理中,人事管理工作者如果灵活运用人事心理效应,就能充分调动下属或人才的积极性,使人尽其才,才尽其能,从而使工作效能达到最优。

罗森塔尔效应

  • 美国心理学家罗森塔尔考查某校,随意从每班抽3名学生共18人写在一张表格上,交给校长,极为认真地说:“这18名学生经过科学测定智商很高。”事过半年,罗氏又来到该校,发现这18名学生的确表现超常。
    罗森塔尔效应就是期望心理中的共鸣现象。运用到人事管理中,就要求领导对下属要投入感情、希望和特别的诱导,使下属得以发挥自身的主动性和创造性。如领导在交办某一项任务时,不妨对下属说:“我相信你一定能办好”、“我想早点听到你成功的消息。”这样下属就会朝你期待的方向发展,人才也就在期待之中得以产生。

贝尔效应

  • 英国学者贝尔天赋极高,有人说他毕业后若研究晶体和生物化学,定会赢得多次诺贝尔奖。但他却心甘情愿地走另一条道路,把一个个开拓性的课题提出来,指引别人登上了科学高峰,此举被称为贝尔效应。
    贝尔效应要求领导者具有伯乐精神和人梯精神,要以单位和集体为先,慧眼识才,放手用才,敢于提拔任用能力比自己强的人,积极为有才干的下属创造机会。

关于前端开发的几点感悟

发表于 2015-01-02 |

引言

  • 做前端开发时间不算长,虽然在很多方面仍是小白,但是毕竟也悟出了一些东西,借此平台分享,也算是自己成长道路上的一点积累;

广度还是深度

  • 自己对这个问题纠结了好久,最后得出的结论是:不用纠结,just do it!下面引用实验室一位牛人的看法,以此告诫自己just do it才是最重要的!
  • 在一无所知的时候,当然是广度重要,需要先知道、后深入;
  • 在知道了一些后,当然是深度更加重要,不同的框架、语言、知识都是相通的,如果真正将一门技术、一门语言学深入、甚至达到了精通,并且能够抽象出来一种适合自己的学习方法,那么学习其他技术也会触类旁通;

学习一门新技术的方法

  • 了解技术的应用状况和应用前景:
    • 在知乎、博客上搜索;
    • 这项技术多少人在用、哪些公司在用;
    • 这项技术处于上升还是下降阶段,是否会一直流行;
    • 确定深入学习的路线图:
    • 了解业内评价较好的专业书籍导论、目录;
  • 进行第一遍普及性学习,此阶段的目标不是深入理解,而是会用、上手、基础性代码跑通:
    • 官方文档、W3Cschool总结性文档;
    • 公开课(比如极客学院);
    • 入门博客;
    • 入门书籍;
  • 在学习深入到一定程度后,会发现一个瓶颈,那就是会用、但是不明白原理。此时应当进行第二遍研究性学习,此阶段目标不是广度,而是对某一技术点的深入挖掘,要达到看懂源码、完全了解内部运作机制的程度:
    • 确定需要深入挖掘的几个技术点;
    • 专业性书籍;
    • 专业性博客;
    • 官方文档细节;
    • 在github上搜索别人的代码,阅读优秀代码;
    • 自己实践一个小项目;
  • 分享和提升:
    • 在研究过程中产出自己的理解,试着写github和blog等,分享自己的思想;
    • 回过头看看在”第一遍普及性学习”中的疑问是否解决;

Web系统开发流程

  • 我还没有真正步入职场,但是根据在实验室的项目经历,也能悟出一些在web应用开发过程中的团队合作技巧和注意点;
  • 首次讨论,不考虑技术细节:
    • 系统的逻辑架构;
    • 系统的物理架构;
    • 系统需要哪些页面,之间怎样跳转,大概设计什么页面功能;
    • 讨论后写wiki文档,让大家再想想细节,确定可行的方案;
  • 第二次讨论,确定主要技术点的具体方案:
    • 用户需求定稿;
    • 页面样式设计图定稿;
    • 数据库设计定稿;
    • 系统主要技术点定稿,确实困难的技术点要确定几个备用技术;
    • 讨论后将系统总体任务分解成小任务,提issue分配到人,确定时间进度;
    • 原则:同一个页面交给同一个人去做和维护;
  • 开发过程:
    • 原则:只考虑把东西做出来,暂不考虑性能问题;
    • 每个点:新建分支、写代码、commit和push、备份代码和数据库到本地、及时合并代码到master;
    • 及时和用户、产品经理沟通(如果有双重管理更应如此),沟通好再开工,避免用户需求的更改导致重复劳动;
    • 开发文档写在wiki;
    • issue完成及时关闭;
  • 整体完成后上线测试:
    • 考虑性能问题;
    • 考虑代码优化;
    • 考虑测试中遇到的各种实际问题;

搜索技巧

  • 刚开始用google的时候总是搜不到自己想要的东西,原本以为是自己英语太渣,现在看来是没有掌握住“关键词”,下面就把我总结的常用的搜索技巧分享给大家;
  • js官方文档:MDN
  • 扩展内容:cuntomized
  • 实例内容:example
  • 搜教程:tutorial doc
  • 搜下载:download
  • 代码测试器:plunker
  • 同级概念:… vs …
  • 搜快捷键:
    • 代码补全:code/hint/completion/assist
    • 代码格式化:code format
1…91011
Eric Chang

Eric Chang

www.yinshuisiyuan.net

101 日志
15 分类
51 标签
github weibo linkedin mail
  • 阮一峰
  • Azure
  • Python
  • Nodejs
© 2015 - 2020 Eric Chang
由 Hexo 强力驱动
主题 - NexT.Pisces


知识共享许可协议本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。