计算机代码基础知识(从零开始学编程)
专升本计算机基础知识点归纳
第一章 信息技术与计算机文化
1 信息:是指自然界、人类活动和人类思维活动中普遍存在的一切物质和事物的属性(在计算机上以数据形式存储)
2数据:存储在某种媒体上加以鉴别的符号资料(在计算机上以二进制形式存储)
3.文件:存储在外存上的一组相关信息集合
4.现在社会三大资源——物质、能源、信息
5.世界上第一台计算机:ENIAC 1946年 宾夕法尼亚大学 十进制
6.冯·诺依曼——计算机之父,提出存储程序工作原理
7.图灵奖——计算机界的诺贝尔奖
第一代 电子管 机器语言、汇编语言
8. 计算机发展,根据元件分为 第二代 晶体管 高级程序语言
第三代 集成电路 出现操作系统
第四代 超大规模集成电路
9. 计算机应用
10. 计算机发展趋势:巨型化、微型化、网格化、智能化
11. 各进制数据转换 逻辑运算:与(∧)、或(∨)、非( ̄)、异或(+)
12. 数据单位:1G=1024MB 1M=1024KB 1KB=1204B 1B=8bite
13. 字符编码 ASCII ,用8位表示一个字符,最高位永为0,所以只用到7位,可表示128个字符,同一字母的ASCII值小写字母比大写字母大32(20H)
汉字交换码 GBK18030 连续两个字节表示一个汉字
汉字编码 机内码 把汉字交换码2个字节最高位改为1
字形码 点阵码、矢量码
输入码 音码、形码、流水码、音形结合码
14.计算机结构
15.程序:是由一系列指令组成的为解决某一问题而设计的一系列有序指令集合
总线:数据总线、地址总线、控制总线
机器语言
16.计算机语言 汇编语言 汇编语言 汇编 机器语言
高级语言 高级语言 编译 机器语言
17.CPU参数:主频、字长(计算机一次所能处理的二进制位数)
文字
声音 mp3 mid wav wma 位图:色彩鲜艳、放大失真、数据量大
18.多媒体 图形 jpg bmp gif 矢量图:色彩不鲜艳、放大不失真、数据量小
图像
动态图像 mpeg rm rmvb avi 3gp mp4
19.多媒体压缩技术
第二章 操作系统
1.操作系统功能:
①处理机管理 ②存储管理 ③设备管理 ④文件管理 ⑤网络与通信管理 ⑥用户接口
2.操作系统分类:
①批处理操作系统 ②分时~~ ③实时~~ ④嵌入式~~ ⑤个人计算机~~ ⑥网络~~ ⑦分布式~~
DOS(disk operation system):单用户 单任务
3.常见操作系统 Windows xp:单用户 多任务
Unix:多用户 分时操作系统
Linux:
4.文件命名原则:长度不大于255个字符,不能用 ? * / 文件属性:隐藏、只读、存档、系统
5. 选中多个连续文件——shift Alt+F4
选中多个不连续文件——Ctrl 文件/关闭
复制屏幕——PrintScreen 关闭文件方法 单机右上方X
复制当前窗口——Alt+PrintScreen Alt→F→X
软回车(强制换行、不分段)——Shift+Enter 任务管理器
第三章 word
1.word视图:普通、页面视图(默认、与打印结果一样、显示分页效果)、大纲视图、web版式、阅读版式视图
2.页眉页脚不能随文档输入,而是单独设置,页眉页脚只有在页面视图下才能看到
Home 光标移至当前行开始
End 光标移至当前行尾部
PageUp 向前翻页
PageDown 向后翻页
Ctrl+ ← 左移一个英文单词或汉字
3.快捷键 Ctrl+ → 右移一个英文单词或汉字
Ctrl+ Home 移至文件开始位置
Ctrl+End 移至文件结尾
Ctrl+A 全选
Ctrl+S 保存
4word模板文件扩展名 .dot
5.Word功能:制作表格、图文混排、格式化文档、网页制作
7.Word底纹:文字底纹、段落底纹
8.图片环绕方式:嵌入型、四周型、紧密型、浮于文字上方、衬于文字下方、上下型环绕、穿越型环绕
9.剪切板是内存中一个临时存储区
菜单 (格式→段落)
10. 段落缩进 水平标尺 (拖动水平标尺)
工具栏 (增加、减少缩进量)
第四章 Excel
1.Excel功能:数据库管理(关系型)、表格制作、图表功能
2.每个工作表有65536×256单元格,启动后默认打开3个工作表,但此数目可以自由设置(1~255)
3.Excel中每一行称为记录,一列称为字段
4.单元格:工作表中行与列交叉部分,每个单元格最大限制(215-1),单元格只能显示210个,编辑栏才能全部显示
5.将数字作文本输入,用 '数字'(即将数字用单引号括起来);输分数时先输一个0加空格,如:0 2/3 ;日期分隔符用/或-,时间用:,如2008-10-2 或2008/10/2 10:20
纯数字、文本型:复制(Ctrl+拖动 数字自动加1)
6.填充(鼠标拖动填充柄) 字母加数字:数字自加1,字母不变,如 A1→A2 A3 A4 A5
日期:自增1,2008/10/2→2008/10/3(ctrl+拖动复制)
7.数据清除(选定单元格后按Del):清除单元格内容(数据、格式、备注)
数据删除:数据和单元格都删除 删除行或列,下边的行右边的列自动移到填补空缺
8.绝对引用:引用的不随公式位置变化,如 $B$2
相对引用:引用的随公式位置变化 (默认)如B2
混合引用:同时包含绝对引用和相对引用 如$B2、B$2
9.表格的计算通过函数实现。常用函数——求和:Sum 求平均:average 计数:count 条件计数:countif 排名:rank 最大值max 最小值:min
10.Excel图表分两类
嵌入式:图表和数据放在同一工作表中
独立式:图表放在另一工作表中
图表创建后可以进行修改。工作表数据改变,图表会动态改变
11.Excel中在对数据进行分类汇总前必须进行排序操作
12.Excel数据清单有数据库功能,可以实现数据的排序、筛选、分类汇总、统计、查询
13.单元格显示 “#####”——列宽不够 “#VALUE”——数值错误
14.文本连接符: ,如 计算机文化=计算机文化
第五章 Powerpoint
1.Powerpoint功能:制作演示文稿
普通视图(幻灯片、大纲、备注)主要的编辑视图
2.Powerpoint视图 幻灯片浏览视图 主要用于幻灯片之间添加、删除、移动及添加切换效果
幻灯片放映视图 只能观看,不能修改
3.外观设计方法:①应用设计模板 ②母版 ③配色方案
4.Office对齐方式
Powerpoint、Word:左对齐、右对齐,居中对齐、两端对齐、分散对齐
Excel: 左对齐、右对齐,居中对齐
5.设置为隐藏的幻灯片打印时也能打印出来
6.超链接可以链接到:①原有的文件或网页 ②本文档中的位置 ③新建文档 ④电子邮件地址
7.母版:用于设置每张幻灯片的预设格式,包括每张幻灯片标题、正文文字位置和大小、项目符号样式、背景图案,分:设计母版、讲义母版、备注母版
8.对ppt文件进行打包后可以在没有安装Powerpoint的计算机上运行(选择“文件/打包”,默认情况下包含文件和 Powerpoint播放器)
9.结束放映方法:①按ESC键②鼠标右键/结束放映③按回车键
第六章数据库
1.基本概念
①数据:描述事物的符号记录,是数据库中存储的基本对象
②数据库:存储在计算机内的、有组织的、可共享的数据集合
③数据库管理系统:一个完成科学组织、存储、获取、维护数据库的系统软件
④数据库系统:包括数据库、数据库管理系统、应用系统、数据库管理员、用户
2.关键字(主键):用于唯一标识表中每条记录的一个字段
3.Access是Microsoft开发的Office中的一款数据库软件,扩展名 .mdb
表: 存储数据、一个数据库包含多个表,各表既相互独立,又相互联系
查询:按索引检索数据
窗体:方便浏览、输入及更改数据的窗口
4.Access 2003 对象 报表:将数据分类汇总并打印出来
Web页:一种网页形式,可以查看、修改数据库中数据
宏: 自动执行一系列操作
模板:用于编程
5.Access是关系型数据库,同时具有面向对象编程设计能力
第七章计算机网络
1.计算机网络物理连接由计算机系统、通信链路和网络节点组成,逻辑上计算机网络分为通信子网和资源子网
2.计算机网络功能:①数据通信 ②资源共享 ③分布式处理 ④提高系统可靠性
3.网络划分
4.OSI(开发系统互连开发模型)模型:(记住各层名称,作用理解就行,不需背过)
应用层:具体做什么,如发送一封邮件
表示层:数据转换、压缩、加密 高层
会话层:对数据传输进行管理 、协调
传输层:建立一条不会出错路由,保证无差别传输
网络层:选择合适路由
数据链路层:数据校验,保证不出错
物理层:提供物理连接,如光纤或电缆连接网络 底层
(打个比喻,两个公司要签订一份合同,应用层就是老总决定合同内容;表示层就是秘书以什么格式、语言、方式将合同内容写出来;
会话层就是下层商议什么时候,谁发送合同,传输层就是两公司公司某部门间建立联系,保证合同安全顺利发到对方公司,如果合
同丢失,进行重新发送;网络层就是确定对方公司位置,并选择走那条路传送文件;数据链路层决定这条路具体的每一个路口怎么
走;物理层决定用什么交通工具传送文件,是汽车还是火车)
5.TCP/IP模型:网络接口层、网际层、传输层、应用层 (由底层到高层顺序)
6.网络设备
7.
8.传输介质
9.IP地址=网络地址+主机地址
A:1~127 B:128~191 C:192~223
10.顶级域名:国际域名、通用域名、国家域名
常用组织域名:cn(中国) com(商业组织 org(其他组织) edu(教育机构) gov(政府部门)
mil(军事部门) net(主要网络支持中心) int(国际组织)
11.防火墙缺陷:①不能防范不经防火墙攻击 ②不能防止感染了病毒的软件或文件的传输 ③不能防止数据驱动式攻击
12.计算机病毒
①概念:编制或在计算机程序中插入的破坏计算机功能或毁坏数据,影响计算机使用并能自我复制的一组计算机指
令或程序代码
②特点:可执行性、破坏性、传染性、潜伏性、针对性、衍生性、抗病毒软件性
③分类:引导区病毒、文件型病毒、混合型病毒、宏病毒
13.木马不是病毒,因木马不具传染性
计算机c语言基础知识
计算机c语言的特性
C语言是世界上最流行、使用最广泛的高级程序设计语言之一。在操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。C语言的主要特性有以下几种:
1、C是高级语言:它把高级语言的基本结构和语句与低级语言的实用性结合起来。
2、C是结构式语言:结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。
3、C语言功能齐全:具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。
4、C语言适用范围大:适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。
5、C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。C++在这方面做了改进,在保留了指针操作的同时又增强了安全性。
6、C语言创始人D.M.Ritchie6、C语言文件由数据序列组成:可以构成二进制文件或文本文件常用的C语言IDE有Microsoft Visual C++,Dev-C++,Code::Blocks,Borland C++,Watcom C++,Borland C++ Builder,GNU DJGPP C++,Lccwin32 C Compiler 3.1,High C,Turbo C,C-Free,win-tc,xcode等。
计算机c语言的语法结构
1.顺序结构
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构。
2.选择结构
选择结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。选择结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的选择语句。
3.循环结构
循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do while循环和for循环。
4.模块化程序结构
C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此常说:C程序=主函数+子函数。因此,对函数的定义、调用、值的返回等中要尤其注重理解和应用,并通过上机调试加以巩固。
计算机c语言基础知识
【知识点1】C程序
C语言程序结构有三种: 顺序结构 , 循环结构(三个循环结构), 选择结构(if 和 switch)
【知识点2】main函数
每个C语言程序中main 函数是有且只有一个。读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。
【知识点3】存储形式
计算机的数据在电脑中是以二进制的形式保存。最低的存储单元是bit(位),位是由为 0 或者1构成。 byte 是指字节, 一个字节 = 八个位。数据存放的位置就是它的地址。
【知识点4】注释
是对程序的说明,可出现在程序中任意合适的地方,注释从“/*”开始到最近一个“*/”结束,其间任何内容都不会被计算机执行,注释不可以嵌套。
【知识点5】书写格式
每条语句的后面必须有一个分号,分号是语句的一部分。一行内可写多条语句,一个语句可写在多行上。
【知识点6】标识符
合法的用户标识符考查:
合法的要求是由字母,数字,下划线组成。有其它元素就错了。
并且第一个必须为字母或则是下划线。第一个为数字就错了。
C语言标识符分如下3类
(1)关键字。它们在程序中有固定的含义,不能另作他用。如int、for、switch等。
(2)预定义标识符。预先定义并具有特定含义的标识符。如define、include等。
(3)用户标识符。用户根据需要定义的标识符,符合命名规则且不与关键字相同。
关键字不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If 是可以做为用户标识符。因为If 中的'第一个字母大写了,所以不是关键字。
【知识点7】实型数据
实型数据的合法形式:小数形式和指数形式。掌握判定指数形式合法性。
2.333e-1 就是合法的,且数据是2.333×10-1。
考试口诀:e 前e 后必有数,e 后必为整数。
【知识点8】字符
字符数据的合法形式::
'1' 是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。
'0' 的ASCII 数值表示为48,'a' 的ASCII 数值是97,'A'的ASCII 数值是65。
字符型和整数是近亲:
char a = 65 ;
printf(“%c”, a); 得到的输出结果:a
printf(“%d”, a); 得到的输出结果:65
一般考试表示单个字符错误的形式:'65' "1"
字符是可以进行算术运算的,记住: '0'-0=48
大写字母和小写字母转换的方法: 'A'+32='a' 相互之间一般是相差32。
【知识点9】整型数据
整型一般是两个字节, 字符型是一个字节,双精度一般是4 个字节:
考试时候一般会说,在16 位编译系统,或者是32 位系统。碰到这种情况,不要去管,
一样做题。掌握整型一般是两个字节, 字符型是一个字节,双精度一般是4 个字节就可以了。
【知识点10】转义字符
转义字符的考查:
在程序中 int a = 0x6d,是把一个十六进制的数给变量a 注意这里的0x 必须存在。
在程序中 int a = 06d, 是一个八进制的形式。
在转义字符中, ’x6d’ 才是合法的,0 不能写,并且x 是小写。
‘141’ 是合法的, 0 是不能写的。
‘108’是非法的,因为不可以出现8。
【知识点11】算术运算
算术运算符一共有+、—、*、/、%这五个。%符号两边要求是整数。不是整数就错了。
三种取整丢小数的情况:不是四舍五入是舍掉小数部分。
1、int a =1.6;
2、(int)a;
3、1/2; 3/2;
【知识点12】强制类型转换
将一个运算对象转换成指定类型,格式为(类型名)表达式
一定是 (int)a 不是 int(a),注意类型上一定有括号的。
注意(int)(a+b) 和(int)a+b 的区别。前是把a+b 转型,后是把a 转型再加b。
【知识点13】赋值
是表达式就一定有数值。
赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。
复合赋值运算符:注意:a*=m+2 是 a=a*(m+2)
自加、自减表达式:假设a=5,++a(表达式的值为6), a++(表达式的值为5);
j=a++;等价于j=a;a=a+1; 而j=++a;等价于a=a+1;j=a;。
考试口诀:++在前先加后用,++在后先用后加。
【知识点14】逗号运算
逗号表达式:优先级别最低; 表达式的数值逗号最右边的那个表达式的数值。
(2,3,4)的表达式的数值就是4。
【知识点15】数制转换
一定要记住二进制 如何转换成十进制。
八进制是没有8 的,逢8 进1,018 的数值是非法的。
【知识点16】位运算
会有一到二题考试题目。
C语言提供6种位运算符:按位求反~,按位左移,按位右移,按位与,按位异或|,按位或^。
总的处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。
异或运算的规则:0异或1得到1,0异或0得到0,1异或1得到0。可记为“相同为0,不同为1”。
在没有舍去数据的时候,左移一位表示乘以2;右移一位表示除以2。
零基础怎样写代码?
1、最重要的是学会写程序:
C语言也好,python也好,你得学会把自己的思考用程序实现。举个例子,你想制定计划表,安排自己的时间,那这个问题就可以写个程序来实现;你想做笔记、管理自己的文件,这也是一个程序。从简单的、直接的几行十几行程序开始,比如计算器;到复杂的小工具,比如大数计算器。
这个过程中你逐渐明白数组、指针、内存布局、函数,了解递归、栈、链表,然后学基本的数据结构。之后再写程序,你需要考虑代码的优雅、简单、时间空间效率高,使用什么样的方式来实现最好。最后你学会了复用,学会了调用系统API,学会了想什么就能用代码实现什么或者知道它不能被实现,你就学会了编程。
2、不要灰心,不要迷茫,要有毅力:
你才学了半年,和周围所谓的大牛比是没有意义的。而且编程这东西,个人感觉是入门可能会有困难,但是随着接触到的越多,进步会越来越快的。所以你难道没有发现你的巨大潜力吗?每个大牛也都是从牛犊子开始成长的。
3、关于编程语言:
语言只是工具,没有具体的好与不好,只有合适不合适,喜欢不喜欢。
4、关于读书:
有条件的话最好看国外的原版书或者中文翻译,网上很多pdf格式可以下载的。
5、关于写代码:
写代码是基本功,代码写不好的,嘴上说多牛逼,多半是瞎扯淡。
6、关于总结:
总结记录,加深记忆,方便以后查看。多进行总结记录也会起到不错的效果。
大学计算机基础知识点整理
1、计算机组成原理
如果你不是做操作系统/驱动程序的,直接和硬件打交道的机会很少,因为操作系统已经把他们屏蔽掉了,提供了抽象的API给我们使用。
但是还必须理解冯诺依曼体系的结构,CPU和内存,硬盘,各种外设之间的关系,寄存器、缓存等知识。CPU有哪些指令,如何执行这些指令,如果实现数组,结构体,函数调用,这就涉及到汇编的知识。像原码,反码,补码,定点数、浮点数的表示和运算也是编程中必备的知识,几乎每种语言都要涉及。
现在很多语言都是在虚拟机上运行的,你只要是了解了计算机的组成原理,再去看哪些虚拟机,就会发现概念都是相通的。另外CPU中的缓存,缓存一致性协议,DMA的异步思想都会在应用层中有所体现。《编码》是一个更加科普性,但是也更加有趣的讲组成原理的书。
2、操作系统
操作系统是比较枯燥的,站在应用层的角度,我认为重点是掌握操作系统对外提供的抽象,包括进程、线程,文件,虚拟内存,以及进程间的通信问题。
几乎所有的编程语言都会涉及到对多进程或者多线程编程的支持,特别是多线程的并发编程,所以必须得搞明白他们的本质是什么,线程都有哪些实现方式。得真正地体会到“进程是资源分配的最小单位,线程是调度的最小单位。”这句话的含义。
几乎所有的编程语言都会涉及到锁和死锁,最好在最底层理解锁是怎么实现的。需要理解虚拟内存和物理内存直接的关系,分段和分页,文件系统的基本原理。对于进程的调度,页面分配/置换算法,磁盘的调度算法,I/O系统,我认为优先级比较低。
3、数据库
这个和日常工作结合极其紧密,不用我再多说,包括最基本的SQL,各种范式,事务及其隔离级别,事务的实现方式,索引及其实现方式,B+树等等。
4、编译原理
你一辈子也许都不会去写一个编译器,但是很有可能会利用现成的工具去生成/操作一个抽象语法树(AST),甚至可以会写一个DSL(领域特定语言)。所以你得理解词法分析、语法分析、语义分析,中间代码生成,代码优化这个基本编译的过程。
扩展资料
Cache的原理
如果存在(命中),则直接返回该数据;如果不存在(失效),再去访问内存——先把内存中的相应数据载入缓存,再将其返回处理器。
提供“高速缓存”的目的是让数据访问的速度适应CPU的处理速度,通过减少访问内存的次数来提高数据存取的速度。
Cache技术所依赖的原理是”程序执行与数据访问的局部性原理“,这种局部性表现在两个方面:时间局部性:如果程序中的某条指令一旦执行,不久以后该指令可能再次执行,如果某数据被访问过,不久以后该数据可能再次被访问。
计算机基础知识都包括哪些?
基础知识重要,但是具体来说,哪些点重要呢?
今天我就试图总结一下,也欢迎大家补充。
信息的表示和处理
计算机如何表示整数:有符号数和无符号数,尤其是如何用补码表示负数,数字的取值范围。
计算机如何表示浮点数,为什么小数的二进制表示法只能近似表示十进制小数。
数值的转换、移位
这几点非常重要,因为几乎所有的编程语言都有数据类型,而最基本数据类型必然包括整数和浮点数。
搞不清这些表示和运算,在编程中就会遇到一些稀奇古怪的问题。
从汇编层面理解程序的执行
顺序、分支、循环、函数调用、数组、结构体等在汇编层面是怎么实现的,寄存器和内存是怎么使用的。
理解了这些其实也就理解了冯诺依曼计算机体系结构,这是计算机学科一个基础性的东西。
知道程序在底层是怎么运转的, 对于学习各种虚拟机有很大的帮助,比如JVM,它要解析执行的是字节码,字节码本质上要表达的就是这些东西,只不过有所扩展。
理解了栈帧,就能理解函数调用的本质,递归,以及尾递归的实现。还有安全相关的概念,如缓冲区溢出这个臭名卓著的漏洞及其防范办法。
进程和线程
程序员必备的知识,不了解这个,简直是无法编程。
需要掌握进程的地址空间,代码在哪里,堆在哪里,栈在哪里。
要准确理解进程和线程之间的关系,为什么说进程是拥有资源的基本单位, 线程是CPU调度的基本单位?
进程切换和线程切换之间的区别和联系。
他们是如何创建,执行,有哪些状态,状态之间的转换。 由此会涉及到并发和并行,线程之间的竞争和合作。
锁的本质(硬件层面),乐观锁,悲观锁,死锁等问题。
线程的实现方式,用户级线程和内核级线程的对应方式。
在编程的过程中,有些知识点会直接使用,如多线程编程,锁。 还有一些概念能用到很多地方,例如CAS,不仅仅是编程语言的概念,还能在更新数据库时使用。再比如你理解了线程的实现方式,迅速就能掌握go语言中并发的手段:goroutine。
存储器的层次结构
Tomcat用了多线程执行请求,Redis用了单线程来处理请求,Node.js也用了单线程来,这是为什么? 秘密都在存储器的层次结构。
人类制造的计算机设备之间有着巨大的速度差异:
总之,CPU超级快,内存比较快,硬盘非常慢,网络更慢, 这个速度差异是IT行业的一个核心问题,人类想了很多办法试图去弥补这个差异:多线程,缓存,异步,多路复用,硬件层面的DMA。
记着下面这张图,每当你遇到某个软件的特性的时候,想一想和它有什么关系:
数据结构和算法
它的重要性我罗嗦过很多次了,不用再重复了, 我就举个最简单的例子: 理解了B+ Tree才能理解MySQL的InnoDB的索引,理解了索引才能更好地优化查询,对吧?
计算机网络
现在的程序基本上都是网络程序, 所以这也是一个必备的基础知识,学习计算机网络的一大好处就是和工作直接相关,能直接使用,比较有动力。
HTTP协议肯定跑不掉,TCP,UDP也得会,尤其是TCP可靠传输的原理:如何在一个不可靠的网络中进行可靠的传输, 这是无数前辈总结的经验,一定得掌握。
要理解什么是通信协议,也许某一天你自己就需要定制一个协议来传输数据。
分组交换是什么意思? 协议分层的本质是什么? 什么叫无状态的协议?
Socket相关的编程更是重点,尤其是涉及到服务器端高并发的时候,如何维持和处理这些海量的socket, epoll等技术就得上场了。
还有非常重要的HTTPs的基本原理,也是网络安全的精华所在:对称加密,非对称加密,消息摘要,数字证书,中间人攻击。
数据库
不多说,关系模型、范式、SQL、索引、事务等知识都得掌握,尤其是要了解他们的实现方式。
分布式的基础知识
这些已经偏向应用层面了,但是现在很多系统都是分布式的了,分布式就变成了一种基础知识。
系统通信:RPC, 消息队列等
负载均衡的原理
CAP原理,BASE原理,幂等性,一致性模型(强一致性,最终一致性.....)和相关协议(两阶段提交,Raft,Paxos......)
数据分片:取模算法,一致性Hash,虚拟桶
基本的设计思想
下面这几种设计思想对我影响很大,需要大家特别注意。但是掌握起来却很不容易,需要在实践中不断地体会:
正交:各个概念之间可以独立变化
抽象:抛弃细节,找到本质和共性
《深入理解计算机系统》一书中提到:“指令集是对CPU的抽象, 文件是对输入/输出设备的抽象, 虚拟存储器是对程序存储的抽象, 进程是对一个正在运行的程序的抽象, 而虚拟机是对整个计算机(包括操作系统、处理器和程序)的抽象。 如果你对这句话透彻理解了,说明对计算机系统的认识已经很深刻了。
分层:我只想和我的邻居打交道, 如网络协议,Web应用开发。
分而治之:大事化小,小事化了,架构设计必备。
关键点来了,怎么学习呢?
我原来的方式是先看书,看了很多书,数据结构,操作系统,汇编,网络...... 这种办法的最大问题就是枯燥(嗯,那时候还没有码农翻身这样用故事讲解技术的文章)。
理论多,实践少,很多知识点体会不深, 等到参与的项目多了,Coding多了,这些知识点才慢慢地鲜活起来。
一种更加有效的办法是从工作中用到的知识点出发,从这个知识点向外扩展,由点到线,由线到面,然后让各个层次都连接起来,形成一个立体的网络。
切记,学习是一个螺旋上升的过程,想要上升就得深度思考,多问几个为什么。
比如工作中用到了Redis,你在学习过程中发现这个Redis用了单线程来处理读写请求,为什么要这么做? 对于成千上万的请求它是如何处理的? 然后再联想一下别的软件:Tomcat为什么不这么干? 想回答这些问题,需要发掘很多基础知识。
这样做的次数多了,积累到一定程度,量变就会引起质变,整个系统就被你看透了,你的知识又扩大了一圈,更多的疑问出现了......