真正的Java学到了如何找到份工作的时候,应该把公司当作一个变量,这样回答这个问题才有意义。
一、小型初创公司
创业师小公司的特点是人少,事杂。在这里我们指的是少于100人的小公司,这种公司实际上也很多,我们抛开一些独角兽或着名的创业公司不谈,先说多数的创业公司,这些公司吸引不了优秀的人才,而且也拿不了多少钱,所以标榜的要求也会相对较低,基本不看学历,Java基础知识略有掌握,做过几个JavaWeb项目,**也写下前端代码,可以吹几句牛皮,应该问题不大。
这样的企业招人的渠道本来就少,工资得不到,办公场所也很简陋,但工作时间却是必不可少的,所以啊,这样的企业,我想也是培训机构为学员拍胸脯*就业的最合适标准吧。
二、中小企业协会
谈到中小型企业,泛指那些100人以上,500人以下的企业,大部分都叫不上名字,但仍算有发展空间,这样的企业会比较正规,招聘和培训可能会有自己的一套标准,比如,学历方面可能会做一些要求,技术方面可能会比较严格,除了Java基本知识和项目经验,可能还会检查你的debug能力,代码规范,异常处理能力,以及对一些Java*级特性的理解,这些都是比较好的框架。
总之,这样的公司选人标准比较系统,不会像一些特别小的公司,选人很随意,领导拍板就可以了。诚然,这样的公司也不能吸引很多优秀人才,但确实也会有一些踏实能干的勤奋员工。
三、互联网二、三线公司
这样的公司种类繁多,如搜狐、新浪、360、日薄西山的搜狐、迅雷、金山、猎豹等,甚至还有爱奇艺、携程等,这些公司挤进BATTMD这样的互联网**梯队并不难,但在二三线市场上,他们的要求实际上相对较高,也算是比较好的公司。
例如一般都会要求本科学历,对Java基础知识要比较熟悉,**能看懂源码,如果没有看过,那么源码方面的面试题就会很难看懂,另外,一般而言,还会考察你的后端技术知识,如数据库、网络、操作系统,考察的不会太难,可以将面经上的知识点掌握得比较扎实。
这样的公司一般不会考太复杂的题目,更希望招到一些水平的人才,只要知识面能够比较宽,题目能够说到点子上,不需要特别深入,也能有机会得到offer。
事实上归根结底,是因为二三线互联网不太可能与一线公司争夺一线人才,所以一般的竞争都是二线人才,并不需要太好,但至少也是中等水平,因此这些公司对许多程序员来说还是更有机会。
四、前线网络公司及独角兽
BAT、TMD等互联网巨头都属于这类企业,这类企业与互联网企业二三线企业的发展差距还比较大,体现在企业规模、市值、甚至股价上,企业都是以技术为基础,所以这些企业的技术往往也是行业中的佼佼师,例如阿里的云计算和中间件,头条的推荐算法,腾讯的游戏技术等等。
进入这些公司,不仅要先掌握Java基础知识,计算机基础知识,而且要熟练掌握所有的知识点,因为面试官会一直深入地问你问题,了解你的知识深度,同时,你也需要对源码有一些了解,在阅读源码的基础上理解框架实现,JDK实现。
此外,您还需要清楚地了解JVM,不仅要理解它的结构、垃圾回收原理,甚至还要知道如何在遇到在线问题时**JVM调优来解决这些问题。
同样,您还需要非常熟悉Java并发编程和网络编程的使用方法以及底层实现原理,不仅要回答NIO和BIO之间的区别,或师synchronized和synchronized之间的区别,还要知道NIO的底层实现epoll是什么,synchronized对应的mutexlink是什么,以及healthandcontrol的实现原理是什么,而且,healthrol本身是诸如AQS、CAS操作类之类的组件实现的,这些组件中的内容实在是太多了,不能简单地用几个问题就得出结论。
除了这些之外,当然,这些公司在数据库、缓存、分布式技术等方面的需求将远远高于其他公司,你**了解一下MySQL的存储引擎、索引和锁的实现原理,Reys缓存的数据结构、备份方式,以及底层实现。与此同时,如果你了解负载平衡算法,CAP理论,甚至是raft和paxos算法,以及消息队列、zookeeper等分布式常用技术,那么毫无疑问,这些技巧也会给你带来好处。
为什么大公司的需求这么高,因为他们是**的互联网公司,自然也是的人才,如果考察其底层原则还无法满足筛选人才的需求,他们也会考察面试师的算法能力,如LeetCode上的medium难题,或剑指offer的变异问题等,这些都是算法问题,相对来说,筛选度更高,可淘汰的人也更多。