Java学到什么程度能找到一份还不错的工作
我的读者里有很多 Java 新人,新人是指正在学 Java 的、以及工作时间不长的年轻人,他们经常问我一个问题:
Java 学到什么程度才能找到一份还不错的工作?
今天我就从我自己面试新人的角度来回答一下,我会把面试的知识点进行拆解,希望大家看完文章之后,能从中找到学习 Java 的重点。
学习是为了找到工作、拿到 offer,这就有一个公式:
offer = 工作需要的技术栈 + 计算机基础知识 + 项目经验 + 加分项
让我们分别看看公式右边的这些方面具体是什么。
1. 工作需要的技术栈
工作需要的技术栈往往和特定语言以及配套的周边工具相关。
对 Java 技术栈来说,又可以分为以下几个方面:
1.1 基本语法
基本语法在面试里不是说会用 for 循环、if else 语句之类去写代码就行,而是利用基本语法去编写更合理、更规范、更可读的代码。
比如,是不是能让变量处于很合适的作用域?String、StringBuffer、StringBuilder 适合的应用场景是不是非常熟悉了?
如果对于 Java 的基础还很薄弱,推荐去看《Effective Java》,以便真的能够写出来好代码。
另外,为了能更加规范的写出高质量工程代码,推荐研究下阿里的《Java开发手册》。
1.2 常用数据结构
如果要想通过面试找到工作,Java 中一些常用数据结构一定要好好掌握。最常用的就是以下几种:
- LinkedList
- ArrayList
- Stack
- ArrayBlockingQueue
- LinkedBlockingQueue
- HashMap
- LinkedHashMap
- TreeMap
- ConcurrentHashMap
- HashSet
- TreeSet
以上列举出来的这些数据结构,不仅要熟练使用它们,更需要理解它们的原理。
知道了原理,才能证明你能灵活且正确的使用这些数据结构。所以,面试中经常会问这些数据结构的原理。
如果对这些结构的原理还不熟悉,这里推荐一本很老但是依然很有用的书《Java Generics and Collections》,它详细介绍了 Java 中各个集合的实现。
但是这本书没有中文版,如果英文书读的很痛苦,大家可以去网上搜索一些好的文章,也能达到相同的效果。
1.3 异步与多线程
现在只要编写高性能的代码,就离不开异步;只要在多核 CPU 下工作,就离不开多线程去平行执行任务。所以,异步和多线程是一位后端工程师必须掌握的核心技能。
而要达到找工作的水平,我认为至少满足如下几个条件:
- 能准确的理解进程和线程的概念
- 至少弄懂什么叫 race condition 和死锁之类的概念
- 需要理解 JVM 的内存模型
- 了解常见的多线程编程模式
对于异步和多线程,我也不用多说了,肯定是首先推荐去读懂《Java并发编程实战》,然后还有一本《图解Java多线程设计模式》。这两本书读透了,面试异步和多线程,基本你也没什么问题了。
1.4 IO 操作
这里说的 IO 操作,主要是利用 Java 去读写文件。
Java 的 IO 都在 java.io 包中,大概有 40 个流类。其实不用每一个都掌握,最基本的要求就是:
- 理解 IO 流的概念
- IO 里哪些是字节流哪些是字符流
- IO 里哪些是节点流,哪些是处理流
- 哪些 IO 流带缓冲可以提高性能的
了解了这些东西,才能在实际开发中做到有的放矢,从而把 IO 用对用好。
推荐看下 《Java IO》和《Java NIO》这两本书。其中《Java NIO》有中文版,《Java IO》没有,如果英文不好的同学,可以看个千锋教育的视频:
Java入门基础教程视频—(IO框架),地址如下:
https://www.bilibili.com/video/BV1Tz4y1X7H7
1.5 常用框架
除了 Java 语言本身的语法和库啊什么的,要找到工作还请务必熟悉至少一套开发框架。
Java 最常用的框架就是:
- Spring
- Spring MVC
- Spring Boot
- Mybatis
- Netty
其实,Spring、Spring MVC、Spring Boot 都是 Spring 体系的。所以,要找后端工作,Spring 是必须要掌握的。有了 Spring 的基础,别的 Spring 体系可以即插即用的。
SSM 中的的 M——Mybatis 也最好掌握了,有数据库基础的话,Mybatis 学起来也不算难。
Netty 是一套网络框架,我估计初期用到的机会不多,但奈何有些面试官会问、会考,所以,若有闲暇功夫,推荐对它看个大概。
相关推荐的书有《Spring 5 开发大全》、《MyBatis技术内幕》、《Netty进阶之路:跟着案例学Netty》。
1.6 常用数据库
一般来说,找工作,熟悉一个数据库就好。推荐 MySQL,这是最常见的数据库(其次是 Oracle)。
要熟悉到什么程度呢?我认为最低水平要知道怎么用 MySQL 执行 CRUD 操作。但是这还不够保险,因为很多面试官为了防止新人删库跑路,会对面试者要求更高。
像在 CRUD 里,R 代表查询,是后端工程师最常打交道的操作。而查询用的又对又好是对工程师使用 MySQL 水平的重要标准。所以,面试官就希望面试者能对 MySQL 的索引原理有一定的了解,面试的时候也会经常问这类问题。
同样的道理,除了查询以外,CUD 即增、改、删是非常危险的,既可能影响性能,还可能出现各种误操作。所以,为了保证把人招进来,不会对数据库乱操作,面试的时候大概率会考察程序员对 MySQL 中的锁和 MVCC 的理解情况,明白怎么用才安全可靠。
如果对这些都不太熟悉,推荐看下《MySQL是怎样运行的》,对 MySQL 讲的非常透彻。
1.7 Linux 基本操作
现在只要想做后端工程师,就肯定避不开和 Linux 系统打交道。
基本的命令操作是肯定要熟悉的,比如:目录切换、设置环境变量、文件的增删查改等等。
除了这些基本命令,还要理解 Linux 中一切皆文件的概念。并且对于一些重要概念,比如:管道、重定向、标准输入输出、标准错误输出等,也要明白他们是什么东西。
有时候,还需要开发人员直接在线上机器去编辑文件,所以还要会用 Vi/Vim 去在线编辑一些文件。
另外,如果服务器有了问题,起码基本的查询性能的命令,也要会用。比如用 netstat、vmstat 等命令去查看下机器状态。
这些知识可以看下《鸟哥的Linux私房菜 基础学习篇 第四版》。
2. 计算机基础知识
除了技术栈以外,还需要面试者有扎实的计算机基础。这个计算机基础是考察面试者在学校的学习状况的,如果你计算机基础不好,那大概率说明你本身学习态度、学习能力至少有一项不太合格。
对 Java 后端工程师,咱们挑两个很重要的基础知识说说:
2.1 计算机网络
后端大部分的时候就是各种接口和协议,数据传来传去,总是需要关注到网络问题的。如果一个后端工程师,对 TCP 不熟悉,对 Http 一问三不知,那么谁能相信你是一个合格的后端工程师了呢?
对于计算机网络,我推荐好好看看《计算机网络(原书第7版)》这本书,在自己的头脑中,构建出一套完整的网络体系来。
2.2 操作系统
学完了计算机网络,接下来就是去好好学习下操作系统。学习操作系统就是去学习如何在复杂的情况下,去协调分配各种像 CPU、内存、IO 等这些竞争性使用的计算机资源。
学懂了操作系统,你心里就有了一套在复杂情况下,去管理协调资源的成熟套路和方法论。
而这些成熟的套路和方法论,最终都是你后面能成长为优秀的工程师,以及能应对各种复杂业务需求的核心竞争力。所以,操作系统学懂是很重要的。
如果对操作系统不熟悉,我推荐看下《操作系统导论》这本书,人民邮电出版社出版,王海鹏翻译的。
3. 做过的项目
面试官是如何在面试中考察你是否真的做过项目呢?
其实挺简单的,只需要问一下你做的项目中核心模块的业务流程,然后挑出这个业务流程中的一些技术难点或者技术特点,重点问你是怎么实现的,就能大概判断出你是否真的做过项目了。
至于项目,主流的项目有这么几类:
- 电商
- 社交
- 垂直领域平台
- 音视频平台
- 出行
- 门户
在面试前,最好去专门熟悉下不同类项目的核心流程都有哪些。比如,电商的核心流程就有购物流程,社交的核心流程就有私聊、群发消息,出行平台则是人们叫车的这个过程。
而在这些核心业务流程里,一定有技术难点需要克服,比如:
- 购物车到底放在客户端还是服务器端?
- 放客户端,排序规则,缓存的更新策略你是怎么解决的?
- 而放在服务器端呢,你和客户端之间通信频率啊,客户商品的实时更新啊,又是怎么考量的?
这些没有经过实战,很难给面试官讲清楚。
所以,在应聘工作前,最好就是自己能去参与个项目,多学多问,多考虑为什么项目中需要这样做的道理。
如果真的参与不了,我推荐去 github 下载个开源的项目,然后弄清楚架构和业务流程,对于一些不懂得,可以问下开源的作者,或者去问下已经工作的前辈,又或者去专业的论坛问。
总之,一定要从我给的分类项目中找一个项目,去深入了解业务流程和对应的技术实现,以及实现背后的动机,只有这样,面试官才会真的认为你有了实战经验。
4. 加分项
说完了项目经验,我再说说加分项(技术博客、开源项目、竞赛奖项等),加分项在去大厂应聘的时候尤其有用。
无论你是有开源项目还是有博客文章,都说明了一件事——你是一个爱学习、乐于分享的人。
大厂里,很重视的一件事就是分享。分享经验、分享技术、分享心得,这些都是大厂非常提倡的事情,如果在一群候选人里,你有加分项,别人没有,面试官会选谁不言而喻了吧。
所以,一定要经常性的对公众输出一些东西,文章啊、开源项目啊、竞赛分享啊,能输出什么输出什么。这样才能让面试官看到你有实力的证据以及你 open 的态度,从而在面试中占有更多的优势。
结尾
好了,说了这么多,其实一言以蔽之,就是知识储备一定要足。要说达到什么水平就一定能找到工作,这完全是根据你应聘的公司,应聘的岗位以及你的竞争对手的优秀程度去动态变化的。
以上知识点,可能有人会感觉多,也可能有人会觉得不够,无论怎样,希望这篇文章能帮新人弄清楚学习的重点,希望大家能坚持学起来。
你只有拼命努力,才能看起来毫不费力。
你好,我是四猿外。
一家上市公司的技术总监,管理的技术团队一百余人。
我从一名非计算机专业的毕业生,转行到程序员,一路打拼,一路成长。
我会把自己的成长故事写成文章,把枯燥的技术文章写成故事。
欢迎关注我的公众号,关注后可以领取高并发、算法刷题笔记、计算机高分书单等学习资料。
Java学到什么程度能找到一份还不错的工作的更多相关文章
- Java学到什么程度可以找到第一份工作
作者:黄小斜 文章来源:程序员江湖 很多Java初学都关心这么一个问题,Java学到什么程度以后可以找到第一份工作.大家的目标都很明确,也很实在,学习Java无非就是为了找工作,那到底我要学多少Jav ...
- Java学到什么程度可以面试工作?
先说结论: 1 大多数公司,对于Java初级开发的要求是,会用Spring Boot+JPA做增删改查 2 所以零基础的Java小白,无需学太多的内容,只要掌握Spring Boot+JPA做增删改 ...
- 零基础学到什么程度可以找一份web前端工作?
能找到一份前端开发工作,首先你起码得是一个合格的初级前端工程师.那么,什么是初级前端工程师?初级前端工程师都会做些什么?这个问题需要分为以下几个方面来说: 一.对应岗位的工作职责初级前端,主要负责产品 ...
- Java学到什么程度才能叫精通?
把下面这些内容掌握以后,你就可以自诩精通Java后端了. 1 计算机基础 这部分内容是计算机相关专业同学的课程,但是非科班的小伙伴(譬如在下)就需要花时间恶补了. 特别 是计算机网络,操作系统 ...
- 自学java能不能找到找到一份java工作。
关于自学Java能不能通过社招找到一份互联网公司Java开发的工作,有无数的人问出这样的问题,答案没有标准的,只能从概率去考虑.有的人可以,有的人不可以,有的人自学就业的概率就是高,有的概率就是低. ...
- 从零开始学数据分析,什么程度可以找到工作?( 内附20G、5000分钟数据分析工具教程大合集 )
从零开始学数据分析,什么程度可以找到工作?( 内附20G.5000分钟数据分析工具教程大合集 ) 我现在在Coursera上面学data science 中的R programming,过去很少接 ...
- Python学到什么程度就可以去找工作?掌握这4点足够了!
大家在学习Python的时候,有人会问“Python要学到什么程度才能出去找工作”,对于在Python培训机构学习Python的同学来说这都不是问题,因为按照Python课程大纲来,一般都不会有什么问 ...
- Python学到什么程度才可以去找工作?掌握这4点足够了!
大家在学习Python的时候,有人会问"Python要学到什么程度才能出去找工作",对于在Python培训机构学习Python的同学来说这都不是问题,因为按照Python课程大纲来 ...
- 以字符串为例,谈谈Python到底要学到什么程度
古语云:慈不掌兵,义不为商:离商业越近,离人性越远:我们在自学数据科学时,一定会辅助一些书籍或者视频来学习,怎么学习,选择哪些资料来学习?这时,我们都要理解好第一句话,理解不好,浪费钱是次要,重要的是 ...
随机推荐
- mysql8 navicat远程链接失败
原因:mysql 8加密规则问题 更改加密规则: ALTER USER 'ycc'@'%' IDENTIFIED BY 'you password' PASSWORD EXPIRE NEVER; 修改 ...
- python3.7+flask+alipay 支付宝付款功能
文档参考github:https://github.com/fzlee/alipay/blob/master/docs/init.md 沙箱环境配置:https://opendocs.alipay.c ...
- 鸿蒙源码分析系列(总目录) | 百万汉字注解 百篇博客分析 | 深入挖透OpenHarmony源码 | v8.23
百篇博客系列篇.本篇为: v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 百篇博客分析 | 51.c.h .o 百篇博客.往期回顾 在给OpenHarmony内核源码加注过程中,整理出以下 ...
- P6640-[BJOI2020]封印【SAM,二分】
正题 题目链接:https://www.luogu.com.cn/problem/P6640 题目大意 给出两个字符串\(s,t\).\(q\)次给出\(l,r\)询问\(s_{l\sim r}\)与 ...
- 面试官问:App测试和Web测试有什么区别?
WEB 测试和 App 测试从流程上来说,没有区别.都需要经历测试计划方案,用例设计,测试执行,缺陷管理,测试报告等相关活动. 从技术上来说,WEB 测试和 APP 测试其测试类型也基本相似,都需要进 ...
- 深度学习--GAN学习笔记
生成模型 WGAN Blog GAN 推荐学习网站 生成模型 什么是生成模型? GMM: 用来做聚类,(非监督学习) NB(朴素贝叶斯):(监督学习,可以用来做垃圾邮件分类) Logistics 回归 ...
- 基于 Ubuntu 21.04 BPF 开发环境全攻略
本文地址:https://www.ebpf.top/post/ubuntu_2104_bpf_env 1. 系统安装 1.1 Vagrant Vagrant 是一款用于构建及配置虚拟开发环境的软件,基 ...
- HttpRunner3.X - 全面讲解如何落地项目实战
一.前言 接触httprunner框架有一段时间了,也一直探索如何更好的落地到项目上,本篇主要讲述如何应用到实际的项目中,达到提升测试效率的目的. 1.项目难题 这个月开始忙起来了,接了个大项目,苦不 ...
- [RabbitMQ]下载&安装
RabbitMQ是基于Erlang语言开发的消息中间件,所以使用RabbitMQ需要安装Erlang和RabbitMQ两个软件. 1 Erlang 1.1 下载 官网下载地址:https://www. ...
- react之组件生命周期
四个阶段 初始化 运行中 销毁 错误处理(16.3以后) 初始化 constructor static getDerivedStateFromProps() componentWillMount() ...