这可能是最全面的Java学习路线了

大家好,我是大彬~

我本科学的不是计算机,大四开始自学Java,并且拿到了几个互联网中大厂的offer。在学习Java这方面还是比较有经验的,下面我来分享下我整理的Java自学路线

在这里也提醒学弟学妹们,要尽早确定以后的方向,读研还是工作,找工作的话,也要尽快确定工作岗位,想转行的,需要花更多的时间准备。很多同学到了大四快毕业的时候,才思考自己未来要做什么,这个时候已经有点晚了。如果错过了校招,走社招渠道去找工作,难度将会提升一个等级,到时后悔也来不及!

下面来说说自己的经历吧(附自学路线)。

接触编程

大学以前基本没碰过电脑,家里没电脑,也没去过网吧。高中的计算机课程,期末作业要完成一个自我介绍的PPT,也不会做,最后直接抄同桌的作业(复制粘贴都不会。。还得同桌教,捂脸)。

高考完一个月后,买了电脑,真正开始使用上了电脑。

大一上学期的时候,系里开了一门C语言的课程,这也是我第一次接触编程。教材是英文的,刚开始学还是挺头大的。每次课程作业,周围的同学都是一顿复制粘贴,我也一样嘿嘿。

记得在讲指针那一章的时候,听的一头雾水。稍微走神,回过头来,已经不知道讲的是啥了。

后面系里开设了兴趣小组,因为平时比较闲,也想着去捣鼓点东西,就去参加了。刚开始的时候,什么都不懂,老师推荐我学一下51单片机,拿了一本厚厚的51单片机的书籍,跟着书里的demo敲了一遍,发现了新天地!原来编程这么有意思!

记得第一次跑出流水灯的时候,那叫一个激动啊,满满的都是成就感!后面也写了一些电机、红外遥控等demo。从那以后,激发了我学习编程的兴趣。

到了大二,辅导员在群里发布全国电子设计大赛的信息,参赛题跟四轴飞行器相关,那段时间对四轴飞行器比较感兴趣,于是约了两个小伙伴一块参加。距离比赛时间只有一个月,在那一个月的时间里,每天都是早出晚归,吃饭的时候还在想着哪一块代码出了bug。虽然最后没能获奖,但是在这个过程中,学到很多知识,编程能力也有了很大的提升。

决定转码

转眼间,大三开学,开始纠结考研还是工作,思考了一周时间,也进了系里的实验室体验了一把研究生生活,最后还是听从内心的想法,决定直接找工作。

我咨询了本专业的师兄师姐们往年的就业情况,他们大部分人还是找了互联网方向的工作。有一个在传统行业的师兄,也劝我投互联网公司的岗位,因为在传统行业加班也不少,但是工资贼低。。最后决定转行程序员,找后端相关的工作。

那么学习哪一种语言呢?当时有三个选择:c++,Java,python。

那段时间python比较火,但是经过一番深思熟虑之后,还是选择了Java。为什么选择Java呢?

很简单,市场需求大,学习难度适中。相比科班同学来说,我缺乏系统的计算机基础知识,而距离秋招也只有不到一年时间,所以还是选择学习难度低一点的Java。

闭关自学

确定方向后,便开始制定学习路线。不得不说,Java要学的东西是真的多。。

自学期间遇到挺多问题,比如一些环境配置问题,有时候搞上好几天,很打击积极性。中途也有很多次怀疑自己的水平,是不是不适合干编程,差点就放弃了。幸好最后还是坚持了下来。

半年多的时间,除了平时上课,其他时间就是在图书馆。周末或者节假日,每天都是7点起床,八点到图书馆开始学习,到了晚上十点,图书馆闭馆,才回宿舍,每天都是图书馆最后走的一批。回到宿舍,洗完澡,继续肝到十二点多(卷王!)。

img

很多人在问,大三才开始自学Java,来的及吗? 我觉得,还是看个人的投入程度和学习能力。有些人自学能力强一点,每天可以投入10小时及以上的时间去学习,那完全没问题。

自学过程还是挺辛苦的,要耐得住寂寞,最最重要的还是得坚持!

我根据自己的自学经历,整理了一些学习过程中踩坑总结的经验,希望自学的小伙伴可以少走弯路:

  • 注重实践,不要只是埋头看书,一定要多动手写代码。
  • 刚开始自学的时候,可以不用太深究细节,不然可能会怀疑自己的学习能力。等到后面有了一定的基础,回过头来重新回顾,可能会恍然大悟,没有当初想的那么难。
  • 可以适当加一些交流群,遇到不懂的知识点,多与其他人交流。

好了,下面给大家分享一下我的自学经验。

自学路线

首先看一下Java学习路线图:

在这里也给大家分享一份精心整理的大厂高频面试题PDF,小伙伴靠着这份手册拿过阿里offer,需要的小伙伴可以自行下载:

http://mp.weixin.qq.com/s?__biz=Mzg2OTY1NzY0MQ==&mid=2247485445&idx=1&sn=1c6e224b9bb3da457f5ee03894493dbc&chksm=ce98f543f9ef7c55325e3bf336607a370935a6c78dbb68cf86e59f5d68f4c51d175365a189f8#rd

Java

推荐书籍:

  • 《head first java》
  • 《JAVA核心技术卷》

head first系列的书籍讲解比较有趣,比较好理解。《JAVA核心技术卷》难度相对适中,内容也比较全面,部分章节(如Swing)可以跳过。

视频推荐动力节点老杜的视频教程,1000w的播放量!视频总体上质量很不错,讲解挺详细,适合新手。跟着老杜的视频学下来,可以学到很多知识!

再次强调:多敲代码!多敲代码!多敲代码!

学习编程就是看书加实践,要多动手,不然看过的知识点很快就会忘,而且多实践也会遇到很多坑,丰富经验。 可以到github上找一些项目练练手,通过做项目巩固知识,而且每实现一个功能之后,会有满满的成就感,也会激励你不断去学习。

Java基础知识主要有:

  • 面向对象特性

  • Java语言基础、循环、数组 ; 了解类和对象

    • 掌握强制数据类型转换和自动类型提升规则;
    • 常量如何声明及赋值;
    • 循环的语法及作用;
    • 数组的声明及定义;
    • 掌握类的概念以及什么是对象。
  • 抽象类和接口

  • 数据类型、重写重载、封装继承多态

  • 容器类Map/List/Set等

  • 异常处理

  • 反射机制

  • 泛型

  • 常用类:String、时间类

  • 函数式编程

  • Stream API

  • Lambda 表达式

  • IO流操作,多线程及Socket

    • 掌握IO读写流相关的类,了解字节流,字符流和字符流缓冲区;
    • 掌握线程的概念,多线程的创建、启动方式,锁和同步的概念及运用;
    • 掌握Socket通信的概念,如何声明客户端服务端,如何完成双端数据通信。

Java Web

Java Web是一系列技术的综合,也是大多数Java开发者的技术方向。有必要学习一下。这部分可以看看视频教程。

视频推荐尚硅谷的JavaWeb全套教程,HTML/CSS/JavaScript等跟前端相关的可以倍速观看。

黑马程序员的Java web教程总体也不错。

下面列举Java web需要掌握的知识点。

HTML:

  • 掌握网页的基本构成;
  • 掌握HTML的基本语法;
  • 表格的作用以及合并行、合并列;
  • 表单标签的使用,提交方式get/post的区别;
  • 框架布局的使用

CSS:

  • 掌握CSS的语法及作用,在html中的声明方式;
  • 掌握CSS布局的函数使用;
  • 掌握CSS外部样式的引入。

JavaScript:

  • 掌握JS的语法及作用,在HTML中的声明方式;
  • 掌握JS的运行方式;
  • 掌握JS中的变量声明、函数声明、参数传递等;
  • 掌握HTML中的标签事件使用;
  • 掌握JS中的DOM原型

jQuery:

  • 了解如何使用jQuery,下载最新版或者老版本的jQuery.js
  • 掌握选择器、文档处理、属性、事件等语法及使用;
  • 能够灵活使用选择器查找到想要查找的元素并操作他们的属性;
  • 动态声明事件;
  • 动态创建元素。

Servlet

  • 掌握Java中的Web项目目录结构;
  • 掌握Java Web项目的重要中间件Tomcat;
  • 掌握Servlet中的Request和Response;
  • 掌握Servlet的基本运行过程。
  • 掌握Servlet的声明周期

Ajax

  • 掌握Ajax的基本概念;
  • 掌握jQuery中的Ajax请求;
  • 掌握JSON

Filter、Listener:

  • 掌握Filter和Listener
  • 掌握Session过滤器和编码过滤器

JSP数据交互

  • JSP中如何编写Java代码,如何使用Java中的类;
  • JSP中的参数传递。

状态管理Session和Cookie

  • 掌握Session、Cookie的作用及作用域;
  • 掌握Session及Cookie的区别,存储位置,声明周期等;
  • 掌握Session及Cookie分别在JSP和Cookie中的使用

框架

主流框架主要有:

  • spring:面向切面、依赖注入。
  • springboot:习惯优于配置、自动配置。目前很多公司内部都是使用Spring Boot。
  • springmvc:基于MVC架构模式的轻量级Web框架
  • Mybatis:orm框架。
  • springcloud

Spring

大部分公司都会用到 Spring框架,必学!。主要理解 Spring 面向切面、依赖注入的特性,学会使用 Spring 构建应用程序。推荐书籍《Spring实战》,通过demo的方式带你一步步搭建Spring应用

视频推荐尚硅谷王泽老师的Spring5框架最新版教程,视频刚出不久,内容也是与时俱进,值得学习!

SpringMVC

SpringMVC是基于MVC架构模式的轻量级Web框架,对于初学者,需要掌握Web请求从发出到相应的这个过程,SpringMVC做了什么,还有MVC模式的思想。

视频推荐狂神说Java的SpringMVC最新教程。

【狂神说Java】SpringMVC最新教程IDEA版通俗易懂。

Mybatis

MyBatis 是一款优秀的持久层框架,MyBatis 帮助我们做了很多事情:建立连接、操作 Statment、ResultSet、处理 JDBC 相关异常等,简化了开发流程。推荐书籍《深入浅出Mybatis》。

视频推荐狂神说的Mybatis最新完整教程,b站播放量最高,获得了很多小伙伴的一致好评。

SpringBoot

学完 SSM,就要进一步学习 SpringBoot 了,相信很多人在学了 Spring 之后,面对各种各样的配置,想必都会头疼。而 SpringBoot 的出现解决了这个问题,SpringBoot 去除了大量的 XML 配置文件,简化了复杂的依赖管理。书籍推荐《Spring Boot实战》。

视频推荐尚硅谷雷神的2021版最新SpringBoot2权威教程。

SpringCloud

现在面试基本都会问到微服务相关的内容,最好了解下微服务相关的知识。服务注册与发现、负载均衡、服务降级、API网关等。推荐书籍《spring cloud微服务实战》

视频教程可以看看尚硅谷周阳老师的SpringCloud教程~

并发

什么是并发编程,简单来说就是为了充分利用cpu,多个任务同时执行,快速完成任务。

并发编程的相关内容可以看看《JAVA并发编程实战》这本书。

视频推荐狂神说Java,很不错的视频。

主要知识点有:

  • 线程的概念以及案例
  • 线程池原理
  • 线程间通信方式
  • 锁(synchronized、ReentrantLock)
  • 并发工具类(CountDownLatch/CyclicBarrier/Semaphore)
  • 原子类
  • AQS
  • Thread生命周期状态
  • Java内存模型

Redis

用来缓存热点数据,加快读写速度,从而提高性能。现在Java后端的面试基本都会问到Redis。

书籍推荐《redis实战》和《redis设计与实现》。

视频推荐狂神说Java的Redis最新超详细版教程,不仅教你学Redis,还会教你学习的方式。

消息队列

消息队列是基础数据结构中FIFO的一种数据结构,用来解决应用解耦、异步消息、流量削锋等问题,可以实现高性能、高可用、可伸缩和最终一致性。

视频推荐黑马的RocketMQ教程和百知教育的RabbitMQ教程,两者挑一个学习就可以!

JVM

JVM也是面试经常会问的内容。Java开发者不用自己进行内存管理、垃圾回收,JVM帮我们做了,但是还是有必要了解下JVM的工作原理,这样在出现oom等问题的时候,才有思路去排查和解决问题。书籍推荐周老师的《深入理解Java虚拟机》。

视频推荐尚硅谷宋红康的全套课程,全套课程分为三个篇章:《内存与垃圾回收篇》、《字节码与类的加载篇》和《性能监控与调优篇》。

JVM的基础知识:

  • jvm内存结构(程序计数器、虚拟机栈、本地方法栈、堆、方法区、运行时常量池、直接内存)
  • 类加载过程
  • 双亲委派
  • 垃圾回收算法
  • 垃圾回收器
  • 调优工具(jsp/jstack/jstat/jmap,了解即可)

计算机基础知识

学编程一定要打好计算机基础!

对于非科班同学来说,与科班同学最大的差距在于基本理论知识。如果你是非科班自学编程的,想要进入大厂,那么计算机基础知识一定不能落下。

每一个合格的程序员,应该要知道计算机体系的结构,内在的逻辑是什么,要有自己的思考。

总之,基本功非常重要!

操作系统

无论学习什么编程语言,和需要和操作系统打交道。如果对操作系统不熟悉,那么你在未来的学习路上将会遇到很多障碍,比如线程进程调度、内存分配、Java的虚拟机等知识,都会一头雾水。因此,只有把操作系统搞明白了,才能够更好地学习计算机的其他知识。

书籍推荐

入门级别书籍:《现代操作系统》、《操作系统导论》,进阶:《深入理解计算机系统》

强推《深入理解计算机系统》 这本书。

CSAPP是一本很好的书,糅合了计算机组成原理、操作系统、网络编程、并行程序设计原理等课程的基础知识。对于刚接触编程,或者像大彬这种非科班出身的人来说,这是一本指导性的书,它会告诉你,要想成为一个优秀的程序员,应当重点理解哪些计算机底层原理,告诉你应该在以后的自学过程中,应该重点学习哪些课程,比如操作系统和体系结构等。

视频教程推荐

Udacity的Advanced OS公开课:http://www.classcentral.com/course/udacity-advanced-operating-systems-1016

还有国内不错的操作系统的课程,清华大学的公开课:http://www.xuetangx.com/course/THU08091000267/5883104?channel=search_result

由清华大学两位老师向勇、陈渝讲授,同时配有一套完整的实验,实验内容是从无到有地建立起一个小却五脏俱全的操作系统,以主流操作系统为实例,以教学操作系统ucore为实验环境,讲授操作系统的概念、基本原理和实现技术,为学生从事操作系统软件研究和开发,以及充分利用操作系统功能进行应用软件研究和开发打下扎实的基础。

另外,推荐另一门MIT操作系统课程:MIT6.268

课程地址:http://pdos.csail.mit.edu/6.828/2018/schedule.html

MIT6.828 是一门非常值得学习的课程,广受好评,是理论与实践相结合的经典

只要你跟着项目一步一步走,做完 6 个实验,就能实现一个简单的操作系统内核。

每个实验都有对应的知识点,学完理论知识后会有相应的练习,学习体验非常棒!

建议在开始学习这门课之前先熟悉C和汇编,对计算机组成有一定了解。

操作系统主要知识点

  • 操作系统的基础特征
  • 进程与线程的本质区别、以及各自的使用场景
  • 进程的几种状态
  • 进程通信方法的特点以及使用场景
  • 进程任务调度算法的特点以及使用场景
  • 死锁的原因、必要条件、死锁处理。手写死锁代码、Java是如何解决死锁的。
  • 线程实现的方式
  • 协程的作用
  • 内存管理的方式
  • 虚拟内存的作用,分页系统实现虚拟内存原理
  • 页面置换算法的原理
  • 静态链接和动态链接

数据结构和算法

为什么学习数据结构与算法?对于计算机专业的同学来说,这门课程是必修的,考研基本也是必考科目。对于程序员来说,数据结构与算法也是面试、笔试必备的非常重要的考察点。

数据结构与算法是程序员内功体现的重要标准之一,且数据结构也应用在各个方面。数据结构也蕴含一些面向对象的思想,故学好掌握数据结构对逻辑思维处理抽象能力有很大提升。

书籍推荐

《大话数据结构》和《算法图解》

《大话数据结构》 这本书最大的特点是,通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。这本书特别适合初学者。

《算法图解》是非常好的入门算法书,示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量。

很多学Java的同学,可能会问有没有Java版本的数据结构和算法书籍?

当然有的,可以看看《数据结构与算法分析 java语言描述》这本书,用Java语言描述各种数据结构和算法,对于Java开发者来说,更容易理解。

视频推荐

UCSanDiego的数据结构与算法专项课程:http://www.coursera.org/specializations/algorithms

浙大陈越姥姥的数据结构课程

浙江大学陈越姥姥和何钦铭教授联合授课,非常经典的课程。姥姥我的偶像!

数据结构与算法主要学习以下内容:

  • 基本数据结构(数组、链表、栈、队列等)
  • 树(二叉树、avl树、b树、红黑树等)
  • 堆结构
  • 排序算法(冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等及时间空间复杂度)
  • 动态规划、回溯、贪心算法(多刷刷leetcode)
  • 递归
  • 位运算

学完感觉还很吃力?可以借助一些刷题网站巩固下。下面推荐几个刷题网站。

牛客网

作为牛客红名大佬,来给牛客宣传一波!(牛客打钱!)

牛客网拥有超级丰富的 IT 题库,题库+面试+学习+求职+讨论,基本涵盖所有面试笔试题型,堪称"互联网求职神器"。在这里不仅可以刷题,还可以跟其他牛友讨论交流,一起成长。牛客上还会各种的内推机会,对于求职的同学也是极其不错的。

LeetCode

力扣,强推!力扣虐我千百遍,我待力扣如初恋!

从现在开始,每天一道力扣算法题,坚持几个月的时间,你会感谢我的(傲娇脸)

我刚开始刷算法题的时候,就选择在力扣上刷。最初刷easy级别题目的时候,都感觉有点吃力,坚持半年之后,遇到中等题目甚至hard级别的题目都不慌了。

不过是熟能生巧罢了。

LintCode

与Leetcode类似的刷题网站。

LeetCode/LintCode的题目量差不多。LeetCode的test case比较完备,并且LeetCode有讨论区,看别人的代码还是比较有意义的。

LintCode的UI、tagging、filter更加灵活,更有优点,大家选择其中一个进行刷题即可。

数据库

互联网应用大多属于数据密集型应用,对于真实世界的数据密集型应用而言,除非你准备从基础组件的轮子造起,不然根本没那么多机会去摆弄花哨的数据结构和算法。

实际生产中,数据表就是数据结构,索引与查询就是算法。而应用代码往往扮演的是胶水的角色,处理IO与业务逻辑,其他大部分工作都是在数据系统之间搬运数据。在最宽泛的意义上,有状态的地方就有数据库。它无所不在,网站的背后、应用的内部,单机软件,区块链里,甚至在离数据库最远的Web浏览器中。

书籍推荐

  • 《MySQL必知必会》
  • 《高性能mysql》

《MySQL必知必会》主要是Mysql的基础语法,很好理解。后面有了基础再看《高性能mysql》,这本书主要讲解索引、SQL优化、高级特性等,很多Mysql相关面试题出自《高性能MySQL》这本书,值得一看。

视频推荐

伯克利的 CS168 课程:http://archive.org/details/UCBerkeley_Course_Computer_Science_186

国内中国人民大学王珊老师的《数据库系统概论》

MySQL基础知识:

  • 增删改查
  • 事务特性、隔离级别
  • 索引原理、优化
  • b+树
  • 最左匹配原则
  • 存储引擎
  • MVCC
  • 执行计划
  • 分库分表
  • 日志,bin log/undo log/redo log
  • ...

计算机网络

计算机网络这门课需要学习计算机网络的概念、原理和体系结构,知道计算机分层结构,物理层、数据链路层、介质访问子层、网络层、传输层和应用层的基本原理和协议,掌握以 TCP/IP 协议族为主的网络协议结构,并且了解网络新技术的最新发展。

书籍推荐

《计算机网络自顶向下方法》

这本书是经典的计算机网络教材,采用作者独创的自顶向下方法来讲授计算机网络的原理及其协议,自第1版出版以来已经被数百所大学和学院选作教材。书中从应用层讲起,然后展开,摆脱了从物理层开始的枯燥,直接接触应用实例,更能吸引读者的兴趣。而且,书上很多例子举的很好,生动形象。

视频推荐

视频推荐中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程。这门课是2020年秋科大自动化系本科课程录制版,可与中科大学生一起完成专业知识的学习。

另外还可以看看哈尔滨工业大学李全龙老师的计算机网络课程

计算机网络核心知识点

  • 网络分层结构
  • TCP/IP
  • 三次握手四次挥手
  • 滑动窗口、拥塞控制
  • HTTP/HTTPS
  • 网络安全问题(CSRF、XSS、SQL注入等)

linux

Linux 系统已经渗透到 IT 领域的各个角落,作为一名 IT 从业人员,不管你是专注于编程,还是专注于运维,都应该对 Linux 有所了解,甚至还要深入学习,掌握核心原理。

至少要熟悉常用的Linux命令。书籍推荐《鸟哥的linux私房菜》

设计模式

设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。对于具有丰富的开发经验的开发人员,学习设计模式有助于了解在软件开发过程中所面临的问题的最佳解决方案;对于那些经验不足的开发人员,学习设计模式有助于通过一种简单快捷的方式来学习软件设计。

为什么要学习设计模式:

  • 设计模式是从许多优秀的软件系统中总结出能够实现可维护性、复用的设计方案,使用这些方案可以避免做一些重复性的工作
  • 合理使用设计模式并对设计模式的使用情况进行文档化,将有助于别人更快地理解系统
  • 学习设计模式将有助于初学者更加深入地理解面向对象思想

设计模式分类

1.1 创建型模式

创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将模块中对象的创建和对象的使用分离。

创建型模式包括工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式

1.2 结构型模式

结构型模式(Structural Pattern)描述如何将类或者对 象结合在一起形成更大的结构,就像搭积木,可以通过 简单积木的组合形成复杂的、功能更为强大的结构。

结构型模式包括适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式

1.3 行为型模式

行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化。行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。

行为型模式包括策略模式、模板模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式等。

推荐秦疆老师基于Java讲解的23种设计模式视频教程。

工具

Git

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

视频推荐:http://www.bilibili.com/video/BV1BE411g7SV

Maven

Maven 是一个软件项目管理工具,可以对 Java 项目进行全自动构建,管理项目所需要的依赖。Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。

docker

Docker 是一个开源的应用容器引擎。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。

Docker的应用场景

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。

视频推荐广州云科的docker入门教程,非常详细。

项目

很多同学初学Java都会遇到一个问题,不知道去哪里找Java的项目练手。以前我也遇到这个问题,现在在这里分享下一些比较值得学习的项目。

首先给大家推荐几个Java项目的视频教程,都是B站上的视频,风评很好,讲解也非常详细,有兴趣的可以看一下~

尚硅谷尚筹网Java项目实战开发教程:

http://www.bilibili.com/video/BV1bE411T7oZ

尚硅谷Java微服务+分布式+全栈项目【尚医通】

http://www.bilibili.com/video/BV1V5411K7rT

Java Web项目实战-畅购商城:

http://www.bilibili.com/video/BV13J411k7aQ

下面也推荐几个Github上比较优质的开源项目。

newbee-mall

star:7.8k

http://github.com/newbee-ltd/newbee-mall

newbee-mall 项目是一套电商系统,包括 newbee-mall 商城系统及 newbee-mall-admin 商城后台管理系统,基于 Spring Boot 2.X 及相关技术栈开发。 前台商城系统包含首页门户、商品分类、新品上线、首页轮播、商品推荐、商品搜索、商品展示、购物车、订单结算、订单流程、个人订单管理、会员中心、帮助中心等模块。 后台管理系统包含数据面板、轮播图管理、商品管理、订单管理、会员管理、分类管理、设置等模块。

litemall

star:16.2k

http://github.com/linlinjava/litemall

又一个小商城。litemall = Spring Boot后端 + Vue管理员前端 + 微信小程序用户前端 + Vue用户移动端。

小商城功能:

  • 首页
  • 专题列表、专题详情
  • 分类列表、分类详情
  • 品牌列表、品牌详情
  • 新品首发、人气推荐
  • 优惠券列表、优惠券选择
  • ...

在这里也分享一份非常棒的Java学习笔记,Github标星137k+!这份笔记主要Java基础、容器、Java IO、并发和虚拟机等内容,排版精良,内容更是无可挑剔。

需要的小伙伴可自行下载:

http://mp.weixin.qq.com/s?__biz=Mzg2OTY1NzY0MQ==&mid=100000392&idx=1&sn=f6c8e84651ce48f6ef5b0d496f0f6adf&chksm=4e98ffce79ef76d8dcebdc4787ae8b37760ec193574da9036e46954ae8954ebd56c78792726f#rd

eladmin

star:16.2k

http://github.com/elunez/eladmin

一个基于 Spring Boot 2.1.0 、 Spring Boot Jpa、 JWT、Spring Security、Redis、Vue的前后端分离的后台管理系统。项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持动态路由。

项目提供了非常详细的文档,地址是http://el-admin.vip

项目体验地址:http://el-admin.xin

使用的技术栈也比较新,给作者点赞!

vhr

star:22.2k

http://github.com/lenve/vhr

微人事是一个前后端分离的人力资源管理系统,项目采用SpringBoot+Vue开发。项目加入常见的企业级应用所涉及到的技术点,例如 Redis、RabbitMQ 等。

Blog

star1.2k

http://github.com/zhisheng17/blog

My-Blog 使用的是 Docker + SpringBoot + Mybatis + thymeleaf 打造的一个个人博客模板。此项目在 Tale 博客系统基础上进行修改的。

community

star:1.8k

http://github.com/codedrinker/community

码问社区。开源论坛、问答系统,现有功能提问、回复、通知、最新、最热、消除零回复功能。技术栈 Spring、Spring Boot、MyBatis、MySQL/H2、Bootstrap。

vblog

star:6.5k

http://github.com/lenve/VBlog

V部落,Vue+SpringBoot实现的多用户博客管理平台!

后端主要采用了:

1.SpringBoot
2.SpringSecurity
3.MyBatis
4.部分接口遵循Restful风格
5.MySQL

前端主要采用了:

1.Vue
2.axios
3.ElementUI
4.vue-echarts
5.mavon-editor
6.vue-router

gpmall

star:4.3k

http://github.com/2227324689/gpmall

【咕泡学院实战项目】基于SpringBoot+Dubbo构建的电商平台。业务模块划分,尽量贴合互联网公司的架构体系。所以,除了业务本身的复杂度不是很高之外,整体的架构基本和实际架构相差无几。

后端的主要架构是基于springboot+dubbo+mybatis。

guns

star:3.4k

http://github.com/stylefeng/Guns

Guns是一个现代化的Java应用开发框架,基于主流技术Spring Boot2,Guns的核心理念是提高开发人员开发效率,降低企业信息化系统的开发成本,提高企业整体开发水平。

Guns基于插件化架构,在建设系统时,可以自由组合细粒度模块依赖,实现不同功能的组合和剔除,让项目体积灵活控制,从而更方便地搭建不同的业务系统。

使用Guns可以快速开发出各类信息化管理系统,例如OA办公系统、项目管理系统、商城系统、供应链系统、客户关系管理系统等。

music-website

star:2.3k

http://github.com/Yin-Hongwei/music-website

音乐网站。客户端和管理端使用 Vue 框架来实现,服务端使用 Spring Boot + MyBatis 来实现,数据库使用了 MySQL

前端技术栈:Vue3.0 + TypeScript + Vue-Router + Vuex + Axios + ElementPlus + Echarts。

以上就是Java自学的学习路线,内容不少,转行的小伙伴们加油!

另外,上面提到的书籍,我已经整理了电子版,放到github上了,总共200多本经典的计算机书籍,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等,可以star一下,下次找书直接在上面搜索,仓库持续更新中(花了一个多月的时间整理的,希望对大家有帮助,欢迎star

仓库持续更新中~

有需要的自取:

github仓库:http://github.com/Tyson0314/java-books

码字不易,小伙伴们觉得有帮助的话,点个赞呗 你的赞就是我创作的动力!

我是 @程序员大彬 ,定期会分享Java后台硬核知识,欢迎大家关注~

本文转载于网络 如有侵权请联系删除

相关文章

  • LeetCode 0069 - Sqrt(x)

    Sqrt(x)DesicriptionImplementintsqrt(intx).Computeandreturnthesquarerootofx.xisguaranteedtobeanon-negativeinteger.Example1:Input:4 Output:2复制Example2:Input:8 Output:2 Explanation:Thesquarerootof8is2.82842...,andsincewewanttoreturnaninteger,thedecimalpartwillbetruncated.复制SolutionclassSolution{ public: intmySqrt(intx){ longr=x; while(r*r>x) r=(r+x/r)/2; returnr; } };复制

  • IE11的CSS兼容性问题

     最近测试给了我一大堆BUG,一瞅发现全是IE11的。吐槽一下这个浏览器真的比较特立独行。很多默认的样式跟别的浏览器不同,而且最明显的一点应该是padding左右内边距往往比别的浏览器大了一倍。但是当需要修改的时候又头疼了。如果改变原有的padding值,那么在IE11生效了。别的浏览器又有问题了。于是在网上搜了一下有没有专门针对IE11的CSShack,就是只对IE11生效的CSS样式,一查还真有。就是在CSS样式文件中加一个@mediascreenand(-ms-high-contrast:active),(-ms-high-contrast:none){里面是你的样式}。  比如,我在chrome浏览器中给一个div设置样式div{ padding:012px; }复制  那么,在IE11中想要实现上面效果,需要在这个下面再添加一行样式  div{ padding:012px; } @mediascreenand(-ms-high-contrast:active),(-ms-high-contrast:none){ div{padding:06px;} }复制  这里需要注意一

  • 数据分析方法论|利用对比分析有效地说明数据结果和结论

    对比分析是数据分析中最常用的、最好用、最实用分析方法之一。没有对比就不能说明问题,这也是对比分析在数据分析领域经久不衰的原因之一。对比分析是将两个或两个以上具有可比性的数据进行比较,分析其中差异,以揭示事物发展规律。1没有对比就不能说明问题其实每个人在很小的时候就接触到了对比分析,还记得小时候自己的成绩总会被爸妈与邻居家小孩作比较,自己的成绩也会被爸妈拿了和往期成绩作比较,以分析自己到底是进步了还是退步了。这可能就是最贴近我们生活的对比分析,有对比就会有伤害,可为什么一定要对比呢?虽然某些时候对比真的很讨要,但是没有对比就不能说明结论!举个例子来说,2020财年淘宝天猫GMV达成6.589万亿,如果没有对比GMV只是一个数字而已,我们并不知道这个数字代表的业务状况到底如何,业务是增长了呢,还是衰退了呢?如果我们把前三财年的GMV数据也放上,就会发现2020财年的GMV是增长的,从这个对比数据来看业务是稳定上升的。这就是对比分析在数据分析中的作用,没有对比就没有数据结论!2对比分析到底和谁比确定对比的对象是数据分析的第一步。对比的对象可以是自己,也可以是行业。如果是和自己比的话,可以通过

  • Linux挂载持有系统镜像光驱

    上一篇博客小菌为大家介绍了如何正确的为系统添加硬盘。其中有一个步骤就是挂载。这篇博客小菌就为大家带来如何挂载持有系统镜像光驱的内容。文章目录方式1:添加本地ISO镜像文件方式2:添加外界手动上传的iso文件总结方式1:添加本地ISO镜像文件1.通过虚拟机wmware的如下设置,完成ISO镜像的配置。 2.创建一个本地的挂载目录mkdir-p/mnt/cdrom3. 在命令行输入lsblk-f查看当前磁盘的情况。我们可以发现本地iso文件还未挂载。 挂载iso镜像文件,mount/dev/sr0/mnt/cdrom 方式2:添加外界手动上传的iso文件1.将iso镜像文件上传到linux文件系统可以在windows或者ios桌面操作系统下先下载一个WinSCP或其他SSH传输工具2.创建需要将iso挂载的目录。mkdir/mnt/cdrom13.实现挂载mount-oloop/CentOS-6.9-x86_64-bin-DVD1.iso/mnt/cdrom/。挂载后输入lsblk-f查看磁盘的详细信息。 4.同样的,这样的挂载关机重启一下就失效了。接下来我们需要实现开机自动挂载iso

  • 微信小程序|Tab标签页

    欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章问题描述在使用小程序的时候会看到大多数都是在小程序的底部设置导航栏,然而会发现有一些小程序的顶部也会有导航栏,那么如何来设置小程序的Tab标签页呢?解决方案Tab标签页是在小程序的顶部的一个导航栏,当点击它时会弹出属于这个标签的相应内容。需要vant组件库,将dist提前下载好然后保存到项目中。在小程序中调用组件库,并在正确引用就可以实现了。1.在json中调用van-tab组件。{ "navigationBarTitleText":"查看启动日志", "usingComponents":{ "van-tab":"/dist/tab/index", "van-tabs":"/dist/tabs/index" } }复制表1json代码2.在js中对标签页的切换进行设置。title:设置切换标签时弹出的提示

  • ####### Scripts Summary #######

    ScriptsSummary Version:1.0.1 issueDate:2017-11-11 modifiedDate:2017-11-280.configuration--查询隐藏参数 setlinesize333 colnamefora35 coldescriptionfora66 colvaluefora30 SELECTi.ksppinmname, i.ksppdescdescription, CV.ksppstvlVALUE FROMsys.x$ksppii,sys.x$ksppcvCV WHEREi.inst_id=USERENV('Instance') ANDCV.inst_id=USERENV('Instance') ANDi.indx=CV.indx ANDi.ksppinmLIKE'%&param%' ORDERBYREPLACE(i.ksppinm,'_',''); --SGA各组件实际大小 setlinesize100 colnamefora25

  • as3绘制抛物线(二)

    上一篇文章,只是简单的求出了抛物线的坐标,而且也不够灵活。如果只是单纯的画线,使用as3自带的curveTo(二次贝塞尔曲线)就已经足够了。二次贝塞尔曲线演示动画tin[0,1] (图片来源于wiki贝塞尔曲线>>)下面的例子,根据鼠标的位置,绘制经过指定起始点、结束点和鼠标位置的曲线。Code:1:package 2:{ 3:importflash.display.Sprite; 4:importflash.events.Event; 5: 6:/** 7:*... 8:*@authorMeteoric 9:*/ 10:publicclassDrawCurveDemoextendsSprite 11:{ 12:privatevarx0:Number=100; 13:privatevary0:Number=400; 14:privatevarx1:Number; 15:privatevary1:Number; 16:privatevarx2:Number=500; 17:privatevary2:Number=400; 18: 19:pu

  • Vue源码阅读 - 依赖收集原理

    vue已是目前国内前端web端三分天下之一,同时也作为本人主要技术栈之一,在日常使用中知其然也好奇着所以然,另外最近的社区涌现了一大票vue源码阅读类的文章,在下借这个机会从大家的文章和讨论中汲取了一些营养,同时对一些阅读源码时的想法进行总结,出产一些文章,作为自己思考的总结,本人水平有限,欢迎留言讨论~目标Vue版本:2.5.17-beta.0 vue源码注释:https://github.com/SHERlocked... 声明:文章中源码的语法都使用Flow,并且源码根据需要都有删节(为了不被迷糊@_@),如果要看完整版的请进入上面的github地址,本文是系列文章,文章地址见底部~1.响应式系统通过官网的介绍我们知道Vue.js是一个MVVM框架,它并不关心视图变化,而通过数据驱动视图更新,这让我们的状态管理非常简单,而这是怎么实现的呢。盗用官网一张图每个组件实例都有相应的Watcher实例对象,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的setter被调用时,会通知watcher重新计算,从而致使它关联的组件得以更新。这里有三个重要的概念Observe、Dep、Wa

  • ssh访问控制,多次失败登录即封掉IP,防止暴力破解

    近期一直发现站内的流量和IP不太正常,读取/var/log/secure 很多失败的登录信息!必须要整个方法整死他们,虽然我已经把sshport修改为了XXX(能告诉你吗?)!但是攻击还是不断,随即请教了铭哥大神。由于担心没有测试机,直接线上操作把自己也加入blacklist就不好了。找了很多资料,最终也成功了。分享给大家!一、系统:Centos6.964位二、方法:读取/var/log/secure,查找关键字Failed,(#cat/var/log/secure|grepFailed)例如(注:文中的IP地址特意做了删减):Sep1709:08:09localhostsshd[29087]:Failedpasswordforrootfrom 13.7.3.6port44367ssh2 Sep1709:08:20 localhostsshd[29087]:Failedpasswordforrootfrom 13.7.3.6port44367ssh2 Sep1709:10:02 localhostsshd[29223]:Failedpasswordforrootfrom 13.7.3.

  • 干货 | 大规模机器学习框架的四重境界

    1.背景自从google发表著名的GFS、MapReduce、BigTable三篇paper以后,互联网正式迎来了大数据时代。大数据的显著特点是大,哪里都大的大。本篇主要针对volume大的数据时,使用机器学习来进行数据处理过程中遇到的架构方面的问题做一个系统的梳理。有了GFS我们有能力积累海量的数据样本,比如在线广告的曝光和点击数据,天然具有正负样本的特性,累积一两个月往往就能轻松获得百亿、千亿级的训练样本。这样海量的样本如何存储?用什么样的模型可以学习海量样本中有用的pattern?这些问题不止是工程问题,也值得每个做算法的同学去深入思考。1.1简单模型or复杂模型在深度学习概念提出之前,算法工程师手头能用的工具其实并不多,就LR、SVM、感知机等寥寥可数、相对固定的若干个模型和算法;那时候要解决一个实际的问题,算法工程师更多的工作主要是在特征工程方面。而特征工程本身并没有很系统化的指导理论(至少目前没有看到系统介绍特征工程的书籍),所以很多时候特征的构造技法显得光怪陆离,是否有用也取决于问题本身、数据样本、模型以及运气。在特征工程作为算法工程师主要工作内容的时候,构造新特征的尝试

  • Hadoop体系_集团架构

    目录2.1Hadoop简介2.1.1Hadoop由来2.1.2Hadoop发展历程2.1.3Hadoop生态系统2.2Hadoop的体系架构2.2.1分布式文件系统HDFS2.2.2分布式计算框架MapReduce2.2.3分布式资源调度系统YARN2.2.4三大发行版本2.1Hadoop简介2.1.1Hadoop由来Hadoop起源于Google的三大论文:GFS:Google的分布式文件系统GoogleFileSystemMapReduce:Google的MapReduce开源分布式并行计算框架BigTable:一个大型的分布式数据库演变关系GFS—->HDFSGoogleMapReduce—->HadoopMapReduceBigTable—->HBase2.1.2Hadoop发展历程2.1.3Hadoop生态系统图中涉及的技术名词解释如下:1、Sqoop:Sqoop是一款开源的工具,主要用于在Hadoop、Hive与传统的数据库(MySql)间进行数据的传递,可以将一个关系型数据库(例如:MySQL,Oracle等)中的数据导进到Hadoop的HDFS中,也可

  • 【转】斐波那契序列 集锦

    【转】http://www.cnblogs.com/Knuth/archive/2009/09/04/1559951.html#2576160   [定理1]标准Fibonacci序列(即第0项为0,第1项为1的序列)当N大于1时,一定有f(N)和f(N-1)互质 其实,结合“互质”的定义,和一个很经典的算法就可以轻松证明 对,就是辗转相除法 互质的定义就是最大公约数为1 数学归纳法是很有用的证明方法,我们接下来这个定理用数学归纳法就很好证明: [定理2]若i为奇数,f(i)*f(i)=f(i-1)*f(i+1)+1,否则f(i)*f(i)=f(i-1)*f(i+1)-1 对,这个定理用数学归纳法可以轻松证明,大家有兴趣可以自己尝试 [定理3]f(n)=f(i)*f(n-i-1)+f(i+1)*f(n-i) f(n)=f(1)*f(n-2)+f(2)*f(n-1)    =f(2)*f(n-3)+f(3)*f(n-2)    =f(3)*f(n-4)+f(

  • Ubuntu GNOME 13.04将关闭窗口的按钮放在最右边

    转载请注明:转自http://blog.csdn.net/u010811449/article/details/9426187 先上图: 首先打开dconf系统配置编译器。 找到   rog->gnome->shell->overrides->button-layout复制     将值改成    close,minimize,maximize:复制 注意,原来的冒号在最左边,要将其放在最右边才行。

  • GIT工作流

    前言:关于git的使用,之前就已经写过一篇博客了: http://www.cnblogs.com/0zcl/p/6874588.html.看完这篇博客,你就基本可以使用git了.这种使用,仅限了一两人的开发.如果团队有多人,而且位置较分散.那这开发就更需要规范了.因此,这篇博客来说一下GIT工作流.   本来以为我用git命令行可以解决GIT工作流上的问题,但其实只用命令行还是蛮困难的。下面先看看GIT的规范,这部分比较无聊,下面会图文并茂的,好吧.如果你瞄了一眼,觉得这SB博客,写得太low了,然后就关掉这篇博客,我感觉还是错过一些东东. 一、提交规则 [feature]新增功能、更新的提交,例如“[feature]addanewdatalayerforreadingjpegimages” [bugfix]bug修正的提交,有bugid的补充bugid,例如“[bugfix]nowdatalayerreadssingle-channelimagescorrectly” [optimize]优化的提交:性能等方面,feature分之下的单次优化要指明,优化分支下的用

  • 面向对象设计与构造2019 第一单元总结博客作业

    面向对象设计与构造2019第一单元总结博客作业 一、度量分析程序结构 1.数据度量分析 在这里,以第三次作业为例。前两次作业的架构较为简单,分析价值较低。 TypeName NOF NOPF NOM NOPM LOC WMC NC DIT LCOM FANIN FANOUT BasicFactor 0 0 4 4 41 11 0 1 -1 0 1 Expression 1 0 11 11 124 31 0 0 0 4 3 Factor 3 0 9 9 108 27 1 0 0 2 2 Main 6 0 5 2 184 32 0 0 0 1 2 Term 1 0 13 13 206 49 0 0 0 4 3 可以看到,我的程序中,类很少,也只用了一个简单的继承。相对的,每个类的代码量较大,最大的类Term,代码长度甚至到达了206行。每个类中的方法数也相对较少,导致每个方法的代码长度也较长。说明程序在处理复杂问题的时候,依然依赖于面向过程的设计思路。 在内聚和耦合程度方面,程序没有太大问题,但是,如此少的类能够达到这种内聚耦合指标,是因为我采用了循环依

  • 火狐浏览器接口测试工具Poster

     

  • 用Pomelo 搭建一个简易的推送平台

    前言 实际上,个人感觉,pomelo目前提供的两个默认sioconnector和hybridconnector使用的协议并不适合用于做手机推送平台,在pomelo的一份公开ppt里面,有提到过,网易的消息推送平台是基于pomelo开发的(一个frontend支持30w长连接,消耗了3g内存,如果我没记错数据应该是这样),不过,这里用的前端(frontend)实现的是基于MQTT协议,我估计这个基于MQTT协议实现的frontend,基本不可能开源出来.这里只是说,默认提供的frontend不适合用于构建大型的推送平台(c10m规模的),一般而言(c10k级别的),个人感觉还是够用的. 为了展示,更多pomelo的相关特性,可能这里的逻辑业务,与实际有所不同.敬请注意 推送平台的架构图 整个应用的架构图: 后端 pomelo@0.4.3 前端 android webbrowser 开发约定 客户端请求对象   1 2 3 4 5复制 { "role":"client/server", "apikey":"String", "clientId":"St

  • 软件工程——个人总结

    一、收获与提升 1.学习和使用的新软件墨刀,MySQL 2.学习和使用的新工具 Andriod编译工具,photoshop 3.学习和掌握的新语言、新平台 语言:JAVA在Andriod的应用,MySQL 4.统计一下,你在这软件工程实践中,完成了多少行的代码 自己完成的代码在400行左右 5.学习和掌握的新方法APP的测试,Andriod软件的开发,界面设计及其美化, 二、总结与展望 1.记录自己在软件工程课程上的经验总结一直以来编程都是自己独立完成的,不懂的时候只有百度或者向别人询问,但是向别人询问的时候,别人的思路有跟你不一样,做出来的程序可能就不是你想要的结果。但是软件工程这门课却要求我们要团队编程,可想而知其中肯定有很多问题,很大一部分都是意见不符,虽然说我们五个人有五种思路,但是将五种思路融合在一起就是很大的问题。举一个简单的例子:在我们APP的命名上就有了很大的问题,有人说“快乐购”,有人说“废变宝”,最后在激烈的争辩下,最后取名“青街购”。团队合作中我们每个人都应该勇于阐述自己的观点,不要因为怕伤感情就人云亦云,分歧是在所难免的。你只有提出来才能启发别人,才能有更好的作

  • DataTable排序

    DataRow[]rows=dt.Select("","nameasc");   DataTablet=dt.Clone();   t.Clear();   foreach (DataRowrowin rows)       t.ImportRow(row);   DataTable1=t;   方法2: DataViewdv=dt.DefaultView; dv.Sort="nameAsc"; DataTabledt2=dv.ToTable();   方法3:   /拿到数据源 DataViewdv=dt.Copy().DefaultView; //排序 dv.Sort="nameasc,agedesc";   DataTabletempdt=dv.Table;  

  • C++-继承中的对象模型

    父类中所有的非静态成员属性都会被子类继承下去,父类中的私有成员属性,是被编译器隐藏了,因此访问不到,但是确实被继承了下去。 #include<iostream> usingnamespacestd; classFather { public: intA; private: intB; }; classSon:publicFather { public: intC; }; intmain() { cout<<sizeof(Son)<<endl; } 复制 输出结果: 12 复制   

  • EXCEL工具

    1单元格内换行:Alt+Enter

相关推荐

推荐阅读