独立:没有必要经过打工听人安排而活着,而是反过来经过在公司工做提升本身的技能,让本身能够更为独立和自由地生活。html
思考:留出更多的时间,去研究公司里外那些更为核心更有技术含量的技术。git
提高经验:提高本身的能力和经历,好比你是一个很知名的开源软件的核心开发人员,或者是某知名公司核心项目的核心开发人员。程序员
朋友圈:朋友圈很重要,一我的在什么样的朋友圈,就会被什么样的朋友所影响。优质朋友圈特性:github
- 这些人比较有想法、有观点,经验也比较丰富。 - 涉猎面比较广 - 有或多或少的成功 - 喜欢折腾喜欢搞事的人 - 对现状不满,并想作一些改变 - 有必定的影响力
会挣钱的人必定是会投资的人。最宝贵的财富并非钱,而是你的时间,时间比钱更宝贵,由于钱不用还在那里,而时间不用就浪费掉了。把你的时间投资在哪些地方,就意味着你将来会走什么样的路。因此投到一些有意义的地方。算法
做为美国三大信用报告公司中历史最悠久的一家,Equifax 的主营业务是为客户提供美国、加拿大和其余多个国家的公民信用信息。保险公司就是其服务的主要客户之一,涉及生命、汽车、火灾、医疗保险等多个方面。docker
此外,Equifax 还提供入职背景调查、保险理赔调查,以及针对企业的信用调查等服务。因为 Equifax 掌握了多个国家公民的信用档案,包括公民的学前、学校经历、婚姻、工做、健康、政治参与等大量隐私信息,因此此次的信息泄露,影响面积很大,并且性质特别恶劣。shell
受此次信息泄露影响的美国消费者有 1.43 亿左右,另估计约有 4400 万的英国客户和大量加拿大客户受到影响。事件致使 Equifax 市值瞬间蒸发掉逾 30 亿美圆。数据库
在 GitHub 上有相关的代码,连接为: https://github.com/mazen160/struts-pwn https://github.com/xsscx/cve-2017-5638
回顾互联网时代的其余几回大规模数据泄露事件,分析背后的缘由,给出解决这类安全问题的技术手段和方法。编程
2012:LinkedIn 在 2012 年也泄露了 6500 万用户名和密码。事件发生后,LinkedIn 为了亡羊补牢,及时阻止被黑帐户的登陆,强制被黑用户修改密码,并改进了登陆措施,从单步认证加强为带短信验证的两步认证。设计模式
2013~2014: 继 2013 年大规模数据泄露以后,雅虎在 2014 年又遭遇攻击,泄露出 5 亿用户的密码,直到 2016 年有人在黑市公开交易这些数据时才为大众所知。雅虎股价在事件爆出的次日就下跌了 2.4%。
国内也有相似的事件。2014 年携程网安全支付日志存在漏洞,致使大量用户信息如姓名、身份证号、银行卡类别、银行卡号、银行卡 CVV 码等信息泄露。这意味着,一旦这些信息被黑客窃取,在网络上盗刷银行卡消费将易如反掌。
数据管理问题:
专家建议
Contrast Security 是一家安全公司,其 CTO 杰夫·威廉姆斯( Jeff Williams)在博客中表示,虽然说最佳实践是确保不使用有漏洞的程序库,可是在现实中并不容易作到这一点,由于安全更新来得比较频繁。
安全在今天是一个很是严肃的事,能作到绝对的安全基本上是不可能的,咱们只能不断提升黑客入侵的门槛。当黑客的投入和收益大大不相符时,黑客也就失去了入侵的意义。
安全还在于“风控”,任何系统就算你作得再完美,也会出现数据泄露的状况,只是咱们能够把数据泄露的范围控制在一个什么样的比例,而这个比例就是咱们的“风控”。
所谓的安全方案基本上来讲就是可以把这个风险控制在一个很小的范围。对于在这个很小范围出现的一些数据安全的泄露,咱们能够经过“风控基金”来作业务上的补偿,好比赔偿用户损失等等。由于从经济利益上来讲,若是风险能够控制在一个——我防范它的成本远高于我赔偿它的成本,那么,还不如赔偿了。
谷歌当年举公司之力不作技术作社交。拉里·佩奇(Larry Page)看到苗头不对,从新掌权,把产品经理所有移到一边,让工程师从新掌权,因而才有了无人车和 AlphaGo 这样真正可以影响人类将来的惊世之做。
尊重技术的公司和不尊重技术的公司在初期可能还不能显现,而长期来看,差距明显。
技术领导力不只仅是呈现出来的技术,而是一种能够得到绝对优点的技术能力。因此,技术领导力也有一些特征,为了说清楚这些特征,先让咱们来看一下人类历史上的几回工业革命。
近代这几百年的人类发展史,从蒸汽机时代,到电力时代,再到信息时代,咱们能够看到这样的一些信息。
所以,咱们能够看到的技术领导力是:
- 尊重技术,追求核心基础技术。 - 追逐自动化的高效率的工具和技术,同时避免无效率的组织架构和管理。 - 解放生产力,追逐人效的提升。 - 开发抽象和高质量的能够重用的技术组件。 - 坚持高于社会主流的技术标准和要求。
可以提升代码或软件的扩展性、重用性和可维护性。
创新能力:可以使用新的方法、新的方式解决问题,追逐新的工具和技术。
做为一个软件工程师,要四个方面让本身拥有技术领导力:
第1、吃透基础技术。基础技术是各类上层技术共同的基础。更好地理解程序的运行原理,并基于这些基础技术进化出更优化的产品。具体分为两个部分:编程和系统。
一、程序是怎么精细控制底层资源的,好比内存管理、文件操做、网络通讯…… 二、须要学习汇编语言,写一些如 lock free 之类高并发的东西。那么了解汇编语言,就能有助于更好地理解和思考。
了解各类程序设计语言的功能特性
计算机系统原理:CPU 的体系结构(指令集 [CISC/RISC]、分支预测、缓存结构、总线、DMA、中断、陷阱、多任务、虚拟内存、虚拟化等),内存的原理与性能特色(SRAM、DRAM、DDR-SDRAM 等),磁盘的原理(机械硬盘 [盘面、磁头臂、磁头、启停区、寻道等]、固态硬盘 [页映射、块的合并与回收算法、TRIM 指令等]),GPU 的原理等。
操做系统原理和基础:进程、进程管理、线程、线程调度、多核的缓存一致性、信号量、物理内存管理、虚拟内存管理、内存分配、文件系统、磁盘管理等。
学习操做系统知识: 一是要仔细观察和探索当前使用的操做系统 二是要阅读操做系统原理相关的图书 三是要阅读 API 文档(如 man pages 和 MSDN Library),并编写调用操做系统功能的程序。 这里推荐三本书《UNIX 环境高级编程》、《UNIX 网络编程》和《Windows 核心编程》。
底层的 ARP 协议 中间的 TCP/UDP 协议 高层的 HTTP 协议。 《TCP/IP 详解》,学习这些基础的网络协议,能够为高维分布式架构中的一些技术问题提供不少的技术方案。 好比 TCP 的滑动窗口限流,彻底能够用于分布式服务中的限流方案。
阅读各种数据库图书,并多作数据库操做以及数据库编程,多观察分析数据库在运行时的性能。
提升学习能力。所谓学习能力,就是可以很快地学习新技术,又能在关键技术上深刻的能力。
与高手交流:经过技术社区以及参加技术会议与高手交流,也能够经过参加开源项目来和高手切磋。
开放的心态:实现一个目的一般有多种办法。带有开放的心态,不拘泥于一个平台、一种语言,每每能带来更多思考,也能获得更好的结果。并且,能在不一样的方法和方案间作比较,比较它们的优缺点,那么你会知道在什么样的场景下用什么样的方案,你就会比通常人可以有更全面和更完整的思路。
坚持作正确的事。作正确的事,比用正确的方式作事更重要,由于这样才始终会向目的地靠拢。
Google的自我评分卡:能够参考 Google 的这个评分卡来给本身作评估,并经过它来不断地提升对本身的要求。(该评分卡见文末附录)。
Lead by Example:永远在编程。不写代码,你就对技术细节不敏感,你没法作出能够实践的技术决策和方案。
软技能:良好的沟通能力、组织能力、驱动力、团队协做能力等等。《技术领导之路》、《卓有成效的管理者》等多本经典图书中均有细致的讲解。
附 Google 评分卡
0 - you are unfamiliar with the subject area. 0 - 你不熟悉这个学科领域。 1 - you can read / understand the most fundamental aspects of the subject area. 1 - 您能够阅读/理解主题领域的最基本问题。 2 - ability to implement small changes, understand basic principles and able to figure out additional details with minimal help. 2 - 可以实现小的改变,理解基本原理,并可以在最少的帮助下找出额外的细节。 3 - basic proficiency in a subject area without relying on help. 3 - 在不依赖帮助的状况下对某一学科领域的基本熟练程度。 4 - you are comfortable with the subject area and all routine work on it: 4 - 你对主题领域和全部常规工做感受很轻松: For software areas - ability to develop medium programs using all basic language features w/o book, awareness of more esoteric features (with book). 对于软件领域 - 有能力使用全部基础语言的功能(无书)开发出中等程序,有更深奥的理解(带书)。 For systems areas - understanding of many fundamentals of networking and systems administration, ability to run a small network of systems including recovery, debugging and nontrivial troubleshooting that relies on the knowledge of internals. 对于系统领域 - 了解网络和系统管理的许多基础知识,运行小型系统网络的能力,包括依赖于内部知识的恢复,调试和重要故障排除。 5 - an even lower degree of reliance on reference materials. Deeper skills in a field or specific technology in the subject area. 5 - 对参考材料的依赖程度更低。 更深刻的领域技能或主题领域的特定技术。 6 - ability to develop large programs and systems from scratch. Understanding of low level details and internals. Ability to design / deploy most large, distributed systems from scratch. 6 - 7 - you understand and make use of most lesser known language features, technologies, and associated internals. Ability to automate significant amounts of systems administration. 8 - deep understanding of corner cases, esoteric features, protocols and systems including “theory of operation”. Demonstrated ability to design, deploy and own very critical or large infrastructure, build accompanying automation. 9 - could have written the book about the subject area but didn’t; works with standards committees on defining new standards and methodologies. 10 - wrote the book on the subject area (there actually has to be a book). Recognized industry expert in the field, might have invented it.
Subject Areas:
TCP/IP Networking (OSI stack, DNS etc) Unix/Linux internals Unix/Linux Systems administration Algorithms and Data Structures C C++ Python Java Perl Go Shell Scripting (sh, Bash, ksh, csh) SQL and/or Database Admin Scripting language of your choice (not already mentioned) People Management Project Management
http://matt.might.net/articles/what-cs-majors-should-know/
首先,做品集(Portfolio)会比简历(Resume)更有参考意义。简历中应该放上本身的一些项目经历,或是一些开源软件的贡献,或是你完成的软件的网址等。我的网址写本身的技能、经历、文章。
其次,计算机专业工做者也要学会与人交流的技巧,包括如何写演示文稿,以及面对质疑时如何与人辩论的能力。
最后,硬技能方面工程类数学、Unix 哲学和实践、系统管理、程序设计语言、离散数学、数据结构与算法、计算机体系结构、操做系统、网络、安全、密码学、软件测试、用户体验、可视化、并行计算、软件工程、形式化方法、图形学、机器人、人工智能、机器学习、数据库等等。
LinkedIn 的高效代码复查技巧
LinkedIn’s Tips for Highly Effective Code Review
LinkedIn 内部实践的 Code Review 形式复查有如下几个特色。
LinkedIn 对提交代码写说明文档这个思路是一个很是不错的方法,由于代码提交人写文档的过程其实也是从新梳理的过程。写文档的时候一般会发现本身把事儿干复杂了,应该把代码再简化一下,因而就会回头去改代码。
编程语言和代码质量的研究报告
A Large-Scale Study of Programming Languages and Code Quality in GitHub
结论1: 从查看 bug fix 的 commits 的次数状况来看,C、C++、Objective-C、PHP 和 Python 中有不少不少的 commits 都是和 bug fix 相关的,而 Clojure、Haskell、Ruby、Scala 在 bug fix 的 commits 的数上明显要少不少。
结论2:函数式编程语言的 bug 明显比大多数其它语言要好不少。有隐式类型转换的语言明显产生的 bug 数要比强类型的语言要少不少。函数式的静态类型的语言要比函数式的动态类型语言的程序出 bug 的可能性要小不少。
结论3:研究者想搞清是否 bug 数会和软件的领域相关。好比,业务型、中间件型、框架、lib,或是数据库。研究代表,并无什么相关性。
结论4:研究人员想搞清楚 bug 的类型是否会和语言有关系。的确如此,bug 的类型和语言是强相关性的。
这份报告能够在评估编程语言时有必定的借鉴做用。
Optimizing Software in C++ - Agner Fog
这本书是全部 C++ 程序员都应该要读的一本书,它从事无巨细地从语言层面、编译器层面、内存访问层面、多线程层面、CPU 层面讲述了如何对软件性能调优。实在是一本经典的电子书。
Agner Fog 还写了其它几本和性能调优相关的书,能够到这个网址http://www.agner.org/optimize/下载
- Optimizing subroutines in assembly language: An optimization guide for x86 platforms - The microarchitecture of Intel, AMD and VIA CPUs: An optimization guide for assembly programmers and compiler makers - Instruction tables: Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel, AMD and VIA CPUs - Calling conventions for different C++ compilers and operating systems
一个技术能不能发展起来,关注三点:
影响因素:
衡量Go:
也就是说,Go 语言不会吞食底层到 C 和 C++ 那个级别的,也不会吞食到上层如 Java 业务层的项目。Go 语言能吞食的必定是 PaaS 上的项目,好比一些消息缓存中间件、服务发现、服务代理、控制系统、Agent、日志收集等等,他们没有复杂的业务场景,也到不了特别底层(如操做系统)的软件项目或工具。而 C 和 C++ 会被打到更底层,Java 会被打到更上层的业务层。
衡量一下 Go语言的杀手级应用 Docker:
Docker解决了PaaS层的问题,PaaS层能解决如下问题:
新技术的入场,而不是等待技术成熟了再进入:
时间必定是能找获得的,就看你对你要干的事有多大的渴望程度和多大的热情。 只要你真的想作,你就必定能想出各类各样的招儿来为本身挤出时间。
从写做中还能训练本身的表达能力,这让我可以更好更漂亮地与别人交流和沟通。这一点对于咱们成天面对电脑的技术人员来讲,过重要了。
耗子叔给的一些建议:
二者得不一样点以下:
从上面这些比较,能够看到 Boss 和 Leader 的不一样。了解和认识到什么才是一个真正的 Leader,什么才是一个 Leader 应有的素质和行为。
- 这个世界很大,一个公司或是一个 Leader 很难作到把人一生留下来,由于人老是须要有不一样经历的,优秀的人更是如此。既然作不到把人留一生,那么不妨把这件事作得漂亮一些,这样会让要离开的员工以为这个 Leader 或是这个公司的胸怀不通常,多是他再也碰不到的公司或 Leader,反而会想留下来,或是离开后又想回来。 - 既然作不到不让员工吐槽公司,那么不妨让这件事作得更漂亮一些——能够公开透明地说,而不是在背后说,由于在背后说对公司或是团队的伤害更大。
赢得他人的信任:对于信任来讲,并不彻底是别人相信你能作到某个事,还有别人愿意向你打开心扉,和你说他内心面最柔软的东西。然后者才是真正的信任。
开放的心态 + 倾向性的价值观:
- 对于各类各样的技术都要持一种比较开放的态度,能够讨论优缺点,但不会争个是非对错,尤为对于新技术来讲,更要开放。 - 倾向性可让别人更清楚地知道我是一个什么样的人,而不会对我琢磨不透,一会东一会西只会让人以为你太油了,反而会产生距离感和厌恶感。我认为,倾向性的价值观是别人是否能够跟随你的一个基础。
描绘使人激动的方向,提供使人向住的环境:可以抓住主要矛盾,看清事物的本质,给出清楚的观点或方向,简化复杂的事情,传道解惑、开启民智,让人豁然开朗、醍醐灌顶,才会让人追随之。
甘当铺路石,为他人创造机会:帮助别人其实就是帮助本身,成就他人其实也是在成就本身,这就像一个好的足球队同样,球队中的人都互相给队友创造机会,整个团队成功了,球队的每一个人也就成功了。
也许,你没必要作一个 Leader,可是若是你有想跟随的人,你应该去跟随这样的 Leader!