如何准备Java面试?如何把面试官的提问引导到自己准备好的范围内?

3 如果你感觉还有能力,可以再讲些MyCAT分库分表和redis方面的调优能力,毕竟这块涉及到分布式组件。这方面可以准备的项目说辞是:比如业务请求里,会经常用公司ID向风控模块看风险情况,那么就可以用ID做键,风控字段做值,另外再把null放到键里,以放缓存击穿。另外对于一个千万级别的大表,你可以用ID作为分表字段,分10个表,根据最后一位的值定位到具体的表。同时排查所有的SQL语句,把一些可能全表关联的SQL语句,比如带group by和多表关联,或者用Java业务写,或者优化。同时再网上看些面试题准备些相关MyCAT和Redis的语法说辞。这样你会额外增加“分布式性能调优”方面的经验。

在虚拟机方面,我另外有篇博文:在面试中如何展示虚拟机和内存调优技能,大家可以照着准备,总之也是先结合项目展开,然后围绕虚拟机结构展开调优技能,再可以照这篇文章内部类、final与垃圾回收,面试时你一说,面试官就知道,进一步展示你的能力,同时再能照如下的范例,说出你解决过的OOM问题。

第一步,发现系统很卡,或者日志里频繁出现OOM异常。第二步,用dump文件看OOM时的内存镜像,看的工具可以是JMAT。这两个步骤是通用的。

第三,通过dump文件,再结合日志上下文,发现了OOM的原因,比较简单的原因是Redis缓存超时时间过长,或者是ThreadLocal里的对象用好没remove(这块还涉及到弱引用,大家可以自己去查,本文不展开),或者创建线程池时,等待队列设置成了无界,或者你在mybatis里,where条件都是带if的,即如果传入id和name再拼装where id = xxx之类的语句,在一种场景里,都没传条件,所以where后面不带条件,把数据库里记录全捞出来了,导致OOM。

如果你再经历过,甚至可以说到Netty堆外内存管理不善而导致的问题,如果能说到这个程度,甚至面试架构师都行。

第四是解决,发现问题后,对症下药解决就很容易,比如降低Redis超时时间,或者修改好对应的代码。但既然你说是根据线上问题排查出来的,那么就得说如何解决,善始善终。总之这里是结合线上问题发现的,所以就别说些因Connection对象没关闭,大的HashMap用好没clear之类的问题了,倒不是这些原因不会引发OOM问题,而是这些问题大多会在上线前测试阶段解决掉了,你再把它们说成线上问题,可能会暴露你们项目组能力不行。

5 java核心方面,准备集合,线程和异常处理等方面的亮点

通过上述分布式组件和调优方面的说辞,你展示的能力已经比别人强很多了,虽然相比之下,java核心方面的能力属于单机版的技能,但毕竟属于基础技能,你除了基本问题之外,也得适当准备亮点。如下给出些同样适用于初级开发的亮点。

1 集合方面,可以准备下HashMap和hashcode的底层代码,同样可以准备下ArrayList和快速失效࿰

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值