网络协议和Web接口

网络互联的昨天、今天和明天:Http协议的演化

演进:Http/0.9、Http/1.0、Http/1.1、Http/2
长连接和分块传输
动手实践:工具的使用 - 请求发送和抓包

为Http穿上盔甲:Https

对称/非对称性加密,SSL/TLS 和Https
动手实践:捕获TLS报文
TLS连接建立过程
证书有效校验

换个角度解决问题:服务端推送技术

比较:Pull和Push
服务端推送技术:Comet
服务端推送技术:WebSocket
动手实践:Chrome下观察连接和推送消息

工整与自由的风格之争:SOAP和REST

比较:SOAP和REST
风格之争
动手实践:调用Restfull API

权衡的艺术:漫谈Web API的设计

明确核心问题,确定问题域
结合实际需求和限制,选择承载技术
确定接口风格
定义具体接口形式

服务端MVC

解耦是永恒的主题:MVC框架的发展

JSP和Servlet
演进:JSP Model1/Model2
比较:MVC的一般化,MVC的变体

MVC架构解析:模型(Model)

比较:贫血模型和充血模型
内部层次划分
CQRS模式

MVC架构解析:视图(View)

比较:服务端和客户端页面聚合技术
模版引擎的工作机制
动手实践:HTML5的模版标签

MVC架构解析:控制层(Controller)

路径映射和视图指向
请求参数绑定
参数验证
视图上下文绑定
动手实践:实现一个简单的MVC系统

面向切面编程

AOP
Spring中的应用
比较:静态织入和动态代理
控制反转loC
动手实践:AOP的运行时动态代理

JaveEE的模式

核心模式概览
拦截过滤器模式
数据访问对象
比较:MyBatis和Hibernate

前端技术

从后端到前端

前端技术的现状和意义
思维模式转变:应用事件驱动编程
思维模式转变:学写声明式代码
思维模式转变:培养交互思维

JavaScript面向对象

JavaScript实现封装
JavaScript实现继承
理解对象创建
函数成为一等公民

前端MVC框架

演进:前端MVC的变革
Angular:双向绑定、依赖注入、过滤器
React + Redux:JSX,Redux的状态管理

交互设计和页面布局

单页面应用
渐进增强和优雅降级
响应式布局

谈谈数据可视化

比较:Web绘图标准,SVG和Canvas
数据可视化的Javascript库:Flot
数据可视化的Javascript库:D3.js

Javascript异步编程

演进:用Promise来优化嵌套回调
用生成器来实现协程
异步错误处理

数据持久化

缓存

缓存的本质
缓存的应用
比较:常见的缓存模式
常见缓存使用问题
缓存框架的设计要点

数据的持久化和一致性

理解数据一致性
高可用架构技术:简单备份
高可用架构技术:Multi-Master
高可用架构技术:Multi-Slave
一致性Hash

CAP和数据存储技术选择

从本质理解CAP
“三选二”的误区
NoSQL三角形
比较:ACID和BASE

设计数据持久层:理论分析

关系数据库的范式
NoSQL数据库的分类
演进:Scale Up 到 Scale Out
演进:结构化到非结构化

设计数据持久层:案例介绍

搜索引擎的持久层设计
地理信息系统的持久层设计
电商网站的持久层技术选型

最佳实践

Ops三部曲:配置管理

比较:常见配置方式
配置层级关系
规约优于配置
动手实践:配置模版
程序员的独立性

Ops三部曲:集群部署

负载分担
负载分担的策略算法
比较:服务端Session和客户端Cookie
比较:集群部署的不同方式
动手实践:理解Cookie和Session的原理

Ops三部曲:测试和发布

CI/CD和Pipeline
比较:不同测试的集成
CI/CD的更多挑战:代码静态分析
CI/CD的更多挑战:依赖管理
CI/CD的更多挑战:环境监控

网站安全问题窥视

鉴权和授权
常见的Web攻击方式:XSS
常见的Web攻击方式:XSRF
常见的Web攻击方式:SQL注入
常见的Web攻击方式:HTTP劫持
常见的Web攻击方式:DNS劫持
常见的Web攻击方式:DDos攻击

SEO的原理和基础

搜索引擎的组成
PageRank算法
SEO常见技术:白帽和黑帽
SEO常见技术:站内优化和站外优化
SEO常见技术:roberts.txt
SEO常见技术:网站地图
SEO常见技术:统计分析

专题和其它

网站性能优化

性能优化和软件设计的关系
性能指标与关注点:资源角度
寻找性能瓶颈:思路
寻找性能瓶颈:工具
性能优化之产品和架构调整
性能优化之后端和持久层优化
性能优化之前端和网络层优化

全栈开发中的算法

流量控制算法
Diffie-Hellman密钥交换
哈夫曼编码
RLE编码
算数编码

分页的那些事儿

比较:物理分页和逻辑分页
比较:分页代码设计
比较:SQL实现
重复数据问题

XML、JSON、YAML比较

比较:简洁和严谨
和JavaScript的亲和力
路径表达式
特殊字符处理

代码审查

审查的流程
常见的争议
审查的好处
审查的技巧

程序员学英语

为什么是必选项
学英语的策略