Java后端技术面试汇总Word下载.docx
《Java后端技术面试汇总Word下载.docx》由会员分享,可在线阅读,更多相关《Java后端技术面试汇总Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
∙List和Map区别
∙Arraylist与LinkedList区别
∙ArrayList与Vector区别
∙HashMap和Hashtable的区别
∙HashSet和HashMap区别
∙HashMap和ConcurrentHashMap的区别
∙HashMap的工作原理及代码实现,什么时候用到红黑树
∙多线程情况下HashMap死循环的问题
∙HashMap出现HashDOS攻击的问题
∙ConcurrentHashMap的工作原理及代码实现,如何统计所有的元素个数
∙手写简单的HashMap
∙看过那些Java集合类的源码
1.3、进程和线程
∙线程和进程的概念、并行和并发的概念
∙创建线程的方式及实现
∙进程间通信的方式
∙说说CountDownLatch、CyclicBarrier原理和区别
∙说说Semaphore原理
∙说说Exchanger原理
∙ThreadLocal原理分析,ThreadLocal为什么会出现OOM,出现的深层次原理
∙讲讲线程池的实现原理
∙线程池的几种实现方式
∙线程的生命周期,状态是如何转移的
∙可参考:
《Java多线程编程核心技术》
1.4、锁机制
∙说说线程安全问题,什么是线程安全,如何保证线程安全
∙重入锁的概念,重入锁为什么可以防止死锁
∙产生死锁的四个条件(互斥、请求与保持、不剥夺、循环等待)
∙如何检查死锁(通过jConsole检查死锁)
∙volatile实现原理(禁止指令重排、刷新内存)
∙synchronized实现原理(对象监视器)
∙synchronized与lock的区别
∙AQS同步队列
∙CAS无锁的概念、乐观锁和悲观锁
∙常见的原子操作类
∙什么是ABA问题,出现ABA问题JDK是如何解决的
∙乐观锁的业务场景及实现方式
∙Java8并法包下常见的并发类
∙偏向锁、轻量级锁、重量级锁、自旋锁的概念
1.5、JVM
∙JVM运行时内存区域划分
∙内存溢出OOM和堆栈溢出SOE的示例及原因、如何排查与解决
∙如何判断对象是否可以回收或存活
∙常见的GC回收算法及其含义
∙常见的JVM性能监控和故障处理工具类:
jps、jstat、jmap、jinfo、jconsole等
∙JVM如何设置参数
∙JVM性能调优
∙类加载器、双亲委派模型、一个类的生命周期、类是如何加载到JVM中的
∙类加载的过程:
加载、验证、准备、解析、初始化
∙强引用、软引用、弱引用、虚引用
∙Java内存模型JMM
1.6、设计模式
∙常见的设计模式
∙设计模式的的六大原则及其含义
∙常见的单例模式以及各种实现方式的优缺点,哪一种最好,手写常见的单利模式
∙设计模式在实际场景中的应用
∙Spring中用到了哪些设计模式
∙MyBatis中用到了哪些设计模式
∙你项目中有使用哪些设计模式
∙说说常用开源框架中设计模式使用分析
∙动态代理很重要!
!
1.7、数据结构
∙树(二叉查找树、平衡二叉树、红黑树、B树、B+树)
∙深度有限算法、广度优先算法
∙克鲁斯卡尔算法、普林母算法、迪克拉斯算法
∙什么是一致性Hash及其原理、Hash环问题
∙常见的排序算法和查找算法:
快排、折半查找、堆排序等
1.8、网络/IO基础
∙BIO、NIO、AIO的概念
∙什么是长连接和短连接
∙Http1.0和2.0相比有什么区别,可参考《Http2.0》
∙Https的基本概念
∙三次握手和四次挥手、为什么挥手需要四次
∙从游览器中输入URL到页面加载的发生了什么?
可参考《从输入URL到页面加载发生了什么》
2、数据存储和消息队列
2.1、数据库
∙MySQL索引使用的注意事项
∙DDL、DML、DCL分别指什么
∙explain命令
∙leftjoin,rightjoin,innerjoin
∙数据库事物ACID(原子性、一致性、隔离性、持久性)
∙事物的隔离级别(读未提交、读以提交、可重复读、可序列化读)
∙脏读、幻读、不可重复读
∙数据库的几大范式
∙数据库常见的命令
∙说说分库与分表设计
∙分库与分表带来的分布式困境与应对之策(如何解决分布式下的分库分表,全局表?
)
∙说说SQL优化之道
∙MySQL遇到的死锁问题、如何排查与解决
∙存储引擎的InnoDB与MyISAM区别,优缺点,使用场景
∙索引类别(B+树索引、全文索引、哈希索引)、索引的原理
∙什么是自适应哈希索引(AHI)
∙为什么要用B+tree作为MySQL索引的数据结构
∙聚集索引与非聚集索引的区别
∙遇到过索引失效的情况没,什么时候可能会出现,如何解决
∙limit20000加载很慢怎么解决
∙如何选择合适的分布式主键方案
∙选择合适的数据存储方案
∙常见的几种分布式ID的设计方案
∙常见的数据库优化方案,在你的项目中数据库如何进行优化的
2.2、Redis
∙Redis有哪些数据类型,可参考《Redis常见的5种不同的数据类型详解》
∙Redis内部结构
∙Redis使用场景
∙Redis持久化机制,可参考《使用快照和AOF将Redis数据持久化到硬盘中》
∙Redis集群方案与实现
∙Redis为什么是单线程的?
∙缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
∙使用缓存的合理性问题
∙Redis常见的回收策略
2.3、消息队列
∙消息队列的使用场景
∙消息的重发补偿解决思路
∙消息的幂等性解决思路
∙消息的堆积解决思路
∙自己如何实现消息队列
∙如何保证消息的有序性
3、开源框架和容器
3.1、SSM/Servlet
∙Servlet的生命周期
∙转发与重定向的区别
∙BeanFactory和ApplicationContext有什么区别
∙SpringBean的生命周期
∙SpringIOC如何实现
∙Spring中Bean的作用域,默认的是哪一个
∙说说SpringAOP、SpringAOP实现原理
∙动态代理(CGLib与JDK)、优缺点、性能对比、如何选择
∙Spring事务实现方式、事务的传播机制、默认的事务类别
∙Spring事务底层原理
∙Spring事务失效(事务嵌套),JDK动态代理给Spring事务埋下的坑,可参考《JDK动态代理给Spring事务埋下的坑!
》
∙如何自定义注解实现功能
∙SpringMVC运行流程
∙SpringMVC启动流程
∙Spring的单例实现原理
∙Spring框架中用到了哪些设计模式
∙Spring其他产品(SrpingBoot、SpringCloud、SpringSecuirity、SpringData、SpringAMQP等)
∙有没有用到SpringBoot,SpringBoot的认识、原理
∙MyBatis的原理
∙可参考《为什么会有Spring》
∙可参考《为什么会有SpringAOP》
3.2、Netty
∙为什么选择Netty
∙说说业务中,Netty的使用场景
∙原生的NIO在JDK1.7版本存在epollbug
∙什么是TCP粘包/拆包
∙TCP粘包/拆包的解决办法
∙Netty线程模型
∙说说Netty的零拷贝
∙Netty内部执行流程
∙Netty重连实现
3.3、Tomcat
∙Tomcat的基础架构(Server、Service、Connector、Container)
∙Tomcat如何加载Servlet的
∙Pipeline-Valve机制
《四张图带你了解Tomcat系统架构!
4、分布式
4.1、Nginx
∙请解释什么是C10K问题或者知道什么是C10K问题吗?
∙Nginx简介,可参考《Nginx简介》
∙正向代理和反向代理.
∙Nginx几种常见的负载均衡策略
∙Nginx服务器上的Master和Worker进程分别是什么
∙使用“反向代理服务器”的优点是什么?
4.2、分布式其他
∙谈谈业务中使用分布式的场景
∙Session分布式方案
∙Session分布式处理
∙分布式锁的应用场景、分布式锁的产生原因、基本概念
∙分布是锁的常见解决方案
∙分布式事务的常见解决方案
∙集群与负载均衡的算法与实现
∙说说分库与分表设计,可参考《数据库分库分表策略的具体实现方案》
∙分库与分表带来的分布式困境与应对之策
4.3、Dubbo
∙什么是Dubbo,可参考《Dubbo入门》
∙什么是RPC、如何实现RPC、RPC的实现原理,可参考《基于HTTP的RPC实现》
∙Dubbo中的SPI是什么概念
∙Dubbo的基本原理、执行流程
5、微服务
5.1、微服务
∙前后端分离是如何做的?
∙微服务哪些框架
∙SpringCould的常见组件有哪些?
可参考《SpringCloud概述》
∙领域驱动有了解吗?
什么是领域驱动模型?
充血模型、贫血模型
∙JWT有了解吗,什么是JWT,可参考《前后端分离利器之JWT》
∙你怎么理解RESTful
∙说说如何设计一个良好的API
∙如何理解RESTfulAPI的幂等性
∙如何保证接口的幂等性
∙说说CAP定理、BASE理论
∙怎么考虑数据一致性问题
∙说说最终一致性的实现方案
∙微服务的优缺点,可参考《微服务批判》
∙微服务与SOA的区别
∙如何拆分服务、水平分割、垂直分割
∙如何应对微服务的链式调用异常
∙如何快速追踪与定位问题
∙如何保证微服务的安全、认证
5.2、安全问题
∙如何防范常见的Web攻击、如何方式SQL注入
∙服务端通信安全攻防
∙HTTPS原理剖析、降级攻击、HTTP与HTTPS的对比
5.3、性能优化
∙性能指标有哪些
∙如何发现性能瓶颈
∙性能调优的常见手段
∙说说你在项目中如何进行性能调优
6、其他
6.1、设计能力
∙说说你在项目中使用过的UML图
∙你如何考虑组件化、服务化、系统拆分
∙秒杀场景如何设计
《秒杀系统的技术挑战、应对策略以及架构设计总结一二!
6.2、业务工程
∙说说你的开发流程、如何进行自动化部署的
∙你和团队是如何沟通的
∙你如何进行代码评审
∙说说你对技术与业务的理解
∙说说你在项目中遇到感觉最难Bug,是如何解决的
∙介绍一下工作中的一个你认为最有价值的项目,以及在这个过程中的角色、解决的问题、你觉得你们项目还有哪些不足的地方
6.3、软实力
∙说说你的优缺点、亮点
∙说说你最近在看什么书、什么博客、在研究什么新技术、再看那些开源项目的源代码
∙说说你觉得最有意义的技术书籍
∙工作之余做什么事情、平时是如何学习的,怎样提升自己的能力
∙说说个人发展方向方面的思考
∙说说你认为的服务端开发工程师应该具备哪些能力
∙说说你认为的架构师是什么样的,架构师主要做什么
∙如何看待加班的问题
二、Java面试通关秘籍第二套
1、Java相关
∙Arraylist与LinkedList默认空间是多少;
∙Arraylist与LinkedList区别与各自的优势List和Map区别;
∙谈谈HashMap,哈希表解决hash冲突的方法;
∙为什么要重写hashcode()和equals()以及他们之间的区别与关系;
∙Object的hashcode()是怎么计算的?
∙若hashcode方法永远返回1或者一个常量会产生什么结果?
∙JavaCollections和Arrays的sort方法默认的排序方法是什么;
∙引用计数法与GCRoot可达性分析法区别;
∙浅拷贝和深拷贝的区别;
∙Strings="
abc"
和Strings=newString("
)区别;
∙HashSet方法里面的hashcode存在哪,如果重写equals不重写hashcode会怎么样?
∙反射的作用与实现原理;
∙Java中的回调机制;
∙模板方法模式;
∙开闭原则说一下;
∙发布/订阅使用场景;
∙KMP算法(一种改进的字符串匹配算法);
∙JMM里边的原子性、可见性、有序性是如何体现出来的,JMM中内存屏障是什么意思,
2、多线程
∙AtomicInteger底层实现原理;
∙synchronized与ReentraLock哪个是公平锁;
∙CAS机制会出现什么问题;
∙用过并发包下边的哪些类;
∙一个线程连着调用start两次会出现什么情况?
∙wait方法能不能被重写,wait能不能被中断;
∙线程池的实现?
四种线程池?
重要参数及原理?
任务拒接策略有哪几种?
∙线程状态以及API怎么操作会发生这种转换;
∙常用的避免死锁方法;
3、JVM
∙MinorGC与FullGC分别在什么时候发生?
什么时候触发FullGC;
∙GC收集器有哪些?
CMS收集器与G1收集器的特点。
∙Java在什么时候会出现内存泄漏;
∙Java中的大对象如何进行存储;
∙rt.jar被什么类加载器加载,什么时间加载;
∙自己写的类被什么加载,什么时间加载;
∙自己写的两个不同的类是被同一个类加载器加载的吗?
为什么?
∙为什么新生代内存需要有两个Survivor区?
∙几种常用的内存调试工具:
jmap、jstack、jconsole;
∙类加载的五个过程:
加载、验证、准备、解析、初始化;
∙G1停顿吗,CMS回收步骤,CMS为什么会停顿,停顿时间;
∙栈主要存的数据是什么,堆呢?
∙堆分为哪几块,比如说新生代老生代,那么新生代又分为什么?
∙软引用和弱引用的使用场景(软引用可以实现缓存,弱引用可以用来在回调函数中防止内存泄露);
4、数据库
∙数据库索引,什么是全文索引,全文索引中的倒排索引是什么原理
∙数据库最佳左前缀原则是什么?
∙数据库的三大范式;
∙悲观锁和乐观锁的原理和应用场景;
∙左连接、右连接、内连接、外连接、交叉连接、笛卡儿积等;
∙一般情况下数据库宕机了如何进行恢复(什么是WriteAheadLog机制,什么是DoubleWrite机制,什么是CheckPoint);
∙什么是redo日志、什么是undo日志;
∙数据库中的隔离性是怎样实现的;
原子性、一致性、持久性又是如何实现的;
∙什么是组合索引,组合索引什么时候会失效;
∙关系型数据库和非关系型数据库区别;
∙数据库死锁如何解决;
∙MySQL并发情况下怎么解决(通过事务、隔离级别、锁);
∙MySQL中的MVCC机制是什么意思,根据具体场景,MVCC是否有问题;
∙MySQL数据库的隔离级别,以及如何解决幻读;
5、缓存服务器
∙Redis中zSet跳跃表问题;
∙Redis的set的应用场合?
∙Redis高级特性了解吗?
∙Redis的pipeline有什么用处?
∙Redis集群宕机如何处理,怎么样进行数据的迁移;
∙Redis的集群方案;
∙Redis原子操作怎么用比较好;
∙Redis过期策略是怎么实现的呢?
6、SSM相关
∙Spring中@Autowired和@Resource注解的区别?
∙Spring声明一个bean如何对其进行个性化定制;
∙MyBatis有什么优势;
∙MyBatis如何做事务管理;
7、操作系统
∙Linux静态链接和动态链接;
∙什么是IO多路复用模型(select、poll、epoll);
∙Linux中的grep管道用处?
Linux的常用命令?
∙操作系统中虚拟地址、逻辑地址、线性地址、物理地址的概念及区别;
∙内存的页面置换算法;
∙进程调度算法,操作系统是如何调度进程的;
∙父子进程、孤儿进程、僵死进程等概念;
∙fork进程时的操作;
∙kill用法,某个进程杀不掉的原因(僵死进程;
进入内核态,忽略kill信号);
∙系统管理命令(如查看内存使用、网络情况);
∙find命令、awk使用;
∙Linux下排查某个死循环的线程;
8、网络相关
∙数据链路层是做什么的?
∙数据链路层的流量控制?
∙网络模型的分层、IP和Mac地址在那个层、TCP和HTTP分别在那个层;
∙TCP滑动窗口;
∙TCP为什么可靠;
∙TCP的同传,拆包与组装包是什么意思;
∙Https和Http有什么区别;
∙Http为什么是无状态的;
∙TCP三次握手,为什么不是三次,为什么不是四次;
∙TCP的拥塞控制、流量控制详细说明?
∙Http1.0和Http2.0的区别;
∙两个不同ip地址的计算机之间如何通信;
∙地址解析协议ARP;
∙OSI七层模型分别对应着五层模型的哪一部分;
∙TCP三次握手数据丢失了怎么办?
那如果后面又找到了呢?
9、分布式相关
∙消息队列使用的场景介绍和作用(应用耦合、异步消息、流量削锋等);
∙如何解决消息队列丢失消息和重复消费问题;
∙Kafka使用过吗,什么是幂等性?
怎么保证一致性,持久化怎么做,分区partition的理解,LEO是什么意思,如何保证多个partition之间数据一致性的(ISR机制),为什么Kafka可以这么快(基于磁盘的顺序读写);
∙异步队列怎么实现;
∙你项目的并发是多少?
怎么解决高并发问题?
单机情况下Tomcat的并发大概是多少,MySQL的并发大致是多少?
∙什么是C10K问题;
∙高并发情况下怎么办;
∙分布式理论,什么是CAP理论,什么是Base理论,什么是Paxos理论;
∙分布式协议的选举算法;
∙说一下你对微服务的理解,与SOA的区别;
∙Dubbo的基本原理,RPC,支持哪些通信方式,服务的调用过程;
∙Dubbo如果有一个服务挂掉了怎么办;
∙分布式事务,操作两个表不在一个库,如何保证一致性。
∙分布式系统中,每台机器如何产生一个唯一的随机值;
∙系统的量级、pv、uv等;
∙什么是Hash一致性算法?
分布式缓存的一致性,服务器如何扩容(哈希环);
∙正向代理、反向代理;
∙什么是客户端负载均衡策略、什么是服务器端负载均衡策略;
∙如何优化Tomcat,常见的优化方式有哪些;
∙Nginx的Master和Worker,Nginx是如何处理请求的;
10、系统设计相关
∙如何防止表单重复提交(Token令牌环等方式);
∙有一个url白名单,需要使用正则表达式进行过滤,但是url量级很大,大概亿级,那么如何优化正则表达式?
如何优化亿级的url匹配呢?
∙常见的Nginx负载均衡策略;
已有两台Nginx服务器了,倘若这时候再增加一台服务器,采用什么负载均衡算法比较好?
∙扫描二维码登录的过程解析;
∙如何设计一个生成唯一UUID的算法?
∙实现一个负载均衡的算法,服务器资源分配为70%、20%、10%;
∙有三个线程T1T2T3,如何保证他们按顺序执行;
∙三个线程循环输出ABCABCABC....
11、安全相关
∙什么是XSS攻击,XSS攻击的一般表现形式有哪些?
如何防止XSS攻击;
三、Java面试通关秘籍第三套
1、基础题
∙怎么解决Hash冲突;
(开放地址法、链地址法、再哈希法、建立公共溢出区等)
∙写出一个必然会产生死锁的伪代码;
∙SpringIoC涉及到的设计模式;
(工厂模式、单利模式。
。
∙toString()方法什么情况下需要重写;
∙判断对象相等时,什么情况下只需要重写equals(),什么情况下需要重写equals(),hashcode()?
∙Set内存放的元素为什么不可以重复,内部是如何保证和实现的?
∙如何保证分布式缓存的一致性(分布式缓存一致性hash算法?
)?
分布式session实现?
∙Java8流式迭代的好处?
∙项目中用到的JDK的哪些特性?
∙说一下TreeMap的实现原理?
红黑树的性质?
红黑树遍历方式有哪些?
如果key冲突如何解决?
setColor()方法在什么时候用?
什么时候会进行旋转和颜色转换?
∙Spring的bean的创建时机?
依赖注入的时机?
∙ArrayList和LinkList的删除一个元素的时间复杂度;
(ArrayList是O(N),LinkList是O
(1));
∙CopyOnWriteArrayList是什么;
∙序列化和反序列化底层如何实现的(ObjectOutputStream、ObjectInputStream、readObject
writeObject);
∙如何调试多线程的程序;
(由于状态只有就绪、阻塞、执行,状态是无法由执行转化为执行的,所以会报不合法的状态!
∙HashMap在什么时候时间复杂度是O
(1),什么时候是O(n),什么时候又是O(logn);
∙wait方法能不能被重写?
(wait是final类型的,不可以被重写,不仅如此,notify和notifyall都是final类型的),wait能不能被中断;
∙一个Controller调用两个Service,这两Service又都分别调用两个Dao,问其中用到了几个数据库连接池的连接?
2、网络基础
∙HTTP、TCP、UDP的区别和联系;
∙TCP和UDP各自的优势,知道哪些使用UDP协议的成功案例;
∙TCP和UDP各用了底层什么协议;
∙单个UDP报文最大容量;
∙单个TCP报文最大容量;
∙TCP报头格式、U