互联网2020年java面试题汇总

2020年年初,新冠把我限制在出租屋20平米的空间里,每天吃喝睡觉,空虚的要死。闲来无事那就准备跳槽吧。准备了三个半月的时间,投了约300份简历,面试了小二十家公司,最近也刚收到了几个互联网公司的offer, 今年的形势下还算满意吧,面试的过程是痛苦的,但是也是值得的,未来的你会感谢现在努力的自己。

今年的疫情影响,很多行业都多少受到些许冲击,我不是科班出身,在传统行业也呆了太久,所以面试过程最开始还是很紧张的,吃不好睡不好的,不过慢慢的就习惯了,只接收面试结果就行,多多少少有些阿Q精神,自我保护而已。正好最近在准备入职,事情不是很多,汇总下面试过程中实际遇到的问题,掌握理解的话应付大厂的一面,二面基本没任何问题(到最后我基本都是一面全对,二面会最多错一个问题),我挂的最多的就是三面(牵涉到项目经验、项目管理和架构设计)这块,没办法,毕竟没实际的互联网项目,项目没有亮点,挂的最惨。

自我介绍

自我介绍这个是必须的,我这边大概准备了1分钟左右,主要是自己的教育和项目背景,自己在工作中承担的角色,比较出色的经历。另外这里说一点,基本每轮的面试结束后,面试官都会问,你有什么问题要问我吗?这个要准备一下,要不然还是有点尴尬的,比如一面二面的时候就可以问,具体的岗位职责是什么,会用到哪些技术栈,到了三面、四面再问技术可能就不太合适了,可以拿面试过程中答错的问题的某个点,和面试官交流一下,面试官基本上还是很乐意去探讨这些东西。

另外,必须要有1-2个能介绍的非常熟悉的项目,面试的时候会让介绍项目的整体功能,系统框架,核心技术栈等。这个要言简意赅,而且还要让面试官明白,这些都是你自己擅长的,和面试管聊这些都会是加分点。如果讲不明白的话,面试官理解不到位就会直接跳过项目,感觉就会丢分吧

java基础

  1. HashMap的put和get过程大概描述下,是怎么解决Hash冲突的?还有别的方法解决Hash冲突吗?
  2. StringBuilder和StringBuffer的区别,高并发下用StringBuilder会存在什么问题,现象是什么?
  3. 一致性Hash怎么实现?主要解决了什么问题?(TreeMap)
  4. Synchronized关键字和Lock关键字的区别?平时哪个用的最多?Synchronized锁的优化过程及原理(偏向锁、轻量级锁、重量级锁、对象头)
  5. CAS怎么实现的,有什么缺点吗?JDK中是怎么实现公平锁和非公平锁(AQS)?
  6. ConcurrentHashMap简单介绍下,已经有链表了为什么要有红黑树?为什么不直接用红黑树呢?
  7. 用过ThreadLocal吗?如果用过的话value存的什么值?会存在哪些问题?还有哪些情况会导致内存泄漏?内存泄漏和内存溢出的区别?ThreadLocal怎么获取某个线程中变量的值(线程id)?
  8. JMM模型是什么?知道Happens-before吗?volatile关键字的作用是什么?底层怎么实现的?
  9. 知道JIT吗?干什么用的,和其他编译有什么区别?
  10. 在实际的项目中用过设计模式吗?常用的都有那种,大概介绍下使用的业务场景?用设计模式的时候怎么规范(设计模式的原则)?Spring都用到什么设计模式?
  11. 线程有几种状态?怎么自定义一个线程池?线程池各个参数的含义?过期之后回收的是哪些线程?应用的是哪种阻塞队列?ArrayBlockingQueue和LinkedBlockingQueue的区别?有哪些拒绝策略?
  12. 场景:有一个线程池:5个核心线程,最大线程池数是10, 阻塞队列的长度是5,有10个任务线程过来,这时候线程池中有多少线程?
  13. 知道死锁吗?写一个死锁,在实际的项目过程中用到过死锁吗?怎么发现死锁(jstack)?怎么解决死锁(顺序获取锁,活锁)?

JVM

  1. CMS和G1的区别及各自的优缺点,两种GC回收器的回收过程(四个阶段)中,哪个阶段会出现STW?
  2. JVM内存模型有几部分?介绍下类的加载过程。
  3. 类加载器都有哪些?为什么要这么设计?怎么打破双亲委派?实际使用过程中哪些框架自定义了双亲委派?怎么实现自己的类加载器?
  4. JVM怎么优化?常用的参数有哪些?
  5. JVM调优过程大概说一下(简历中提到了这块,所以都会重点的问,只是根据实际业务,在内存资源有限的情况下调整新生代:老年代空间比例为2:1,默认的是1:2)

nginx

  1. 在项目中,用的了nginx的什么功能?了解nginx的反向代理吗?

mysql

  1. mysql有哪几种存储引擎?
  2. mysql怎么实现事务的?锁机制了解吗?有哪几种锁?锁能解决数据的幻读吗?mysql是怎么解决幻读的?
  3. mysql有几种索引类型,索引的数据结构是什么?BTree和B+Tree的区别,为什么要用B+Tree?
  4. 做过mysql的优化吗?优化思路是什么?explain都有哪些字段及各个字段的含义?(因为简历中重点提到了有优化经验,所以sql优化这块都会问到)。
  5. 左前缀原则了解吗?有组合索引(a,b,c),a=1,c=2,b=3会走索引吗?a=1,c=2哪些走索引? a=1,b>2,c=1哪些字段走索引?
  6. 什么情况下会导致索引失效?对子查询进行过优化吗?

 

spring

  1. spring是怎么管理事务的?能从底层介绍下吗?(AOP、动态代理)
  2. spring的事务隔离级别有几种?传播机制有几种?Not-surpport在有事务的情况下会报错吗?
  3. spring是怎么解决循环依赖的问题?
  4. spring的生命周期有那几个阶段?(实例化、赋值、初始化、使用、销毁)

dubbo

  1. dubbo的调用过程是怎么的?都有哪些组件?
  2. 集群容错机制都有哪些?项目中用的容错机制是什么?支持的负载均衡都有哪些?支持的序列化方式有哪些?
  3. dubbo的自动装配用到的核心技术是什么(SPI)

 

项目、设计、管理(三面)

以上知识应付第一轮第二轮基础面试我感觉没什么大问题,死知识,多理解几遍就没问题。我这边面试的时候前两轮都会通过,一般是死在第三面,下面罗列了些问题,有些问题和我自己的简历项目有关。

  1. 系统怎么设计?(完全没有着力点,这个问题太大了:我回答的:需求调研-框架设计-迭代开发-测试部署-运维支持,面试官直接下一个问题,已经凉凉)
  2. 新的需求过来了,你们公司是怎么处理的?所有的需求都会满足吗?(需求评估、影响评估、开发评估、部署评估这些吧,当然不会都满足)
  3. 你们公司对代码是怎么规范和管理的,因为管理漏洞出现过什么问题吗?(类、字段、方法统一命名,必须加注释等等吧,看面试官的表情,这不是他想要的答案)
  4. 代码编写的过程中,接口是怎么规范的?原则是什么?(原则好像就是设计模式的设计原则,开闭原则、接口隔离原则等,没答出来,出来的时候想了下,可能是想要这个答案)
  5. 说下你最擅长的项目,这个项目从需求调研到运维支持都需要经过哪些流程?
  6. 重构项目的话,你们公司是怎么做的?(比如把一个jar包服务拆分部署到多个服务器,用dubbo调用等,面试管说太笼统了,能不能抓住一个业务点,详细的说一下。我的回答当然是不能)
  7. 微服务拆分的界定是什么?怎么理解微服务?(根据具体的业务进行拆分,好像不对)
  8. 项目代码重建之后,对实际的业务有提升吗?会带来其他的什么负面影响吗?(肯定有提升,支持了节点的动态扩展,而且模块之间的耦合度降低了,负面影响:模块之间的调用会受网络影响,运维和部署难度增大)
  9. 我看你项目中用到了rabbitmq,这个支持了哪些业务?为什么要选择rabbitmq?(我知道加一个定时器就足够支撑业务了,rabbitmq完全没必要,就把mq的作用说了下,两个面试官不依不饶的追着这个点不放,让我着实的心虚痛苦,后来就乱说一气了,也不知道后来都问了什么问题,都是怎么答的。这次面试是我最狼狈的一次,没有之一)
  10. springboot的启动器怎么实现?自己能写一个吗?springboot的启动过程是怎么的(IOC和tomcat)?怎么实现自动注解的(SPI)?

还有很多没有整理,这两天会抽空整理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章