三本书的一些笔记
最近粗略的看完了三本书,分别是《计算机是怎样跑起来的》,《半小时漫画计算机》,《响应式Web设计 HTML5和CSS3实战》,大有收获!大佬们的境界实在是难以望其项背,在我看来难以理解的TCP,计算机内存、硬盘、CPU等概念,大佬们信手拈来,将抽象的概念解释的通俗易懂,以下为文章内的一些精彩片段(时间原因,只记录了一小部分)。
TCP为什么通过三次握手来建立一个连接?作用就是双方都能明确自己和对方的收、发能力是正常的。
Linux下的一切皆文件!尽管屏幕、打印机、键盘、鼠标这些设备各不相同,但有一个共同点就是可以向它们写点东西或者读点东西,屏幕=》输出点阵图像,打印机=》输出字符到纸张,键盘=》读取其字符,鼠标=》读取其位置数据,而当一个东西可读可写,那么和文件也就无异了。
终于明白为什么都说高级语言运行慢,首先理解一下高级语言的定义(并非我最开始理解的那种高级):易于识别和记忆的字符来作为关键字,更接近人类的思维方式,编写容易读写性好,开发效率更高。从硬件的角度来说,因为计算机的硬件只能识别“断开”和“闭合”两种物理状态,也就是0和1,是的没错,计算机看着功能那么多,其实在底层都是由0和1组成,机器语言这种低级语言(还有汇编语言)因为无需翻译,机器可以直接运行,效率当然很高,但是这也意味着开发效率贼低(毕竟谁都不想只用0和1来敲代码!)。
使用编程技巧提升程序执行速度!例如判断99999937是不是素数,最直接的方法就是用待判定的数除以比它小的所有正整数,但这将非常耗时,如果加入一点技巧,改成用待判定的数除以比它的1/2小的所有数,这将节省一半的时间!
算法技巧中还存在一个著名的技巧叫做“哨兵”,这个技巧一般用在线性搜索(从若干数据中查找目标数据)等算法中,从头到尾,依次比对,直至找到目标数据。例如,有100个箱子,分别贴上1-100的序号,箱内装有任意数字的纸条,现在我们要从这些箱子里面找出写着我们需要数字的纸条,如果按照常规方法来写程序,从第一个箱子开始检查箱内纸条,每检查一个纸条后再检查箱子的编号(检查箱子的编号是为了防止循环溢出,毕竟只有100个箱子),这个过程看起来没有问题,但实际上多了不必要的处理-每次都要检查箱子编号是否到达100;而如果换一种方法,添加一个101号箱子,箱内的纸条放有我们需要的数字(哨兵),程序运行,找到要找的数据之后,如果该箱子编号没有到达101号则意味着找到了实际的数据;如果该箱子编号为101,则意味着找到的是哨兵,没有找到实际的数据,减少了检查箱号的步骤,执行时间自然也就缩短了。
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击