java底层学习|记录暑假java后端深度底层学习计划

基础知识分为两大部分:
目录
1.后端通用基础知识:
2.java方向技术栈相关知识:(并不是只看这些)
3.java开发实习生全栈技术点(都应该去了解一遍)
1.javaSE:
2.javaEE:
3.数据库:
4.前端:
5.服务器:
6.开发工具:
7.虚拟化/容器化:
8.分布式/微服务:
9.中间件:
10.主流框架:
11.web后端:
12.其他杂七杂八的技术:
13.最全开发工具
1.后端通用基础知识: (1)计算机网络(后端面试考查的重中之重,IP/TCP/UDP/HTTP相关协议等)
推荐书籍:《计算机网络,谢希仁第五版》
第4章到第7章网络安全必学,网络层与应用层,http协议是重中之重)
推荐深入学习书籍:《自顶向下计算机网络》,《图解HTTP》(把HTTP通过图讲得透彻))

(2)数据库
强烈推荐:《mysql技术内幕++InnoDB存储引擎》!!!《Redis设计与实现(第二版)》
第5章索引与算法,第6章锁,第7章事务是必须要反复学习阅读的重点章节)

(3)操作系统基础理论
因为java后台的会用java底层的JVM解决垃圾回收的问题,所以对基础掌握,JVM考察居多
重点是第三章同步、通信与死锁和第四章存储管理
《操作系统教程》第五版高等教育出版社进阶《UNIX环境高级编程》 7-13章重点学习

(4) 数据结构与算法(最重要的知识)
先刷PTA乙级,同时看视频,然后甲级,然后剑指offer,力扣

(5)设计模式《大话设计模式》

(6) Linux基础命令机器使用等熟悉它是后端开发人员的基本技能
推荐《鸟哥的Linux私房菜》,
可以说是Linux入门基础操作的圣经了。
其中关于文件操作的第5章第6章,关于vim编辑器的第9章,关于进程管理的第16章都要重点学习掌握。

2.java方向技术栈相关知识:(并不是只看这些)
(1) java语言基础及常用集合
《java核心技术卷一》基础入门看这个足够了,重点:3-9章(4.5.6.9格外重点,尤其是9章)
进阶:《java核心技术卷二》

(2) java并发编程 :进阶必学,面试重头戏 《实战java高并发程序设计》(重点看基础前5章)进阶:《Java并发编程的艺术》(神书,全是重点,读好多遍都能收获)
【java底层学习|记录暑假java后端深度底层学习计划】
(3)java虚拟机(JVM)
《深入理解java虚拟机》2367章重点掌握,收获非常大

(4)java开发常用框架spring相关等。
《SPRING技术内幕:深入解析SPRING架构与设计原理(第2版)》
《spring源码深度解析》
《深入分析Java Web技术内幕》
3.java开发实习生全栈技术点(都应该去了解一遍) 1.javaSE:
1.容器:List接口,Set接口,Map接口,Iterator接口,Collections工具类,Arrays工具类,Comparable接口,泛型

2.泛型:(正在学习总结中)

3***.i/o:引入IO的原因,基本概念(数据源,流的概念),io流体系,io流对象(例如:InputStream(源,读,字节),OutputStream(目的,写,字节),Reader(源,读,文本),Write(目的,写,文本)r等...),java对象的序列化和反序列化,io其他常用类:File类,RandomAccessFile
4***.集合:(正在学习总结中)

5.异常:概练,分类(Error,Exception),处理方法:捕获(try,catch,finally),声明异常:throws抛出异常:throw

6.反射:(正在学习总结中)

7.多线程:基本概念(程序,进程,线程,他们之间的关系),线程生命周期(新生,就绪,运行,死亡,阻塞),线程基本信息和优先级,线程同步和死锁及其解决方案,生产者/消费者问题

8.网络编程:基本概念(计算机网络,网络通信协议、接口,网络分层,通信协议的分层规定,数据的封装拆封,IP,端口,URL),TCP和UDP(区别,内容),JAVA网络编程(InetAddress,InetSocketAddress,URL类,基于TCP协议的Socket编程和通信)

9.JVM:(正在学习总结中)

10.NIO编程讲解
(还有基础,计算机基础,***基础语法,***面向对象(封继多,抽象类,接口,字符串比较使用),注解,java8,常用类(基本数据类型包装类,Math类,File类,枚举类,字符串类String(Buffer,Builder),时间处理类:(Date,DateFormat,SimpleDateFormat,CAalendar))和工具类,正则,XML,设计模式,数据结构/算法:堆,栈,二叉树,图,平衡搜索树,
高频算法:******DFS难(递归),排序:快速排序和归并排序(必须掌握),***双指针,堆HEAP(高频),哈希表(高频),****动态规划(难,大厂喜欢考),拓扑排序算法(中,基本都考),链表(中小GS考的多),二叉树(中小考的多),字符串处理,二分法,分治法,BFS,二叉树遍历算法,跳跃表(难,知道原理),字典树,并查集,红黑树(难,原理)
11.计算机网络:物理层,链路层,网络层,传输层,应用层)
2.javaEE:
1.spring全面剖析(目前Java最流行也是大腿的容器框架,Apache官方出品的大杂烩框架):SpringAOP,事务管理,核心源码分析
2. SpringMVC(JavaWeb框架,目前主流框架):开发环境和入门配置,进阶开发,与前端交互,源码分析
3.MyBatis ORM(持久层数据库框架):开发环境和配置,核心配置和高级查询,关系映射和缓存配置,MyBatis plus
4.Quartz任务调度:任务调度应用场景,架构体系和核心类讲解
5.Spring Boot
过滤器,监听器,文件上传下载,模板框架(JSP/JSTL,FreeMaker,Thymeleaf),邮件收发(HTTP协议,Cookie/Session,Servlet,JDBC,MVC分层,)
3.数据库:
1.Oracle:使用JDBC完成增删改等等
2.连接池(C3P0,Druid,HikariCP),
3.分库分表(MyCat,Sharding JDBC,Sharding Sphere)
4.数据库设计和JDBC(第123范式,BC范式,数据库连接池,Dao层开发等等)
5.Mysql调优:总体思路,通用查询日志,错误日志,二进制日志,慢查询日志,执行计划,索引及优化策略
6.druid:(这家伙有一个叫作数据源监控的功能,非常好用!)
(Mysql(索引和锁):排序,***聚合查询,用户权限,约束管理,DML操作,内外自连接,子查询,常用函数,分页查询,存储引擎,MySQL框架,索引及优化策略)(更多内容在图中)
JDBC: (java操作MySQL数据库的一套API而已)

4.前端:
LayUI,React,Angular,Echarts(柱状图,折线图等等),zTree(树,普通JSON和标准JSON的区别)
XML(文档结构,基本语法,DOM4j节点查询,文档操作,XPATH语法和快速查询)
JSON(语法,用法,java和json的转换,js和json转换)
HTML5(网页的骨架)(基础标签,img标签,a标签,表格标签,表单标签,框架和字符实体)
CSS3(网页的衣服)(长度单位,颜色单位和路径,常见选择器,背景属性,文本属性,列表属性,元素分类,浮动和定位属性,盒子模式),
JavaScript(网页的灵魂)(js基础语法,数据类型和转换,运算符和流程控制语句,数组和字符串,函数和函数化编程思想,对象和面向对象,内置类:(Math和Date),js定时器,正则,DOM树,DOM对象及其获取元素方式,DOM事件,事件冒泡,取消事件默认行为,DOM内容、属性、样式、元素节点、表单等等操作,window对象,location对象,history对象)
JQuery(语法,核心函数,对象,选择器,文档处理,事件,动画效果)
Ajax(XMLHttpRequest使用,同步请求,异步请求,JQuery基础ajax方法,三级联动)
Bootstrap(全局css样式,组件库,插件),Node.js,Vue)
5.服务器:
Jetty,Undertow
(Tomcat,Nginx)
6.开发工具:
必学:LINUX(常用命令)因为公司很多服务器都是用的Linux。
1.服务器基本都是linux吧,安全开源轻量,当服务器最合适不过了!(记不住没关系,忘了百度查,知识大爆炸的时代…记不住会查会用就行)
1.1.最基本的防火墙操作要知道吧
1.2.把一个服务加到系统服务并且设置为开机自启要知道吧
1.3.SSH要会用吧(阿里云还有个安全组的东西也要会用,不要开了防火墙没更新安全组…这就很尴尬了)
1.4.基本的linux操作要知道吧(java主流的技术栈在Linux中怎样配置一定是要会的,)
1.5.最后是我对Linux这块的看法(在工作中经常用到的也就那么些,可以忘记,但是不能不会查,解决问题的能力和搜索能力是每个优秀的程序员必备的技能)
(集成开发环境:Eclipse,intellij IDEA,VS Code。代码管理:Git(创建版本库,版本控制,远程仓库,分支管理)、SVN(服务器搭建,客户端使用)项目管理:Maven、Gradle)
7.虚拟化/容器化:
虚拟化:Vmware,virtualbox
容器化:Docker,Kubernetes
8.分布式/微服务:
注册中心:Eureka(服务注册中心和zookepper那个家伙一样,充当服务与服务之间的桥梁)、Nacos、Consul、ZooKeeper(常用命令)(注册中心,注册生产者和消费者,这家伙长得像个管道工人)
服务调用:Ribbon、Feign(远程调用&负载均衡)、Dubbo
熔断/降级/限流:Hystrix,Sentinel(服务容错)
网关:Zuul,Gateway
配置中心:Config:Consul,Apollo,Nacos
认证鉴权:Shiro,Spring Security,OAuth2,SSO
链路追踪:Sleuth(服务追踪),Zipkin(可视化追踪),Skywalking
任务调度:Quartz,Elastic-Job,XXL-JOB
分布式事务:Seata(分布式事务),TX-LCN,
日志分析:Elasticsearch,Logstash,Kibana
文件存储:HDFS,FastDFS,MinIO
监控警告:Actuator,Admin,*Prometheus,Grafana*
Mysql 数据库分库分表:Shardingsphere
9.中间件:
缓存:Redis,MemCache
搜索:Solr,Elasticsearch
队列:RabbitMQ(消息中间件),RockerMQ,ActiveMQ,Kafka
RPC:Dubbon,gRPC,Netty
NoSQL:Redis,MongoDB
1.Swagger(丝袜哥,这位哥是接口文档,提高前后端沟通的效率) 官方网址
2.Nginx(web服务器,毛子用c语言写的,一般用来给那只tom猫做负载均衡/反向代理用,如有分布式文件存储需求,可和FastDFS这位兄弟联手) 官方网址中文文档
3.Redis(缓存数据库,有很多功能,一般就作为缓存来用,最常用的就是SSO单点登录,还有前后端开发中的数据缓存) 官方网址
3.1.单点登录,这里还有spring官方的一个家伙叫作SpringSession,也可实现(后面写一篇关于sso的文章吧…也是自己在项目中经常用到的)
4.RabbitMQ(消息中间件,有6种工作模型,一个系统发送消息给这位兄弟,这位兄弟接收到消息发送给其他系统,比如…用户注册功能,注册成功后,发送手机短信同时发送邮件提醒) 官方网址
还有一位哥叫作Kafka也是消息队列,本人没用过
5.还有个家伙叫作FastDFS(分布式文件系统,学过没用过…) 官方网址
6.Docker(大鲸鱼背上装集装箱,环境独立,互不影响,容器化技术 解决运维与开发环境不同) 官方网址

10.主流框架:
Spring:IoC,AOP
Spring全家桶:Spring +(MVC,Boot(对spring的相关功能进行了封装,完美的避开复杂的配置,开箱即用,能更专注于业务开发) ,Data,AMQP,Session,Security,Integration,Clound(治理boot开发的微服务,提供了一套微服务的生态链/解决方案))
ORM框架:JPA,Hibernate,MyBatis,
Shiro(蟹肉,安全框架,apache旗下基于用户-角色-权限模型的安全框架)
11.web后端:
1.web服务器基础Tomcat:(HTTP协议,HttpWatch,Tomcat服务器搭建,目录解析,端口配置,启动与停止与idea整合)
2***.Servlet:体系,生命周期,请求,响应,重定向,转发,项目路径问题,中文乱码解决,ServletConfig,ServletContext
3.JSP:语法,原理,脚本片段和表达式,声明和指令,九大内置对象,域对象使用
4.JSTL:核心标签库,函数标签库,fmt标签库,自定义标签库使用和原理
5.EL:表达式简介,使用,原理。11大隐含对象,逻辑运算,函数库深入
6.Cookie:机制,创建,使用
7.Session:原理,失效。活化,钝化
8***.Fiter:原理,声明周期,链,登录验证
9.Listener:原理,八大监听器使用,监听在线用户
10.文件上传下载
12.其他杂七杂八的技术:

1.数据库层面的
1.jdbc(这没啥说的.Java提供的操作数据库的官方api) 学习网址
2.mybatis-plus(支持逆向代码生成,偷懒工具.) 官方网址
3.springdata-jpa(spring官方的一个框架,这家伙有一个利用其他语法代替sql的好处,新技术都是懒人搞出来的…) 官方网址
2.身份校验层面的
1.jwt(java_web_token) 这位哥可比cookie/session好用多了!也更安全,也是单点登陆的一种方案(最常用的是把jwt存在redis中) 官方网址
2.oauth2(第三方登录开源组件…),其实github上还有比这个更好用的开源项目,开箱即用
13.最全开发工具
1.开发工具
1.IntelliJ IDEA(推荐使用,这家伙是真的好用!) 官方网址
2.Eclipse(前几年还可,现在还有人再用) 官方网址
3.STS(Spring官方自研的开发工具,定制版的eclipse) 官方网址
可能还有其他的开发工具…但是不实用也不主流,这里不推荐
2.压测工具
1.meter(接口压力测试工具,也可以当作接口测试工具来用) 官方网址
3.JVM调优工具
1.jprofile(jvm分析调优工具) 官方网址
4.查看代码工具
1.SublimeText(这个软件针不戳 推荐) 官方网址
2.EditPlus(也还好,反之我装了没用过…) 官方网址
5.远程连接工具
1.XShell(远程连接工具 稳定 用户量大) 官方网址
2.XFTP(远程文件传输工具) 官方网址
6.数据库连接工具
1.Navicat Premium 12(界面清爽,支持各种数据库连接,我用的挺爽,缺点:收费) 官方网址
2.sqlyog(界面一般,功能和上面差不多 优点:免费) 官方网址
3.redis desktop manager(redis官方连接工具,大方美观,稳定性好,用这也挺爽 缺点:收费) 官方网址
4.fastoredis(开源的redis管理工具) 官方网址
7.数据库设计工具:
1.workbench(orcale官方出品的mysql数据库设计工具) 官方网址
2.PowerDesigner(功能齐全,也还好 缺点:收费) 官方网址
3.PDMan(国产开源,功能齐全 优点:开源免费) 官方网址
8.接口测试工具
1.Postman(功能齐全,不收费 缺点:太重了 现在有很多插件可以代替) 官方网址
2.HTTP Client(idea中就自带的一个插件 挺好用)
9.JSON可视化工具
1.JsonView(一般作为插件使用,客户端只有windows版本) 官方网址
10.HOST工具
1.SwitchHosts(支持修改本地Host以及远程的) 官方网址
11.虚拟机工具
1.vmware workstation pro(这估计都没啥说的,主流虚拟机软件就是这家伙)

    推荐阅读