自学能力!自学能力!自学能力!真的很重要,如何对待业余时间,决定了未来几年你与周围同事的差异。
另外,我觉得3年后成为月薪10k+?大牛?有点说的不太好。10k+程序员工资在北上广太普遍了,很低了,真的!对于大牛我觉得至少也应该是年薪40w+以上的吧!
文章内容稍长,但每一部分都没有多一句废话, 所有内容主要分为下面几部分
- 学习路线以及方法推荐
- 推荐一个学习过程中看的仓库
- Java工程师必看书籍
- Java工程师如何准备一场面试
- 一些好的学习和编程习惯
学习路线以及方法推荐
对于学习路线的话,我说一条我比较推荐的,我相信照着这条学习路线来你的学习效率会非常高。下面提到的书籍以及相关学习视频都答主已经整理好,文末有免费获取方式。很多朋友这几天领取了我整理的学习资源之后都私信感谢我,我个人还是挺高兴的,说句心里话,这些资源都是自己花了很长时间整理的。
- 掌握 Java 基础知识 (可以看《Java 核心技术卷1》或者《Head First Java》这两本书在我看来都是入门Java的很不错的书籍),当然你也可以边看视频边看书学习(推荐黑马或者尚硅谷的视频)。 记得多总结!打好基础!把自己重要的东西都记录下来。
- 掌握多线程的简单实用 (推荐《Java并发编程之美》或者《实战Java高并发程序设计》)。
- (可选) 如果你想进入大厂的话,我推荐你在学习完Java基础或者多线程之后,就开始每天抽出一点时间来学习 算法和数据结构 。为了提高自己的编程能力,你也可以坚持刷 Leetcode。
- 学习前端基础(HTML、CSS、JavaScript),当然BootStrap、VUE等等前端框架你也可以了解一下。
- 学习My SQL 的基本使用,基本的增删改查,SQL命令,索引、存储过程这些都学一下吧!
- 建议学习J2ee框架之前可以提前花半天时间学习一下 Maven 的使用。(到处找Jar包,下载Jar包是真的麻烦费事,使用Maven可以为你省很多事情)
- 学习Struts2(可不用学)、Spring、SpringMVC、Hibernate、Mybatis 等框架的使用, (可选)熟悉 Spring 原理 (大厂面试必备),然后 很有必要学习一下SpringBoot 。我也遇到很多公司对于应届生直接上手 SpringBoot ,不过我还是推荐你把 Spring、SpringMVC 好好学一下。
- 学习 Linux 的基本使用(常见命令、基本概念)
- 学习 Dubbo、Zookeeper 、常见的 消息队列 (比如 ActiveMq、RabbitMQ )的使用.(这些东西可以通过黑马最后一个分布式项目来学,边看视频,边自己做,查阅网上博客,效果更好)
- 可以学习一下 NIO 和 Netty, 这样简历上也可以多点东西。
- (可选),如果想去大厂, JVM 的一些知识也是必学的( Java内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM内存管理 )推荐《深入理解Java虚拟机:JVM高级特性与最佳实践(最新第二版》,如果嫌看书麻烦的话,你也可以看我整理的文档,在下面有链接。
我上面主要概括一下每一步要学习的内容,对学习规划有一个建议。知道要学什么之后,如何去学呢?我觉得学习每个知识点可以考虑这样去入手: 官网(大概率是英文,不推荐初学者看) 、 书籍(知识更加系统完全,推荐) 、 视频(比较容易理解,推荐,特别是初学的时候) 、 网上博客(解决某一知识点的问题的时候可以看看) 。
这里给各位一个建议,看视频的过程中最好跟着一起练,要做笔记!!!最好可以边看视频边找一本书籍看,看视频没弄懂的知识点一定要尽快解决,如何解决?首先 百度 / Google ,通过搜索引擎解决不了的话就找身边的朋友或者认识的一些人。
推荐一个学习过程中看的仓库
笔主自己开源的一个Java学习与面试项目,目前已经几个月是JavaTrending榜第一名了,目前已经有 29k+ star,我自己有点不那么实至名归,我也只是靠平时业余时间来维护,大家可以看一下,因该对大家学习Java有一点没有帮助。
这个仓库里面有常见知识点总结(目前还在继续完善中)、常见面试题、备战面试系列文章以及BATJ真实面经等内容。
- 对于 Java 初学者来说: 本文档倾向于给你提供一个比较详细的学习路径,让你对于Java整体的知识体系有一个初步认识。另外,本文的一些文章 也是你学习和复习 Java 知识不错的实践;
- 对于非 Java 初学者来说: 本文档更适合回顾知识,准备面试,搞清面试应该把重心放在那些问题上。要搞清楚这个道理:提前知道那些面试常见,不是为了背下来应付面试,而是为了让你可以更有针对的学习重点
点击在线阅读
如何准备一场Java面试?
1 如何获取大厂面试机会?
在讲如何获取大厂面试机会之前,先来给大家科普/对比一下两个校招非常常见的概念—— 春招 和秋招。
- 招聘人数 :秋招多于春招 ;
- 招聘时间 : 秋招一般7月左右开始,大概一直持续到10月底。但是大厂(如BAT)都会早开始早结束,所以一定要把握好时间。春招最佳时间为3月,次佳时间为4月,进入5月基本就不会再有春招了(金三银四)。
- 应聘难度 :秋招略大于春招;
- 招聘公司: 秋招数量多,而春招数量较少,一般为秋招的补充。
综上,一般来说,秋招的含金量明显是高于春招的。
下面我就说一下我自己知道的一些方法,不过应该也涵盖了大部分获取面试机会的方法。
- 关注大厂官网,随时投递简历(走流程的网申);
- 线下参加宣讲会,直接投递简历;
- 找到师兄师姐/认识的人,帮忙内推(能够让你避开网申简历筛选,笔试筛选,还是挺不错的,不过也还是需要你的简历够棒);
- 博客发文被看中/ Github 优秀开源项目作者,大厂内部人员邀请你面试;
- 求职类网站投递简历(不是太推荐,适合海投);
除了这些方法,我也遇到过这样的经历:有些大公司的一些部门可能暂时没招够人,然后如果你的亲戚或者朋友刚好在这个公司,而你正好又在寻求offer,那么面试机会基本上是有了,而且这种面试的难度好像一般还普遍比其他正规面试低很多。
2 面试前的准备
2.1 准备自己的自我介绍
从HR面、技术面到高管面/部门主管面,面试官一般会让你先自我介绍一下,所以好好准备自己的自我介绍真的非常重要。网上一般建议的是准备好两份自我介绍:一份对hr说的,主要讲能突出自己的经历,会的编程技术一语带过;另一份对技术面试官说的,主要讲自己会的技术细节,项目经验,经历那些就一语带过。
我这里简单分享一下我自己的自我介绍的一个简单的模板吧:
2.2 关于着装
穿西装、打领带、小皮鞋?NO!NO!NO!这是互联网公司面试又不是去走红毯,所以你只需要穿的简单大方就好,不需要太正式。
2.3 随身带上自己的成绩单和简历
有的公司在面试前都会让你交一份成绩单和简历当做面试中的参考。
2.4 如果需要笔试就提前刷一些笔试题
平时空闲时间多的可以刷一下笔试题目(牛客网上有很多)。但是不要只刷面试题,不动手code,程序员不是为了考试而存在的。
2.5 花时间一些逻辑题
面试中发现有些公司都有逻辑题测试环节,并且都把逻辑笔试成绩作为很重要的一个参考。
2.6 准备好自己的项目介绍
如果有项目的话,技术面试第一步,面试官一般都是让你自己介绍一下你的项目。你可以从下面几个方向来考虑:
- 对项目整体设计的一个感受(面试官可能会让你画系统的架构图)
- 在这个项目中你负责了什么、做了什么、担任了什么角色
- 从这个项目中你学会了那些东西,使用到了那些技术,学会了那些新技术的使用
- 另外项目描述中,最好可以体现自己的综合素质,比如你是如何协调项目组成员协同开发的或者在遇到某一个棘手的问题的时候你是如何解决的又或者说你在这个项目用了什么技术实现了什么功能比如:用redis做缓存提高访问速度和并发量、使用消息队列削峰和降流等等。
2.7 提前准备技术面试
搞清楚自己面试中可能涉及哪些知识点、那些知识点是重点。面试中哪些问题会被经常问到、自己改如何回答。(强烈不推荐背题,第一:通过背这种方式你能记住多少?能记住多久?第二:背题的方式的学习很难坚持下去!)
2.7 面试之前做好定向复习
所谓定向复习就是专门针对你要面试的公司来复习。比如你在面试之前可以在网上找找有没有你要面试的公司的面经。
举个栗子:在我面试 ThoughtWorks 的前几天我就在网上找了一些关于 ThoughtWorks 的技术面的一些文章。然后知道了 ThoughtWorks 的技术面会让我们在之前做的作业的基础上增加一个或两个功能,所以我提前一天就把我之前做的程序重新重构了一下。然后在技术面的时候,简单的改了几行代码之后写个测试就完事了。如果没有提前准备,我觉得 20 分钟我很大几率会完不成这项任务。
3 面试之后复盘
如果失败,不要灰心;如果通过,切勿狂喜。面试和工作实际上是两回事,可能很多面试未通过的人,工作能力比你强的多,反之亦然。我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
一些好的学习和编程习惯
养成一个学习习惯和编程习惯真的太重要了,一个好习惯的养成真的对后面的学习有很大帮助。说实话我自己当初在这方面吃了不少亏,很多比较好的习惯我也是后面自己才慢慢发现,所以这里想着重给大家说一下有哪些好的学习和编程习惯。
正确提问
我们平时任何时候都离不开提问特别是初学的时候,但是真正知道如何正确的提问的人很少。问别人问题前不要来一句“在吗”,你说你问了在吗我是回复好还是不回复好呢 ?不要让别人给你发 32 位的JDK,除非你是喜欢那个人。
更多关于如何提问的内容,详见 github 上开源版『提问的智慧』 ,抽时间看一下,我想看完之后应该会有很多收获。
健康生活
我一直觉得这一方面是最重要的,我想很多人和我一样会无意识间忽略它,等到真的身体不舒服了,你才开始意识到健康生活的重要性。
- 除非万不得已,不要熬夜了。熬夜的危害就不用多说了,秃头加内分泌失调,你懂得!
- 看电脑45分钟之后,起来走5分钟,看看远方放松一下。不要觉得这5分钟浪费时间,相反,这5分钟可能为你带来更大的效率提升。
- 可以考虑买一个电脑架子,保护好自己脊椎的同时,办公体验也会提升很多。
- 可以下载一个护眼宝,感觉可以护眼模式挺棒的,非常适合我们这种需要经常盯着电脑的人使用,强烈安利。
高效搜索
尽量用 google 查找技术资料以及自己在学习中遇到的一些问题。
解决 bug
程序遇到问题先在 stackoverflow 找找,大部分别人已经遇到过了。如果上面没有的话,再考虑其他解决办法。实在解决不了的话,再去问你觉得有能力帮你解决的人(注意描述好自己的问题,不要随便截一个Bug 图)。
善于总结
学习完任何一门知识后,你可能当时看视频感觉老师讲的挺容易懂的。但是,过几天后你发现你忘的一干二净,别人问你一个类似的问题,你一点思路都没有。所以,我推荐你学完一门知识后不光要及时复习,还要做好总结,让知识形成一个体系。另外,你可以假想自己要给别人讲这个知识点,你能不能把这个知识点讲清楚呢?如果不能,说明你对这个知识点还没有彻底了解。这也就是人们经常说的费曼学习技巧。
总结的方式:
- 有道云笔记、OneNote……这类专门用来记录笔记的软件上;
- 思维导图;
- 通过写博客输出。可以考虑自己搭建一个博客(hexo+GithubPages非常简单),你也可以在简书、掘金……等等技术交流社区写博客。Markdown 格式参考: 中文文案排版指北:
多用 Github
没事多去Github转转,如果有能力可以参与到一些开源项目中。多看看别人开源的优秀项目,看看别人的代码和设计思路,看的多了,你的编程思想也会慢慢得到提升。除了这些优秀的开源项目之外,Github上面还有很多不错的开源文档、开源资料什么的,我觉得对我们平时学习都挺有帮助。Github用得好还能装一下,毕竟人家还是一个全英文网站,咳咳咳。
实践
多去实践,将学到的东西运用到实际项目中去。很多人都找我抱怨过没有实际项目让自己去做,怎么能有项目经验呢?如果实在没有实际项目让你去做,我觉得你可以通过下面几种方式:
- 在网上找一个符合自己能力与找工作需求的实战项目视频或者博客跟着老师一起做。做的过程中,你要有自己的思考,不要浅尝辄止,对于很多知识点,别人的讲解可能只是满足项目就够了,你自己想多点知识的话,对于重要的知识点就要自己学会去往深出学。
- Github或者码云上面有很多实战类别项目,你可以选择一个来研究,为了让自己对这个项目更加理解,在理解原有代码的基础上,你可以对原有项目进行改进或者增加功能。
- 自己动手去做一个自己想完成的东西,遇到不会的东西就临时去学,现学现卖。
注意代码规范
从学习编程的第一天起就要养成不错的编码习惯,包、类、方法的命名这些是最基本的。
推荐阅读:
- 阿里巴巴Java开发手册(详尽版)阿里巴巴Java开发手册(详尽版).pdf
- Google Java编程风格指南:
沟通能力
程序员也离不开沟通。你可能需要与客户交流需求,还要和同事交流项目问题,还有可能定期需要向领导汇报项目进展情况。所以,我觉得不错的沟通能力也是一个优秀的程序员应该有的基本素质。