面试时间:2019.08.15
面试时长:1小时30分钟
面试人:一个面试官+1个人力资源HR
一、面试官的问题
后来回顾了一下,这次的面试太糟了,好几个点当时都答不上来,当时还以为没什么要紧。
面试内容:
- java的基本数据类型有哪些?
- Integer装箱拆箱?Integer底层实现原理?Integer的equal()函数干了个啥?两个Integer变量判断值是否相等,equal还是用==符号,这两者有什么区别?new Interger(1)和Integer.valueOf()
- Java集合了解的有哪些?HashMap的底层实现原理是什么?hashCode(不了解hashCode)?。HashMap有什么问题(线程不安全)?如果想线程安全,该怎么办,用过?为什么你会想到ConCurrentHashMap,它的底层是怎么实现线程安全的,为什么它要用分段锁?
- ArrayList和LinkedList的底层实现原理?ArrayList底层是如何扩容的?Array.ValueOf的实现原理是什么?扩容后,数组引用的地址变化了吗?
- 怎么生成一个单例对象?单例对象的优化?为什么要这样优化?单例模式可以用在哪些地方,举例子?
- 了解线程吗?了解哪些线程的创建方式?Thread和Runnable的创建方式有什么区别?Runnable是接口吗?Thread的底层源码时怎样的,它怎么实现的?
- 了解锁吗,synchronized怎么用,比如说,有多个线程来实现一个计数器,你怎么实现?为什么要用synchronized块,synchronzed块里 除了要让计数值自增外,还要实现什么?计数值自增会引起同步问题,这不是一条语句(因为这不是一个原子操作,布拉布拉…)?synchronized底层实现原理,有读过synchronized的源码吗?(答:不知道,猜了一下底层实现原理,大概是用了悲观锁和乐观锁,或者存下来当前的线程对象,防止其他线程共同使用。瞎猜,实际上没这么简单,Thread实现Runnable接口,调用操作系统的线程,使用了Monitor,原子性、可见性、有序性、JAVA 内存模型、主内存、线程所在内存/缓存、…)?
- 除了synchronized,还有没有了解过其他的锁(答:目前是知道有个lock,但是没有去了解过,也没使用过)?AQS、CAS原理了解吗(不了解,目前知道的它的底层使用了乐观锁和悲观锁)?说一下悲观锁和乐观锁,怎么用(答:说了一下悲观锁和乐观锁的含义,但是没有使用过),底层实现?
- 了解volatile吗?(只见看过,没了解和使用过。涉及到Java内存模型、原子性、可见性、有序性)
- Spring、Spring MVC、Springboot这三者都做了个啥贡献,有什么区别?为什么要用Springboot?
- 说一下Spring的IOC容器有哪些?IOC是干什么用的?说一下控制反转的过程?IOC的工厂是怎么实现创建实例的?你怎么调用工厂创建的实例?除了Autowired方式外,还有什么其他调用实例的方式?IOC创建的实例是单例的吗(答:未做了解,但是我想,因为工厂是使用反射来创建实例的,所以不管待创建的那个类是不是单例类,它都能创建多个实例。不对。应该默认是创建的单例,但是也能创建多例)?
- 你还知道哪些关于SringBoot的内容吗,都说一下?
- https和http有什么区别(不知道)?
- Error与Exception有什么区别?你刚才说它俩继承了同一个类,那个类的类名叫啥?Exception有几种类型?RunTimeException与CheckedException的区别(答:没有深入了解过这俩。面完后查知,CheckedException发生在编译阶段。RunTimeException发生在运行阶段,只有运行时才知道会不会有异常,如空指针、数组溢出等)?
- 为什么你的项目里要对考试答案表分表(这个表的数据/行数会越来越大,布拉布拉…),你是采用什么规则对这个表分表的(按照年份分表,查找某个考试时,先查找该考试的年份,然后再找到对应的考试答案分表,布拉布拉…)?
- 现在我们有这样一个场景:对user表分表,你想采用什么规则来分表,登录的时候怎么找到对应的表?(答:用userId分表,但是不能解决登录时只有帐号和密码,没有userId的问题。用帐号username分表,缺点1是帐号只能由系统设置,不能由用户设置为想要的帐号;缺点2是,此时帐号必须与分表名相关联起来,不然不知道要从哪一个分表中查找)
- 给出一个场景:400人,同时抽奖,奖品数目是400个,讲一下抽奖的思路,你怎么设计,会有哪些问题,用什么数据结构?
- 算法题:怎么找出一个单链表的中间节点?(答:两种思路,一种最笨的方法是先遍历一遍,看看有多长,再遍历该长度的一半。第二种方法:用两个指针,其中一个指针每次走一步,另一个指针每次走两步,这样,当第二个指针总是第一个指针的两倍长度。很可惜,第二种方法我只想出了一半。)
- 你简历里,写了接口隐藏,你的实现思路是什么?怎么实现接口防刷?
- 给出一个场景:限制用户在1秒内只能访问某接口最多两次,讲一下实现思路?为什么不存储在表里?
- 你简历里写了有高并发经验,你是怎么理解高并发的?(布拉布拉…)你是怎么理解多线程同步的?(布拉布拉…)
二、人力资源HR面试问题:
- 感觉刚才面试官问的问题怎么样,还好吗?紧不紧张呀,来,喝点水。
- 介绍你在这几个项目里承担的角色,负责的任务?
- 这三个项目里,感觉哪个比较满意?为啥呀?
- 有女朋友吗?你哪一年的呀?家是哪里的呀?打算以后就在北京工作了吗?
- 以后在北京安家不啦?
- 你有什么疑问想问我吗?
- 你后面还有其他公司的面试吗?你可以先回去等消息哦, 因为还有其他的候选人,明天或者下个礼拜周一,我们给您发送一个最终的面试结果吧,哈哈哈!