杭州蚂蚁金服java高级社招面经

1. jdk1.7 jdk1.8 Map 发生了什么变化(底层)?

1.8之后hashMap的数据结构发生了变化,从之前的单纯的数组+链表结构变成数组+链

表+红黑树。也就是说在JVM存储hashMap的K-V时仅仅通过key来决定每一个entry的存

储槽位(Node[]中的index)。并且Value以链表的形式挂在到对应槽位上(1.8以后如果value

长度大于8则转为红黑树)。

但是hashmap1.7跟1.8中都没有任何同步操作,容易出现并发问题,甚至出现死循环

导致系统不可用。解决方案是jdk的ConcurrentHashMap,位于java.util.concurrent下,专门

解决并发问题。

2. ConcurrentHashMap

思路与hashMap差不多,但是支持并发操作,要复杂很多

3. 并行跟并发有什么区别?

并发:指应用交替执行不同的任务,多线程原理

并行:指应用同时执行不用的任务

区别:一个是交替执行,一个是同时执行。

4. jdk1.7 jdk1.8 java 虚拟机发生了什么变化?

5. 如果叫你自己设计一个中间件,你会如何设计?

6. 什么是中间件?

中间件是处于操作系统和应用程序之间软件,使用时旺旺是一组中间件集成在一起,构

成一个平台(开发平台+运行平台),在这组中间件中必须要有一个通信中间件,即中间件=

平台+通信。该定义也限定了只有勇于分布式系统中才能称为中间件

主要分类:远程过程调用、面向消息的中间件、对象请求代理、事物处理监控。

7. ThreadLock 用过没有,说说它的作用?

ThreadLock为本地线程,为每一个线程提供一个局部变量,也就是说只有当前线层可以

访问,是线程安全的。原理:为每一个线程分配一个对象来工作,并不是由ThreadLock来

完成的,而是需要在应用层面保证的,ThreadLock 只是起到了一个容器的作用。原理为

ThreadLock的set()跟get()方法。

实现原理:

public void set(T value) {

Thread t = Thread.currentThread();

ThreadLocalMap map = getMap(t);

if (map != null)

map.set(this, value);

else

createMap(t, value);

}

public T get() {

Thread t = Thread.currentThread();

ThreadLocalMap map = getMap(t);

if (map != null) {

ThreadLocalMap.Entry e = map.getEntry(this);

if (e != null)

return (T)e.value;

}

return setInitialValue();

}

8. Hashcode()和equals()和==区别?

(1) hashcode()方法跟equals()在java中都是判断两个对象是否相等

(2)两个对象相同,则hashcode至一定要相同,即对象相同---->成员变量相同

---->hashcode值一定相同

(3)两个对象的hashcode值相同,对象不一定相等。总结:equals相等则hashcode一定相等,hashcode相等,equals不一定相等。

(4) ==比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间)

9. mysql 数据库中,什么情况下设置了索引但无法使用?

10. mysql 优化会不会,mycat 分库,垂直分库,水平分库?

11. 分布式事务解决方案?

(1) 什么是分布式事务?

a.什么情况下需要用到分布式事务?

a)当本地数据库断电、机器宕机、网络异常、消息丢失、消息乱序、

数据错误、不可靠TCP、存储数据丢失、其他异常等需要用到分

布式事务。

(2) 分布式系统中,实现分布式事务的解决方案:

a. 两阶段提交2PC

b. 补偿事务TCC

c. 本地消息表(异步确保)

d. MQ 事务消息

e. Sagas 事务模型

(3)

12. sql 语句优化会不会,说出你知道的?

(1)避免在列上做运算,可能会导致索引失败

(2)使用join时应该小结果集驱动大结果集,同时把复杂的join查询拆分成多个query,

不然join越多表,会导致越多的锁定和堵塞。

(3)注意like模糊查询的使用,避免使用%%

(4)不要使用select *节省内存

(5)使用批量插入语句,节省交互

(6) Limit基数比较大时,使用between and

(7)不要使用rand函数随机获取记录

(8)避免使用null,建表时,尽量设置not nul,提高查询性能

(9)不要使用count(id),应该使用count(*)

(10)不要做无谓的排序,尽可能在索引中完成排序

(11) From语句中一定不要使用子查询

(12)使用更多的where加以限制,缩小查找范围(13)合理运用索引

(14)使用explain查看sql性能

13. mysql 的存储引擎了解过没有?

(1) MySQL存储引擎种类:

(2) https://blog.csdn.net/m0_37888031/article/details/80704344

(3) https://blog.csdn.net/m0_37888031/article/details/80664138

(4)事务处理:在整个流程中出现任何问题,都能让数据回滚到最开始的状态,这种处

理方式称之为事务处理。也就是说事务处理要么都成功,要么的失败。

14. 红黑树原理?

(1)红黑树的性质:红黑树是一个二叉搜索树。在每个节点增加了一个存储位记录节点

的颜色,可以是RED,也可以是BLACK,通过任意一条从根到叶子简单路径上颜色

的约束,红黑树保证最长路径不超过最短路径的两倍,加以平衡。性质如下:

i.

每个节点颜色不是黑色就是红***>

ii. 根节点的颜色是黑色的

iii. 如果一个节点是红色,那么他的两个子节点就是黑色的,

没有持续的红节点

iv. 对于每个节点,从该节点到其后代叶节点的简单路径上,

均包含相同数目的黑色节点。

 


#蚂蚁集团##社招##面经##java工程师#
全部评论
Thread local. Thread lock
1 回复
分享
发布于 2021-08-10 12:28
threadlocal 加黑了都没发现打错了吗
1 回复
分享
发布于 2021-08-10 15:50
博乐游戏
校招火热招聘中
官网直投
高级社招?
点赞 回复
分享
发布于 2021-08-08 08:53

相关推荐

2 29 评论
分享
牛客网
牛客企业服务