18年5月份开始找工作,发现他们的问题其实有很多东西都是和网上差不多,发现面试过程中对基础要求比较多,同时对框架的加载问题问的比较多,一些面试官建议要看spring的源码,以及hasmap的源码等等,问的比较杂,自己先记录下,同时给一样找工作的朋友做参考,后续我会把把自己认为的答案补充上去,欢迎交流
java基础问题:
1:请说说hashmap,hashtable的区别
hashtable是线程安全的,他里面的大部分方法都被synchronize修饰;
hashmap是线程不安全的,在多个线程执行到put方法的时候可能会造成死锁
2:请讲讲hashmap的数据结构以及谈谈rehash()
具体的结构最好去看下专门的网站介绍
jdk1.7:采用数组+链表的模式
jdk1.8:采用数组+链表+红黑树
rehash:
就是当里面的节点数据两达到75%(默认的加载因子),此时就需要进行扩容处理,扩容的处理方式会有些区别,简单讲,就是创建一个新的数组,然后将对应的链表数据重新连到各自链表中
jdk1.7:遍历每个数组链表节点,然后重新计算hashcod,连接到各自的数组中,插入时是插入头节点,使链表原位置颠倒
jdk1.8:遍历每个数组的链表节点(树结构先不说),不需要重新计算hashcod,做个与运算,插入在链表的队尾。
阐述可能不太详细,可以去看源码或者其他博客讲解
3:请讲讲hashmap怎么获取对应的值,什么情况下会使用到其中的链表结构;
计算hashcode,hashcode相同的时候会发生碰撞,此时该数组节点下面会有链表
4:voliate关键字了解么,谈谈对他的理解
线程间是可见的,但是不安全的;
将线程中的的私有内存和公共内存的数据进行同步,但是在进行(load加载+use操作+asign赋值)计算操作时,公共内存的数据可能会变化,导致数据不一致
5:你了解强引用,弱引用,虚引用么?你使用过么?
强引用:不会被垃圾收集器回收(new T() 这个比较常用)
软引用:jvm不足的时候会被回收(网上说可用于图片缓存,我实际中没用到过)
弱引用:都会被垃圾收集器回收
虚引用:不影响对象的生命周期
6:请讲讲linkedlist,arrayList的区别?
一个是链表结构,一个是线性的数组结构
7:假如让你实现arraylist的话,你会怎么设计?
8:你的项目中使用过哪些集合类?请讲讲
我在传统行业,只用过hashmap
9:锁有哪几种?请讲讲
这个我甩连接吧https://www.cnblogs.com/lxmyhappy/p/7380073.html
10:请讲讲java的反射机制
11:请讲讲你们项目中的异常是怎么处理的
12:乐观锁和悲观锁请讲讲
jvm问题:
1:请讲讲类加载机制的过程;
加载:通过类全名获取对应的二进制流,结构的转化存储到方法区中
验证:验证该class是否符合要求
准备:static修饰的变量在方法区分配内存,并赋默认初始值-默认值不是自己定的指
解析:常量池中的符号引用替换为直接引用
初始化:执行类中的方法
2:请讲讲jvm的内存结构是什么?
程序计数器,栈(vm栈+native method栈),堆,方法区,
1.8里面其实有个元空间,去了解下
3:请讲讲gc的方法有哪些?
标记清除法,标记整理法,复制算法(最好结合不同的垃圾收集器去看看)
4:什么情况下对象会进入到老年代?
1)一个对象的空间大于新生代的eden区的剩余空间
2)一个大对象,需要连续的内存空间的,比如很大的String或者数据
3)长期存活的对象(jvm会给每个对象定义一个年龄计数器,用来计算每次minor gc以后仍然存活的次数)
4)某个年龄的所有对象大小总和>survivor的一半,此时大于等于该年龄阶段的对象直接进入
框架问题:
1:请讲讲springMVC加载顺序?
2:spring的注释是怎么实现的?
3:spring的源码有看过么?(请讲讲aop和ioc的的两个包)
4:请讲讲mybatis的加载过程
5:请讲讲servlet的加载过程
实例化,初始化,接受请求service,销毁destory
中间件问题:
1:请讲讲tomcat的加载过程;
emmm。。。。比较烦
2:有使用过消息中间件么?请讲讲
rabbitMQ,kafaka(这里我简单写了)
设计模式:
1:你的项目中有哪些使用了观察者模式?
2:你的项目中的哪些地方使用了单例模式?
数据库:
1:请讲讲对索引的理解
2:请讲讲b+树的结构以及理解
3:你了解oracle的行锁么,请讲讲
4:oracle中的hint了解么,请讲讲
5:oracle的分页是怎么写的?
6:你知道oracle使用rowid方法的时候在多个条件排序下会有个bug,你了解么?
7:请说说左连接,右连接,内连接的区别
8:请写个查询语句分组出男女的总数
9:请讲讲索引的种类
10:请讲讲,你的日常的sql优化是怎么操作的?
11:请讲讲in和between and的区别?
12:mysql的分页是怎么实现的?
上面回到有问题,欢迎留言指导