一面:
- 首先自我介绍,说了一些学校啊,专业啥的
- 问了正在实习中的岗位主要负责什么
- 手写一个单例模式,就双重检查加同步synchronized,volatile(然后就开始问synchronized和volatile的实现原理)
- String,StringBuffer,StringBuilder的区别,以及为什么String是不可变的,还有String类的内部属性应该怎么设计保证不可变(回答内部属性可能是一个char类型的数组,使用final来修饰,这个我猜的。。。)
- 说到final又接着问final修饰属性,方法,类的区别,还有final修饰属性不可变,那为啥可以修改属性的值(回答final修饰的引用是不可变的,但是引用的对象是可以改变的,面试官也没有深入问,这个问题就算过了)
- 手写一个算法吧:使用两个栈来实现一个队列,还好之前在牛客网刷到这种类型的题目,原理很简单,但是要注意处理边界的条件
- 说到redis,让我说一种熟悉的数据类型以及怎么实现的,这个时候当然要提hash了,因为和java中的hashMap很相似,所以接下来就问了HashMap(实现的原理,hashcode计算,hash冲突的解决办法,这个我是真的很熟练,看样子面试官也很满意),ConcurrentHashMap(分段锁以及怎么确定这个段多大合适)
- 怎么解决sql注入问题,JDBC自己怎么实现,怎么使用连接池来操作(连接池的实现原理)
- 一面基本就是这些吧,有些真的想不起来,然后没多大会我就开始二面
二面
- 上来就让写一个算法,将数组中的所有数组合成一个最大的整数(回答不太好,感觉自己算法太差,把想法具体手写代码表达出来的能力太欠缺)
- git常用命令
- 数据库引擎有哪些,InnoDB和MyISAM的区别(说了从事务的支持方面,锁的粒度,查询的速度,索引的类型,问我就只有这些吗?。。。。。)
- 数据库的隔离级别
- 写了一堆数据,让写个sql,