Java后端面试真题分享

每场面试都必须认真面对!

一、常见算法和数据结构

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的学习资料,有需要的可以关注+私信我!免费提供!

最后祝每个找工作的小伙伴都能顺顺利利哦!

你可能感兴趣的:(Java后端面试真题分享)