共计12h前端
181107: 2h
181108: 0.25h+3h
181112: 1h+1.5h+1.5h
小计:9.5h ~ 10hpython
181112:2hlinux
本书2003年出版,2015年5月译版第1版
若是仅仅把技术看成一个黑盒, 只把时间花在学习其表面上, 而并无探索到其本质, 就毫不应该认为本身已经“懂” 了。
即使面对的是复杂的最新技术,一旦把它们回归到计算机的基础知识上, 就变得能够轻松理解了。
本书目的是为了了解有关计算机技术的知识范围,掌握其基础中的基础知识。
全文共计12章:程序员
181107:2149:所谓编码,就是把信息数字化成计算机可以理解的数字,根据不一样的编码方式,计算机存储须要的字节数不一样;用于表示字符的数字就是“字符编码”,用于表示颜色的数字就是“颜色编码”;编码就是一种数字化的标准or方式,好比单汉字GBK下2字节,UTF-8下3字节;若是说Linux系统中全部都是文件的话,那么计算机中全部都是数字;计算机=输入+运算+输出;程序=指令+数据;指令和数据都是数字,一组指令能够理解为函数,数据能够理解为变量;所谓编译,就是把各类不一样编程语言写的代码转换成计算机可以理解的机器语言(原生语言-数字);计算机进化的方向是为了与人类愈来愈接近,摈弃计算机中不符合人类思惟习惯的地方;面向过程编程->两种编程方法,面向组件编程CBP和面向对象编程OOP(更接近人类的思惟习惯)。算法
181107:2238:这章讲的大部份内容基本都是以前没看过的,偏底层硬件,只看到了各类引脚连线,把CPU、内存、I/O给串起来,可是到底怎么串的,以及各类物理电学常识都忘了。经过手工绘制电路图连线,对整个CPU的构造有了一些了解,很是细致,经过拨动CPU上的按键开关手动输入机器语言一行一行的输入代码。机器语言的语法十分简单,就是指令+数据,指令和数据则是根据存储的内存地址+指令or数据自己,告诉CPU在哪儿作什么。对于不作硬件的来讲,要深刻理解的主要还就是二进制,时钟信号,0/1,Hz是用来表示驱动CPU运转的时钟信号的频率,1秒钟发出1次时钟信号就是1Hz。数据库
进阶书:计算机组成原理(是时候复习一下了)编程
181108:0958:总的来讲这一章的知识比上一章容易理解,主要是以前上了计算机组成原理的课,对于寄存器、汇编语言有必定的了解,这章把机器语言清晰的解释了一遍,更理解底层的实现机制了,很不错,不过掌握程度不是很高;每一个汇编符号都是在CPU的资料中可以找到,每一个指令都有对应的机器语言二进制代码,以及对应执行该指令须要的时钟周期,每一个CPU的Hz频率表示的就是每秒可以执行多少个时钟周期,经过对指令须要的时钟周期进行累加,就可以计算程序所消耗的时间。汇编语言的语法只有一个,把标签、操做、操做数写在一行中,标签的目的是为该行代码对应的内存地址取一个名字;程序的执行重点是几种寄存器,其中PC寄存器存储着下一行指令的内存地址,是控制整个程序运行流程的重要寄存器;(2)表示地址编号;汇编语言的一行指令可以翻译成多少字节的机器语言取决于指令种类和操做数的个数(其实也就是CPU资料上怎么写就怎么对应)windows
进阶书:编译原理(这书说实话虽然买了但几乎没看,太偏底层而如今业务开发不多直接用到,但若是想要了解底层实现各类感受仍是要好好看一下)、程序员的自我修养——连接、装载与库(对各类静态、动态编译了解不深入,这本书貌似很经典,想看)后端
181108:2107:程序的流程到根本只有3种:顺序、条件、循环,若是看到更底层的硬件层面,其实能够把循环和条件归为一类,条件是跳转到另外一个地址,而循环则是跳转到以前出现过的地址;写程序以前能够先简单画大概的流程图,其实就等价于算法,不过算法可能还须要更加细致;流程图主要使用的就是圆角矩形表示开始结束、矩形表示操做、菱形表示条件、箭头和连线表示执行的顺序流程;所谓程序块就是代码的集合;所谓结构化程序设计,就是只具备顺序、条件、循环,而没有goto等所谓跳转,由于goto这种跳转命令用得很差就会致使整个程序执行的逻辑复杂、难以理解,而仅仅根据已有的3种流程已经可以组合出全部想要的程序需求了;几乎全部的程序均可以分为初始化处理+循环处理+收尾处理这三个过程;两种特殊的流程,中断和事件驱动,严格的说他俩都是条件的一种,中断忽然相似来了个电话,解决以后又再回到本来的任务中来,事件驱动则是相似通知,接收到某个通知以后,改变当前的状态;事件驱动主要用于GUI程序的编写,更适合使用状态转换图or状态转换表来进行描述。设计模式
进阶书:程序设计相关——代码大全&代码整洁之道&代码之美(很经典,并且貌似很细致,想看)、HeadFirst设计模式(讲解了多种设计模式,看名字感受对小白也比较有爱)、设计模式之禅(听说很经典,想看)、领域驱动设计(听说很经典、想看)
181108:2133:所谓哨兵就如字符串的末尾用\0表示,链表的末尾用-1表示的这种特殊的数据,以前见过一些使用哨兵的技巧,可是不知道这就是哨兵;计算机程序的算法必须是步骤明确且有限的;计算机只能机械的解决问题,虽然有时候解决问题的方法比较复杂,但考虑到计算机的运行速度极快,利用好了也能够执行很是简单的算法;一些主要的典型算法是必需要掌握的:展转相除法(求最大公约数,求最小公倍数就用二者相乘除以最大公约数)、埃拉托斯特尼筛法(求某个数是不是素数,直接直觉的从2除到该数的平方根便可)、查找搜索的顺序、二分、哈希,排序的冒泡、快排;解决同一个问题可能有多种算法,而其中执行速度快的、占用空间少的算法固然更为优秀,要善于利用编程技巧(如哨兵)、数字规律(公式or特殊规律)等来优化算法,减小执行时间;善于使用流程图or伪代码先把算法写出来,想清楚以后再开始编码。
进阶书:算法导论(讲算法中堪比圣经了吧,不过貌似比较难理解)、算法第4版(听说这个做为算法入门比较不错)
181108:2156:这章能够说是本身第1个可以把3个问题所有回答出来的章节了,总体就是在讲数据结构的东西,数组、栈、队列、链表、二叉树,这几种基本的数据结构,算是简单的复习了一遍,还有C结构体的概念;其中栈和队列有个特性是说,常常用于不能当即处理的数据,进行缓存,感受就是消息队列kafka的核心了。数组是最基础的数据结构,其余的数据结构都是基于数组进行的变种,由于数组这种分配连续一块内存空间地址的方式,与计算机物理分配内存一致。这章还算比较友好,不过相对的学到的新东西其实也少了。
进阶书:数据结构(能够复习复习,其实数据结构和算法密不可分,看上面的基本就OK)
181108:2234:算是复习了一下面向对象编程和面向过程编程的最大的不一样点和特性,主要就是类、继承、封装、多态,继承顾名思义就是继承类,封装则是把类中的属性和函数设置为private不让外面调用,造成一个封闭的盒子,多态则是对于同一个消息,不一样的对象可以进行不一样的操做;类和对象的关系,类是对象的定义,对象是类的实例;里面比较新的是对UML统一建模语言的介绍,九大图,以前有看到过,可是没有去搜,这里看到了很不错把面向对象编程做为一种能提高编程效率、写出易于维护的代码的编程方法, 在适当的场合实践面向对象编程;使用类有3种状况:一个是继承该类定义新类、一个是调用该类持有的个别成员(函数)、一个是在类的定义中使用其余类。考虑python,它既是一种解释型脚本语言,也可以支持使用面向对象编程的思想,重点是在什么状况下使用面向过程,什么状况下使用面向对象。
进阶书:面向对象相关(和前面程序设计相关结合看,基本上讲程序设计的都会说到面向对象编程)
181108:2302:数据库这个,以前也是上过课的,总体来讲,因为这本书03年写的,确定有一些技术有点滞后,特别是对近几年火的非关系型数据没有进行探讨,不过这里对关系型数据库的介绍还算不错,如何对关系型数据库进行拆表、主键、外键、CRUD、数据库事务的原子性操做、SQL语句,Visual Basic 6.0中之前用过的ADO数据对象,用于处理和数据库的交互的类;任何语言都有可以和数据库交互的数据对象,基本操做就是:程序开始时创建连接,进行CRUD操做,结束时关闭连接。
进阶书:关系型数据库(MySQL、Oracle)、非关系型数据库(MongoDB、GraphDB、Redis、NoSQL精粹)、分布式数据库。(这部分的书暂时尚未找好,不过根据想要了解的某种数据库,比较经典的书应该也是比较好找的)
181112:1019:所谓协议,就是一种通讯标准,对信息发送方式的规定or约束;从底往上,网卡(LAN内的MAC地址在网卡上)-网卡驱动程序-IP层(LAN外的IP地址)-TCP层-应用程序(FQDN,主机名+域名);LAN中,MAC到IP的转换,由ARP地址转换协议规定,路由器经过广播询问某个IP的MAC地址是谁,该主机应答后,在路由器中记下ARP缓存表,定时询问更新缓存;LAN中IP地址地址的分配,包括路由器的IP地址的分配由DHCP协议(服务器)搞定,服务端记录可用的IP池,客户端申请时自动分配可用的IP地址给主机;LAN中,FQDN和IP的转换,则由DNS服务器搞定,实际上内网中各自主机的转发用不到DNS,若是路由器发现数据包目的IP就在LAN内,则直接转发,若是目的IP和源IP不在同一个LAN内,则须要经过路由器转发;网络中的传输都是经过IP来标识数据包寻址的,域名只有上升到应用程序的时候才考虑,但其实每一个LAN都有一个域名,每一个LAN内的主机也有一个主机名,组合起来的FQDN就是域名,也能够惟一标识一台主机;MAC地址由两部分构成,制造厂商的编号+厂商内部的编号;子网掩码的做用是为了标识IP地址的网络地址部分和主机地址部分。windows下查看一些信息的命令(linux可能也有同名命令):
进阶书:计算机网络(经典课本,感受能够复习复习)、图解TCP/IP第5版(这本书讲解风格比较容易理解,适合入门,以前没看完)、TCP/IP详解卷1-3(差很少是相似圣经,经典必看了,里面的内容比较深刻、底层,把代码的实现细节都写出来了,感受理解起来有必定难度)、UNIX网络编程卷1-2(一直很想看完的书,可是一直没看完……)、HTTP权威指南(也是经典必看,作网络必需要深刻了解HTTP协议原理)、Linux鸟哥私房菜基础学习篇+服务器架设篇(考虑到大多数网络服务器都是在Linux系统下,并且有不少网络相关的命令,深刻了解Linux也是作网络的必备工夫)
181112:1626:总体来讲这章的内容仍是比较浅显,只是对对称加密和非对称加密稍微讲了讲,介绍了下数字签名,是公私钥对的简单应用。仍是比较简单,若是涉及到证书验证之类的可能会比较难一些。不过也从侧面说明这部分本身掌握得还算不错吧。合理的密钥应该知足以下条件: 长短适中、 能够反复使用、 能够经过某种通讯手段交给接收者, 而且通讯双方之外的其余人难以用它来解密。
进阶书:加密与解密(一直想看,结果没看)、HTTPS/SSL/证书相关(书还没找,但一直想深刻了解其原理,如今作网络绕不开加密了,加密流量愈来愈多,很是须要深刻了解,进一步可能须要了解一下区块链技术)
181112:1707:XML实际上是一种标记语言的源语言;标准的XML由3部分组成:XML声明+DTD/XML schema+XML主体,声明定义这是一个XML文档,相似文件头部,DTD/XML schema严格定义XML文档中可以使用的标签及数据及数据位数类型等,主体则是XML传输的数据内容;XML能够应用到任何领域,只要是想要为信息标记含义的应用场景;可是XML是通用的,但并非万能的,在例如互联网or分布式计算等须要多个不一样标准格式的主机之间传输数据时,做为通用的数据格式,XML很是有用,可是若是全部的主机都是同一个厂商的,其实使用厂商内部定义的格式更为高效并节约内存;相对于XML,csv格式的文件没有定义数据信息,而是只传输了数据自己,更为节省内存,另外csv文件格式传输字符串的时候使用双引号包含起来,可能内部的逗号就不会被认为是分隔符;因为XML可使用于多个领域,并且标签是可扩展的(即任意指定),确定会存在同形异义的状况,因此有xmlns属性做为命名该标签的命名空间,明明空间的指定通常使用URI,这样可以全世界惟一标识该XML使用的命名文件,这样若是存在标签的同形异义,就不会误会了(命名空间的名称其实能够任意写);用于解析XML的程序有不少,DOM、SAX其实都是一种解析标准,不少编码语言都已经实现了XML的解析库,直接调用便可。这里也是没有介绍新技术HTML5,毕竟2003年HTML5尚未出现。
进阶书:数据传输格式貌似没什么可进阶的,不过若是考虑到XML大量应用于Web开发的话,Web开发相关的进阶技术栈就很是多了;以前作过一些网页前端开发的东西,对HTML/CSS/JS/XML/DOM等相关的技术有必定了解,不过并不深刻,后续有须要的话可能会进一步学习,不过感受仍是对后端更感兴趣一些。
181112:1741:这里说的SE系统工程师,感受是把产品经理和技术经理结合起来了,或者说就是在人少时候的技术经理,须要懂一点技术,并且可以和客户沟通需求,既要求沟通能力也要求技术能力;简单介绍了软件开发时最简单的瀑布模型,基本就是按照顺序进行的阶段,每一个阶段具备其具体的输出文档;所谓设计就是拆解(最好使用面向对象进行拆解,这样当现实世界进行变化的时候,能够经过只改变那一个对象而进行顺利过渡),所谓编码就是集成(经过从小到大的编写模块单元测试,最终集成成一个系统进行集成测试);拆解的程序设计方法,根据拆解时候关注的事物不一样,能够有不一样的方法,可是究其根本的原则,仍是顺延计算机的三大原则,输入运算输出、符合计算机处理方式的设计原则,更适合计算机程序设计;系统的可用率计算,当多配置一台机器,其设备可用率就可以从90%上升到99%,这个在数学之美里面也看到过,很神奇,但数学就是这样。
进阶书:若是从技术的角度,这部分的进阶应该就是软件架构相关了。软件架构的艺术(听说很经典)、大型网站技术架构:核心原理与案例分析(以前看过,可是影响不深入,并且这本书可能已经比较旧了)、大规模分布式系统架构与设计实现(一直很想了解分布式相关的东西,想看)
181112:1749:总体花了近10h看完这本书,虽然实际上是一些很基础的知识介绍,可是也有一些说实话是以前都没有了解过的彻底全新的内容,差很少占10%左右,还有一些内容是以前了解过,可是并非很熟练而后至关因而复习加固了一遍,感受仍是不错的。这是整理编程书籍以后看的第一本书,但愿今年可以把计算机的基础从新复习加固一遍,不少东西其实本身真的没有掌握很好的,不管怎样,打好基础是很重要的。
这本书的优势是讲解十分浅显易懂,感受即便是彻底的小白也可以理解大概;可是缺点是有些内容可能有点点过期,经典的原则、那些基础中的基础固然具备漫长的声明周期,可是有些新技术其实应该加入到里面来的,而没有加入,做为打基础感受欠缺了一些新技术的介绍。
不管是想要复习的、新学习的方向进阶书都太多了, 准备仍是先把基础看完、整理、复习OK以后再慢慢往上。
暂定阅读计划顺序:
这些是已经下载好准备看的计算机基础概念相关的书了,不知道19年以前能看到第几本,争取坚持天天看2h吧。