- 学习Java的9张思维导图
- 各类技术栈总览
java技术栈
- 针对技术栈学习
- 1. java基础
- 1.1 算法
- 1.2 基本
- 1.3 设计模式
- 1.3.1 创建型模式
- 1.3.2 结构型模式
- 1.3.3 行为型模式
- 1.4 正则表达式
- 1.5 java内存模型以及垃圾回收算法
- 1.5.1 虚拟机加载机制
- 1.5.2 虚拟机内存区域
- 1.5.3 垃圾回收
- 2. web方面
- 2.1 SpringMVC的架构设计
- 2.1.1 servlet开发存在的问题
- 2.1.2 SpringMVC为解决上述问题开发的几大组件及接口
- 2.1.3 DispatcherServlet、容器、组件三者之间的关系
- 2.1.4 叙述SpringMVC对请求的整体处理流程
- 2.1.5 SpringBoot
- 2.2 SpringAOP源码
- 2.2.1. AOP的实现分类
- 2.3 Spring事务体系源码以及分布式事务Jotm Atomikos源码实现
- 2.4 数据库隔离级别
- 2.5 数据库
- 2.6 ORM框架: mybatis、Hibernate
- 2.7 SpringSecurity、shiro、SSO(单点登录)
- 2.8 日志
- 2.9 datasource
- 2.10 HTTPS的实现原理
- 2.11 网络基础
- 3. 分布式、java中间件、web服务器等方面
- 3.1 ZooKeeper源码
- 3.2 序列化和反序列化框架
- 3.3 RPC框架dubbo源码
- 3.4 NIO模块以及对应的Netty和Mina、thrift源码
- 3.5 消息队列kafka、RocketMQ、Notify、Hermes
- 3.6 数据库的分库分表mycat
- 3.7 NoSql数据库mongodb
- 3.8 KV键值系统memcached redis
- 3.9 web服务器tomcat、ngnix的设计原理
- 4.大数据方向
- 4.1 Hadoop
- 4.2 MapReduce
- 4.3 HDFS
- 4.4 YARN、Mesos 资源调度
- 4.5 oozie
- 4.6 Hive
- 4.7 Hbase
针对技术栈学习
java技术栈-1.0
java技术栈-2.0
1. java基础
1.1 算法
- 图解排序算法(一)之3种简单排序(选择、冒泡、直接插入)
0赞, 时间复杂度均为O(n^2)
- 冒泡排序, 需要空间n + 1,; 时间复杂度比较比较需要(n + 1) * n/2; 交换最少为0, 最大为(n + 1) * n/2;
- 选择排序, 需要空间n + 1; 比较次数: 太难算了, 是count这个数
public static void main(String[] args) {
int count = 0;
int n = 1;
for (int i = 0; i < n; i++ ){
for(int j = n; j > i; j--){
count++;
}
}
System.out.println(count);
}
交换次数: n - 1
3. 直接插入排序: 比较最多: (n + 1) * n/2;
交换最多: (n + 1) * n/2;
- 106赞 (图解算法—希尔排序)
希尔排序: 希尔排序是插入排序的变种, 逻辑间隔分组排序, 时间复杂度比较难算, 有一种分组(1, 5, 19, 41,
…)的时间复杂度为O(n^1.3); 大大的有进步, 了不起
- 理论基础 —— 排序 —— 直接选择排序
9赞 , 直接选择排序: 比选择排序还是要好一点的, 是在未排序的数组中比较, 但是时间复杂度仍然是O(n^2)
- 菜鸟, 快速排序
讲的不好, 看不懂
快速排序——详细且简单易懂的讲解
1赞, 图看懂一些
快速排序—(面试碰到过好几次)
46赞 , 还是上一篇1赞的写的好一些
快速排序: 时间复杂度为O(n * log(n)), 取基准数来不断分割数组的一种排序(分治法的思想)
- 五分钟弄懂有点难度的排序:堆排序
20赞, 堆排序利用完全二叉树的数据结构来排序, 分为大顶堆和小顶堆; 时间复杂度为O(n * log(n))
- [图解] 归并排序
42赞, 归并排序; 时间复杂度O(n * log(n)), 空间复杂度: O(n); 为稳定的排序法
- 【图解数据结构】 一组动画彻底理解基数排序
2赞, 基数排序, 把数拆分成个位, 十位, 百位… 从个位到顶级位依次比较, 是一种稳定的排序算法, 时间复杂度为: O (nlog®m),其中r为所采取的基数,而m为堆数; 这里对基数和堆数的定义不明, 先放着
- 二叉查找树与平衡二叉树
32赞, 比较好懂; 二叉查找树: 根节点比左叶子要大, 比右叶子要小; 查询的时间复杂度: O(log(n)), 极端不平衡的状态下时间复杂度为O(n); 中序遍历: 不懂
- 关于二叉树的前序、中序、后序三种遍历
191赞, 中序遍历: 左节点 -> 根节点-> 右节点的遍历
- 30张图带你彻底理解红黑树
- 红黑树特性:
1.1. 根节点为黑色
1.2. 节点有两种可能颜色, 黑色; 红色;
1.3. 一个红黑树中, 任意根节点到叶子节点的路径上黑节点的数量相等
1.4. 根节点为nil时为黑色
1.5. 红色节点的两个子节点必然为黑色- 应用场景: TreeSet,TreeMap
- 时间复杂度: O(log(n))
1.2 基本
- 对于JVM中方法区,永久代,元空间以及字符串常量池的迁移和string.intern方法
2赞, 没用, 实在是他娘的看不懂
- Java技术——你真的了解String类的intern()方法吗
106赞
1.3 设计模式
1.3.1 创建型模式
设计模式
2019-10-16: 将七种原则用于技术分享
- java单例模式
- 单例模式: 饿汉模式天生线程安全; 2. 在多线程中懒汉模式需要点操作来保证线程安全; 3. 使用场景: 对有限资源的使用, 比如打印机
单例模式的三种实现 以及各自的优缺点
登记式模式是最好的
- 原型模式
- 工厂方法模式
- 抽象工厂模式
- 建造者模式
1.3.2 结构型模式
1.3.3 行为型模式
- 观察者模式(Observer模式)详解
定义: 多个对象间存在一对多的依赖关系, 当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新
1.4 正则表达式
1.5 java内存模型以及垃圾回收算法
1.5.1 虚拟机加载机制
- JVM——Java虚拟机架构
65赞, 有点复杂, java虚拟机分为
- 类加载器: 将.class文件加载到java执行时数据区, 类加载机制, 使用双亲委派模型
- 执行引擎: 执行字节码, 或执行本地方法
- 执行时数据区: 分为:
3.1. 只属于当前线程的私有区
__3.1.1. pc计数器: 存当前线程跑到哪儿了
__3.1.2. jvm栈: 局部变量表, 方法出口
__3.1.3. 本地方法栈: 为Native方法服务
3.2. jvm共享的公有区
__3.2.1. 堆: 存实例对象
__3.2.2. 方法区: 存.class(编译后的代码), 类信息
____3.2.2.1. 运行时常量池: 存常量(编译期已可知的常量)
- Java虚拟机(JVM)你只要看这一篇就够了!
111赞, 太长了, 吃不消看; 前面部分讲的跟楼上是一样的
- jvm之java类加载机制和类加载器(ClassLoader)的详解
38赞, 说的挺好
- 类加载过程
1.1 加载: 将类的class文件读入到内存
1.2 链接: 1. 验证; 2. **准备: **: 为类的静态变量分配内存,并设置默认初始值; 3. 解析: 符号引用替换成直接引用
1.3 初始化: 执行用户定义的程序代码- 类加载时机
列举几个: 1. 创建一个对象时, 2. 调用一个类的静态变量 3. 调用一个静态方法; 4. 反射调用方法; 5. 子类加载时对调用父类加载- 类加载器:
没用- 类加载机制:
4.1 全盘负责
4.2 双亲委托: java核心api中定义类型不会被随意替换
4.3 缓存机制: 更改了class之后需要重启jvm的原因
1.5.2 虚拟机内存区域
- Java内存区域(运行时数据区域)和内存模型(JMM)
突然放上来的两幅图, 看不懂
java内存区域: Jvm 运行时将数据在内存分区域存储
内存模型: JVM 在计算机内存(RAM)中的工作方式
- Java内存模型原理,你真的理解吗?
41赞
- Java虚拟机详解(一)------简介
java的虚拟机为hot spot
android的虚拟机是dalvik, 他需要的编译文件(dex文件)可以从class文件转化而来
- Java虚拟机详解(二)------运行时内存结构
Java虚拟机规范定义
HotSpot实现
- Java虚拟机栈和本地方法栈合二为一
- 元数据区取代了本地方法区, 且元数据区不在java虚拟机中, 而是在本地方法区中
- 运行时常量池由方法区移到了堆中
1.5.3 垃圾回收
- 五分钟了解JAVA垃圾回收
这里是引用
- Java垃圾回收
这里是引用
- 内存溢出和内存泄漏的区别
内存溢出是存了大于数据类型数据大小的数据
内存泄漏是, 没有及时回收内存
2. web方面
2.1 SpringMVC的架构设计
2.1.1 servlet开发存在的问题
映射问题、参数获取问题、格式化转换问题、返回值处理问题、视图渲染问题
- Spring MVC是如何逐步简化Servlet的编程的
3赞, 太复杂, 看不懂
- JavaWeb开发模式的发展历程
5赞, 1. 纯servlet -> 2. 纯jsp -> 3. jsp + javaBean -> 4. jsp + javaBean + servlet (也就是MVC模式);
2.1.2 SpringMVC为解决上述问题开发的几大组件及接口
HandlerMapping、HandlerAdapter、HandlerMethodArgumentResolver、HttpMessageConverter、Converter、GenericConverter、HandlerMethodReturnValueHandler、ViewResolver、MultipartResolver
2.1.3 DispatcherServlet、容器、组件三者之间的关系
2.1.4 叙述SpringMVC对请求的整体处理流程
2.1.5 SpringBoot
2.2 SpringAOP源码
2.2.1. AOP的实现分类
编译期、字节码加载前、字节码加载后三种时机来实现AOP
2.3 Spring事务体系源码以及分布式事务Jotm Atomikos源码实现
2.4 数据库隔离级别
2.5 数据库
2.6 ORM框架: mybatis、Hibernate
2.7 SpringSecurity、shiro、SSO(单点登录)
2.8 日志
- 10分钟搞定–混乱的 Java 日志体系
log4j, log4j2, jul, logback 都是日志的具体实现, 而common-logging(动态)和slf4j(静态)则是作为门面来使用
- JAVA - 优雅的记录日志(log4j实战篇)
16年的文章, 日志可记录在控制台, 文件, 数据库, 也可配置日志记录级别, 定时记录日志.
2.9 datasource
- C3P0连接池使用教程
3赞, 每次请求连接数据库耗时大约为140ms, 而使用连接池耗时大约10-20ms
2.10 HTTPS的实现原理
- SSL/TLS协议运行机制的概述
拜阮一峰大神, 用于加密通讯;
1.针对问题 = > 解决方法:
__1.1. 窃听 => 加密传播
__1.2. 篡改 => 校验机制
__1.3. 冒充 => 身份证书
2. 握手增加到4次
- Https原理及流程
64赞
精髓是: 非对称加密加密对称加密
2.11 网络基础
- 为什么有了MAC地址还要有IP地址(简单易懂)
7赞, 比喻打的贼有意思
3. 分布式、java中间件、web服务器等方面
3.1 ZooKeeper源码
- Zookeeper入门看这篇就够了
Zookeeper:
- 是一个分布式框架, 是Apache Hadoop的一个子项目, 主要用来解决分布式应用中经常遇到的一些数据管理问题, 如 统一命名服务, 状态同步服务, 集群管理, 分布式应用的配置管理
- zookeeper=文件系统+监听通知机制
- 比较简单的分布式应用配置管理: 监听到了然后改呗
3.2 序列化和反序列化框架
3.3 RPC框架dubbo源码
3.4 NIO模块以及对应的Netty和Mina、thrift源码
3.5 消息队列kafka、RocketMQ、Notify、Hermes
3.6 数据库的分库分表mycat
3.7 NoSql数据库mongodb
3.8 KV键值系统memcached redis
3.9 web服务器tomcat、ngnix的设计原理
- Tomcat整体架构浅析
17赞, 看不懂, 没用
- 一个Tomcat最多支持多少用户的并发?
0赞, tomcat7默认使用bio, 默认并发150个线程; tomcat8之后默认使用nio, 基于缓冲区的io;
当并发超过250个时应考虑集群; apr是异步非阻塞, nio是同步非阻塞, bio是同步阻塞
- 分析http请求从浏览器到tomcat全过程
2赞, 看不懂
- Tomcat处理HTTP请求原理
对上文一坨文字的解释, 做了一个图来表示, servlet作为最内层被包装的对象; 其他没看懂, 估计是做了层层处理
4.大数据方向
4.1 Hadoop
4.2 MapReduce
4.3 HDFS
4.4 YARN、Mesos 资源调度
4.5 oozie
4.6 Hive
4.7 Hbase
更多推荐
java知识树教程
发布评论