一、个人背景
作为一个java后端开发工程师,我从上学以来接触java已经有6个年头,我在知乎上经常看到许多同学在问如何学习java,编程如何入门之类的问题,我知道刚开始学习java的你们肯定很着急,我当时也是这样,感觉对编程一无所知,焦虑又害怕。其实不必过于担心,只要找到一个合适的学习方法+勤奋的练习+合理的规划。然后静下心来仔细思考,你就能攻克java这门编程语言。
首先,开始学习java之前,我们要知道,我们要学习哪些东西。现在的编程技术发展的太快了,我们不可能把所有的知识都学会,那样也不现实。所以知道学习java要学习什么是相当关键的,可以避免我们走很多弯路。
下面我就来说说java的自学内容,下面也有一些资料供大家参考。
二、java自学内容
1、基础知识
Java学习的重点和难点恰恰集中在Java的基础语法阶段,这个阶段要理解Java的各种“抽象概念”,逐渐建立Java的编程思想。Java语言是抽象程度比较高的语言,学习Java就是学习各种“抽象”,比如类、接口、抽象类、内部类、enum等概念。要想掌握这部分知识,一个重点就在于大量的练习。
学习基础知识的时候,我知道你们有时候会很迷茫,书看了一遍又一遍。但是感觉自己啥也没学到。如果你是处于这种状态,那你不妨去看看一些网上的视频。
学习的网站有:
- 菜鸟教程:https://www.runoob.com/java/java-tutorial.html (菜鸟学习的经典网站)
- 牛客网:https://www.nowcoder.com/ (一个很好的刷题网站)
- 虫洞栈(比较全面,从java基础到各个阶段的有涉及)
- 慕课网 https://www.imooc.com/ (一个垂直的互联网IT技能学习网站)
2、学习计算机的一些基础知识
(注:上面的书籍推荐,有些是和链接虽然分开的但也是匹配相关的,有的是文章、有的是问答、有的是大佬博客;总之能让你更好的加深理解。)
数据结构,你需要会使用一些简单的容易比如list或者set等,链表、hashMap等的使用,还要了解二叉树,树的遍历及图。计算机系统知识,内存,函数的调用,计算机的组成。操作系统,进程和线程、锁、并发问题,内存中的分段,页面置换等算法。学习数据库基础知识,并学习基本的增删查改。
这里推荐两本比较不错的书籍《SQL必知必会》,《数据库系统概念》,做开发的一定离开不了数据库,所以数据库知识要学习扎实。
还可以听老杜的MySQL基础入门到精通视频教程,这个视频也是我刚开始学习mysql比较喜欢喜欢看的:
该网页的视频不仅仅有数据库知识点的教程,最主要是还有许多案例,就差手把手教你写sql了。除此之外该视频还有配套的讲义和练习题,让你摆脱那种只看知识点的恐惧,让你动起手来学习sql的一些基本语法。
可以去下列网站学习Mysql:
3、一些其它的有用知识
(1) java8编程
其中包括lambda表达式、Stream api、并发增强、Nashorn。
下图是常用的api:
你可以看看java 8 新特性的博客如:
(2)jvm的学习
JVM 是 Java 后端面试(大厂)中非常重要的一环。不论是应届还是社招,面试国内的一些大厂,你都会被问到很多 JVM 相关的问题。比如程序计数器、虚拟机栈、本地方法栈、堆、方法区,类加载机制,双亲委派模型
(3)并发编程思想
这里可以推荐大家看看《java并发编程之美》、《深入浅出java多线程》,《Java并发实现原理:JDK源码剖析》这几本书,比较不错,我都看过,确实挺好。
- 你需要了解:并发的多面性
java采取了更加传统的方式,在顺序语言的基础上提供对线程的支持.与多任务操作系统中分叉外部进程不同,线程机制是在由执行程序表示的单一进程中创建任务.这种方式产生的一个好处是操作系统的透明性,这对java而言是一个重要的设计目标。
- 基本的线程机制
线程的一大好处是可以是你从这个层次抽身出来,即代码不必知道它是运行在具有一个还是多个CPU的机器上.所以,使用线程机制是一种建立透明的 可扩展的程序的方法.多任务和多线程往往是使用多处理器系统的最合理方式。
- 共享受限资源
了解线程的资源、synchronized关键字、共享资源和锁。
- 线程之间的协作
任务协作时,关键问题是这些任务之间的握手。为了实现这种握手,使用了相同的基础特性:互斥。
你可以通过以下网站学习并发编程:
你也可以看视频学习如;
(4)Java设计模式
设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
学习这部分内容的时候,比如说分布式架构,你可以看以下视频:
该视频教你一步步使用dubbo,学习这一部分的知识你可能会出现很多错误,这时候不要恐慌,也不要着急。慢慢来一个一个解决,跟着视频慢慢的学,千万不要涂快,也不要有拖延症。跟着视频一步步了解分布式的思想和使用。
或者你可以看以下视频:Shiro教程
关于设计模式你也参考慕课网学习:(这个要花钱的)
或者一些编程网站和博客内去学习大佬的经验总结也不错:
4、学习目前主流的框架
如Java 中的spring 框架。(如感觉spring框架太大可以学习spring boot)
spring boot:
Spring Boot基本上是Spring框架的扩展,它消除了设置Spring应用程序所需的XML配置,为更快,更高效的开发生态系统铺平了道路。 Spring Boot中的一些特征:
- 创建独立的Spring应用。
- 嵌入式Tomcat、Jetty、 Undertow容器(无需部署war文件)。
- 提供的starters 简化构建配置
- 尽可能自动配置spring应用。
- 提供生产指标,例如指标、健壮检查和外部化配置
- 完全没有代码生成和XML配置要求
强调一点:Spring Boot 运用“约定优于配置”的思想,对使用 Spring Boot创建的工程,提供约定、缺省、默认的配置,去简化传统手动、一步一步配置的开发方式。