简单三分钟自我介绍
自我介绍这里一笔带过,给对面介绍自己内在 + 外在 + 校园经历 + 校园项目 + 意向岗位
技术面
1. Java基础篇
1.1 Object
你知道哪些方法?
我就回答了自己常用的 wait
、notify
、notifyAll
这三个方法,其他自己不怎么使用,就跟技术官说抱歉,其他不怎么使用,就回答不上来,面试官也不停留在这个问题上,直接带到下一个话题。
所以这里总结下,Object
其实还有一个 clone()
方法,这个回答不上了其实真不应该,当前想不起来,还有一个获取类信息getClass()
,可以做映射的东西。
1.2 你了解过哪些list 类型吗
嗯,有两种,一种是 数组,一种是链表,即ArrayList
和LinkedList
1.3 这两种怎么选择使用?
一般的话,如果读操作大于增删改的话,使用数组效率要比链表的好,而如果要频繁修改操作,那么使用链表更好一点
所谓层层递进,就在这里了
1.4 那为什么这么说?
呃,因为数组如果你要增加一个元素的话,比如举例,你有十个元素,那么你要在0号下标增加一个元素,那么你得把后面10个元素整体向后挪到一位,这里我还用手势比划了一下,面试官点头,然后示意我继续,我就说链表的话,只需要修改一下指针就可以了,不用对整体移动,其实这里应该回调内存的连续跟分散会更好一点,因为数组是开辟的连续内存空间,而链表不需要,它是零散的,所以链表读要使用指针,自然而然数组读效率更高。
2. Spring 篇
2.1 Spring 是干什么用到?
Spring
可以方便地给我们管理创建、获取和kill
对象,不需要我们去额外做这一份工作。
2.2 了解过 IOC
吗?
IOC
是控制反转的意思,在Spring
容器中,创建对象的工作不再由我们来负责,而是交由 Spring
容器去管理各个对象的生命周期。
2.3 说一说 Spring 容器管理对象生命周期有什么用?
由于 Spring
容器默认使用的是 Single
单例创建对象,这样各个线程对同一个对象是共享的,就可以做到多个用户请求访问是拿的是同一个实例,不用总去创建对象,导致频繁的 GC
垃圾回收。
2.4 说一说 Spring 中容器它的创建实例的作用域
在 Spring
容器中,有一个属性 scope
,就是一个作用域,它可以指明创建对象是采用单例还是其他方式
单例的话多个线程下是共享实例的,当时只想到 Request
,但这个不是线程级别的,没回答上来,没想到 Prototype
(原型),技术官帮我解围了,说知道我知道想说什么,就是说不出来哈哈。
Prototype
它是一个原型,在多个线程中的创建的单例是互不干扰的,也就是生命周期的处于线程。
当然还有其他,因为不怎么使用,所以就没有怎么说。
MySQL 篇
MySQL 你了解过哪些引擎
嗯?这个我了解过两个,INNODB
和Myisam
这两个是有什么区别?
我就说了第一个默认会使用 行锁,Myisam
使用的是表锁
面试官继续追问,为什么?怎么判断的?
这个我真不知道该怎么回答,我就瞎扯了锁升级,就说 INNODB
因为默认使用行锁,但是如果因为没有索引优化或者语句优化等问题,可能会出现锁升级现象,这是 Myisam
没有的。
面试官一头雾水,但没有反驳,好,继续下个问题。
事务有了解吗?
我说有有,这就来劲了,就说INODB
有事务,但Myisam
没有事务这说法,现在才明白面试官说这两个引擎的区别原来在这里。
面试官没有为难,知道问的差不多了,就开始手撕 SQL
口述SQL
给你一个表,这个表有三个字段,一个是学生 id
,一个是课程名 cname
,一个是课程成绩 cscore
要求:如果有三门课程,要求找出学生的总成绩大于270,并且返回学生id
和总成绩
纳尼,第一个想法就是想着连表查询,当时觉得没戏了,就很挣扎
口述:就是通过三张表自然关联,关联三门成绩,然后关联条件是学生id,where
是三门成绩之和大于270
面试官觉得有问题,这种做法不通用,要我再想想其他方法
想了两分钟,没有思绪,给我个提示:可以使用 group by
分组?那就简单了,我就直接口述了,说可以先分组,然后在每个分组里面使用聚合函数sum
,将总成绩这个条件满足270
的查询出来
当时很紧张,怕错了,面试官一脸微笑的说,是的,思路是对的,你可以用在纸上用笔写下来吗?
他知道我口述可以,但还是不相信我动手能力,瞧不起了,可能之前用那个关联的SQL 手写SQL,出现了一点问题,但在他提出问题的时候,我立马说我可以修改下sql
吗,改了再给他看了下,可能就是因为这个原因,自己不仔细写,给自己埋坑,让面试官对我有了质疑
于是这次我就好好捋了捋思绪,面试官看我迟迟未动笔,说不用紧张,慢慢想,当然我肯定不这么想,当时已经有想法了,只是怕又写错了SQL
,因为当时已经有一个月没刷 力扣 SQL
题型了,想了两分钟左右,写了出来
1 | select sc.sid, sum(sc.score) as sum_score |
就这样,面试官比较满意,就问我为什么当时没想出来,我就说当时他说给三科成绩,很容易就让人想到用联表
到这里 SQL
也没继续写了