0
点赞
收藏
分享

微信扫一扫

Java校招面试,项目怎么聊

外贸达人小峻先森 2022-01-23 阅读 134

大家好,我是一个双非院校计算机专业的硕士研究生。在秋招期间,我获得了阿里、字节、携程、科大讯飞、用友的Java开发offer。在面试技巧方面,也是经历了从什么都不懂,面试官问啥我说啥到逐渐熟练,摸出门道的过程。这篇文章总结了我个人在面试过程中和面试官聊项目经验的体会。

1.我的项目经历

我在研究生期间,跟着导师给某糖厂做了管理项目,技术栈为asp.net。这个项目体量挺大的,里面包含了物流、仓储、招标、员工管理等业务模块。但是asp.net这个技术实在太老了,当我在面试过程中对面试官说出asp.net这个词语的时候,大部分面试官都不太愿意聊下去。

我在字节实习期间,做的是一个社区博客系统,技术栈为PHP(没错,我永远找不到Java对口项目)。我负责的比较重要的模块有两个:1、给用户维护一个“K币”的字段,当用户发帖、帖子加精的时候,可以获得K币。K币可以用来在线下兑换礼物。2、个性化定制这个社区系统的权限管理功能。

2.我对面试的错误认知和改进
开始的时候,我认为“面试”这件事情就是“回答面试官的问题”。所以面试的过程一般就是,面试官问一个问题,我会的话就回答一下这个问题,不会的话就支支吾吾说不会,反正一个回合不会超过三分钟。这样面试的效果其实是很差的。第一,这样等于任由面试官把话题往他擅长而你不擅长的地方引导。但是人家能当面试官,肯定在这行已经干出点东西了,而你基础再好,也只是一个在校生,他有100种方法问倒你。第二,面试这个过程并不是用来回答问题的,而是用来让你们俩讨论一个问题的。我见过很多同学,包括我自己,在回答不出当前问题的时候不好意思东拉西扯,任由气氛尴尬,让场子冷掉。其实没有这个必要。

改变发生在我调整对面试这件事的认知之后:面试不应该是“一问一答”,而应该是面试官抛出一个问题,我这边一篇演讲就出来了,只要面试官不打断,我就不停那种。

因此,我准备了几篇“演讲稿”,例如Java集合、JVM、数据库、框架、并发等等。当要面试官问到“Java里面的锁有哪些”,我会从synchronized锁住对象的四种状态,聊到Lock,聊到AQS。如果面试官不打断的话,我会从中引出cas和自旋锁,再把ConcurrentHashMap的东西说一遍。

这样的好处是我没必要把其中一个问题研究得特别深,但是不断地引出相关的话题,仍然会给面试官“这个人真的懂”的感觉。

3.后来我是这么聊项目的

虽说asp.net和PHP的项目和Java不咋对口,但是结合我对面试这件事的全新认知,我在项目方面准备的“演讲稿”大概是这样:

我在糖厂负责的仓储模块是这样的:业务方要求系统看到糖的两个数据:1、糖的流水,体现的是哪种糖在什么时间因为什么原因而入库/出库。这条数据在数据库里的体现大概是:一级白砂糖,入库,生产入库,一月一号8点,1吨,操作员a。2、糖的库存,体现的是当前每种糖的库存。

最初我们的做法是:在数据库中维护两张表,一张库存表,一张流水表。当有操作发生时,我们对流水表进行insert,对库存表进行update。但是此时有个问题:业务中有一种出库不是由业务员在web系统中操作的,而是由硬件定时更新到流水表中的。对于这种流水,我写了一个定时任务去检测流水表。若这种流水发生了,我就拿这条流水中的数据去更新库存表。

但这样做有个问题:当硬件对流水表做了更新,但是定时任务还没有运行时,这段时间内的库存数据和流水数据是对不上的。

对此我对该模块做了改进:弃用库存表,改用流水表中的每种糖的总入库减去总出库写出视图,作为库存查询的依据。

这样在解决“数据对不上”问题的同时,也减轻了开发量——以后当有出入库操作发生时,只用对流水表进行insert,而不动管库存表了。

同样的逻辑发生在我在字节实习的项目。业务方要求在社区博客系统中,不光要用户看到自己的K币,还要让他们看到K币的明细。所以我就想延续之前在学校做项目的做法,用视图来体现当前K币。但是我发现字节的DDL规范里面,赫然写着五个大字:禁止使用视图。原因是不易排查慢查询问题。所以只能老老实实在对明细表insert的同时,对当前K币进行update。此时我会借机把慢查询的解决方案聊一遍。

无论这时候面试官问不问,我都会引出,那么既然视图这个东西有缺点,对于糖厂的项目有没有不用视图的方法呢?

是有的。第一点,硬件数据问题:既然出入库数量都在硬件数据中,那么完全可以请负责硬件程序的老师在做完流水表插入的同时,完成对库存的更新,没有必要在系统中做定时任务。第二点,流水表和库存表数据对不上的根源其实就是对这两张表的操作没有同时成功同时失败,那么我可以在程序中引入事务。

这时候面试官不打断的话,我会把事务聊一遍:ACID,分别是什么意思。如果使用Java来完成这些逻辑的话,我会启用Spring中的@Transactional,然后把其中的事务传播机制和隔离级别聊一遍。

这样的话,只要面试官不打断,我可以把项目聊够15分钟。虽然并不是Java项目,可以体现我熟悉业务逻辑、库表设计、数据库事务、慢查询的解决方案、Spring,我的目的也就达到了。

面试并不是让大家去回答问题的,而是让你去向面试官证明,自己是真的懂某类问题的。所以在聊项目的同时,引出相关理论知识并且成体系地表述,是我总结出的和面试官聊项目的正确姿势。

举报

相关推荐

0 条评论