惊喜
最后还准备了一套上面资料对应的面试题(有答案哦)和面试时的高频面试算法题(如果面试准备时间不够,那么集中把这些算法题做完即可,命中率高达85%+)
lz:因为使用了分段锁segment。
面试官:为什么分段锁比同步锁效率高?
lz:分段锁就是把Map分成了多个segment去处理,进行put操作时,根据hashcode找到相应的锁,彼此之间不受影响,所以效率高。而同步锁–锁住的是整个HashTable,因此效率会低。
面试官:知道HashMap的实现原理吗?了解hash碰撞吗?
lz:HashMap是一个数组+链表的数据结构。采用hashing原理,在进行put 操作时根据Key计算出它的hashcode,根据hashcode找到相应的桶的位置。在进行get 时也是根据hashcode 找到相应位置的数据的。当发生hash碰撞时,即hashcode相同。那么会在相应的桶中形成一个链表结构进行存储。
4.如何保证订单重复提交的问题(当发生网络延迟等情况)
lz:楼主只回答了前端校验和后端校验具体其他操作不是很清楚,下面答案引用自百度百科只列举几个经典的(力争为园友提交较可信的答案)
更详细的答案可以参考:http://www.bkjia.com/jingyan/471187.html
1:在前端进行校验,当表单提交后,把提交按钮置灰
2:表单提交后进行页面重定向,转到处理结果页面。
3:在session中存放一个标识符(当表单数据被请求时,在session中生成一个标识符放在表单隐藏域中,当后端处理表单数据时,检查标识符是否存在,如果存在则表明第一次提交并从session中清除标识,如果不存在则表明重复提交)
4:在数据中添加约束
5.防止订单重复支付问题
lz:我们公司的支付都是跳到微信或支付宝的(–把此问题抛给了腾讯和阿里);但是我们自己应该也能想到一种解决方法:就是同一笔订单我们可以设置它的支付状态。
更详细的答案可参考:https://www.jianshu.com/p/530228b71888
6.Spring原理(Ioc、Aop、动态代理)
lz:Ioc呢就是不需要我们手动创建new对象,把这个动作交给了Spring容器去管理,大大降低了程序的耦合度。
Aop采用的就是动态代理的技术来实现切面编程的。
面试官:djk动态代理和cglib动态代理有什么不同?
lz:JDK只能代理实现了接口的类,cglib采用继承的方式 两种类都可以代理。(注意final类和静态方法是不能被代理的,因此aop也不能织入静态方法)
7.对事物了解多少(主要是特性、传播机制、隔离级别)
lz:事物主要的特性就是:原子性、一致性、隔离性、永久性
隔离级别:default数据库默认的隔离级别、未提交读、已提交读、重复读、串行化。
传播特性:PROPAGATION_REQUIRED 、PROPAGATION_SUPPORTS 、PROPAGATION_MANDATORY、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER、PROPAGATION_NESTED;
具体请参考:https://blog.csdn.net/weixin_38070406/article/details/78157603
lz抛个问题:假如一个没有事务的方法调用了有事务的方法然后有事务的方法又调用了其他无事务的方法。那么请问事务还生效吗?(欢迎留言评论)
8.MySQL索引
lz:主键索引、唯一索引、普通索引、组合索引
具体请参考:https://blog.csdn.net/goodsave/article/details/78018174
再抛个问题:假如表中建立了一个组合索引(name、city、age)当查询时采用city、age时索引生不生效?
9.数据库执行计划
lz:具体一些细节就是怎么优化sql、还有查看sql语句性能,当然就是采用执行计划(explain)的方式了。
具体可参考:https://blog.csdn.net/wangpeng047/article/details/12849331
10.线程池
最后
对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
再分享一波我的Java面试真题+视频学习详解+技能进阶书籍
笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**