面试考察的知识点多而杂,要彻底掌握须要花费大量的时间和精力。可是面试中常常被问到的知识点却没有多少,你彻底能够用 20% 的时间去掌握 80% 常问的知识点。在这里我将这 80% 常问的知识点整理出来,方便你们快速地掌握。这些知识点也标注了重要程度,从而让你们能够根据知识点的重要程度去制定学习计划。node
下图列出了面试考察的九大知识点,也标出了重要程度和复习难度。固然重要程度根据不一样的公司会有所不一样,本文列的重要程度对大多数公司适用。面试
针对上图作如下几点说明:算法
分布式与系统设计部分对于大厂面试来讲相当重要,可是小厂面试考察的会少一点。数据库
语言基础部分,阿里喜欢问 Java、腾讯喜欢问 C++,其它大厂面试考察会少一些,小厂面试会考察多一些。设计模式
数据库、中间件和框架部分对于大厂面试来讲不是那么重要,可是对于小厂面试会重要一些。最好在项目中使用到这些技术,才能让这些技术成为亮点。缓存
项目在实习招聘阶段中不是特别重要,可是在校园招聘阶段重要程度会增高。可是若是你的学历很差,并且没有博客、开源项目、竞赛等加分项,那么最好作个比较出色的项目来增长简历经过率。安全
2. 操做系统
2.1 基础网络
★★★ 进程与线程的本质区别、以及各自的使用场景。负载均衡
★☆☆ 进程状态。框架
★★★ 进程调度算法的特色以及使用场景。
★☆☆ 线程实现的方式。
★★☆ 协程的做用。
★★☆ 常见进程同步问题。
★★★ 进程通讯方法的特色以及使用场景。
★★★ 死锁必要条件、解决死锁策略,能写出和分析死锁的代码,能说明在数据库管理系统或者 Java 中如何解决死锁。
★★★ 虚拟内存的做用,分页系统实现虚拟内存原理。
★★★ 页面置换算法的原理,特别是 LRU 的实现原理,最好能手写,再说明它在 Redis 等做为缓存置换算法。
★★★ 比较分页与分段的区别。
★★★ 分析静态连接的不足,以及动态连接的特色。
2.2 Linux
★★☆ 文件系统的原理,特别是 inode 和 block。数据恢复原理。
★★★ 硬连接与软连接的区别。
★★☆ 可以使用经常使用的命令,好比 cat 文件内容查看、find 搜索文件,以及 cut、sort 等管线命令。了解 grep 和 awk 的做用。
★★★ 僵尸进程与孤儿进程的区别,从 SIGCHLD 分析产生僵尸进程的缘由。
3. 计算机网络
3.1 基础
★★★ 各层协议的做用,以及 TCP/IP 协议的特色。
★★☆ 以太网的特色,以及帧结构。
★★☆ 集线器、交换机、路由器的做用,以及所属的网络层。
★★☆ IP 数据数据报常见字段的做用。
★☆☆ ARP 协议的做用,以及维护 ARP 缓存的过程。
★★☆ ICMP 报文种类以及做用;和 IP 数据报的关系;Ping 和 Traceroute 的具体原理。
★★★ UDP 与 TCP 比较,分析上层协议应该使用 UDP 仍是 TCP。
★★★ 理解三次握手以及四次挥手具体过程,三次握手的缘由、四次挥手缘由、TIME_WAIT 的做用。
★★★ 可靠传输原理,并设计可靠 UDP 协议。
★★☆ TCP 拥塞控制的做用,理解具体原理。
★★☆ DNS 的端口号;TCP 仍是 UDP;做为缓存、负载均衡。
3.2 HTTP
★★★ GET 与 POST 比较:做用、参数、安全性、幂等性、可缓存。
★★☆ HTTP 状态码。
★★★ Cookie 做用、安全性问题、和 Session 的比较。
★★☆ 缓存 的 Cache-Control 字段,特别是 Expires 和 max-age 的区别。ETag 验证原理。
★★★ 长链接与短链接原理以及使用场景,流水线。
★★★ HTTP 存在的安全性问题,以及 HTTPs 的加密、认证和完整性保护做用。
★★☆ HTTP/1.x 的缺陷,以及 HTTP/2 的特色。
★★★ HTTP/1.1 的特性。
★★☆ HTTP 与 FTP 的比较。
3.3 Socket
★★☆ 五种 IO 模型的特色以及比较。
★★★ select、poll、epoll 的原理、比较、以及使用场景;epoll 的水平触发与边缘触发。
4. 数据库
4.1 SQL
★★☆ 手写 SQL 语句,特别是链接查询与分组查询。
★★☆ 链接查询与子查询的比较。
★★☆ drop、delete、truncate 比较。
★★☆ 视图的做用,以及什么时候能更新视图。
★☆☆ 理解存储过程、触发器等做用。
4.2 系统原理
★★★ ACID 的做用以及实现原理。
★★★ 四大隔离级别,以及不可重复读和幻影读的出现缘由。
★★☆ 封锁的类型以及粒度,两段锁协议,隐式和显示锁定。
★★★ 乐观锁与悲观锁。
★★★ MVCC 原理,当前读以及快照读,Next-Key Locks 解决幻影读。
★★☆ 范式理论。
★★★ SQL 与 NoSQL 的比较。
4.3 MySQL
★★★ B+ Tree 原理,与其它查找树的比较。
★★★ MySQL 索引以及优化。
★★★ 查询优化。
★★★ InnoDB 与 MyISAM 比较。
★★☆ 水平切分与垂直切分。
★★☆ 主从复制原理、做用、实现。
★☆☆ redo、undo、binlog 日志的做用。
4.4 Redis
★★☆ 字典和跳跃表原理分析。
★★★ 使用场景。
★★★ 与 Memchached 的比较。
★☆☆ 数据淘汰机制。
★★☆ RDB 和 AOF 持久化机制。
★★☆ 事件驱动模型。
★☆☆ 主从复制原理。
★★★ 集群与分布式。
★★☆ 事务原理。
★★★ 线程安全问题。
5. 面向对象
5.1 思想
★★★ 面向对象三大特性
★☆☆ 设计原则
5.2 设计模式
★★☆ 设计模式的做用。
★★★ 手写单例模式,特别是双重检验锁以及静态内部类。
★★★ 手写工厂模式。
★★★ 理解 MVC,结合 SpringMVC 回答。
★★★ 理解代理模式,结合 Spring 中的 AOP 回答。
★★★ 分析 JDK 中经常使用的设计模式,例如装饰者模式、适配器模式、迭代器模式等。