《码农翻身》读后感

1.计算机的世界

  • 线程:html

    • 线程运行步骤:就绪、等待、运行前端

    • 多线程并发问题程序员

    • 加锁、死锁问题,按照资源顺序申请锁web

  • TCP/IPredis

    • 不可靠通道进行可靠性传输算法

    • TCP的三次握手和四次挥手sql

    • 滑动窗口协议数据库

  • CPU编程

    • CPU比内存快100倍,比硬盘快百万倍。后端

    • 寄存器、程序计算器

    • 局部性原理

  • 进程

    • 批处理系统

    • 进程记录了寄存器的志、指令值、和消耗时间等

    • 地址重定向

  • 硬盘

    • 磁道、扇区

    • 文件、文件系统

  • I/O设备

    • 总线和端口

    • 轮询、中断

  • 数据库

    • 查询

    • 并发访问

    • 原子性问题

    • 安全问题

  • socket

    • 对TCP链接的封装

  • 翻译器

    • 机器语言、汇编语言、高级语言

    • 翻译流程:源程序->词法分析->语法分析->语义分析->中间代码生成->代码优化->代码生成->目标程序

  • 编程世界的锁

    • 共享变量、锁争抢、自旋锁、锁的原子性、不可重入。

    • 信号量:队列会对wait、signal、full、enpty封装

  • 递归

    • 函数栈帧

    • 尾递归、复用栈帧

 

2.Java帝国

 

 

3.浪潮之巅的Web

  • web起源

    • 超文本标记语言

    • 超文本传输协议

  • 通讯

    • 共享内存通讯

    • socket通讯:须要IP和端口,可是不安全

    • web通讯:HTTP(80)、HTTPS(443)

    • HTTP报文段打包在TCP报文段中,放到IP层数据报中,造成链路层的帧,经过网关发出。

  • HTTPS

    • 对称加密

    • RSA非对称加密

    • 非对称加密+对称加密

    • 中间人劫持非对称加密的公钥

    • 数字证书

  • CAS

    • 共享session和共享cookie是比较局限的作法

    • 认证中心:创建session、建立Ticket、重定向

    • 2次重定向,一次验证Ticket

  • Token和受权

    • 返回受权码

    • 根据受权码获取Token

  • 数据库

    • 结构化查询语句:SQL

    • 数据库连接通道:须要缓冲区

  • Redis

    • 支持:key-value、List、Set、Sorted Set、Hash

    • 余数算法:根据key的hash取余,对增长节点很是不友好

    • 一致性Hash算法:增删服务器只会影响相邻节点的缓存数据

    • Hash槽(slot):CRC16算法,对槽值取余,增长节点能够作数据迁移,访问重定向。

    • Redis Cluster:故障转移、数据备份

  • 高可用Nginx

    • 多台服务器使用Keepalived造成master-slave结构

    • 对外只提供一个IP

  • 高可用Tomcat

    • Tomcat集群

    • 负载均衡

    • 失效转移:服务器集群的请求转移,状态信息须要保留,可经过redis。

  • 高可用Mysql

    • 数据库读写分离

    • 须要在一个分布式环境中,保持数据的强一致性。

    • 一master,多个slave结构。

  • 函数

    • 本地过程调用:全部调用都发生在本机内的一个进程中。

    • 远程过程调用(RPC):客户代理(Stub)接收参数,而后经过socket交给服务端代理(Skeleton)处理,把复杂的网络细节隐藏了起来。

  • 框架

    • 框架就是把功能单元抽取出来,造成可复用的东西。

    • 最佳实践:系统架构设计、缓存、性能、高可用性、分布式、安全、备份。

  • HTTP Server1.0

    • 接收HTTP Request,处理完.html后,把文件经过文本方式发送回去HTTP Response。

    • 须要创建HTTP层下面的TCP通道,这个连接通道是经过Socket创建的。好比:socket、bind、listen、accept。默认为80通道,通常也不会被防火墙拦截。

    • 此为单进程,容易阻塞。

  • HTTP Server2.0

    • 多进程并发

    • 进程切换消耗大量资源

  • HTTP Server3.0

    • select模型:

      • 一个socket连接是一个文件描述符fd,是一个整数,fd背后是一个简单的数据结构。

      • HTTP Sever和操做系统之间传递的是一个fd_set的数据结构

      • 操做系统检测是否有数据,而后标记有数据的socket,最后唤醒HTTP Server执行。

  • HTTP Server4.0 epoll模型

    • 和select模型相似,都是操做系统检测是否有读写数据socket,而后通知HTTP Sever遍历1024个连接执行。

    • 不一样的地方是操做系统只会告诉HTTP Server能够读写的socket,不用HTTP Sever遍历全部socket连接。

 

 

4.代码管理的那些事

  • 人肉版本管理

  • 锁定文件:避免互相覆盖

  • 容许冲突:退一步海阔天空

  • 分支:多版本并行

  • 分布式管理

 

5.个人编程语言简史

  • Javascript

    • 浏览器端运行验证而出世

    • XMLHttpRequest进行局部刷新

    • JSON字符串

    • 前端三剑客:HTML、CSS、Ajax和JSON

    • Node.js服务其语言

  • Java和C的区别

    • Java有虚拟机,抽象层屏蔽底层平台的API

    • C语言一旦编辑就能够独立执行,拥有独立的进程和独立的地址空间

    • Java编译以后是.class,C语言预处理、编译、汇编以后是目标文件。

    • C语言是编译时的静态连接,Java时运行时的动态连接。

  • 编程语言

    • C语言是贴近硬件的系统级编程

    • VB桌面应用开发

    • Java适合后端编程,后端编程:负载均衡、灾难恢复、缓存、消息、分布式、数据备份、搜索等

  • 命令式编程和声明式编程

    • 命令式编程就是对硬件操做的抽象

    • 程序员就是把复杂、容易产生歧义的人类天然语言编译成精确的计算机语言指令。

    • 声明式编程:表明是SQL

 

6.老司机的精进

  • 凡事必先骑上虎背

    • 世上没有等彻底准备好后才开始的事情,等你以为彻底准备好后,黄花菜都凉了。

    • 对于性格内向的程序员,不少时候你认为基本准备好了其实就够了。

  • 码农须要知道的“潜规则“

    • 上帝的规矩,局部性原理:时间局部性、空间局部性

    • 坐飞机的怎么和坐驴车的打交道

    • 抛弃细节:抽象

    • 我只想和邻居打交道:分层,应用层、传输层、网络层、链路层、物理层。

    • 我怕等不及:异步调用

    • 大事化小,小事化了:分而治之

  • 一名架构师的总结

    • 好奇心

    • 养成计算机的思惟方式

    • 扎实基础,融会贯通

    • 要透彻的理解一门技术的本质

    • 能写漂亮的代码

    • 抽象的能力

    • 技术领导力

    • 对本身狠一点,开始写做吧

 

7.《码农翻身》读后感

”码农“是一个贬义词,这个词对于不少软件工程师来讲是一个准确描述。技术更新换代频繁、社会发展迅速,使得软件这个行业的工做者,不少时候都疲于奔命,沉寂在不断更换技术的怪圈。而《码农翻身》一书能帮助更多的”码农“从技术本质上打破这个限制。

在《码农翻身》一书中不只能学到了进程、线程、CPU、硬盘、I/O设备等计算机基础知识,也学到了TCP/IP、socket、HTTP等通讯协议方面的知识。同时在应用编程方面和工做规划上也有必定的参考价值,是一本很值得看的书籍。

从不一样角度来看《码农翻身》它描述了一个软件工程师的职业生涯历程,不论是对初学者,仍是有必定经验的积累者,都能提供指路的明灯。

相关文章
相关标签/搜索