针对高级java面试所总结需要会的技术及面试会问的问题

这篇博客总结了高级Java面试中的关键技术点,包括Java内存管理、多线程、集合、同步机制、JVM优化、数据库优化、数据结构与操作系统、网络、框架和分布式系统等方面。详细探讨了乐观锁、线程池、集合源码、SQL优化、系统内存模型、HTTP协议、Spring框架、分布式锁、JVM垃圾收集和Linux基础等内容,适合准备面试和提升技术水平的开发者阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Java相关

 

    乐观悲观锁的设计,如何保证原子性,解决的问题;

 

   char和double的字节,以及在内存的分布是怎样;

 

    对象内存布局,然后讲下对象的死亡过程?

 

    对象头,详细讲下;

 

   sync原理详细,sync内抛异常会怎样,死锁吗?还是释放掉?怎么排查死锁?死锁会怎样?有没有什么更好的替代方案?

 

    详细讲一下集合,HashSet源码,HashMap源码,如果要线程安全需要怎么做?

 

    多线程是解决什么问题的?线程池解决什么问题?

 

    线程池,如何设计的,里面的参数有多少种,里面的工作队列和线程队列是怎样的结构,如果给你,怎样设计线程池?

 

   AQS原理,ReentranLock源码,设计原理,整体过程。

 

    继续聊多线程源码,sync原理,然后一个场景设计题;

 

   float f = 1.4f;double d = 1.4d; 与 float f =1.5f;double d = 1.5d; 是否为true,内存是怎样的;

 

   split的源码,split("a|b|c");得出多少个数组;

 

    把所有认识熟用的JUC(java.util.concurrent(简称JUC)包)下的类写出来,讲下使用,然后讲下原生的线程操作;

 

    开闭原则,解析工厂方法模式,建造者模式,区别。手撸出来。

 

    讲下JVM的大页模式,JVM内存模型;

 

    什么是敏捷开发,防御性编程,并行编程。Team Leader的思考;

 

    逃逸分析是什么,作用是什么,用途是什么;

 

    怎么认为一个类是线程安全?线程安全的定义是什么?Java有多少个关键字进行同步?为什么这样设计?(聊了一大堆,一堆为什么);

 

    两个线程设计题。记得一个是:t1,t2,t3,让t1,t2执行完才执行t3,原生实现。

 

    写个后缀表达式,为什么要设计后缀表达式,有什么好处?然后写下中缀。

 

    我看你做过性能优化,比如你怎么分析项目里面的OOM的,内存泄露呢?详细说思路;

 

    说下多线程,我们什么时候需要分析线程数,怎么分析,分析什么因素;

 

    抽象方法和类方法的区别,static的抽象方法可以吗?

 

    说下Java的克隆体系;

 

    涉及OOM、JVM优化、源码问题、数据库优化、多线程等问题;

 

   CPU高?什么情况CPU高?解决什么问题?

 

    你有遇到过临界区问题吗?有遇到过吗?你在项目遇到这个问题是怎样解决的?

 

   volatile关键字作用;

 

   Java的多态怎么实现;

 

    解释一下自旋;

 

    解释一下信号量;

 

    什么情况下会触发类加载;

 

   Java内存抖动严重,优化的思路;

 

二、数据库相关

 

   SQL优化思路,联合索引与底层树结构的映像关系,索引结构(B+、B-),为什么用这样的结构;

 

    讲下MySQL的集群?集群遇到过什么问题?sql的优化?

 

    你目前为止遇到的最大数据量是多少?知道100万时候怎么设计吗?1000万呢?过几十亿呢?

 

   MySQL有多少个参数可调,除了最大连接数。全部列出来,一个个分析。

 

    聊下优化过的索引,怎么优化;

 

    红黑树和平衡树的区别,为什么数据库不用红黑树;

 

   mysql有哪些锁,意向锁有什么用;

 

    数据库高并发下的优化思路;

 

    数据库什么情况下索引会失效;

 

三、数据结构和操作系统相关

 

    数据结构学过吧,聊一下?学过什么结构?讲下树和队列?B树呢?

 

    操作系统学过吧,聊一下?讲一下系统内存是怎样的?分段分页虚拟内存?

 

    页面置换算法呢?多少种?有最优的置换算法吗?

 

    你学过什么课程?然后聊下操作系统,内核、用户之类。

 

    反转链表手撸;

 

    快排,给一串数组,把具体每次patition写下,最终结果也写45, 32, 41, 35, 38, 20, 50;

 

    一个整数status, 判断第K个比特位是否为比特1;

 

    把递归实现的快排改成非递归,你知道非递归有什么好处吗;

 

    举例使用分治思想的算法;

 

四、网络相关

 

    讲下请求头细节?

 

   Http和Https?Http1.0,1.1,2.0,讲下长连接和短连接?Https是怎样的?如果我篡改了公钥呢?怎么防止?

 

   Get和Post,讲下区别,要我模拟出抓包来。

 

    详细讲下Cookie和Session,Token,OAuth2.0协议;

 

    拥塞算法知道吗?哪些,分别怎样?

 

    学过计算机网络是吧?socket熟悉吗?对它的读写缓冲区有理解吗?怎么的?那滑动窗口是怎样的?为什么这样设计?

 

    再聊下Http的Http basicauthentication;

 

   Https的过程;

 

五、框架相关

 

    聊下Spring源码,知道多少,都聊一下;

 

    聊下Spring注解,@Autowire,@Resource,以及他们的解析过程;

 

    聊一下架构,接入层架构,服务层架构。聊下技术栈,Spring Boot,Spring Cloud、Docker;

 

   Spring ioc的具体优势,和直接New一个对象有什么区别;

 

   Servlet生命周期,是否单例,为什么是单例;

 

   Spring Mvc初始化过程;

 

五、分布式相关

 

    多少种RPC框架?

 

    一致性哈希是干嘛的?

 

    搭建高并发高可用系统需要怎样设计?考虑哪些东西,有多少说多少。

 

    你对缓存有什么理解?缓存是解决什么问题?后端缓存有哪些,分别解决什么问题?

 

    聊一下分布式锁;

 

    你是怎么设计系统缓存的,为什么,什么场景;

 

    也来说下,削峰的多种实现,Redis?MQ?

 

    为什么用mq就能削峰?解决什么问题?

 

六、设计题

 

    有几台机器存储着几亿淘宝搜索日志,你只有一台2g的电脑,怎么选出搜索热度最高的十个搜索关键词;

 

    如何设计算法压缩一段URL;

 

    有一个页面能同时展示两个广告,现在有五个广告,设计算法使五个广告展示概率为1:2:3:4:5;

 

    有25匹马,五个赛道,用最少比赛次数将25匹马排序;

 

 

七、多线程

 

    AtomicInteger底层实现原理;

 

    synchronized与ReentraLock哪个是公平锁;

 

    CAS机制会出现什么问题;

 

    用过并发包下边的哪些类;

 

    一个线程连着调用start两次会出现什么情况?

 

    wait方法能不能被重写,wait能不能被中断;

 

    线程池的实现?四种线程池?重要参数及原理?任务拒接策略有哪几种?

 

    线程状态以及API怎么操作会发生这种转换;

 

    常用的避免死锁方法;

八、JVM

 

    Minor GC与Full GC分别在什么时候发生?什么时候触发Full GC;

 

    GC收集器有哪些?CMS收集器与G1收集器的特点。

 

    Java在什么时候会出现内存泄漏;

 

    Java中的大对象如何进行存储;

 

    rt.jar被什么类加载器加载,什么时间加载;

 

    自己写的类被什么加载,什么时间加载;

 

    自己写的两个不同的类是被同一个类加载器加载的吗?为什么?

 

    为什么新生代内存需要有两个Survivor区?

 

    几种常用的内存调试工具:jmap、jstack、jconsole;

 

    类加载的五个过程:加载、验证、准备、解析、初始化;

 

    G1停顿吗,CMS回收步骤,CMS为什么会停顿,停顿时间;

 

    栈主要存的数据是什么,堆呢?

 

    堆分为哪几块,比如说新生代老生代,那么新生代又分为什么?

 

    软引用和弱引用的使用场景(软引用可以实现缓存,弱引用可以用来在回调函数中防止内存泄露);

九、Linux基础

 

    Linux下可以在/proc目录下可以查看CPU的核心数等;cat/proc/下边会有很多系统内核信息可供显示;

 

    说一下栈的内存是怎么分配的;

 

    Linux各个目录有了解过吗?/etc、/bin、/dev、/lib、/sbin这些常见的目录主要作用是什么?

 

    说一下栈帧的内存是怎么分配的;

 

    Linux下排查某个死循环的线程;

 

    动态链接和静态链接的区别;

 

    进程的内存分布;

 

    如何查找一个进程打开所有的文件;

 

    说一下常使用的协议及其对应的端口;

 

    为什么会有内核态,保护模式你知道吗?

 

    文件是怎么在磁盘上存储的?

 

    有了进程为何还要线程呢,不同进程和线程他们之间有什么不同。(进程是资源管理的最小单位,线程是程序执行的最小单位。在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持SMP以及减小(进程/线程)上下文切换开销。)

 

    InnoDB聚集索引B+树叶子节点和磁盘什么顺序相同;

 

    文件系统,进程管理和调度,内存管理机制、虚地址保护模式;

十、其他相关

 

   Tomcat缓存,聊下缓存的整体理解,知道多少种缓存;

 

    解释下Mucene原理,倒排索引,怎样进行中文分词,基于什么进行分词;

 

   TopN的大数据量题;

 

    你对接入层要思考什么东西?遇到过哪些问题?搭建系统要考量哪些因素?

 

    然后项目问题,优化问题;

 

    熟悉maven是吧?我们来聊下Maven的源码原理,Maven冲突的时候,怎么选择依赖包,我们怎么查,我们遇到两个不一样的版本,我们应该如何去选择,为什么?

 

    项目如何分组,性能优化小组应该做哪些;

 

    我们来说下接入层的搭建,认知分析;

 

    问下项目的系统构建,思考,为什么这样构建?

 

如何判断一段代码的好坏;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值