1. 前言
面试考察的知识点多而杂, 要完全掌握需要花费大量的时间和精力. 但是面试中经常被问到的知识点却没有多少, 你完全可以用 20% 的时间去掌握 80% 常问的知识点. 在这里我将这 80% 常问的知识点整理出来, 方便大家快速地掌握. 这些知识点也标注了重要程度, 从而让大家可以根据知识点的重要程度去制定学习计划.
下图列出了面试考察的九大知识点, 也标出了重要程度和复习难度. 当然重要程度根据不同的公司会有所不同, 本文列的重要程度对大多数公司适用.
image
针对上图做以下几点说明:
分布式与系统设计部分对于大厂面试来说至关重要, 但是小厂面试考察的会少一点.
语言基础部分, 阿里喜欢问 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 中常用的设计模式, 例如装饰者模式, 适配器模式, 迭代器模式等.
来源: http://www.jianshu.com/p/100edfa824d7