右岸物联面经

简单三分钟自我介绍

自我介绍这里一笔带过,给对面介绍自己内在 + 外在 + 校园经历 + 校园项目 + 意向岗位

技术面

1. Java基础篇

1.1 Object你知道哪些方法?

我就回答了自己常用的 waitnotifynotifyAll 这三个方法,其他自己不怎么使用,就跟技术官说抱歉,其他不怎么使用,就回答不上来,面试官也不停留在这个问题上,直接带到下一个话题。

所以这里总结下,Object其实还有一个 clone()方法,这个回答不上了其实真不应该,当前想不起来,还有一个获取类信息getClass(),可以做映射的东西。

1.2 你了解过哪些list 类型吗

嗯,有两种,一种是 数组,一种是链表,即ArrayListLinkedList

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 你了解过哪些引擎

嗯?这个我了解过两个,INNODBMyisam

这两个是有什么区别?

我就说了第一个默认会使用 行锁,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
2
3
4
select sc.sid, sum(sc.score) as sum_score
from SC sc
group by sc.sid
having on sum(sc.score) > 270

就这样,面试官比较满意,就问我为什么当时没想出来,我就说当时他说给三科成绩,很容易就让人想到用联表

到这里 SQL 也没继续写了