如何在面试中介绍自己的项目经验(面向java改进版),2024年最新牧原网上面试一般等几天

在最近的项目里,我用到了Spring Boot框架,具体用到了JPA组件,数据库用Oracle,最近的项目是xx系统,用到了敏捷开发模式,在这个项目里,我除了做coding外,还做过单元测试,讨论需求和详细设计等工作,并且最近的项目进度比较紧,我自己感觉还能主动加班,一起和同事们保质保量地完成项目。

在自我介绍阶段甚至也不必展开项目,因为后面你有机会详细说明,但你第一要以此进一步突出你最近的技能经验和职位介绍很匹配,第二还要以此说明你肯加班等特性(毕竟通过项目举例说明自己肯加班,比单纯说肯加班要可信得多)。

再强调下,在自我介绍阶段,只需要说明自己能胜任当前工作的要点,这些要点不需要展开,比如不必展开说明自己如何排查OOM异常的。而其它没和找工作没关系的,比如兴趣爱好,家庭成员,个人性格等一概不需要说。

大家在面试前,可以根据上述范例练习下说辞,不紧不慢地说这些话,估计也就需要2分钟,哪怕再腼腆再内向口才再不好的人,多练几遍也能说好,但如果因为没说好被面试官认为沟通能力差,就太冤枉了。

3  先介绍项目背景,打消面试官疑问


由于你在自我介绍阶段已经涉及到最近项目了,所以面试官一定就会再问下去。不过不管怎么样,面试官总会问及你最近的项目,所以你总是有机会通过介绍项目经验来验证自己能胜任这份工作。

当面试官让你介绍下最近的项目时,你可以先大致先说下项目背景。因为有些候选人在简历上的项目经验看上去就像学习项目(其实我知道不少项目经验还真是),但你可以通过如下的说辞,证明这个项目是商业项目经验。

我最近是在xx公司(以此突出商业项目)里做了xx项目,这个项目的客户方是xx,已经上线(但如果是web项目面试官大概率会去核对)。这个项目用到了敏捷开发模式(提一下别展开,算抛出个提问点), 这个项目组人员是xx人,做了n个月,我在里面做了xx和xx模块。

你这样一说,能通过项目所在公司和客户方等要素,说明这个项目不是你编的。有人会问了,如果项目真的是编的,该怎么说?这块我不管,你自己想办法说。

但你这样说之前,事先需要做好如下的功课。

1 了解敏捷开发模式,比如站会每个人该说什么,用jira管理进度,一年定好若干个发布日期,一个月发布一次等,因为你提到了,面试官大概率后继会问到。

2 如果你说的是xx财务系统xx图书馆系统等,一些资深的面试官可能会问,这块有现成的项目,为什么你们公司还要自己开发?所以说你在准备项目描述时,不能夸张,比如把一个数据收集模块的维护项目夸张成xx财务系统。不过我也遇到过一些候选人,他们就说这是公司接的项目,为什么人家还要下订单做此项目他们管不着。

3 你一旦说了这个项目,那么面试官就会认为你真实做过,所以其中每个业务需求,比如数据从哪里收集,客户从哪个前端发请求,客户请求处理的流程,以及数据表的规模等信息,你得知道并且事先准备好回答预案,我就经常用此来确认候选人的项目是真实项目还是编的项目。

4 通过说项目管理工具,说明你不仅会写代码


在介绍项目背景之后,你更可以说些项目管理的工具,以此证明你在项目里还做过其它事情,不仅是仅会写代码,具体的说辞范例如下。

在这个项目里,我们用到了maven,用git来管理代码,用jira来管理任务和bug,用jenkins工具来发布。我还用过junit编写过单元测试,我们还用sonar来统计代码的测试覆盖度,我们项目经理要求,只有当“行覆盖率高于80%”,代码才能提交。

上文提到maven,Git和junit这块不难,jira管理bug和task这个也没什么可问,但你要事先了解下sonar管理代码质量的基础知识以及行覆盖率等要点,至于jenkins发布脚本,这个无需一般开发操心,你说下就行了。在上文里你仅仅提到的是工具,但你更要通过这些工具,来进行自我表扬。

我在使用junit时,不会敷衍地编写案例,而会根据真实的业务数据来编写案例,并且我还会着重考虑各种边界情况(这些哪怕初级开发也有本事做到),而且在编写代码时,我会非常注意编码规范,比如定义变量时会让人一看就理解 ,在关键代码地方多写注释,在if等条件里不会写太复杂,一个方法不会写太长,或者你可以再说些其它好的编码规范。而且,一旦遇到我的bug,我会第一时间跟进,并会和相关对应的人一起解决掉。

上述文字,虽然说是自卖自夸,但由于你结合到了项目,所以面试官不会有违和感。而且你这样一说,面试官就会认为你除了写代码外,其它开发项目的综合能力也很强。

不过千万注意,介绍项目经验的目的主要是证明技能的匹配度,所以上文提到的“介绍项目背景”和“说明项目用到的工具”以及“自卖自夸”的说辞,你别说太多,可以通过练习把它们控制在1分钟以内。

5  用Spring Boot项目举例,说明你的技术基本面


然后就需要介绍项目里用到的技术,哪怕你的亮点说辞再说,你也得保证技术的基本面说辞,这里就用当前Java项目的主流框架Spring Boot为例,告诉大家如何以此展示Java开发的基本功。

我们这个项目用到了Spring Boot框架,其中用JPA连接Oracle(或MySQL等)数据库,在控制层里用到了@RequestMapping注解来编写业务处理方法。在业务代码里,是用@Autowired注解来以IOC的方式引入类,还用到了@Service和@Component注解。当我们从数据库里拿到数据后,会用包含@Entity和@Table注解的模型类来映射数据。在这个项目里,我们还用到了@Transactional注解来定义事务,这个注解是作用在Service层上的,在这个项目里,我们还用到多个Java集合类和异常处理类。

通过上文的范例,大家应该可以很好地展示Spring Boot的基本技术面,其实对大多数Java初级开发而言,日常工作也就是用Spring Boot写一些增删改查的工作,所谓根据现有的业务再编写新的业务,所以上述说辞足够了。但是由于你提到了Spring Boot,所以在提问阶段,面试官大概率会问及如下的问题。

1 @Service和@Component注解的差别?

2 各种Restful请求格式以及各种http请求返回码。

3 @Transactional事务里的事务隔离级别和事务传播机制概念。

4 Spring依赖注入概念和@Autowired的用法。

5  Spring Bean的生命周期。

6  甚至可能还会问Spring Boot启动流程以及底层源码。

对Java 0到3年的初级开发而言,其实能按本范例给出的说辞,并结合网上题目说好前4个问题,应该就足以应对大多数的面试了。

6  用实例说明你在内存调优方面的经验


当你介绍好基于Spring Boot的技术基本面以后,你还可以进一步说明诸多亮点,这里就先给出结合项目展示内存调优方面说辞的范例。

(之前是介绍项目技术基本面,比如Spring Boot)在本项目里,我会非常注意内存的使用性能,并在项目里有过排查分析OOM的项目经验,我在编码的时候,也会非常注意内存性能,同时我也了解过JVM内存结构以及GC算法。

不管怎么组织语言,这方面你需要突出四点:第一强调你有内存调优意识,第二说明你有排查OOM的经验,第三说明你写代码的时候也会注意内存性能,第四说明你还了解JVM结构和GC流程的知识。但这里依然要强调,你尚在项目介绍阶段,你说明要点即可,别展开,如果这里你展开说明内存调优的做法,面试官会认为你思路不清晰,不过既然你提到了,面试官可能立即就打断你介绍让你详细说明,或者你介绍完项目后会继续问,总之你是有机会详细展示内存调优亮点技能了。

这里不仅给出项目介绍阶段怎么说,还会给出你后继如何详细回答。

如果面试官事后详细问你排查OOM经验细节时,你可以这样回答。

在测试环境,我们经常会收到内存使用率高于70%的告警,(至于怎么告警的相关设置,你可以看下new relic,如果你是初级开发,甚至不需要掌握相关经验),收到告警后,我第一通过dump命令观察当前内存镜像(你得熟悉下dump命令以及dump文件的打开方式和dump文件的内容),第二通过日志观察是哪个方法抛出的,最后发现是因为在订单模块(或其它模块)一个JDBC连接对象没关闭(或一个大的Hashmap对象用好没clear),所以导致了内存无法回收,发现问题后对应回收掉即可。

这里你结合的业务(比如订单模块)来说明,然后面试官再问dump细节时,你再说下dump文件的结构,这就行了。

如果面试官再问你如何在代码里注意内存性能,你可以这样说:

在写代码时,我会非常注意,在try…catch…finally从句里关闭或释放Connection和大的集合,一些大的对象用好以后,我会及时把它们设置成null,以此提升它们的回收时间,在for等循环里,我不会频繁地操作String对象,因为会产生大量内存碎片。同时,我会非常谨慎地使用finalize方法(事先看下),因为这可能会导致对象无法回收。

其实说上这四点就够了, 如果你自己感觉有本事,可以在了解强引用、弱引用和软引用的前提下在说如下的点,这很值钱。

在数据同步的业务场景里,我用到了弱引用(或软引用),以此提升数据对象的回收时间。

如果面试官问你JVM内存结构及GC(垃圾回收)流程,这其实是理论问题,网上资料太多,靠背就行了,所以这里就不再详细说了。但话说回来,GC流程以及JVM体系结构这方面的理论知识,这属于面试常用考点,你准备下不吃亏。

7  展示你在数据库调优方面的经验


很多候选人其实不会在面试中展示内存调优方面的经验,而你如果按照上述说辞,一方面在介绍项目经验时引出要点,另一方面在后继交流中很好地说明细节,那么可以这样说,你就超越了很多竞争者,甚至说句不该说的话,一些初级开发甚至还能以此充实自己的项目经验。

在介绍项目经验时,如果单纯展示内存调优方面的经验,可能说服力不强,这里再给出用实际说明数据库调优技能的范例。首先你可以在介绍项目时,适当地通过如下的说辞来引入要点。

在本项目里,我参与过数据表设计,所以会考虑用反范式来避免因大表关联而导致的性能损耗,同时我们会合理地设置索引以提升数据库的访问性能,并且我还有过用执行计划优化语句的经验,同时在使用事务的时候,我会非常注意配置事务隔离级别和事务传播机制,以免造成锁表。

同样,在项目介绍阶段,数据库调优方面的说辞不需要展开,给出点即可,由于你提到了,所以面试官在后面大概率会问到。

不过你在面试前,需要准备如下的技能(其实这些技能属于数据库基本点,你不准备反而会有问题)。

1 你去看下索引的数据结构(比如B+树),建索引的语句,索引的种类,尤其是复合索引以及对应的回表和最左匹配原则。

2 事先看下索引的正确用法,以及哪些情况下用不到索引,比如where a != 'xx’可能就用不到。

3 索引的代价(会占硬盘,以及大批量读写时会重建索引,所以性能慢),以及在小表里,无需建索引。

4执行计划的概念,以及通过执行计划排查慢sql时该注意的点(避免全表扫描,设置合理的关联表方式等)。

5 三范式和反范式相关概念,因为你提到了。

6 事务隔离级别里的脏读等概念,以及事务传播机制,尤其地,你要具体说出你项目里用的是哪个。

其实上述点属于面试常考点,但根据我面试下来的结果,一些有3年java开发经验的候选人也未必能说好,不过再一次天地良心,这些技能点不难学,大多靠背就行,所以哪怕你刚毕业,或者只具备少量的开发经验,只要靠用功背下这些要点,一方面在介绍项目时就能很好地亮出要点,另一方面还能很好地应付后继的数据库问题,这样你的表现就足以超出大多数你的竞争者。

8 总结前文说辞


这里根据上文给出的要点,整理下介绍项目经验的说辞。

(介绍项目背景)我最近的项目是在xx公司做的xx社区爱心超市项目(项目别说太大),客户方是xx公司,项目组里是6个人,开发了八个月,最近还在开发,在其中我做了删除和更新订单模块的业务 (如果是在校阶段做的项目需要再加上如下的话),这个项目是我从大三开始,外面找xx公司做的兼职项目,做项目的时候我每月还能拿到钱。

(介绍项目技术,JD上列的尽量说全)这个项目用到了Spring Boot框架,数据库是Oracle,用JPA连接Oracle(或MySQL等)数据库,在控制层里用到了@RequestMapping注解来编写业务处理方法。在业务代码里,是用@Autowired注解来以IOC的方式引入类,还用到了@Service和@Component注解。当我们从数据库里拿到数据后,会用包含@Entity和@Table注解的模型类来映射数据。在这个项目里,我们还用到了@Transactional注解来定义事务,这个注解是作用在Service层上的,在这个项目里,我们还用到多个Java集合类和异常处理类。

(介绍项目管理工具)这个项目用到了敏捷开发模式,用Maven框架,用sonar管理质量,用git管理项目版本,用jenkins发布,用logback打日志, 我在这个项目里,除了写代码外,还有用Junit进行单元测试的经验。我们还用sonar来统计代码的测试覆盖度,我们项目经理要求,只有当“行覆盖率高于80%”,代码才能提交。

(最后抛出亮点)在这个项目里,我用到了单例和工厂设计模式,在这个项目里,我做过JVM调优和数据库调优的的事情,在做项目时为了加深理解,我还看了ArrayList快速失效的底层代码,也看过HashMap关于HashCode以及put和get部分的底层源码。这个项目后期进度比较紧,我也能通过加班等手段保证项目能正常上线,而且一旦遇到线上问题,我也会尽量参与并解决。

大家在面试前,可以根据上述范例合理地准备说辞,次序和内容上可以做调整,但包含的几个要素尽量都说全。如果可以,事先要多练习几遍,确保能足量地抛出你的相关技能和亮点。

不过千万注意,在介绍项目时,对具体的点,比如内存调优,你点到为止,别展开,否则的话,面试官一定会认为里思路不清晰。总之在介绍项目时,需要遵循的要点是:第一要尽可能全面地说明你用过JD上的技能,第二要抛出亮点话题,等待面试官提问。

9 准备项目说辞时,更可以准备后继面试官的问题


其实大多数面试官在面试前,有可能还在调试代码,或者还在开会,也就是他们事先是不会准备面试问题的。所以当你在自我介绍和介绍项目经验时抛出亮点后,他们往往会随口接着这个话题问下去,也就是说,只要实现准备好,你是知道面试官会问什么的。

根据上文给出的项目介绍说辞,你提到了敏捷开发,Spring Boot框架,数据库调优,内存调优,设计模式,junit以及项目管理软件,java集合以及底层源码等话题,在前文里也给出了一些面试官可能问到的问题以及对应的准备要点,除此之外,大家还可以做如下的准备。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

总结

总体来说,如果你想转行从事程序员的工作,Java开发一定可以作为你的第一选择。但是不管你选择什么编程语言,提升自己的硬件实力才是拿高薪的唯一手段。

如果你以这份学习路线来学习,你会有一个比较系统化的知识网络,也不至于把知识学习得很零散。我个人是完全不建议刚开始就看《Java编程思想》、《Java核心技术》这些书籍,看完你肯定会放弃学习。建议可以看一些视频来学习,当自己能上手再买这些书看又是非常有收获的事了。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

学习,你会有一个比较系统化的知识网络,也不至于把知识学习得很零散。我个人是完全不建议刚开始就看《Java编程思想》、《Java核心技术》这些书籍,看完你肯定会放弃学习。建议可以看一些视频来学习,当自己能上手再买这些书看又是非常有收获的事了。

[外链图片转存中…(img-ijd8gwNM-1712981245800)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-HFFkIIK8-1712981245800)]

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值