因为基本要求达标以后,公司主要挑选人才的标准其实就是可选要求这一部分,在之前《回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议》这篇文章中,LZ曾经提过差异性这个词,其实这一部分就是差异性的体现。
接下来,LZ就带大家看看,到底都有哪些可选的要求。此外,LZ要提前说明的是,这些可选要求,没有必须会和必须不会的内容,尽可能多的了解,总是不会错的。
1)Spring、Mybatis框架
框架这部分其实不用多说了,spring和mybatis框架的原理和源码,如果你可以非常精通的话,那么这一定能成为你巨大的优势。
如果你是专门做WEB开发的Java后端猿,那么spring和mybatis框架基本上你是肯定要用的。精通Spring和mybatis框架不仅为了面试,对于你日常开发也有巨大的帮助,你可以做很多架构上的优化,为你的战友省去很多重复性的工作。
关于Spring框架,最核心的当然是IOC,其次便是AOP、MVC这两部分了。好好研究这三部分的源码,会让你从大部分程序员当中,脱颖而出。至于mybatis框架,主要还是关注它如何实现动态SQL。
而且,待你研究透彻以后,你完全可以自己尝试去造轮子,说不定能得到意想不到的收获。
2)Linux服务器
这一部分其实原本是运维应该精通的部分,但是作为一个Java后端猿,如果你可以精通linux服务器,那么对你排查线上问题,是有很大的帮助的。
大部分程序员都只知道一些常用的Linux命令,对于Linux系统本身的文件系统、网络以及IO等等,是完全不了解的,这其实也包括LZ自己。但是,LZ见过身边有一些程序员,对于Linux玩的非常熟练,这不光光体现在多会几个命令,而是对整个Linux系统的了解。
可以预见的是,这些人在排查问题的时候,往往会更容易找到问题的根本。因为程序问题往往并不是最难解决的,异常这东西见多了就都知道怎么回事了,大不了看看源码也总能找到原因。最难解决的是环境问题,而环境问题无非就是操作系统层面的问题。
而显然大部分情况下,Java运行的操作系统都是Linux。
3)数据库优化
说完Linux,紧接着LZ要说的就是数据库了,这原本应该是DBA应该精通的部分,但作为一个Java后端猿,数据库基本上也是最经常打交道的了。
而且大家都知道,一个应用的性能瓶颈,往往都出现在数据库这一端,因此,一个Java后端猿如果可以精通数据库的话,那么对于你工作的实际帮助,也是非常大的。
相信不少人都碰到过SQL过慢的情况,这个时候,如何通过加索引、SQL分析和优化的手段,将SQL的执行时间优化到一个可接受的范围内,其实还是比较考验人的。
反正,这玩意儿LZ是半斤八两的水平,基本的优化是没有问题的,但稍微复杂一些的就不行了。
所以,这一部分足够成为你的优势,体现出你的差异性。
4)消息服务
除了Linux和数据库以外,消息服务也是当今互联网公司里,必不可少的一个组件。
常见的消息组件比如rabbitMQ、activeMq,包括一些其它的开源消息组件,比如rocketMq。这里面任何一个,如果你可以精通其原理的话,也会成为你有力的竞争条件。
其实消息服务的重点,无非就是如何保证最终一致性、消息的顺序,包括消息事务等等这一类的问题。
虽然LZ本人对此不是很了解,但LZ很确定,这一部分如果你可以有自己独到的见解的话,一定会大大增加你的成功率。
5)缓存服务
说了消息服务以后,相信缓存服务大家也一定不陌生了。
常见的缓存比如memcached、redis这两个,如果你能搞清楚其中一个的话,也会给你加分许多。毕竟现在的互联网应用,缓存也是必不可少的了,因此如果你能完全hold住缓存这一部分,那么你的差异性也就有了。
在缓存服务当中,有几个问题也是比较常见的,比如缓存满了怎么办,缓存的实时性如何处理,内存结构如何规划,分布式的情况下如何处理增删节点时缓存的命中问题等等。
6)负载均衡器
负载均衡器,这是最后一个可选要求了。
常见的负载均衡器就两种,一种是软负载均衡,比如nginx、Apache、lvs这一类的。另外一种则是硬件负载均衡,常见的主要就是F5。
这两种方式各有优劣,其中硬件负载均衡如要用于简单应用、大访问量的场景,而软件复杂均衡则主要用于复杂应用,较小访问量的场景。当然了,两者还有一个不得不考虑的区别是,硬件复杂均衡一般都是非常贵的,而软负载均衡则基本上没有任何成本。
在负载均衡器方面,也有一些问题是比较常见的。比如如何保持会话,如何做流量控制,负载均衡策略都有哪几种,如何检查后端服务器的健康状态等等。
7)小结
好了,到这里,可选要求就说的差不多了。
细心的猿友会发现,这6个要求其实对应的就是Java后端开发中,最常接触到的一些东西。比如spring、mybatis框架和数据库,这基本上是个Java程序员都接触过吧。
其余四个包括Linux服务器、消息服务、缓存服务以及负载均衡器,也是一样的,大家在实际工作当中,应该或多或少都接触过这几个东西。
但是真正能对其中一个非常了解精通的人,相信并不会太多。也正因为如此,如果你做到了,才可以体现出你的差异性,这或许会是你拿下offer的重要筹码之一。
但是,LZ这里必须要再强调一下的是,这几样东西大多数人或多或少都会有一些了解,包括上面LZ提到的问题,不少人也都知道答案。
然而,光知道答案是远远不够的,这并不足以成为你的优势,你需要对这些问题有着深刻的了解,以及有着自己独特的见解,才足以让它成为你的优势。
三、加分要求
最后一个便是加分要求了,加分要求虽然不如基本要求和可选要求重要,但它也与可选要求类似,往往拿下offer的最终原因,正是这些看似不是必要要求的部分。
接下来,LZ就带大家一起来看一下,都有哪些可以加分的部分,这一部分其实在之前那篇文章《回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议》中已经提到过,这里就再详细说一下。
此外,LZ要强调的是,这些加分要求中,在某些特殊情况下,可能会成为基本要求。
1)数据结构与算法
这一部分内容不用多说了,大家都懂的。精通数据结构与算法,绝对会成为你的一大亮点。
因为大部分程序员的这一部分基础都不太好,包括LZ本人,面试的时候如果问到算法一类的问题,LZ基本上就两个字:不会。
以前LZ还看过Java集合框架的一些源码,对于一些常用的数据结构还有一定的了解。但是现在,LZ已经基本上忘光了,就连最基本的冒泡排序,可能LZ都不一定能写的对。
因此可以预见的是,数据结构与算法绝对是非常加分的一项。而且,在你面试一些与算法相关的职位时,这个加分要求还可能会成为基本要求。
2)计算机操作系统
计算机操作系统原理,是非常底层的内容。
这部分内容比较难,里面讲的都是一些最基本的底层原理,例如内存、指令、系统IO等等。LZ之前也研读过一本关于操作系统的书,也写了一系列文章,地址是。
不过LZ看的还是不够全面和深入,如果你可以将操作系统研究透彻的话,那么在面试的时候,你完全可以以此作为突破点,展示你的亮点。
3)计算机网络
其实网络这一部分,对于程序员来说还是比较重要的。
LZ最近正在做的事情,就经常会碰到一些网络上的问题,虽然很多时候,这些问题其实可以找专门的网络人员去解决,但如果你自己对此不够了解的话,对于你的工作还是会造成很大的障碍。
而且,要想精通TCP/IP协议,如果对计算机网络不了解的话,还是很难真正理解的。
因此,计算机网络部分如果你可以精通的话,这也绝对会成为你的一个加分项。
4)熟练使用一种脚本语言
脚本语言在很多时候是很方便的,而且也非常实用。
LZ最近就被迫正在使用Python做很多事情,其实用了以后你会发现,虽然Java也可以实现同样的目的,但确实选择合适的语言,会帮你节省大量的精力。
因此,如果你可以熟练使用一种脚本语言,比如Python、shell等等,这也必定会成为你的加分项。
5)你的github和博客