这次是和面试官面对面进行交谈的。
首先一段自我介绍,简单介绍一下自己,简单介绍一下擅长的领域以引导面试官提问相关的问题,然后说一下自己的项目。
1.说说你的项目的,具体有哪些模块,你负责哪些部分
(这个问题因人而异,详细介绍一下项目即可)。
2.项目用了几张表,那些表的操作比较活跃
大概用了9张吧,我记不太清了。因为目前项目正处于推广阶段,因此用户表的操作比较频繁,我想以后使用人数稳定下来以后会好一些。商品表和订单表也使用非常频繁,因为是项目的核心功能,因此用到的地方有很多。(这个也根据项目实际说明)
3.你做了校内学生的校验是吗?怎么实现的
我是用简单的对称加密把同学输入的账号和密码进行加密传到后台,服务器进行解密并模拟一个http请求访问学校教务处网站,如果用同学输入的账号密码登录成功则校验成功,然后只保存他的学号,否则校验失败。
4.你的项目已经上线了吗?我可以用一下看看吗?
可以,微信小程序搜索就能用。(然后面试官打开小程序摆弄了一会儿,说做的很好。)
5.你的数据库用的是什么?
mysql
6.使用索引了吗?
用了,根据不同表的实际使用场景创建了唯一索引和组合索引
7.说说组合索引
先说明了组合索引的左边缘原则,然后说到我使用了innoDB引擎,在索引存储方式上与myisam有区别。myisam引擎存储一张表分为三个部分,表定义,表数据,表索引三个部分,innoDB则不同,整个表都是存储在一个依据主键生成的聚簇索引上边,聚簇索引的叶子节点即存着每条信息。如果再创建其他索引,那相当于创建了一个二级索引,存储索引的B+树的叶子节点上村的是主键的值。每次在通过二级索引检索数据时都会发生两次遍历树的操作。而且InnoDB引擎的事务支持和更小的锁力度也是我选择他的原因。innoDB是行锁,myisam是表锁,因此innoDB的并发效率比myisam引擎强很多。
8.你做后端主要是用的什么框架啊
主体框架是spring,web层用了springMVC,dao层是mybatis。
9.对Spring了解吗?
还行,我最近正在看Spring的源码。看到了ioc容器启动的部分。(接下来一顿夸Spring框架有多么好,解决了那些问题)。
10.那我现在有个场景,有一个对象A,其中引用了对象B,对象B其中引用了对象C,对象C其中又引用了对象A,这个情况在IOC容器中是怎么加载的呢?
(这个问题其实就是Spring的循环依赖问题)
IOC容器加载对象时有一个Map结构的初始化池,正在初始化的对象会放到池子中。Spring使用依赖注入的形式去实现依赖翻转,注入的方式有构造函数注入和set方法注入。如果选择构造函数注入的话,首先加载A对象,把A对象放入池子中,然后发现A对象中有B对象的引用,于是递归循环地去加载B对象,把B对象放入池子中,然后递归循环加载C对象,把C对象放入池子中,然后发现C对象中有A对象的引用,递归加载A对象,然后发现A对象已经在池子中了,这时候因为Spring默认是单例模式的,C对象要引用这个A对象,然而A对象还没有初始化完成,无法使用,于是就会抛出异常。
如果我们选择set方式注入,A对象在加载时放入池中,然后加载完毕从池中取出,这是通过set去注入B对象,B进入池中,加载完毕,B出池。然后通过set给B注入C的引用,C加载入池,加载完毕,C出池。然后给C对象注入A的引用,这时由于A对象已经构建完毕,就可以注入到C中了,这样就不会发生异常。
11.你还有什么想问我的吗?
咱们公司里边Java语言用的多吗?
面试官:我的部门主要技术栈就是Java,捎带一点Node。(然后主要讲了部门的业务这些)
至此结束面试
小结
大连腾讯无线是隶属于的腾讯的一家公司,今天面试官问的都不是很难,我答的也比较好。主要是围绕项目吧。其实有个小项目还是挺不错的,可以和面试官聊很多项目上的事,而且你自己做的项目,项目中使用的技术和一些难点你自己也清楚,能很好的说明。
这是我第一次和面试官面对面交谈,还好我已经经历过5场面试了,不然肯定会非常紧张的。
转载自原文链接, 如需删除请联系管理员。
原文链接:大连腾讯无线Java研发实习一面面经20190325,转载请注明来源!