标签:volatile 总结 组件 虚拟机优化 缓存 如何 面试技巧 时间 mvc
和2017年的税后收入相比,19年的税后收入预计能翻番,当然基数绝非是5万10万,毕竟17年的时候我已经达到了Java高级开发的职级。而且在这基础上,尚能做到生活工作平衡。
回想起来,作对了不少事,也走了不少弯路,所以打算用若干篇系列文记录这一过程,一方面也算个总结,另一方面也把走过的弯路写出来,希望各位朋友看了有所收获。
在2017年初的时候,我在外企也享受了一段比较舒适的时光,到什么程度呢?
1 早上应该是9点上班,但9点半办公室里会有一半的人,从9点45开始,一些老油子(也包括我),会陆续到达,一些混吃等死的人(不是我),会10点或者更晚后到。有些人可能会想,这不算什么,人家互联网公司有比这个时间更晚的,但外企前天的下班时间一般不会超过7点。
2 到了以后,先看下美国的邮件,如果没大事(一般不会有),早上慢慢回下邮件,到11点半吃饭,外面逛一圈,周五能逛两圈,1点15开始干活写代码。
3 下午,如果遇到可能会担责任的事,就拉上人开个会,大家定个方案,然后慢慢做,做到5点半,坐等下班,如果很忙,不会超过7点。
4 晚上和老外开电话会议,一般一周1次,晚上9点到10点。国内老板管人事,业务向美国方汇报,国外用的技术绝对没国内先进,所以大家懂的。
5 一年过两份假期,中国的之外,美国假期当天没邮件过来,所以次日一般也没事。比如7月4日是独立日假期,美国不上班,所以我们7月5号一般没邮件,也相当于没事。
说到这里,可能大家非常羡慕,其实天下没免费的午餐,我这样的工作经历过以后,技术落后到什么程度?
1 平时工作,java只需要JDBC,Spring都用不到,ORM就用类似hibernate的框架,由于没业务需求,组里还专门成立spring cloud学习小组,就学些基本的demo案例。
2 SQL就一般的增删改查,也就是个MySQL主从读写,没有LVS。
3 部署用Jenkins + Git + Sonar,这块勉强没落后,这是我难得的能带到新公司的技术。
4 Redis用单机版的,Nginx + lua,也就是个调研项目,Netty或kafa或Mycat等组件,没听说过,甚至dubbo都没机会用。
所以当时,只要是组内跳槽出去的,过三个月后技术就能超过我们。这还不算,最糟糕的是,当时我更不知道BAT等互联网公司究竟用什么技术,也就是说,我当时开始准备面试时,连该准备什么都不知道。
我是什么时候打算要换工作的?看网上,一些工作年限远小于我的人,在互联网公司里工资比我高,而且奖金至少是4个月的,再结合自己成天技术没进步,就着急了。
刚开始的时候,由于不知道要学什么,只能一方面先看,另一方面先找些小公司去面试。回想起我当前面试的窘况程度,简直不堪回首。
1 面试官问,你分布式框架用过哪些?应该是Redis之类的,但我直接说,用过Spring MVC框架。
2 面试官问,你用过哪些缓存?我说,我用过HashMap里放内容,作为缓存。再深入就不知道了。
3 面试官问,你们数据库层面怎么做优化?我只能说到通过执行计划优化。分库分表,我都没听说过。
后来好些了,也看了诸如Netty和Redis之类的框架,也能撑过些基本问题,比如Redis有哪些数据结构,Netty如何设置编码器和解码器。但一些底层问题一问就倒。比如Redis如何搭建集群,Netty里读写索引的工作原理。
诸如此类,虽然一次次面试失败没回音的滋味不好受,但总算知道了前进的方向,一方面,赶紧根据面试问题,把相关知识点看熟悉,另一方面,会看面试被问到的底层代码。
到后来,我也看了不少文章,这段时间我遇到的问题是,其实到后来,一些组件我都掌握了,而且也看了一些架构方面的书,但一方面没实践经验,面试过程中没法说上细节,另一方面,缺乏架构技术和业务的整合,所以面试时,只要是个资深面试官,就能看出我的技术是看来的,而不是实践得到的。所以一些小的互联网公司我都进不去,更何况是BAT。
这段时间里,用屡败屡战来形容我也不为过,为了提升能力,我也开始在博客园写文章。为了提升自己的技能,我还到一家培训学校去讲课。对,是讲课挣钱,而不是去出钱听培训。当然,那时我Java基本功还是很扎实的,也写了Java Web轻量级开发面试教程和Java核心技术及面试指南这两本书。
通过讲课,我一方面没误人子弟,另一方面在备课的时候,还加深了对Java核心和Web的理解。更重要的是,我结实了不少资深老师,在学生中,也不乏牛人,我也算脸皮比较厚,尚能虚心向人请教,所以那个时候,好歹也搞清楚了该看哪些方面的内容以及需要达到的程度。
之前我是通过面试和看文档,了解外面普遍用到的技术,讲课后,随着接触到更多的牛人,我能清晰地看到自己和平均水平的差距,甚至一度产生了继续在舒适区混的想法。不过幸好,后来面试成功了两家公司,也算增加了我一些自信心,而且我也算危机感比较强,于是终于也坚持下来了。
面成的第一家公司是以外派的身份去一家比较大的互联网,钱不少,但想想是外派,当时我的外企名称毕竟也能唬人,而且好歹还是正式员工,还算稳定,所以就没去。
另外一家是P2P金融公司,也应聘成了架构师,记得当时面试分4块。
第一是Java核心和Web的基本功,比如集合多线程Spring MVC,我这个秒过。
第二是数据库,我好歹看了一些关于执行计划的调优,也了解了一些MySQL的集群,也过了。
第三是大数据,是Hadoop,我一些理论过了,也能证明自己在项目里用过,但被面试官看出,只用过基本的技能,一些集群和高级知识点没用过。
第四块是我最担心的分布式集群,不过当时就问了Dubbo和Zookeeper整合,以及Redis集群的基本问题,没怎么细问,结论也是用过,但没深入了解过。
结果我就通过了面试,但看下来这是家P2P金融公司,风险太大,就没去。后来果然,18年6月份,这家公司倒了。再回想一下,可能当时能力比较强的人已经不怎么愿意去这家P2P公司了,所以招聘要求有所降低。
总之我也是幸运,否则17年年中进去,18年年中公司倒闭我出来,再怎么解释总会有污点,后来再要进好公司就难了。
后来当我进了一家互联网公司后,就见到不少3年左右经验的程序员进入一些P2P金融公司,然后公司踩雷倒了,随后他们就在一些小公司之间辗转,每家公司也干不长,这类人很可惜,其中不乏能力强的,但因为每家公司干不长(虽然不是个人原因),但再要进好公司,可能就得先在一家公司干个至少3年证明自己稳定性不差后再做打算了。
如果干一类事情的成功率只有10%,那么干多少次,至少成功一次的概率能达60%?
干一次失败的概率是90%,连续8次都失败的概率是43%,也就是至少成功一次的概率已经接近60%。而且那个时间点,至少面试了10家,按这个算下来,成功一次的概率到66%了,更何况每次面试结束后,我会不断总结提升,所以终于在17年的年底,我面成了一家互联网公司,虽然不是BAT,但规模不小,国内也非常知名。
由于我那个时候已经成为面霸了,面试时表现也算不错(不过进去以后领导估计就后悔了)。
1 第一轮技术面试是我将要进组的组员,介绍项目经验时,我直接抛出线程池内存模型,再通过volatile和final讲述了ConcurrentHashMap内部细节,面试官没细问就让过了。
2 第二轮技术是组长,我介绍了一通JVM虚拟机优化和SQL优化,也让过了。说实在话,前两轮技术面试都是以我为主,面试官没怎么问。
3 第三轮技术面试是部门经理,本来,我还想挑战一下架构师的工资水平,但部门经理火眼金睛,虽然我竭力说了一通,结论还是:我基本功还行,架构方面也有实践经验(真实情况是我的经验都是看资料得来的),但架构方面没达到架构师的水平。于是和我明说,我可以干架构师的活,但工资只能给到高级开发的水平,如果愿意就继续。
我在面试之前,已经知道这家公司加班不算少,所以在内心也定了一个公司标准,说实在的,当时在工资方面其实没达到我的预期,但一方面我也面了那么多了,也知道自己的真实水平,更知道要找家能提供架构师方面实践经验的公司很难。相反,如果继续在外企呆着,时间不等人,估计再这样下去我的技术就更加落后于平均水平了,所以我就咬咬牙进去了。
在原来外企办离职的时候,不少人理解我,但也有人说我从外企到互联网公司会很苦,其实我已经做好了准备。
技术上,我就继续看相关资料,态度上,当时我还在外企,就不再继续松松垮垮,比如上班不再看手机,多看技术资料,也尽量在下班后再多干点活,以适应加班的节奏(事实上在外企我根本想象不到互联网公司的加班)。
不过心态上我还算放松,毕竟自己基本功不错,而且人也算上进,肯多问,而且我也做好了进互联网公司被别人鄙视的准备。办好外企的离职手续后,我就与18年的年初去后面要详细介绍的互联网公司。
在下文里我将详细介绍:
1 外企的技术与互联网技术的差距以及我是怎么适应过来的。
2 外企有工作节奏比较慢,所以人际关系不复杂,而互联网公司推崇狼性文化,我是怎么一点点通过加班和改变工作模式等的方式适应过来的。
3 尤其地,我是通过做项目和多问人,熟悉了不少分布式组件技术,从而在升级到架构师的路上不断进步。
标签:volatile 总结 组件 虚拟机优化 缓存 如何 面试技巧 时间 mvc
原文地址:https://www.cnblogs.com/JavaArchitect/p/10706813.html