后端技术面试 38 讲
编程语言历史:
- 早在 1700 年代,莱布尼兹就期望将各种事物都通过一种逻辑语言进行描述,然后用一种可执行演算规则的机器进行计算,就可以计算出事物的各种结果
- 又过了 100 年,法国人雅卡尔发明了一台可编程的织布机,这种织布机通过读取纸带上的打孔,进而控制织布机织出不同的图案。于是人们开始尝将打孔纸带用于计算机编程
- 19 世纪中叶,当英国人 Ada 利用打孔纸带写出人类第一个软件程序的时候,距能够运行这个程序的计算机的发明还有 100 年的时间
- 这个程序已经包含了循环和子程序
- Ada 因此被认为是人类第一个程序员
- 最早的高级编程语言是 Fortran,这是一种专门用于科学计算的高级语言,诞生于 1957 年。
- 真正主流的、被广泛使用的各种高级语言则诞生于 1970 年前后,其中就包括 C 语言
- 传说丹尼斯·里奇发明了 C 语言,然后为了验证 C 语言的特性,开发了一个 Demo,就是 Unix 操作系统。
人类发明制造计算机器有非常悠久的历史,但是这些计算机器都是专门进行数值计算的,加减乘除、微分积分等等。而从莱布尼兹、Ada,到图灵、冯诺依曼,这些现代计算机的开创者们试图创造的是一种通用的计算机,这种计算机不是读取数值进行计算,而是读取数据进行计算,这些数据本身包含着计算的逻辑,这个数据就是程序。
软件编程的本质是程序员用代码的方式使现实世界的事务运行在计算机上,计算机软件是为了解决现实世界的问题而开发出来的,那么软件编程这件事情应该关注的重点是客观世界的事物本身,而不是程序员的思维方式或者计算机的指令。
我们回顾一下现代编程技术的发展,发现大体经过面向机器编程,面向程序员编程,面向对象编程三个阶段,这正好对应马克思经济学关于劳动力的三个要素:劳动工具 - 计算机、劳动者 - 程序员、劳动对象 - 客观对象。编程从面向劳动工具进化到面向劳动者,再进化到面向对劳动对象。
消息队列高手课
优化性能避免消息积压
发送端性能优化
如果说,你的代码发送消息的性能上不去,你需要优先检查一下,是不是发消息之前的业务逻辑耗时太多导致的。
无论是增加每次发送消息的批量大小,还是增加并发,都能成倍地提升发送性能。至于到底是选择批量发送还是增加并发,主要取决于发送端程序的业务性质。
- 在线业务增加并发
- 离线业务批量发送
消费端性能优化
我们在设计系统的时候,一定要保证消费端的消费性能要高于生产端的发送性能,这样的系统才能健康的持续运行。
消息积压了该如何处理
能导致积压突然增加,最粗粒度的原因,只有两种:
- 发送变快
- 消费变慢
有一种不太常见的情况,你通过监控发现,无论是发送消息的速度还是消费消息的速度和原来都没什么变化,这时候你需要检查一下你的消费端,是不是消费失败导致的一条消息反复消费这种情况比较多,这种情况也会拖慢整个系统的消费速度。
优化消息收发性能,预防消息积压的方法有两种,增加批量或者是增加并发,在发送端这两种方法都可以使用,在消费端需要注意的是,增加并发需要同步扩容分区数量,否则是起不到效果的。
我们为什么睡觉
清醒时的电波特点:快速、混乱。
混乱的电波可以解释为:你的大脑清醒时,不同部分会在不同的时刻即时处理不同的信息。当把它们放在一起时,就会产生一种混乱的活动模式,被你头上的电极记录下来。
一个人的睡眠纺锤波越强、越频繁,就越能适应外界的噪声,否则沉睡的人就会被吵醒。
当你的大脑从醒着的快速频率活动转变为更慢、更有规律的深度非快速眼动睡眠时,同样的远程交流优势(FM 调频和 AM 调幅)也会出现了。在深度睡眠过程中,横扫整个大脑的持续、缓慢、同步的电波,开启了大脑中遥远区域之间通信的可能,让它们能够相互协作,发送和接收它们分别存储在不同区域中的经历。
清醒时的脑电波活动主要与外部感官世界的接收有关,而深度非快速眼动慢波睡眠状态会产生一种向内的反射状态——用于促进信息的传递和记忆提炼。
快速眼动睡眠也被成为“异相睡眠”:大脑看似清醒,而身体显然处于睡眠状态。
就信息处理来说,你可以把:
清醒状态主要看作接收
- 经历和不断了解你周围的世界
非快速眼动睡眠看作反射
- 存储和强化新事实、新技能原材料
快速眼动睡眠看作集成
- 把这些原材料与所有过去的经历相互连接,并且在这一过程中对于世界的运转建立一个更加精确的模型,包括创新见解和解决问题的能力
在快速眼动睡眠期间,会有一连串的运动指令在大脑中盘旋,它们是丰富的梦境体验的基础。通过限制肌肉活动——你就无法实现你的梦境经历。
在快速眼动睡眠期间,你眼球的运动会表现出一些急速左右移动的阶段。
那些故意禁食的人会睡得更少,因为大脑被欺骗了,以为食物突然变得稀少。