《码农翻身》
第一章 计算机的世界你不懂
我是一个线程
线程状态:创建、就绪、运行、阻塞、结束。
线程调度:优先级调度、中断、时钟周期
线程池:避免频繁创建线程
锁:多线程编程、临界区
死锁:顺序加锁、可有效避免死锁
TCP/IP
协议:可靠、稳定、失败重传、窗口滑动
两端维持状态:中间节点并不承诺提供可靠的连接通道,信息完全可能失序、重复、丢失。可靠传输完全由两个端点来实现。
TCP连接:是虚拟的,连接的状态信息并不会在路上保存;相反,连接的状态信息是在两端维持的。
三次握手:是为了验证双方都具备收发信息的能力。
四次挥手:双方确保断开连接。
ack:应答机制。
滑动窗口协议:动态维持平衡。
CPU
CPU:取指执行,速度贼快。指令保存在内存中。
CPU组成:程序计数器、寄存器、运算器、控制器。
抽象:程序都是由顺序、分支、循环组成的
缓存:提速
程序局部性原理:空间局部性、时间局部性
流水线:提效
我是一个进程
冯若依曼体:运算器、控制器、存储器、输入设备、输出设备。
进程控制块PCB:保存进程信息
MMU:内存管理单元
分时系统:CPU与IO之间存在巨大速度差异,提效
虚拟内存:分页、页表、缺页中断
分段:段表
进程:空间完全隔离、是资源分配的基本单位
我是一块硬盘
硬盘:盘片、磁道、扇区(512B)。
文件存放方式:连续分配、链式分配、索引式、间接式
管理文件空闲块:位图
我是一个键盘
分类:块设备、字符设备
I/O总线、端口
轮询、中断
中断:一种异步、事件驱动的处理思想
DMA:直接内存访问
数据库之旅
数据的冗余和不一致
并发访问
原子性问题:事务
幂等性
持久化
安全:权限控制系统
undo log、redo log、binlog、mvvc
搞清楚socket
两台主机进程之间通过失败重传来实现可靠性传输
socket抽象层:用户进程 -> socket抽象层 -> TCP/IP
socket建立链接
四元组:客户端IP+端口、服务端IP+端口
五元组:协议、客户端IP+端口、服务端IP+端口
一个翻译家族发家史
机器语言、汇编语言、高级语言
编译器、链接器
编程世界的那把锁
共享变量问题
test and set :硬件支持
自旋锁:需避免死锁问题
信号量
元器件:加法器
递归:函数栈、栈帧
互斥锁(悲观锁)、CAS(乐观锁)、分布式锁、死锁
第二章 JAVA帝国
C语言:贴近硬件、运行快、效率高。
C语言特权:指针和内存管理。
C++:C语言基础上,支持面向对象特性。
java虚拟机:跨平台
栈、堆
垃圾回收:可达性分析
面向接口编程AOP、反射、IOC 与 DI
设计模式:简单工厂、工程方法、模版方法、装饰器
数据驱动、领域驱动
事务:原子性、一致性、隔离性、持久性
两阶段提交,分布式事务
强一致性、最终一致性
事务同时操作了数据库和一个消息队列,这个两个东西完全不同,如何保持一致。异步处理:同个库中新增另外一种状态表,保持事务一致性,后续队列从任务表中读取(定时任务)。
MVC、模板引擎、前后端分离
消息队列:异步操作、次序、持久化、生成者、消费者,主题模型、消息订阅模型
抽象:不要被现象迷住,要看到背后的本质,做适当的抽象才行。
动态代理、注解、泛型、日志、正交性、序列化与反序列化。
低耦合、高内聚、分而治之
第三章 浪潮之巅的web
http:超文本传输协议
https:RSA非对称加密、对称加密、中间人劫持、数字证书
服务器:apache、nginx、防火墙
单点登录:SSO
OAuth:密码凭证许可、隐私许可、授权码许可
mysql、redis、kafka、es
算法:余数算法、一致性hash算法
故障转移:master-slave模式
高可用nginx:keepalived
数据库读写分离、mysql proxy
rpc、restful、docker
select模型、epoll模型
第四章 代码管理那些事儿
svn、git、代码发布。
大部分人只会抱怨项目无趣、没有挑战,遇到问题也只会安于现状。只有少数人会发现工作的痛点,并且真正动手解决它,给公司带来价值。这是提高自己,让自己和别人区分开的重要方法。
约定重于配置。
单元测试、功能测试:想要重构必须有测试。
异步调用、javascript、json、xml、nodejs、c语言
命令式编程、声明式编程(sql)
第六章 老司机精进
勇敢一点、积极一点、敢于担当。
基本准备好就可以出发,路上持续进化。
局部性原理、缓存、抽象、分层、异步调用、分治、数据结构与算法、正交性。
只是学会使用是不行的,不但需要知道how,而且还得知道why。停下来,思考,才是进步的本质。
抽象能力的训练没有捷径,就是经验的积累,勤于思考和学习。
如果你能把一门技术通熟易懂地别人讲明白,就要说明你已经掌握了。
把思路理清楚,尤其要写出为什么要有这门技术,解决了什么问题,然后才是这门技术是怎么使用的。不写出来,很容易放弃深度思考。
数据思维、数据模型。
输出推进输入,梳理知识体系。
优秀和平庸的差别可能就是那一点点坚持把。坚持不懈地坐一件事,每天进步一点点,最后量变会发生质变。
每个季度定一个小目标,努力达成,获得成就感,就能刺激自己更进一步。
原文链接:码农翻身