2021年最新整理,名企校招各大岗位的技能树,含技术细节,Java,C/C++,前端,运维,测试,运营岗位。持续更新中...
计算机组成
计算机组成剖析
冯·诺依曼计算机结构
计算机执行指令的工作过程
指令系统分析
高级语言、汇编语言和机器语言之间的关系
-
- 机器语言:计算机执行的二进制命令,都是0和1表示的。
-
- 汇编语言:具有一定意义的文字命令,与机器语言一一对应。汇编语言可以通过汇编得到机器语言,机器语言可以通过反汇编得到汇编语言。汇编过程还包括变量内存管理,即经过汇编之后所有的变量和函数都变成了地址,而常量也变成了对应的值。但是汇编语言还是不够直观,一个简单的动作需要大量的语句来描述,因此又有了高级语言。
-
- 高级语言:更简单,符合人们的习惯,也更容易理解和修改。高级语言经过编译器编译之后可以得到目标程序。编译器的作用就是把高级语言的源代码转换成对应平台的目标代码。高级语言书写比较简单,但是翻译起来比较复杂,同样的高级语言语句可以有不同的机器语言实现方法。因此同一段高级语言经过不同的编译器编译之后会得到不同的目标程序,就是说高级语言与汇编/机器语言之间不再是一一对应的关系了。上面说到汇编之后源代码中的变量都变成了地址,所以用可执行文件(如exe等)进行反汇编之后得到的也是一堆地址,几乎不可能得到源代码。 另外,关于跨平台,也是针对源代码而言的。一段源代码转移到另一个平台上要经过重新编译、重新获得目标程序才能运行,前提是源代码没有依赖于平台的特性。不过即使源代码对平台有依赖性,重新编译后也可以进行一定改动再使用。
计算机算术和逻辑运算方法及其实现
微处理器和CPU
-
- 功能不同:微处理器由一片或少数几片大规模集成电路组成的**处理器。CPU全称是**处理器,是电子计算机的主要设备之一,电脑中的核心配件。其功能主要是解释计算机指令以及处理计算机软件中的数据。电脑中所有操作都由CPU负责读取指令,对指令译码并执行指令的核心部件。
-
- 所属范围不同:微处理器是微型处理器的统称,比如显卡的GPU、手机的处理器,以及一些智能家电的处理器,是一个执行所有计算功能的部件。而CPU是电脑的一个组成部件。
-
- 名称不同:微处理器显然是微型的、功耗低、主频低、功能较弱的,现多指小型电子设备如手机、家用电器使用的处理单元。大型计算机的cpu显然不能叫微处理器,甚至pc的cpu一般也没有叫微处理器的。
存储系统
输入输出系统的基本原理和关键技术
计算机网络
网络层次划分
OSI七层网络模型
子网掩码及网络划分
ARP/RARP协议
路由选择协议
TCP/IP协议
UDP协议
DNS协议
NAT协议
DHCP协议
HTTP协议
数据结构
队列
-
- 非阻塞队列:ConcurrentLinkedQueue(无界线程安全),采用CAS机制(compareAndSwapObject原子操作)。
- 阻塞队列:ArrayBlockingQueue(有界)、LinkedBlockingQueue(无界)、DelayQueue、PriorityBlockingQueue,采用锁机制;使用 ReentrantLock 锁。
集合
链表、数组
字典、关联数组
栈
- 《java数据结构与算法之栈(Stack)设计与实现》
- 《Java Stack 类》
- 《java stack的详细实现分析》
- Stack 是线程安全的。
- 内部使用数组保存数据,不够时翻倍。
树
二叉树
每个节点最多有两个叶子节点。
完全二叉树
- 《完全二叉树》
- 叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。
平衡二叉树
左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
二叉查找树(BST)
二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree)。
红黑树
- 《最容易懂得红黑树》
- 添加阶段后,左旋或者右旋从而再次达到平衡。
- 《浅谈算法和数据结构: 九 平衡查找树之红黑树》
B,B+,B*树
MySQL是基于B+树聚集索引组织表
- 《B-树,B+树,B*树详解》
- 《B-树,B+树与B*树的优缺点比较》
- B+树的叶子节点链表结构相比于 B-树便于扫库,和范围检索。
LSM 树
LSM(Log-Structured Merge-Trees)和 B+ 树相比,是牺牲了部分读的性能来换取写的性能(通过批量写入),实现读写之间的平衡。 Hbase、LevelDB、Tair(Long DB)、nessDB 采用 LSM 树的结构。LSM可以快速建立索引。
-
- B+ 树读性能好,但由于需要有序结构,当key比较分散时,磁盘寻道频繁,造成写性能较差。
- LSM 是将一个大树拆分成N棵小树,先写到内存(无寻道问题,性能高),在内存中构建一颗有序小树(有序树),随着小树越来越大,内存的小树会flush到磁盘上。当读时,由于不知道数据在哪棵小树上,因此必须遍历(二分查找)所有的小树,但在每颗小树内部数据是有序的。
-
《LSM树(Log-Structured Merge Tree)存储引擎》
- 极端的说,基于LSM树实现的HBase的写性能比MySQL高了一个数量级,读性能低了一个数量级。
- 优化方式:Bloom filter 替代二分查找;compact 小数位大树,提高查询性能。
- Hbase 中,内存中达到一定阈值后,整体flush到磁盘上、形成一个文件(B+数),HDFS不支持update操作,所以Hbase做整体flush而不是merge update。flush到磁盘上的小树,定期会合并成一个大树。
BitSet
经常用于大规模数据的排重检查。
常用算法
排序、查找算法
选择排序
- 《Java中的经典算法之选择排序(SelectionSort)》
- 每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。
冒泡排序
- 《冒泡排序的2种写法》
- 相邻元素前后交换、把最大的排到最后。
- 时间复杂度 O(n²)
插入排序
快速排序
- 《坐在马桶上看算法:快速排序》
- 一侧比另外一侧都大或小。
归并排序
- 《图解排序算法(四)之归并排序》
- 分而治之,分成小份排序,在合并(重建一个新空间进行复制)。
希尔排序
TODO
堆排序
- 《图解排序算法(三)之堆排序》
- 排序过程就是构建最大堆的过程,最大堆:每个结点的值都大于或等于其左右孩子结点的值,堆顶元素是最大值。
计数排序
- 《计数排序和桶排序》
- 和桶排序过程比较像,差别在于桶的数量。
桶排序
- 《【啊哈!算法】最快最简单的排序——桶排序》
- 《排序算法(三):计数排序与桶排序》
- 桶排序将[0,1)区间划分为n个相同的大小的子区间,这些子区间被称为桶。
- 每个桶单独进行排序,然后再遍历每个桶。
基数排序
按照个位、十位、百位、...依次来排。
二分查找
-
- 要求待查找的序列有序。
- 时间复杂度 O(logN)。
-
- while + 递归。
Java 中的排序工具
- 《Arrays.sort和Collections.sort实现原理解析》
- Collections.sort算法调用的是合并排序。
- Arrays.sort() 采用了2种排序算法 -- 基本类型数据使用快速排序法,对象数组使用归并排序。
布隆过滤器
常用于大数据的排重,比如email,url 等。 核心原理:将每条数据通过计算产生一个指纹(一个字节或多个字节,但一定比原始数据要少很多),其中每一位都是通过随机计算获得,在将指纹映射到一个大的按位存储的空间中。注意:会有一定的错误率。 优点:空间和时间效率都很高。 缺点:随着存入的元素数量增加,误算率随之增加。
- 《布隆过滤器 -- 空间效率很高的数据结构》
- 《大量数据去重:Bitmap和布隆过滤器(Bloom Filter)》
- 《基于Redis的布隆过滤器的实现》
- 基于 Redis 的 Bitmap 数据结构。
- 《网络爬虫:URL去重策略之布隆过滤器(BloomFilter)的使用》
- 使用Java中的 BitSet 类 和 加权和hash算法。
字符串比较
KMP 算法
KMP:Knuth-Morris-Pratt算法(简称KMP) 核心原理是利用一个“部分匹配表”,跳过已经匹配过的元素。
深度优先、广度优先
贪心算法
回溯算法
剪枝算法
动态规划
朴素贝叶斯
-
- P(B|A)=P(A|B)P(B)/P(A)
推荐算法
最小生成树算法
最短路径算法
设计模式
创建型模式
结构型模式
行为型模式
实际应用案例
虚拟化
I/O虚拟化
网卡虚拟化
CPU虚拟化
内存虚拟化
网络安全
网络安全常识
web安全前后端基础
信息的扫描与嗅探
病毒知识入门
密码攻击的原理和方法
后门技术
网站攻防
端口扫描工具
操作系统
进程管理
- 进程管理,其工作主要是进程调度,在单用户单任务的情况下,处理器仅为一个用户的一个任务所独占, 进程管理的工作十分简单。但在多道程序或多用户的情况 下,组织多个作业或任务时,就要解决处理器的调度、 分配和回收等问题 。
存储管理
- 存储管理分为几种功能:存储分配、存储共享、存储保护 、存储扩张。
设备管理
- 设备管理分有以下功能:设备分配、设备传输控制 、设备独立性。
文件管理
- 文件存储空间的管理、目录管理 、文件操作管理、文件保护。
作业管理
- 作业管理是负责处理用户提交的任何要求。
基础组件
池式组件
对象池
连接池
线程池
内存池
中间件
Mysql
Redis
MongoDB
Nginx
版本管理工具
Git
SVN
其他
正则表示式
XML
JSON
金主爸爸信息
零声教育推出9.9元,校招特训营:内容包含岗位投递渠道,技术方向选择(Java,c++,前端,算法,运维,测试,嵌入式),简历书写规范,面试准备事宜,企业选择,薪资谈判。
点击 秋招春招提前批大厂面试指导 简历梳理 offer选择 技术方向指导课程
另外每天8点还有技术直播分享,分享内容:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK。
扫码联系小姐姐,获得直播链接。