前两天收到携程的Java后端的面试邀请,总结一下自己的不足
- 有一套简单的Java基础的笔试题
- 写一个单例模式
- 一个有序的数组,显示一个X的位置
- 在64位操作系统中,8个基本数据类型占用多少字节
然后进行了面试
- 项目中有没有用到线程池,在什么情况下用到的,用的哪一种线程池,线程池的线程配置了多少,为什么这样配,配置之后性能提升多少
- 说一下jvm的垃圾回收机制,什么样的数据会进行回收
垃圾回收机制有四种,标记清理,复制,标记整理,还有一种是分代回收。 - hashmap的数据结构,怎么存储的,怎么根据key的hash确定数组下标
hashmap的数据结构是数据加链表的形式,根据key值的hashcode值通过算法得到一个数组下标,然后在数组对应的链表中判断是否有相等的hashcode,如果有进行覆盖,没有的话进行next存储。 - 知道可重入锁吗?什么是可重入锁,怎么实现的
可重入锁:我们使用的ReentrantLock和synchronized 都是可重入锁,当一个线程已经进入方法获取到锁,这个已经获取锁的线程再次进入这个方法不会被自己锁住。会判断线程是否是当前线程,如果线程为同一线程,内部维护一个变量,变量值加1;线程执行完,变量相应的减1,当为0时,锁才被这个线程释放 - 说下你知道的Spring aop,是怎么实现的,用Java实现的动态代理和cglib的有什么区别
- spring事务有哪几几种,如果先开一个事务,然后又重新开一个新的事务要怎么做
- 说下nginx
- spring mvc的调用流程
- currenthashmap知道吗?和hashtable 有什么区别
- 在项目中sql怎么优化?数据库的索引怎么能提高的查询的速度?b+树为什么能提高查询效率
- 在项目中有没有有jvm参数进行调优
虽然面试问题都是一些基础常见的问题,但是一些问题还是没有深入了解,还需要沉下来心,再接再厉。