我们平时要拿大厂的要求来鞭策自己,尽量避免一直待在自己的舒适区。
那大厂想要什么样的人才呢?
先从已经有两年左右开发经验的工程师角度来看: 我们来看一下阿里官网支付宝 Java 高级开发工程师的招聘要求,从下面的招聘信息可以看出,除去 Java 基础/集合/多线程这些,这些能力格外重要:
- 底层知识比如 jvm、网络、操作系统 :不只是懂理论更会实操;
- 面向对象编程能力 :我理解这个不仅包括“面向对象编程”,还有 SOLID 软件设计原则,相关阅读:《写了这么多年代码,你真的了解 SOLID 吗?》(我司大佬的一篇文章)
- 底层原理 :搞懂框架以及中间件的底层原理,举一反三。
- 系统设计能力 :从零开始设计一个系统,从零启动一个项目。
- 分布式系统开发能力 :常见的分布式理论尽量要搞懂,缓存、消息队列等等都要掌握,关键是还要能使用这些技术解决实际问题而不是纸上谈兵。
- 微服务 :了解如何从单体架构演变为微服务。
- 其他 :喜欢和尝试新技术、追求编写优雅的代码等等。
再从应届生的角度来看: 我们还是看阿里巴巴的官网相关应届生 Java 工程师招聘岗位的相关要求。
结合阿里、腾讯等大厂招聘官网对于 Java 后端方向/后端方向的应届实习生的要求下面几点也提升你的个人竞争力:
- 参加过竞赛( 含金量超高的是 ACM );
- 对数据结构与算法非常熟练;
- 参与过实际项目(比如学校网站)
- 熟悉 Python、Shell、Perl 其中一门脚本语言;
- 熟悉如何优化 Java 代码、有写出质量更高的代码的意识;
- 熟悉 SOA 分布式相关的知识尤其是理论知识;
- 熟悉自己所用框架的底层知识比如 Spring;
- 有高并发开发经验;
- 有大数据开发经验等等。
从来到大学之后,我的好多阅历非常深的老师经常就会告诫我们:“ 一定要有一门自己的特长,不管是技术还好还是其他能力 ” 。我觉得这句话真的非常有道理!
刚刚也提到了要有一门特长,所以在这里再强调一点:公司不需要你什么都会,但是在某一方面你一定要有过于常人的优点。换言之就是我们不需要去掌握每一门技术(你也没精力去掌握这么多技术),而是需要去深入研究某一门技术,对于其他技术我们可以简单了解一下。
我觉得一个好的 Java 程序员应该具备下面这些素质:
- Java 基础 :掌握 Java 基础知识(可以看《Java 核心技术卷 1》或者《Head First Java》这两本书在我看来都是入门 Java 的很不错的书籍),当然你也可以边看视频边看书学习(推荐黑马或者尚硅谷的视频)。一定要记得多总结!打好基础!把自己重要的东西都记录下来。
- 多线程 :掌握多线程的简单实用(推荐《Java 并发编程之美》或者《实战 Java 高并发程序设计》)。
- JVM(可选) :如果想去大厂,JVM 的一些知识也是必学的(Java 内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM 内存管理)推荐《深入理解 Java 虚拟机》。
- 算法和数据结构:如果你想进入大厂的话,我推荐你在学习完 Java 基础或者多线程之后,就开始每天抽出一点时间来学习算法和数据结构。为了提高自己的编程能力,你也可以坚持刷 Leetcode。
- 前端知识 :学习前端基础(HTML、CSS、JavaScript),当然 BootStrap、VUE 等等前端框架你也可以了解一下。
- Git : 版本控制工具 Git 绝对比必须的。你可以自己去 Github 上下载一些项目看,然后自己也上传一个项目到 Github 上去。
- MySQL : 学习 MySQL 的基本使用,基本的增删改查,索引需要重点关注,存储过程可以简单了解一下。
- Maven : 建议学习各种框架之前可以提前花半天时间学习一下 Maven 的使用。(到处找 Jar 包,下载 Jar 包是真的麻烦费事,使用 Maven 可以为你省很多事情)
- 框架 :学习 Spring、SpringMVC、Hibernate、Mybatis 等框架的使用,(可选)熟悉 Spring 原理(大厂面试必备),然后很有必要学习一下 SpringBoot。我也遇到很多公司对于应届生直接上手 SpringBoot,不过我还是推荐你有时间还是可以把 Spring、SpringMVC 好好学一下。不过 SpringBoot 优先级最高!
- Linux :学习 Linux 的基本使用(常见命令、基本概念)
- 分布式 :常见的分布式理论(比如 Raft 算法)、RPC、服务注册于发现、API 网关、配置中心、分布式 ID、分布式事务......。
- 高并发 : 消息队列、读写分离&分库分表、负载均衡、缓存......这些。
- 高可用 : 主要就是限流&降级&熔断、集群......这些。
- 微服务 :微服务的一些基本概念、SpringCloud 和 Spring Cloud Alibaba 那一套都可以学习一下。我比较推荐的是学习 Spring Cloud Alibaba,因为首先它是阿里开源的,文档比较丰富,另外,它比较新,各种组件都可以说很不错。
- 云原生 :算是未来的一个趋势,可以作为一个新的职业方向考虑,目前正处于蓝海阶段,具体可以参考我前几天写的这篇文章:https://mp.weixin.qq.com/s/ZVbwNnvRwXxQqk7A-OA27g 。
- 进阶 :操作系统底层知识、计算机组成原理、Java 编码优秀实践、SQL 调优、定位解决线上问题的能力等等
知道要学什么之后,如何去学呢?
我觉得学习每个知识点可以考虑这样去入手:
- 官网(大概率是英文,不推荐初学者看)
- 书籍(知识更加系统完全,推荐)
- 视频(比较容易理解,比较推荐,特别是初学的时候),另外,大家不要说自己工作很多年,技术也比较厉害了就不能看视频学习了。我认识的很多大佬,包括我经历的几个项目组的技术 Leader,他们都有看视频学习技术的习惯。
- 网上博客(解决某一知识点的问题的时候可以看看)。
最后,有一个建议是:看视频的过程中最好跟着一起练,要做笔记!!!最好可以边看视频边找一本书籍看,看视频没弄懂的知识点一定要尽快解决,如何解决?首先百度/Google,通过搜索引擎解决不了的话就找身边的朋友或者认识的一些人。