最新BAT等一线大厂高级Java面试题:基础+算法+高并发+JVM+Redis+Spring全家桶+Mysql

 最近喜报有点多,今天分享面经的这位小伙伴从事Java工作已经4年+。

这两个月陆续参加了多家一线互联网企业的高级Java面试,包括阿里、字节跳动(今日头条)、京东、快手、科大讯飞等,幸运拿下了两个offer,综合考量了下,最终选取了其中1家公司入职。

涉及隐私,这里就不透露具体入职哪家公司,以及每道面试题的具体出处啦,只是将我在过去两个月中所遇到过的面试真题,分类打包一次分享给大家。

面试题目总结

Java 基础部分

基本这些公司都会问到相关基础,所以,一般来说基础的准备是必要并且通用的,所以这部分真的很重要。

  1. 什么是Java序列化,如何实现Java序列化?
  2. Java中的异常有哪几类?分别怎么使用?
  3. 常用的集合类有哪些?
  4. Java有自己的内存回收机制,但为什么还存在内存泄露问题呢?
  5. NIO是什么?适用于何种场景?
  6. 说说HashMap的实现原理,如何保证HashMap的线程安全?

计算机网络

计算机网络部分的题目还是挺容易的,考察的点不会那么深入。

通常来说也就是这些问题:

  1. TCP 有哪些状态?
  2. TCP的滑动窗口协议有什么用?讲讲原理。
  3. 详细描述TCP四次挥手过程?
  4. 三次握手、四次挥手,为啥不是两次?
  5. RPC和http的区别?
  6. HTTP协议都有哪些方法?

Java虚拟机(JVM)

  1. JVM内存模型结构?
  2. 方法区和直接内存什么时候会oom?
  3. JVM收集器G1的内存模型和CMS的内存模型有什么不同?
  4. JVM调优用过吗?
  5. 如何查看Java内存使用情况(jconsole、命令jmap、jstack等等)?

数据库

  1. Join(inner、left、right)的区别?
  2. Union和union all区别?
  3. ACID,具体是啥意思?
  4. 事务隔离级别?
  5. 幻读和不可重复读的区别?
  6. Mysql和Mongodb有啥区别?
  7. ,Mysql存储引擎中索引的实现机制;
  8. 数据库事务的几种粒度;
  9. 如何解决高并发减库存问题?
  10. SQL什么情况下不会使用索引?
  11. 行锁、表锁,乐观锁、悲观锁,区别分别是什么?

Spring

  1. Bean的生命周期?
  2. 什么是DI、为什么DI、DI的类型(构造器注入、方法注入)?
  3. Spring如何解决循环依赖问题?
  4. Spring框架中IOC的原理是什么?
  5. spring的依赖注入有哪几种方式
  6. Spring 如何实现数据库事务?
  7. Spring boot和spring的差别,tomcat如何嵌入spring boot的/spring boot中的tomcat是如何启动的?

多线程

  1. 线程的几种状态,请画出具体的状态流转图?
  2. Java wait、sleep的区别?
  3. volatile如何实现指令重排序?
  4. 线程池中的阻塞队列如果满了怎么办(拒绝策略)?
  5. Synchronized和AQS异同,AQS公平非公平如何实现?
  6. 多线程里面对一个整型做加减为啥不能用volatile?
  7. voliatile和synchonized有什么区别?synchonized和jdk提供的Lock包又有什么区别?

Redis

列举下你所知道的常用的Redis客户端并发模型?

  1. 聊下分布式缓存,一致性hash。
  2. 如何解决缓存单机热点问题?
  3. Memcache与Redis的区别?
  4. 列举一个常用的消息中间件,如果消息要保序如何实现?
  5. Zookeeper有哪些功能?

微服务

  1. 什么是微服务?
  2. 什么是微服务熔断?什么是服务降级?
  3. 微服务的优点、缺点分别是什么?
  4. 你所知道的微服务技术有哪些?列举1-2个案例?
  5. SpringCloud和Dubbo 有哪些区别?

算法

  1. 如何遍历一棵二叉树?
  2. 二叉树宽度遍历?
  3. 用Java写一个冒泡排序算法?
  4. 描述一下链式存储结构。
  5. 数据结构的话,链表,树,图的基本知识得懂?
  6. 了解树的先序遍历,中序遍历,后序遍历。图的广度优先搜索算法,深度优先搜索算法?

HR 面

  1. 除了工作中经常应用到的技术,有关注、学习其它主流新技术吗?
  2. 离开上一家公司的原因是什么?
  3. 你的优、缺点分别是什么?
  4. 未来的职业规划?

面试经验总结

面试题目范围

面试主要考察候选人的基础知识、项目经验、技术深度,每个候选人被问到的题目及难易程度都略有不同。

一方面,要看面试官对你的第一感觉如何(还真有点像相亲),如果你能在面试前几分钟,能给面试官留下好印象,那么你在面试时得到的机会与包容,就会相对多一些。

另一方面,现场面试有60%-80%的题目,可能就出自于你的简历,面试官会依据你简历上提到的知识、经验、项目,去深挖你的技能掌握程度。因此,真的是切记:慎用精通,慎用精通,慎用精通。如果你只是接触、了解某个技术的皮毛,就在简历中说自己精通,保证你会被虐得很惨,最终反而得不偿失。

认真对待每一场面试

如果没有准备充分就去参加面试,既浪费彼此时间,也是浪费来之不易的机会,要知道得到好公司的面试机会不易,机会都是给有准备人的。我始终相信:当下所付出的每一分努力与坚持,都会在未来的某一天,得到丰厚的回馈。

面试结束复盘查漏补缺

每次面试都是检验自己知识与技术实力的一次机会,面试结束后建议大家及时总结复盘,查漏补缺,然后有针对性地进行学习,既能提高下一场面试的成功概率,还能增加自己的技术知识栈储备,可谓是一举两得。

以上,是我在面试过程中所遇到的题目,以及积累到的经验,全部分享给大家。以下是总结出来的大厂经典面试题目及答案

有想获取面试题文档的朋友,见下文档:https://docs.qq.com/doc/DTmJxWU9KWWNvalNL

你可能感兴趣的:(java,jvm,面试,后端,算法)