《码农翻身》读后感

1.计算机的世界

  • 线程:

    • 线程运行步骤:就绪、等待、运行
    • 多线程并发问题
    • 加锁、死锁问题,按照资源顺序申请锁
  • TCP/IP
    • 不可靠通道进行可靠性传输
    • TCP的三次握手和四次挥手
    • 滑动窗口协议
  • 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等通信协议方面的知识。同时在应用编程方面和工作规划上也有一定的参考价值,是一本很值得看的书籍。

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

原文地址:https://www.cnblogs.com/wuchangliang/p/11080151.html

时间: 2024-11-05 17:26:01

《码农翻身》读后感的相关文章

大道至简第五章读后感

第五章 失败的过程也是过程 今天照样老师带领着我们阅读了大道至简第五章,阅读了<大道至简>的第五章,这章在前面的基础上又进了一步,有了技术和团队,加上有效的沟通,接下来就要接项目做工程. “虚有其表耳”,本章以<明皇实录>中的一句话来告诉我们一个深刻的道理:不要只求外表,只做形象工程,而是要透过表象,力求实质. 失败了不要紧,没有失败也就找不到自己的不足,也就不会发现自己的问题,更不用谈改进了.我们的前辈们就是在不断的失败中才总结出了“瀑布模型”“螺旋模型”等模型,方便了我们.但是

大道至简 第五章读后感

第五章 失败的过程也是过程 以得失而论,在瀑布模型与RUP模型之间,学习前者而不成,可思过程的本质:学习后者而不成,可得文字的架子. 如果懂得了所谓的模型原本都演化自那个简单的瀑布,那么文档是按XP写还是按RUP写,也就可以应时.应需,因地置宜,择善而从了. 越是简单的东西,往往越是接近于本质. 项目经理的工作,就是要去组织这个工程中的各个角色,使得分工明确,步调一致,共同地完成这个项目.四川有句地方话叫“做过场”,也有说成“走过场”的.“过场”是舞台术语,意思是角色从舞台一端出场,再走到另一端

大道至简 第五章 失败的过程也是过程 读后感

今天该写一写大道至简第五章读后感了. 首先是“做过程不是做工程”,过程是为了实现某种目的而经历的一些事情,过程有很多种,虽然经历了某种过程,但不一定能实现某种功能.做完过程的每一个阶段,并不等于做工程.做过程不是做工程的精义,也不是最终目的. 然后是“做过场”,做过场就好像是一种形式一样,做了没必要做的事情,就是浪费时间. 我们为什么做工程,不要忘了最终目的.目的,是实现客户的要求,工程只是一种实现的途径.最初做开发的前辈们,不用什么工程或者过程,也一样编出了程序,也一样解决了问题,也一样实现了

大道至简第七章读后感

大道至简第七章读后感——现实中的软件工程 “王不如远交而近攻,得寸,则王之寸:得尺,亦王之尺也.”——<战国策.秦策> 1:大公司手中的算盘 文中列举了IBM,Borland和Microsoft的一些体系,来说明大公司眼中的世界. 大公司们在标准.理论.语言上的争来夺去,未必全然出于“软件实现”的考虑.对统一理论.统一工具.统一过程的企图,其最终目的是在整个软件工程体系中的全面胜出.算 盘 上 的 绝 大 多 数 人 , 只 是 用 于 计 算 胜 负 的 一 枚 算子.所谓编程语言,只不过是

大道至简第五章阅读感想

第五章失败的过程也是过程 今天王建民老师依旧带领着我们阅读了大道至简第五章,第五章是失败的过程也是过程.通过前面的技术.团队和沟通,这章主要讲了关于做工程的问题. 文章开篇以一句<明皇实录>中的“虚有其表耳”来说明一个很重要的问题就是:不能只求外表,而是要透过表象,力求实质. 第五章的整体思想是让我们注重过程,因为有很多人从来不注重过程,只注重结果.然而过程对于一个编程人员也是非常重要,如果一个好的编程员从来不在乎程序的过程,只是关心最后程序是否能够实现,那么这个编程员一定不是一个好的编程员.

大道至简 第六章 读后感

说点什么呢,今天看了看大道至简第六章<从编程到工程>. 文章以<列子·说符>的“得其精而忘其粗,在其内而忘其外:见其所见,不见其所不见,视其所视,而遗其所不视.”为题记.第一节讲了“语言只是工具”,作者讲述了他曾经对一些编程语言的看法.他曾经也热衷于讨论语言的优劣,但是他现在不这样了,他已经不再专注于语言, 正如他在第一章中写到的一样:成天讨论这门语言好,或者那门语言坏的人,甚至是可悲的.确实,程序的好坏不在于语言,在于算法. 第二节又写了“程序”,程序=算法+结构,编程的精义于此

《大道至简》第一章读后感

经常听见有人抱怨编程太难,说自己不是学软件的料,那么他们真该好好看看<大道至简>这本书,相信他们看完这本书后会有很大收获. <大道至简>第一章引用了一个很简单的故事“愚公移山”,用这个故事很好的概述了我们在完成一个项目时所要进行的步骤.听上去“愚公移山”和编程简直是风马牛不相及,但是看过作者的叙述又有原来如此的感觉.其实编程并没有什么难懂的,就和我们日常生活一样,发现问题,分析问题,提出解决问题的方案,实施,和后续的验收.例如某天我们突然发现家里放不出水了,这就是发现问题,我们会观

大道至简第三章读后感

---恢复内容开始--- 大道至简第三章的是团队的问题.我们知道,随着人们生活水平的不断提高,用户对计算机软件的功能要求也日趋上升.这样一来,计算机软件就变得越来越复杂,规模变得越来越庞大,源代码的量也越来越多.在这种市场需求和自身发展的共同要求之下,一个团结而高效的开发团队的作用就不言而喻了.那么如何打造一支强有力.听指挥.能干活的开发团队呢?这一章作者就这个问题和我们展开了讨论. 作者着重的强调了项目经理在开发团队中的作用.首先声明一点,这并不是说团队的开发人员不重要,作者从始至终都认为编程

一切都是为了实现-大道至简第六章读后感

大道至简第六章的内容比较多,也比较深.或者说这一章作者是从一个更高的层次.更开阔的视野.更独特的角度来解读软件工程这四个字的具体含义的. 作者的这些肺腑之言都是作者在软件行业工作了多年之后总结出来的.开发技术对一个软件产品质量的好坏和最终的成功的影响并虽然不能说是一点也没有,但也不是很大.真正起到决定性因素的不是那些技术细节,而是一个高度过程化.通晓方法论.拥有大量工具的开发团队或者是开发公司.在这个团队里面,无论是对项目经理还是开发经理甚至是一个普通的开发人员的要求都是很高的.团队内的每个人必

《大道至简》第一章读后感和伪代码

阅读了<大道至简>第一章,感到作者对编程的精义分析非常具体形象,引用<愚公移山>的故事,说明了编程的本质.又将他们扮演的管理者,技术人员,程序分析师众多形象展现出来.又在困惑人们的"我能不能学会编程"这一问题做出回答,作者列举生活实例,给出了肯定的答案,将很多抽象的东西,简单化,通过最常见的生活中的实例介绍"大道". import java.大道至简.*; public class.yishan.*; { public static void