2022.09.19招银网络面试
面试时间30分钟
自我介绍以后,首先简单的聊了一下天,还学过哪些语言,为什么学习了Java,怎么接触到Java的,在学校有没有选修过Java的相关课程,你认为Java语言相较于其他语言有什么优势(我答了一个Java的跨平台优势和Spring框架的开发优势)。
- 你了解多态么?(第一个问题就没大想好咋回答,啰里吧嗦说了一堆,还举了Service的例子。但是面试官听完之后还是表示了对我的鼓励,说我能明白你的意思,这种东西确实有的时候用语言不好表达。。)
- 你刚才说了Service,那你能简单说一下SpringMVC框架么?(搞不大清楚侧重点,就从MVC三者代表的含义说了一下)
- 你刚才提到了Controller,你能说一下Controller主要是做什么的么?(又搞不大清楚了,这次又从Controller、Service、DTO这三层说了一下,这题不是第一次考过,我居然还是不会。。)
- 你平常开发使用SpringBoot,那么你能说一下SpringBoot和SpringMVC的区别么?(从SpringMVCxml配置带来的不便和局限性谈了一下Springboot简化开发的优势)
- 所以SpringBoot是框架么?(这个我又搞不懂了,难道SpringBoot不是框架么。。没办法我又从上一道题摘取了部分关键点重复了一遍,最后得出结论,是框架。。)
- SpringBoot框架使用了很多注解,说说你对注解的理解?
- 你平常自己写过注解么?你出现过注解无法使用的问题么?(刚开始我说没有出现过,因为真没出现过怕追问,但是后来我想了一个可能是没有把注解类放到IOC容器中所以导致无法使用,面试官没有回应对还是错就接着问下面的知识了,此处存疑)
- 接下来我们说说数据库,你了解数据库的事务么?(从事务本身和ACID说了一下)
- MySQL数据库事务的隔离机制有几种?
- 接下来说说并发编程,实现多线程有几种方式?
- 你提到了线程池,线程池的优点有哪些呢?
- 如何实现分布式锁呢?(这个地方刚开始我直接答得是通过Redis实现分布式锁,还有项目中使用到的通过Consul实现分布式锁,但是面试官不是想问这个,他的意思是不使用中间件,直接实现分布式锁,这我又不大会,答了一下使用synchronized关键字和lock锁,面试官没多说什么,不知道我这里回答的对还是不对)
- 你刚才提到了Redis,能不能介绍一下Redis的几种数据结构?(此处全场最尴尬,因为前面的就算真不大会或者搞不清楚面试官想问啥好歹还可以先胡侃一顿让面试官自己筛选有效信息,此处我自己先答了一句“随着版本更替,Redis逐渐支持了更多的数据类型”,结果后面说完最常使用的那几种后,BitMap,HyperLongLng这几个新的我是一个都想不起来咋说了,直接尬在那,面试官还在那边等我回答,有一段长达十数秒的沉默。最后憋了半天想起来一个Geo,BitMap还忘了英文咋说了,只好说还有一个位图类型,真是难受死我了)
- 了解缓存穿透么?缓存穿透主要的解决方案有哪几种?
- 最后说说设计模式,你了解Spring框架的设计模式有哪些?说出几个来
- 你刚才说到了单例模式(经典又见单例),那么你认为单例设计模式中最简单的实现是哪个?(我回答了饿汉式,问了下面试官用不用详细介绍一下,面试官说不用,觉得我知道饿汉懒汉就差不多了,当然估计也是时间快到了的缘故)
总结:
- 我把题目一般分为“软问题”和“硬问题”两种,这位面试官明显软问题问的比较多,第一次见到面试从Spring开始问的,估计是我在Java为什么好和举多态的例子那里都用到了Spring的例子,搞得面试官可能是认为我Spring框架精通。。虽然不大难,但是前面这部分答得堪称折磨,感觉我说的和面试官想问的东西总是有差距。
- 面试官人不错,问题问衔接也比较自然,都是根据我回答的内容去提问的。整场下来实事求是的讲难度不是特别大,当然我有的部分回答的也不好,写出来供大家参考和批评。
- 没有一句对项目的考察,可能后面会有涉及