1-3年面试点整理
mq的底层实现机制,冒泡排序,java的特性,动态代理,重载与重写,现场出sql,现场写算法,设计模式,线程断了,不重启电脑怎么让他执行,跑的任务挂了,怎么不丢数据,不重复执行,就是下次任务在启动,怎么保证,自己设计rabbitmq怎么设计,抽象类和接口的区别,还有mysql主从分离,rpc架构
电面:1、hibernate的一级二级缓存和实现原理
2、乐观锁悲观锁的实现方式
3、java多线程synochronized的使用和实现方式
4、线程同步、线程安全的实现方式
5、线程间通信的方式
6、redis方法
7、mysql索引的使用以及底层存储方式
8、jdbc和mybatis使用的差异和优势?
9、springmvc的使用和流程
java开发电面问题:
问了些之前项目上的一些内容,一些java框架方面的,http协议之类的问题;
算法,list的实现类,假如一个数组筛选出重复的;
索引,ioc,集合,jdbc;
技术-spring,业务-报价,投保,批改;
电面涉及到的问题: spring有哪些技术、hashmap实现原理、谈谈http协议、hashmap使用要注意什么、IOC和AOP原理、数据库跟线程提了、简历项目的问题、想选什么样的公司
题主应该知道B-树和B+树最重要的一个区别就是B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。
这就决定了B+树更适合用来存储外部数据,也就是所谓的磁盘数据。
从Mysql(Inoodb)的角度来看,B+树是用来充当索引的,一般来说索引非常大,尤其是关系性数据库这种数据量大的索引能达到亿级别,所以为了减少内存的占用,索引也会被存储在磁盘上。
那么Mysql如何衡量查询效率呢?磁盘IO次数,B-树(B类树)的特定就是每层节点数目非常多,层数很少,目的就是为了就少磁盘IO次数,当查询数据的时候,最好的情况就是很快找到目标索引,然后读取数据,使用B+树就能很好的完成这个目的,但是B-树的每个节点都有data域(指针),这无疑增大了节点大小,说白了增加了磁盘IO次数(磁盘IO一次读出的数据量大小是固定的,单个数据变大,每次读出的就少,IO次数增多,一次IO多耗时啊!),而B+树除了叶子节点其它节点并不存储数据,节点小,磁盘IO次数就少。这是优点之一。
另一个优点是什么,B+树所有的Data域在叶子节点,一般来说都会进行一个优化,就是将所有的叶子节点用指针串起来。这样遍历叶子节点就能获得全部数据,这样就能进行区间访问啦。
------------------
在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量。这时该变量是多个线程共享的,使用同步机制要求程序慎密地分析什么时候对变量进行读写,什么时候需要锁定某个对象,什么时候释放对象锁等繁杂的问题,程序设计和编写难度相对较大。
ThreadLocal会为每一个线程提供一个独立的变量副本,从而隔离了多个线程对数据的访问冲突。因为每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。
概括起来说,对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。