|
像题主有三年半经验了,感觉自己在纯java这块的水平还算可以,jdk比如juc的源码就不说了,自己参考过springmvc,dubbo写过粗糙的mvc,rpc框架,也用go实现过简单的jvm(只是类加载解析,200多个指令集实现,部分native方法实现等,gc还是用的go本身),像netty也专门花过一两个月读了源码,对它的多线程io复用,内存管理都算比较了解。
那像jvm优化,gc,mysql索引机制,redis分布式缓存什么雪崩穿透,分布式协议比如paxos这些,只能说大家都知道的我知道,基本就来自书本和网络文章,确实目前是缺乏去深入了解内核的能力。
项目的话我也做过五六个了,但是缺乏高并发的项目,遇到最高的qps都没过两百,感觉这是可能最吃亏的地方,但也是无能为力的地方。
题主目前尝试面试了3次阿里,感觉遇到的面试官分两种,一种是互动比较高的面试官,会问我一些技术细节,比如rpc原理,netty怎么检测内存泄漏等等,基本我回答后会追问,并且问项目设计上的问题也会给出提示,遇到这种面试官基本面试能过。
第二种是我个人比较悚的面试官,就是基本没什么互动,然后问的问题很宽泛,只听不追问,听完就问下一个。比如问给我讲一下gc,我就不是很清楚这是要问分代收集模型,还是gc算法,还是三色标记具体gc过程,还是cms,g1这些gc收集器的区别?只能想到哪里说到哪里,反正我一直说,面试官只听不追问,等我说完了就再问下一个问题如何处理高并发的线程安全,这个问题我觉得也挺宽泛的,因为高并发和线程安全各自都是一个复杂的场景,我没有高并发实际经验,只能尝试说高并发就是尽量不要把请求直接打到db上,基于这个思路比如秒杀可以前端拒绝大量请求/redis运算写会db/使用限流器balabala,线程安全能尽量减少公共资源竞争最好,如果不行的话,基于实际场景可以用数据库乐观锁/分布式锁/mq串行化处理balabala,面试官依然不置可否(大概和阿里内部的实现方式不一致?),然后接着问下一个问题,总共问四五个面试就结束了,然后面试就挂了。
面了三次,有的是第一轮电面就这样挂了,有的是二三轮遇到第二种面试官挂了,我不知道面对这种宽泛问题应该怎么回答比较好,而且有些概念性问题我觉得我已经答的差不多了…
所以我很想知道我现在无法匹配阿里p6的不足主要是在哪里,需要从哪些方面继续加深努力才可以面进阿里… |
|