Java学习计划

一、作计划,并同时写博客php

在四个月的时间里,我首先按照Java后端路线图(两个图结合着参考学习)安排好复习计划,每一个知识点都安排一段时间。好比我可能花一天时间复习“Java反射”,两天时间复习“设计模式”,一周的时间用于复习"JVM虚拟机”。我通常会在月初作好整个月的计划,而后根据进度作一些微调。html

二、“写博客整合知识点”java

三、作项目,也刷算法mysql

跟着牛客网的项目课作了,这两个项目都使用SpringBoot快速开发,而且用到一些经常使用的后端技术好比redis,云存储,以及一些常见Web框架,除此以外还涉及到了solr,爬虫等技术。虽然项目不算很难,可是我在这段时间里很快地熟悉了完整项目开发的流程,而且天天作迭代,经过Git来跟进版本,每一个版本都会写清所作的内容,这也让我对项目的架构很是熟悉。
在项目之余,我也找一些经常使用的后端组件来跑一跑demo,以便让我对这些技术有一个直观的了解,好比面试常问的dubbo,zookeeper,消息队列等组件。这些尝试也让我在理解它们的原理时更加驾轻就熟了。)linux

四、“坚持刷题,注重方法”git

首先我从新刷了一遍剑指offer,而且对每道题目进行总结,尽可能保证每一道题均可以记在脑子里,众所周知剑指offer中的题是面试时很是喜欢考的,因此先搞定这部分题目是最为关键的。
搞定剑指offer以后,固然还要刷LeetCode了,LeetCode题目这么多,怎么选择呢,我没有按照tag刷,也没有按照顺序刷,而是参考当时一个大佬的LeetCode刷题指南来进行刷题的,他把每一个类型的题目都作了概括,每部分只放一些比较经典的题目。因此我先后大概刷了100多道LeetCode的题目,而且在第二遍刷题复习的时候,我也对这些题目作了一份总结。
github

除了上面两个经典题库,我还着重刷了大厂的历年真题,这部分我主要是经过牛客网的历年真题题库来完成刷题的。说实话,真题是很是重要的,由于公司出的题目不像平时的那些算法题,可能会出得很是奇葩,因此你若是不提早适应的话会比较吃亏。完成这部分题目以后,我对算法题的复习也基本告一段落了。web

算法第四版:入门书籍,很是好。面试

算法主要靠刷题, 剑指offer应对面试手撕代码,刷几遍不重要,重要是理解,熟练。
leetcode刷题。leetcode刷题顺序看本身,能够按照tag刷,能够刷leetcode前两页,或者前150题。一天两道题,早日成为大佬。我是按照一个大佬的顺序刷的 。 https://github.com/CyC2018/CS-Notes
慕课网也有一些算法视频,能够看下。---玩转算法视频leetcode分门别类详细解析

 (1)、Java基础redis

     Java 是一门纯粹的面向对象的编程语言,因此除了基础语法以外, 必须弄懂它的oop特性:封装、继承、多态。此外还有泛型、反射的特性,不少框架的技术都依赖它,好比Spring核心的Ioc和AOP,都用到反射,并且Java自身的动态代理也是利用反射实现。此外还有Java一些标准库也是很是常见,好比集合、I/O、并发,几乎在WEB并发中无处不在,也是面试常常被问到的,因此在自学 Java 后端以前,不妨先打好这些基础,另外还有 Java8 的一些新特性,也要重点关注,好比 Lambda 表达式、集合的 Stream 流操做、全新的 Date API 等等。

     java基础+java集合+java并发多线程+java I/O+jvm

     推荐书籍:疯狂java讲义+java并发编程的艺术+深刻理解java虚拟机

    另外我发现看书的效率很低,因此我通常结合视频来复习,好比 java并发编程的艺术,这本书做为多线程复习仍是不错的,B站有马士兵多线程的视频深刻理解java虚拟机这本书,其实没有必要所有看完,应对面试看第二章(java内存区域介绍),第三章(垃圾收集算法和回收策略)第七章(类加载机制) 第12,13章(java内存模型与线程+线程安全与锁优化,这部分能够和多线程结合看一下)。

     「Java 编程思想」这本书是Java界的圣经,可是才开始不推荐学习,我在这里推荐大家一开始先看「Java 核心技术」,这本书讲得比较通俗易懂,初学者比较能接受。关于视频推荐,推荐毕向东老师讲的Java基础教程。

(2)、数据库

    关于 sql 方面:MySQL 教程(http://www.runoob.com/mysql/mysql-tutorial.html)

         了解一些基础语法以后,就直接跟着视频的老师作一些表操做实战练习,好比单表查询、多表查询等。需多加练习,不要只看懂了就行,由于工做中写得一手简练的 sql 是很是重要的。在项目一直秉承着 sql 语句是能避免多表查询就避免多表查询,可以分开多条语句就分开多条语句,由于这里涉及到多表查询性能和数据库扩展的问题。       

         mysql必知必会:入门书,能够快速浏览一遍

 

        高性能mysql:这本书比较厚,能够当作查阅书,边学习边看。

 

  关于 JDBC 方面:JDBC 教程(https://www.yiibai.com/jdbc/)、 JDBC 获取链接对象源码分析(http://objcoding.com/2017/07/03/JDBC/)

 

        须要弄懂 JDBC API 的用法,其实它只是一组规范接口,全部数据库驱动只要实现了 JDBC,那么就能够经过标准的 API 调用相应的驱动,彻底不用知道驱动是怎么实现的,这就是面向接口编程的好处。并且对于 JDBC 能够直接看视频去理解的,跟着视频作了一个基于 Apache Dbutils 工具作了一个具备事务性的小工具,我特地用思惟导图总结了一下:

jdbc-utils源码地址:jdbc-utils(https://github.com/objcoding/jdbc-utils)

(3)、Web基础

        曾经开源中国创始人红薯写了一篇文章「初学 Java Web 开发,请远离各类框架,从 Servlet 开发」,我以为他说的太对了,在现在 Java 开发中,不少开发者只知道怎么使用框架,但根本不懂 Web 的一些知识点,其实框架不少,但都基本是一个套路,因此在你学习任何框架前,请把 Web 基础打好,把 Web 基础打好了,看框架真的是如鱼得水。

      关于 Http 协议,这篇文章就写得很清楚:Http协议(https://www.cnblogs.com/ranyonsue/p/5984001.html)

      关于 Web 基础这方面数据推荐,我当时是看的是「Tomcat 与 Java Web 开发技术详解」,很详细地讲解了整个 Java Web 开发的技术知识点,但如今看来,我以为里面讲的有一些技术确实有点老旧了,不过能够了解一下 Java Web 开发的历史也是不错的。因此在 Web 基础这方面我都是看某客的崔老师讲的「超全面 Java Web 视频教程」,讲得很详细很生动,还有实战项目!

     关于 JSP,你只要了解它其实就是一个 Servlet 就好了,关于它的一些标签用法,我认为能够直接忽略,由于如今互联网几乎没哪间公司还用 JSP,除了一些老旧的项目。如今都是流行先后端分离,单页应用,后端只作 API 接口的时代了,因此时间宝贵,把这些时间重点放在 Servlet 规范上面吧。

     关于 Tomcat,它是一个 Web 容器,咱们写的后端项目都要部署到Web容器才能运行,它实际上是一个遵循 Http,经过 Socket 通讯与客户端进行交互的服务端程序:Tomcat结构及处理请求过程(http://objcoding.com/2017/06/12/Tomcat-structure-and-processing-request-process/)

(4)、Web 主流框架

    Java Web 框架多如牛毛,等你有必定经验了,你也能够写一个 Web 框架,网上不少说 Spring、Struts二、Hibernate 是 Java 三架马车,我只想说,那是好久远的事情了,我严重不推荐 Struts二、Hibernate,相信我,一开始只须要上手 Spring、SpringMVC、Mybatis 就能够了,特别是 Spring 框架,其实 Spring 家族的框架都是很不错的。

   可是提醒一点就是,千万不要沉迷于各类框架不能自拔,以会多种用法而沾沾自喜,致使知其然而不知其因此然。

  Spring其核心思想就是 IOC 和 AOP:

    谈谈对 Spring IOC 的理解(https://blog.csdn.net/qq_22654611/article/details/52606960/)

    Spring 面向切面编程(http://objcoding.com/2017/08/25/Spring-AOP/)

 SpringMVC 它的思想是所有请求统一用一个 Servlet 去作请求转发与控制,这个 Servlet 叫 DispatcherServlet:

    SpringMVC 初始化过程(http://objcoding.com/2017/06/14/SpringMVC-initialization-process/)

   SpringMVC 处理请求过程(http://objcoding.com/2017/06/15/SpringMVC-processing-request-process/)

Mybatis 它可实现动态拼装 sql,避免了几乎全部的 JDBC 代码和手动设置参数以及获取结果集:

   mybatis 入门教程(http://www.mybatis.org/mybatis-3/zh/index.html)

   Mybatis 深刻浅出系列(http://www.cnblogs.com/dongying/tag/Mybatis%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BA%E7%B3%BB%E5%88%97/)

(5)、Web 框架进阶

   

使用了 SSM 框架后,你会以为框架也不过这么回事,若是你对 Spring 有过大概了解,你也会产生想写一个「山寨版」Spring 的心思了,一个轻量级 Web 框架主要具有如下功能:

  1. 可读取用户自定义配置文件,并以此来初始化框架;
  2. 具有 Bean 容器,管理项目的类的对象生命周期;
  3. 具有依赖注入,下降类之间的耦合性;
  4. 具有 AOP 功能,使项目可进行横向编程,可不改变原有代码的状况增长业务逻辑;
  5. 具有 MVC 框架模式。

其实除了 SSM 以外,Web 框架可谓是百家齐放,其中以 Spring 全家桶最为耀眼,在这里我极力推荐两个 Spring 家族框架:SpringBoot 和 SpringCloud。

SpringBoot 弥补了 Spring 配置上的缺点,不再用为繁杂的 xml 费劲精力了,堪称是 Java 后端开发的颠覆者,推荐书籍「Java EE 开发的颠覆者:SpringBoot实战」

SpringBoot 构建 web 项目(http://objcoding.com/2017/05/03/SpringBoot/)

SpringBoot 自动化配置源码分析(http://objcoding.com/2018/01/30/The-principle-of-Spring-Boot-automation-configuration/)

自定义 SpringBoot Starter(http://objcoding.com/2018/02/02/Costom-SpringBoot-Starter/)

spring-boot-starter-tutorial(https://github.com/objcoding/spring-boot-starter-tutorial)

SpringCloud 是一个微服务架构,可以将项目按照业务分红一个个微服务,每一个微服务均可独立部署,服务之间互相协调。当一个项目愈来愈大时,随之而来的是愈来愈难以维护,此时将项目拆分红若干个微服务、单独维护、单独部署,也能够下降项目不一样业务间的耦合度。推荐书籍「Spring Cloud 与 Docker 微服务架构实战」,这本书将 Docker 与微服务完美地结合在一块儿,堪称完美!

Spring Cloud 中文官网(https://springcloud.cc/)

史上最简单的 Spring Cloud 教程(https://blog.csdn.net/forezp/column/info/15197)

我写的有关于 Spring Cloud 的博客:

SpringCloud微服务架构之服务注册与发现(http://objcoding.com/2017/05/07/SpringCloud(1)/)

SpringCloud微服务架构之服务消费者(http://objcoding.com/2017/05/10/SpringCloud(2)/)

SpringCloud微服务架构之断路器(http://objcoding.com/2017/05/15/SpringCloud(3)/)

SpringCloud微服务架构之服务网关(http://objcoding.com/2017/05/20/SpringCloud(4)/)

(6)、其余技术

Redis:一个高性能的 key-value 数据库,当有并发量很高的请求时,将数据缓存在 Redis 中,将提升服务器的响应性能,大大减轻数据库的压力。

redis 中文官网(http://www.redis.cn/)

redis 教程(http://www.runoob.com/redis/redis-tutorial.html)

Redis设计与实现:这本书基本是Redis讲的最好的,能够结合B站视频学习。

Git:世界上最早进的分布式版本控制系统,建议全部初学者从命令行开始使用 Git!

Git 官网(https://git-scm.com/)

最全 Git 教程(https://git-scm.com/book/zh/v2)

Git 的一些经常使用命令(http://objcoding.com/2017/08/12/Git/)

Maven:一个用于构建项目的工具,将项目间的依赖经过 xml 完美地组织到一块儿,可经过编译插件将项目编译成字节码文件。还有相似的 Gradle 也是不错的选择。

maven 的 pom.xml 文件详解(http://www.cnblogs.com/hafiz/p/5360195.html)

Linux:至少要求经常使用的命令会用,可以在 linux 环境下部署项目。

Linux 命令大全(http://man.linuxde.net/)

最全的 SSH 链接远程终端教程(http://objcoding.com/2017/10/31/The-most-complete-SSH-connection-remote-terminal-tutorial/)

鸟哥的linux私房菜:了解经常使用命令。

Docker:简直是项目部署神器啊,来不及解释了,看我 Docker 系列博客,开启 Docker 之旅吧!推荐书籍「Docker 技术入门与实战」,中国首部 Docker 著做!

Docker 实战(一)(http://objcoding.com/2017/12/01/Docker(1)/)

Docker 实战(二)(http://objcoding.com/2017/12/07/Docker(2)/)

Docker 实战(三)(http://objcoding.com/2018/02/06/Docker(3)/)

docker-deploy-tutoria(https://github.com/objcoding/docker-deploy-tutorial)

(7)、开发工具    

工欲善其事,必先利其器,如下是我推荐的一些开发工具:

Intellij IDEA:Java 开发最好的 IDE,这个是公认的,我一开始是用 Eclipse 的,后来用了 Intellij IDEA,才发现 Eclipse 就是一坨屎,因此我以过来人劝大家不要使用 Eclipse,直接 Intellij IDEA!

IntelliJ IDEA 使用教程(http://www.phperz.com/special/83.html)

Iterm2:macOS 最好用的终端!

Iterm2 使用指南(https://wdxtub.com/2016/03/20/iterm2-guide/)

Chrome:人生苦短,请用 Chrome,来不及解释了,快上车!

Postman:很好用的一个接口调试工具。

Postman 官网(https://www.getpostman.com/)

(8)、设计模式、

     一直以为设计模式能够和Java基础一块学,因此把它放在这里。固然,一些真正使用到设计模式的地方,譬如JDK的集合类,IO流等等,也须要足够重视。

    HeadFirst 设计模式:重点了解单例模式,工厂模式,观察者模式,等等,能够看看B站视频

(9)、Jvm基础与调优

     JVM是提供Java程序运行的一个进程,学习JVM知识,也是咱们的必经之路。除了看懂《深刻理解jvm虚拟机》之外,咱们还要学习的内容就是JVM调优,使用合适的工具诊断问题,最后解决问题。

这部份内容在面试中呈现的不只仅是GC,内存分区,以及类加载器,也包括了我所说的JVM调优问题。
(10)、数据相关     

      关系数据库Mysql
          这个没必要多说,人手都要会,无论是基础的crud,索引,抑或是进阶的存储引擎,分布式方案等,咱们都须要对应掌握。

      缓存
          如Redis,memcache一类的缓存,做为后端开发者的咱们也须要对应掌握,固然,它们的高级特性,以及分布式方案,也是必备的知识点。

     搜索引擎
          基于Lucene的solr,elasticsearch这类搜索引擎,本质上也是数据源,可是并非后端必备的内容,不过学一学也没有坏处啦。

    大数据
          海量数据处理的场景愈来愈多,大数据技术如hadoop,storm等也愈来愈火,可是大数据应用通常会由专业的大数据工程师来作,因此咱们学一些基本内容也就足够了。
(11)、算法和数据结构  

      算法一直是校招同窗面前的一座大山,做为后端同窗来说,除了基本的数据结构算法之外,也要会一些高级的算法,譬如dp,搜索,贪心等等。

     另外,经过LeetCode等题库来刷题的方式来巩固算法也是公认的好办法了。

(12)、分布式      

        最后一个部分,也是内容最多,覆盖面最普遍的部分了。分布式相关的技术实在太多了,咱们这里也会作一下简单的概括。

        web架构
           先了解web架构的发展会对分布式的学习有更好的理解,毕竟架构的发展也对应着分布式技术的发展。

       分布式理论
           这部份内容包括分布式的发展演化,base理论和cap理论等等,学习分布式技术以前,最好能对这部分概念有必定了解。

      一致性问题
           强一致性的解决方案:事务和锁,弱一致性的方案:消息队列。

     分布式session
          一个常见的问题,也有多种解决方案

      分布式缓存
          和上面说的缓存同样,只不过这里侧重缓存的分布式方案

     分布式数据库
           这里指的数据库的分布式方案,也包括hbase这种分布式数据库。

     负载均衡
          负载均衡也是一个值得探讨的话题,通常咱们讨论的是七层和四层负载均衡。

    消息队列
        消息队列是一个比较复杂的分布式组件,咱们能够了解经常使用消息队列好比amq,kafka等的实现。

    服务化
         服务化的核心包括rpc,服务注册中心等等。分布式服务相关技术也是后端同窗必须掌握的内容。

    虚拟化
         虚拟化一样不是后端同窗必须掌握的内容,只不过如今愈来愈多的服务部署方式使用的是docker和云服务的方式。因此了解一下也没有什么很差的。

(13)、计算机网络    

    计算机网络自顶向下方法。这本书先讲应用层和传输层,很是好,咱们也通常只须要重点掌握这两层。前四章能够看下。
    TCP/IP协议卷一:tcp/ip是常考的,能够看下。
(14)、操做系统
   现代操做系统:推荐阅读线程与进程,死锁,存储管理章节。再结合面经看看。
(15)、项目
    本身准备一个好的熟悉的项目。
相关文章
相关标签/搜索