分享一下自学的历程,目前题主这个阶段建议多练一点算法方面的东西。
进行阶段五:算法数据结构深入的训练学习。
阶段一:视频学习
主要是看黑马和尚硅谷的培训视频(百度搜索,官网上就可以找到)。看视频学习的最大好处就是入门很快,看一遍,再跟着敲一遍,但是缺点就是时间会花费长一些。偶入门阶段基本上都是看视频学习,建议是找最新的视频学习,因为培训机构也会根据公司每年面试的侧重点调整自己的教学方案。
阶段二:书籍学习
视频学习一般都是比较基础和偏向案例实现的的教学,如果要想系统的了解某一模块的知识,阅读专业书籍是少不了的。如果有时间肯定多读一些书好,但是最优的做法是在有限的时间内阅读完经典书籍。拿Java后端来说,《Java编程思想》、《深入理解Java虚拟机》,毫不夸张的说几乎每次面试都会有很多知识点都是出自这些书中。所以,这类书籍,多读几遍。最好看完后,能够写出自己的读书笔记。偶一般是写读书笔记前,会看一看别人的读书笔记,看看自己对书中的知识点是否有理解偏差或者有遗漏的地方。
阶段三:博客学习
这一阶段是一个持续的过程,主要是写博客和看博客。总感觉看了书很快就忘了,所以为了以后高效的复习,开始写了一些博客,当然博客内容主要来源自书本以及一些大牛的博客,再加上自己的理解。
阶段四:实验室项目
一共做过两个校企合作项目,这两个项目虽然很简单,都是单点的web服务,但是却给自学Java带来了很大的帮助。而且在最开始找实习的时候,这两段项目还是起了很大的作用。个人感觉项目简单也没有关系,只要你把项目中涉及到的知识点都搞清楚,还是很加分的。至少把自己做的东西弄懂了。
阶段五:算法数据结构深入
1.数据结构与算法:《剑指Offer》、LeetCodeTop100、常考的一些算法:TopK、生产者消费者模式、多线程交替打印、HashMap的简单实现等等;
2.计算机网络:五层/七层协议、TCP和UDP的区别、TCP三次握手和四次挥手、HTTP的特点、HTTP与HTTPS的区别、HTTPS过程等等;
3.计算机操作系统:进程与线程的区别、死锁的概念/检测/避免、进程间的通信方式、内存管理等等;
4.设计模式:单例模式、工厂三兄弟、适配器模式、代理模式、装饰者模式等等,以及项目中和JDK/Spring中用到过的设计模式;
5.Java语言基础:重载和重写的区别、抽象类和接口的区别、String/StringBuilder/StringBuffer的区别、关键字(static、super、this、transient)、异常、IO流、反射、动态代理、序列化等等;
6.Java集合类:HashMap的get、put、resize、JDK1.7和1.8、多线程下会发生什么问题、HashMap和HashTable/ConcurrentHashMap的区别、ArrayList和LinkedList的区别等等;
7.Java并发编程:线程的状态转换、wait和sleep的区别、synchronized关键字、volatile关键字、锁:ReentranrLock、读写锁等、线程池:核心参数、类型等等;
8.Java虚拟机:运行时数据区、垃圾回收算法、垃圾回收器、垃圾回收策略、JVM监控和调优、类加载机制、Java内存模型等等;
9.MySQL:常用的SQL语句、索引的数据结构、类型及其优化、事务、锁、存储引擎、主从复制、分库分表等等;
10.Spring:AOP:代理方式、JDK动态代理的实现;IOC:Bean的生命周期和作用域、单例Bean的线程安全问题;事务:隔离级别、传播特性等等;
11.SpringMVC:核心组件、处理请求的流程等等;
12.MyBatis:分页方式、延迟加载、一级和二级缓存等等;
13.Linux:需要掌握基本的操作指令;
14.Redis:基本的数据类型、使用场景、缓存穿透、缓存雪崩、持久化、缓存和数据库双写一致性问题等等;
15.消息队列:使用场景、如何保证消息不被重复消费、如何保证可靠传输、如何保证顺序性等等;
16.Zookeeper:主要功能、部署模式、状态同步、通知机制等等;
17.分布式:分布式框架Dubbo:基本组件、协议、集群容错模式、负载均衡策略等等;分布式事务及其解决方案、分布式锁及其解决方案。
有帮助,请点个赞鼓励一下