程序员练级攻略(2018)
    开篇词
    入门篇
        零基础启蒙
        正式入门
    修养篇
        程序员修养
    专业基础篇
        编程语言
        理论学科
        系统知识
    软件设计篇
        软件设计
    高手成长篇
        Linux系统、内存和网络(系统底层知识)
        异步I/O模型和Lock-Free编程(系统底层知识)
        Java底层知识
        数据库
        分布式架构入门(分布式架构)
        分布式架构经典图书和论文(分布式架构)
        ......
开篇词
    分为【入门篇】、【修养篇】、【专业基础篇】、【软件设计篇】、【高手成长篇】五大篇章
    
    入门:
        1. 推荐的是Python和JavaScript作为入门语言 学习资源和方法。
            Python语法比较简单,有大量的库和语法糖,是零基础的人学习编程的不二之选。
            JavaScript是前端语言,更容易获得编程的成就感。
        2. 学习使用操作系统Linux、编程工具Visual Studio Code,Web编程 等入门必学内容。
            要多多动手,尤其Web编程,拿一个实践项目,帮助你理解和巩固所学的内容。能自己去解决遇到的问题,此时能够做一点东西了,而且你还可能会对编程非常感兴趣了。但是你干万不要以为自己已经入门了。
            
            正式入门,我推荐的语言是Java,它是所有语言里综合实力最强的。
            推荐专业实用的编程工具,如编程的IDE、版本管理工具Git、调试前端程序和数据库设计工具等,并拿一个实践项目。
    修养:
        3. 程序员修养:有修养的程序员才可能成长为真正的工程师和架构师,而没有修养的程序员只能论为码农,这是码农和工程师的关键区分点。
            进入更为专业更为复杂的编程世界中需要树立正确的三观和心态,这对于程序员是至关重要。
            
            我认为比较重要的几个方面:英文能力、问问题的能力、写代码的修养、安全防范意识、软件工程和上线规范、编程规范等。
            这些能力的训练和培养将为后续的学习和发展方实基础。
    专业基础
        4. 专业基础
            内容主要涵盖编程语言、理论学科和系统知识三方面知识。
            (1). 在编程语言方面
                推荐学习C、C++和Java这三个工业级的编程语言。
            (2). 理论学科方面
                需要学习算法、数据结构、网络模型、计算机原理等
            (3).系统知识方面
                学习Unix/Linux、 TCP/IP、C10K挑战等专业的系统知识。
        从业方向:
            (1). 底层方面工作
                如果你对操作系统、文件系统、数据库、网络等比较感兴趣,那么可以考虑从事底层方面的工作。
            (2). 架构方面的工作    
                如果对分布式系统架构、微服务、DevOps、Cloud Native等有热情,那么可以从事架构方面的工作。
            (3). 数据领域相关工作    
                如果是对大数据、机器学习、人工智能等比较关注,那么数据领域可以成为你一展身手的地方。
            (4). 前端工作 如果你对用户体验或者交互等更感兴趣,那么前端工程师也是个不错的选择。
            此外,安全开发、运维开发、嵌入式开发等几大方向中,也为你提供了丰富多彩的发展空间。
            如何选择应该完全遵从于你的本心,你更愿意在哪个领域里持续奋斗和学习。这个答案,在你的手中,在你的心中。
            很多技术是相通的,关键是你是学在表面还是深入本质。
    软件设计
        软件设计能力是每个程序员都需要具备的基本素质,是从工程师通往架构师的必备技能。
        
        编程范式:泛型编程、函数式编程、面向对象编程......
        软件设计原则:DRY-避免重复原则、KISS-简单原则、迪米特法则(又称"最少知识原则") 、面向对象的S.O.L.I.D原则....
        软件设计领域的一些重要的学习资料。
    高手成长篇
        涵盖系统、数据库、分布式架构、微服务、容器化和自动化运维、机器学习、前端方向和技术论文等几方面内容,而且深度一下子拔高了好几个数量级。
        
        这也是我留给你的再一次做选择的机会,平凡还是卓越?
        
    【鸡汤】
        算法与数据结构、操作系统原理、编译原理、数据库原理、计算机原理这些原理上的东西,是你想要成为一个专家必需要学的东西。
        这就是“工人”和“工程师”的差别,是“建筑工人”和“建筑架构师”的差别。
        如果你觉得这些理论上的东西无用,那么只能说明,你只不过在从事工人的工作,而不是工程师的工作。
        
        *技术能力的瓶颈,以及技术太多学不过来,只不过是你为自己的能力不足或是懒情找的借口罢了。
            技术的东西都是死的,这些死的知识只要努力就是可以学会的。只不过聪明的人花得时间少,笨点的人花得时间多点罢了。
            这其中的时间差距主要是由学习方法的不同,基础知识储备的不同造成的。
            只要你的方法得当,多花点时间在基础知识上,会让你未来学习应用知识的时间大大缩短。
        学习技术没有速成的方法,真正的牛人不是能够培训出来的,一切都是要靠你自己去努力和持续地付出。
            推荐传世之文《Teach Yourself Programming in Ten Years》(中英对照版) 
            Cooslhell上的《程序员的荒谬之言还是至理名言?》。
            
            让一些想入行但又不愿意付出努力的同学早点放弃。
        几点学习建议:
            *一定要坚持,要保持长时间学习,甚至终生学习的态度。
            *一定要动手,不管例子多么简单,建议至少自己动手敲一遍看看是否理解了里头的细枝末节。
            *一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。
            *不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累,会在未来至少10年通用。
            *回顾一下历史,看看历史时间线上技术的发展,你才能明白明天会是什么样的。
            
入门篇-零基础启蒙
    零基础启蒙
        对从零基础开始的人来说,最重要的是能够对编程有兴趣,而要对编程有兴趣,要有成就感。而成就感来自于用程序打造东西
        
        入门教程,主要是让你体会编程是什么。
            1. 推荐书《与孩子一起学编程 》
            2. 两个在线编程入门的网站: Codecademy: Learn Python 
                https://www.codecademy.com
                和 People Can Program
                
                CodeAbbey在线编程的小练习
                http://www.codeabbey.com/index/task_list
        入门教程2,主要是让你做点实际有用的东西。
            1. MDN的 Web开发入门 MDN全称是Mozilla Developer Network,你可以认为是Web方面的官方技术网站。
                https://developer.mozilla.org/zh-CN/
                你可以建立一个网站,把你的网页发布在GitHub上。
    入门:    编程入门以培养兴趣为主(Python+JavaScript)
        入门python
            推荐《Python编程快速上手》、《Python编程:从入门到实践》
        入门语言JavaScript
            推荐在线教程:
            1. MDN JavaScript教程【最权威的JavaScript官方教程】 
                https://developer.mozilla.org/zh-CN/docs/Web/JavaScript
            2. W3School JavaScript教程==偏Web方面的编程
                https://www.w3school.com.cn/js/index.asp
            3. JavaScript全栈教程(廖雪峰)===偏Web方面的编程,涉及后端的Node.js。
                https://www.liaoxuefeng.com/wiki/1022910821149312
        入门Linux
            W3School linux教程: https://www.w3cschool.cn/linux/
        编程工具:Visual Studio Code
            Visual Studio Code开发Python, JavaScript, Java, Go, C/C++都能得心应手
        Web开发入门:互联网最大的发明Web,任何一个程序员都不应该错过
            前端基础:
                CSS, HTML和JavaScript
                    MDN JavaScript教程:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript
                    了解CSS和HTML是怎么相互作用来展示数据的,不用记忆文档中的内容,这两个文档是用来查找知识的。
                    
                    学习使用JavaScript操纵HTML元件。理解DOM和动态网页
                    w3school的HTML/CSS/JavaScript
                        https://www.w3school.com.cn/b.asp
            前端基础:
                Python或Node.js
                PHP:https://www.w3school.com.cn/php/php_ref.asp
                    官网:https://www.php.net/docs.php
                
                推荐Python,Node.js次之,PHP最后
                    Python用于一些性能不敏感的和运维或是一些小工具还是很香的
                    Node.js号称JavaScript的后端版,目前还有问题,一些程序员用它做后端粘合层
                    PHP发展潜力有限
            
            【学习要点】
                学习HTML基本语法。
                学习CSS如何选中HTML元素并应用一些基本样式。
                学会用Firefox + Firebug 或 Chrome查看你觉得很炫的网页结构,并动态修改。
                在一台Linux机器上配置LEMP- Ubuntu/Nginx/PHP/MySQL这个环境。
                学习PHP,让后台PHP和前台HTML进行数据交互,对服务器相应浏览器请求形成初步认识。
                实现一个表单提交和反显的功能。
                把PHP连接本地或者远程数据库MySQL (MySQL和SQL现学现用够了)。
    实践项目
        无论用Python,还是Node.js,还是PHP,做一个非常简单的Blog系统,或是BBS系统,需要支持如下功能:
            用户登录和注册(不需密码找回)。===密码不能用明文 MD5+salt加密
            用户发贴(不需要支持富文本,只需要支持纯文本)。
            用户评论(不需要支持富文本,只需要支持纯文本)。
入门篇--正式入门
    兴趣、热情、成就感能帮助我们克服困难
    
    编程技能: 建议先阅读《The Key To Accelerating Your Coding Skills》
        链接:http://blog.thefirehoseproject.com/posts/learn-to-code-and-be-self-reliant/
        1. 编程技巧:怎样把代码写好
            推荐《代码大全》:很厚,不需要马上看完。好的书在你不同的阶段来读,你会有不同的收获,而且还会产生更多的深层次的思考! 《代码大全》就是这样的一本书。
        2. 编程语言:一定要学好Java这门语言【Java是所有语言里面综合实力最强的,几乎所有大型的互联网或是分布式架构基本上都是Java技术栈,绝对企业级语言】
            推荐基础入门的《Head First Java》
            推荐入门的《Java核心技术(卷1)》
            一定要学习Spring,推荐《Spring in Action》或是直接从最新的Spring Boot开始,推荐《Spring Boot实战》
        3. 操作系统
            推荐《鸟哥的Linux私房菜》
        4. 网络协议
            一定要系统地了解一下HTTP协议,推荐MDN阅读官方的HTTP的文档。
            https://developer.mozilla.org/zh-CN/docs/Web/HTTP
                你需要知道HTTP协议的几个关键点: 
                    1)HTTP头, 
                    2)HTTP的请求方法,
                    3)HTTP的返回码。
                    4)HTTP的Cookie、缓存、会话,以及链接管理,等等
                对于HTTP协议,你不需要知道所有的东西,你只需要了解这个协议的最关键的那些东西。
        5. 数据库设计
            数据库设计:推荐幕课网在线课程《数据库设计的那些事》
            数据库使用:推荐学习开源的MySQL官方文档或《MySQL必知必会》
        6. 前端
            与JavaScript相关的jQuery
            与CSS相关的Bootstrap
            JavaScript的Ajax请求后端的API接口的方式以及JavaScript的Promise模式。
                推荐阮一峰翻译的ES6的教程 相关的内容。https://es6.ruanyifeng.com/
            
        7. 字符编码方面
            了解ASCII和Unicode字符编码。
                推荐文章“关于字符编码,你所需要知道的(ASCI,Unicode,Utf8,GB2312...) "
                    https://www.cnblogs.com/strive-man/p/8328863.html
                推荐英文 "The history of Character Encoding" 
                以及 Wikipedia - Character encoding
                    https://en.wikipedia.org/wiki/Character_encoding
                推荐Github上的Awesome: Awesome Unicode 和Awesome Code Points.
                    https://github.com/sindresorhus/awesome
    编程工具
        1. 可以使用Eclipse
        2. 推荐使用Intellij IDEA
        3. 可以尝试使用Visual Studio Code,潜力十足,用其开发Python, JavaScript, Java, Go、C和C++都能得心应手
    版本管理工具
        1. 传统的有P4、SVN、CVS等
        2. 推荐Git,推荐推荐《Pro Git 第二版》、《猴子都能懂的Git入门》
        3. 推荐文章 Github and Git图文教程 https://www.pianshen.com/article/83961989017/
        4. 推荐文章:Git图文教程及详解https://www.jianshu.com/p/1b65ed31da97
    调试前端程序
        1. 使用Chrome调试前端程序,推荐文章 超完整的Chrome浏览器客户端调试大全。
        http://www.igeekbar.com/igeekbar/post/156.htm
    数据库设计工具
        1. 学会使用MySQL WorkBench
        
    【实践项目】投票系统
        业务上的需求如下:
            用户只有在登录后,才可以生成投票表单。
            投票项可以单选,可以多选。
            其它用户投票后显示当前投票结果(但是不能刷票)。
            投票有相应的时间,页面上需要出现倒计时。
            投票结果需要用不同颜色不同长度的横条,并显示百分比和人数。
        技术上的需求如下:
            要用Java Spring Boot来实现,后端不返回任何的HTML,只返回JSon数据给前端。
            由前端的JQuery来处理并操作相关的HTML动态生成在前端展示的页面。
            前端的页面还要是响应式的,也就是可以在手机端和电脑端有不同的呈现。用Bootstrap来完成。
    【总结】
        此时算是真正入门了,接下来我给你的建议是选择一个方向开始深入。
        开始非常专业的程序员之路了。这也是一般程序员和高级程序员的分水岭了,能不能过去就看你的了。
        
修养篇--程序员修养
    
        文章:What are some of the most basic things every programmer should know?
        文章:97 Things Every Programmer Should Know
    1. 英文能力
        要想成为高手必须去信息的源头去,有英文能力你可以到官网上直接阅读手册,到StackOverflow上问问题,到YouTube上看很多演讲和教学,到GitHub上参与社区,用Google查询相关的知识,到国际名校上参加公开课.
        如果你的英文能力有问题的话(不只是读写,还有听和说),基本上你无法成为一个高手。建议:
        (1). 坚持Google英文关键词,而不是在Google里搜中文。
        (2). 在GitHub上只用英文。用英文写代码注释,写Code Commit信息,用英文写Issue和Pull Request,以及用英文写Wiki。
        (3). 坚持到YouTube上每天看5分钟的视频。YouTube上有相关的机器字幕,实在不行就打开字幕。
        (4). 坚持用英文词典而不是中文的。比如:剑桥英语词典 或是Dictionary.com。你可以安装一个Chrome插件 Google Dictionary.
        (5). 坚持用英文的教材而不是中文的。比如: BBC的Learning English,或是到一些ESL网站上看看,如 ESL: English as a Second Language 上有一些课程。
        (6). 花钱参加一些线上的英文课程,用视频和老外练习。
    2. 问问题的能力
        推荐文章:提问的智慧(How To Ask Questions The Smart Way),描述了发问者事前应该做好什么,而什么又是不该做的。
            文中两个缩写:
            STFW (Search the fxxking web)
            RTFM (Read the fxxking manual) 
        推荐文章:Coolshell的《X-Y问题》
            https://coolshell.cn/articles/10804.html
        推荐StackOverflow:如何问问题的一些提示-- "FAQ for StackExchange Site".
            https://meta.stackexchange.com/questions/7931/faq-for-stack-exchange-sites
        作为一个程序员,不做伸手党,你必需要读一读这几篇文章,并努力践行。
    3. 写代码的修养
        推荐书籍:《代码大全》
        推荐书籍:《重构:改善既有代码的设计》=====程序员必读
            "改善既有代码的设计",
            指导如何从零开始构建代码的时候避免不良的代码风格。
        推荐书籍:《修改代码的艺术》,超越了探讨修改代码技术的两部经典(《代码大全》和《重构》)。
        推荐书籍:《代码整洁之道》
        推荐书籍:《程序员的职业索养》
        
        Code Review是非常重要的程序员修养。==没有Code Review的公司都没有必要呆(因为不做Code Review的公司一定是不尊重技术的)。
            推荐文章:
                Code Review Best Practices 
                How Google Does Code Review
                LinkedIn's Tips for Highly Effective Code Review
        Unit Test也是程序员的一个很重要的修养。
            推荐文章:
            JUnit User Guide (中文版)=写Unit Test的框架一般来说都是从JUnit衍生出来的
            You Still Don't Know How to Do Unit Testing
            Unit Testing Best Practices: JUnit Reference Guide
            JUnit Best Practices
    4. 安全防范意识
        程序员必需要保证代码中没有最基本的安全漏洞问题,尤其是对外暴露Web服务的软件,其安全性更为重要。
            了解Web上经常出现的安全问题:OWASP - Open Web Application Security Project
            OWASP是一个开源的、非盈利的全球性安全组织,致力于应用软件的安全研究。其被视为Web应用安全领域的权威参考。
            美国联邦贸易委员会(FTC)强烈建议所有企业需遵循OWASP+大Web弱点防护守则,
                推荐中文版《OWASP Top 10 2017 PDF 中文版》。
            
        安全编程方面的一些Guideline:
            伯克立大学的Secure Coding Practice Guidelines.
            卡内基梅隆大学的 SEI CERT Coding Standards.
            
        HTTP相关的安全文章也是每个程序员必需要读的--《Hardening Your HTTP Security Headers》
        防御性编程(Defensive Programming):保证对程序的不可预见的使用,不会造成程序功能上的损坏。
            推荐文章:The Art of Defensive Programming.
            Overly defensive programming(过度防御).
    
    5. 软件工程和上线规范
        软件工程和上线系统上线是一件比较严肃的事,这表明你写的软件不是跑在自己的机器上的玩具,或是实验室里的实验品,
            而是交互给用户使用的,甚至是用户付费的软件。
            
        需要遵守上线规范:认真测试+上线前检查+上线后监控。
            测试,推荐两本书:《完美软件:对软件测试的各种幻想》、《Google软件测试之道》
            上线的Checklist:
                推荐文章:Server Side checklist
                Single Page App Checklist
            运维:
                推荐文章《Monitoring 101》,最基本的监控线上运行软件的方法和实践。
    6. 编程规范【参考】
        编程语言相关
            C语言
                NASA C Style
                C Coding Standard.
                C Programming/Structure and style.
                Linux kernel coding style.
                GNU Coding Standard, GNU的编码规范。
            C++语言
                C++ Core Guidelines,这个文档是各种C++的大拿包括原作者在内在持续讨论更新的和C++语言相关的各种最佳实践。
                Google C++ Style Guide.
            Go语言
                Effective Go,Go语言的最佳实践只需要看这篇官方文档就够了。
            Java语言
                Code Conventions for the Java Programming Language, Java官方的编程规范。
                Google Java Style Guide, Google的Java编码规范。
            JavaScript语言
                JavaScript The Right Way,相对比较容读的JavaScript编程规范,其中不但有代码规范,还有设计模式,测试工具,编程框架,游戏引擎.
                Google JavaScript Style Guide, Google公司的JavaScript的编码规范
                Airbnb JavaScript Style Guide, Airbnb的JavaScript编程规范。
                jQuery Core Style Guide, jQuery的代码规范。
                JavaScript Clean Code,《代码整洁之道》一书中的JavaScript的实践。
                
                还有一些其它相对比较简单的JavaScript编程规范。
                JavaScript Style Guides And Beautifiers ,推荐JavaScript编程规范的文章
                JavaScript Style Guide and Coding Conventions,W3Schools的JavaScript.
                Code Conventions for the JavaScript.
            PHP语言
                PHP FIG, PHP编码规范及标准推荐。
                PHP The Right Way,除了编码规范之外的各种PHP的最佳实践,还包括一些设计模式,安全问题,以及服务部署,Docker虚拟化以及各种资源。
                Clean Code PHP, 《代码整洁之道》的PHP实践。
            Python语言
                Style Guide for Python Code, Python官方的编程码规范。
                Google Python Style Guide Google公司的python规范
                The Hitchhiker's Guide to Python,不只是Python的编程规范,还是Python资源的集散地,强烈推荐。
            Ruby语言
                Ruby Style Guide, Airbnb公司的Ruby编程规范。
                Ruby Style Guide
            Rust语言
                Rust Style Guide
                Rust Guidelines 开源社区里最好的Rust编程规范。
            Scala语言
                Scala Style Guide, Scala官方的编程规范。
                Databricks Scala Guide - DatabricksScala编程规范。
                Scala Best Practices.
            Shell语言
                Google Shell Style Guide, Google的Shell脚本编程规范。
            Node.js相关
                npm-coding-style
                Microsoft + Node.js Guidelines
                Node.js Style Guide.
            Mozilla的编程规范
                Mozilla Coding Style Guide, 其中包括C、 C++, Java, Python, JavaScript. Makefile和SVG等编程规范。
        前端开发相关
            CSS Guidelines, CSS容易学,但是不好写,这篇规范会教你如何写出一个健全的、可管理的,并可以扩展的CSS。
            Scalable and Modular Architecture for CSS,这是一本教你如何写出可扩展和模块化的CSS的电子书,非常不错。
            Frontend Guidelines,一些和HTML,CSS,JavaScript相关的最佳实践。
            Sass Guidelines, Sass作为CSS的补充,其要让CSS变得更容易扩展,更灵活,更容易被滥用。
            Airbnb CSS / Sass Styleguide, Airbnb的CSS/Sass规范。
            说了Sass就不得不说LESS,LESS相关的: 
            LESS Coding Guidelines, LESS Coding Guidelines, LESS coding standard.
            HTML Style Guide,性能更高,结构更好,容易编程和扩展的HTML的规范。
            HTML + CSS Code Guide,如何写出比较灵活、耐用、可持续改进的HTML和CSS的规范。
            CoffeeScript Style Guide, CoffeeScript的最佳实践和编程规范。
            Google HTML/CSS Style Guide, Google的HTML/CSS的编程规范。
            Guidelines for Responsive Web Design ,响应式Web设计的规范和最佳实践。
            U.S. Web Design Standards,这是美国政府网端要求的一些UI交互可视化的一些规范。
            前端开发的各种注意事项列表:Front-End Checklist 包括HTML, CSS和JavaScript, 图片、字体、SEO、性能相关,以及一些安全相关的事项。
        移动端相关
            Kotlin
                Coding Conventions.
            Objective-C语言
                Objective-C Style guide, Style guide & coding conventions for Objective-C projects.
                Google Objective-C Style Guide.
                MYTimes Objective-C Style Guide,The Objective-C Style Guide used by The New York Times.
            Swift语言
                API Design Guidelines.
                Swift-一个Swift的相关编程规范的教程。
                Swift style guide.
                Swift Style Guide - LinkedIn的官方 Swift编程规范。
                Metova's Swift style guide.
                Xmartlabs Swift Style Guide, Xmartlabs的 Swift编程规范。
        API相关
            HAL,一个简单的API规范教程。
            Microsoft REST API Guidelines, 微软软Rest API规范。
            API Design Guide.
            RESTful API Designing guidelines-The best practices
            JSON API - Recommendations, JSON相关的API的一些推荐实践。
            API Security Checklist, API的安全问题的检查列表。
        开发工具相关
            Markdown相关
                Google Markdown Style Guide 
                Markdown Style Guide
            JSON
                Google JSON Style Guide,
                JSON Style Guide
            Git相关
                Git Style Guide.
                Few Rules from Git Documentation
            正则表达式相关
                RegexHQ.
                Learn regex the easy way.
    
专业基础篇--编程语言    
    编程语言:
        编程语言:以C、C++、Java这三门语言为主,至少掌握C和Java,推荐go
            C、C++和Java这三个工业级的编程语言。
            C和C++语言规范都由ISO标准化过,而且都有工业界厂商组成的标准化委员会来制定工业标准。
            它们已经在业界应用于许多重要的生产环境中。
            
            推荐学习Go语言:云计算领域事实上的标准语言 尤其早在Docker Kubernetes等项目中
                Go语言现在很受关注,它是取代C和C++的另一门有潜力的语言。
                C语言太原始了,C++太复杂了,Java太高级了,Go语言就在这个夹缝中
                go已成为云计算领域事实上的标准语言,尤其是在Docker/Kubernetes等项目中。
                Go语言社区正在不断地从Java社区移植各种Java的轮子过来,Go社区现在也很不错。 
        理论学科:算法、数据结构、网络模型、计算机原理等计算机科学专业知识。
            1. 这些理论知识是计算机科学这门学科最精华的知识,是人类智慧的精华。要想成为高手,必需要掌握和学习
            2. 这些基础理论知识可以帮你解决一些很复杂或是很难的问题
            3. 这些理论知识的思维方式可以让你有触类旁通,一通百通的感觉。比较难嘴,但嘴过以后,你将获益终生。
            推荐文章《程序员的荒谬之言还是至理名言?》
        系统知识:系统知识是理论知识的工程实践,像Unix/Linux, TCP/IP,C10K挑战等专业的系统知识。
            系统知识是你把理论应用到实际项目当中,解决实际问题的重要知识。
    编程语言:
        Java语言
            入门书籍:
                入门:《Java核心技术:卷1基础知识》
                Spring框架:《Spring实战》和《Spring Boot实战》,只想看一本的话,就看《Spring Boot实战》
            提级:《Effective Java》===一定要读。
                推荐一下Google Guava库,是Effective Java书中经验的实践代表
                这个库不但是JDK的升级库,其中有如:集合(collections)、缓存(caching)、原生类型支持(primitives support)、并发库(concurrency libraries)、通用注解(common annotations)、字符串处理(stringprocessing)、I/0 等库
                
                《Java并发编程实战》,一本完美的Java并发参考手册
                Java性能优化:推荐《Java性能权威指南》
                    想了解更多的底层细节,推荐《深入理解Java虚拟机》。 
                编程思想:《Java编程思想》===信息密度大,需要不停思考,程序员一定要读。
                《精通Spring 4.x》==陈雄华?820页
                面向对象的设计模式:经典《设计模式》。可以《Head First设计模式》入门。
                    学习设计模式,不要迷失在那23个设计模式中,你一定要明白这两个原则:
                    • Program to an 'interface', not an 'implementation'。
                        使用者不需要知道数据类型、结构、算法的细节。
                        使用者不需要知道实现细节,只需要知道提供的接口。
                        利于抽象、封装,动态绑定,多态。符合面向对象的特质和理念。
                    • Favor 'object composition' over 'class inheritance'
                        继承需要给子类暴露一些父类的设计和实现细节。
                        父类实现的改变会造成子类也需要改变。
                        我们以为继承主要是为了代码重用,但实际上在子类中需要重新实现很多父类的方法。继承更多的应该是为了多态。 
        C/C++语言
            C语言是程序员必须学习的语言
            绝大多数编程语言都是C-like的语言一一如果你不学C语言,你根本没有资格说你是一个合格的程序员!
            
            尤其推荐,已故C语言之父Dennis M. Ritchie和著名科学家Brian W. Kernighan合作的圣经级的教科书《C程序设计语言》。
                这本书不是ANSI标准 而是原作者的标准又被叫作K&R C
            非常经典的C语言的书《C语言程序设计现代方法》。可以配合之前的The C Programming Language。
            干万不要看谭浩强的C语言的书。各种误导===============哈哈
            《C陷阱与缺陷》--你会发现C语言在泛型编程上的各种问题,这个时候推荐你学习一下C++语言。
            
            C++是世界目前最复杂也是最难的编程语言。但是,C++是目前世界上范式最多的语言了,其做得最好的范式就是“泛型编程”,这在静态语言中,是绝对地划时代的一个事。
            你有必要学习一下C++是如何解决C语言中的各种问题的。
            推荐《C++ Primer中文版》久负盛名的C++经典教程。
            推荐两本更为经典的书《Effective C++》和《More Effective C++》。
                这两本书的内容会随着你经历的丰富而变得丰富,这也是对我影响最大的两本书,
                其中影响最大的不是书中的那些C++的东西,而是作者的思维方式和不断求真的精神。
            
            推荐难啃的经典《深度探索C++对象模型》
                学习C/C++需要好好了解一下编译器到底干了什么事,就像Java需要了解JVM一样,啃完这本书,C++对你来说就再也没有什么秘密可言。
                我以前写过的《C++虚函数表解析》,还有《C++对象内存布局》属于这个范畴。
            推荐C++的作者 Bjarne Stroustrup写的 《C++ FAQ (中文版)》 
        Go语言==Go语言最突出之处是并发编程
            C语言太原始了,C++太复杂了,Go语言是不二之选。有了C/C++的功底,学习Go语言非常简单。
            入门:推荐《 Go by Example》、《Go 101》、《The Go Programming Language》
                作者陈皓的“GO语言简介(上)-语法”和"GO 语言简介(下)-特性"
                Go语言官方的《Effective Go》========必读
            并发编程:Unix老牌黑客罗勃·派克(Rob Pike)的
                Go Concurrency Patterns (幻灯片和演讲视频)
                Advanced Go Concurrency Patterns (灯片、演讲视频)
            在线资源:
                Go精华文章列表
                Go相关博客列表
                Go Talks
                Go资源列表:Awesome Go:https://go.libhunt.com/  ??
        【总结】
        1. 在编程语言方面,推荐学习C、C++、Java和Go四门语言
        2. C语言是必须学习的语言,因为这个世界上绝大多数编程语言都是C-like的语言,也是在不同的方面来解决C语言的各种问题。
        3. C++复杂难学,但它几乎是目前世界上范式最多的语言了,其做得最好的范式就是"泛型编程”,这在静态语言中,是绝对地划时代的一个事。
            尤其要看看C++是如何解决C语言中的各种问题的。
        4. Java是我认为综合能力最强的语言。我是先学了Java,然后又去学了C++,之后去学了C语言的。
            C->C++->Java整条线融汇贯通,对程序员未来的技术成长有非常大的帮助。
        5. 推荐学习Go语言
        一个合格的程序员应该掌握几门语言。
        一方面,对比不同的语言,让你有更多的思考。
        另一方面,也是一种学习能力的培养,让你对于未来的新技术学习得更快。

专业基础篇--理论学科
    数据结构和算法:
        不要认为算法无用:在平时编程中用不到,即使用到了也可以直接调用第三方的库
        一旦学会算法的套路,受用无穷
        
        基础知识:推荐书籍:《算法》==不够深入,
                算法图解===不枯燥
        理论加持:推荐景点偏理论书籍《算法导论》
        思维改善:推荐书籍:《编程珠玑》
        
        算法训练:在线    LeetCode::https://leetcode.com/
            https://en.wikipedia.org/wiki/List_of_algorithms
            数据结构动画网站:https://www.3dvisualizr.io/?utm_term=data%20visualization&utm_campaign=%5B3DV%5D+H1/22+continuation&utm_source=adwords&utm_medium=ppc&hsa_acc=5093702241&hsa_cam=15103235230&hsa_grp=133443145597&hsa_ad=582614368780&hsa_src=g&hsa_tgt=kwd-24211440&hsa_kw=data%20visualization&hsa_mt=p&hsa_net=adwords&hsa_ver=3&gclid=EAIaIQobChMIgJD0o8eJ9gIV0ACiAx2eGgaiEAAYASAAEgLMfPD_BwE
        其他理论基础【大学教材】
            书籍《数据结构与算法分析》,作者Mark Allen Weiss
            书籍《数据库系统概念》
            《现代操作系统》
            《计算机网络》
            《计算机程序的构造和解释》,
            《编译原理》,这本书又叫"龙书"
    建议想进入专业编程领域的人,一定要学习算法、数据结构、网络模型、计算机原理等理论知识,这是计算机科学这门学科最精华的知识了,
        认真学习,理解其背后的逻辑和思维方式,会令你受益匪浅。
    不管是未来学习新知识,还是解决什么疑难问题,都能在这些知识中获得灵感或者启发。
专业基础篇--系统知识:至少要掌握三个系统的基础知识,即操作系统,网络系统,数据库系统。它们分别代表着计算机基础构架的三大件一一计算、存储、网络。
    推荐翻译版图书《深入理解计算机系统》,原书名为《Computer Systems A Programmer's Perspective》===程序员必读
    推荐美国计算机科学家理查德·史蒂文斯(Richard Stevens) 的三套巨经典无比的
        《Unix高级环境编程》
            趁热打铁看看《Linux/Unix系统编程手册》
            罗伯特拉姆(Robert Love) 的Linux System Programming英文电子版(翻译版:Linux系统编程)。
        《Unix网络编程》第1卷 套接口API、第2卷 进程间通信
            C10K Problem (中文翻译版) =====一定要读 
            C1OK问题本质上是操作系统处理大并发请求的问题。
            对于Web时代的操作系统而言,对于客户端过来的大量的并发请求,需要创建相应的服务进程或线程。
            这些进程或线程多了,导致数据拷贝频繁(缓存I/0、内核将数据拷贝到用户进程空间、阻塞),进程/线程上下文切换消耗大,从而导致资源被耗尽而崩溃。
            了解这个问题,并了解操作系统是如何通过多路复用的技术来解决这个问题的,有助于你了解各种I/O和异步模型,这对于你未来的编程和架构能力是相当重要的
            C10M问题:推荐文章 The Secret To 10 Million Concurrent Connections -The Kernel Is The Problem, Not The Solution。
        《TCP/IP详解 卷I协议》。
    ==================以上是绝对经典,绝对难啃的,通俗易懂一点的可以参考
    《Linux C编程一站式学习》
    《TCP/IP网络编程》
    《图解TCP/IP》
    《The TCP/IP Guide》====豆瓣评分9.2
    《Wireshark数据包分析实战》===可以实践
    
    
    关于TCP的东西,推荐下列文章:
        Let's code a TCP/IP stack, 1: Ethernet & ARP.
        Let's code a TCP/IP stack, 2: IPv4 & ICMPV4.
        Let's code a TCP/IP stack, 3: TCP Basics & Handshake.
        Let's code a TCP/IP stack, 4: TCP Data Flow & Socket API
        Let's code a TCP/IP stack, 5: TCP Retransmission
        
    系统知识学习要点:
        1. 用这些系统知识操作一下文件系统,实现一个可以拷贝目录树的小程序。
        2. 用fork / wait / waitpid写一个多进程的程序,用pthread写一个多线程带同步或互斥的程序。比如,多进程购票的程序。
        3. 用signal / kill / raise / alarm / pause / sigprocmask实现一个多进程间的信号量通信的程序。
        4. 学会使用gcc和gdb来编程和调试程序(参看陈皓的《用gdb调试程序》一到七)。
        5. 学会使用makefile来编译程序(参看陈皓的《跟我一起写makefile》一到十四)。
        6. Socket的进程间通信。用C语言写一个1对1的聊天小程序,或是一个简单的HTTP服务器。
        
    实践项目==实现语言可以用C、C++或Java。
        1. 实现一个telnet版本的聊天服务器,主要有以下需求:
            每个客户端可以用使用telnet ip:port的方式连接到服务器上。
            新连接需要用用户名和密码登录,如果没有,则需要注册一个。
            然后可以选择一个聊天室加入聊天。
            管理员有权创建或删除聊天室,普通人员只有加入、退出、查询聊天室的权力。
            聊天室需要有人数限制,每个人发出来的话,其它所有的人都要能看得到。
        2. 实现一个简单的HTTP服务器,主要有以下需求:
            解释浏览器传来的HTTP协议,只需要处理URL path。
            然后把所代理的目录列出来。
            在浏览器上可以浏览目录里的文件和下级目录。如果点击文件,则把文件打开传给浏览器(浏览器能够自动显示图片、PDF,或HTML, CSS, JavaScript以及文本文件)
            如果点击子目录,则进入到子目录中,并把子目录中的文件列出来。
        3. 实现一个生产者/消费者消息队列服务,主要有以下需求:
            消息队列采用一个Ring-buffer的数据结构。
            可以有多个topic供生产者写入消息及消费者取出消息。
            需要支持多个生产者并发写。
            需要支持多个消费者消费消息(只要有一个消费者成功处理消息就可以删除消息)
            消息队列要做到不丢数据(要把消息持久化下来)能做到性能很高。
    【总结】
        1. 编程语言  以C、C++、Java为主,推荐学习go
        2. 算法和数据结构  必须掌握
        3. 计算机相关系统  至少要掌握操作系统、网络系统和数据库系统,对应着计算机的计算、网络和存储(计算机三大件)
        4. 之后的发展方向
            .底层方向:操作系统、文件系统、数据库、网络...
            架构方向:分布式系统架构、微服务、DevOps, Cloud Native....
            数据方向:大数据、机器学习、人工智能...
            前端方向:你对用户体验或是交互更感兴趣,那么你走前端的路吧。
            其它方向:比如,安全开发、运维开发、嵌入式开发.
软件设计篇--软件设计
    Linas说世界程序员之所以有高下之分,是因为程序员的“品味”不同。
    每一个程序员,如果你想成为软件工程师、设计师或架构师,软件设计是你必须用心学习的事。学习软件设计的方法、理念、范式和模式。
    软件设计并不是一朝一夕就能学会的,也不是别人能把你教会的,很多东西需要你自己用实践、用时间、用错误、用教训、用痛苦才能真正体会其中的精髓的。
    所以,除了学习理论知识外,你还需要大量的工程实践,然后每过一段时间就把这些设计的东西重新回炉一下
    要学好这些软件开发和设计的方法,你真的需要磨练和苦行,反复咀嚼,反复推敲,在实践和理论中螺旋式地学习,才能真正掌握。所以,你需要有足够的耐心和恒心。
    
    编程范式
        学习编程范式可以让你明白编程的本质和各种语言的编程方式。
        陈皓的《编程范式游记》
        维基百科:Wikipedia: Programming paradigm
            https://en.wikipedia.org/wiki/Programming_paradigm
        推荐文章六个编程范式将改变你对编程的看法:Six programming paradigms that will change how you thinkdefault
            这篇文章讲了默认支持并发(Concurrent bydefault) 、
            依赖类型(Dependent types) 、
            连接性语言(Concatenative languages) 、
            明式编程(Declarative programming)、
            符号式编程(Symbolic programming)、
            基于知识的编程(Knowledge-based programming)等六种不太常见的编程范式,并结合了一些语言进行讲述。
            作者认为,这些编程范式背后的思想十分有魅力,能够改变对编程的思考。
        
        推荐文章:Programming Paradigms for Dummies: What Every Program
            作者彼得·范·罗伊(Peter Van Roy),比利时鲁汉大学的计算机科学教师。
        编斯坦福大学公开课:编程范式,这是一门比较基础且很详细的课程,范式。以C语言为例,它解释了C语言的基本要素,如指针、内存分配用的编程范式有所了解。
    一些软件设计的相关原则
        1. Don't Repeat Yourself (DRY) 
            DRY是当在两个或多个地方发现一些相似的代码的时候,要把它们的共性抽象出来形成一个唯一的新方法,
            并且改变现有地方的代码让它们以一些合适的参数调用这个新的方法。
        2. Keep It Simple, Stupid(KISS), 
            宜家(IKEA)简约、高效的家居设计和生产思路;
            微软(Microsoft)“所见即所得”的理念;
            谷歌(Google)简约、直接的商业风格,无一例外地遵循了"KISS"原则。
        3. Program to an interface, not an implementation,设计模式中最根本的哲学,注重接口,而不是实现,依赖接口,而不是实现。
            接口是抽象是稳定的,实现则是多种多样的。在面向对象的S.O.L.I.D原则中的依赖倒置原则,就是这个原则的另一种样子。
            还有一条原则叫 Composition over inheritance (喜欢组合而不是继承)。
        4. You Ain't Gonna Need It (YAGNI),--只考虑和设计必须的功能,避免过度设计。
            只实现目前需要的功能,在以后你需要更多功能时,可以再进行添加。如无必要,勿增复杂性。
        5. Law of Demeter,迪米特法则又称"最少知识原则" (Principle of Least Knowledge)
            克雷格·拉尔曼(Craig Larman) 把Law of Demeter又称作"不要和陌生人说话”。
            
            LoD, 正式的表述如下:对于对象'O'中一个方法'M', M应该只能够访问以下对象中的方法:
                1. 对象O;
                2. 与O直接相关的Component Object;
                3. 由方法M创建或者实例化的对象;
                4.作为方法M的参数的对象。
        6. 面向对象的S.O.L.I.D 原则">http://en.wikipedia.org/wiki/Solid_(object-oriented_design):
            • SRP (Single Responsibility Principle) -职责单一原则。
                单一职责原则的核心的思想是:一个类,只做一件事,并把这件事做好,其中只有一个引起它变化的原因。
                单一职责原则可以看作是低耦合、高内聚在面向对象原则上的引申,
                将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。
                职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相互之间就产生影响,从而极大地损伤其内聚性和耦合度。
                单一职责,通常意味着单一的功能,因此不要为一个模块实现过多的功能点,以保证实体只有一个引起它变化的原因。
            • OCP (Open/Closed Principle) -开闭原则**。
                开闭原则的核心思想是:模块是可扩展的,而不可修改的。
                也就是说,对扩展是开放的,而对修改是封闭的。
                    对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
                    对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
            • LSP (Liskov substitution principle) -里氏代换原则。
                软件工程大师罗伯特·马丁(Robert C. Martin)把里氏代换原则简化为-句话:
                    "Subtypes must be substitutable fortheir base types"。
                    也就是,子类必须能够替换成它们的基类。
                    即子类应该可以替换任何基类能够出现的地方,并且经过替换以后,代码还能正常工作。
                    另外,不应该在代码中出现if/else之类对子类类型进行判断的条件。里氏替换原则LSP是使代码符合开闭原则的一个重要保证。
                    正是由于子类型的可替换性才使得父类型的模块在无需修改的情况下就可以扩展。
            • ISP (Interface Segregation Principle) 接口隔离原则。
                接口隔离原则的意思是把功能实现在接口中,而不是类中,使用多个专门的接口比使用单一的总接口要好。
            • DIP (Dependency Inversion Principle) -依赖倒置原则。
                高层模块不应该依赖于低层模块的实现,而是依赖于高层抽象。
        7. CCP (Common Closure Principle)-共同封闭原则
            一个包中所有的类应该对同一种类型的变化关闭。一个变化影响一个包,便影响了包中所有的类。
            一个更简短的说法是:一起修改的类,应该组合在一起(同一个包里)。
            如果必须修改应用程序里的代码,我们希望所有的修改都发生在一个包里(修改关闭),而不是遍布在很多包里。
        8. CRP (Common Reuse Principle) -共同重用原则,包的所有类被一起重用。
            如果你重用了其中的一个类,就重用全部。
            换个说法是,没有被一起重用的类不应该组合在一起。
            CRP原则帮助我们决定哪些类应该被放到同一个包里。依赖一个包就是依赖这个包所包含的一切。
            当一个包发生了改变,并发布新的版本,使用这个包的所有用户都必须在新的包环境下验证他们的工作,即使被他们使用的部分没有发生任何改变。
            因为如果包中包含未被使用的类,即使用户不关心该类是否改变,但用户还是不得不升级该包并对原来的功能加以重新测试。
            CCP让包尽可能大(CCP原则加入功能相关的类),CRP则让包尽可能小(CRP原则剔除不使用的类)。它们的出发点不一样,但不相互冲突。
        9. 好莱坞原则 - Hollywood Principle,好莱均原则就是一句话--"don't call us, we'll call you."。
            好莱坞的经纪人不希望你去联系他们,而是他们会在需要的时候来联系你。
            也就是说,所有的组件都是被动的,所有的组件初始化和调用都由容器负责。
            简单来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。
            
            这也就是所谓“控制反转”的概念所在:
                1)不创建对象,而是描述创建对象的方式。
                2)在代码中,对象与服务没有直接联系,而是容器负责将这些联系在一起。
                控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
                好菜均原则就是IoC (Inversion of Control)或DI (DependencyInjection)的基础原则。
        10. 高内聚,低耦合 - High Cohesion & Low/Loose coupling,
            内聚,指一个模块内各个元素彼此结合的紧密程度;
            耦合指一个软件结构内不同模块之间互连程度的度量。
            内聚意味着重用和独立,耦合意味着多米诺效应牵一发动全身。
        11. CoC (Convention over Configuration) -惯例优于配置原则,简单点说,就是将一些公认的配置方式和信息作为内部缺省的规则来使用。
        12. SoC (Separation of Concerns)-关注点分离, 
            SoC就是在软件开发中,通过各种手段,将问题的各个关注点分开。如果一个问题能分解为独立且较小的问题,就是相对较易解决的。
            问题太过于复杂,要解决问题需要关注的点太多,而程序员的能力是有限的,不能同时关注于问题的各个方面。
            
            实现关注点分离的方法主要有两种,一种是标准化,另一种是抽象与包装。
            标准化就是制定一套标准,让使用者都遵守它,将人们的行为统一起来,使用标准的人不用担心别人会有很多种不同的实现,使自己的程序不能和别人的配合。
            抽象与包装就是不断地把程序的某些部分抽象并包装起来,一旦一个函数被抽象出来并实现了,那么使用函数的人就不用关心这个函数是如何实现的。
                同样的,一旦一个类被抽象并实现了,类的使用者也不用再关注于这个类的内部是如何实现的。诸如组件、分层、面向服务等这些概念都是在不同的层次上做抽象和包装,以使得使用者不用关心它的内部实现细节。
        13. DbC (Design by Contract) -契约式设计
            DbC的核心思想是对软件系统中的元素之间相互合作以及“责任”与“义务”的比喻。
            如果在程序设计中一个模块提供了某种功能,那么它要:期望所有调用它的客户模块都保证一定的进入条件:
                这就是模块的先验条件(客户的义务和供应商的权利,这样它就不用去处理不满足先验条件的情况)
                保证退出时给出特定的属性:这就是模块的后验条件(供应商的义务,显然也是客户的权利)
                在进入时假定,并在退出时保持一些特定的属性:不变式。
        14. ADP (Acyclic Dependencies Principle) -无环依赖原则
            包(或服务)之间的依赖结构必须是一个直接的无环图形,也就是说,在依赖结构中不允许出现环(循环依赖)。
            如果包的依赖形成了环状结构,怎么样打破这种循环依赖呢?
                第一种方法是创建新的包,如果A、B、C形成环路依赖,那么把这些共同类抽出来放在一个新的包D里。这样就把C依赖A变成了C依赖D以及A依赖D,从而打破了循环依赖关系。
                第二种方法是使用DIP(依赖倒置原则)和ISP(接口分隔原则)设计原则。
    一些软件设计的读物
        《领域驱动设计》===领域驱动设计方面的经典之作。
        《UNIX编程艺术》,这本书主要介绍了Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验
        《Clean Architecture》
        The Twelve-Factor App======架构师必读
            软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS)
        Avoid Over Engineering 关于过度设计的文章。
        Instagram Engineering's 3 rules to a scalable cloud application architecture, 
            Instagram工程的三个黄金法则:
            1)使用稳定可靠的技术(迎接新的技术); 
            2)不要重新发明轮子; 
            3) Keep it very simple。
            
            Amazon也有两条工程法则,一个是自动化,一个是简化。 
        How To Design A Good API and Why it Matters - Joshua Bloch, Google的一个分享,关于如何设计好一个API。
        关于Restful API的设计,推荐学习并借鉴以下文章:
            Best Practices for Designing a Pragmatic RESTful API
            Ideal REST API design
            HTTP API Design Guide
            Microsoft REST API Guidelines
            IBM Watson REST API Guidelines
            Zalando RESTful API and Event Scheme Guidelines
        The problem with Logging 打日志要注意的问题
        Concurrent Programming for Scalable Web Architectures,在线的免费书,教你如何架构一个可扩展的高性能的网站。
        
高手成长篇:Linux系统、内存和网络        
    主要有以下内容:
        系统底层相关:底层深入下去是可以深不见底的
        数据库相关【非我强项】
        分布式加固
        微服务:微服务和SOA的区别
        容器化和自动化运维:主要是Docker和Kubernets
        机器学习和人工智能【非我强项】
        前端开发:H5、JavaScript、浏览器工作原理、相关网络协议和性能优化技巧以及JavaScript框架(React.js和Vue.js)
        信息源:
        【注意】
        学习到一定程度,就是要从书本中走出去,到社区里和大家一起学习,而且还需要自己找食吃了。
        上面所列知识点不是隔离开来的,而是相辅相成的。虽然看上去内容很多,但你也别害怕,真的不用害怕,你会越学越快,越实践越有感觉,也越有效率。
        只要你能坚持下来,我保证,你一定会成为各个大公司的抢手货,这点你一定要相信我。
    
    Linux系统相关:
        学习Unix/Linux操作系统干万不要一下子扎到源代码里去,要先通过读一些文档来学习
        推荐:
            Red Hat Enterprise Linux文档
                https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/9-beta
            Linux Insides:GitHub上的一个开源电了书,其中讲述了Linux内核是怎样启动、初始化以及进行管理的。
            LWN's kernel page:
            Learn Linux Kernel from Android Perspective,从Android的角度来学习Linux内核,这个站点上的Blog相对于前面的比较简单易读一些。
            Linux Kernel Doc, Linux内核文档
            Kernel Planet, Linux内核开发者的Blog
            Linux Performance and Tuning Guidelines ,IBM出的红皮书,有点老了,但还是非常值得一读。
            TLK: The Linux Kernel ,这是一本相对比较老的书了, Linux内核版本为2.0.33,了解一下前人的思路。
            Linux Performance,这个网站上提供了和Linux系统性能相关的各种工具和文章收集,非常不错。
            Optimizing web servers for high throughput and low latency,非常底层的系统调优的文章,来自DropBox,
                你可以学到很多底层的性能调优的经验和知识。
    内存相关
        重点还是Linux操作系统相关的内存管理。
        LWN.net上的"What every programmer should know about memory"每个程序员都应该了解的内存知识
            • Part 1: Introduction
            • Part 2: CPU cachesPart 
            • Part 3: Virtual memory
            • Part 4: NUMA systems
            • Part 5 What programmers can do - cache optimization
            • Part 6 What programmers can do - multi-threaded optimizations
            • Part 7 Memory performance tools
            • Part 8 Future technologies
            • Part 9 Appendices and bibliography
        几篇和内存相关的论文:
            Memory Barriers: a Hardware View for Software Hackers
            A Tutorial Introduction to the ARM and POWER Relaxed Memory Models
                对ARM和POWER的宽松内存模型的一个教程式的简介
            x86-TSO: A Rigorous and Usable Programmer's Model for x86 Multiprocessors
                介绍x86的多处理器内存并发访问的一致性模型TSO。
        内存管理方面的lib库。
            通常来说,我们有三种内存分配管理模块:
                ptmalloc 是glibc的内存分配管理。
                tcmalloc 是Google的内存分配管理模块,全称是Thread-Caching malloc,基本上来说比glibc的ptmalloc快两倍以上。
                jemalloc:(有很大的影响力)是BSD提供的内存分配管理。
            
            关于C的这些内存分配器,参看Wikipedia的 "C Dynamic Memory Allocation"
            推荐文章:
                ptmalloc, tcmalloc和jemalloc内存分配策略研究.
                内存优化总结: ptmalloc, tcmalloc和jemalloc.
                Scalable memory allocation using jemalloc.
                Decreasing RAM Usage by 40% Using jemalloc with Python & Celery
    计算机网络
        主要有三个部分:
            网络学习
            网络调优
            网络协议
        网络学习
            推荐书--《计算机网络(第五版)》,国内外使用最广泛、最权威的计算机网络经典教材。
                全书按照网络协议模型自下而上(物理层、数据链路层、介质访问控制层、网络层、传输层和应用层)有系统地介绍了计算机网络的基本原理,
                    并结合Internet给出了大量的协议实例。
                与时俱进地引入了最新的网络技术,包括无线网络、3G蜂窝网络、RFID与传感器网络、内容分发与P2P网络、流媒体传输与IP语音,以及延迟容忍网络等。
            推荐网络教程和讲义
                渥汰华大学的一个课程讲议: Computer Network Design
                GeeksforGeeks: Computer Network Tutorials.
        网络调优
            《Linux的高级路由和流量控制HowTo》 (Linux Advanced Routing & Traffic Control HOWTO ),关于 iproute2、流量整形和一点netfilter的指南。
            推荐文档: Red Hat Enterprise Linux Network Performance Tuning Guide.
            网络工具:Awesome列表:Awesome Pcap Tools,
            TCP调优的论文:Making Linux TCP Fast
            PackageCloud 上的两篇关于Linux网络栈相关的底层文章
                Monitoring and Tuning the Linux Networking Stack: Receiving Data
                Monitoring and Tuning the Linux Networking Stack: Sending Data
        网络协议
            学习网络协议最好的方式就是学习通讯相关的RFC。
            读RFC有几个好处,一方面可以学习技术,另一方面,你可以通过RFC学习到一个好的技术文档是怎么写的,还能看到各种解决问题的方案和思路。
            
            对于第2层链路层,需要了解一下ARP:
                • RFC 826 - An Ethernet Address Resolution Protocol
            Tunnel相关的协议:
                RFC 1853 - IP in IP Tunneling
                RFC 2784 - Generic Routing Encapsulation (GRE)
                RFC 2661 - Layer Two Tunneling Protocol "L2TP"
                RFC 2637 - Point-to-Point Tunneling Protocol (PPTP)
            对于第4层,需要了解TCP/IP
                CoolShell上的《TCP的那些事儿(上)》和《TCP的那些事儿(下)》两篇文章中的连接:
                • RFC 793 - Transmission Control Protocol-最初的TCP标准定义,但不包括TCP相关细节。
                • RFC 813 - Window and Acknowledgement Strategy in TCP - TCP窗口与确认策略,并讨论了在使用该机制时可能遇到的问题及解决方法。
                • RFC 879 - The TCP Maximum Segment Size and Related Topics - 讨论MSS参数对控制TCP分组大小的重要性,以及该参数与IP分段大小的关系等。
                • RFC 896 - Congestion Control in IP/TCP Internetworks - 讨论拥塞问题和TCP如何控制拥塞。
                • RFC 2581 - TCP Congestion Control -描述用于拥塞控制的四种机制:
                    慢启动、拥塞防御、快重传和快恢复。
                    后面这个RFC被RFC 5681更新。
                    RFC 6582 - The NewRenoModification to TCP's Fast Recovery Algorithm 中一个改进的快速恢复算法。
                • RFC 2018 - TCP Selective Acknowledgment Options - TCP的选择确认。
                • RFC 2883 - An Extension to the Selective Acknowledgement (SACK) Option for TCP - 对于RFC 2018的改进。
                • RFC 2988 - Computing TCP's Retransmission Timer - 
                    讨论与TCP重传计时器设置相关的话题,重传计时器控制报文在重传前应等待多长时间。经典的TCP Karn/Partridge重传算法。
                • RFC 6298 - Computing TCP's Retransmission Timer - TCP Jacobson/Karels Algorithm重传算法。
                TCP最牛的不是不丢包,而是拥塞控制。推荐经典论文《Congestion Avoidance and Control》.
                
            Linux下的TCP参数:推荐TCP的man page。
            对于第7层协议,重点学习HTTP协议:
                推荐书籍《HTTP权威指南》,了解到HTTP协议的绝大多数特性。
                HTTP 1.1:
                • RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing 
                • RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
                • RFC 7232 - Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests
                • RFC 7233 - Hypertext Transfer Protocol (HTTP/1.1): Range Requests
                • RFC 7234 - Hypertext Transfer Protocol (HTTP/1.1): Caching
                • RFC 7235 - Hypertext Transfer Protocol (HTTP/1.1): Authentication
                HTTP/2
                • Gitbook - HTTP/2详解
                • http2 explained (译版)
                • HTTP/2 for a Faster Web
                • Nginx HTTP/2 白皮书
                • HTTP/2 的两个RFC:
                    HTTP/2的协议本身:RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2), 
                    HTTP/2的压缩算法:RFC 7541 - HPACK: Header Compression for HTTP/2 ,
                维基百科:Wikipedia: Internet Protocol Suite。
                
高手成长篇:异步I/O模型和Lock-Free编程
    异步IO模型:异步I/O模型是有程序员都必需要学习的一门技术或是编程方法【★★★★★】
        史蒂文斯(Stevens)在《UNIX网络编程》I/O Models中介绍了五种I/O模型:
            阻塞I/O.
            非阻塞I/O
            I/O的多路复用(select和poll)
            信号驱动的I/O (SIGIO)
            异步I/O (POSIX的aio_functions)
        Java相关的I/O模型的文章来:
            Thousands of Threads and Blocking I/O: The Old Way to Write Java Servers Is New Again (and WayBetter)
            Java相关的PPT -道格·莱亚(Doug Lea)的Scalable IO in Java
        各种异步I/O的实现和设计方式:select -> poll -> epoll -> aio -> libevent -> libuv, 
            • IBM - Boost application performance using asynchronous I/O,关于AIO的文章。
            • Lazy Asynchronous I/O For Event-Driven Servers
            
            异步I/O模型中的Windows I/O Completion Ports 
                文章Inside I/O Completion Ports。
            关于Windows I/O Processing推荐书籍
                Windows Internals
            
            Libevent:
                尼克·马修森(Nick Mathewson)写的libevent 2.0 book
                国人写的电子书《Libevent深入浅出》
            Libuv
                推荐官网:Libuv Design Overview。 
        异步I/O模型的发展路径:
            基本上来说,异步I/O模型的发展技术是: select -> poll -> epoll -> aio -> libevent -> libuv, 
            Unix/Linux用了好几十年走过的技术变迁,都不如Windows I/O Completion Ports 设计得好(个人观点)
        Reactor模式编程模式    
            了解异步I/O模式的实现以后,你会看到一个编程模式--Reactor模式。
            推荐文章(读这三篇就够了)。
                • Understanding Reactor Pattern: Thread-Based and Event-Driven
                • Reactor Pattern
                • The reactor pattern and non-blocking IO
            延伸阅读文章:
                • The Secret To 10 Million Concurrent Connections -The Kernel Is The Problem, Not The Solution - C10M问题
            还有几篇可能有争议的文章,让你从不同的角度思考。
                • Select is fundamentally broken
                • Epoll is fundamentally broken 1/2
                • Epoll is fundamentally broken 2/2
    Lock-Free编程相关
        Lock-Free -无锁技术越来越被开发人员重视,因为锁对于性能的影响实在是太大了,如果想开发出一个高性能的程序,非常有必要学习Lock-Free的编程方式。
        
        关于无锁的数据结构,推荐教程
            • Dr.Dobb's: Lock-Free Data Structures
            • Andrei Alexandrescu: Lock-Free Data Structures
            • 大牛 保罗·麦肯尼(Paul E. McKenney)电子书: Is Parallel Programming Hard, And, If So, What Can You Do About It? 
            • 维基百科词条:Non-blocking algorithm、 Read-copy-update 和 Seqlock
            • 两篇论文:
                • Implementing Lock-Free Queues陈皓翻译为“无锁队列的实现”。
                • Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms,无阻塞和阻塞的并发队列算法。
            • 博客
                • 1024cores - 德米特里·伐由科夫(Dmitry Vyukov)的和lock-free编程相关的网站。
                • Paul E. McKenney - 保罗(Paul) 的个人网站。
                • Concurrency Freaks -关于并发算法和相关模式的网站。
                • Preshing on Programming -加拿大程序员杰夫-普莱(Jeff Preshing)的技术博客,主要关注C++和Python两门编程语言
                • Sutter's Mill - 赫布·萨特(Herb Sutter)C++专家,其博客有关于C++语言标准最新进展的信息
                • Mechanical Sympathy - 马丁• 汤普森(Martin Thompson)
        编程相关的一些C/C++的类库:避免重复造轮子(对于Java的,请参看JDK里的Concurrent开头的一系列的类):
            Boost.Lockfree - Boost库中的无锁数据结构。
            ConcurrencyKit - 并发性编程的原语。
            Folly - Facebook的开源库(它对MPMC队列做了一个很好的实现)
            Junction - C++中的并发数据结构。
            MPMCQueue-一个用C++11编写的有边界的“多生产者-多消费者"无锁队列。
            SPSCQueue-一个有边界的“单生产者-单消费者”的无等待、无锁的队列。
            Seqlock - 用C++c现的Seqlock
            Userspace RCU - liburcu是一个用户空间的RCU (Read-copy-update,读-拷贝-更新)库。
            libcds -一个并发数据结构的C++库。
            liblfds -一个用C语言编写的可移植、无许可证、无锁的数据结构库。 
        其他:
            关于64位系统编程一文足够: 
                All about 64-bit programming in one place,关于64位编程相关的收集页面,包括相关的文章、28节课程,知识库和相关的blog.
            事务性内存(TM):What Scalable Programs Need from Transactional Memory 
            Improving OpenSSL Performance,提高OpenSSL的执行性能,还讲了一些底层的性能调优知识。
            关于压缩的内容,推荐下面这两篇实践性很强的文章:
                • How eBay's Shopping Cart used compression techniques to solve network I/O bottlenecks 
                    eBay是如何通过压缩数据来提高整体服务性能的
                • Linkedin: Boosting Site Speed Using Brotli Compression, 使用 Brotli 来替换 gzip,以此带来更快的访问
            关于SSD硬盘性能测试:推荐文章:
                Performance Testing with SSDs, Part 1
                Performance Testing with SSDs Part 2
                这两篇文章介绍了测试SSD硬盘性能以及相关的操作系统调优方法。
            Linux/Unix下安全编程:
                推荐电子书Secure Programming HOWTO - Creating Secure Software
        相关论文
            • Hints for Computer System Design ,计算机设计的忠告,ACM图灵奖得主 Butler Lampson的一篇论文。
                这篇论文简明拒要地总结了他在做系统设计时的一些想法,
            • The 5 minute rule for trading memory for disc accesses and the 5 byte rule for trading memory for CPU time
                5分钟法则是用来衡量内存与磁盘的,而5字节法则则是在内存和CPU之间的权衡。这两个法则是Jim Gray和Franco Putzolu在1986年的文章。                
    
高手成长篇:Java底层知识
    Java 字节码相关
        Java最黑科技的玩法就是字节码编程,也就是动态修改或是动态生成Java字节码。Java的字节码相当于汇编,推荐几个学习教程中:
        • Java Zone: Introduction to Java Bytecode,很不错的入门文章。
        • IBM DeveloperWorks: Java bytecode,文章很老,是一篇非常好的讲Java字节码的文章。
        • Java Bytecode and JVMTI Examples,使用 JVM Tool Interface 操作字节码【一般不使用JVMTI操作字节码】
        
        操作字节码:
        • asmtools - 用于生产环境的Java .class文件开发工具。
        • Byte Buddy -代码生成库:运行时创建Class文件而不需要编译器帮助。
        • Jitescript - 和BiteScript 类似的字节码生成库。
        
            推荐Byte Buddy, Byte Buddy极大地发展了Java的技术。使用字节码编程可以在Java程序运行时进行字节码修改和代码注入。
            他可以对Java这门静态语言在运行时进行各种动态的代码修改,而且可以进行无侵入的编程。
            比如,我们不需要在代码中埋点做统计或监控,可以使用这种技术把我们的监控代码直接以字节码的方式注入到别人的代码中,
            从而实现对实际程序运行情况进行统计和监控,很魔法地把业务逻辑和代码控制分离开来。
                推荐阅读下陈皓的《编程范式游记》
                要做到这点,需要学习Java Agent(Java Instrumentation API)的技术。
                Java Agent实现一个叫 premain ()的方法(一个比main ()函数还要超前执行的main函数) ,然后把你的代码编译成一个jar文件。
                在JVM启动时,使用: java -javaagent:yourAwesomeAgent.jar -jar App.jar.命令行来引入你的jar文件
                    参考文章:Java Code Geeks: Java Agents
                    示例项目: jvm-monitoring-agent 或EntryPointKR/Agent.java。
                    推荐文章:通过使用Byte Buddy,便捷地创建JavaAgent
                    推荐项目:Stage Monitor。 
    JVM 相关
        推荐JVM规格说明书:(了解JVM规范的最佳文档,例如Java 8的):The Java Virtual Machine Specification Java SE 8 Edition 。
            中文翻译,GitHub上Repo:java-virtual-machine-specification
                https://github.com/waylau/java-virtual-machine-specification
        推荐一下JVM Anatomy Park JVM解剖公园
        Java底层原理和Java的内存模型:官方 JSR 133。
            Java内存模型相关的文献- The Java Memory Model
            Java内存:道格利(Doug Lea)两篇文章:
                • The JSR-133 Cookbook for Compiler Writers
                    解释了怎样实现Java内存模型,特别是在考虑到多处理器(或多核)系统的情况下,多线程和读写屏障的实现。
                • Using JDK 9 Memory Order Modes,
                    讲了怎样通过VarHandle来使用plain, opaque, release/acquire和volatile四种共享内存的访问模式,并剖析了底层的原理。
        垃圾回收机制
            推荐书《The Garbage Collection Handbook》。这本书非常全面地介绍了垃圾收集的原理、设计和算法。
            调优垃圾回收推荐: Garbage Collection Tuning Guide,它是Hotspot Java虚拟机的垃圾回收调优指南
            推荐文章:Quick Tips for Fast Code on the JVM。
高手成长篇:数据库
    有人会认为数据库与程序员无关,是DBA的事儿。但我坚信,数据库才真正是程序员的事儿。
    因为程序是需要和数据打交道的,所以程序员或架构师不仅需要设计数据模型,还要保证整体系统的稳定性和可用性,数据是整个系统中关键中的关键。

数据库:重点就是两种数据库,一种是以SQL为代表的关系型数据库,另一种是以非SQL为代表的NoSQL数据库。
    关系型数据库:主要有三个: Oracle,MySQL和Postgres。
    NoSQL数据库:主要是解决关系型数据库中的各种问题。
    
    关系型数据库
        关系型数据库最主要的两个代表是闭源的Oracle和开源的MySQL,还有开源的PostgreSQL等。
        Oracle:
            推荐一本书《Oracle Database 9i/10g/11g编程艺术》,无论是开发人员还是DBA,都是必读的书。
        MySQL:
            推荐 MySQL 官方手册。
            推荐官方PPT:
                • How to Analyze and Tune MySQL Queries for Better Performance
                • MySQL Performance Tuning 101
                • MySQL Performance Schema & Sys Schema
                • MySQL Performance: Demystified Tuning & Best Practices 
                • MySQL Security Best Practices
                • MySQL Cluster Deployment Best Practices
                • MySQL High Availability with InnoDB Cluster
            推荐书:《高性能MySQL》===MySQL领域的经典之作
            推荐书:《MySQL技术内幕: InnoDB存储引擎===MySQL的内部原理
            推荐:官网的MySQL Internals Manual.
            
            推荐书《数据库的索引设计与优化》=====数据库的索引设计和优化。
            推荐MySQL相关的文章:
                MySQL索引背后的数据结构及算法原理
                Some study on database storage internals
                Sharding Pinterest: How we scaled our MySQL fleet
                Guide to MySQL High Availability
                Choosing MySQL High Availability Solutions
                High availability with MariaDB TX: The definitive guide
            MySQL的资源列表:Awesome MySQL,这个列表中有很多的工具和开发资源
            MySQL分支官网:MySQL有两个比较有名的分支,一个是Percona,另一个是MariaDB,其官网上的Resources页面中有很多不错的资源和文档,可以经常看看。
                Percona Resources
                MariaDB Resources
                
                开发博客:
                Percona Blog
                MariaDB Blog
            MySQL相关经验型的文章:
                Booking.com: Evolution of MySQL System Design,  MySQL数据库使用的演化
                Airbnb的数据库扩展的经验分享:Tracking the Money-Scaling Financial Reporting at Airbnb
                Uber的长文:Why Uber Engineering Switched from Postgres to MySQL
            MySQL的集群复制
                推荐文章:
                Monitoring Delayed Replication, With A Focus On MySQL 
                Mitigating replication lag and reducing read load with freno
                Booking.com系列文章:
                    • Better Parallel Replication for MySQL
                    • Evaluating MySQL Parallel Replication Part 2: Slave Group Commit
                    • Evaluating MySQL Parallel Replication Part 3: Benchmarks in Production
                    • Evaluating MySQL Parallel Replication Part 4: More Benchmarks in Production
                    • Evaluating MySQL Parallel Replication Part 4, Annex: Under the Hood
            MySQL数据分区
                推荐文章
                • StackOverflow: MySQL sharding approaches?
                • Why you don't want to shard
                • How to Scale Big Data Applications
                • MySQL Sharding with ProxySQL
                公司做MySQL Sharding的一些经验分享:
                    • MailChimp: Using Shards to Accommodate Millions of Users
                    • Uber: Code Migration in Production: Rewriting the Sharding Layer of Uber's Schemaless Datastore
                    • Sharding & IDs at InstagramAirbnb: How We Partitioned Airbnb's Main Database in Two Weeks
    NoSQL数据库
        概念和初衷:
            NoSQL数据库最初目是解决大数据的问题。我
            推荐资料:
            • Martin Fowler在YouTube上分享的NoSQL介绍 Introduction To NoSQL
                参与编写的 NoSQL Distilled - NoSQL 精粹
            • NoSQL Databases: a Survey and Decision Guidance
            • Distribution, Data, Deployment: Software Architecture Convergence in Big Data Systems
                卡内基·梅隆大学讲分布式大数据系统的论文。
            • 论文:No Relation: The Mixed Blessings of Non-Relational Databases
                这篇论文有点老,是HBase的基础
            • NoSQL Data Modeling Techniques, NoSQL建模技术。中文翻译:CoolShell 上《NoSQL数据建模技术》
            • MongoDB - Data Modeling Introduction MongoDB的数据建模介绍,其很多观点可以用于其它的NoSQL数据库。
            • Firebase - Structure Your Database , Google的Firebase数据库使用JSON建模的一些最佳实践。
            • NoSQL数据库选择:文档 Visual Guide to NoSQL Systems.
            • 选SQL还是NoSQL:
                • SQL vs. NoSQL Databases: What's the Difference?
                • Salesforce: SQL or 
        NoSQL
            大多数NoSQL数据库都是开源的,官方的文档基本可以解决问题。
            
            列数据库Column Database
                •Cassandra相关
                    推荐沃尔玛实验室两篇文章:
                        • Avoid Pitfalls in Scaling Cassandra Cluster at Walmart
                        • Storing Images in Cassandra at Walmart
                    • Yelp: How We Scaled Our Ad Analytics with Apache Cassandra
                    • Discord: How Discord Stores Billions of Messages, Discord公司分享的一个如何存储十亿级消息的技术文章。
                    • Cassandra at Instagram, Instagram的一个PPT, 其中介绍了Instagram中是怎么使用Cassandra的。
                    • Netflix: Benchmarking Cassandra Scalability on AWS-Over a million writes per second , 
                        Netflix公司在AWS上SCassandra做的一Benchmark。 
                HBase相关
                    Imgur Notification: From MySQL to HBASE
                    Pinterest: Improving HBase Backup Efficiency
                    IBM : Tuning HBase performance
                    HBase File Locality in HDFSA
                    pache Hadoop Goes Realtime at Facebook
                    Storage Infrastructure Behind Facebook Messages: Using HBase at Scale
                    GitHub: Awesome HBase
                    推荐HBase两本书:
                        一本是偏实践的《HBase实战》
                        一本是偏大而全的手册型的《HBase权威指南》。
                    官方文档:The Apache HBase Reference Guide.
                ClickHouse:
                    Open Source Distributed Column Database at Yandex
                Redshift:
                    Scaling Redshift without Scaling Costs at GIPHY  ???
            文档数据库 Document Database - MongoDB, SimpleDB, CouchDB.
                Data Points - What the Heck Are Document Databases?
                eBay: Building Mission-Critical Multi-Data Center Applications with MongoDB 
                The AWS and MongoDB Infrastructure of Parse: Lessons Learned
                Migrating Mountains of Mongo Data
                Couchbase Ecosystem at LinkedIn
                SimpleDB at Zendesk
                Github: Awesome Mongo DB
            数据结构数据库Data structure Database - Redis
                Learn Redis the hard way (in production) at Trivago
                Twitter: How Twitter Uses Redis To Scale - 105TB RAM, 39MM QPS, 10,000+ Instances
                Slack: Scaling Slack's Job Queue - Robustly Handling Billions of Tasks in Milliseconds Using Kafka and Redis
                GitHub: Moving persistent data out of Redis at GitHub
                Instagram: Storing Hundreds of Millions of Simple Key-Value Pairs in Redis
                Redis in Chat Architecture of Twitch (from 27:22)
                Deliveroo: Optimizing Session Key Storage in Redis
                Deliveroo: Optimizing Redis Storage
                GitHub: Awesome Redis
            时序数据库Time-Series Database
                What is Time-Series Data & Why We Need a Time-Series Database
                Time Series Data: Why and How to Use a Relational Database instead of NoSQL
                Beringei: High-performance Time Series Storage Engine @Facebook
                Introducing Atlas: Netflix's Primary Telemetry Platform @Netflix
                Building a Scalable Time Series Database on PostgreSQL
                Scaling Time Series Data Storage - Part I @Netflix
                Design of a Cost Efficient Time Series Store for Big Data
                GitHub: Awesome Time-Series Database
            图数据库- Graph Platform
                IBM Devloperworks 上的两个简介性的PPT
                    Intro to graph databases, Part 1, Graph databases and the CRUD operations
                    Intro to graph databases, Part 2, Building a recommendation engine with a graph database.
                推荐电子书《Graph Database》。
                推荐介绍文章:
                    Handling Billions of Edges in a Graph Database
                    Neo4j case studies with Walmart, eBay, AirBnB, NASA, etc
                    FlockDB: Distributed Graph Database for Storing Adjacency Lists at Twitter
                    JanusGraph: Scalable Graph Database backed by Google, IBM and Hortonworks
            搜索数据库- ElasticSearch
                • Elasticsearch: The Definitive Guide 官网学习资料
                • 推荐性能调优相关的工程实践:
                    Elasticsearch Performance Tuning Practice at eBay
                    Elasticsearch at Kickstarter
                    9 tips on ElasticSearch configuration for high performance
                    Elasticsearch In Production-Deployment Best Practices
                • GitHub上的资源列表
                    GitHub: Awesome ElasticSearch
            
高手成长篇:分布式架构入门(分布式架构)
    分布式架构概述
        分布式系统涵盖如下几方面:
            • 服务调度,涉及服务发现、配置管理、弹性伸缩、故障恢复等。
            • 资源调度,涉及对底层资源的调度使用,如计算资源、网络资源和存储资源等。
            • 流量调度,涉及路由、负载均衡、流控、熔断等。
            • 数据调度,涉及数据复本、数据一致性、分布式事务、分库、分表等。
            • 容错处理,涉及隔离、幂等、重试、业务补偿、异步、降级等。
            • 自动化运维,涉及持续集成、持续部署、全栈监控、调用链跟踪等。
        学好分布式系统及其架构,需要注意几点:
            • 分布式系统之所以复杂,就是因为其太容易也太经常出错了。这意味着,你要把处理错误的代码当成正常功能的代码来处理。
            • 开发一个健壮的分布式系统的成本是单体系统的几百倍甚至几万倍。这意味着,我们要自己开发一个,需要能力很强的开发人员。
            • 非常健壮的开源的分布式系统并不多,或者说基本没有。这意味着,如果你要用开源的,那么你需要hold得住其源码。
            • 管理或是协调多个服务或机器是非常难的。这意味着,我们要去读很多很多的分布式系统的论文。
            • 在分布式环境下,出了问题是很难debug的。这意味着,我们需要非常好的监控和跟踪系统,还需要经常做演练和测试。
            • 在分布式环境下,你需要更科学地分析和统计。这意味着,我们要用P90这样的统计指标,而不是平均值,我们还需要做容量计划和评估。
            • 在分布式环境下,需要应用服务化。这意味着,我们需要一个服务开发框架,比如SOA或微服务。
            • 在分布式环境下,故障不可怕,可怕的是影响面过大,时间过长。这意味着,我们需要花时间来开发我们的自动化运维平台。
            
            总之,在分布式环境下,一切都变得非常复杂。要进入这个领域,你需要有足够多的耐性和足够强的心态来接受各式各样的失败。
            当拥有丰富的实践和经验后,你才会有所建树。这并不是一日之功,你可能要在这个领域花费数年甚至数十年的时间。
    分布式架构入门
        推荐两篇文章:
            • Scalable Web Architecture and Distributed Systems ,分布式架构是怎么来解决系统扩展性问题的粗略方法。
            • Scalability, Availability & Stability 
                Patterns,在扩展性、可用性、稳定性等方面给你一个非常大的架构设计视野和思想,可以让你感受一下大概的全景图。
        强烈推荐GitHub文档: System Design Primer
            这个仓库收集到了好些系统架构和设计的基本方法。
            包括:CAP理论、一致性模型、可用性模式、DNS,CDN、负载均衡、反向代理、应用层的微服务和服务发现、关系型数据库和NoSQL、缓存、异步通讯、安全等
    分布式理论
        • An introduction to distributed systems
            教学课程的提纲,几乎涵盖了分布式系统方面的所有知识点,适合初学者提纲挈领地了解知识全貌,快速与现有知识结合,形成知识体系。
            可以根据这个知识图谱 Google,你会学会所有的东西。
            
        拜占庭容错系统研究中三个重要理论:CAP、FLP和DLS
            拜占庭容错(Byzantine Fault Tolerant, BFT)算法:
                对于拜占庭问题来说,假如节点总数为N,出错节点数为F,则当N >= 3F + 1时,问题才有解
                拜占庭容错算法解决的是,网络通信可靠但节点可能故障情况下一致性该如何达成的问题。
                PBFT算法包括三个阶段来达成共识:预准备(Pre-Prepare)、准备(Prepare)和提交(Commit)。
                推荐阅读文章:
                    • Dr.Dobb's - The Byzantine Generals Problem 
                    • The Byzantine Generals Problem
                    • Practicle Byzantine Fault Tolerance
            CAP定理=====分布式系统设计中最基础、最为关键的理论
                CAP定理指出:
                分布式数据存储不可能同时满足以下三个条件:一致性(Consistency)、可用性(Availability)和分区容忍(Partition tolerance)
                “在网络发生阻断(partition)时,你只能选择数据的一致性(consistency)或可用性(availability),无法两者兼得”。
                
                注意:CAP理论和扩展性(scalability)是无关的,在分片(sharded)或非分片的系统皆适用。
            FLP impossibility
                在异步环境中,如果节点间的网络延迟没有上限,只要有一个恶意的节点存在,就没有算法能在有限的时间内达成共识。
                在每一轮皆有一定机率达成共识,随着时间增加,机率会越趋近于1。这是许多成功的共识算法采用的解决问题的办法。
                注意:"Las Vegas" algorithms(撞大运算法)
                    其保证结果正确,只是在运算时所用资源上进行赌博
                    例如:随机快速排序,它的pivot是随机选的,但排序结果永远一致
            容错的上限-DLS论文
                • 在部分同步(partially synchronous)的网络环境中(即网络延迟有一定的上限,但我们无法事先知道上限是多少),协议可以容忍最多1/3的拜占庭故障(Byzantine fault)。
                • 在异步(asynchronous)的网络环境中,具有确定性质的协议无法容忍任何错误
                    但论文并没有提及randomized algorithms,在这种情况下可以容忍最多1/3的拜占庭故障。
                • 在同步(synchronous)网络坏境中(即网络延迟有上限且上限是已知的),协议可以容忍100%的拜占庭故障,
                    但当超过1/2的节点为恶意节点时,会有一些限制条件。
                    
                汪意的是,我们考虑的是"具有认证特性的拜占庭模型(authenticated Byzantine)",而不是"一般的拜占庭模型”;
                具有认证特性指的是将如今已经过大量研究且成本低廉的公私钥加密机制应用在我们的算法中。
            
        8条荒谬的分布式假设(Fallacies of Distributed Computing) 
            1.网络是稳定的。
            2.网络传输的延迟是零。
            3.网络的带宽是无穷大。
            4.网络是安全的。
            5.网络的拓扑不会改变。
            6.只有一个系统管理员。
            7.传输数据的成本为零。
            8.整个网络是同构的。
            
            阿尔农·罗特姆-盖尔-奥兹(Arnon Rotem-Gal-Oz)长文Fallacies of Distributed Computing Explained 解释为什么这些观点是错误的。
            加勒思·威尔逊(GarethWilson)的文章 用日常生活中的例子,对这些点做了通俗的解释。
            为什么我们深刻地认识到这8个错误?
                在分布式系统中错误是不可能避免的
                我们在分布式系统中,能做的不是避免错误,而是要把错误的处理当成功能写在代码中。
                
            推荐一致性方面的论文
                
                • 关于经典CAP理论:CAP Twelve Years Later: How the Rules Have Changed (中译版)
                    主要是说,在CAP中最大的问题就是分区P,在P发生的情况下,非常难以保证C和A。===基于强一致性的情况。
                    强一致性的ACID
                    最终一致性的BASE。
                    在CAP理论中,需要"三选二",也就是说,P是必选项,"三选二"的就是数据一致性(consistency)、服务可用性(availability)间的"二选-"?
                        工程实践中一致性有不同程度,可用性也有不同等级,在保证分区容错性的前提下,放宽约束后可以兼顾一致性和可用性,两者不是非此即彼。
                        
                • Harvest, Yield, and Scalable Tolerant Systems,
                    主要提出了Harvest和Yield概念,并把上面那篇论文中所讨论的东西讲得更为仔细了一些。
                • Base: An Acid Alternative (中译版)
                    一篇解释BASE原则,或者说最终一致性的经典文章
                • Eventually Consistent
                    AWS的CTO维尔纳-沃格尔(Werner Vogels)在2008年发布在ACM Queue上的关于数据库方面的重要文章,
                    讲述NoSQL数据库的理论基石--最终一致性,对传统的关系型数据库(ACID, Transaction)做了较好的补充。 
高手成长篇:分布式架构经典图书和论文(分布式架构)
    经典图书:分布式架构方面的经典图书
        • Distributed Systems for fun and profit, 免费的电子书。
        作者撰写此书的目的是希望以一种更易于理解的方式,讲述以亚马逊的Dynamo、谷歌的Bigtable和MapReduce等为代表的分布式系统背后的核心思想。
        • Designing Data Intensive Applications, 作者马丁·科勒普曼(Martin Kleppmann)
            用很多的工程案例讲解了如何让数据结点做扩展。
            作者抽丝剥茧,循循善诱,从"提出问题"到"解决问题"、“解决方案”、“优化方案"和"对比不同的方案”,把非常晦涩的技术和知识展开。
        • Distributed Systems: Principles and Paradigms中文翻译:《分布式系统原理与范型》(第二版)====仅适合系统性地学习基础知识
            作者安德鲁·斯图尔特·塔能鲍姆(Andrew S. Tanenbaum) 和同事马丁·范·斯蒂恩(Martin van Steen)合力撰写
            介绍了分布式系统的七大核心原理,并给出了大量的例子;
            系统讲述了分布式系统的概念和技术,包括通信、进程、命名、同步化、一致性和复制、容错以及安全等;
            讨论了分布式应用的开发方法(即范型)。
        • Scalable Web Architecture and Distributed Systems,中文翻译: 可扩展的Web架构和分布式系统。
        • Principles of Distributed Systems,苏黎世联邦理工学院的教材。
            讲述了多种分布式系统中会用到的算法。
    经典论文:
        分布式事务:
            • 《Transaction AcrossDataCenter》 (YouTube视频)
                Google App Engine联合创始人瑞恩·巴雷特(Ryan Barrett)在2009年的Google I/O大会上的演讲
                论文结论:分布式系统的事务Paxos算法是最好的。
            • Coolshell文章《分布式系统的事务处理》。
        Paxos一致性算法:
            Paxos算法,是菜斯利·兰伯特(Lesile Lamport)于1990年提出来的一种基于消息传递且具有高度容错特性的一致性算法。
                此算法晦涩难懂,属于理论上的论文性质
                真正进入工程圈,主要是来源于Google的Chubby lock--一个分布式的锁服务,用在了Bigtable中。
                推荐Google论文了解Paxos进入到工程界:
                    • Bigtable: A Distributed Storage System for Structured Data
                    • The Chubby lock service for loosely-coupled distributed systems
                Google另外两篇论文:
                    • The Google File System
                    • MapReduce: Simplified Data Processing on Large Clusters
                Paxos Made Live - An Engineering Perspective
                    了解Paxos算法在工程实现的细节。
                容易理解一点的:
                    Neat Algorithms -Paxos
                    Paxos byExamples
        Raft一致性算法:
            Raft原始论文:In search of an Understandable Consensus Algorithm (Extended Version) 
                InfoQ上译文《Raft一致性算法论文译文》
            推荐Raft算法的动画演示:
                • Raft - The Secret Lives of Data
                • Raft Consensus Algorithm
                • Raft Distributed Consensus Algorithm Visualization
        Gossip一致性算法:
            • Amazon的DynamoDB论文: Dynamo: Amazon's Highly Available Key Value Store 
                讲述了Amazon的DynamoDB是如何满足系统的高可用、高扩展和高可靠的。展示了系统架构是如何做到数据分布以及数据一致性的。
                GFS采用的是查表式的数据分布,而DynamoDB采用的是计算式的,是一个改进版的通过虚拟结点减少增加结点带来数据迁移的一致性哈希。
                关键的概念,一个是Vector Clock,另一个是Gossip协议。
            • 分布式系统论文: Time, Clocks and the Ordering of Events in a Distributed System
                分布式系统中的时钟同步是一个非常难的问题,因为分布式系统中是使用消息进行通信的,若使用物理时钟来进行同步,一方面是不同的process的时钟有差异,另一方面是时间的计算也有一定的误差,若有两个时间相同的事件,则无法区分其先后顺序。
                论文主要解决分布式系统中的时钟同步问题。
            • 马萨诸塞大学课程Distributed Operating System 中第10节 Clock Synchronization讲述了时钟同步的问题。
            • 关于Vector Clock两篇文章
                Why Vector Clocks are Easy
                Why Vector Clocks are Hard
            • 数据同步的Gossip协议的原始论文: Efficient Reconciliation and Flow Control for Anti-Entropy Protocols, 
                Gossip算法也是Cassandra使用的数据复制协议。这个协议可以"一传十、十传百"传播开来。
                Gossip协议:YouTube视频介绍: Understanding Gossip (Cassandra Internals).
            Gossip的图示化:
                动画Gossip Visualization
        分布式存储和数据库:
            • Google的BigTable论文
            • Google File System
            • Amazon的DynamoDB论文
            
            • AWS Aurora论文:: Amazon Aurora: Design Considerations for High Throughput Cloud -Native Relation Databases.
            • Google的 Spanner: Google's Globally-Distributed Database. 
                2017版论文: Spanner, TrueTime & The CAP Theorem.
            • F1 - The Fault-Tolerant Distributed RDBMS Supporting Google's Ad Business 
            • Cassandra: A Decentralized Structured Storage System
            • CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data
                算法被应用在了Ceph分布式文件系统中,其架构可以参照:
                    RADOS - A Scalable, ReliableStorage Service for Petabyte-scale
                    Storage Clusters
                    Ceph的架构文档
        分布式消息系统
            • 推荐Kafka论文 Kafka: a Distributed Messaging System for Log Processing.
            • Wormhole: Reliable Pub-Sub to Support Geo-replicated Internet Services , 
                Wormhole是Facebook内部使用的一个Pub-Sub系统,目前还没有开源。
                Wormhole没有自己的存储来保存消息,也不需要数据源在原有的更新路径上去插入一个操作来发送消息,是非侵入式的。
                其直接部署在数据源的机器上并直接扫描数据源的transaction logs
                    好处:Wormhole本身不需要做任何地域复制(geo-replication)策略,只需要依赖于数据源的geo-replication策略即可。
            • All Aboard the Databus! LinkedIn's Scalable Consistent Change Data Capture Platform 
                支持对不同数据源的抽取,允许不同数据源抽取器的开发和接入,只需该抽取器道循设计规范即可。
                该规范的一个重要方面就是每个数据变化都必须被一个单调递增的数字标注(SCN),用于同步。
                
        日志和数据
            • The Log: What every software engineer should know about real-time data's unifying abstraction 
                中译版《日志:每个软件工程师都应该知道的有关实时数据的统一概念》
            • The Log-Structured Merge-Tree (LSM-Tree)
                谷歌发表的 "Bigtable" 的论文:其所使用的文件组织方式,称为LogStructured-Merge Tree
                HBase, Cassandra, LevelDB,SQLite,MongoDB 3.0中都有可选的LSM引擎
        分布式监控和跟踪
            • Google的分布式跟踪监控论文:Dapper, a Large-Scale Distributed Systems Tracing Infrastructure,
                其开源实现有3个 Zipkin, Pinpoint 和 HTrace.推荐Zipkin
        数据分析
            • The Unified Logging Infrastructure for Data Analytics at Twitter, Twitter公司关于日志架构和数据分析的论文
            • Scaling Big Data Mining Infrastructure: The Twitter Experience 
                Twitter公司的数据分析平台在数据量越来越大,架构越来越复杂,业务需求越来越多的情况下,数据分析从头到底是怎么做的。
            • Dremel: Interactive Analysis of Web-Scale Datasets
                介绍了Google公司的Dremel(一个针对临时查询提供服务的系统,处理的是只读的多层数据)的架构与实现,以及它与MapReduce是如何互补的。
            • Resident Distributed Datasets: a Fault-Tolerant Abstraction for In-Memory Cluster Computing
                论文提出了弹性分布式数据(Resilient Distributed Dataset, RDD)的概念:
                    它是一个分布式存储抽象,使得程序员可以在大型集群上以容错的方式执行内存计算;
                解释了其出现原因:解决之前计算框架在选代算法和交互式数据挖掘工具两种应用场景下处理效率低下的问题,并指出将数据保存在内存中,可以将性能提高一个数量级;同时闻述了其实现原理及应用场景等多方面内容。很有趣儿,推荐阅读。
        与编程相关的论文
            • Distributed Programming Model
            • PSync: a partially synchronous language for fault-tolerant distributed algorithms
            • Programming Models for Distributed Computing
            • Logic and Lattices for Distributed Programming
        其它的分布式论文阅读列表:
            • Services Engineering Reading List
            • Readings in Distributed Systems
            • Google Research - Distributed Systems and Parallel Computing

高手成长篇:分布式架构工程设计
    分布式架构设计原则:
        • Designs, Lessons and Advice from Building Large Distributed Systems
            Google 杰夫-迪恩(Jeff Dean) 2009年一次演讲的PPT。 
        • YouTube:Building Software Systems At Google and Lessons Learned
            2010年,杰夫迪恩在斯坦福大学的讲课,回顾了Google发展的历史。
        • The Twelve-Factor App,
            软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS)。
            12-Factor为构建SaaS应用提供了方法论,是架构师必读的文章。
        • Notes on Distributed Systems for Young Bloods,给准备进入分布式系统领域的人的一些忠告。
        • On Designing and Deploying Internet-Scale Services,微软Windows Live服务平台的一些经验性的总结文章
        • 4 Things to Keep in Mind When Building a Platform for the Enterprise
            Box平台VP海.威廉姆斯(Heidi Williams)的文章,阐述了为企业构建平台时需要牢记的四件关于软件设计方面的事: 
            1. Design Broadly, Build Narrowly; 
            2. Platforms Are Powerful and Flexible. Choose wisely what to expose when!; 
            3. Build Incrementally, GetFeedback, and Iterate; 
            4. Create a Platform-first Mentality
        • 视频:Principles of Chaos Engineering
            Netflix公司的Chaos Monkey工程【混沌工程】,可以到分布式系统里瞎搞,以此来测试系统的健壮和稳定性。
            Netflix分享了一些软件架构的经验和原则
        • Building Fast & Resilient Web Applications
            伊利亚·格里高利克(Ilya Grigorik) 在Google I/O 2016上的关于如何通过弹力设计来实现快速和可容错的网站架构的演讲
        • Design for Resiliency
            全面认识"弹力(Resiliency)",以及弹力对于系统的重要性,并详细闻述了如何设计和实现系统的弹力。
        • 微软的Azure网站上 Design Principle的系列文章: 
            Design for Self-healing, 
            Design for Scaling Out
            Design for Evolution
        • Eventually Consistent, AWS CTO维尔纳·沃格尔斯(Werner Vogels) Blog上一篇关于最终一致性的好文。
        • Writing Code that Scales , Rackspace的博文,写出高扩展和高性能代码的工程原则。
        • Automate and Abstract: Lessons from Facebook on Engineering for Scale
            Facebook的关于软件自动化和软件抽象的一些经验教训。
    设计模式:
        • 重点推荐的是微软云平台Azure上的设计模式: Cloud Design Patterns
            网站罗列了分布式设计的各种设计模式,每一个模式都有详细的说明,并有对其优缺点的讨论,以及适用场景和不适用场景的说明,主要有以下几类:
            设计模式:可用性;
            设计模式:数据管理;
            设计模式:设计和实现;
            设计模式:消息;
            设计模式:管理和监控;
            设计模式:性能和扩展;
            设计模式:系统弹力;
            设计模式:安全。
        • 其它关于分布式系统设计模式的网站和相关资料:
            • AWS Cloud Pattern AWS云平台的一些设计模式。
            • Design patterns for container-based distributed systems ,Google的一篇论文,描述了容器化下的分布式架构的设计模式。
            • Patterns for distributed systems,关于分布式系统的架构模式的PPT,你可以顺着到Google里去搜索。
        • 服务架构模式网站
            A Pattern Language for Micro-Services;
            SOA Patterns.
        • 陈皓极客时间上关于分布式的设计模式的总结:
            弹力设计篇,内容包括:认识故障和弹力设计、隔离设计、异步通讯设计、幂等性设计、服务的状态、补偿事务、重试设计、熔断设计、限流设计、降级设计、弹力设计总结。
            管理设计篇,内容包括:分布式锁、配置中心、边车模式、服务网格、网关模式、部署升级策略等。
            性能设计篇,内容包括:缓存、异步处理、数据库扩展、秒杀、边缘计算等。
    设计与工程实践
        分布式系统的故障测试:
            • FIT: Failure Injection Testing , Netflix公司关于做故障注入测试的文章。
            • Automated Failure Testing ,Netflix公司关于自动化故障测试的博文。
            • Automating Failure Testing Research at Internet Scale, Netflix公司伙同圣克鲁斯加利福尼亚大学和Gremlin游戏公司一同撰写的论文。
        弹性伸缩
            • 4 Architecture Issues When Scaling Web Applications: Bottlenecks, Database, CPU, IO
                后端程序的主要性能指标,即响应时间和可伸缩性 如何能提高的解决方案,讨论了包括纵向和横向扩展,可伸缩架构、负载均衡、数据库的伸缩、CPU密集型和I/O密集型程序的考量等。
            • Scaling Stateful Objects 
                书籍《Development&Deployment of Multiplayer Online Games》书中一章的节选,讨论了有状态和无状态的节点如何伸缩的问题。
            • Scale Up vs Scale Out: Hidden Costs
                Coding Horror上关于分析可伸缩性架构的不同扩展方案(横向扩展或纵向扩展)所带来的成本差异的文章
            • Best Practices for Scaling Out , OpenShift关于Scale out最佳实践的文章。
            • Scalability Worst Practices ,关于一些最差实践,你需要小心避免。
            • Reddit: Lessons Learned From Mistakes Made Scaling To 1 Billion Pageviews A Month, 
                Reddit分享的一些关于系统扩展的经验教训。
            • 关于自动化弹性伸缩的文章:
                • Autoscaling Pinterest;
                • Square: Autoscaling Based on Request Queuing;
                • PayPal: Autoscaling Applications;
                • Trivago: Your Definite Guide For Autoscaling Jenkins;
                • Scryer: Netflix's Predictive Auto Scaling Engine
    一致性哈希
        • Consistent Hashing ,一致性哈希的简单教程,其中还有代码示例。
        • Consistent Hashing: Algorithmic Tradeoffs 
            讲述一致性哈希的一些缺陷和坑,以及各种哈希算法的性能比较的文章,最后还给了一组代码仓库,其中有各种哈希算法的实现。
        • Distributing Content to Open Connect, Netflix的一个对一致性哈希的实践,提出了Uniform Consistent Hashing
        • Consistent Hashing in Cassandra ,Cassandra中使用的一致性哈希的相关设计。
    数据库分布式
        • Life Beyond Distributed Transactions
            业界谈到分布式事务通常指两段提交2PC事务(Spring/JEE中JTA等)或者Paxos与Raft,这些事务都有明显缺点和局限性。
            Salesforce的软件架构师帕特·赫兰德(Pat Helland)文章讨论的是另外一种基于本地事务情况下的事务机制,它是基于实体和活动(Activity)的概念,类似DDD聚合根和领域事件的概念,
                这种工作流类型事务虽然需要程序员介入,依靠消息系统实现,但可以实现接近无限扩展的大型系统。
            赫兰德文中提出了重要的观点:“如果你不能使用分布式事务,那么你就只能使用工作流。
        • How Sharding Works 一篇很不错的探讨数据Sharding的文章。
        • Why you don't want to shard 
            Percona的文章:不到万不得已不要做数据库分片。
                最好还是先按业务来拆分,先把做成微服务的架构,然后把数据集变简单,然后再做Sharding(数据库分片)会更好。
        • How to Scale Big Data Applications
            Percona的关于怎样给大数据应用做架构扩展的文章。
        • MySQL Sharding with ProxySQL,用ProxySQL来支撑MySQL数据分片
    缓存
        • 缓存更新的套路===陈皓在CoolShell上写的缓存更新的几个设计模式,包括Cache Aside, Read/Write Through, Write Behind Caching.
        • Design Of A Modern Cache ,设计一个现代化的缓存系统需要注意到的东西。
        • Netflix: Caching for a Global Netflix, Netflix公司的全局缓存架构实践。
        • Facebook: An analysis of Facebook photo caching, Facebook公司的图片缓存使用分析,用数据来调优不同的缓存大小和算法。
        • How trivago Reduced Memcached Memory Usage by 50% , Trivago公司是如何把Memcached的内存使用率降了一半的实践性文章。
        • Caching Internal Service Calls at Yelp, Yelp公司的缓存系统架构。
    消息队列
        • Understanding When to use RabbitMQ or Apache Kafka,什么时候使用RabbitMQ, 什么时候使用Kafka,让你明白如何做技术决策。
        • Trello: Why We Chose Kafka For The Trello Socket Architecture, Trello的Kafka架构分享。
        • LinkedIn: Running Kafka At Scale, Linkedin公司的Kafka架构扩展实践。
        • Should You Put Several Event Types in the Same Kafka Topic? 
        • Billions of Messages a Day - Yelp's Real-time Data Pipeline , Yelp公司每天十亿级实时消息的架构。
        • Uber: Building Reliable Reprocessing and Dead Letter Queues with Kafka , Uber公司的Kafka应用。
        • Uber: Introducing Chaperone: How Uber Engineering Audits Kafka End-to-End , Uber公司对Kafka消息的端到端审计。
        • Publishing with Apache Kafka at The New York Times ,纽约时报的Kafka工程实践。
        • Kafka Streams on Heroku , Heroku公司Kafka Streams实践。
        • Salesforce: How Apache Kafka Inspired Our Platform Events Architecture , Salesforce的KafkaT程实践。
        • Exactly-once Semantics are Possible: Here's How Kafka Does it,怎样用Kafka让只发送一次的语义变为可能。
        • Delivering billions of messages exactly once 挑战消息只发送一次这个技术难题
        • Benchmarking Streaming Computation Engines at Yahoo!。
            Yahoo!的Storm团队在为他们的流式计算做技术选型时,测试了Apache Flink, Apache Storm和Apache Spark这三种平台,给出了结论和具体的测试方案。
    关于日志方面
        • Using Logs to Build a Solid Data Infrastructure - Martin Kleppmann ,设计基于log结构应用架构的文章。
        • Building DistributedLog: High-performance replicated log service
            Distributed是Twitter 2016年5月份开源的一个分布式日志系统。在Twitter内部已经使用2年多。其主页在distributedlog.io。
        • LogDevice: a distributed data store for logs, Facebook分布式日志系统方面的一些工程分享。
    关于性能方面
        • Understand Latency,文章收集并整理了一些和系统响应时间相关的文章,可以全面了解和Latency有关的系统架构和设计经验方面的知识。
        • Common Bottlenecks ,讲述了20个常见的系统瓶颈。
        • Performance is a Feature, Coding Horror上的一篇让你关注性能的文章。
        • Make Performance Part of Your Workflow
            图书《Designing for Performance》中的节选(国内没有卖的),一些和性能有关的设计上的平衡和美学。
        • CloudFlare: How we built rate limiting capable of scaling to millions of domains, 
            CloudFlare公司是怎样实现他们的限流功能的。
            从最简单的每客户IP限流开始分析,进一步到anycast,在这种情况下PoP的分布式限流是怎样实现的,并详细解释了具体的算法。
    关于搜索方面
        • Instagram: Search Architecture
        • eBay: The Architecture of eBay Search
        • eBay: Improving Search Engine Efficiency by over 25% 
        • LinkedIn: Introducing LinkedIn's new search architecture
        • LinkedIn: Search Federation Architecture at LinkedIn 
        • Slack: Search at Slack
        • DoorDash: Search and Recommendations at DoorDash 
        • Twitter: Search Service at Twitter (2014)
        • Pinterest: Manas: High Performing Customized Search System 
        • Sherlock: Near Real Time Search Indexing at Flipkart
        • Airbnb: Nebula: Storage Platform to Build Search Backends 
    各公司的架构实践 
        网站:High Scalability,定期分享一些大规模系统架构是怎样构建的,迄今为止各个公司的架构说明:
            YouTube Architecture
            Scaling Pinterest
            Google Architecture
            Scaling Twitter
            The WhatsApp Architecture
            Flickr Architecture
            Amazon Architecture
            Stack Overflow Architecture
            Pinterest Architecture
            Tumblr Architecture
            Instagram Architecture
            TripAdvisor Architecture
            Scaling Mailbox
            Salesforce Architecture
            ESPN Architecture
            Uber Architecture
            DropBox Design
            Splunk Architecture

高手成长篇:微服务
    微服务:
        微服务是SOA的进阶,但是微服务不能解决所有问题
        • 微服务架构的文档- Microservice Architecture (中译版)
            微服务的架构与传统架构的不同之处在于,微服务的每个服务与其数据库都是独立的,可以无依赖地进行部署。
        • AWS对微服务的理解 - What are Microservices?
        • Microsoft对微服务的理解 - Microservices architecture style.
        • Pivotal对微服务的理解 - Microservices.
    微服务架构
        • 推荐IBM红皮书: Microservices Best Practices for Java
            通过Spring Boot和 Dropwizard来架建Java的微服务,而且还谈到了一些标准的架构模型:
                如服务注册、服务发现、API网关、服务通讯、数据处理、应用安全、测试、部署、运维等
        • 推荐--微服务设计。
            全面介绍了微服务的建模、集成、测试、部署和监控,通过一个虚构的公司讲解了如何建立微服务架构。
            主要内容包括认识微服务在保证系统设计与组织目标统一上的重要性,学会把服务集成到已有系统中,采用递增手段拆分单块大型应用,通过持续集成部署微服务等等。
        • Nginx上的一组微服务架构的系列文章:
            Introduction to Microservices
            Building Microservices: Using an API Gateway
            Building Microservices: Inter-Process Communication in a Microservices Architecture
            Service Discovery in a Microservices Architecture
            Event-Driven Data Management for Microservices
            Choosing a Microservices Deployment Strategy 
            Refactoring a Monolith into Microservices
        • Auto0 Blog上一系列的微服务的介绍(有代码演示):
            An Introduction to Microservices, Part 1 API Gateway. 
            An Introduction to Microservices, Part 2
            An Introduction to Microservices, Part 3: The Service Registry
            Intro to Microservices, Part 4: Dependencies and Data Sharing
            API Gateway: the Microservices Superglue
        • Dzone的Spring boot教程:
            Microservices With Spring Boot - Part 1 - Getting Started
            Microservices With Spring Boot - Part 2 - Creating a Forex Microservice
            Microservices With Spring Boot - Part 3 - Creating Currency Conversion Microservice
            Microservices With Spring Boot - Part 4 - Using Ribbon for Load Balancing
            Microservices With Spring Boot - Part 5 - Using Eureka Naming Server
        
        推荐时髦的微服务架构:
            • 前端: React.js 或 Vue.js.
            • 后端:Go语言+微服务工具集 Go kit,因为是微服务了,每个服务的代码就简单了,也就可以用任何语言了,推荐Go语言。
            • 通讯: gRPC,Google远程调用的一个框架,比Restful要快20倍到50倍
            • API: Swagger, Swagger是一种Restful API的简单但强大的表示方式,标准的,语言无关,这种表示方式不但人可读,而且机器可读。
                可以作为Restful API的交互式文档,也可以作为Restful API形式化的接口描述,生成客户端和服务端的代码。
            • 网关: Envoy 其包含了服务发现、负载均衡和熔断等特性
                完全可以把Envoy通过Ingress集成进Kubernetes。开源项目contour就是干这个事的
            • 日志监控: fluentd + ELK
            • 指标监控: Prometheus
            • 调用跟踪: Jaeger 或是 Zipkin,推荐Jaeger,可以和Prometheus和Envory集成。
            • 自动化维: Docker + Kubernetes
    微服务和SOA
        • 推荐电子书 - 《Microservices vs Service-Oriented Architecture》。
            介绍服务化架构的一些事实,基础的SOA和微服务的架构知识,以及两种架构的不同。
        • DZone: Microservices vs. SOA
        • DZone: Microservices vs. SOA - Is There Any Difference at All?
        • Microservices, SOA, and APIs: Friends or enemies?
        微服务与其他架构的比较
            ◆ PaaS vs. IaaS for Microservices Architectures: Top 6 Differences
            ◆ Microservices vs. Monolithic Architectures: Pros, Cons, and How Cloud Foundry (PaaS) Can Help
            ◆ Microservices - Not A Free Lunch!The Hidden Costs Of Microservices
        微服务的一些设计模式:
            ◆ Microservice Patterns,微服务架构的设计模式和最佳实践。
            ◆ Microservice Antipatterns and Pitfalls,微服务架构的一些已知的反模式和陷阱。
            ◆ Microservice Architecture: All The Best Practices You Need lo Know
                介绍什么是微服务、微服务架构的优献点、微服务最大的挑战和解决方案是什么、如何避免出错,以及构建微服务架构的最佳实践等
            ◆ Best Practices for Building a Microservice Architecture ,构建微服务架构的最佳实践。
            ◆ Simplicity by Distributing Complexity,如何使用事件驱动构建微服务架构,其中有很多不错的设计上的基本原则。
    相关资源:
        Microservices Resource Guide    Martin Fowler挑选的和微服务相关的文章、视频、书或是podcast。
        Awesome Microservices 各种微服务资源和相关项目的集中地。
        
高手成长篇:容器化和自动化运维
        Docker 和Kubernetes,分布式架构和自动化运维的必需品
    Docker
        • Docker官方介绍: Docker Overview.
        • Web在线的Playground:Katacoda Docker Playground 或 Play With Docker.
        • 文档Learn Docker 安装Docker实操
        • Docker Curriculum 教程
        
        • Docker官方文档Docker Documentation
        • Docker底层:参考陈皓文章:
            Docker 基础技术: Linux Namespace (上)
            Docker 基础技术: Linux Namespace (下)
            Docker 基础技术: Cgroup
            Docker 基础技术: AUFS
            Docker 基础技术: DeviceMapper
        • 与Docker网络有关的文章:
            ◆ A container networking overview
            ◆ Docker networking 101 - User defined networks
            ◆ Understanding CNI (Container Networking Interface)
            ◆ Using CNI with Docker
            
            Docker有下面几种网络解决方案: Calico,Flannel 和Weave
            ◆ netshoot===========诊断Docker网络问题的工具集。
            
            容器网络解决方案的性能对比文章或报告:
            ◆ Battlefield: Calico, Flannel, Weave and Docker Overlay Network
            ◆ Comparison of Networking Solutions for Kubernetes
            ◆ Docker Overlay Networks: Performance analysis in high-latency enviroments
        • Docker的性能相关文章
            IBM Research Report: An Updated Performance Comparison of Virtual Machines and Linux Containers
            An Introduction to Docker and Analysis of its Performance
        • Docker存储相关文章:
            Storage Concepts in Docker: Network and Cloud Storage
            Storage Concepts in Docker: Persistent Storage
            Storage Concepts in Docker: Shared Storage and the VOLUME directive
        • docker运维相关文章:
            Docker Monitoring with the ELK Stack: A Step-by-Step Guide
        • Valuable Docker Links,收集并罗列了一系列非常不错的Docker文章。
    Docker最佳实践
        • Best Practices for Dockerfile , Docker官方文档里的Dockerfile的最佳实践。
        • Docker Best Practices ,收集汇总了各个地方的使用Docker的建议和实践。
        • Container Best Practices ,Atomic项目,介绍容器化应用程序的架构、创建和管理的协作型文档项目。
        • Eight Docker Development Patterns,8个Docker的开发模式:
            共享基础容器、
            共享同一个卷的多个开发容器、
            开发工具专用容器、
            测试环境容器、
            编译构建容器、
            防手误的安装容器、
            默认服务容器、
            胶黏容器。
    Kubernetes
        Kubernetes 是Google开源的容器集群管理系统,是Google多年大规模容器管理技术Borg的开源版本,也是CNCF最重要的项目之一,主要功能包括:
            基于容器的应用部署、维护和滚动升级;
            负载均衡和服务发现;
            跨机器和跨地区的集群调度;
            自动伸缩;
            无状态服务和有状态服务;
            广泛的Volume支持;
            
        • 推荐阅读Kubernetes前世今生的一篇论文:
            Borg, Omega, and Kubernetes,Google十几年来从这三个容器管理系统中得到的经验教训。
        • 推荐开源电子书: 《Kubernetes Handbook》,这本书记录了作者从零开始学习和使用Kubernetes的心路历程,着重于经验分享和总结,同时也会有相关的概念解析。
        • 推荐开源电子书:《Kubernetes指南》 ====开发和使用Kubernetes时的参考指南和实践总结
        
        • Kubernetes的官方网站: Kubernetes.io
        • 交互式教程:
            Katacoda
            Kubernetes Bootcamp
            
        • 不错的文章:
            • Kubernetes tips & tricks
            • Achieving CI/CD with Kubernetes.
            • How to Set Up Scalable Jenkins on Top of a Kubernetes Cluster.
            • 10 Most Common Reasons Kubernetes Deployments Fail Part I 和Part II.
            • How to Monitor Kubernetes ,一共有4个篇章
            • Logging in Kubernetes with Fluentd and Elasticsearch
            Kubernetes Monitoring: Best Practices, Methods, and Existing Solutions
        • 网络相关文章:
            个Kubernetes 101系列的文章:
                Kubernetes 101 - Networking.
                Kubernetes networking 101 - Pods
                Kubernetes networking 101 - Services
                Kubernetes networking 101 - (Basic) External access into the cluster
                Kubernetes Networking 101 - Ingress resources.
                Getting started with Calico on Kubernetes
                
        CI/CD相关的文章:
            Automated Image Builds with Jenkins, Packer, and Kubernetes.
            Jenkins setups for Kubernetes and Docker Workflow.
            Lab: Build a Continuous Deployment Pipeline with Jenkins and Kubernetes
            
        最佳实践
            • Kubernetes Best Practices by Sachin Arote, AWS工程师总结的最佳实践。
            • Kubernetes Best Practices by Sandeep Dinesh, Google云平台工程师总结的最佳实践。
            
    Docker和Kubernetes资源汇总:
        Github上和Docker & Kubernetes相关的Awesome系列:
            • Awesome Docker
            • Awesome Kubernetes。
        推荐系统说明Docker和Kubernetes生态圈的电子书或报告:
            The New Stack eBook Series ,非常完整和详细的Docker 和Kubernetes 生态圈的所有东西。
                • Book 01: The Docker Container Ecosystem
                • Book 02: Applications & Microservices with Docker & Containers
                • Book 03: Automation & Orchestration with Docker & Containers
                • Book 04: Network, Security & Storage with Docker & Containers
                • Book 05: Monitoring & Management with Docker & Containers
                • Book 06: Use Cases for Kubernetes
                • Book 07: State of the Kubernetes Ecosystem
                • Book 08: Kubernetes Deployment & Security Patterns
                • Book 09: CI/CD with Kubernetes
                • Book 10: Kubernetes solutions Directory
                • Book 11: Guid to Cloud-Native Microservices
高手成长篇:机器学习和人工智能
    基本原理简介:
        机器学习主要有两种方式,一种是监督式学习(Supervised Learning),另一种是非监督式学习(Unsupervised Learning)
        监督式学习(Supervised Learning) 。
            所谓监督式学习,也就是说,我们需要提供一组学习样本,包括相关的特征数据和相应的标签。
            我们的程序可以通过这组样本来学习相关的规律或是模式,然后通过得到的规律或模式来判断没有被打过标签的数据是什么样的数据。 
        
        *非监督式学习(Unsupervised Learning)
            非监督式学习,数据是没有被标注过的,所以相关的机器学习算法需要找到这些数据中的共性。
            因为大量的数据是没被被标识过的,所以这种学习方式可以让大量的未标识的数据能够更有价值。
            而且,非监督式学习,可以为我们找到人类很难发现的数据里的规律或模型,所以也有人称这种学习为“特征点学习",
                其可以让我们自动地为数据进行分类,并找到分类的模型。
            一般来说,非监督式学习会应用在一些交易型的数据中。
            
        监督式学习是在被告诉过了正确的答案后的学习,而非监督式学习是在没有被告诉正确答案时的学习。
        非监督式学习是在大量的非常乱的数据中找寻一些潜在的关系,成本也比较高。
        非监督式学习经常被用来检测一些不正常的事情发生,比如信用卡的诈骗或是盗刷。也被用在推荐系统等。
        
        • 推荐阅读 Machine Learning is Fun!
            Data Science Simplified Part 1: Principles and Process
            Data Science Simplified Part 2: Key Concepts of Statistical Learning
            Data Science Simplified Part 3: Hypothesis Testing
            Data Science Simplified Part 4: Simple Linear Regression Models
            Data Science Simplified Part 5: Multivariate Regression Models
            Data Science Simplified Part 6: Model Selection Methods
            Data Science Simplified Part 7: Log-Log Regression Models
            Data Science Simplified Part 8: Qualitative Variables in Regression Models
            Data Science Simplified Part 9: Interactions and Limitations of Regression Models
            Data Science Simplified Part 10: An Introduction to Classification Models
            Data Science Simplified Part 11: Logistic Regression 
    相关课程
        1. 在学习机器学习之前,我们需要学习数据分析,所以,我们得先学一些大数据相关的东西,也就是Data Science相关的内容
        
            • 数据科学相关的教程:
                • UC Berkeley's Data 8: The Foundations of Data Science
                • 电子书 Computational and Inferential Thinking 
                    会讲述数据科学方面非常关键的概念,会教会你在数据中找到数据的关联、预测和相关的推断。
            • Learn Data Science==GitHub上的电子书
                主要是一些数据挖掘的算法,比如线性回归、逻辑回归、随机森林、K-Means聚类的数据分析。
                • donnemartin/data-science-ipython-notebooks 代码库
                    用TensorFlow, scikit-learn, Pandas, NumPy, Spark等把这些经典的例子实现了个遍。
            • 网站:Data Science Resources List和数据科学相关的资源列表
            • 在线机器学习的课程:
                吴恩达教授(Andrew Ng)在 Coursera上的免费机器学习课程【网易公开课有】=======强烈建议从此入手。 
                吴恩达教授和深度学习相关的课程【网易公开课上免费学习】--DeepLearning Specialization
            • Deep Learning by Google , Google深度学习的在线免费课程,其支持中英文。
                教授你如何训练和优化基本神经网络、卷积神经网络和长短期记忆网络。
                你将通过项目和任务接触完整的机器学习系统TensorFlow。
            • 卡内基梅隆大学汤姆·米切尔(Tom Mitchell)的机器学习 英文原版视频与课件PDF。
            • 2013年加利福尼亚理工学院亚瑟·阿布-穆斯塔法(Yaser Abu-Mostafa)的Learning from Data 课程视频及课件PDF,内容更适合进阶。
        2. 关于神经网络方面
            YouTube上视频课程-Neural networks class - Université de Sherbrooke 
        3. 在线大学课程
            斯坦福大学的《统计学学习》、《机器学习》、《卷积神经网络》、《深度学习之自然语言处理》等。
            麻省理工大学的《神经网络介绍》、《机器学习》、《预测》等。
            更多的列表,请参看--Awesome Machine Learning Courses.
    相关图书
        • 书籍《Pattern Recognition and Machine Learning》 机器学习领域的圣经之作。这本书很经典,但并不适合入门。
        • 经典电子书:讲了很多机器学习的知识,可以当做手册或字典。
            《Understanding Machine Learning: From Theory to Algorithms》
            《The Elements of Statistical Learning - Second Edition》
        • 《Deep Learning: Adaptive Computation and Machine Learning series》中文翻译为《深度学习》,又叫"花书"。
            全球知名专家伊恩·古德费洛(Ian Goodfellow),友华·本吉奥(Yoshua Bengio)和亚伦-考维尔(Aaron Courville)深度学习领域奠基性的经典教材。
            全书内容包括3部分:
            第1部分介绍基本的数学工具和机器学习的概念,它们是深度学习的预备知识;
            第2部分系统深入地讲解现今已成熟的深度学习方法和技术;
            第3部分讨论某些具有前瞻性的方向和想法,它们被公认为是深度学习未来的研究重点。
            这本书的官网为"deeplearningbook.org",在GitHub上中文翻译-《Deep Learning中文翻译》
        • 《Neural Networks and Deen Learning》神经网络的经典入门书 
            其中讲了很多如激活函数、代价函数、随机梯度下降、反向传播、过度拟合和规范化、权重初始化、超参数优化、卷积网络的局部感受、混合层、特征映射的东西。
        • 《Introduction to Machine Learning with Python》,不错的入门书,以Scikit-Learn框架来讲述的
        • 《Hands-On Machine Learning with Scikit-Learn and TensorFlow 》,以TensorFlow为工具的入门书
    相关文章
        • YouTube 的 Google Developers 的 Machine Learning Recipes with Josh Gordon 9集视频,每集不到10分钟, 
            从Hello World讲到如何使用TensorFlow
        • Practical Machine Learning Tutorial with Python Introduction 用Python带你玩Machine Learning的教程。
        • Medium上的Machine Learning - 101,讲述了好些我们上面提到过的经典算法。
        • Medium 上的Marchine Learning for Humans.
        • Dr. Jason Brownlee 的博客,其中好多的"How-To",会让你有很多的收获。
        • Rules of Machine Learning: Best Practices for ML Engineering ,一些机器学习相关的最佳实践。
        • i am trask 不错的博客。
        • YouTube视频Neural Networks,关于Deep Learning中的神经网络
        • 麻省理工学院的电子书 Deep Learning.
        • 用Python做自然语言处理 Natural Language Processing with Python.
        • Machine Learning & Deep Learning Tutorials.
            Machine Learning和Deep Learning的相关教程列表:
        • 神经网络相关文章:
            The Unreasonable Effectiveness of Recurrent Neural Networks 
                一篇必读的文章,告诉你为什么要学RNN,以及展示了最简单的NLP形式。
            Neural Networks, Manifolds, and Topology 帮助理解神经网络的一些概念。
            Understanding LSTM Networks LSTM的内在工作原理。
            Attention and Augmented Recurrent Neural Networks  用了好多图来说明了RNN的attention机制。
            Recommending music on Spotify with deep learning ,一个在Spotify的实习生分享的音乐聚类的文章。
    相关算法
        10个经典机器学习的算法:
        对于监督式学习,有如下经典算法:
            1.决策树(Decision Tree),比如自动化放贷、风控。
            2.朴素贝叶斯分类器(Naive Bayesian classifier),可以用于判断垃圾邮件、对新闻的类别进行分类,比如科技、政治、运动、判断文本表达的感情是积极的还是消极的、人脸识别等。
            3. 最小二乘法(Ordinary Least Squares Regression),是一种线性回归。
            4. 逻辑回归(Logisitic Regression),一种强大的统计学方法,可以用一个或多个变量来表示一个二项式结果。可以用于信用评分,计算营销活动的成功率,预测某个产品的收入。
            5. 支持向量机(Support Vector Machine, SVM),可以用于基于图像的性别检测、图像分类等。
            6. 集成方法(Ensemble methods),通过构建一组分类器,然后通过它们的预测结果进行加权投票来对新的数据点进行分类。
                原始的集成方法是贝叶斯平均,但最近的算法包括纠错输出编码、Bagging和Boosting.
        
        对于无监督式的学习,有如下经典算法:
            1. 聚类算法(Clustering Algorithms),目标是给数据分类。
                有5个比较著名的聚类算法你必需要知道: 
                K-Means, 
                Mean-Shift, 
                DBSCAN, 
                EM/GMM、
                Agglomerative Hierarchical.
            2. 主成分分析(Principal Component Analysis, PCA)
                PCA的一些应用包括压缩、简化数据便于学习、可视化等。
            3. 奇异值分解(Singular Value Decomposition, SVD)。实际上, PCA是SVD的一个简单应用。
                在计算机视觉中,第一个人脸识别算法使用PCA和SVD来将面部表示为“特征面"的线性组合,进行降维,然后通过简单的方法将面部匹配到身份。
            4.独立成分分析(Independent Component Analysis, ICA)。 
            ICA是一种统计技术,主要用于揭示随机变量、测量值或信号集中的隐藏因素。
            
        机器学习的算法列表:Wikipedia上的List of Machine Learning Algorithms.
        A Tour of Machine Learning Algorithms 概览了一些机器学习算法,其中还有一个"脑图"可以下载,并还有一些How-To的文章供你参考。
        SciKit-Learn文档(算法):
            • 1. Supervised learning
            • 2.3 Clustering
            • 2.5. Decomposing signals in components (matrix factorization problems)
            • 3. Model selection and evaluation
            • 4.3. Preprocessing data
    相关资源
        对于初学者来说,动手是非常非常重要的,不然,你会在理论的知识里迷失掉自己
        
        • 初学者的8个练手项目:8 Fun Machine Learning Projects for Beginners
        • 学习机器学习或是人工智能需要数据,《Awesome Public Datasets》提供了足够多的公共数据
            其中包括农业、生物、天气、计算机网络、地球科学、经济、教育、金融、能源、政府、健康、自然语言、体育等。
        • GitHub上的 些Awesome资源列表:
            • Awesome Deep Learning
            • Awesome - Most Cited Deep Learning Papers
            • Awesome Deep learning papers and other resources
高手成长篇:前端基础和底层原理
    前端学习路线图:
        1. 掌握基础知识和基本原理
            • 前端的三个最基本的东西:HTML5,CSS3和JavaScript (ES6)是必需要学好的
            包括引申出来的技术,比如CSS3引申出来的Canvas (位图)、SVG (量图)和WebGL (3D图),以及CSS的各种图形变换可以让你做出非常丰富的渲染效果和动画效果。
            • JavaScript的核心原理。
            • 浏览器的工作原理。
            • 网络协议HTTP。
                着重了解HTTP、HTTP2,HTTP的几种请求方式:短连接、长连接、Stream连接、WebSocket连接。
            • 前端性能调优。
        2. 学习前端框架
            ES6把JavaScript带到了一个新的台阶,大大释放了前端开发人员的生产力,让前端得以开发更为复杂的代码和程序
            • 掌握React和Vue前端框架
                Virtual DOM技术是其底层技术,组件化是其思想,管理组件的状态是其重点。
                对于React来说,函数式编程是其编程思想
            •UI设计。
                Google的Material UI
                比较流行的Atomic Design
                
    前端基础和底层原理
        HTML5
            • 推荐书籍《HTML5权威指南》,面向初学者和中等水平Web开发人员,是牢固掌握HTML5,CSS3和JavaScript的必读之作。
            • 推荐书籍《HTML5 Canvas核心技术》,HTML5游戏必读。
            • SVG, Canvas和WebGL(对应矢量图、位图和3D图),推荐MDN。
                • SVG: Scalable Vector Graphics
                • Canvas API
                • The WebGL API: 2D and 3D graphics for the web
            • 资源列表:
                • Awesome HTML5======GitHub 上的Awesome HTML5,其中有大量的资源和技术文章。
                • Awesome SVG
                • Awesome Canvas
                • Awesome WebGL
        CSS:
            • 推荐CSS的在线学习文档:MDN Web Doc - CSS。
            • 学习使用LESS 和SaSS 这两个CSS预处理工具,提高很多效率
            • 学习CSS书写规范:
                • Principles of writing consistent, idiomatic CSS
                • Opinionated CSS styleguide for scalable applications
                • Google HTML/CSS Style Guide
            • 学习CSS Framework:
                Twitter公司的Bootstrap
                主打清新UI的Semantic UI
                主要响应式界面的Foundation
                基于Flexbox的Bulma
            • 学习Reset或标准化的CSS库(把浏览器的HTML标签标准化): 
                Normalize,
                MiniRest.css,
                sanitize.css
                unstyle.css
                
            • 更多的CSS框架,参考:
                Awesome CSS Frameworks 上的列表。
                
            CSS相关实践:
                • CodePen's CSS
                • Github 的 CSS
                • Medium's CSS is actually pretty f***ing good
                • CSS at BBC Sport
                • Refining The Way We Structure Our CSS At Trello
            写出可扩展的CSS的阅读列表:
                A Scalable CSS Reading List.
        JavaScript:
            • 推荐书籍《JavaScript: The Good Parts》 ,中文翻译版为《JavaScript语言精粹》。====介绍JavaScript语言本质的权威图书
            • 推荐书籍《Secrets of the JavaScript Ninja》 ,中文翻译版为《JavaScript忍者秘籍》
                jQuery库创始人编写的一本深入剖析JavaScript语言的书。
            • 推荐书籍《Effective JavaScript》, 
                深刻辨析JavaScript的内部运作机制、特性、陷阱和编程最佳实践,将其浓缩为极具实践指导意义的68条精华建议。
            
            • ES6学习手册源:
                • ES6 in Depth, InfoQ上有相关的中文版《ES6 深入浅出》。
                • A simple interactive ES6 Feature list
                • 阮一峰翻译的ES6的教程
                • ECMAScript 6 Tools=====一堆ES6工具列表,可以帮助你提高开发效率。
                • Modern JS Cheatsheet
            • 《You Don't Know JS 系列》的书:
                • You Don't Know JS: "Up & Going"
                • You Don't Know JS: "Scope & Closures"
                • You Don't Know JS: "this & Object Prototypes"
                • You Don't Know JS: "Types & Grammar"
                • You Don't Know JS: "Async & Performance"
                • You Don't Know JS: "ES6 & Beyond"
            • 编程范式相关的文章:
                • Glossary of Modern JavaScript Concepts: Part 1,
                    收集了一些编程范式方面的内容,比如纯函数、状态、可变性和不可变性、指令型语言和声明式语言、函数式编程、响应式编程、函数式响应编程。
                • Glossary of Modern JavaScript Concepts: Part 2
                    主要讨论了作用域和闭包,数据流,变更检测,组件化
            • 德米特里·索什尼科夫(Dmitry Soshnikov)个人网站三篇讲JavaScript内在的文章:
                • JavaScript. The Core: 2nd Edition
                • JavaScript. The Core (older ES3 version)
                • JS scope: static, dynamic, and runtime-augmented
            • "How JavaScript Works" 系列文章=============强烈推荐。SessionStake的CEO亚历山兹拉特科夫(Alexander Zlatkov)写的。
                • An overview of the engine, the runtime, and the call stack
                • Inside the V8 engine + 5 tips on how to write optimized code
                    了解V8引擎,也推荐阅读 Understanding V8's Bytecode 这篇文章
                • Memory management + how to handle 4 common memory leaks ,内存管理和4种常见的内存泄露问题。
                • Event loop and the rise of Async programming + 5 ways to better coding with async/await, Event Loop和异步编程。
                • Deep dive into WebSockets and HTTP/2 with SSE + how to pick the right path WebSocketHTTP/2
                • A comparison with WebAssembly + why in certain cases it's better to use it over JavaScript,JavaScript内在原理。
                • The building blocks of Web Workers + 5 cases when you should use them , Web Workers技术。
                • Service Workers, their lifecycle and use cases , Service Worker技术。
                • The mechanics of Web Push Notifications , Web端Push通知技术。
                • Tracking changes in the DOM using MutationObserver , Mutation Observer技术。
                • The rendering engine and tips to optimize its performance ,渲染引擎和性能优化。
                • Inside the Networking Layer + How to Optimize Its Performance and Security ,网络性能和安全相关。
                • Under the hood of CSS and JS animations + how to optimize their performance , CSS和JavaScript动画性能优化。
            • Google Chrome工程经理 阿迪·奥斯马尼(Addy Osmani)关于JavaScript性能相关文章:
                • The Cost Of JavaScript
                • JavaScript Start-up Performance
            • 其它与JavaScript相关的资源:
                • JavScript has Unicode Problem ,这是一篇很有价值的JavaScript处理Unicode的文章。
                • JavaScript Algorithms,用JavaScript实现的各种基础算法库。
                • JavaScript 30 秒代码,一堆你可以在30秒内看懂各种有用的JavaScript的代码,在GitHub上有2万颗星了。
                • What the f*ck JavaScript,-堆JavaScript搞笑和比较tricky的样例。
                • Airbnb JavaScript Style Guide, Airbnb的JavaScript的代码规范, GitHub上有7万多颗星。
                • JavaScript Patterns for 2017 , YouTube上的一个JavaScript模式分享
        浏览器原理
            • 推荐文章《How browsers work》。
                重新整理并发布为《How Browsers Work: Behind the scenes of modernweb browsers》
            • Coolshell《浏览器的渲染原理简介》
            • Virtual DOM的学习系列:Virtual DOM是React的一个非常核心的技术细节,也是前端演染和性能的关键技术。学习前提:学习过浏览器的工作原理。
                • How to write your own Virtual DOM
                • Write your Virtual DOM 2: Props & Events
                • How Virtual-DOM and diffing works in React
                • The Inner Workings Of Virtual DOM
                • 深度剖析:如何实现一个Virtual DOM算法
                • 两个Vitual-DOM实现:
                    •Matt-Esch/Virtual-DOM
                    • Maquette
        网络协议
            • 推荐书籍 High Performance Browser Networking
                谷歌公司高性能团队核心成员的权威之作,堪称实战经验与规范解读完美结合的产物。
                涵盖Web开发者技术体系中应该掌握的所有网络及性能优化知识。
                全书以性能优化为主线,从TCP,UDP 和TLS协议讲起,解释了如何针对这几种协议和基础设施来优化应用。然后深入探讨了无线和移动网络的工作机制。
                最后,揭示了HTTP协议的底层细节,同时详细介绍了HTTP 2.0, XHR, SSE, WebSocket. WebRTC和DataChannel等现代浏览器新增的能力。
            • HTTP/2协议学习:
                • Gitbook - HTTP/2详解
                • http2 explained (中译版)
                • HTTP/2 for a Faster Web
                • Nginx HTTP/2 白皮书
                • HTTP/2的两个RFC:
                    • RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2) HTTP/2的协议本身。
                    • RFC 7541 - HPACK: Header Compression for HTTP/2, HTTP/2的压缩算法。
                • WebSocket协议学习:新的HTML5支持WebSocket
                    • HTML5 WebSocket: A Quantum Leap in Scalability for the Web
                        这篇文章比较了HTTP的n种链接方式, Polling, Long Polling和Streaming, 并引入了终级解决方案WebSocket。
                    • StackOverflow: My Understanding of HTTP Polling, Long Polling, HTTP Streaming and WebSockets 
                        StackOverflow上的一个HTTP各种链接方式的比较,也可以让你有所认识。
                    • An introduction to Websockets,-个WebSocket的简单教程。
                    • Awesome Websockets, GitHub的Awesome资源列表。
                    • 一些和WebSocket相关的想法,可以开阔你的思路:
                        •Introducing WebSockets: Bringing Sockets to the Web
                        • Websockets 101
                        • Real-Time Web by Paul Banks 
                        • Are WebSockets the future?
高手成长篇:前端性能优化和框架
    前端性能优化
        • 推荐性能优化图书:Web Performance in Action,其中有CSS、图片、字体、JavaScript性能调优等。
        • 推荐性能优化图书:Designing for Performance,讲了很多网页优化的技术和相关的工具,可以让你对整体网页性能优化有所了解。
        • 推荐性能优化图书:High Performance JavaScript,能让你了解如何提升各方面的性能,包括代码的加载、运行、DOM交互、页面生存周期等。
        • 推荐性能优化图书:High Performance Web Sites: Essential Knowledge for Front-End Engineers
            中文版为《高性能网站建设指南:前端工程师技能精髓》。
        
        • Google的Web Fundamentals 里的Performance章节
        • 最佳实践性的文档
            Browser Diet,前端权威性能指南(中文版) 大型站点工作的专家们建立的一份前端性能的工作指南。
            PageSpeed Insights Rules ,谷歌给的一份性能指南和最佳实践。
            Best Practices for Speeding Up Your Web Site,雅虎公司给的一份7个分类共35个最佳实践的文档。
            
        • 推荐一个性能优化的案例学习网站:WPO(Web Performance Optimization) Stats 【重点推荐】
        • 些文章和案例:
            • A Simple Performance Comparison of HTTPS, SPDY and HTTP/2 ,比较浏览器的HTTPS, SPDY和HTTP/2性能的文章
            • 7 Tips for Faster HTTP/2 Performance ,Nginx公司给出的7个增加其性能的小提示。
            • Reducing Slack's memory footprint, Slack团队减少内存使用量的实践。
            • Pinterest: Driving user growth with performance improvements, 
                Pinterest关于性能调优的一些分享,其中包括了前后端的一些性能调优实践。
            • 10 JavaScript Performance Boosting Tips, 10个提高JavaScript运行效率的小提示。
            • 17 Statistics to Sell Web Performance Optimization ,多个公司的Web性能优化的工程分享
            • Getting started with the Picture Element,讲述了Responsive布局所带来的一些负面的问题。主要是图像适配的问题
                其中引出了文章"Native Responsive Images"
            • Improve Page Load Times With DNS Prefetching,教你如何降低DNS解析时间的小技术--DNS prefetching
            • Jank Busting for Better Rendering Performance,关于前端动画宣染性能提升。
            • JavaScript Memory Profiling,谷歌官方教你如何使用Chrome的开发工具来分析JavaScript内存问题的文章。
        性能工具:
            • PageSpeed ,谷歌有一组PageSpeed工具来帮助你分析和优化网站的性能。
            • YSlow,雅虎的一个网页分析工具。
            • GTmetrix,将PageSpeed和YSlow合并起来的一个网页分析工具,并且加上一些Page load或是其它的一些分析。
            • Awesome WPO,GitHub上的Awesome中,你可以找到更多的性能优化工具和资源。
            中国的共享库资源:中国的网络有各种问题(你懂的),不能使用Google共享的JavaScript链接来提速,你得用中国自己的
                Forget Google and Use TheseHosted JavaScript Libraries in China
    前端框架:目前前端社区有三大框架Angular.js,React.js和Vue.js。React和Vue更为强劲一些
        React.js使用函数式编程方式,更加符合后端程序员的思路,而Vue是更符合前端工程师习惯的框架。两者比较,vue更容易上手
        推荐文章:重点学习框架的设计思路和实现原理,了解不同框架的优缺点
            • Angular vs. React vs. Vue: A 2017 comparison
            • React or Vue: Which JavaScript UI Library Should You Be Using?
            • ReactJS vs Angular5 vs Vue.js-What to choose in 
        React.js框架
            入门:
                • 推荐React官方教程和其文档
                • 了解React.js的基本原理:
                    • All the fundamental React.js concepts ,讲述React.js的基本原理。
                    • Learn React Fundamentals and Advanced Patterns 几个短视频。
                    • Thinking in React,使用React构建可搜索产品数据表的思考过程。
            提高:学习一个技术最重要的是要学到其中的思想和方法。下面是一些学习React中最重要的东西:
                状态:对于富客户端来说是非常麻烦也是坑最多的地方,推荐文章:
                    • Common React.js mistakes: Unneeded state, React.js编程的常见错误--不必要的状态。
                    • State is an Anti-Pattern,关于如何做一个不错的组件的思考,很有帮助。
                    • Why Local Component State is a Trap ,-些关于 "Single state tree" 的想法。
                    • Thinking Statefully,几个很不错的例子让你对声明式的有状态的技术有更好的理解。
                    • Tips to learn React + Redux in 2018 
                        传统上,解决React的状态问题一般用Redux。Redux是一个状态粘合组件,
                        一般来说,我们会用Redux来做一些数据状态和其上层Component上的同步。
                    • State Architecture Patterns in React 系列文章
                        • Part 1: A Review
                        • Part 2: The Top-Heavy Architecture, Flux and Performance 
                        • Part 3: Articulation Points, zine and An Overall Strategy
                        • Part 4: Purity, Flux-duality and Dataflow
                函数式编程:
                    从jQuery过来的同学一定非常不习惯React,而从Java等后端过来的程序员就会很习惯了。
                    我觉得React就是后端人员开发的,或者说是做函数式编程的人开发的。因此需要学习一下JavaScript函数式编程
                    
                    • 推荐电子书《Professor Frisby's Mostly Adequate Guide to Functional Programming》
                        中译版为《JS函数式编程指南中文版》
                    • 推荐文章:Master the JavaScript Interview: What is Functional Programming?
                    • 推荐文章:The Rise and Fall and Rise of Functional Programming (Composing Software)
                    • 推荐文章:Functional UI and Components as Higher Order Functions
                    • 推荐文章:Functional JavaScript: Reverse-Engineering the Hype
                    • 推荐文章:Some Thoughts on Function Components in React
                设计相关
                    •  React Pattern 一个不错的学习React模式的地方。除此之外,
                    
                    • 推荐文章:React Higher Order Components in depth
                    • 推荐文章:Presentational and Container Components
                    • 推荐文章:Controlled and uncontrolled form inputs in React don't have to be complicated 
                    • 推荐文章:Function as Child Components
                    • 推荐文章:Writing Scalable React Apps with the Component Folder Pattern
                    • 推荐文章:Reusable Web Application Strategies
                    • 推荐文章:Characteristics of an Ideal React Architecture
                实践和经验
                    • 9 things every React.js beginner should know 
                    • Best practices for building large React applications
                    • Clean Code vs. Dirty Code: React Best Practices 
                    • How to become a more productive React Developer 
                    • 8 Key React Component Decisions
                资源列表
                    • Awesome React,这是一些React相关资源的列表,很大很全。
                    • React/Redux Links =====推荐。
                    • React Rocks 收集各种React的组件示例。
                
        Vue.js框架:作者尤雨溪(Evan You)
            Vue不像React.js那样使用函数式编程方式,是后端程序员的思路。
            推荐文章:Why 43% of Front-End Developers want to learn Vue.js
            通过文章:Replacing jQuery With Vue.js: No Build Step Necessary 
            推荐文章:10 things I love about Vue
            推荐:尤雨溪采访  Vue on 2018-Interview with Evan You(Vue是完全由其支持者和用户资助,这意味着它更接近社区而不受大公司的控制。)
            
            学习:
                • 推荐Vue官方文档(中文版)
                • Vue.js screencasts 很不错的英文视频教程。
                • 推荐  Vue 2.0的建议学习顺序,这是Vue作者写的
                
                • How not to Vue,了解Vue的短板,你就能扬长避短用得更好。
                • Vue.js Component Communication Patterns
                • 4 AJAX Patterns For Vue.js Apps
                • How To (Safely) Use A jQuery Plugin With Vue.js
                • 7 Ways To Define A Component Template in Vue.js
                • Use Any Javascript Library With Vue.js
                • Dynamic and async components made easy with Vue.js
                • Awesome Vue=========Vue.js里最为巨大最为优秀的资源列表。
高手成长篇:UI/UX设计
        作为前端人员,我们有必要了解现在的一些知名且流行的设计语言或是一些设计规范或是设计方法,学习它们的设计思想和方法,有助于我们拓宽眼界、与时俱进。
        作为一个前端程序员,学习这些设计上的东西可以让你有更好的成长空间。
        对于学习设计的新手来说,推荐看看:
            • 7 steps to become a UI/UX designer
                新手入门:
                1. 学习设计的一些原则和套路,如配色、平衡、排版、一致性等。
                2. 学习用户体验的4D步骤--Discover. Define, Develop 和Delivery。
                3. 开始到一些网站上找灵感。
                4. 到不同的网站上读各种文章和资源,开始学习使用设计工具
                5. 最后是找人拜师。
    图书和文章推荐
        • 推荐书籍 Don't Make Me Think 整本书短小精悍,语言轻松诙谐
        • 推荐书籍 Simple and Usable Web, Mobile,and Interaction Design ,中文版译名为《简约至上》。
            本书作者贾尔斯(Giles)提出了合理删除、分层组织、适时隐藏和巧妙转移四个达成简约至上的终极策略,
            讲述了为什么应该站在主流用户一边,以及如何从他们的真实需求和期望出发,简化设计,提升易用性。
        • 推荐书籍 Designing with the Mind in Mind: Simple Guide to Understanding User Interface Design Rules
            中文版译名为《认知与设计:理解UI设计准则》。
        • 推荐书籍 Designing Interfaces: Patterns for Effective Interaction Design ,中文版译名为《界面设计模式》。
            这本书开篇即总结了"与人有关”的各类问题,为读者提供了界面设计总体思路上的指引,帮助读者举一反三。
            然后,收集并分析了很多常用的界面设计模式,帮助读者理解在实现级别的各种常用解决方案,将它们灵活地运用到自己的设计中。
            
        • 推荐文章 The Psychology Principles Every UI/UX Designer Needs to Know 讲述了6大用户界面用户体验设计的心理学原则。
        • 推荐文章 18 designers predict UI/UX trends for 2018, 18条原则是指导性的思想。
        • 推荐文章 The Evolution of UI/UX Designers Into Product Designers
            Adobe公司的一篇博客,其在回顾整个产品设计的演化过程中有一些不错的思考和想法,并提供了一些方法论。
    原子设计(Atomic Design)
        在2013年网页设计师布拉德·弗罗斯特(Brad Frost)从化学中受到启发:
            原子(Atoms)结合在一起,形成分子(Molecules),进一步结合形成的生物体(Organisms)。
            在界面设计中,我们的界面就是由一些基本的元素组成的。
        Web组件化:
            Web组件化是代码模块化重用化的体现,你可以像搭积木一样开发和设计网页
            模块化组件化了,也更容易规范,保持整体的风格,而且更容易维护代码
        
        • 推荐文章: Atomic Design原子设计|构建科学规范的设计系统
        • 推荐文章: 网页设计: Atomic Design简介及工作实例
        • 推荐布拉德·弗罗斯特的电子书: Atomic Design by Brad Frost
        • 推荐布拉德·弗罗斯特的博客: Atomic Design
        • 推荐布拉德·弗罗斯特的实验室: Pattern lab 
            Pattern Lab的 GitHub来试试Atomic design.
            
        • Web组件化设计方法和React.js框架的文章:
            • Atomic Design with React
            • Atomic Components: Managing Dynamic React Components using Atomic Design
    设计语言和设计系统
        【微软设计语言Fluent Design System】
        • 推荐书籍 Fluent Design System 中文翻译为《流畅设计体系》,微软于2017年开发的设计语言。
            流畅设计是Microsoft Design Language 2的改版,其中包含为所有面向Windows 10设备和平台设计的软件中的设计和交互的指导原则。
            该体系基于五个关键元素:光感、深度、动效、材质和缩放。
            新的设计语言包括更多对动效、深度及半透明效果的使用。
        • 推荐 What's new and coming for Windows UI: XAML and composition ,从概念上讲述了Fluent Design System的各个部分。
        • 推荐 Introducing Fluent Design ,介绍了Fluent Design System的各个部分。
        • 推荐 Build 2018上的一些微软的YouTube分享
            • Fluent Design: Evolving our Design System: Build 2018
            • Microsoft Build 2018 - Fluent Design System Demo
            • Microsoft Build 2018 - Fluent Design System Evolution
            • Fluent Design System inside of Microsoft: Office : Build 2018
        【google设计语言Material Design】    
        • 推荐 Material Design 中文翻译为质感设计,或是材质设计、材料设计。Google开发的设计语言,于 2014年的Google I/O大会上布
            • 推荐官网学习Material Design,或者 访问Material Design 中文版。
            • Wikipedia上有一张 Material Design实现的比较表,供你参考。
            • Material UI的工程实现参考:
                Material Design Lite,这是 Google 官方的框架,简单易用。
                Materialize,-组类似于Bootstrap的前端UI框架。
                Material-UI 是基于Google Material Design的React组件实现。
                MUI 一个轻量级的CSS框架,遵循Google的Material Design设计方针。
        【其他公司的设计语言】    
            苹果公司的设计指南,
            IBM公司的设计语言
            Salesforce公司的Lightning Design System
            Facebook Design - What's on our mind? Facebook的设计师们收集的一系列的文章、视频和资源
    动画效果设计
        • 推荐网站 CodePen   分享HTML, CSS和JavaScript代码的网站。其中也有很多分享样例都和动画效果有关。
        • 推荐 动画的12项基本法则 1981年所出的《The Illusion of Life: Disney Animation》一书
        • 推荐文章: Understand the 12 principles of animation 对动画的12项基本法则的解释
        
        
        还有几个动画设计指南和相关文章供你参考和学习。
        • 6 Animation Guidelines for UX Design 
            Prototypr公司的一个指南,其中主要指出,动画效果不是为了炫配,而是能让你的UI/UX能活起来
            文中推荐文章:
                • Transitional Interfaces
                • UI Animation and UX: A Not-So-Secret Friendship
                • Invisible animation
                • Creating Usability with Motion: The UX in Motion Manifesto
        • Designing Interface Animation 文章主要是讲品牌动画。
        • Animation principles in motion design 文章给了一些动画效果的套路和演示。
        • Creating Usability with Motion: The UX in Motion Manifesto
        • Integrating Animation into a Design System
        • Great UI/UX Animations是设计师丹尼尔(Daniel)收集的一些很不错的动画
            • Great UI/UX Animations 第-组
            • Great UI/UX Animations 第二组
    相关资源
        UI/UX设计的文章资源
            • 推荐网站: Web Designer News 一个文章聚合的网站
            • 推荐网站: Designer News,
            • 推荐网站: Reddit Web Design.
            
            • 推荐博客: Marvel Blog, Marvel团队的博客。
            • 推荐网站: The Next Web,内容主要涵盖国际技术新闻、商业和文化等多个方面。
            • 推荐网站: Medium - Design, Medium现在已经成为一个好文章的集散地了,这个地方必去。【】
            • 推荐网站: Smashing Magazine 专业的Web设计师和程序员去的地方
            • 推荐网站: Sitepoint 给Web前端程序员和设计师看的文章
        设计收集:
            • 推荐网站: Awwwards
            • One Page Love,就是一个单页的网页设计的收集。
            • Inspired UI,移动App的设计模式。
            • Behance
            • Dribbble 设计师都爱去的网站。
            • UI Movement 设计的收集网站

程序员练级攻略(2018):技术资源集散地
    个人技术博客:
        • Coding Horror:杰夫·阿特伍德(Jeff Atwood)于2004年创办的博客,博文被出版为《高效能程序员的修炼》
            2008年开办StackOverflow问答网站
        • Joel on Software,其博文选集在中国被翻译成《软件随想录》
        • Clean Coder Blog:"Bob 大叔"(Robert C. Martin)的博客,其博文选集在中国被翻译成《程序员的职业素养》
        • Martin Fowler:主要专注于面向对象分析与设计、统一建模语言、领域建模,以及敏捷软件开发方法,包括极限编程。
            他的《重构》、《分析模式》、《企业应用架构模式》、《领域特定语言》和《NoSQL精粹》都是非常不错的书
        • Paul Graham Essays:创业文章: 
            《How to Get Startup Ideas》
            《Do Things that Don't Scale》
            《Startup = Growth》
        • Steve Yegge
        • Bruce Eckel's Programming Blog===《Thinking in Java》作者的博客,他之前的博客在artima - Computing Thoughts
        • Herb Sutter 《Exceptional C++》、《More Exceptional C++》、《Exceptional C++ Style》作者。
        • Eli Bendersky's website 主要是C、C++和Python相关的
        • Peter Krumins' blog
        • Brendan D. Gregg 是Netflix的工程师,博客基本上都是和Linux性能分析相关的
        • Evan Klitzke ,主要讨论Linux和C++相关的内容。
        • Julia Evans ,主要讨论Linux debug工具和网络相关的内容。
        • null program,和C/C++相关的一个博客
        • Fluent {C++}========== C++相关的文章。
        • Preshing on Programming 一个和C/C++相关的博客,其中有很多的干货。
        • Programming is Terrible 主要是软件开发中的一些教训。
        • Accidentally Quadratic 
        • Hacker Noon 这是一个一堆人在写的博客,里面有很多质量很高的文章。
        • Medium 网站 这个网站就是一个博客发布系统
    YouTube 技术频道
        • Devoxx, Devoxx的频道,其中有各种很不错的技术分享。
        • Coding Tech,也是个非常不错的编程频道,涵盖各种技术。
        • Amazon Web Services
        • Facebook Developers
        • Google Developer, Google公司的官方频道,其中包括Google I/O大会、教程、新闻、最佳实践、技巧分享.
        • Spring Developer , Spring的官方频道。
        • Microsoft Research
        • MIT 公开课
        • Stanford Online
        • Prof. Dr. Jens Dittrich,一个德国教授开的一个关于数据库相关的频道,里面有很不错的数据库内在原理的内容。
        • Red Hat Summit, RedHat峰会频道,其中有很多和Linux相关的技术新闻和分享。
        • Open Networking Summit,这是一个网络相关的频道。
        • Dan Van Boxel,这是一个机器学习工程师折腾各种事的视频
        • The New Boston 前端开发工程师必去的地方,可能也是我所知道的最好的关于前端技术的YouTube频道。
        • Derek Banas 是一个教程型的频道,其中包括编程语言、游戏开发、Web开发我个人觉得是一个可以用来练英文听力的频道。
        • Java , Java相关的各种分享。
        • CppCon, C++大会的一些视频,可以让你了解很多C++最新功能和相关的动态。
        • Computerphile 布雷迪-哈伦(Brady Haran)运作的频道
        • 关于安全,推荐四个频道:
            •DEFCONConference================defcon.org的官方频道。
            • CCCen, Chaos Computer Club。
            • RSA Conference , RSA Conference
            • Black Hat - Black Hat Conference.
    各大公司技术博客
        跟随这些公司的博客,你不但可以看到这些公司的工程技术,还能掌握到一些技术方向和趋势。
        • Airbnb Engineering
        • AWS 相关
            • All Things Distributed
            • AWS Architecture Blog
            • On Efficiency, Reliability, Scaling - James Hamilton, VP at AWS 
        • Bandcamp Tech
        • BankSimple Simple Blog
        • Bitly Engineering Blog
        • Cloudera Developer Blog
        • Dropbox Tech Blog
        • Etsy Code as Craft
        • Facebook Engineering
        • Flickr Code
        • Foursquare Engineering Blog
        • Google Research Blog
        • Groupn Engineering Blog
        • High Scalability
        • Instagram Engineering
        • LinkedIn Engineering 
        • Oyster Tech Blog 
        • Pinterest Engineering Blog
        • Quora Engineering 
        • Songkick Technology Blog
        • SoundCloud Backstage Blog
        • Square The Corner
        • The Reddit Blog
        • The GitHub Blog
        • The Netflix Tech Blog
        • Twilio Engineering Blog
        • Twitter Engineering
        • WebEngage Engineering Blog
        • Yammer Engineering
        • Yelp Engineering Blog
        • Smarkets Blog
    论文
        读论文的方法:
            • How to read an academic article 
            • Advice on reading academic papers
            • How to read and understand a scientific paper 
            • Should I Read Papers?
            • The Refreshingly Rewarding Realm of Research Papers
        论文集散地:要成长为一个高手,论文是你一定要读的。
            • 2 Minute Papers 一个YouTube的频道,给出一些非常不错的和计算机相关的论文介绍,让你了解目前最有意思的一些科学突破。
            • Best Paper Awards in Computer Science, 从1996年以来,获奖的计算机科学方面的论文收集。
            • Google Scholar, Google学术搜索,一个可以免费搜索学术文章的网络搜索引擎
            • Facebook, Facebook公司的论文。
            • Research at Google, Google发布-些论文。
            • Microsoft Research ,微软发布的论文。
            • MIT's Artificial Intelligence Lab Publications , MIT和人工智能相关的论文。
            • MIT's Distributed System's Reading Group, MIT和分布式系统相关的论文。
            • arXiv Paper Repository 一个收集物理学、数学、计算机科学与生物学的论文预印本的网站
            • SciRate   arXiv上的好评的论文,
            • cat-v.org 网站,不只有论文,还有技术手册或是一些有意思的文章
            • Usenix: Best Papers===Usenix上推荐的最佳论文。
            • The Morning Paper,该博客会每天推送一篇论文,特别棒。
            • Lobste.rs tagged as PDF, Lobsters是一个聚焦于技术的社区,主要是链接聚合和对话题进行讨论。其中的PDF分类可以认为也是一个论文的集散地。
            • Papers We Love, GitHub上的一个近3万颗星的计算机科学方面的论文社区。
            
    我一直认为,学习需要自我驱动,要学会自己“找食物”,而不是"等着喂”。

程序员练级攻略(2018)-陈皓-笔记整理相关推荐

  1. 程序员练级攻略(2018):技术资源集散地

    这个是我订阅 陈皓老师在极客上的专栏<左耳听风>,我整理出来是为了自己方便学习,同时也分享给你们一起学习,当然如果有兴趣,可以去订阅,为了避免广告嫌疑,我这就不多说了!以下第一人称是指陈皓 ...

  2. 程序员练级攻略(2018):前端基础和底层原理

    这个是我订阅 陈皓老师在极客上的专栏<左耳听风>,我整理出来是为了自己方便学习,同时也分享给你们一起学习,当然如果有兴趣,可以去订阅,为了避免广告嫌疑,我这就不多说了!以下第一人称是指陈皓 ...

  3. 程序员练级攻略(2018) --左耳朵耗子

    2011年,我在 CoolShell 上发表了 <程序员技术练级攻略>一文 目前,我在我极客时间的专栏上更新<程序员练级攻略(2018版)>这篇文章有[入门篇].[修养篇].[ ...

  4. 高效学习 程序员练级攻略

    感谢内容提供者:金牛区吴迪软件开发工作室 文章目录 一.高效学习 1.端正学习态度 2.面对枯燥和量大的知识 3.深度,归纳和坚持实践 4.学习和阅读源码 5.源头.原理和知识地图 二.程序员练级攻略 ...

  5. 程序员技术练级攻略(陈皓)

    月光博客6月12日发表了<写给新手程序员的一封信>,翻译自<An open letter to those who want to start programming>,我的朋 ...

  6. 程序员练级攻略(2018):前端 UI/UX设计

    这个是我订阅 陈皓老师在极客上的专栏<左耳听风>,我整理出来是为了自己方便学习,同时也分享给你们一起学习,当然如果有兴趣,可以去订阅,为了避免广告嫌疑,我这就不多说了!以下第一人称是指陈皓 ...

  7. 程序员练级攻略----转自酷壳网coolshell.c n

    月光博客6月12日发表了<写给新手程序员的一封信>,翻译自<An open letter to those who want to start programming>,我的朋 ...

  8. 程序员练级攻略:程序员修养

    这是一篇转载自陈皓<左耳听风>专栏的文章,这篇文章介绍了要做一名合格的软件工程师,需要具备的修养,注意这里我说的是工程师,而不是码农. 这是程序员的工程师文化,也就是程序员的价值观,因为我 ...

  9. 【程序人生】:程序员练级攻略

    月光博客6月12日发表了< 写给新手程序员的一封信>,翻译自< An open letter to those who want to start programming>,我 ...

最新文章

  1. 保护眼睛设置.txt
  2. Delphi开发的数据库程序在C:\PDOXUSRS.NET生成文件,拒绝访问及读写权限
  3. python获取键盘输入能不能不按回车键_Github获8300星!用Python开发的一个命令行的网易云音乐...
  4. 【学习笔记】mongodb的使用(二)flask项目使用mongodb实现人员管理系统
  5. 一、PHP框架Laravel——入门和安装
  6. SQL SERVER数据库附加是只读的解决方法
  7. jython语法入门
  8. 将PowerShell连接到SQL Server –使用其他帐户
  9. 彻底搞懂 Git 进阶用法
  10. Aqua Data Studio 执行HiveSql的问题
  11. 修改iphone模拟器hosts
  12. 西电2021计算机考研大纲,2021年西安电子科技大学硕士研究生833计算机学科专业基础综合考试大纲...
  13. ubuntu20.04 虚拟机连不上网
  14. strcpy、strcpy_s、strncpy、strncpy_s 字符串拷贝用法
  15. kali 2.0修改gnome登陆界面背景图片
  16. gorm实现insert ignore into语句调用
  17. 数据分析模型篇—PEST分析
  18. java实现自动售货机
  19. 喜马拉雅android sdk接入,喜马拉雅(com.ximalaya.ting.android) - 8.0.1.3 - 应用 - 酷安
  20. CRM数据分析是什么

热门文章

  1. MYSQL内存请求一直不释放_MySQL内存不释放分析
  2. 光的偏振(Polarization of light)
  3. 机器学习-迁移学习的介绍
  4. filezilla:不安全的服务器,不支持FTP over TLS
  5. 控制科学和计算机博士哪个好,控制理论与控制工程博士考博有必要吗?我研究生毕业想搞实际工程,考博有没有必要?...
  6. 李佳琦月赚80万:这个时代,你再努力也拼不过这种人
  7. 201621123028《Java程序设计》第二周学习总结
  8. ​富士莱医药通过注册:年营收近5亿 钱祥云曾非法买卖外汇
  9. 关于git提交代码报错:Push to origin/master was rejected
  10. 【AI TOP 10】马化腾:AI技术沦为网络黑产新工具;网易区块链项目被传夭折; 人工智能可以让狗跟人说话...