所处阶段 主讲内容 技术要点 学习目标
设计模式 面向对象设计模式 1. 代码无错就是优?――简单工厂模式2. 商场促销――策略模式3. 拍摄UFO――单一职责原则4. 考研求职两不误――开放-封闭原则5. 会修电脑不会修收音机?――依赖倒转原则6. 穿什么有这么重要?――装饰模式7. 为别人做嫁衣――代理模式8. 雷锋依然在人间――工厂方法模式9. 简历复印――原型模式10. 考题抄错会做也白搭――模板方法模式11. 无熟人难办事?――迪米特法则12. 牛市股票还会亏钱?――外观模式13. 好菜每回味不同――建造者模式14. 老板回来,我不知道――观察者模式15. 就不能不换DB吗?――抽象工厂模式16. 无尽加班何时休――状态模式17. 在NBA我需要翻译――适配器模式18. 如果再回到从前――备忘录模式19. 分公司=一部门――组合模式20. 想走?可以!先买票――迭代器模式21. 有些类也需计划生育――单例模式22. 手机软件何时统一――桥接模式23. 烤羊肉串引来的思考――命令模式24. 加薪非要老总批?――职责链模式25. 世界需要和平――中介者模式26. 项目多也别傻做――享元模式27. 其实你不懂老板的心――解释器模式28. 男人和女人――访问者模式 课程设计理念:设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。可掌握的核心能力:1.具备面向对象编程思想与架构思想2.具备go语言高并发后台架构能力;3.具备go语言分布式后台架构能力;4.具备分布式微服务架构设计能力。可解决的现实问题:1.了解在软件开发过程中所面临的问题的最佳解决方案;2.解决企业从资源的利用率和可用性优化方案;3.理解软件工程思想,快速理解软件工程架构设计。4.能够根据企业实际需求,搭建好的架构市场价值:熟练学习和掌握后,可满足企业架构师需求。
Go并发设计模式 1生成器2服务化3多路复合4select监听信道5.结束标志6.菊花链7.随机数生成器8.定时器9.常驻内存并发10.非常驻内存并发11.超时并发
高并发分布式设计模式 1、单库单应用模式这种是最简单的模式,即一个数据一个应用服务器,一般在产品发布初期使用会比较方便,单日30万到50万PV以下一般没有问题。2、内容分发模式在主机中使用了静态文件缓存之后,还可以使用CDN的方式把静态文件分发到离用户最近的节点上以达到快速响应的目的,一般在百万级别的PV时需要使用3、查询分离模式主要是指数据库的读写分离,能够降低响应延时,在千万级别的PV时会使用。4、微服务模式微服务是把一个单应用拆分成多个服务,每个服务部署在各自的主机中,最后通过一个ESB来管理和调度这些服务,优点是各司其职不会出现混乱和一致性瘫痪,缺点也很明显,就是集成测试和协同发布难度大增。5、分库分表模式当一个表的数据出现上亿级别的时候就要考虑分表了,比如订单数据等,根据用户的属性或者时间来拆分成多个表存储,甚至是拆分成多个库存储。6、多级缓存模式可以把数据缓存到redis、memcache或者分布式文件系统之中,一般是在500万PV之上需要使用。7、弹性伸缩模式当应用容易出现波峰波谷的情况时使用弹性伸缩模式可以有效降低硬件资源的成本,特别是在使用公有云的时候这个成本的下降积累会是一个比较大的值。8、多机房模式如果是自建机房可以在南北方各地安置机房以达到有效降低延迟,以及防止同时宕机的可能性出现。如果是使用公有云可以采用多个节点部署。另外一方面,采用CDN的也是多机房的一种实际应用。
微服务设计模式 1聚合器微服务设计模式2代理微服务设计模式3链式微服务设计模式4分支微服务设计模式5数据共享微服务设计模式6异步消息传递微服务设计模式
微服务单元设计模式 外交官模式(Ambassador)防腐层(Anti-corruption layer)后端服务前端(Backends for Frontends)舱壁模式(Bulkhead)网关聚合(Gateway Aggregation)网关卸载(Gateway Offloading)网关路由(Gateway Routing)挎斗模式(Sidecar)绞杀者模式(Strangler)

所处阶段 主讲内容 技术要点 学习目标
第一阶段数据结构 1程序性能分析 1.1 什么是程序性能1.2 空间复杂度1.1.1 空间复杂度的组成1.1.2 举例1.3 时间复杂度1.3.1 时间复杂度的组成1.3.2 操作计数1.3.3 最好、最坏和平均操作计数1.3.4 步数 课程设计理念: 通过出很多高大上的算法和数据结构题,体现出自己与其它公司的区别。尤其是一些特别难的,一出考场,就热闹了,网上也跟着热闹了。 通过高大上的题目,才能识别出哪些是聪明勤奋的孩子,哪些是不入流的小弟。 你要晓得,BAT等公司,给应届本科生的薪水,都在月薪1万以上,一年大概在13万以上。 薪水、人才、面试难度,自然是相关联的。 算法,我觉得是个非常装逼的词。书本和网上的舆论,都把这个词塑造的比较高大。 我不这样认为,为嘛呢,我就喜欢提出一些有新意的观点。 算法,解决问题的方法而已,有啥了不起的。 农民、建筑、医疗,哪个行业没有解决问题的方法,唯独IT程序设计搞了算法Algorithm出来。 大公司的业务比较复杂,用到的技术难度较大,对一个人的能力素质要求很高。大数据、云计算、高性能之类的需求也比较大,对数据结构和算法等基本功的要求比较高。数据结构和算法的功底,可以看出一个人的成长潜质。 大公司的业务比较复杂,用到的技术难度较大,对一个人的能力素质要求很高。大数据、云计算、高性能之类的需求也比较大,对数据结构和算法等基本功的要求比较高。数据结构和算法的功底,可以看出一个人的成长潜质。 而中小公司比较在乎短期利益,招个能立即干活,帮忙公司搞钱的工人。什么能立即搞钱,当然是做项目啦,而不是搞研究,算法啥的,根本用不上。中小型公司,做的更多是业务系统、网站,进度、性能、业务是主要的,算法需求很低。 打个比方,算法就好比武侠中的内功,学得好,未来才能成为大虾,称霸武林。但是,内功再好,没有招式,也发挥不出来。而做项目,搞应用开发,就好比武侠中的招式,学个一招半式,就可以找软柿子捏挤下,体验学武功的快感。可掌握的核心能力:1.具备世界五百强数据结构与算法面试2.具备软件开发思想与软件工程理论3.为大规模数据开发开发提供理论支持;4.熟悉软件工程与行业标准。可解决的现实问题:1.通过企业面试;2.扎实的理论基础,快速融入企业开发需求。市场价值:通过技术面试与技术考核,在工资上有很强的议价能力。理解数据结构开发在实际中的作用。
2渐近记法 2.1 引言2.2 渐近记法2.2.1 大Ο记法2.2.2 渐近记法Ω和Θ2.3 渐近数学(可选)2.2.1 大O记法2.2.2 Ω记法2.2.3 Θ记法2.2.4 小ο记法2.2.5 特性2.4 复杂度分析举例2.5 实际复杂度
3性能测量 3.1 引言3.2 选择实例的大小3.3 设计测试数据3.4 实验设计3.5 高速缓存3.5.1 简单计算机模型3.5.2 缓存未命中对运行时间的影响3.5.3 矩阵乘法
4 线性表——数组描述 4.1 数据对象和数据结构4.2 线性表数据结构4.2.1 抽象数据类型linearList4.2.2 抽象类linearList4.3 数组描述4.3.1 描述4.3.2 变长一维数组4.3.3 类arrayList4.3.4 迭代器4.3.5 arrayList的一个迭代器4.4 在一个数组中实现的多重表4.5性能测量4.6广义表概念4.7广义表实战
5 线性表——链式描述 5.1 单向链表5.1.1 描述5.1.2 结构chainNode5.1.3 类chain5.1.4 抽象数据类型linearList的扩充5.1.5 类extendedChain5.1.6 性能测量5.2 循环链表和头节点5.3 双向链表5.4 双向循环链表5.5 应用5.5.1 箱子排序5.5.2 基数排序5.5.3 凸包5.5.4 并查集
6 数组和矩阵 6.1 数组6.1.1 抽象数据类型6.1.2 数组的索引6.1.3 行主映射和列主映射6.1.4 用数组的数组来描述6.1.5 行主描述和列主描述6.1.6 不规则二维数组6.2 矩阵6.2.1 定义和操作6.2.2 类matrix6.3 特殊矩阵6.3.1 定义和应用6.3.2 对角矩阵6.3.3 三对角矩阵6.3.4 三角矩阵6.3.5 对称矩阵6.4 稀疏矩阵6.4.1 基本概念6.4.2 用单个线性表描述6.4.3 用多个线性表描述6.4.4 性能测量
7.哈希表与集合 7.1哈希函数7.2哈希碰撞7.3哈希表数组实现7.4哈希表链表实现7.5集合概念7.6交集,并集,差集7.7数组集合7.8链表集合7.9哈希集合
8栈 8.1 定义和应用8.2 抽象数据类型8.3 数组描述8.3.1 作为一个派生类实现8.3.2 类arrayStack8.3.3 性能测量8.4 链表描述8.4.1 类derivedLinkedStack8.4.2 类linkedStack8.4.3 性能测量8.5 应用8.5.1 括号匹配8.5.2 汉诺塔8.5.3 列车车厢重排8.5.4 开关盒布线8.5.5 离线等价类问题8.5.6 迷宫老鼠8.6 数学表达式字符串解析计算8.7 进制转换8.8 迷宫寻路算法
9队列 9.1 定义和应用9.2 抽象数据类型9.3 数组描述9.3.1 描述9.3.2 类arrayQueue9.4 链表描述9.5 应用9.5.1 列车车厢重排9.5.2 电路布线9.5.3 图元识别9.5.4 工厂仿真
10.跳表和散列 10.1 字典10.2 抽象数据类型10.3 线性表描述10.4 跳表表示(可选)10.4.1 理想情况10.4.2 插入和删除10.4.3 级的分配10.4.4 结构skipNode10.4.5 类skipList10.4.6 skipList方法的复杂度10.5 散列表描述10.5.1 理想散列10.5.2 散列函数和散列表10.5.3 线性探查10.5.4 链式散列10.6 一个应用——文本压缩10.6.1 LZW压缩10.6.2 LZW压缩的实现10.6.3 LZW解压缩10.6.4 LZW解压缩的实现10.6.5 性能评价
11二叉树 11.1 树11.2 二叉树11.3 二叉树的特性11.4 二叉树的描述11.4.1 数组描述11.4.2 链表描述11.5 二叉树常用操作11.6 二叉树遍历11.7 抽象数据类型BinaryTree11.8 类linkedBinaryTree11.9 应用11.9.1 设置信号放大器11.9.2 并查集
12优先队列 12.1 定义和应用12.2 抽象数据类型12.3 线性表12.4 堆12.4.1 定义12.4.2 大根堆的插入12.4.3 大根堆的删除12.4.4 大根堆的初始化12.4.5 类maxHeap12.4.6 堆和STL12.5 左高树12.5.1 高度优先与宽度优先的最大及最小左高树12.5.2 最大HBLT的插入12.5.3 最大HBLT的删除12.5.4 两棵最大HBLT的合并12.5.5 初始化12.5.6 类maxHblt12.6 应用12.6.1 堆排序12.6.2 机器调度12.6.3 霍夫曼编码
13竞赛树 13.1 赢者树和应用13.2 抽象数据类型WinnerTree13.3 赢者树的实现13.3.1 表示13.3.2 赢者树的初始化13.3.3 重新组织比赛13.3.4 类completeWinnerTree13.4 输者树13.5 应用13.5.1 用最先适配法求解箱子装载问题13.5.2 用相邻适配法求解箱子装载问题
14搜索树 14.1 定义14.1.1 二叉搜索树14.1.2 索引二叉搜索树14.2 抽象数据类型14.3 二叉搜索树的操作和实现14.3.1 类binarySearchTree14.3.2 搜索14.3.3 插入14.3.4 删除14.3.5 二叉搜索树的高度14.4 带有相同关键字元素的二叉搜索树14.5 索引二叉搜索树14.6 应用14.6.1 直方图14.6.2 箱子装载问题的最优匹配法14.6.3 交叉分布
15.平衡搜索树 15.1 AVL树15.1.1 定义15.1.2 AVL树的高度15.1.3 AVL树的描述15.1.4 AVL搜索树的搜索15.1.5 AVL搜索树的插入15.1.6 AVL搜索树的删除15.2 红-黑树15.2.1 基本概念15.2.2 红-黑树的描述15.2.3 红-黑树的搜索15.2.4 红-黑树的插入15.2.5 红-黑树的删除15.2.6 实现细节的考虑及复杂性分析15.3 分裂树15.3.1 介绍15.3.2 分裂树的操作15.3.3 折算复杂性15.4 B-树15.4.1 索引顺序访问方法15.4.2 m叉搜索树15.4.3 m阶B-树15.4.4 B-树的高度15.4.5 B-树的搜索15.4.6 B-树的插入15.4.7 B-树的删除15.4.8 节点结构
16.图 16.1 基本概念16.2 应用和更多的概念16.3 特性16.4 抽象数据类型graph16.5 无权图的描述16.5.1 邻接矩阵16.5.2 邻接链表16.5.3 邻接数组16.6 加权图的描述16.7 类实现16.7.1 不同的类16.7.2 邻接矩阵类16.7.3 扩充chain类16.7.4 链表类16.8 图的遍历16.8.1 广度优先搜索16.8.2 广度优先搜索的实现16.8.3 方法graph::bfs的复杂性分析16.8.4 深度优先搜索16.8.5 深度优先搜索的实现16.8.6 方法graph::dfs的复杂性分析16.9 应用16.9.1 寻找一条路径缔结斯卡拉算法16.9.2 连通图及其构成16.9.3 生成树,普里姆算法,克鲁斯卡尔算法16.9.4最短路径A*算法16.9.5拓扑排序16.9.10 网络流16.9.10.1 流网络16.9.10.2 Ford\Fulkerson方法16.9.10.3 最大二分匹配16.9.10.4 推送重贴标签算法16.9.10.5 前置重贴标签算法
17排序与查找 17.1排序17.1.1选择排序与性能分析优化17.1.2冒泡排序与性能分析优化17.1.3希尔排序与性能分析优化17.1.4插入排序与性能分析优化17.1.5二分查找插入排序与性能分析优化17.1.6归并排序与性能分析优化17.1.7快速排序与性能分析优化17.1.8奇偶排序与性能分析优化17.1.9基数排序与性能分析优化17.1.10木桶排序与性能分析优化17.1.11归并排序与性能分析优化17.1.12鸡尾酒排序与性能分析优化17.1.13地精排序与性能分析优化17.1.14堆排序与性能分析优化17.1.15锦标赛排序与性能分析优化17.1.16梳子排序与性能分析优化17.2查找17.2无序查找17.2.1有序查找17.2.1.1 二分查找17.2.1.2 中值查找17.2.1.3 斐波那契查找17.2.1.4 三分查找17.2.1.5 二分查找近似查找
18链表排序 18.1链表插入排序18.2链表选择排序18.3链表冒泡排序18.4链表快速排序18.5链表归并排序
19.外部排序 19.1多路归并排序19.2置换选择排序19.3索引查找19.4二级索引检索17亿文件
20. bitmap与布隆过滤器 20.1位运算快速回顾20.2 bitmap实战20.3 布隆过滤器实现
21.字符串检索 21.1常规字符串检索21.1KMP算法21.2BM 算法21.3Karp—Rabin算法21.4字符串实现高精度加法21.5字符串实现高精度减法21.6字符串实现高精度乘法21.7字符串实现高精度除法
22内存回收算法 22.1 概述22.2 可利用空间表及分配方法22.3 边界标识法22.3.1 可利用空间表的结构22.3.2 分配算法22.3.3 回收算法22.4 伙伴系统22.4.1 可利用空间表的结构22.4.2 分配算法22.4.3 回收算法22.5 无用单元收集22.6 存储紧缩
第二阶段算法导论 1.第一天 数学基础 1.1 函数增长与复杂性分类1.1.1 渐进符号1.1.2 阶的计算1.1.3 复杂性分类1.2 概率论1.2.1 事件与概率1.2.2 期望与方差1.3 代数学1.3.1 矩阵1.3.2 行列式1.3.3 解线性方程组1.3.4 多项式1.1.5 复数1.1.6 群1.4 组合学1.4.1 排列与组合1.4.2 鸽巢原理1.4.3 容斥原理1.4.4 特殊计数序列1.4.5 Pólya计数定理1.5 博弈论1.5.1 博弈树1.5.2 SG函数1.5.3 Nim游戏与Nim1.6 数论1.6.1 整除1.6.2 不定方程1.6.3 同余方程与欧拉定理1.6.4 原根、离散对数和二项同余方程1.6.5 连分数 课程设计理念: 通过出很多高大上的算法和数据结构题,体现出自己与其它公司的区别。尤其是一些特别难的,一出考场,就热闹了,网上也跟着热闹了。 通过高大上的题目,才能识别出哪些是聪明勤奋的孩子,哪些是不入流的小弟。 你要晓得,BAT等公司,给应届本科生的薪水,都在月薪1万以上,一年大概在13万以上。 薪水、人才、面试难度,自然是相关联的。 算法,我觉得是个非常装逼的词。书本和网上的舆论,都把这个词塑造的比较高大。 我不这样认为,为嘛呢,我就喜欢提出一些有新意的观点。 算法,解决问题的方法而已,有啥了不起的。 农民、建筑、医疗,哪个行业没有解决问题的方法,唯独IT程序设计搞了算法Algorithm出来。 大公司的业务比较复杂,用到的技术难度较大,对一个人的能力素质要求很高。大数据、云计算、高性能之类的需求也比较大,对数据结构和算法等基本功的要求比较高。数据结构和算法的功底,可以看出一个人的成长潜质。 大公司的业务比较复杂,用到的技术难度较大,对一个人的能力素质要求很高。大数据、云计算、高性能之类的需求也比较大,对数据结构和算法等基本功的要求比较高。数据结构和算法的功底,可以看出一个人的成长潜质。 而中小公司比较在乎短期利益,招个能立即干活,帮忙公司搞钱的工人。什么能立即搞钱,当然是做项目啦,而不是搞研究,算法啥的,根本用不上。中小型公司,做的更多是业务系统、网站,进度、性能、业务是主要的,算法需求很低。 打个比方,算法就好比武侠中的内功,学得好,未来才能成为大虾,称霸武林。但是,内功再好,没有招式,也发挥不出来。而做项目,搞应用开发,就好比武侠中的招式,学个一招半式,就可以找软柿子捏挤下,体验学武功的快感。可掌握的核心能力:1.具备世界五百强数据结构与算法面试2.具备软件开发思想与软件工程理论3.为大规模数据开发开发提供理论支持;4.熟悉软件工程与行业标准。可解决的现实问题:1.通过企业面试;2.扎实的理论基础,快速融入企业开发需求。市场价值:通过技术面试与技术考核,在工资上有很强的议价能力。理解算法在实际开发中的作用。
2初等数论与组合数学 2.1 整除2.2 质数与合数2.3 质数筛法2.4 质因数分解2.5 最大公约数和最小公倍数2.6 模运算2.7 同余2.8 欧几里得算法2.9 扩展欧几里得算法2.10 模意义下的乘法逆元2.11 与质数有关的定理2.12 线性同余方程2.13 中国剩余定理2.14基本计数原理2.15 排列2.16 组合2.17 杨辉三角2.18 特殊排列组合2.19 stirling数2.20 Catalan数2.21 容斥原理2.22 鸽巢原理
3暴力求解 3.1 简单枚举3.2 枚举排列3.2.1 生成1~n的排列3.2.2 生成可重集的排列3.2.3 解答树3.2.4 下一个排列3.3 子集生成3.3.1 增量构造法3.3.2 位向量法3.3.3 二进制法3.4 回溯法3.4.1 八皇后问题3.4.2 其他应用举例3.5 路径寻找问题3.6 迭代加深搜索
4.数论基础 4.1 基础数论概念4.2 最大公约数4.3 模运算4.4 求解模线性方程4.5 中国余数定理4.6 元素的幂4.7 RSA公钥加密系统4.8 素数的测试4.9 整数的因子分解
5.概率与随机算法 5.1 雇用问题5.2 指示器随机变量5.3 随机算法5.4 概率分析和指示器随机变量的进一步使用5.4.1 生日悖论5.4.2 球与箱子5.4.3 特征序列5.4.4 在线雇用问题
6.贪婪算法 6.1 最优化问题6.2 贪婪算法思想6.3 应用6.3.1 货箱装载6.3.2 0/1背包问题6.3.3 拓扑排序6.3.4 二分覆盖6.3.5 单源最短路径6.3.6 最小成本生成树6.3.7赫夫曼编码6.3.8 拟阵和贪心算法6.3.9 用拟阵求解任务调度问题
7分而治之算法 7.1 算法思想7.2 应用7.2.1 残缺棋盘7.2.2 归并排序7.2.3 快速排序7.2.4 选择7.2.5 相距最近的点对7.3 解递归方程7.4 复杂度的下限7.4.1 最小最大问题的下限7.4.2 排序算法的下限7.4.3 最大子数组问题7.4.4 矩阵乘法的Strassen算法7.4.5 用代入法求解递归式7.4.5 用递归树方法求解递归式7.4.6 用主方法求解递归式7.4.7 证明主定理7.4.8 对b的幂证明主定理7.4.9 向下取整和向上取整
8.动态规划算法 8.1 算法思想8.2 应用8.2.1 0/1背包问题8.2.2 矩阵乘法链8.2.3 所有顶点对之间的最短路径8.2.4 带有负值的单源最短路径8.2.5 网组的无交叉子集8.2.6 钢条切割8.2.7 最长公共子序列8.2.8 最优二叉搜索树8.2.9 最大连续子序列和8.2.10 最长不下降子序列(LIS)8.2.11 最长回文子串8.2.12 DAG最长路8.2.13 背包问题
9.回溯法 9.1 算法思想9.2 应用9.2.1 货箱装载9.2.2 0/1背包问题9.2.3 最大完备子图9.2.4 旅行商问题9.2.5 电路板排列
10.分支边界算法 10.1 算法思想10.2 应用10.2.1 货箱装载10.2.2 0/1背包问题10.2.3 最大完备子图10.2.4 旅行商问题10.2.5 电路板排列
11.摊还分析 11.1 聚合分析11.2 核算法11.3 势能法11.4 动态表11.4.1 表扩张11.4.2 表扩张和收缩
12.线性规划 12.1 标准型和松弛型12.2 将问题表达为线性规划12.3 单纯形算法12.4 对偶性12.5 初始基本可行解
13.多项式与快速傅里叶变换 13.1 多项式的表示13.2 DFT与FFT13.3 高效FFT实现
14.计算几何学 14.1 多边形14.1.1 计算几何误差修正14.1.2 计算几何点类14.1.3 计算几何线段类14.1.4 多边形类14.1.5 多边形的重心14.1.6 多边形内格点数14.1.7 凸多边形类14.1.8 凸多边形的直径14.1.9 半平面切割多边形14.1.10 半平面交14.1.11 凸多边形交14.1.12 多边形的核14.1.13 凸多边形与直线集交14.2 圆14.2.1 圆与线求交14.2.2 圆与多边形交的面积14.2.3 最小圆覆盖14.2.4 圆与圆求交14.2.5 圆的离散化14.2.6 圆的面积并14.3 三维计算几何14.3.1 三维点类14.3.2 三维直线类14.3.3 三维平面类14.3.4 三维向量旋转14.3.5 长方体表面两点最短距离14.3.6 四面体体积14.3.7 最小球覆盖14.3.8 三维凸包14.4 其他14.4.1 三角形的四心14.4.2 最近点对14.4.3 平面最小曼哈顿距离生成树14.4.4 最大空凸包14.4.5 平面划分
15.NP完全性 15.1 多项式时间15.2 多项式时间的验证15.3 NP完全性与可归约性15.4 NP完全性的证明15.5 NP完全问题15.5.1 团问题15.5.2 顶点覆盖问题15.5.3 哈密顿回路问题15.5.4 旅行商问题15.5.5 子集和问题
16.近似算法 16.1 顶点覆盖问题16.2 旅行商问题16.2.1 满足三角不等式的旅行商问题16.2.2 一般旅行商问题16.3 集合覆盖问题16.4 随机化和线性规划16.5 子集和问题
17.高级专题 17.1 知识点选讲17.1.1 自动机17.1.2 树的经典问题和方法17.1.3 可持久化数据结构17.1.4 多边形的布尔运算17.2 难题选解17.2.1 数据结构17.2.2 网络流17.2.3 数学17.2.4 几何17.2.5 非完美算法17.2.6 杂题选讲17.3爬山法17.4模拟退火法17.5遗传算法
第四阶段机器学习 1回归算法 1回归算法1.1最小二乘法(Ordinary Least Square)1.2逻辑回归(Logistic Regression)1.3逐步式回归(Stepwise Regression)1.4多元自适应回归样条(Multivariate Adaptive Regression Splines)1.5本地散点平滑估计(Locally Estimated Scatterplot Smoothing) 课程设计理念:机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径。可掌握的核心能力:1解决机器学习的应用问题2.为大规模数据实现智能开发提供理论支持;可解决的现实问题:1.理解神经网络算法,掌握机器学习理论的基础;2.扎实的理论基础,快速融入企业开发人工智能需求。市场价值:通过技术面试与技术考核,在工资上有很强的议价能力,具备机器学习开发能力。
2基于实例的算法 2基于实例的算法2.1 k-Nearest Neighbor(KNN)2.2 学习矢量量化(Learning Vector Quantization, LVQ)2.3 自组织映射算法(Self-Organizing Map , SOM)
3正则化方法 3正则化方法3.1Ridge Regression3.2Least Absolute Shrinkage and Selection Operator(LASSO)3.3弹性网络(Elastic Net)
4决策树学习 4决策树学习4.1分类及回归树(Classification And Regression Tree, CART)4.2 D3 (Iterative Dichotomiser 3)4.3 C4.54.4 Chi-squared Automatic Interaction Detection(CHAID)4.5 Decision Stump4.6随机森林(Random Forest)4.7多元自适应回归样条(MARS)4.8梯度推进机(Gradient Boosting Machine, GBM)
5贝叶斯方法 5贝叶斯方法5.1朴素贝叶斯算法5.2平均单依赖估计(Averaged One-Dependence Estimators, AODE)5.3 Bayesian Belief Network(BBN)
6 基于核的算法 6 基于核的算法6.1支持向量机(Support Vector Machine, SVM)6.2径向基函数(Radial Basis Function ,RBF)6.3线性判别分析(Linear Discriminate Analysis ,LDA)
7聚类算法 7聚类算法7.1 k-Means算法7.2 期望最大化算法(Expectation Maximization, EM)
8关联规则学习 8关联规则学习8.1Apriori算法8.2 Eclat算法
9人工神经网络 9人工神经网络9.1感知器神经网络(Perceptron Neural Network)9.2反向传递(Back Propagation)9.3 Hopfield网络9.4学习矢量量化(Learning Vector Quantization, LVQ)
机器学习算法实战 婚恋网站智能推荐,房产预测
第五阶段深度学习 深度学习与神经网络 0深度学习0.1受限波尔兹曼机(Restricted Boltzmann Machine, RBN)0.2 Deep Belief Networks(DBN)0.3卷积网络(Convolutional Network)0.4堆栈式自动编码器(Stacked Auto-encoders) 课程设计理念:深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI, Artificial Intelligence)。深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。 深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。深度学习在搜索技术,数据挖掘,机器学习,机器翻译,自然语言处理,多媒体学习,语音,推荐和个性化技术,以及其他相关领域都取得了很多成果。深度学习使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能相关技术取得了很大进步。可掌握的核心能力:1解决深度学习的应用问题2.为大规模数据实现智能开发提供理论支持;可解决的现实问题:1.理解神经网络算法,掌握深度学习理论的基础;2.扎实的理论基础,快速融入企业开发人工智能需求。市场价值:通过技术面试与技术考核,在工资上有很强的议价能力,具备深度学习开发能力。
深度学习降低维度算法 1降低维度算法1.1主成份分析(Principle Component Analysis, PCA)1.2偏最小二乘回归(Partial Least Square Regression,PLS)1.3 Sammon映射1.4 多维尺度(Multi-Dimensional Scaling, MDS)1.5投影追踪(Projection Pursuit)
深度学习集成算法 2集成算法2.1 Boosting2.2 Bootstrapped Aggregation(Bagging)2.3 AdaBoost2.4 堆叠泛化(Stacked Generalization, Blending)
tensorflow-go tensorflow深度学习框架
深度学习实战 手写识别,图像识别,自动驾驶图像识别
第六阶段智能推荐 智能推荐算法 基于内容的推荐算法协同过滤推荐算法基于知识推荐基于效用推荐基于规则推荐 课程设计理念:智能推荐根据不同用户的喜好挖掘生成用户画像,为每位用户提供“千人千面”的个性化推荐内容,帮助传媒、电商等行业有效提升点击率、转化率及用户粘性,极大地增加客户的经营效益可掌握的核心能力:1解决智能推荐的核心问题2.为大规模数据智能推荐开发提供理论支持;可解决的现实问题:1.理解智能推荐算法,掌握推荐理论的基础;2.扎实的理论基础,快速融入企业开发智能推荐需求。市场价值:通过技术面试与技术考核,在工资上有很强的议价能力,具备智能推荐系统开发能力。
智能推荐实战 电商推荐算法与今日头条文章推荐算法实现

所处阶段 主讲内容 技术要点 学习目标
公链开发 第一阶段Go公链开发 1.Golang区块链公链开发-区块链架构实现2.Golang区块链公链开发-工作量证明3.Golang区块链公链开发-持久化4.Golang区块链公链开发-UTXO交易结构5.Golang区块链公链开发-交易与地址6.Golang区块链公链开发-交易与梅克尔树7.Golang区块链公链开发-交易与网络 课程设计理念:了解区块链系统基本原理,基于Go语言能够给企业定制区块链系统。掌握主流区块链(Bitcoin,Ethereum)相关机制与原理,理解各类主流的共识算法(PoW,PoS,DPoS),熟练掌握区块链系统Go开发语言,能基于以太坊编写智能合约,能编写和发布代币;可掌握的核心能力:1.具备常见密码学原理及安全密码安全协议知识体系;2.具备信息安全编程开发能力;3.为信息安全系统开发和区块链开发提供理论支持;4.掌握主流区块链(Bitcoin,Ethereum)相关机制与原理;5.理解各类主流的共识算法(PoW,PoS,DPoS);6.熟练掌握区块链系统Go开发语言;7.熟悉常见的安全协议和加密算法;8.熟悉比特币优化协议和行业标准。可解决的现实问题:1.能够解决信息安全加密数据传输及认证流程,具备信息安全领域开发能力,可解决中心化体系金融开发;2.扎实的理论基础,快速融入各种行业企业区块链公链相关开发需求。市场价值:区块链人才市场短板巨大。
第二阶段比特币源码分析 1.比特币设计理念: -比特币内涵 -比特币的价值 -数字签名与多重签名 -独特交易设计模式及其优势 -区块:如何解决攻击和交易的时间顺序 -分叉 -比特币的双花攻击 -51%攻击 -挖矿与矿池 -比特币难度 -比特币扩容2.比特币源码分析: -架构 -地址生成、编码与解码(椭圆曲线与Base58编码) -交易结构、创建、传播、整合(CTransaction) -交易池(CTxMemPool) -脚本(P2PKH、P2PK、P2SH) -区块构建、效验、组装与选择(CBlock、CBlockHeader) -难度计算与调整(Difficulty) -POW共识算法(Consensus) -分叉检测 -Merkle Tree -SPV与Bloom过滤 -JSON-RPC接口 -挖矿(Minner) -网络节点发现、连接、广播与异常处理
第三阶段比特币源码定制修改 定制山寨币C++与定制国密比特币
第三阶段以太坊源码 1. 下载、编译、启动Go-etherenum2. Go-etherenum客户端代码和Node分析3. 以太坊RPC通信实例和原理代码分析4. Ethereum服务和以太坊P2P协议发送广播源码分析5. 以太坊P2P协议接收广播的处理和Fetcher源码分析6. 以太坊核心BlockChain源码分析7. 以太坊通过EVM执行交易过程分析8. 以太坊Bloom过滤器实现原理及应用场景分析
第四阶段EOS源码分析 1EOS简介、源码下载、编译、调试;2EOS插件源码结构。3EOS数据,4DPos共识算法5数据结构6账户与权限系统,石墨烯系列特有的,不同于其它区块链平台;7Token与资源系统。8区块生产和区块同步9智能合约开发。10并行11跨链。12部署和维护。13治理
第五阶段以太坊源码定制修改 修改以太坊的共识算法为dpos
第六阶段超级账本源码分析 1. fabric 账号 和 fabric-ca 的使用2. fabric中的组织, 节点, 用户3. fabric中的通道4. fabric中的共识机制5. fabric中的账本6. fabric的交易流程
第七阶段超级账本定制修改 修改超级账本为国密
第八阶段IPFS系统源码分析 IPFS 底层技术分布式哈希表(DHT)Chord 协议Kademlia 协议S/Kademlia 协议BitTorrent 协议分布式版本控制(Git)自验证文件系统((SFS)IPFS MultiformatsIPFS IPLDIPFS 存储层IPFS BitswapIPFS 网络层IPFS 集群
第九阶段定制IPFS系统 修改星云文件系统为国密
第十阶段ripple源码分析 1.Ripple简介2.区块链底层结构与格式3.交易类型与格式4.网络架设与配置5.转账交易6.挂单交易7.多方签名交易8.Escrow交易9.Payment Channel交易10.交易的发送方式11.交易的路径原理12.网关的介绍与应用13.网关的底层技术14.共识流程
第十一阶段去中心化交易所定制bitshares 定制去中心化交易所设计
第十二阶段基于编译原理实现VM虚拟机 VM虚拟机实现
第十三阶段钱包开发 钱包助记词恢复私钥私钥碎片多重签名比特币转账以太坊转账以太坊合约代币转账

所处阶段 主讲内容 技术要点 学习目标
公智能合约开发 1Solidity语言 1.基础语法:整型、布尔、浮点、internal、external、storage、memory等2.高级语法:数组、枚举、结构、映射、元组等 能基于以太坊与EOS编写智能合约,能编写和发布代币,具备区块链Dapp开发能力。可掌握的核心能力:1.能够掌握使用 Vue 技术栈进行项目开发;2.能够掌握源代码管理工具的使用;3.能够熟练掌握前后端分离开发模式;4.能够掌握使用主流框架开发门户网站、管理系统、移动 Web 等客户端;5.能够掌握 Web 项目的部署与发布模式;6.能基于以太坊编写智能合约;7.能编写和发布代币;8.掌握常用的DApp开发框架;9.具备区中心化分布式存储模型开发能力。可解决的现实问题:扎实的理论基础,快速融入各种行业企业区块链相关开发需求。市场价值:区块链人才市场短板巨大。
2 以太坊简介 1.合约编程: 合约、继承、全局函数、地址、转账、事件、修饰器等2.以太坊简介与环境搭建 a. Mist钱包 b. MetaMask钱包 c. Remix编译器
3.以太坊框架 1. 区块链搭建并实现多个节点实现数据交互 a. 私有链搭建 b. 联盟链搭建2. Truffle框架学习 a. 部署在不同的环境中(develop环境、Ganache、私有链、ropsten网络等) b. 单元测试编写 c. 内置项目介绍3. Web3.0.js学习
4.以太坊项目实战 案例1:以太坊项目实战-投票系统案例2:以太坊项目实战-发行简单代币案例3:以太坊项目实战-电子钱包制作案例4:基于以太坊的区中心化游戏-以太猫开发实战
5.EOS智能合约 1.EOS智能合约环境部署2.HPP3.CPP4.WAST5.ABI6.货币合约7.Tie-Tac-Toe8.EOS合约实践9.EOS合约升级10.EOS合约调试
6.EOS项目实战 案例 EOS实现代币发行,转账。
联盟链智能合约实战 HyperLedger Fabric环境配置 1部署HyperLedger Fabric2.First-NetWork环境测试与网络启动3 fabric 账号 和 fabric-ca 的使用4. fabric中的组织, 节点, 用户5. fabric中的通道6. fabric中的共识机制7. fabric中的账本8. fabric的交易流程9.cryptogen模块命令与配置10.configxgen模块命令与配置11.orderer模块命令与配置12.peer模块命令与peer channel13 .证书与channel管理 课程设计理念:hyperledger是IBM公司支持,linux基金会孵化的区块链商业级开发平台。hyperledger Fabric是完全用Go语言实现的,hyperledger是可以广泛运用在私有链和联盟链上,国内有众多的大公司加入了hyperledger联盟。可掌握的核心能力:1.具备区块链及相关产业的工作经验;2.具备类Hyperledger,以太坊等公开区块链项目开发能力;3.具备智能合约及其使用场景;4.具备掌握Bitcoin,Ethereum,HyperLedger Fabric的区块链相关机制与原理;5.熟悉;Hyperledger Fabric Technology的各种组件(Peers、Orderer、MSP、CA ...);6.能够使用Go语言编写智能合约链码;7.熟悉hyperledger febric的部署。可解决的现实问题:1.区块链底层产品的设计、研发工作;2.区块链应用层产品的设计、研发工作;3.研究底区块链底层协议及实现,参与优化重构。市场价值:熟练学习和掌握后,可满足企业开发的初中级、甚至高级需求。
HyperLedger Fabric智能合约chaincode 1.ChainCode介绍2.Golang的ChainCode代码结构3.ChainCode交易背书机制4.orderer排序节点5.部署peer0.orggo节点6.部署peer0.orgcpp节点7.链代码打包8.创始块和通道文件9.Zookeeper部署与配置10.Kafka理念及设置11.orderer节点设置12.多集群环境搭建13.dairy组织部署14.process组织部署15.sell组织部署16.溯源业务chainCode编写17.阿里云平台区块链服务简介18.云平台区块链服务搭建19.链代码管理20.链代码编写21.个人认证链代码22.项目区块链服务系统搭建23.交易信息上链
HyperLedger Fabric实战 基于联盟链的商品溯源平台