码农翻身

将多彩的糖衣(故事)剥除,就能品尝到作者馈赠给大家的饴糖(道理)。

事务所引入的幂等性,可以理解成“一个没有副作用的纯函数调用”么?

通过给各个数据库增添“事件表”,将一个横跨多个数据库的事务,拆分成各个数据库的本地事务。使用消息队列实现数据库间的事件推送,从而保证分布式存储的可用性最终一致性。关于分布式存储的更多内容,可参见松本行弘的文集——《代码的未来》。

消息队列的“发布/订阅”机制,在《程序员修炼之道》的29节也有提及——通过事件的使用,将对象间的耦合减至最少。

面向切面编程(AOP),不就是实现正交性设计么?因为程序员受到Java语言特性的束缚(如:Java语言自身没办法将命名函数当作参数进行传递),所以才衍生出代理泛型在总共23种设计模式之中,有16种在Lisp语言中“本身就提供,或者被大大简化”

单点登录授权码许可的相似之处就是:网站将未登录用户重定向到一个认证中心,该用户在认证中心登录后,将携带认证标识并被重定向回原网站,而原网站在后台向认证中心发起校验。作者通过几张UML顺序图,就将各参与对象间的交互过程表示清楚了。

作者在数据库集群建设上提供了一些解决思路,但这个故事最终又引入了“集群如何编排、通信与管理”的问题,还得努力学习SwarmsKubernetesRabbitMQ,真是躬行维艰啊!

文摘

TCP连接,是虚拟的,连接的状态信息并不会保存在链路上,而是维持在两端。三次握手主要是为了验证服务端与客户端能够正常收、发信息。

TCP协议很复杂,不能要求每个程序员都去实现建立连接的三次握手、累积确认、分组缓存。这些应属于操作系统内核部分,操作系统通过抽象出一个Socket概念,让上层应用去编程。在Socket连接中,服务端的Accept与客户端的Connect一起完成了TCP的三次握手,Socket描述符指向了一个数据结构——TCP/IP协议栈。

信号量,是个带有两个操作——waitsignal——的整数。waitsignal由操作系统内核实现,通过信号量可以解决生产者与消费者的同步问题。

精进

  • 好奇心

  • 养成计算机的思维方式

  • 扎实基础,融会贯通

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

  • 能写漂亮的代码

  • 抽象的能力

  • 技术领导力

  • 写作

约定重于配置。对于性格内向的程序员,很多时候你认为基本准备好了其实就够了