并发 & 并行
-
并发(concurrency)
关注任务切分
创业公司开始只有一个人,一人分饰多角,一会做产品规划,一会写代码,一会见客户
虽然不能见客户的同时写代码,但通过分配时间片,切分了任务,,表现出来好像是多个任务一起在执行
-
并行(parallelism)
关注同时执行
发现自己太忙了,时间分配不过来,于是请了工程师,产品经理,市场总监,各司其职,这时候多个任务可以同时执行了
并发(concurrency)关注任务切分
创业公司开始只有一个人,一人分饰多角,一会做产品规划,一会写代码,一会见客户
虽然不能见客户的同时写代码,但通过分配时间片,切分了任务,,表现出来好像是多个任务一起在执行
并行(parallelism)关注同时执行
发现自己太忙了,时间分配不过来,于是请了工程师,产品经理,市场总监,各司其职,这时候多个任务可以同时执行了
继承是面向对象编程的一个重要的方式,通过继承,子类就可以扩展父类的功能
4 种动物:Dog(狗)、Bat(蝙蝠)、Parrot(鹦鹉)、Ostrich(鸵鸟)
按哺乳动物和鸟类归类,类层次:
按 能跑 和 能飞 归类,类层次
要把上面的两种分类都包含进来,就得设计更多的层次
哺乳类:能跑的哺乳类,能飞的哺乳类
鸟类:能跑的鸟类,能飞的鸟类
这么一来,类的层次就复杂了:
如果要再增加 “宠物类” 和 “非宠物类”,这么搞下去,类数量指数增长(类爆炸
)
IO 设备速度比CPU、内存慢,开多线程更好利用 CPU和内存,每个线程读写一个fd
海量网络连接下,瓶颈不在机器设备和网络速度,在于os和 IO 应用程序的沟通协作的方式
一万个 socket 连接过来,传统阻塞式 IO 编程模型要开一万个线程来应对
一万个线程要不断的关闭线程重建线程,资源都浪费在这上面了
一个线程耗 1M 内存,1 万个线程至少10G ,IA-32 机器架构基本不可能的(要开 PAE),x64 架构才有可能舒服点,这仅仅是粗略算的内存消耗,还有别的资源
一,需要解耦 IO 连接和应用程序线程的对应关系
,这就是非阻塞(nonblocking)、
异步(asynchronous)要求的由来
(构造一个线程池,epoll 监控到有数据的 fd,把 fd 传入线程池,由这些 worker thread 来读写 io)
二,需要高性能的 OS 对 IO 设备可读写(数据来了)的通知方式:
从 level-triggerednotification 到 edge-triggered notification
大牛,知道了很多 答案存在的地方以及发现这些地方的方法
优秀的程序员培训师懂得教方法而不仅是教答案
很多公司内部培训流于形式,大家听完后就知道这是个很牛b的技术,却不知道怎么令自己也牛b起来
HR就算懂上面的道理,但因知识领域的差异、从根本上没能力推动发展程序员的内部培训
HR能做的事是帮助管理者在 程序员心中培养技术为尊的意识,让他们有动力去自学并实践,并以公司内某位榜样为目标赶超他
HR无法有大作为,也令大多数公司很少重视培训
即使不培训也不会影响赚钱,工作效率的低下可以用加班来弥补
且项目做到一定程度就会更新换代、推倒重来,原本写得多烂的代码都成过眼云烟
老员工们都有自己的习惯,较难通过培训来改变,基本都需要有人经常提醒
实际中很多是因为负责人懒得写文档,或者文档很容易过时而懒得更新,不如口头说一遍算了
对技术培训的第一反应都是PPT式会议,最初级的培训
PPT最大意义在于做报告,内容凝练而简略,受众没法得到很多信息。但是这并不等于没用
PPT式会议和网上视频教程一样,帮助 零基础
的人快速入门(对这门知识几乎没接触过,但已有相近的知识)
例如已知C学C++或已知C++学Java,也就是说,至少不用在培训中解释何谓关键字或者面向对象
连相近知识也没有的人,应该叫 负基础
,他们会连PPT式会议都听不懂,还是得回归书本
书本不仅适合负基础的人,也适合高级读者。看书时有时间细想琢磨,有助于吸收
专家级则是阅读各种SDK和API文档
大神级的就是看各类源代码看出神的了
搜遍各种书籍和互联网都找不到的东西,才是真正有意义做培训的,多数跟本公司密切关联
例子 《iOS开发知识与能力体系 思维导图》,能说明问题,不做iOS的也能get√到
掌握技术知识需要花很多时间思考并经过实践,通过培训来达到目的的性价比很低,只有其中牵涉到工作业务的部分能带来实效
换句话说,“如何把技术应用到业务中”是公司内部培训要解决的核心问题,实现业务所需要的“技术”本身,应该边自学边实践
能让受众最大程度吸收的培训形式应该是手把手地教,这个贯穿在设计和编码过程中
实践过发现被培训的人确实能完整地吸收,而且时间长了他会有反馈并跟你讨论,你可能在讨论中反过来也学到东西
当然,这个很少发生在互联网公司里,大家都很忙碌
从发展历程看,内部培训就像是个牛人晒能力、懒人捡便宜的工具
然而,实际的情况连 “牛人晒能力” 都未必能达到。大家忙于业务攻关,根本就没有精力关注 “培训效率” 这个指标
培训本身有一套专门的知识体系,不是每个技术专家都可以成为好老师来高效传授知识,所以专业的培训公司才会有市场。如果内部培训不是由专职的人负责,那么它很可能就是个形式,参与的人鲜有收获
很少公司会设立专职的培训师岗位,因为公司的天生属性是雇人来赚钱而不是 “倒贴” 输出知识
团队里的人通常都专注于业务业绩,在这种环境里很容易思维受限,只有少数人可以做到自身成长超越团队成长
好的公司会安排外训,然后参与外训的人会把外部知识融入公司,从而成为内部的专家。这种情况大部分只发生在管理岗位,如果这位管理者无心带人,那么属下的小兵一直都只会是小兵。公司也不可能把培训师请到公司里养着,因为根据人员流动规律,通常半年才会用他一次
总之,不要指望公司把你培训成才。师傅领进门,修行靠个人!本文也只是指引大家看书的
Review 他的代码,毫无保留地指出所有错误和不良习惯
亲自示范怎么做出来的,在开始前让他注意观察,然后自己的动作慢一点
重构他的代码,让他自己对比好坏
指引他要看什么资料来提升自己
从较高的角度说明这样做的原因、思路、意义
老大说,你研究一下业内的地图 SDK 好吗?你做研究后会给老板回复什么?