很多 Java 初学都关心这么一个问题, Java 学到什么程度以后可以找到第一份工作. 大家的目标都很明确, 也很实在, 学习 Java 无非就是为了找工作, 那到底我要学多少 Java 知识, 才可以找到第一份工作呢.
之前写过一篇文章, 记录了我人生中第一场面试, 当时我的 Java 水平无非就是刚入门的水准, 但是作为校招生来说, 找一份小公司的开发工作不算非常难, 毕竟互联网公司那么多, 要求也是天差地别, 对技术, 学历, 实践能力的要求和评价标准也有很大的差距.
所以, 到底 Java 学到什么程度才能找到第一份工作, 我想应该用公司来作为变量, 这样回答这个问题才有意义.
创业型小公司
创业型小公司的特点就是人少, 事杂. 这里我们指的是不到 100 人的小公司, 这种公司其实也很多, 我们抛开一些独角兽或者知名创业公司不谈, 先谈谈大多数的创业公司, 这些公司吸引不到优秀人才, 并且也拿不出太多钱给员工, 因此招牌要求也会比较低, 学历基本不看, Java 基础知识稍微掌握一些, 做过几个 Java web 项目, 最好还能写写前端代码, 能吹几句牛皮, 应该问题就不会很大.
这种公司招人的渠道本来就少, 薪水得不到保障不说, 办公场所也很简陋, 但是工作时间倒是少不了, 所以啊, 这类公司, 我想也是培训机构给学员拍胸脯保证就业的最合适标准了.
中小型公司
说到中小型公司, 泛指那些 100 人以上, 500 人以下的公司, 大多数也是叫不上名字, 但是还算有所发展的公司, 这类公司稍微会正规一点, 招聘和培训可能会有自己的一套标准, 比如学历上可能稍微做一些要求, 技术上的把关更严格一点, 除了 Java 基础知识和项目经历之外, 可能还会考查你的 debug 能力, 代码规范, 异常处理能力, 以及对一些 Java 高级特性的理解能力, 可能最好多用过一些框架.
总而言之, 这类公司选人的标准更加有体系, 不会像一些特别小的公司, 招人很随意, 领导拍个板就行. 当然, 这类公司也吸引不到太多优秀人的人才, 但是也确实可能会有一些踏实能干的勤奋员工.
二三线互联网公司
这类公司范围就很广了, 比如日薄西山的搜狐, 新浪, 360, 或者是一直起不来的迅雷, 金山, 猎豹, 甚至是爱奇艺, 携程这类现状比较不错的企业等等, 这类公司挤不到 BAT TMD 等一线互联网行列, 但是在二三线阵容还算是比较不错的公司, 它们对于人才的要求其实还是相对比较高的.
比如一般都会要求本科学历, 对 Java 基础知识要比较熟悉, 最好能够看过源码, 如果没看过, 那么源码方面的面试题好歹也要准备一下, 除此之外, 一般来说还会考察你的后端技术知识, 比如数据库, 网络, 操作系统, 考察的不会太难, 能把面经上的知识点掌握了就算是比较扎实了.
这类公司一般不会考太复杂的题目, 更希望招一些水平能力都是中等的人才, 只要知识面能比较广, 题目都能说到点子上, 不需要掌握得特别深入, 也可以有机会拿到 offer.
其实归结原因, 就是因为二三线互联网不太可能和一线公司争夺一线人才, 所以一般争取的都是二线人才, 不需要太优秀, 但是至少要是中等水平, 所以这些公司对很多程序员来说还是比较有机会的.
一线互联网公司和独角兽
BAT,TMD 等互联网名企都属于这类公司, 这类公司和二三线互联网公司的发展差距还是比较大的, 体现在公司的规模, 市值, 甚至是股价等方面, 业务以技术为基础, 因此这些公司的技术往往也是业界最顶尖的, 比如阿里的云计算和中间件, 头条的推荐算法, 腾讯的游戏技术等等.
要进这些公司, 不仅要做到之前那些事情: 掌握 Java 基础, 计算机基础知识, 并且是非常熟练地掌握, 你需要深入理解每一个知识点, 因为面试官会不断深入地向你提问, 了解你的知识深度, 同时, 你需要对源码有所理解, 在读懂源码的基础上去理解框架的实现, JDK 的实现.
另外, 你需要对 JVM 有一个清晰的认识, 不仅要了解其结构, 垃圾回收原理, 甚至还要知道如何在遇到线上问题时通过 JVM 调优来解决它们.
同理, 你还需要对 Java 并发编程和网络编程的使用方法与底层实现原理非常熟悉, 不仅仅答出 NIO 和 BIO 的区别, 或者是 synchronized 和 lock 的区别, 你还需要知道 NIO 的底层实现 epoll 是什么, synchronized 对应的 mutex lock 是什么, lock 和 condition 的实现原理又是什么, 而 lock 本身也是通过 AQS,CAS 操作类等组件来实现的, 其中的内容实在太多, 绝不只是几道面试题就可以搞定的.
当然, 除此之外, 这些公司对数据库, 缓存, 分布式技术等方面的要求都会比其他公司要高得多, 你最好要搞懂 MySQL 的存储引擎, 索引和锁的实现原理, Redis 缓存的数据结构, 备份方式, 底层实现. 同时如果你能理解负载均衡算法, CAP 理论, 甚至是 raft 和 paxos 算法, 以及分布式常用技术如消息队列, zookeeper 等等, 那么无疑也是可以为你加分的技能.
为什么大公司的要求这么高, 因为它们是最好的互联网公司, 要招的自然也是最优秀的人才, 如果考察底层原理还不能满足他们筛选人才的需要, 他们也会考察面试者的算法能力, 比如 LeetCode 上 medium 难度的原题, 或者是剑指 offer 的变式题等等, 算法题相对考察理论基础而言, 筛选度更高, 可以淘汰的人也更多.
来源: https://www.cnblogs.com/xll1025/p/10923943.html