每场面试都必须认真面对!
一、常见算法和数据结构
1、数组、链表、队列、栈的各种操作(性能,场景)
2、各类排序算法以及复杂度分析(快排、归并、堆),不同排序算法的稳定性
3、理解并可以分析时间和空间复杂度。
4、动态规划、贪心。
5、回溯算法
6、二叉树、前中后虚(图考察的很少,只有笔试偶尔遇到)
7、DFS、BFS 算法
8、单调栈、单调队列
二、操作系统
1、进程通信 IPC(几种方式),进程与线程定义与区别
2、进程调度算法、磁盘扫描算法
3、虚拟内存、页面置换算法
4、内核态和用户态的转换的条件、中断、系统调用
5、互斥与死锁
6、linux 常用命令(问的时候都会给具体某一个场景)
7、Linux 的 IO 模型 BIO/NIO/AIO、 IO 多路复用
8、Linux 内核 select poll epoll、边缘触发和水平触发
9、僵尸进程和孤儿进程
三、数据库
1、索引(包括分类及优化方式,失效条件,底层结构 B 树、B + 树的区别优缺点)
2、优化(explain,慢查询,show profile)、数据库的范式
3、辅助索引、主键索引、聚簇索引、非聚簇索引、索引回表、索引覆盖、索引下推
4、联合索引和最左匹配原则
5、引擎对比(InnoDB,MyISAM)
6、数据库的锁(行锁,表锁,页级锁,读锁,写锁,悲观锁,乐观锁)
7、隔离级别,依次解决的问题(脏读、不可重复读、幻读)、隔离级别与加锁的关系
8、事务的 ACID
9、分库分表,主从复制,读写分离。
10、sql 语法(join,union,子查询,having,group by)主要考察 sql 语句的书写
四、计算机网络
1、OSI7 层模型(TCP4 层)、每层的协议
2、常见协议为位置在 OSI 七层协议的位置(HTTP/TCP/UDP/DNS/IMAP/ARP/ 路由器 / 交换机)
3、http/https 1.0、1.1、2.0、https 加密过程(对称加密和非对称加密)
4、get/post 以及 http 幂等性
5、http 协议头相关、http 常见的状态码
6、TCP 与 UDP 比较
7、TCP 三次握手、四次挥手、拥塞控制(过程、阈值)、流量控制与滑动窗口
8、TCP 的 time_wait 和 close_wait
9、url 到页面的过程
10、网络攻击(CSRF、XSS、DDos)
五、Java 语言
(一)基础
1、面向对象、四个特性、重载重写、继承、多态、反射
2、常见关键字 final、static、abstract、finalize、transient、native
3、StringBuffer、StringBuilder 和 String、字符常量池
4、六大设计原则、常见的设计模式(代理、工厂、单例、装饰者、观察者)
5、异常、常见的异常类
6、序列化
7、深拷贝和浅拷贝、值传递和引用传递
8、抽象类和接口
9、基本类型的默认值和取值范围以及字节数
(二)多线程
1、synchronized 关键字底层原理、锁升级原理、轻量级锁、重量级锁
2、Lock 锁机制、线程通信、、ThreadLocal、Atom 包、AQS、CAS 原理
3、volatile 关键字、内存屏障、happen-before 原则
4、同步队列、等待队列、阻塞队列
5、线程池、线程池的执行流程、线程池的主要参数(coresize、阻塞队列、maxsize、拒绝策略)、线程池的任务递交方式和状态变化。
6、thread 类的常见方法:sleep、join、yield;sleep 和 wait 方法的区别
7、线程的五种状态、run 方法和 start 方法
8、守护线程和用户线程
(三)集合框架
1、hashmap(这个基本是必考题)hashcode 函数、equals 函数、扩容机制、put 和 get 操作、jdk1.7 和 jdk1.8 的变化、hashmap 的尾部遍历、红黑树的引入
2、hashmap 的线程安全问题,synchronizedMap、hashtable、concurrentHashMap
3、concurrentHashMap 的 jdk1.7 和 jdk1.8 的变化,底层实现线程安全的方式
4、常见的集合框架哪些是线程安全的,哪些是线程不安全的
5、arraylist 和 linkedlist、vector
6、集合的遍历、迭代器
(四)JVM
1、JVM 内存模型、堆、栈、PC 计算器、永久代分别存储的内容
2、GC 垃圾回收,三种 GC 算法,七种 GC 收集器
3、CMS 和 G1 的优缺点、执行流程
4、年老代和年轻代、分代垃圾回收算法
5、四种引用类型、GCroot 的可达性分析法
6、对象创建的过程、对象的内存分配
7、类加载的过程、类加载器
8、双亲委派机制、tomcat 的反双亲委派机制
9、JVM 调优,常见的调优参数
10、内存泄漏和内存溢出
六、项目 + 中间件
面试的第一个环节就是自我介绍,最好提前准备好腹稿,介绍的基本内容就是你的教育经历 + 工作经历 + 简单的性格介绍。而工作经历中的项目将成为接下来面试官询问的重点,所以最好能准备一个拿得出手的项目。
如果在面试之前已经有工作经历和项目经历,就需要深挖你项目的亮点:
1.开发的时候使用的技术和中间件
2.遇到的问题、如何解决问题
3.是否有优化方案,如何优化你的项目
上面这三个问题基本上是最常见也是最基本的问题,准备项目的时候,一定要把上面这些问题准备好。如果是第一次找工作,最后也是提前编写一个项目练练手,现在比较火爆的项目就是 —— 秒杀系统。因为这个项目基本会用到主流的中间件(spring、Redis、消息队列 MQ、kafka)。而且我在跟面试官交流的时候,面试官对这个项目也是认可的,前提你真的深入其中。
除了这些题目,我这还整理有很多Java的面试资料,各个方向的都有,也有Java的学习资料,有需要的可以关注+私信我!免费提供!
最后祝每个找工作的小伙伴都能顺顺利利哦!