java面试题:2018年6月

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的分页是怎么实现的?

 

上面回到有问题,欢迎留言指导

      

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值