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. 对于每个节点,从该节点到其后代叶节点的简单路径上,
均包含相同数目的黑色节点。
全部评论
(3) 回帖