2019Java面试

1,jdk8的 hashmap扩容实现
2,synchronized锁的优化? 自旋锁的有缺点
3,arraylist和linedlist区别 以及他们插入数据的怎么操作
4,hashmap源码有哪些常量属性
5,1G的文件怎么读取效率高
6,类的加载机制和自己写一个注意写啥  和系统重名报啥错?为什要用双亲委托加载机制?
如果不使用双亲委托类加载机制,比如自己写了一个java.lang.String类,然后自己加载了,这样就会有很大的安全隐患,使用双亲委托类加载机制,可以保证系统的核心类只被BootstrapClassLoader加载。
7,String 为什么是final的?
String被设计成不可继承的,目的是防止继承String类,然后对子类进行一些不当的修改。
8,怎么实现线程安全,各个实现方法有什么区别
9,synchronized是不是可重入锁,重入锁怎样实现的?synchronized和ReentrantLock的区别?
10,volatile关键字的使用
11,进程和线程的区别
12,设计一个线程池
13,说几个设计模式,哪些地方用到了,为什么要用?
14,强引用,软引用,弱引用,虚引用
15,CountDownLatch和CyclicBarrier的区别?
答:CountDownLatch强调一个或者N个线程等待其他N个线程完成某些事件之后才能继续执行。CyclicbBarrier强调N个线程互相等待,当大家都到达屏障之后,N个线程才继续向下执行。
16,LinkedHashMap的结构?
答:继承自HashMap,其中LinkedHashmap.Entry继承自Hashmap.Node,比Hashmap.Node多了一个before和一个after指针,LinkedHashmap有个head节点和一个tail节点,用于排序使用,默认按照节点的插入顺序维护节点的顺序,其实质就是将Entry的before和after互相连接起来。
17,创建线程的几种方式?
    1,继承thread,重写run方法,调用thread.start()
    2,实现runnable接口,重写run方法,将runnable传递到thread的构造函数里面,调用thread.start()
    3,创建Callable接口实现类,创建FutureTask(FutureTask实现了Runnable接口和Future接口),将Callable接口的实现类放到FutureTask的构造函数里面,创建Thread,将FutureTask放到Thread的构造函数里面,调用thread.start()
JVM
1,说一说JVM的垃圾回收机制
2,hotspot里面的垃圾回收器种类,类加载原理(加载字节码到方法区,生成代表这个类的java.lang.class对象 -> 验证这个类是否符合jvm规范 -> 将类的静态属性设置为默认值,例如int类型设置为0,boolean类型设置为false -> 解析 -> 将静态属性的值设置为用户指定的值 )
3,JVM内存各个区域的作用,垃圾回收算法,说说优缺点,新生代里面的Eden,Suvervisor1,Suvervisor2的比例是多少,老年代比例是多少?堆内存默认是多少?最大堆内存默认是多少?新生代和老年代之间GC一样吗?Minor gc和full gc遇到过吗,什么情况会触发?
4,新建一个对象,影响哪些区域?
5,JVM调优过程 
答:JVM调优是一个不断重试的过程,没有一些固定的参数,它需要根据观察项目运行时的GC参数来进行调优。
比如说我们先确定JVM的内存,我们在项目运行稳定之后(比如说压测一段时间),多次观察full gc后的老年代的对象占用大小,这个大小就是活跃数据的大小。比如说占用了100M,那么我们根据一些经验值,将JVM参数堆进行如下设置:整个堆大小为活跃数据大小的3-4倍,新生代的大小为活跃数据大小的1-1.5倍,老年代的大小为整个堆大小-新生代的大小。
然后我们可以优化垃圾回收的延迟情况。我们可以观察垃圾回收时minor gc的情况,观察每次minor gc花费的时间,算出平均的minor gc时间,然后评估是否可以容忍这个时间,如果不能,则需要减小新生代的内存空间。因为空间越大,垃圾回收时花费的时间也就越多。同理老年代也一样,可以观察每次full gc的时间,然后得出一个full gc的平均时间,看看是否能容忍,不能则需要减小整个堆的内存大小(老年代空间=整个堆空间-新生代空间,新生代空间不变的情况下,减小整个堆空间就是减小了老年代空间)。

I/O
1,nio怎么保证非阻塞的
2,java中有没有实现异步IO


Spring
1,spring ioc原理
2,spring bean周期
3,springmvc的运行过程
4,spring AOP的运行原理

Springboot
1,怎么实现一个springboot的starter
 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值