BAT面试Java岗经验汇总:面试重点规划+精选面试120题+6
前言
每到年后,总会有很多人跳槽。可我发现一个奇怪的现象:那些跳槽的人,总是从一个坑,跳进令一个坑中。毕竟一年过去了,会的还是原来的知识,人的身价就摆在那里,无论怎么折腾,也不会拿到更好的offer。这样的跳槽其实没有意义,也许就有人问,现在都是互联网寒冬了,要怎样才能把握好机会,拿到跟好跟适合自己的offer呢?技术才是我们程序员的立身之本,在再好的机遇面前我们也要有这个实力去抓住它。
快到年后跳槽季,我这里整理了200道大型互联网公司面试常问的面试题和答案及面试经验总结(答案文末获取及更多架构面试专题资料领取!),希望在你的求职路上有一定的帮助。
面试重点规划:
Java程序员面试常问的重点技术问题:数据结构与算法,JVM内存结构、垃圾回收器、回收算法、GC、并发编程相关(多线程、线程池等)、NIO/BIO、性能优化、设计模式、Spring框架、分布式相关:Redis缓存、一致Hash算法、分布式存储、负载均衡等,微服务以及Docker容器等。
大厂高频常问的Java面试题如下:
java基础
HashMap1.7和1.8的实现区別
HashMap中插入、添加、删除除元素的时间复杂度?
ConcurrentHashMap的实现原理?
newString(),一共创建了几个对象?
序列化和反序列化的底层实现原理?
hashCode和equals方法的区别和联系?
讲讲String、StringBuilder、StringBuffer?
Object类中常见的方法,为什么wait notify会放在Object里边?
Arraylist与LinkedUstKU空间是多少?
HashMap的默认空间、扩容因子等?
若hashcode方法永远退回1或者一个常量会产生什么结果?
浅拷贝和深拷贝的区别?
反射的作用与实现原理?
Java提供的排序算法是怎么实现的?
多线程
说说synchronized实现原理(对象监视器)?
volatile实现原理(禁止指令重排、刷新内存)?
ThreadLocal原理分析,ThreadLocal为什么会出现OOM,出现的深层次原理?
CAS无锁的概念、什么是乐观锁和悲观锁?
AQS同步队列是什么?
什么是ABA问题,出现ABA问题JDK是如何解决的?
常见的原子操作类?
偏向锁、轻量级锁、重量级锁、自旋锁的概念?
一个线程连着调用start两次会出现什么情況?
线程池的实现?
重要参数及原理?
说说四种线程池?
任务拒接策略有哪几种?
线程状态以及API怎么操作会发生这种转换?
JVM
JVM运行时内存区域划分?
常见的GC回收算法及其含义?
什么是类加载器?
什么是双亲委派模型机制?
一个类的生命周期、类是如何加载到JVM中的?
说说类加载的过程?
什么是强引用、软引用、裝引用、虚引用?
Minor GC与Full GC分别在什么时候发生?
什么时候触发Full GC?
Java中的大対象如坷进行存储?
为什么新生代内存需要有两个Survivor区?
设计模式
单例模式
动态代理
工厂模式
责任链模式
MySQL
MySQL常见的存储引擎以及他们之间的区别?
MySQL索引为什么使用B+树?
MySQL覆盖索引是什么?
MySQL索引失效的条件,索引在什么时候不会起效果?
MySQL如何进行优化的?
什么是explain命令?
MySQL遇到的死锁问题、如何排查与解决?
常见的数据库优化方案,在你的项目中数据库如何进行优化的?
什么是redo日志,什么是undo日志?
分布式数据库
说说常见的几种分布式ID的设计方案?
分库与分表带来的分布式困境与应对之策(如何解决分布式下的分库分表,全局表?)
如何拆分服务、水平分割、垂直分割?
Redis
Redis使用场景?
Redis有哪些数据类型?
说说Redis持久化机制?
Redis为什么是单线程的?
什么缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级?
说说Redis常见的回收策略?
Hash—致性算法?
Redis和数据库数据一致性的问题?
Redis中zSet跳跃表问题?
Nignx
请解释什么是C10K问题或者知道什么是C10K问题吗?
正向代理和反向代理?
Nginx几种常见的负载均衡策略?
Nginx服务器上的Master和Worker进程分别是什么?
Zookeeper
什么是Zookeeper通知机制?
Zookeeper集群管理(文件系统、通知机制)
讲讲Zookeeper分布式锁?
获取分布式锁的流程
Zookeeper数据复制?
zookeeper是如何保证事务的顺序一致性的?
zookeeper是如何选取主leader的?
zk节点宕机如何处理?
zookeeper负载均衡和nginx负载均衡区别?
说说zookeeper watch机制?
消息队列问题及集群分布式
消息队列使用的场景介绍和作用(应用耦合、异步消息,流量削锋等)
如何解决消息队列丢失消息和重复消费问题?
什么是CAP、Base?
说说最终一致性理论?
什么是RPC、如何实现RPC、RPC的实现原理?
什么是Dubbo?
Dubbo的基本原理、执行流程?
集群Session解决方案?
分布式事务?
说说三种分布式锁的实现?
集群、负载均衡、分布式、数据一致性的区别和联系?
网络编程
三次搌手和四次揮手、为什么揮手需要四次
什么是TCP粘包/拆包
TCP粘包/拆包的解决办法
从游览器中输入URL到页面加载的发生了什么?
什么是长连接和短连接?
Spring
讲讲静态代理模式的优点及其瓶颈?
对Java 接口代理模式的实现原理的理解?
如何使用 Java 反射实现动态代理?
谈谈对Cglib 类增强动态代理的实现?
什么是 AOP?
讲解OOP与AOP的简单对比?
讲解JDK 动态代理和 CGLIB 代理原理以及区别?
什么是 IOC?
Spring IOC 怎么管理 Bean 之间的依赖关系,怎么避免循环依赖?
BeanFactory 和 FactoryBean 有什么区别,BeanFactory 和 ApplicationContext 又有什么不同?
谈谈Spring Bean 创建过程中的设计模式?
微服务
什么是Spring Boot ?
Spring Boot有哪些优点?
Spring Boot中的监视器是什么?
如何实现Spring Boot应用程序的安全性?
如何集成Spring Boot和ActiveMQ ?
如何监视所有Spring Boot微服务?
如何使用Spring Boot实现异常处理?
什么是Spring Cloud ?
使用Spring Cloud有什么优势?
服务注册和发现是什么意思?Spring Cloud如何实现?
负载平衡的意义什么?
什么是Hvstrix ?它如何实现容错?
讲讲Hvstrix断路器?
个人软实力
软实力主要就是指平时在语言沟通、逻辑思维、面试的积极性和主动性、简历的优化技巧等方便。
通过软实力来突出自己的优势,与硬实力的结合,才是你自己真正的实力体现。
沟通和逻辑思维能力:对一个问题的表达方式,逻辑思维(像有些人的发言就让人听上去很有层次感,很舒服),沟通的层次感,善于短时间突出重点。
面试的积极性和主动性:尤其是BAT,特别喜欢主动性和积极性的人才,主动性的人更加擅长于克服当前的困难,并把事情做好,在遇到挫折后,更容易调整好心态,且积极去推进项目。这一点,在面试的沟通过程中,有经验的BAT面试官可以通过与你的交流细节,可以捕获到部分你的性格优势和劣势。总之,主动性和乐观性的人,更有利于今后的发展,这一点不仅仅适用于面试,更适用于今后的工作发展。
简历的准备:简历重点是突出自我介绍、擅长技能、项目经验。自我介绍要做到一句话就能表述清楚自己的优势,比如:学习能力(短时间熟练掌握技能)、个人履历(BAT背景优势)、积极努力(个人推动什么项目等)。
擅长技能:专业技能的描述词无非就那么几种:精通、熟练、熟悉、了解。精通感觉一般还是不要写,除非你在某个技术点上真的有足够的把握,真正能做到精通一门语言、一个分布式框架这才是精通。熟悉、熟练居多、精通是典型的金字塔顶部。总之,简历不要过于突出精通项数,而是突出精通的领域。
项目经验:突出自己的王牌项目,最有技术含量、挑战和帮助最大一个项目讲就足够了,面试的过程中面试官也会重点让你描述这个擅长的项目,提前模拟这个项目的讲解顺序和重点,而不是临场讲解。
做一个靠谱且有责任心的人:很多公司在内部的面试细则上面都会注明这一点,如果价值观或是人品问题会直接否决。没有一个面试官不想找一个技术出众又有责任心的人,请相信我,责任心非常重要,更有利于今后的晋升。
最后,在你通过了硬实力和软实力的考核后,剩下的就是缘分了,你的面试气场与BAT面试官的匹配度,每一个面试官都希望找到与自己类似的求职人才,这也许就是闻味吧。
最后
针对上面的高频常问面试题我还总结出了适合于1-5年以上开发经验的java程序员面试涉及到的绝大部分面试题及答案做成了文档和学习笔记文件以及架构视频资料和高清架构进阶学习导图免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习,也可以关注我一下以后会有更多干货分享。
资料领取方式:加QQ群:935692859 进群免费领取资料!
点击链接加入群聊【Java架构交流二群】:点击进群