前两天收到携程的Java后端的面试邀请,总结一下自己的不足

  1. 有一套简单的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参数进行调优

虽然面试问题都是一些基础常见的问题,但是一些问题还是没有深入了解,还需要沉下来心,再接再厉。