某一面总结

319 阅读4分钟

最近学校有一个宣讲会,刚好最近参加了(面试岗位为java后端)。

可能因为校招吧,也可能是我那个面试官个人风格,我没有做自我介绍,直接开始问问题。文档问题属于比较灵活的,面试官主要就项目对我进行拷打。

我的项目:瑞吉外卖+图书管理系统

两个都是spring项目,图书管理系统其实就是拿上去凑数的,因为我简历一页放的话,太密了,所以分两页,但是两页要求第二页需要写2/3最佳,所以又编了一个图书管理系统。对于这个项目,主要询问了一下bootstrap。

下面介绍一下他: 他包括了css、组件、js部分,p 提供了一个带有网格系统、链接样式、背景的基本结构,让我们只需要具备html和css基础知识就能上手。

使用也很方便,引入后在标签后面添加相关class就可以

回答:结合项目,我提到了bootstrap的表格和表单,追问怎么实现分页。因为我使用boot主要是用他的样式,分页就从jsp那个来说的,就是先拿到后端的数据,在前端table里面变量,通过a超链接设置上一页下一页(修改查询limit的两个值)。追问:有没有使用过vue或者其他前端界面完成中国功能,俺说的是没有。

对于瑞吉外卖:问了redis怎么实现一致性。这个回答主从复制:当主节点有新的数据写入时,会自动同步到从节点,从节点与主节点的数据保持一致。

提问:先删除缓存再删除数据也会有问题怎么办?

回答:对于多线程操作,添加锁(分布式锁),但是因为他性能不友好,选择添加读写锁(介绍原理)

追问:如果缓存删除了,数据库没有成功怎么办?因为我确实没准备这个问题,也没有碰到,就按照组件理解去描述:大概是对两次操作做监听,如果都成功,这个事务成功,如果有一个失败,就回退到最开始,进行重试。(当然,我这个回答是不完善的甚至可以说错的,下来赶紧百度了。)

image.png

这个大佬的回答我感觉和我要表达的意思最接近(虽然里面细节我错的)

提问mysql的in和exists的区别:

子查询记录少,主表大而且有索引,使用in,反之exists。

具体就是:in支持 select * from user where user_id in (select id from B);不支持:select * from user where user_id in (select id, age from B);

但是exists支持。

这个问题没有回答上,然后就结束了。

本来以为g了,结果又被捞再面。

二面是主要问技能方面的。

第一个问题:spirngmvc流程

当时太紧张了,说成了写项目步骤,就是数据库-》dao-》service-》controller-》前端,面试官很好,开始给我引导了一下,提到了前端发送请求,一个先给什么处理分发,马上俺就想起来了。具体内容参考:SpringMVC执行流程 - 掘金 (juejin.cn)

第二个问题:在构建springboot时候遇到的问题

主要问题在构建项目时候需要什么组件,要什么版本(结合我具体实例讲述)

第三个问题:了解了哪些分布式锁

答:有两种保证强一致性的和可用延迟加载的,比如tcc。回答太差了,然后和面试官唠了两句大概是自己对分布式准备没有项目,只是看过知识点不是太熟。

这个问题回答错了:我讲的是事务了

image.png

第四个问题:mysql三范式

当时脑子一抽,只能想起来一范式原子性,二范式唯一,三范式忘记了,然后面试官给引导了一下,说外卖项目里面怎么划分的。我拿了一个分表例子,比如学生表和成绩表,还有一个分字段的例子,比如地址按照省份城市划分。

第五个问题:未来规划。

回答:学习上,大四没课了,毕设那边老师人很好,毕设不用担心。技能上,把瑞吉外卖的支付部分完成,(完成一个分布式支付系统)。生活上,想找一个实现,能一直实习下去,能转正最好。

第6个:反问 我只问了什么时候出结果。

因为那个面试官人很好吧,所以不知道面试过没过,也不太敢问。选择是等通知状态。其实挺感谢掘金更文的活动,里面的问题我大部分都是写过笔记,虽然忘记了,但是大致思路有一点点。

最后就是:大家一定一定要按照组件简历来看面试题,里面一点点小细节都能被问到。虽然我不推荐背八股,但是还是得有一点点印象。

感觉这个面试大概率g了。鼠鼠,落泪!