Deep Learning Specialization on Coursera

推荐系统三十六式:用知识去对抗技术不平等

前段时间和头条的一个工程师聊天,他在发布校招信息后发现投NLP算法的非常多,但是投推荐系统的寥寥,一方面,可能是我这边同学样本偏NLP的居多,另外一个很重要的原因,在校的同学很难有机会接触到大厂的推荐系统。且不说在校的同学,就是中小厂的工程师,也很难有机会接触稍大一些规模的推荐系统。一方面,大厂有需求有动力去搞推荐系统和推荐算法,这是可以转化为真金白银的,另外一方面,大的需求背后又是相对匮乏的推荐系统体系化知识普及:

在复杂网络中,雄踞顶端的节点无法体会长尾的疾苦。推荐系统的技术应用现状也如此,大厂门一骑绝尘,感觉分分钟就要达到奇点的节奏,然而更普遍的是:太多中小厂、工程师们还不知道一个推荐系统如何才能从0到1诞生,这需要去了解哪些知识?

这是《推荐系统三十六式》开篇词”用知识去对抗技术不平等”的一段话,这段话以及这篇文章深得我心,所以今天就安利一下这个专栏,先介绍一下有丰富业界推荐系统实战经验的刑无刀老师:

刑无刀,本名陈开江,现在是”贝壳找房“资深算法专家,从事算法类产品的研发。曾任新浪微博资深算法工程师,考拉FM算法主管。从业8年时间,他的工作和研究范围始终没有超出推荐系统,同时也是中国最专业推荐技术与产品社区之一ResysChina的特约作者,不仅经验丰富,还很会写。

这些年,他曾服务过创业公司、传统大公司和大型互联网公司,这见证了大大小小、形状各异的推荐系统的构建过程,基本都从0到1参与了这些公司的推荐系统,专栏中也凝聚了他无数的踩坑经验。

极客时间的运营同学找我推荐下这个专栏,同样的也给大家争取了一些优惠,参与拼团仅需58元,不过优惠的周期和人数都有限制,先到先得!

那为什么我要推荐这门课程呢,来,先看一下目录:

你所收获的不只是如何根据需求编写推荐算法,而是如何从整体上考虑如何构建优秀的推荐系统。说真的,但凡其中任何一个点对你的成长有帮助,这个课程费就是百倍回报。

需要说明的是,这是一个已经完结的专栏,不过很难找到一个如此系统介绍推荐系统的学习资料了,一本书不到的价格,助你全面学习推荐系统相关知识,也欢迎转发给你认为可能有需要的同事和同学。

Elasticsearch核心技术与实战

Elasticsearch视频新课,感兴趣的同学可以看看:Elasticsearch核心技术与实战

搜索是现代软件必备的一项基础功能,而 Elasticsearch 就是一款功能强大的开源分布式搜索与数据分析引擎。

它可以从海量数据中快速找到相关信息,在同领域内几乎没有竞争对手——近两年 DBRanking 的数据库评测中,ES 在搜索引擎领域始终位列第一。

当你在 GitHub 上搜索时,Elasticsearch 可以实现代码级的搜索与高亮显示 ;当你在网上购物时,ES 可为你推荐喜欢的商品;当你下班打车回家时,ES 可以通过定位附近的乘客和司机,帮助平台优化调度。

Elasticsearch 还被广泛运用于大数据近实时分析,包括日志分析、指标监控、信息安全等多个领域。

它可以探索海量结构化、非结构化数据,按需创建可视化报表,对监控数据设置报警阈值,甚至通过使用机器学习,做到自动识别异常状况。

作为目前最流行的开源搜索引擎,ES 在全球的下载量已超过 3.5 亿次,腾讯、滴滴、今日头条、饿了么、360 安全、小米,vivo 等国内诸多知名公司都在使用 Elasticsearch。

Elasticsearch 有什么特点?

Elasticsearch 非常容易上手,具有开箱即用的特性,你可以在极短的时间内设置好开发环境,然后快速上手使用,继而在成百上千台服务器上实现 PB 级的数据处理。

虽然上手快,但要做到深入理解并高效使用,可就没那么简单了,比如:

1. 为什么我的数据查不到,明明是有的啊!

2. 什么鬼?为什么这几条数据出现在搜索结果的前几位?

3. 生产环境我需要多少台机器,索引的分片数怎么样设置才是合理的?

4. 应该关注哪些指标,才能保证集群健康高效地运行?

5. 对于日志型应用,如何设置 Hot & Warm Architecture 节约成本,怎样管理和优化基于时间序列的索引数据,才能提高集群的整体性能?

4. 为什么我的集群脑裂了?数据损坏后,怎样才能恢复?

其实,想要掌握 Elasticsearch,除了要理解其分布式架构的原理外,还要了解一些信息检索领域的知识和相关技巧。

分享给你一张 Elasticsearch 核心知识图谱,只有对每一个知识点仔细梳理并深入理解,才能解决工作中的实际问题。

这张图谱出自阮一鸣,我之前听过他在 Elastic 中国开发者大会的分享,讲得非常不错。

最近,得知他跟极客时间合作,推出了一门视频课《Elasticsearch 核心技术与实战》,我有幸提前看到了目录和一部分内容,很想推荐给你。

在课程中,他用理论与实践相结合的方式、深入浅出地讲解了 Elasticsearch,只要你坚持学习,就可以掌握 ES 的基本概念和服务搭建,了解其运行机制和常用技巧,并通过上手实战理解 ES 在实际项目中的应用。

近几年 ES 非常热门,所以去年 Elastic 公司推出了官方的 Elastic 工程师认证考试,需要考生在 3 个小时的线上考试中,动手解决 12 个实际问题,就算有多年工作经验的老手都未必能通过。

所以,这个认证的含金量还是挺高的,有证跟没证不仅能力水平可能差一个档次,收入也有可能差一个档次。

阮一鸣说,这门课覆盖了 Elastic 认证考试的全部考点,想参加考试的朋友可以将这门课作为参考教材,这也算是「学习技能之外的 bonus」了。

关于阮一鸣

阮一鸣,eBay Pronto 平台技术负责人。Pronto 平台管理了 eBay 内部上百个 Elasticsearch 集群,数据规模超过了 4000 个节点。这些集群在 ebay 的生产环境中,支撑了包括订单搜索,商品推荐,日志管理,风险控制,IT 运维,安全监控等不同领域的服务。

作为一名互联网行业的老兵,他从业近 20 年了,在大数据、云计算和性能优化方面积累了丰富的经验。同时,他还是一名连续创业者,创办过手机游戏公司、个性化音乐推荐与分享平台 8box。

他是如何讲解 Elasticsearch 的?

如果你对 Elasticsearch 有些了解,就会发现 ES 的产品迭代速度非常快,很多老的 API 都已经被废弃不再使用,搜索到的参数配置也大多发生了变化。

市面上的书籍和教程都是基于 5.x 甚至是 2.x 版本。而在课程中,哥们儿使用 Elasticsearch 最新的 7.1 版本进行教学。

所有 ES 最新版本的特性,在课程里都会有全面和直观地展现,比如:用机器学习进行异常检测;用 Canvas 展示数据;用索引的生命周期管理工具对索引进行优化等等。

结合目录,我总结了一下,这个课大概分为 5 个部分:

1. 初识 Elasticsearch:

Elasticsearch 核心概念、工作机制与应用场景;本地开发环境搭建;倒排索引的原理与 ES 中 Analysis 的具体细节;Mapping 设置和一些基本的 Search & Aggregation API。

2. 深入了解 Elasticsearch:

理解 Elasticsearch 分布式架构的原理;相关性算分的原理;数据建模的最佳实践;深入搜索及聚合功能以提高搜索结果的相关度。

3. 管理 Elasticsearch 集群:

集群的水平扩展、参数配置、性能优化、故障诊断。

4. 利用 ELK 做大数据分析:

结合使用场景和数据,探索 Logstash、Kibana 的各项功能。

5. 应用实战工作坊:

设计了电影搜索和 Stack Overflow 用户调查问卷数据分析两个实战项目,通过上手实践,你可以巩固所学的知识点,并运用到实际项目中。

需要什么基础,能获得什么?

这门课不仅适合有 ES 使用经验的人,也适合初学者。编程知识和数据库的相关使用经验,会对你学习 ES 有一定帮助,但并不是必须的。

针对开发人员,搜索是一项被广泛需要的功能,哥们儿详细地讲解了相关的搜索概念在 Elasticsearch 中是如何对应和具体实现的。

如果你是一名 ES 的运维人员,管理了公司内部的 Elasticsearch 集群:上线前的如何进行容量规划,上线后如何保证这些集群在生产环境内稳定高效的运行,如何在凌晨识别出异常信号,及时发出告警,以避免灾难的发生。

这些问题,他在课程中都会给出相关的最佳实践。

其实,无论是开发还是运维,架构师抑或数据分析师,甚至是产品经理,都应该学一学 Elastic Stack。

在大数据时代,近实时的搜索和分析能力,会让你唯快不破,洞见未来。——这句 copy 了阮一鸣,要我说其实就是升职加薪走上人生巅峰呗,这话够实在吧。

跟着好好学,结合课程中的练习和实践,相信你一定能学以致用,基于 Elasticsearch 构建出你自己的搜索和数据分析产品。

这部分好像写得有点长啊,要我总结就一句:放心学,学得会,用得着。

课程大纲
第一部分:初识 Elasticsearch
第 1 章:概述
课程概述及学习建议
Elasticsearch 简介及其发展历史
Elastic Stack 家族成员及其应用场景
第 2 章:安装上手
Elasticsearch 的安装与简单配置
Kibana 的安装与界面快速浏览
在 Docker 容器中运行 Elasticsearch,Kibana 和 Cerebro
Logstash 安装与导入数据
第 3 章:Elasticsearch 入门
基本概念(1):索引,文档和 REST API
基本概念(2):节点,集群,分片及副本
文档的基本 CRUD 与批量操作
倒排索引入门
通过分析器进行分词
Search API 概览
URI Search 详解
Request Body 与 Query DSL 简介
Query String & Simple Query String 查询
Dynamic Mapping 和常见字段类型
显式 Mapping 设置与常见参数介绍
多字段特性及 Mapping 中配置自定义 Analyzer
Index Template 和 Dynamic Template
Elasticsearch 聚合分析简介
第一部分总结
第二部分:深入了解 Elasticsearch
第 4 章:深入搜索
基于词项和基于全文的搜索
结构化搜索
搜索的相关性算分
Query & Filtering 与多字符串多字段查询
单字符串多字段查询:Dis Max Query
单字符串多字段查询:Multi Match
多语言及中文分词与检索
Space Jam,一次全文搜索的实例
使用 Search Template 和 Index Alias 查询
综合排序:Function Score Query 优化算分
Term & Phrase Suggester
自动补全与基于上下文的提示
配置跨集群搜索
第 5 章:分布式特性及分布式搜索的机制
集群分布式模型及选主与脑裂问题
分片与集群的故障转移
文档分布式存储
分片及其生命周期
剖析分布式查询及相关性算分
排序及 Doc Values & Fielddata
分页与遍历:From, Size, Search After & Scroll API
处理并发读写操作
第 6 章:深入聚合分析
Bucket & Metric 聚合分析及嵌套聚合
Pipeline 聚合分析
作用范围与排序
聚合分析的原理及精准度问题
第 7 章:数据建模
对象及 Nested 对象
文档的父子关系
Update By Query & Reindex API
Ingest Pipeline & Painless Script
Elasticsearch 数据建模最佳实践
第二部分总结回顾
第三部分:管理 Elasticsearch 集群
第 8 章:保护你的数据
集群身份认证与用户鉴权
集群内部安全通信
集群与外部间的安全通信
第 9 章:水平扩展 Elasticsearch 集群
常见的集群部署方式
Hot & Warm 架构与 Shard Filtering
如何对集群进行容量规划
分片设计及管理
在公有云上管理与部署 Elasticsearch 集群
在私有云上管理 Elasticsearch 集群的一些方法
第 10 章:生产环境中的集群运维
集群健康与问题排查
生产环境常用配置与上线清单
监控 Elasticsearch 集群
诊断集群的潜在问题
解决集群 Yellow 与 Red 的问题
集群压力测试
段合并优化及注意事项
缓存及使用 Breaker 限制内存使用
一些运维的相关建议
第 11 章:索引生命周期管理
使用 Shrink 与 Rollover API 有效管理时间序列索引
索引全生命周期管理及工具介绍
第四部分:利用 ELK 做大数据分析
第 12 章:用 Logstash 和 Beats 构建数据管道
Logstash 入门及架构介绍
Beats 介绍
第 13 章:用 Kibana 进行数据可视化分析
使用 Index Pattern 配置数据
使用 Kibana Discover 探索数据
基本可视化组件介绍
Visual Builder 介绍
构建 Dashboard
第 14 章:探索 X-Pack 套件
用 Monitoring 和 Alerting 监控 Elasticsearch 集群
用 APM 进行程序性能监控
用机器学习实现时序数据的异常检测
用 ELK 进行日志管理
用 Canvas 做数据演示
用 Graph 进行数据分析
用 Timelion 分析时序型数据
第五部分:应用实战工作坊
实战 1:电影搜索服务
项目需求分析及架构设计
将音乐数据导入 Elasticsearch
搭建你的电影搜索服务
实战 2:Stackoverflow 用户调查问卷分析
需求分析及架构设计
数据 Extract & Enrichment
构建 Insights Dashboard
备战:Elastic 认证
Elastic 认证介绍
考点梳理

Kafka 核心技术与实战:6个步骤,全方位掌握 Kafka

毋庸置疑,目前 Apache Kafka 是整个消息引擎领域的执牛耳者,也是大数据生态圈中颇为重量级的一员。从最早诞生于 LinkedIn 的“分布式消息系统”,到现在集成了分发、存储和计算的“流式数据平台”,Kafka 广泛应用于国内外大厂,比如 BAT、字节跳动、美团、Netflix、Airbnb、Twitter 等等。

我身边也有越来越多的工程师们,把 Kafka 加入到自己的学习列表。的确,我们仅需要学习一套框架,就能在实际业务系统中实现消息队列应用、应用程序集成、分布式存储构建,甚至是流处理应用的开发与部署,可谓相当超值了。

不过,想要学透 Kafka 没有想象中的那么简单,学习路径和方法尤为重要。我的建议是:千万不要直接扎到具体的细节中,亦或是从一个很小的点开始学习。因为你无法建立全局的认知观,从而实现系统地学习。

在我看来,针对不同的角色,Kafka 的学习路径是不一样的。

如果你是软件开发工程师,可以先根据编程语言寻找对应的 Kafka 客户端,然后去官网上学习代码示例,正确编译和运行这些样例。接下来,你可以尝试修改样例代码并使用其他的 API,之后观测你修改的结果。如果这些都没有难倒你,你可以自己编写一个小型项目来验证下学习成果,然后就是改善和提升客户端的可靠性和性能了。到了这一步,就熟读一遍 Kafka 文档吧,确保你理解了那些可能影响可靠性和性能的参数。最后是学习 Kafka 的高级功能,比如流处理应用开发。

如果你是系统管理员或运维工程师,那么学习目标应该是如何根据实际业务需求评估、搭建生产Kafka 线上环境。对生产环境的监控也是重中之重的工作,Kafka 提供了超多的 JMX 监控指标,你可以选择任意你熟知的框架进行监控。有了监控数据,作为系统运维管理员的你,势必要观测真实业务负载下的 Kafka 集群表现。之后利用已有的监控指标来找出系统瓶颈,然后提升整个系统的吞吐量,这是最能体现你工作价值的地方。

说到这里,送大家一张 Kafka 学习框架,出自 Kafka 资深专家胡夕之手。我想你应该听过他的书《Apache Kafka实战》,豆瓣评分 8.8 分。胡夕根据他的实战经验,把 Kafka 学习框架整理成了下图。具体地,分为 Kafka 入门、Kafka 的基本使用、客户端详解、Kafka 原理介绍、Kafka 运维与监控以及高级 Kafka 应用。

这些内容,胡夕都会在他在极客时间新上线的《Kafka 核心技术与实战》专栏里为你一一讲解,跟着他对 Apache Kafka 的理解和实战方面的经验,相信你一定能透彻理解 Kafka、更好地应用 Kafka。

胡夕是谁?

胡夕,现任人人贷公司计算平台部总监,也是 Apache Kafka 的一名活跃代码贡献者。

在过去 5 年中,他经历了 Kafka 从最初的 0.8 版本逐步演进到 2.3 版本的完整过程,可以说对 Kafka 及其他开源流处理框架与技术有深刻理解。他主导过多个十亿级/天的消息引擎业务系统的设计与搭建,具有丰富的线上环境定位和诊断调优经验,也曾给多家大型公司提供企业级 Kafka 培训。

他的书《Apache Kafka实战》,读者好评如潮,说内容实战,看完上手即用,在工作中帮大家解决了问题。

你可能会问,《Kafka 核心技术与实战》专栏与书的区别又是什么呢?

其实区别还是挺大的,书是基于 Kafka 1.0 版本撰写的,但目前 Kafka 已经演进到 2.3 版本了,书中的部分内容已经过时甚至是不准确了,而《Kafka核心技术与实战》专栏的写作是基于 Kafka 的最新版。

另外,《Kafka核心技术与实战》专栏作为一次全新的交付,胡夕希望能用更轻松更容易理解的语言和形式,帮你获取到最新的 Kafka 实战经验。

你将获得?

专栏的第一部分会介绍消息引擎这类系统大致的原理和用途,以及作为优秀消息引擎代表的 Kafka 在这方面的表现。

第二部分则重点探讨 Kafka 如何用于生产环境,特别是线上环境方案的制定。

在第三部分中会陪你一起学习Kafka客户端的方方面面,既有生产者的实操讲解也有消费者的原理剖析,你一定不要错过。

第四部分会着重介绍 Kafka 最核心的设计原理,包括 Controller 的设计机制、请求处理全流程解析等。

第五部分则涵盖 Kafka 运维与监控的内容,助你获得高效运维 Kafka 集群以及有效监控Kafka的实战经验。

最后一个部分会简单介绍一下 Kafka 流处理组件 Kafka Streams 的实战应用,希望能让你认识一个不太一样的 Kafka。

Gilbert Strang教授的MIT公开课:数据分析、信号处理和机器学习中的矩阵方法

线性代数的相关课程里,我最推崇的还是MIT Gilbert Strang教授的线性代数课程,关于这方面资源的介绍,可以参考我们之前那篇文章:那些值得推荐和收藏的线性代数学习资源

最近发现他依然活跃在教学一线,在MIT 2018春季学期开设了一门的相关课程:Matrix Methods in Data Analysis, Signal Processing, and Machine Learning

这门课程可以翻译为“数据分析、信号处理和机器学习中的矩阵方法”,课程主页的配图特别能说明问题:

以下是该课程资源链接,感兴趣的同学可以参考:

课程主页:https://ocw.mit.edu/courses/mathematics/18-065-matrix-methods-in-data-analysis-signal-processing-and-machine-learning-spring-2018/
课程官方视频:https://www.youtube.com/playlist?list=PLUl4u3cNGP63oMNUHXqIUcrkS2PivhN3k
爱可可老师B站搬运链接:https://www.bilibili.com/video/av53055190/

OpenResty完全开发指南:构建百万级别并发的Web应用

推荐一门有意思的课程:OpenResty 从入门到实战

对服务端工程师来说,如果你的工作中涉及 Nginx、高性能、高并发、动态控制、性能测试、分析等,那么,不论你使用什么开发语言和平台,OpenResty 都是不可多得的高性能开发利器。

但我发现,有不少人没接触过 OpenResty,是时候打开服务端新世界的大门了。

作为一个兼具开发效率和性能的服务端开发平台,OpenResty 并不像其他开发语言一样从零开始搭建,而是基于成熟的开源组件—— Nginx 和 LuaJIT。

其核心是基于 Nginx 的一个 C 模块(lua-nginx-module),这个模块将 LuaJIT 嵌入到 Nginx 服务器中,并对外提供一套完整的 Lua API,透明地支持非阻塞 I/O,提供了轻量级线程、定时器等高级抽象。

围绕这个模块,OpenResty 构建了一套完备的测试框架、调试技术和由 Lua 实现的周边功能库。

你可以用 Lua 进行字符串和数值运算、查询数据库、发送 HTTP 请求、执行定时任务、调用外部命令等,还可以用 FFI 的方式调用外部 C 函数。

这基本上满足了服务端开发所需要的全部功能,所以,OpenResty 的适用范围早已超出了反向代理和负载均衡。

这就意味着,掌握了 OpenResty,就能同时拥有脚本语言的开发效率和迭代速度,以及 Nginx C 模块的高并发和高性能优势。

通过丰富的 lua-resty 库,OpenResty 逐渐摆脱了 Nginx 的影子,形成了自己的生态体系,在 API 网关、软 WAF 等领域被广泛使用。

据我了解,OpenResty 现在是已经是全球排名第五的 Web 服务器了,我们常用的 12306 的余票查询功能、京东的商品详情页,这些高流量的背后,都是 OpenResty 在默默地提供服务。

说到这里,特别想为你推荐一个人——温铭。

他是 OpenResty 软件基金会主席,《OpenResty 最佳实践》作者,前 360 开源技术委员会委员。

他在互联网安全公司有 10 多年的工作经验,之前一直从事高性能服务端的开发和架构,负责开发过云查杀、反钓鱼和企业安全产品。

后来得知,温铭也是为一个新系统做技术选型时偶然了解到 OpenResty 的,那时他还是个 Pythoner,不喜欢 Nginx C 模块的艰涩,还想享受它的高性能。

鱼与熊掌都想兼得, 怎么办呢?OpenResty 满足了他的需求。

但是,目前市面上的 OpenResty 学习资料非常少,官方只提供了 API 文档,并没有入门和进阶的文档,网上找的资料也不够系统。

可以说,大部分的 OpenResty 使用者都是摸着石头过河,过程相当痛苦(他自己就是其中之一)。

所以,他在极客时间开了个课专门讲 OpenResty,目的很明确:帮你快速入门,建立 OpenResty 完整知识体系,进而真正掌握这款开发利器。

像他自己说的那样:写出正确的 OpenResty 代码和写出高性能的优质 OpenResty 代码之间,相差十万八千里。

而跨越这个巨大鸿沟的零件,就散落在 OpenResty 开源项目的源码、文档、issue、PR、幻灯片、邮件列表中,需要你把它们串联起来,形成一个完整的学习路径和知识图谱。

提前要了几篇专栏的文章,结合目录,我大致梳理了一下,如果用一句话概括这个专栏,我觉得是:“从实战中来,到实战中去”:

专栏中的不少代码,都取自开源 OpenResty 的测试案例和实际的开源项目,让你在入门之初,就了解真实的使用场景。

文章中还穿插了多个视频,内容都取自真实开源项目的功能点和 PR。通过视频,可以更加直观地看到,刚学到的知识点是怎样在实际中应用的。

最后的实战部分,看着也挺带劲,哥们会带你用 OpenResty 从零搭建一个微服务 API 网关,如果你想独立搭建一个更简单、更高性能的 API 网关,这部分内容可别错过。

从实际的开源项目中学习,再到实际的开源项目中去实战,将实战融入完整的知识体系,这逻辑没毛病,要是学完没有收获,直接来找我。

另外,我看哥们还挺走心,专门列了几个学习 OpenResty 的重点,会在专栏里着重讲解那种,有好几个特别「戳」我,这回跟着好好补补课:

同步非阻塞的编程模式

不同阶段的作用

LuaJIT 和 Lua 的不同之处

OpenResty API 和周边库

协程和 cosocket

单元测试框架和性能测试工具

火焰图和周边工具链

性能优化

关于学习这个课需要什么基础,直接引用温铭原话,他比我总结得好:

OpenResty 是在 Nginx 和 LuaJIT 的基础上搭建的,所以 Nginx 和 LuaJIT 的基础知识还是需要的。

但你只要了解很少的 Nginx 知识,就可以学习 OpenResty 了。

少到什么程度呢?涉及到的 Nginx 的知识,我只用一节课就介绍完了。所以,即使你从没接触过 Nginx 也没关系。

要知道,OpenResty 并不等同于 Nginx,OpenResty 这个项目存在的目的之一,就是让你感知不到 Nginx 的存在。

从编程语言的角度看,Lua 是一种很容易理解的语言,你只要能看懂它的代码,并不需要独立写出复杂的 Lua 代码,就可以完成专栏的学习了,我会用少数几节课带你入门 Lua,达到 OpenResty 的使用水准。

哥们写的有点长,我总结就一句:

放心学,学得会,能用着。

给 Java 新手的入门指南:零基础学 Java

极客时间新课 零基础学 Java:PayPal 技术专家手把手带你入门 Java,快速掌握 Java 编程技巧 http://gk.link/a/103ol

作为最受欢迎的编程语言之一,Java 已经走过了20多个年头。从已经落寞的诺基亚到现在火热的电商系统,我们都能看到 Java 语言的身影。虽然这几十年来,也都陆续有众多其它语言出现,但它们在普及程度上仍然无法与 Java 相提并论。

所以,我也认为,在未来十年,Java 仍将会是最受欢迎的编程语言。如果你想成为一名合格的后端工程师,并且想入职知名的互联网公司,那我推荐你深入学习 Java。原因如下:

薪水高。Java 工程师的月薪普遍在 10k-50k 之间,相比于一般职位,可谓“高薪”。

工作岗位较多。包括阿里巴巴、京东、去哪儿网、亚马逊在内的知名公司都在使用 Java 语言。

生态非常成熟。Java 不仅仅只是一种主流编程语言,它同时也代表着一整个活跃的生态系统。你在大数据、微服务、云计算等热门领域都能看到它的身影。

可以说,学好了 Java,不愁没有用武之地,未来的开发之路会非常宽广。

对于初学者而言,一开始很容易被各种编程语言的抽象概念吓倒。比如常量、字符类、对象、封装、继承、等等,虽然字都认识,但就是搞不明白什么意思,有时候如果过于关注某个概念的字面含义,反而更容易跑偏。

另外,好不容易把这些抽象的概念都弄懂了,但却不知道该怎样把它们串起来写出完整可用的程序。往往脑子里有思路,就是不知道怎样用代码体现出来。

我觉得这些问题其实很正常,编程语言并不像我们平常讲话用的语言那样是人和人之间交流的语言,它更像是一种人和动物之间交流的语言,两者的思维方式和行为方式是完全不同的,所以从理解一门编程语言到熟练运用,这中间还有不少的路要走。

为了让更多零基础的同学更快上手 Java,领略到 Java 这门应用最为广泛的编程语言的魅力,我给打算入门或正在学习 Java 的读者们,推荐臧萌在极客时间推出的《零基础学 Java》视频课程。

之所以推荐这个课程,主要是下面 3 个原因:

形式上,这门课拒绝死记硬背式的讲解,而是通过大量比喻、类比来辅助你理解抽象概念。让你边理解,边学习,掌握语法后的本质,从而不再视编程语言为“天书”。

内容上,会贯穿 Java 核心知识点,带你从最基础的语法讲起,到循环控制、再到类、面向对象、多态和继承以及多线程等高阶内容,带你全面掌握 Java 开发核心,让你学完之后可以独立运用 Java 写一些小型应用程序,从而把自己头脑中的想法变成实际可以运行的程序,体验到创造的乐趣。

除此之外,课程还设计了各种大大小小的习题演练,让你通过动手实践来更深入地掌握各个知识点,在实战中不断磨练编程技能。课程的最后,臧萌老师会带着你用 Java 完成一款小游戏的设计,这个项目会贯穿课程中涉及到的所有核心知识点,完成这个项目,你就能够把学到的知识融会贯通,完成从学习一门编程语言到使用一门编程语言的转变。

臧萌是谁?

臧萌,现任 PayPal 数据处理组技术负责人,《Java入门 1 2 3》一书的作者,曾帮助过数万名读者顺利入门 Java。

他先后在 Sybase,eBay,盛大,亚马逊,携程,PayPal 等公司工作,方向包括 ETL,GUI,IaaS,大数据,安全等。他多年来专注于Java,有10多年一线软件设计和开发经验,对 Java 语言和软件开发有深刻的认识。

另外不得不说,他的 Java 入门高口碑书籍《Java 入门123》,豆瓣评分 9.2,被称为 Java 入门图书的“战斗机”,累计 7 次印刷,售出超过 3w 册,通俗易懂的讲解风格也获得了众多读者的好评。

你将获得什么?

为了让你更清晰地了解Java入门需要掌握的核心知识点,臧萌老师为你梳理了 Java 入门的学习路径。结合《零基础学 Java》课程讲解,学完后你将完全掌握 Java 核心语法,并用 Java 编写出能够解决某个具体问题的应用程序,真正做到学以致用。

课程共分为六个章节。

第一章 Java 编程基础

会抽出编程语言中通用的语法点来讲述,让你学会写出符合语法规范的代码,逐步适应与计算机进行沟通的方式,即“你告诉我要做什么,数据在哪里,我来执行”。

第二章 Java 面向对象编程

会慢慢让你熟悉面向对象的思想,以类和对象的方式,花式组织代码和数据,从而能够让你的程序解决更为复杂的问题。学完后,你可以深刻理解 Java 面向对象的思想带来的好处,并利用它们来解决实际问题。

第三章 Java 中的异常处理

当代码执行出现错误时,Java 会通过异常机制来告诉我们“臣妾做不到啊!”。为了避免程序崩溃,会带你学会如何处理程序的异常,如何结合代码逻辑来快速排查和解决程序的问题。

第四章 Java 中的常用工具类和新语法

编程中有一个很重要的原则,就是“不要重复发明轮子”。各种常用的类库就相当于各种现成的轮子,我们直接使用就可以了,而不需要用代码重复实现一遍。在这一章,会带你学习 Java 提供的数据结构相关类,文件和网络 I/O 相关类以及一些新增的常用语法,从而让你能够更高效地解决一些常见问题场景。

第五章 Java 中的线程

一个线程可以简单的理解为一个 CPU 的核,是驱动程序运行的发动机。这一章中,你将学会如何在一个程序中使用多个线程。多个线程就像是多个工人在一起干活,协调好资源很重要,协调不好,工程进度就会受到拖累。这是这一章学习的重点,也是难点。

第六章 Java 编程实战

这一篇中涉及的方向很多,包括必备工具,Java 平台,常用类库,程序设计,游戏程序大练兵等。安排这些内容的目的就一个:让你可以开始独立设计和编写程序,为下一步的学习做好准备。

最后,还要嘱咐一句,学习编程语言,可以速成,但是掌握一门编程语言,没有速成的方法。一个人可以五天学会游泳,但是没有人可以五天成为游泳健将——无论这个人身体素质有多好。因此,想掌握一门编程语言的程,也需要多学多用。对一门编程语言的掌握程度,也是随着代码量和用它解决的问题的数量慢慢增长的。

Facebook工程师:从工程角度,系统掌握Python

推荐FB资深工程师景霄开设的《Python核心技术与实战》新专栏,从工程的角度,重新理解 Python,做到真正的“即学即用” http://gk.link/a/103fc

作者介绍:
景宵

本科毕业于武汉大学电子工程系(专业第一),后进入哥伦比亚大学攻读计算机硕士学位。

毕业后顺利入职Facebook,目前在核心组Feed Ranking,从事机器学习的相关工作。

这个专栏是从工程的角度来讲解Python这门编程语言,不会死抠一些很偏的知识点,相反,会从实际出发,以工作中遇到的实例为主线,去讲解Python的知识点和应用。本专栏中基于Python最新版本3.7,有大量独特的案例和见解,以及不少作者本人阅读源码后的体会,并且难易兼顾,专栏中既有简单的基础知识,也有进阶的课程,会尽量的做到“老少皆宜”。

你将获得:
从工程角度掌握 Python 高阶用法
独立开发 Python 项目的能力
完整的 Python 学习路径
硅谷一线工程师的独家经验分享
新目录
一、Python基础知识

方法:如何逐步突破,成为Python高手(Jingxaio)
工具:为什么必学Jupyter Notebook ? (Yuannan)
列表和元祖,到底用哪一个?(Jingxaio)
字典、集合,你真的了解吗? (Jingxiao)
深入浅出字符串 (Jingxiao)
Python“黑箱”:输入与输出 (Tan)
修炼基本功:条件与循环 (jingxiao)
提高程序的稳定性:异常处理 (jingxiao)
不可或缺的自定义函数(Jingxiao)
简约不简单的匿名函数(Jingxiao)
你好,面向对象(上)(Tan)
你好,面向对象(下)(Tan)
搭建积木:Python 模块化 (Tan)
答疑(一)(jingxiao)

二、Python进阶核心知识

Python对象的比较、复制 (Jingxiao)
值传递、引用传递or其他,Python里参数是如何传递的?(jingxiao)
强大的装饰器 (jingxiao)
metaclass:是潘多拉魔盒还是阿拉丁神灯 ?(Yuannan)
深入理解迭代器和生成器 (Tan)
揭秘Python协程 (Tan)
Python并发编程之Future (jingxiao)
Python并发编程之Asyncio (jingxiao)
你真的懂Python GIL(全局解释器锁)吗?(yuannan)
带你解析Python垃圾回收机制(Tan)
SWIG:TensorFlow等流行框架背后的Python/C++混合编程技术(Yuannan)
答疑(二)(jingxiao)

三、规范:编写高质量的Python程序

活都来不及干了,还有空注意代码风格?!【yuannan】
学会合理分解代码,提高代码可读性 (Tan)
如何合理运用assert?(Jingxiao)
巧用上下文管理器和With语句精简代码 (Jingxiao)
真的有必要写单元测试吗 (jingxiao)
pdb & cProfile:调试和性能分析的法宝(Jingxiao)
答疑(三)(jingxiao)

四、实战:带你搭建量化交易系统 (Tan)

初探量化世界
RESTful & Socket: 搭建你的交易后台核心
Pandas & Numpy: 策略与回测系统
Kafka & Rabbitmq: 自动化交易流水线
Mysql: 日志和数据存储系统
Django: 搭建监控平台
答疑(四)

五、分享:技术见闻和感想 (Jingxiao)

硅谷一线工程师的工作日常
细数服务器端开发的注意事项
提高市场竞争力:如何成为一个全栈工程师?

景霄目前从事机器学习的相关工作,主要负责是人工智能的推荐排序系统与算法。他曾领导多个上亿用户级产品的开发与落地,可以说工程与实战经验非常丰富。最近,他把自己的「工程角度」Python学习法整理了出来,跟极客时间合作了《Python核心技术与实战》专栏,希望带你从工程的角度,重新理解 Python,做到真正的“即学即用”。

近几年,Python 的受欢迎程度可谓是扶摇直上,加入 Python 学习大营的人越来越多。不过,随之而来的是,竞争越来越激烈。迷茫的声音也越来越多,我经常看到粉丝在后台留言:

Python程序员都有哪些发展方向?大概都有哪些技能点?

刚学了半年多 Python,想找个薪资高一点的工作,有什么建议吗?

想学 Python 爬虫,要从哪里开始入手?

想成为机器学习工程师,该怎样才能拿到 Offer ?

……

其实,大家迷茫的根本原因,是对 Python 的职业成长路径不清楚,也不了解各个阶段对应的核心知识点。因此,我给大家整理了一份「 Python 职业成长路径图」,涵盖Python程序员职场发展的4个方向,也列出了各个方向需要掌握的核心知识点,分享给你。

入门Python,夯实基础,掌握Python核心知识,比如基本的数据结构、面向对象编程、并发编程等等,成为一名合格的Python工程师;

Web工程师:当你掌握了Python中高阶知识,再去学一些单元测试、Flask框架、数据库使用等,就可以往Web工程师发展;

爬虫工程师:如果你对爬虫感兴趣,这是个不错的选择。你的知识库还需要再添加一块内容:学习爬虫开发;

数据分析工程师:大数据、数据分析这几年大火,相对应的,你还需要学习Matplotlib绘图、Pandas、10大核心算法等内容;

机器学习工程师:跟这个方向相关的词,还有“高薪”、“稀缺”,不过想成为机器学习工程师并非易事,你需要花更多的时间和精力去专研深度学习。

可以说,不管你往哪个方向发展,都非常有前景,特别是数据分析工程师和机器学习工程师。不过,想成为 Python 高手,找到一个好方向固然重要,更重要的是你的学习方法是否正确。

我认识这么一个牛人,他在读大学的时候才开始接触编程,但一路进入哥伦比亚大学计算机系读研、毕业后进入 Facebook 做机器学习工程师,他是怎么做到的呢?

他说,不光他自己,包括他在Facebook 认识的编程牛人们,都特别善于从「工程角度」、以实用为出发点来思考和学习一门语言。

方法是:花很短的时间看完基础语法,然后去了解一些重难点、易错点,最后自己亲自动手完成一个项目,达到融会贯通的效果。这样下来,可能几周时间就掌握得差不多了。

你看,这样从「工程角度」去学习和理解一门语言,会让你达到事半功倍的效果。

再跟你重点介绍一下,这位牛人叫景霄,是Facebook资深工程师。目前从事机器学习的相关工作,主要负责是人工智能的推荐排序系统与算法。他曾领导多个上亿用户级产品的开发与落地,可以说工程与实战经验非常丰富。

最近,他把自己的「工程角度」Python学习法整理了出来,跟极客时间合作了《Python核心技术与实战》专栏,希望带你从工程的角度,重新理解 Python,做到真正的“即学即用”。

相比市面上大多数理论且远离实际工程的学习资料,这个专栏特点很明显:

1.他不会死抠一些很偏的知识点,而是从实际出发,以工作中遇到的实例为主线,去讲解 Python 的核心技术和应用;

2.有完整的Python学习路径,从基础语法到高级用法,再到项目实战开发。让你把学到知识点通过项目都串联起来,形成你自己的Python 学习框架图;

3.整个专栏内容都是基于 Python 最新的3.7版本来讲解,告别网上那些陈旧不更新的学习内容,毋庸置疑,Python 3才是Python的未来。

具体地,《Python核心技术与实战》分成以下四个模块。

1.Python基础入门

必学知识:【Python基础数据结构】【Python基础语法】【文件操作】【错误与异常处理】【Python面向对象】【模块化】

第一步,你必然需要掌握的Python基础知识。这个专栏不仅仅只讲基础概念、操作,同时也为你整理了很多进阶难度的知识,或是一些重难点、易错点等需要注意的地方。

2.Python进阶核心知识

必学知识:【Python协议】【Python高级语法】【Python正则表达式】【Python并发编程】【垃圾回收机制】【项目实战】

第二步,进阶 Python 的核心知识点,比如装饰器、并发编程等等。如果你的工作只是写100行以下的脚本程序,可能不怎么会用得到。但如果你做的是大型程序的开发,则非常有必要。

3.规范:编写高质量的Python程序

这部分着重于教你把程序写得更加规范、更加稳定,用具体的编程操作和技巧,教你提高代码质量。比如,如何合理地分解代码、运用 assert,如何写单元测试等等。

4.Python实战,串联整个知识体系:带你搭建量化交易系统

必学知识点:【RESTful】【Socket】【Pandas】【Numpy】【Kafka】【RabbitMQ】【MySQL】【Django】

真正要掌握一门编程语言,仅仅学会分散的知识点是不够的,还必须要把知识点串联起来,做一些中型的项目才能有更深的领悟与提高。这部分,景霄用量化交易系统这个具体的实战案例,带你综合运用前面所学的Python知识。

再提一句

这个专栏里的所有内容都基于Python最新的3.7版本来讲解,其中包含着景霄大量的独家解读、案例,以及不少他阅读源码后的发现和体会。同时,在层次划分上,景霄希望能难易兼顾,循序渐进。专栏中既有核心的基础知识,也有高级的进阶操作,尽量做到“老少皆宜”。

李航老师《统计学习方法(第二版)》出版及统计学习方法第一版PPT课件下载

李航老师《统计学习方法(第二版)》出版了,以下是相关介绍。

内 容 简 介

统计学习方法即机器学习方法,是计算机及其应用领域的一门重要学科。
本书分为监督学 习和无监督学习两篇,全面系统地介绍了统计学习的主要方法。
包括感知机、k 近邻法、朴素贝 叶斯法、决策树、逻辑斯谛回归与最大熵模型、
支持向量机、提升方法、EM 算法、隐马尔可夫 模型和条件随机场,以及聚类方法、
奇异值分解、主成分分析、潜在语义分析、概率潜在语义分 析、马尔可夫链蒙特卡罗法、
潜在狄利克雷分配和 PageRank 算法等。除有关统计学习、监督学 习和无监督学习的概
论和总结的四章外,每章介绍一种方法。叙述力求从具体问题或实例入手, 由浅入深,
阐明思路,给出必要的数学推导,便于读者掌握统计学习方法的实质,学会运用。
为满足读者进一步学习的需要,书中还介绍了一些相关研究,给出了少量习题,
列出了主要参 考文献。 本书是统计机器学习及相关课程的教学参考书,
适用于高等院校文本数据挖掘、信
息检索及自然语言处理等专业的大学生、
研究生,也可供从事计算机应用相关专业的研发人员 参考。

第二版序言

《统计学习方法》第一版于2012年出版,讲述了统计机器学习方法,主要是一些常用的监督学习方法.
第二版增加了一些常用的无监督学习方法,由此本书涵盖了传统统计机器学习方法的主要内容.
在撰写《统计学习方法》伊始,对全书内容做了初步规划.第一版出版之后,即着手无监督学习方法
的写作.由于写作是在业余时间进行,常常被主要工作打断,历经六年时间才使这部分工作得以完成.
犹未能加入深度学习和强化学习等重要内容,希望今后能够增补,完成整本书的写作计划.
《统计学习方法》的出版正值大数据和人工智能的热潮,生逢其时,截至2018年4月本书共印刷21次,
133,000册,得到了广大读者的欢迎和支持.有许多读者指出本书对学习和掌握机器学习技术有极大的
帮助.也有许多读者通过电子邮件、微博等方式指出书中的错误,提出改进的建议和意见.一些高校
将本书作为机器学习课程的教材或参考书.有的同学在网上发表了读书笔记.有的同学将本书介绍的
方法在计算机上实现.清华大学深圳研究生院袁春老师精心制作了第一版十二章的课件,在网上公布,
为大家提供教学之便.众多老师、同学、读者的支持和鼓励,让作者深受感动和鼓舞.在这里向所有
的老师、同学、读者致以诚挚的谢意!
能为中国的计算机科学、人工智能领域做出一点微薄的贡献,感到由衷的欣慰,同时也感受到作为知
识转播者的重大责任,让作者决意把本书写好.也希望大家今后不吝指教,多提宝贵意见,以帮助继
续提高本书的质量.在写作中作者也深切体会到教学相长的道理,经常发现自己对基础知识的掌握不
够扎实,整个过程帮助自己对相关知识进行了深入的学习,受益匪浅.
本书是一部机器学习的基本读物,要求读者拥有高等数学、线性代数和概率统计的基础知识.书中主
要讲述统计机器学习的方法,力求系统全面又简明扼要地阐述这些方法的理论、算法和应用,使读者
能对这些机器学习的基本技术有很好的掌握.针对每个方法,详细介绍其基本原理,基础理论,实际
算法,通常给出细致数学推导和具体实例,帮助读者理解,也便于日后复习.
第二版增加的无监督学习方法的初稿,王泉、陈嘉怡、柴琛林、赵程绮等帮助做了认真细致的校阅,
提出了许多宝贵意见,在此谨对他们表示衷心的感谢.清华大学出版社的薛慧编辑一直给予非常专业
的指导和帮助,在此也对她表示衷心的感谢.
由于作者水平有限,本书一定存在不少错误,恳请各位专家、老师、同学、读者批评指正.

李 航
2018年4月23日

目录

第一篇 监督学习
    
第二篇 无监督学习
第13章 无监督学习概论        
13.1.1 无监督学习基本原理
13.1.2 基本问题
13.1.3 机器学习三要素
13.1.4 无监督学习方法

第14章 聚类方法
14.1 聚类的基本概念
14.1.1 相似度或距离
14.1.2 类或簇
14.1.3 类与类之间的距离
14.2 层次聚类
14.3 k均值聚类
14.3.1 模型
14.3.2 策略
14.3.3 算法
14.3.4 算法特点
本章概要
继续阅读
习题
参考文献             

第15章 奇异值分解
15.1 奇异值分解的定义与性质
15.1.1 定义与定理
15.1.2 紧奇异值分解与截断奇异值分解
15.1.3 几何解释
15.1.4 主要性质
15.2 奇异值分解的计算
15.3 奇异值分解与矩阵近似
15.3.1 弗罗贝尼乌斯范数
15.3.2 矩阵的最优近似
15.3.3 矩阵的外积展开式
本章概要
继续阅读
习题
参考文献

第16章 主成分分析
16.1 总体主成分分析
16.1.1 基本想法
16.1.2 定义和导出
16.1.3 主要性质
16.1.4 主成分的个数
16.1.5 规范化变量的总体主成分
16.2 样本主成分分析
16.2.1 样本主成分的定义和性质
16.2.2 相关矩阵的特征值分解算法
16.2.3 数据局正的奇异值分解算法
本章概要
继续阅读
习题
参考文献

第17章 潜在语义分析
17.1 单词向量空间与话题向量空间
17.1.1 单词向量空间
17.1.2 话题向量空间
17.2 潜在语义分析算法
17.2.1 矩阵奇异值分解算法
17.2.2 例子
17.3 非负矩阵分解算法
17.3.1 非负矩阵分解
17.3.2 潜在语义分析模型
17.3.3 非负矩阵分解的形式化
17.3.4 算法
本章概要
继续阅读
习题
参考文献

第18章 概率潜在语义分析
18.1 概率潜在语义分析模型
18.1.1 基本想法
18.1.2 生成模型
18.1.3 共现模型
18.1.4 模型性质
18.2 概率潜在语义分析的算法
本章概要
继续阅读
习题
参考文献

第19章 马尔可夫链蒙特卡罗法
19.1 蒙特卡罗法
19.1.1 随机抽样
19.1.2 数学期望估计
19.1.3 积分计算
19.2 马尔可夫链
19.2.1 基本定义
19.2.2 离散状态马尔可夫链
19.2.3 连续状态马尔可夫链
19.2.4 马尔可夫链的性质
19.3 马尔可夫链蒙特卡罗法
19.3.1 基本想法
19.3.2 基本步骤
19.3.3 马尔可夫链蒙特卡罗法与统计学习
19.4 Metropolis-Hastings算法
19.4.1 基本原理
19.4.2 Metropolis-Hastings算法
19.4.3 单分量Metropolis-Hastings算法
19.5 吉布斯抽样
19.5.1 基本原理
19.5.2 吉布斯抽样算法
19.5.3 抽样计算
本章概要
继续阅读
习题
参考文献

第20章 潜在狄利克雷分配
20.1 狄利克雷分布
20.1.1 分布定义
20.1.2 共轭先验
20.2 潜在狄利克雷分配模型
20.2.1 基本想法
20.2.2 模型定义
20.2.3 概率图模型
20.2.4 随机变量序列的可交换性
20.2.5 概率公式
20.3 LDA的吉布斯抽样算法
20.3.1 基本想法
20.3.2 算法的主要部分
20.3.3 算法的后处理
20.3.4 算法
20.4 LDA的变分EM算法
20.4.1 变分推理
20.4.2 变分EM算法
20.4.3 算法推导
20.4.4 算法总结
本章概要
继续阅读
习题
参考文献

第21章 PageRank算法
21.1 PageRank的定义
21.1.1 基本想法
21.1.2 有向图和随机游走模型
21.1.3 PageRank的基本定义
21.1.4 PageRank的一般定义
21.2 PageRank的计算
21.2.1 迭代算法
21.2.2 幂法
21.3.3 代数算法
本章概要
继续阅读
习题
参考文献

第22章 无监督学习方法总结
22.1 无监督学习方法的关系和特点
22.1.1 各种方法之间的关系
22.1.2 无监督学习方法
22.1.3 基础及其学习方法
22.2 话题模型之间的关系和特点
参考文献

附录A 梯度下降法
附录B 牛顿法和拟牛顿法
附录C 拉格朗日对偶性
附录D 矩阵的基本子空间
附录E KL散度的定义和狄利克雷分布的性质
                  
索引

有同学将第一版相关的机器学习算法用python实现了一遍,可以参考:

https://github.com/WenDesi/lihang_book_algorithm (致力于将李航博士《统计学习方法》一书中所有算法实现一遍)

最后附上清华大学深圳研究生院袁春老师精心制作了第一版十二章的课件,关注公众号AINLP,回复”tongjixuexi”获取:

极客时间新课:Web 协议详解与抓包实战

极客时间新课《Web 协议详解与抓包实战》视频课,访问课程主页:http://gk.link/a/103bR

发现大部分技术人,多多少少都会遇到下面的困惑,比如:

AJAX 跨域访问时总被浏览器的同源策略阻止,其背后的原理及符合其设计思想的解决方案是什么?

缓存可以提升性能,但什么样的 HTTP 消息才会被浏览器或者代理服务器缓存呢?

抓包时收到 4xx 或者 5xx HTTP 响应码,这意味着服务器端发生了什么?

当我们维护 HTTPS 连接时,如果要优化TLS/SSL 的卸载性能,应该从哪里入手?

定位问题时,发现本地的 TCP 连接状态中出现了FIN_WAIT、CLOSE_WAIT 或者TIME_WAIT,都是什么原因引起的?应该如何解决?

想要提升 TCP 连接的传输速度,可服务器上相关的系统参数多达数十个,究竟该怎么调整?

时下逐渐普及的 IPv6 ,在报文上到底与 IPv4 协议有何差别?

你会发现,这些问题其实都和 Web 协议密切相关。我常常听到身边人抱怨“学不动了”,之所以会这样,大多是因为没有掌握好互联网体系中的底层知识。这些知识点相对稳定,而其他时刻变化的知识点是构建在这些知识点之上的。一旦掌握好,就可以长久使用,并且保持快速学习的能力。

Web 协议就是其中非常重要的一个模块。虽然它常常要兼容 internet 中非常古老或者有着突破性创新的浏览器或者服务器,从而也在时刻进化,但只要我们抓住它设计时背后的指导原则,系统地将 Web 协议转化为我们头脑中的结构体知识,就可以对我们学习前后端开发框架、面向连接的编程语言、各种分布式组件、架构设计、微服务编程等都起到事半功倍的效果。

可以说,无论你是前后端工程师,还是运维测试,如果想面试更高的职位,或者要站在更高的角度去理解技术业务架构,并能在问题出现时快速、高效地解决问题,Web 协议一定是你绕不过去的一道坎。熟练掌握各种常用 Web 协议,可以帮你在工作中轻松应对各种网络难题。

如果你是前端工程师,可以快速定位问题的根源在后端还是前端,对网页性能的提升会有更多的思路。

如果你是后端工程师,可以更清晰地理解Web容器的工作原理,在网络层面快速缩小问题范围。

如果你是运维工程师,可以更明确地规划硬件及网络资源,对于故障节点的恢复也会有更系统的解决方案。

如果你是测试工程师,可以对压测工具的原理有更深入的理解,对RPC测试用例的构造也会更全面。

如果你是架构师,将会对分布式系统下的高可用架构设计和性能优化等问题有更加体系化的认识。

可是,想要真正掌握 Web 协议,并没有想象中那么容易。我发现大部分人在学习时,都卡在下面这些问题上:

Web协议的体系庞大,大多概念过于抽象,导致初学者很容易从入门到放弃。

很难快速上手,就算弄懂了复杂的概念,工作中一遇到复杂问题,还是一头雾水,不知道如何下手。

网上有很多文章可以参考,但要不就是知识点零散,要不就是解释得蜻蜓点水,无法深入到底层。

市面上相关的课程很少,要不就是仅仅讲述某一个协议,要不就是只从理论出发来讲解,实战性不强。

除此之外,很少有人会在文章或课程里通过抓包去把 Web 协议的各个细节呈现出来,然后掰开揉碎了讲给大家。基于此,我推荐你陶辉老师在极客时间开的《Web 协议详解与抓包实战》视频课,完全从实战出发,在关键场景中结合抓包工具进行实战分析,为你深入浅出地讲解常见 Web 协议涉及到的核心知识,并彻底掌握这些协议。

陶辉是谁?

陶辉,现在是智链达 CTO。他曾担任阿里云高级专家,也在华为、腾讯、思科等公司从事过服务器端的研发工作。相信陶辉来讲 Web 协议详解与抓包实战,一定会带给你不一样的收获。为什么这么说?

在华为他负责 iMAP 网管系统的研发,在通过 SNMP 等协议管理众多网络设备的过程中,对路由器交换机如何处理协议栈、选择路由、转发报文等流程有了深入的理解;

在腾讯QQ空间,通过使用自定义的、基于 TCP 的 Qzone 协议传递巨量的数据,他对如何设计出高性能、可扩展的应用协议有了丰富的实践经验;

在思科他从事 Nginx 服务的研发,对 Web 服务器如何高效地处理 HTTP 协议有了全面的认识;

在阿里云作为 VPC 软件自定义网络项目中的管理系统架构师,他通过基于 Intel DPDK 自建网关、自定义网络层协议等工作,对 IDC 内部网络系统有了深刻了解。

在《Web 协议详解与抓包实战》视频课中,陶辉老师会把自己十几年积累的第一手经验毫无保留地分享给大家。

你能获得什么?

陶辉老师会跟你一起从应用层到底层,通过具体问题和场景来学习 Web 协议。具体来说,你可以有下面 4 点收获。

1. 深入理解常用 Web 协议

课程将基于应用场景深入介绍Web协议栈中最常用的HTTP/1.1、Websocket、HTTP/2.0、TLS/SSL、TCP、IP协议,这些协议处在 OSI 网络栈中的不同层级,每一层对上层协议封装、隐藏其下层协议的实现细节,而上层协议必须理解其相邻下层协议解决了什么问题,有哪些约束条件。陶辉老师会带你自上而下的学习这些协议的语法、应用场景,以建立起结构体的知识体系。

2. 快速定位和解决网络疑难杂症

网络问题最为复杂,它涉及到多样化的客户端、技术相对封闭的网络设备、层层可能修改消息的代理服务器、快速迭代中的源服务器等,当客户端与服务器由于编程、配置错误造成系统故障时,相比在某一端使用经验式的排除法查错,从网络层面定位问题更为科学、快速而有效。

3. 掌握常见抓包工具及报文分析方法

陶辉老师会配合抓包实践来带你深入了解协议细节。关于抓包工具的学习,则会遵循“即用即学”的原则,用到什么学什么,让你快速上手。

对于HTTP报文的抓包实践,主要使用 Chrome 浏览器提供的开发者工具 Network 面板,同时也将使用到 curl、telnet 命令行来模拟 HTTP 请求的发送。Wireshark是这门课程的主要抓包工具,包括过滤器、各面板的使用、如何基于统计分析报文等。对于服务器端的抓包我们会使用 tcpdump工具,并配合 Wireshark 分析报文。

4. 熟悉 Web 协议的架构和设计原则

HTTP 最初用于解决人与机器的通讯,了解指导其设计原则的REST架构,就能理解在空间上它如何应对全球性的巨型分布式网络,在时间上如何应对数十年的技术变迁。

在分层架构下各层都有其待解决的核心问题,TLS/SSL协议面对的是如何使用非对称加密协商密钥及验证身份,TCP协议面对的则是可控流量下的可靠传输,IP协议则关注报文在主机间的可达性,带着这些需求及约束,便可从容应对变化。

深入浅出计算机组成原理:计算机底层知识第一课

极客时间刚刚上线了一门新课: 深入浅出计算机组成原理 ,作者徐文浩老师上来就告诉大家他是做自然语言处理创业的,很有意思,其实我心理想,敢开这些CS基础课的,都是牛人,能学这些课程的同学,都在夯实地基,我就想看看他是如何深入浅出讲这门课的。

对于程序员来说,计算机组成原理相关知识重要吗?

不知道大家有没有发现各个大学计算机系的培养计划,它们都有差不多十来门核心课程。其中,“计算机组成原理”却是入门和底层知识的第一课。

为什么这样说?想象一下,一名赛车手不知道赛车的内部构成和工作原理,你觉得他能驾驭赛车,在专业赛事中夺冠吗?

同样的道理,要成为一名优秀的软件工程师,写得一手好程序,就要了解计算机是怎么工作的,深入计算机组成原理。

我们直接用肉眼来看,计算机是由CPU、内存、显示器这些设备组成的硬件,而大部分人工作后从事的是软件开发,显然,在硬件和软件之间需要一座桥梁,而“计算机组成原理”就扮演了这样一个角色,它既隔离了软件和硬件,也提供了让软件无需关心硬件,就能直接操作硬件的接口。

简单地说,你只需要对硬件有原理性的理解,就可以信赖硬件的可靠性,安安心心用高级语言来写程序。无论是写操作系统、编译器这样的硬核代码,还是写Web应用、手机App这样的应用层代码,你都可以做到心里有底。

如上图,学习组成原理之后,向下,你可以学习数字电路相关的课程,向上,你可以学习编译原理、操作系统这些核心课程。它会让你真正对计算机的知识有一个全局的了解。

当然,这门课还可以直接解决你在并发编程、性能优化中经常遇到的一些困惑,比如CPU Cache的原理是什么,CPU和I/O之间是如何通信的,虚拟内存是要解决什么问题。

如果你看过倚天屠龙记,会发现张无忌几个时辰,就把别人几十年没有练成的乾坤大挪移学会了,最根本的原因,是他有“九阳神功”练就的内功底子!

同样的,深入学习这门“底层知识”,就是在练扎马步、核心肌肉力量,提升你自己的“根骨”和“资质”,从而拔高你发展的上限。

如何系统的学习?

作为计算机底层知识第一课,当然不那么好啃,概念多,太抽象,难理解,不好学以致用。我身边不少想打好这门“硬核内功”的工程师,大都是买了资料,前面100页已经发黄了,后面500页从来没有打开过;不少非科班出身的程序员,直接说“这些书根本看不懂”,典型的“买书如山倒,读书如抽丝”。

在这里特别推荐个靠谱的学习资料,极客时间的新专栏《深入浅出计算机组成原理》,在考研统考的4门核心基础课程中,极客时间已经出了数据结构与算法、操作系统,计算机网络相关的3门很受欢迎的计算机基础课程,这是第4门也是非常重要的第一课,等你做了多年开发以后,会发现,原来这么多年就是围绕这4门课程打转。

这个课的作者是徐文浩,一个目前正在创业的工程师。7岁开始接触代码,近30年的码龄,毕业于上海交通大学计算机系,在 Trilogy Software 写过各种大型企业软件,也曾任 MediaV 技术总监,从零开始搭建支撑每天百亿流量的广告算法系统,提升了十倍以上的广告收入和 ROI;2016年底进军人工智能领域,创办 BotHub.AI,成为唯一进入 F8 大会开发者代表的中国公司。

为什么推荐这门课程?

极客时间平台我本身一直都很认可和信任,更重要的是我看了目录和内容,感觉确实不错,为了针对性的解决大家学习中的困难,徐文浩在专栏中结合自己多年硬件研究和软件开发经验,通过日常工作实际场景+硬件发展历史+软件开发案例,深入浅出的为你讲解计算机组成原理的核心知识,教你真正看懂、学会、记住,从源头理解软、硬件的共同之处,洞悉性能问题的本质,学以致用。

为了方便大家的学习,徐文浩老师特地整理了一份学习脑图,希望你对将要学习的内容有个总纲的了解,做到心中有数。

你能获得什么?

1、学以致用的计算机底层知识

专栏会以日常开发中的真实案例,帮你理解计算机的各个组件是怎么运作的,遇到问题的根源是什么,从知识→应用→知识,形成闭环,学以致用。

比如说,CPU里面的冒险和分支预测的策略,就好像在接力赛跑里面后面几棒的选手早点起跑,如果交接棒没有问题,自然占了便宜,但是如果没能交接上,就会吃个大亏。

2、30+计算机组成原理核心要点

作者会把整个的计算机组成原理通过指令、计算、CPU、存储系统和IO串起来,以一个程序的执行过程进行逐层分解,从历史视角讲清楚“是什么”,结合案例讲清楚“怎么做”,带你搞懂计算机组成原理中最核心、最重要的内容。

3、洞悉性能问题的本质

学习计算机组成原理,其实就是理解计算机是怎么运作的,以及为什么这么运作。在此基础上,我们才能又快又准地优化性能,提升效率。而我们想要解决性能问题,其实就是在此基础上,去关注时钟周期时间、每条指令的平均时钟周期数CPI、指令数。

4、组成原理在工业界的实际应用

理解了计算机各个组件的运作之后,还将手把手带你实操。利用存储器层次结构设计大型 DMP 系统,并通过 Disruptor,跟你一起感受 CPU 的风驰电掣,让你真正学有所用。

“练拳不练功,到老一场空”。做一个真正的工程师,越早弄清楚计算机的底层原理,在你的知识体系中“储蓄”起这些知识,也就意味着你有越长的时间来收获学习知识的“利息”。长久的“复利效应”,会让你的未来走的更远更轻松。