一、前言
作为一名程序员,时刻学习提升自己是很重要的一件事,也是必须持续做的一件事,今天和大家分享下作为一名JAVA程序员我的学习思路。
先简单介绍下自己,本人15年普本计算机毕业,毕业后入职某外包公司,换过一次工作,目前工作三年,最近通过在慕课的学习收到两家较知名互联网公司offer。
介绍自己是想说在职业发展的这条路上,不一定要有很亮眼的985毕业背景,有外包经验不一定是一定减分的经历,只要自己是一名喜欢挑战,热爱技术,善于思考,持续学习的coder 就有机会去争取自己想要的机会。
最近群里竟然会让我分享一些面试都问了什么,我觉得分享这些都是没有意义的,你去面试的时候基本不可能会被问到和我说的一模一样的题,每个面试官问同样问题的角度不同,问的深度也不同,同样是基础,我告诉你了hashMap,没准你去就会被问cocurrenthashmap,也许还会让你对比等等。
所以只有全面系统的了解所有知识点,并对面试有一些常见面试题的心理准备就好,当被问到一些不常用或没有准备的地方的时候才能更好的去给出答案。经过一段时间的系统学习后,自身的水平包括感悟和理解也会有很大的提高。
14年无意间接触了慕课网,那时候上面只有免费的一些基础课程,但是就觉得很不错,后来抱着试一试的心态购买了一些实战课,受益匪浅。 接下来结合慕课的一些课程为大家简单说下我的学习思路,文采有限,说的不好之处希望大家指正。
二、方法论
俗话说磨刀不误砍柴工,在开始学习之前,我们需要先明确一下对于一项新技术或者一部分知识点,我们的学习思路。
这里我们先以redis为例,也许你第一反应是会去百度或者google 这个关键字。然而搜到的应该会是一些互相重复的博客和英文的官网。你得到的反馈有限,而且都是他人总结出来的知识点。这就是被动学习,然而实际效果并不是特别理想。
主动学习与被动学习
推荐大家先去尝试主动学习,先去高质量社区搜一些中文资料 ,英语好的 可以直接尝试去官网自己看一下,经常有人聊希望看一下spring的源码和官网 就是这个意思。只有官网或者官方人员出版的书籍资料才是最权威,最准确的,阅读的时候不一定要全部读懂,首先心中梳理下大致分为几部分,哪部分是应用层的类似API的使用,哪部分是特性,哪部分是源码级别,做到学习先后顺序有先后。
接下来主动学习后,可能会有很多你心中的疑难点或者疑惑,这时候带着问题去博客,社区,或者QQ群请教一些人,才可以对应的解答并加深印象,形成自己的理解,这就是被动学习。
慕课网的实战视频和免费视频其实也是一种被动理解,相对博客和QQ群,慕课邀请的都是行业级别的大牛前辈,更准确也更系统,所以更推荐优先尝试这种吸收方式。
接下来通过主动学习和被动学习 你应该对这部分有了比较充分的理解。之后建议你还可以通过横向对比完善自己的技术栈,redis 学完了,可以去了解memcache,从分布式缓存到本地缓存guavacache,如何技术选型,两者特点有何差异,自己尝试封装工具类等等。
最后学习完毕,可以尝试思维导图,公司内技术分享,写一篇博客,或上传到github。罗马非一日建成,这部分东西是长时间积累的东西,最终在面试的时候 也许是一个不小的意外加分。
最后推荐几个高质量的社区,CSDN就不谈了,Importnew,stackoverflow,慕课网,美团点评技术团队博客,程序员小灰,知乎的一些专栏我觉得都很不错,这里真不是广告。哈哈。
也许你会觉得我有些啰嗦,直奔面试题不就好了,但是其实这才是最重要的精华,学什么不重要,重要的是如何学。
三、知识点框架
作为一名JAVA程序员,目前我给自己大致划分的学习框架基本分为:
JAVA基础,网络,spring体系,jvm,并发,mysql,中间件,架构思想,开发工具及规范,设计模式及最佳实践,方法论,数据结构和算法。
JAVA基础
java基础大致的划分包含了数组,集合类,IO这几大块。这几块的学习资料太多了,包含很多21天学习JAVA等等。我只说下最基本应该掌握到的水平吧。
数组最好配合排序算法做一些练习,基本操作就不提了。如果能实现一个线程安全的数组更佳。
集合一定会聊的,linklist和arraylist 最好看下源码 熟悉数据结构和特性,fail-fast机制。
如何保证hashmap的线程安全基本手段,为何不安全,会导致什么问题。底层数据结构,jdk1.8以后的优化。红黑树有了解更佳。
cocurrenthashmap 的线程安全,如何保证线程安全,1.8以后的优化
hashset和treeset的区别,hashset是如何保证不重复,treeset是如何保证有序的。
IO这块最好配合NIO这块一起看。先从IO的基本使用就可,越多越好。这块面试的时候问的不多,但是一旦你提及了最好要有一个系统的配合工作项目的使用经验。
高级特性:动态代理,反射,自定义注解。
高频面试题:聊聊hashmap的理解,保证hashmap线程安全的几种方式,分段锁。linklist和arraylist的区别。
最后如果你能对jdk源码设计的集合体系,从collection接口往下的实现有一个系统的概念更佳。
spring 技术体系
经常会有面试官会直接问聊聊spring的理解。知乎上也有这个经典的问题。
spirng 发展至今已经不是成为一个生态社区,包含的太多太多,但是最基本的还是ioc 和AOP两个概念,首先你要对springcore 有一个深刻的理解 其实基本就能让面试官基本满意。
ioc的控制反转和依赖注入,@resource @autowired区别等等。
aop的面向切面的概念,spring实现aop的两种方式,从这里切入我们可以继续深入下动态代理的实现方式,如何选择使用甚至手写动态代理。
springboot,springcloud这块有掌握更佳。
有关spring的东西只有看自己兴趣去学习哪方面,这里推荐Spring技术内幕:深入解析Spring架构与设计原理(第2版)
高频面试题:聊聊对spring的理解。
并发
高并发,高可用是我们经常聊的概念,首先学习高并发这块,一般先要学习java.util.current包下的一些类库,这是jdk1.5以后为我们提供的类库。
线程这块的资料太多太多,我只推荐几个我认为不错的网站和书吧。
线程有几个基本概念一定要搞清,为什么要使用多线程,多线程并不是一定能提高效率,线程间的通信,线程的原子性、可见性和有序性。
学习资料这块:书籍:华章专业开发者丛书·Java并发编程实战
网站:并发编程网
博客:聊聊并发
其实我以上说这么多或者你觉得这些资料看起来太费劲,强烈推荐慕课网jimmy老师的实战课程,是我认为目前市面上最好的并发这块视频课程,绝对物超所值。。相信我
高频面试题:太多了 直接上链接吧
jvm
jvm在大家看来可能只是一个高频面试关键字,其实作为java程序员,了解JVM是高阶进阶必须的,掌握对象在内存中的生命周期才能够编写出更优质的代码,更好的解决线上问题。
这里不多说 直接安利 深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)
经典无需多说 系统的看完这本书 就什么资料都不用看了。。
关于实战调优这块 慕课网实战也有一个jvm 调优的实战 大家可以看书后学习。
面试高频题:jvm垃圾回收机制,类加载器,双亲委派,jvm内存划分 参数比例设置,jvm调优工具的
mysql
关于mysql这块,大家也经常熟悉,需要掌握的就是聚合函数,表关联的使用。
mysql的事务隔离级别
mysql的存储引擎,索引的数据结构,索引的最左匹配原则,等等。
书籍推荐:高性能MySQL(第3版)
实战推荐:扛得住的MySQL数据库架构
架构及实战经验
对于项目经验这一块,如果你个人工作经验比较欠缺,那么我推荐geely老师的实战课程给你,绝对会有意外惊喜收货,geely老师经验丰富,讲课水平很高
通过电商系统的概念逐步演进架构 让你对架构的演进和选择有一个深刻的理解,课程中还包含了很多最佳实践以及原理的讲解,可以说兼具了一定的广度和深度,项目写在简历中也会大大加分
书籍推荐:大型网站技术架构 核心原理与案例分析
作者是来自淘宝的大牛 语言通俗易懂
传送门:一期课程:JAVA从零到企业级电商项目实战
二期课程: Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式
第二门课程 包含了很多 晋级中高级工程师的必杀技
三期即将8月末上线敬请期待
数据结构和算法
数据结构这块系统学习的资料还很多,系统的学习需要一段时间,这块需要结合自身情况去学习吧。最基本的面试要求是需要对常见的数据结构的一些操作就好。
学习资料方面: 视频课比较推荐bobo老师课程:《玩转数据结构 从入门到进阶》
高频面试题:二叉树 深度遍历与广度遍历 递归非递归实现 归并 快速排序 n的阶乘
设计模式及最佳实践
关于设计模式 ,作为JAVA程序员,我们或多或少都会使用过几个设计模式,如果有时间最好能够系统学习下设计模式的原则,模式了解的越多越好,结合jdk 源码者更佳。
视频课程推荐:慕课网免费课程中有不少设计模式系列可以参考
无需多说,干货满满,结合源码讲解,市面难得的课程
最后附上一个干货全集吧:【干货】Java程序员面试考点大合集
希望大家都能争取到自己满意的offer.
以上链接均来自网络,如有侵权,请随时联系作者可删除。
共同学习,写下你的评论
评论加载中...
作者其他优质文章