日常工作中出现很多声音:学PHP吧,学前端js、vue、 react吧,学go才有出路哦,java才是永恒,python很棒,学业务吧编程没用……不能追语言,我要跟随内心的疑问,带着这些疑问从基础开始学习。上周末做了个脑图,搞清楚自己到底焦虑什么,应该做什么。“摘记”中括号的内容是自己的一些看法。
学习论
- 其实不仅是计算机,其他学问亦是如此。首先要划出一个“知识的范围”,精通一门学问所必知必会的知识都在这个范围内。其次是掌握该范围内每个知识点中“基础中的基础知识”。最后是能独当一面的“目标”,即掌握了这些知识可以做什么。
摘记
-
计算机的根本性基础:计算机是执行输入、运算、输出的机器;程序是指令和数据的集合;计算机的处理方式有时与人们的思维习惯不同。(在与计算机打交道的过程中遇到任何不懂的,多想想这三个基础,就会明白了)。
-
计算机内部会先把文字转换成相应的数字再做处理,这样的数字叫做“字符编码”。
-
CPU Central Processing Unit(中央处理器);Hz(赫兹)是频率的单位,通常用来表示驱动CPU运转的时钟信号的频率,1秒发出1次时钟信号就是1Hz,所以,100MHz(兆赫兹)就是100*100万=1亿次/秒;Z80 CPU是8比特的CPU
-
算法:算法是程序升级的“熟语”;算法中解决问题的步骤是明确且有限的;计算机不靠直觉而是机械地解决问题;了解并应用典型算法;利用计算机的处理速度;使用编程技巧提升程序执行速度。(看到大家都在拼命刷算法,但自己不能盲从,要了解为什么学算法?学哪些?有什么用)
-
面向对象编程通过把组件拼装到一起构建程序:对于C语言或是BASIC的程序员而言,程序就是函数和数据的集合。在大型程序中需要用到大量的函数和变量。假设要用非面向对象的编程方法编写一个由10000个函数和20000个变量构成的程序,那么结果就很容易是代码凌乱不堪,开发效率低到令人吃惊。(这就是为啥要用OOP啦)
-
面向对象编程能够提升程序的开发效率和可维护性。
-
“我是创造类的人,你是使用类的人”——在实际应用面向对象编程时要带着这个感觉。比如,整个组里,有人只负责制作组件(类),有人只负责使用组件。对于创造类的程序员,他们考虑的是程序的开发效率和可维护性,并决定应该将什么抽象为类。如果一个类的修改导致其他的类也要跟着修改,这样的设计是不行的。对于类的使用者而言“类看起来是什么样子的”这种关于规范的描述通常被称为“接口(Interface)”。(记住啦,这里的接口,跟另一本书的API接口,不一样啦)
-
面向对象编程是适用于大型程序的开发方法;面向对象编程就是在为现实世界建模;面向对象编程可以借助UML设计程序;面向对象编程通过在对象间传递消息驱动程序:在面向对象语言中所说的消息传递指的是调用某个对象所拥有的函数。沉浸在面向过程编程中的程序员们通常都习惯于用流程图思考程序的运行过程。可是为了实践面向对象编程,就有必要改用时序图来考虑程序的运行过程。
-
OPP一些术语讲解! 在面向对象编程中使用继承、封装和多态。Inheritance、Encapsulation、Polymorphism:继承指的是通过继承已存在的类所有的成员而生成新的类。封装指的是在类所拥有的成员中,隐藏掉那些没有必要展现给该类调用者的成员。多态指的是针对同一种消息,不同的对象可以进行不同的操作。很多人会被所学到的语法结构和编程技术中涉及的大量知识所束缚,以致不能攒着自己的想法编写程序。其实只要沉静下来,不拘泥于语法和技术,转而去关注使用这三个特性所带来的好处,就能顺应着自己的需求恰当地使用面向对象编程语言了。
-
类和对象的区别。类是对象的定义,而对象是类的实例。
-
类有三种使用方法:仅调用类所持有的个别成员(函数和变量);在类的定义种包含其他的类(这种方法被称作组合);通过继承已存在的类定义出新的类。
-
在Java和. NET中有关OOP的知识不能少。Java和. NET其实是位于操作系统(Window或Linux等)之上,旨在通过隐藏操作系统的复杂性从而提升开发效率的程序集,这样的程序集也被称作“框架”(Framework)。框架由两部分构成,一部分是负责安全执行程序的“执行引擎”,另一部分是作为程序组件集合的“类库”。
-
请诸位把面向对象编程作为一种能提升编程效率、写出易于维护的代码的编程方法,在适当的场合实践面向对象编程,而不要被它各种各样的概念以及所谓的编程技巧所束缚。
-
市面上的DBMS有SQL Server、Oracle、DB2等,无论是哪种DBMS都可以用基本相同的SQL语句操作。
-
键和索引的区别是什么?键用于设定表和表之间的关系(Relationship),而索引是提升数据检索速度的机制。其上每个值都能够唯一标识一条记录的字段称为主键。为了在表和表之间建立关系而在表中添加的、其他表主键的字段称为外键。而索引是与键无关的机制。
-
数据库应用程序(即为了便于操作数据库而编写的程序)。数据库的实质虽然是某种数据文件,但是诸位编写的应用程序并不是直接去读写这些数据文件,而是以DBMS作为中介间接地读写。(谁写的DBMS,太牛了)
-
数据库系统的构成要素包括“数据文件”“DBMS”“应用程序”三部分。在小型系统中,把三个要素全部部署在一台计算机上,称作“独立型系统”。在中型系统中,把数据文件部署在一台计算机上,并且使数据文件被部署了DBMS和应用程序的多台计算机共享,这样的系统被称为“文件共享型系统”。在大型系统中,把数据文件和DBMS部署在一台(或者多台)计算机上,然后用户从另外一些部署着应用程序的计算机上访问,这样的系统被称作“客户端/服务器型系统”。其中部署着数据文件和DBMS的计算机是服务器(Server),即服务的提供者;部署着应用程序的计算机是客户端(Client),即服务的使用者。如果把服务器和客户端之间用互联网联结起来,就形成了Web系统。在Web系统中,一般情况下应用程序也是部署在服务器中的,在客户端只部署Web浏览器。
-
设计数据库的第一步是从“你想要了解什么”的视角出发找出需要的数据。如果是自己使用的数据库,那么就问问你自己想要了解什么。如果是为客户设计数据库,就要去询问对方想要了解什么
-
记录有时也被称为行或元祖(Tuple),字段有时也被称为列或属性(Attribute)。
-
索引表是一种数据结构,存储着字段的值以及字段所对应记录的位置。一旦设置了索引,每次向表中插入数据时,DBMS都必须更新索引表。提升数据检索和排序速度的代价,就是插入或更新数据速度的降低。只有对那些要频繁地进行检索和排序额字段,才需要设置索引。
-
SQL Structural Query Language 结构化查询语言。SQL语言的标准是由ISO(International Organization for Standardization 国际标准化组织)制定的。现在市面上几乎所有的DBMS都支持SQL语言。
-
在Windows应用程序中,向DBMS发送SQL语句时,一般情况下使用的都是被称为数据对象(Data Object)的软件组件(类)。一般的开发工具中也都包含了数据对象组件。在Visual Basic 6.0中,使用的是被称为ADO(ActiveX Data Object,ActiveX数据对象)的数据对象。
-
以C语言为基础发展出了C++语言,而Java又是以C++为基础开发出的编程语言。如果精通了C语言。(C语言不能OOP,但是C++ JAVA可以)
-
TCP/IP是什么的缩略语?是Transmission Control Protocol/Internet Protocol(传输控制协议和网际协议)的缩略语。(这是使用了TCP和IP两种协议)。31、IP协议用于指定数据发送目的地的IP地址以及通过路由器转发数据。而TCP协议则用于通过数据发送者和接受者相互回应对方发来的确认信号,可靠地传输数据。通常把像这样的数据传送方式称作“握手”(Hankshake)
-
“集线器”(Hub)是负责把各台计算机的网线相互连接在一起的集线设备。“路由器”(Router)是负责把公司内的网络和互联网连接起来的设备。
-
在每一块网卡所带有的ROM(Read Only Memory,只读存储器)中,都预先 烧录了一个唯一的MAC地址。网卡制造厂商负责确定找个MAC地址是什么
-
可用作IP地址的整数是0.0.0.0~255.255.255.255,共4294967296个
-
Subnet Mask 子网掩码 。作用:标识出在32比特的IP地址中,从哪一位到哪一位是网络地址,从哪一位到哪一位是主机地址。比如,把255.255.255.240用二进制表示的话,结果如下所示:11111111.11111111.11111111.11110000 子网掩码中,值为1的那些位对应着IP地址中的网络地址,后面值为0的那些位则对应着主机地址。因此255.255.255.240这个子网掩码表示,其所对应的IP地址前28比特是网络地址,后4比特是主机地址。4个二进制数可以表示的范围是0000-1111,共16个。而因为最开始的0000和最后的1111具有特殊的用途,所以笔者的办公室内最多可以配置14台计算机,他们的主机地址范围从0001-1110。但是这起哄又有一台路由器,所以实际上最多只能放置13台计算机。
-
DHCP的全称是Dynamic Host Configuration Protocol 动态主机设置协议。DHCP服务器上记录着可以被分配到LAN内计算机的IP地址范围和子网掩码的值。
-
“默认网关”,通常会把路由器的IP地址设置在这里。也就是说路由器就是从LAN通往互联网世界的入口(Gateway)(原来Gateway,网关,是通往互联网的入口的意思啊。。。)
-
在一台路由器的路由表中,只会记录通往与之相邻的路由器的路径,而并不会记录世界范围内的所有传输路径。如果数据的发送目的地就在本LAN中,则可以直接发送数据而无需经过路由器转发;反之如果在LAN外(或发送目的地的IP地址不在路由表中),则需要经过路由器转发。
-
数据经过路由器转发的过程称为“路由”(Routing)
-
在互联网中还存在着一种叫作DNS(Domain Name System,域名系统)的服务器。该服务器可以把域名解析成IP地址
-
通常把由主机名和域名组合起来形成的名字称作FQDN(Fully Qualified Domain Name,完整限定域名)。DNS服务器通常被部署在各个LAN中,里面记录着FQDN和IP地址的对应关系表。世界范围内的DNS服务器是通过相互合作运转起来的
-
能够标识作为数据最终接受者的网卡的,还是MAC地址。计算机中有个程序,可以实现由IP地址到MAC地址的转换,这种功能被称作ARP(Address Resolution Protocol,地址解析协议)
-
ARP的工作方式很有意思。他会对LAN中的所有计算机提问:“有谁的IP地址是210.160.205.80吗?有的话请把你的MAC地址告诉我。”通常把这种同时向所有LAN内的计算机发送数据的过程称作“广播(Broadcast)”
-
32、还记得网络的七层模型吗?愣是记不住、不理解吧。其实他就是在硬件之上堆叠若干个软件层。“诸位敲打键盘输入的电子邮件数据,并不是原封不动地发送出去的,而是先通过实现了TCP协议的程序附加上遵守TCP约束所需的信息,然后再通过实现了IP协议的程序,进一步附加上租售IP约束所需的信息。实际上计算机发送的信息是以包为单位的、附加了各种各样信息的数据。硬件上发送数据的是网卡。网卡之上是设备驱动程序(用于控制网卡这类硬件的程序),设备驱动程序之上是实现了IP协议的程序,IP程序之上则是实现了TCP协议的程序,而再往上才是应用程序,比如WEB或电子邮件。这就构成了一幅在硬件之上堆叠了若干个软件层的示意图。”
-
TCP协议使用被称作“TCP端口号”的数字是被上层的应用程序。TCP端口号中有一些是预先定义好的,比如WEB使用80端口,电子邮件使用25端口(用于发送)和110端口(用于接受)
-
文本数据可以由各种各样的字符构成。其中每个字符都被分配了一个数字,我们称之为“字符编码”。定义了应该把哪个编码分配给哪个字符的字符编码体系叫做字符集
-
信息摘要(message digest),也就是数字签名,可以防止数据被篡改、证明数据发送者是谁
-
JIS(日本工业标准)上写着算法的定义:被明确定义的有限个规则的集合,用于根据有限的步骤解决问题。
-
建议从事编程工作的人手中要有一本能作为算法辞典的书。比如,《算法技术手册》(George T.Heineman、Gary Pollice 杨晨、李明(译) 机械工业出版社) 《算法精解:C语言描述》(Kyle Loudon)。曾经有一本被誉为凡是立志成为程序员的人都应该去读的名著,Niklaus Wirth的Algorithms+Data Structures=Programs
-
面向对象编程就是通过把组件拼装到一起进行编程的方法
-
CSMA/CD(Carrier Sense Multiple Access with Collision Detection) : 带冲突检测的载波监听多路访问。以太网使用了一种略显粗糙的方法连接LAN内的计算机。以太网中的每台计算机都需要先确认一件事:在网线上有没有其他的计算机正在传输电信号,也就是说要先确保没有人在占用网络,然后才能发送自己想传输的电信号。谁先抢到了网线的使用权,谁就先发送。万一遇到了多台计算机同事都想发送电信号的情况,只需要让这些计算机等待一段时间后重新发送相同的电信号。
总结
-
IC、引脚 IC : integrated circuit 集成电路 引脚是它上面的小jio jio。每个引脚上的电压要么是0V、要么是+5V。通常将1个二进制数(也就是数字IC上1个引脚所能表示的0或者1)所表示的信息称作“1比特”,将8个二进制数(也就是8比特)称作“1字节”。比特是信息的最小单位,字节是信息的基本单位。
-
Million:一百万;兆 Billion:十亿 hundred million:一亿
-
所谓企业级的程序,指的是对可维护性有较高要求的程序
-
cmd 命令行下,输入hostname 回车,可以查看自己计算机的主机名。想要查看FQDN的话,执行ipconfig /all 命令。结果画面中,Host Name后面显示的是主机名,而DNS Suffix Search List后面显示的是域名。将两者组合,得到FQDN。
-
cmd命令下,输入apr -a 可以查看ARP缓存表
-
这本书讲了以下范畴的内容,但都是通俗易懂且简单谈谈,具体深入还得靠自己呀。 基础知识、硬件、软件、编程、数据库、网络。
-
单位换算 b k kb mb gb
-
“时钟信号”驱动CPU运转。时钟发生器输出时钟信息。时钟信号的频率可以衡量CPU的运转速度。
-
程序的作用是驱动硬件工作。
-
计算机的硬件有三个基本要素:CPU、内存和I/O。CPU负责解析、执行程序、从内存或I/O输入数据,在内部进行运算,再把运算结果输出到内存或I/O
-
CPU有寄存器、I/O也有寄存器。但是CPU的寄存器不仅能存储数据,还能对数据运算。各寄存器的解析图:
-
CPU执行完一条指令,PC寄存器就累加,往下走。PC肌醇器的值是啥,就跳转到哪个内存地址实现。
-
遇到算法不要怕,可以画流程图来思考!
-
在编写程序中不需要编写有关中断处理的代码。因为处理中断请求的程序,或是内置于被烧录在计算机ROM中的BIOS系统(Basic Input Output System,基础输入输出系统)中,或是内置于Windows等操作系统中。
最后
这本书很多语言都给人一种“不如听君一席言”的醍醐灌顶的感觉。书中值得摘抄的内容很多,但是全部铺上来就太水了。读完本书,回到了计算机的本质,以计算机的三个原则开始,介绍了计算机的结构(怎么自己买材料制造一个微型计算机)、手工汇编(软件控制硬件)、程序流程(程序启动时计算机内部的运转)、算法、数据结构、面向对象编程、数据库、TCP/IP网络、数据加密、XML、计算机系统开发以及SE的相关知识。其实最大的收获是从硬件开始,明天计算机大概是怎么运行的,明白了为啥输入代码可以启动程序、调用系统,明白了内存等机制。发现,计算机硬件很好玩~ 后面还要了解程序是怎么运行的,弄懂这个,以后学习新语言、新技术,应该不会那么怂了吧。