可以作为你面试的项目亮点的文章,不来看看吗?

前言


有一些读者来信:“乔兄,我这项目没有啥亮点,这可如何是好?”“乔兄,我明天就要面试了,能帮我想一两个项目亮点吗?”看到这些问题的时候,一时之间也想不出具体亮点来契合大家的项目,这几天花了点时间特地为大家准备了两个项目亮点,希望大家可以灵活地把这些亮点套到自己的项目上。

Why?


看到这里有人会问,“乔兄,为何你推荐的这些案例就可以作为项目亮点?”

“对于大多数人的项目,可以说都是在低并发的环境下进行,对于项目的并发度可以说非常之低,远远达不到企业中可能出现的并发量级,在这种环境下,如果我们可以提出关于java虚拟机方面的案例,一方面可以吸引面试官的眼球,另一方面说明我们具有jvm调优的经验,而在以后的工作中,作为一名java开发工程师,是不可避免地要去为了效率去进行jvm调优,所以可以作为项目亮点,高出其它面试者一小截~”

案例1


项目背景

我的第一个项目,我这样和面试官说,我说我负责舆情监控项目的地域分析模块,这个模块其实很平平无奇,很水。

地域分析模块就是利用一个开源的斯坦福的NER命名实体识别的包去识别出来新闻正文的地点,每识别出来一个地点,会自动在新闻正文中标记出这个新闻的坐标,然后根据这个新闻的坐标去找到在新闻正文中出现的位置,把这个地点文字获取到,然后统计地点出现的次数这样的一个简单的模块。

项目亮点

看我是如何强行把我之前看到的一个jvm调优的案例加到我的项目。

是时候表演真正的技术了!

640?wx_fmt=png

最深刻的一个项目难点(亮点)就是最近做的网络舆情监控项目,其中我在里面有负责一个地域分析模块。

地域分析模块就是从最新爬进来的新闻数据里面提取出来地域信息,最后在地图上显示出来,当时把后台模块写好了以后,是可以在本地的windows系统上运行的。

然后导出jar包的时候,想把jar包在linux系统上运行起来,但是一运行就显示OOM内存溢出错误。

当时遇到的这个问题的时候第一时间想起来了以前看的关于虚拟机方面的书,于是我在虚拟机的配置上添加了-XX:+HeapDumpOnOutOfMemoryError,尝试将dump文件保留到本地,然后采用了jmap命令去分析这个dump文件。

发现代表老年代的参数Old Generation每次一启动都是一直满着的,然后去看了虚拟机的配置参数,发现虚拟机中的-xmx参数只有128M,而程序需要的内存大小为2048M(因为需要加载一个MIT的提取名词的包)。

所以最后通过慢慢地调大-xmx这个参数,增大jvm虚拟机中堆得最大值,直到设置成1024M解决了这个问题,这个就是我的项目亮点。

PS:示例看不懂也没关系,这个得有一定的java虚拟机的知识才可以看懂,推荐看《深入了解java虚拟机》,关键在于我的这种思想,就是说你可以把自己在平时积累中遇到的难点,想方设法地去加到自己项目中,成为自己的项目亮点。

案例二


项目亮点来源

这道题目是来源于我面试百度的一道面试题。

题目是这样子的:面试官:这个是我们在实际业务中遇到的,就是用户反映系统会周期性地出现卡顿现象。

640?wx_fmt=jpeg

面试官给我画了一个上面这样的图,横轴代表时间,纵轴代表系统的性能,可以看成,过了一个周期系统性能就会到底一个低谷值,然后又慢慢恢复正常。面试官问我是什么原因。

我的思考

我略作思量,目前我手里的牌只有jvm虚拟机的知识,其它我实在想不出和这个问题相关的答案,于是我推测和jvm虚拟机垃圾回收有关。

jvm虚拟机垃圾回收会发生stop the word(中文翻译过来就是停止这个世界,也就是说会使得正常的工作线程停止运行),这样工作线程停止了工作,那么系统性能必然下降,于是我抱着自己的这种猜测这样回答这个问题。

我推测是与jvm垃圾回收有关。jvm虚拟机中将堆分为新生代和老年代,而当new了一个对象以后,由于是强引用,这个对象在经历minorGC的时候,年龄会变大,在达到参数MaxTenuringThreshold的值的时候,就会进入到老年代中。一直进行这个过程,那么老年代中的活着的对象就会越来越多,最后老年代满了以后发生fullGC,而fullGC是很耗时间的,尤其是当老年代越大,那么fullGC就越耗时间。这个系统周期性出现这个问题的就是由于对象周期性地把老年代填充满了,然后jvm虚拟机周期性地去进行fullGC去回收垃圾,当回收的时候系统性能就下降,当回收结束时系统性能就上升。

那么如何解决呢?通过调整新生代与老年代的比例(该值可以通过参数 –XX:NewRatio 来指定),调低老年代占的内存大小,这样老年代很快就满了,就会提前进行fullGC,直到调整到发生fullGC时候对于系统性能影响不大的时候(用户察觉不出来),那么调优结束。

面试官听完以后,满意地点了点头,我感觉应该算是推测正确了。

项目亮点


“乔兄,那么如何把这个面试题变成我的项目亮点?

“别急,看我72变~”

640?wx_fmt=png


首先我们来了解一下jstat命令。

640?wx_fmt=png

上图来源于《深入理解JVM虚拟机》这本书,讲解了jstat命令的作用。

对于你的任意的一个项目,比如说你做的网站,你都可以说你的网站在运行的时候周期性地遇到出现卡顿现象。出现卡顿了,你肯定想去找解决方法,于是你想到了jstat这个命令,去观察jvm虚拟机的各项指标。

在观察的过程中,你发现FGC这个参数很大,说明fullGC进行的很频繁,而且FGCT也就是fullGC总的耗时时间很长,所以你推测这可能是jvm虚拟机频繁地进行fullGC导致了系统出现周期性的卡顿,这时候你再按照我刚才说的解决思路,说一遍给面试官听,那么你的项目亮点可能就会让你在你的面试中加分~

结束语


这两个案例大家完全可以套在自己的项目中,当做自己的项目亮点,可以看到对于项目亮点一方面是通过平时的积累,见多识广,把优秀的经典案例记下来;另一方面则是面试官出的实际业务中的场景题。多看,多想,多思,那么运气总不会太差~

END

往期精彩回顾

我的2019校招
如果时光倒流,我会这样学java
极有可能是你朋友圈最全的3T编程资料分享!!!

扫一扫

640?wx_fmt=jpeg

有干货

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值