java知识树教程

  1. 学习Java的9张思维导图
  2. 各类技术栈总览

针对技术栈学习

java技术栈-1.0
java技术栈-2.0

1. java基础

1.1 算法
  1. 图解排序算法(一)之3种简单排序(选择、冒泡、直接插入)

0赞, 时间复杂度均为O(n^2)

  1. 冒泡排序, 需要空间n + 1,; 时间复杂度比较比较需要(n + 1) * n/2; 交换最少为0, 最大为(n + 1) * n/2;
  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;

  1. 106赞 (图解算法—希尔排序)

希尔排序: 希尔排序是插入排序的变种, 逻辑间隔分组排序, 时间复杂度比较难算, 有一种分组(1, 5, 19, 41,
…)的时间复杂度为O(n^1.3); 大大的有进步, 了不起

  1. 理论基础 —— 排序 —— 直接选择排序

9赞 , 直接选择排序: 比选择排序还是要好一点的, 是在未排序的数组中比较, 但是时间复杂度仍然是O(n^2)

  1. 菜鸟, 快速排序

讲的不好, 看不懂

快速排序——详细且简单易懂的讲解

1赞, 图看懂一些

快速排序—(面试碰到过好几次)

46赞 , 还是上一篇1赞的写的好一些

快速排序: 时间复杂度为O(n * log(n)), 取基准数来不断分割数组的一种排序(分治法的思想)

  1. 五分钟弄懂有点难度的排序:堆排序

20赞, 堆排序利用完全二叉树的数据结构来排序, 分为大顶堆和小顶堆; 时间复杂度为O(n * log(n))

  1. [图解] 归并排序

42赞, 归并排序; 时间复杂度O(n * log(n)), 空间复杂度: O(n); 为稳定的排序法

2赞, 基数排序, 把数拆分成个位, 十位, 百位… 从个位到顶级位依次比较, 是一种稳定的排序算法, 时间复杂度为: O (nlog®m),其中r为所采取的基数,而m为堆数; 这里对基数和堆数的定义不明, 先放着


32赞, 比较好懂; 二叉查找树: 根节点比左叶子要大, 比右叶子要小; 查询的时间复杂度: O(log(n)), 极端不平衡的状态下时间复杂度为O(n); 中序遍历: 不懂

191赞, 中序遍历: 左节点 -> 根节点-> 右节点的遍历

  1. 红黑树特性:
    1.1. 根节点为黑色
    1.2. 节点有两种可能颜色, 黑色; 红色;
    1.3. 一个红黑树中, 任意根节点到叶子节点的路径上黑节点的数量相等
    1.4. 根节点为nil时为黑色
    1.5. 红色节点的两个子节点必然为黑色
  2. 应用场景: TreeSet,TreeMap
  3. 时间复杂度: O(log(n))
1.2 基本
  1. 对于JVM中方法区,永久代,元空间以及字符串常量池的迁移和string.intern方法

2赞, 没用, 实在是他娘的看不懂

  1. Java技术——你真的了解String类的intern()方法吗

106赞

1.3 设计模式
1.3.1 创建型模式

设计模式

2019-10-16: 将七种原则用于技术分享

  1. java单例模式
  1. 单例模式: 饿汉模式天生线程安全; 2. 在多线程中懒汉模式需要点操作来保证线程安全; 3. 使用场景: 对有限资源的使用, 比如打印机

单例模式的三种实现 以及各自的优缺点

登记式模式是最好的

  1. 原型模式
  2. 工厂方法模式
  3. 抽象工厂模式
  4. 建造者模式
1.3.2 结构型模式
1.3.3 行为型模式
  1. 观察者模式(Observer模式)详解

定义: 多个对象间存在一对多的依赖关系, 当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新

1.4 正则表达式
1.5 java内存模型以及垃圾回收算法
1.5.1 虚拟机加载机制
  1. JVM——Java虚拟机架构

65赞, 有点复杂, java虚拟机分为

  1. 类加载器: 将.class文件加载到java执行时数据区, 类加载机制, 使用双亲委派模型
  2. 执行引擎: 执行字节码, 或执行本地方法
  3. 执行时数据区: 分为:
    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. 运行时常量池: 存常量(编译期已可知的常量)
  1. Java虚拟机(JVM)你只要看这一篇就够了!

111赞, 太长了, 吃不消看; 前面部分讲的跟楼上是一样的

  1. jvm之java类加载机制和类加载器(ClassLoader)的详解
    在这里插入图片描述

38赞, 说的挺好

  1. 类加载过程
    1.1 加载: 将类的class文件读入到内存
    1.2 链接: 1. 验证; 2. **准备: **: 为类的静态变量分配内存,并设置默认初始值; 3. 解析: 符号引用替换成直接引用
    1.3 初始化: 执行用户定义的程序代码
  2. 类加载时机
    列举几个: 1. 创建一个对象时, 2. 调用一个类的静态变量 3. 调用一个静态方法; 4. 反射调用方法; 5. 子类加载时对调用父类加载
  3. 类加载器:
    没用
  4. 类加载机制:
    4.1 全盘负责
    4.2 双亲委托: java核心api中定义类型不会被随意替换
    4.3 缓存机制: 更改了class之后需要重启jvm的原因
1.5.2 虚拟机内存区域
  1. Java内存区域(运行时数据区域)和内存模型(JMM)

突然放上来的两幅图, 看不懂
java内存区域: Jvm 运行时将数据在内存分区域存储
内存模型: JVM 在计算机内存(RAM)中的工作方式

  1. Java内存模型原理,你真的理解吗?

41赞

  1. Java虚拟机详解(一)------简介

java的虚拟机为hot spot
android的虚拟机是dalvik, 他需要的编译文件(dex文件)可以从class文件转化而来

  1. Java虚拟机详解(二)------运行时内存结构

Java虚拟机规范定义
HotSpot实现

  1. Java虚拟机栈和本地方法栈合二为一
  2. 元数据区取代了本地方法区, 且元数据区不在java虚拟机中, 而是在本地方法区中
  3. 运行时常量池由方法区移到了堆中
1.5.3 垃圾回收
  1. 五分钟了解JAVA垃圾回收

这里是引用

  1. Java垃圾回收

这里是引用

  1. 内存溢出和内存泄漏的区别

内存溢出是存了大于数据类型数据大小的数据
内存泄漏是, 没有及时回收内存

2. web方面

2.1 SpringMVC的架构设计
2.1.1 servlet开发存在的问题

映射问题、参数获取问题、格式化转换问题、返回值处理问题、视图渲染问题

  1. Spring MVC是如何逐步简化Servlet的编程的

3赞, 太复杂, 看不懂

  1. 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 日志
  1. 10分钟搞定–混乱的 Java 日志体系

log4j, log4j2, jul, logback 都是日志的具体实现, 而common-logging(动态)和slf4j(静态)则是作为门面来使用

  1. JAVA - 优雅的记录日志(log4j实战篇)

16年的文章, 日志可记录在控制台, 文件, 数据库, 也可配置日志记录级别, 定时记录日志.

2.9 datasource
  1. C3P0连接池使用教程

3赞, 每次请求连接数据库耗时大约为140ms, 而使用连接池耗时大约10-20ms

2.10 HTTPS的实现原理
  1. SSL/TLS协议运行机制的概述

拜阮一峰大神, 用于加密通讯;
1.针对问题 = > 解决方法:
__1.1. 窃听 => 加密传播
__1.2. 篡改 => 校验机制
__1.3. 冒充 => 身份证书
2. 握手增加到4次

  1. Https原理及流程

64赞
精髓是: 非对称加密加密对称加密

2.11 网络基础
  1. 为什么有了MAC地址还要有IP地址(简单易懂)

7赞, 比喻打的贼有意思

3. 分布式、java中间件、web服务器等方面

3.1 ZooKeeper源码
  1. Zookeeper入门看这篇就够了

Zookeeper:

  1. 是一个分布式框架, 是Apache Hadoop的一个子项目, 主要用来解决分布式应用中经常遇到的一些数据管理问题, 如 统一命名服务, 状态同步服务, 集群管理, 分布式应用的配置管理
  2. zookeeper=文件系统+监听通知机制
  3. 比较简单的分布式应用配置管理: 监听到了然后改呗
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的设计原理
  1. Tomcat整体架构浅析

17赞, 看不懂, 没用

  1. 一个Tomcat最多支持多少用户的并发?

0赞, tomcat7默认使用bio, 默认并发150个线程; tomcat8之后默认使用nio, 基于缓冲区的io;
当并发超过250个时应考虑集群; apr是异步非阻塞, nio是同步非阻塞, bio是同步阻塞

  1. 分析http请求从浏览器到tomcat全过程

2赞, 看不懂

  1. 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章