关注公众号“Java后端技术全栈”
回复“000”获取程序员必备电子书
大家好,我是老田,今天给大家分享的是一位网友,去美团点评面试遇到的技术问题(一面),希望你先用这些题目进行默答,看看自己知道多少。
题目
1、做一下自我介绍吧,简单说一下你的项目?
2、有遇到过内存泄漏吗?你们是怎么解决的?这个前阵子确实遇到过一次,还算运气比较好。
3、java的基本类型有哪几个?String是不是java的基本类型?String为什么要是final类型的?
4、反射机制的底层实现是什么?动态呢?动态的实现原理?
5、HashMap
了解吗?说一下HashMap
相关的一些东西?HashMap
是线程安全的吗?为什么是线程安全的?ConcureentHashMap
了解吗?他是如何实现线程安全的?你刚才说1.8基于CAS
?CAS
的ABA问题怎么解决?
6、说一下JVM的线程模型?这些区域都分别是干啥用的?Java
线程模型和JVM
线程模型注意区分、总结下,网上很多文章都是错的。
7、说一下java类加载器的工作机制?类加载在那个区域进行的?
8、说一下java的线程模型?violate了解吗?他的原理是什么?violate是线程安全的吗?为什么不是?
9、保证线程安全的解决方法有哪些?说一说读写锁吧,读写锁的读
10、数据库的索引有哪几种?为什么要用B+树来做索引?组合索引和几个单个的索引有什么区别?数据库的大表查询优化了解吗?MVCC
机制了解不?MVCC机制有什么问题?怎么去解决这个问题?MySQLmysql
慢语句调优做过吗?说说你是怎么做的?
11、Redis
了解吗?你说说怎么用Redis
实现分布式锁?
12、Spring
中Bean的作用域,Spring MVC
的controller
是线程安全的吗?怎么去保证线程安全呢?
(面经来自于网友:两年工作经验、山鲁亚尔)
看完上面的这些题目,你觉得自己能回答上来多少?按照100
分制,你给自己多少分?
问题分析
1、做一下自我介绍吧,简单说一下你的项目?
两个问题,一是做一个自我介绍,另外就是介绍项目,项目介绍你最熟悉的,或者最能拿出手的项目,不一定就是最近在做的项目。
2、有遇到过内存泄漏吗?你们是怎么解决的?这个前阵子确实遇到过一次,还算运气比较好。
这个问题,就是靠平时总结,如果真的没有遇到过,也是可以自己模拟的,然后使用各种命令和工具进行排查。在面试时候被问到,就大致说一下排查思路,排查过程中用到的命令和工具就可以了。
3、Java的基本类型有哪几个?String是不是Java的基本类型?String为什么要是final类型的?
前面两个问题都是考察基础的,第三问就得自己反思了,为什么要设置成final类型,就得想想final修饰类的时候,有什么特性?在这里起到什么作用?
4、反射机制的底层实现是什么?动态呢?动态的实现原理?
这个也算是考察基础知识是否扎实,重点在动态,以及动态和反射的关系。
5、HashMap
了解吗?说一下HashMap
相关的一些东西?HashMap是线程安全的吗?为什么是线程安全的?ConcurrentHashMap
了解吗?他是如何实现线程安全的?你刚才说1.8基于CAS?CAS的ABA问题怎么解决?
这是几个问题,
HashMap
的问题
你得说一下HashMap是什么,
底层采用什么数据结构实现的,
最好说一下put的过程
JDK版本各版本中是怎么样的。
HashMap为什么是线程不安全的?
ConcurrentHashMap
问题
ConcurrentHashMap
是什么?
ConcurrentHashMap
底层数据结构是什么?
JDK
版本不同,ConcurrentHashMap
在设计上有些什么区别
CAS
问题
CAS
是什么?
CAS
存在什么问题
ABA
问题是什么
ABA
问题如何解决别想看这个题目,很多人都挂在这个题目上。背背面试题,再加上稍微一点点的理解,这些问题都能应对。
6、说一下JVM的线程模型?这些区域都分别是干啥用的?java线程模型和jvm线程模型注意区分、总结下,网上很多文章都是错的。
考察的是JVM内存模型,通常也是考察JVM运行时数据区,注意,这里千万别把Java内存模型搞进来,Java内存模型叫做JMM。
说到JVM运行时数据区,就会提到线程私有和线程共享。
尤其是Java虚拟机栈、堆、方法区,这三个一定的说清楚。
栈和线程的关系是什么?栈中存放的是什么?为什么会SOF?
堆和对象内存分配有关系,所以肯定会聊到对象的生命周期,那就会聊到类是怎么被加载到JVM中的?如何判断一个对象已经死了?同时也会聊到垃圾回收算法有哪些?垃圾收集器有哪些?最新的垃圾收集器是什么?有什么特性?
熟悉哪些JVM调优参数?
这个问题,也是很大部分人会挂的,我也在线模拟面试过很多人,聊到JVM这一块,90%都会挂。
7、说一下Java
类加载器的工作机制?类加载在那个区域进行的?
上面问题中说过了,这个类加载相关的肯定会问,表示你对一个类是怎么从
.class
文件到Class对象
,再到实例
的过程,看看你熟悉多少这些问题也可以从侧面反馈到,你对你每一行代码是怎么运行,会存在什么问题是否有所知晓。
8、说一下Java的线程模型?volatile了解吗?他的原理是什么?violate是线程安全的吗?为什么不是?
Java线程模型你得熟悉一下,volatile也得了解一下,有什么特性,可见性、防重排、原子性。这些也得去了解一下。
这个问题理论性比较强,背背面试题,基本上能搞定。
9、保证线程安全的解决方法有哪些?说一说读写锁吧,读写锁的读
这些都是理论性的,背背面试题就能解决,不是一定要使用过。自己下去好好准备一下就可以了
10、数据库的索引有哪几种?为什么要用B+树来做索引?组合索引和几个单个的索引有什么区别?数据库的大表查询优化了解吗?MVCC
机制了解不?MVCC
机制有什么问题?怎么去解决这个问题?MySQL
慢语句调优做过吗?说说你是怎么做的?
这个相当于是
MySQL
数据库的8连问,8个连环炮你能回答上来几个?基本上也都是平时多看看面经,背背面试题也能应对。
11、Redis
了解吗?你说说怎么用Redis
实现分布式锁?
这个问题,其实看起来简单,回答起来没那么简单的,
这里社交很多东西,不是简单的
setnx
,LUA脚本
就能解决的,涉及到Redis
集群模式,涉及到业务超时等问题。面试官都是给你安排好的,这个得有些真材实料,背面试题只能应付比较肤浅的面试官,遇上认真点的面试官,那就得用自己的真材实料去回答了。
12、Spring
中Bean
的作用域,Spring MVC
的controller
是线程安全的吗?怎么去保证线程安全呢?
这个问题,这里就没有再扯了,因为各大公众号,我的这个公众号之前也发过类似的文章,所以有空别小看公众号的重要性。只是在于积累,平时在车上、地铁上、工位上休息的时候,可以借助于一些琐碎的时间去看一些技术性的公文章,积累自己的认识。
总结
实话实说,上面90%的问题,我们都可以通过背面试题来解决,可能存在个别题需要自己真的去体会体验过才可以搞定。
但是个人始终认为:五年以内的工作经验,面试基本上可以通过背面试题来解决。
推荐阅读:
欢迎关注微信公众号:互联网全栈架构,收取更多有价值的信息。