导图社区 Java程序员的自我修炼
关于Java程序员的自我修炼的思维导图,包含数据库:关系型数据库、非关系型数据库;基本功:算法和数据结构、基本概念;Web方向;扩展等。
编辑于2021-12-02 16:56:20Java程序员--自我修炼
基本功
算法和数据结构
排序
1.冒泡排序
private static void sort(int[] a) { int count = 0; int length = a.length; for (int i = 0; i < length - 1; i++) { for (int j = 0; j < length - 1 - i; j++) { if (a[j] > a[j + 1]) { swap(a, j, j + 1); } print(a); count++; } } } // swap two index of two int number in a array. private static void swap(int[] a, int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; }
2.快速排序
3.插入排序
4.选择排序
查找
二叉树
数组
链表
算法
基本概念
1.进程和线程,线程安全和线程不安全
1.进程
1.定义
一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位
2.特征
1. 动态特征:进程对应于程序的运行,动态产生、消亡,在其生命周期中进程也是动态的、 2. 并发特征:任何进程都可以同其他进程一起向前推进 3. 独立特征:进程是相对完整的调度单位,可以获得CPU,参与并发执行 4. 交往特征:一个进程在执行过程中可与其他进程产生直接或间接关系 5. 异步特征:每个进程都以相对独立、不可预知的速度向前推进 6. 结构特征:每个进程都有一个PCB作为他的数据结构
3.与程序的区别
1. 进程是一个动态的概念 进程是程序的一次执行过程,是动态概念 程序是一组有序的指令集和,是静态概念 2. 不同的进程可以执行同一个程序 区分进程的条件:所执行的程序和数据集合。 两个进程即使执行在相同的程序上,只要他们运行在不同的数据集合上,他们也是两个进程。例如:多个用户同时调用同一个编译程序编译他们编写的C语言源程序,由于编译程序运行在不同的数据集合(不同的C语言源程序)上,于是产生了一个个不同的进程 3. 每个进程都有自己的生命周期 当操作系统要完成某个任务时,它会创建一个进程。当进程完成任务之后,系统就会撤销这个进程,收回它所占用的资源。从创建到撤销的时间段就是进程的生命期 4. 进程之间存在并发性 在一个系统中,同时会存在多个进程。他们轮流占用CPU和各种资源 5. 进程间会相互制约 进程是系统中资源分配和运行调度的单位,在对资源的共享和竞争中,必然相互制约,影响各自向前推进的速度 6. 进程可以创建子进程,程序不能创建子程序 7. 从结构上讲,每个进程都由程序、数据和一个进程控制块(Process Control Block, PCB)组成
4.进程的状态与转换
1. 进程的三种基本状态 a. 运行状态:获得CPU的进程处于此状态,对应的程序在CPU上运行着 b. 阻塞状态:为了等待某个外部事件的发生(如等待I/O操作的完成,等待另一个进程发来消息),暂时无法运行。也成为等待状态 c. 就绪状态:具备了一切运行需要的条件,由于其他进程占用CPU而暂时无法运行 2. 进程状态转换 a. 运行状态 ===> 阻塞状态:例如正在运行的进程提出I/O请求,由运行状态转化为阻塞状态 b. 阻塞状态 ===> 就绪状态:例如I/O操作完成之后,由阻塞状态转化为就绪状态 c. 就绪状态 ===> 运行状态:例如就绪状态的进程被进程调度程序选中,分配到CPU中运行,由就绪状态转化为运行状态 d. 运行状态 ===> 就绪状态:处于运行状态的进程的时间片用完,不得不让出uCPU,由运行状态转化为就绪状态 3. 进程的类型 a. 系统进程:操作系统用来管理资源的进程,当系统进程处于运行态时,CPU处于管态,系统之间的关系由操作系统负责 b. 用户进程:操作系统可以独立执行的的用户程序段,当用户进程处于运行态时,CPU处于目态,用户进程之间的关系由用户负责
2.线程
3.线程安全和线程不安全
2.同步异步
3.阻塞非阻塞
4.锁
1.死锁
2.死锁怎么排查?(jps)
3.乐观锁和悲观锁
4.公平锁和非公平锁
5.可重入锁
6.自旋锁
7.读写锁
操作系统
Linux
1.Ubuntu
2.CenterOS
子主题
Web方向
HTTP协议
1.各种请求之间的区别(Get/Post/Put/Delete)
2.请求响应的过程
3.浏览器渲染的过程
4.跨域
5.代理
计算机网络
服务器
Tomcat
Jboss
WebLogic
Nginx
主从模式
哨兵模式
负载均衡
1.轮询
2.随机
3.加权
Session
1.session存取
2.session生命周期
3.session是什么?
表单
1.怎么防止表单重复提交?
Java
初级java
1.基础知识
1.栈和队列的区别
2.接口和抽象类的区别
3.int和Interger的区别和自动拆装箱的相关问题
4.常量池的相关问题
5.==和equals的区别
6.重载和重写的区别
7.String、StringBuilder和StringBuffer的区别
8.基本数据类型
9.封装、继承和多态
10.final关键字
11.包访问权限
12.类加载机制,加载顺序
13.构造方法
14.静态块/静态类/静态方法
15.成员变量/成员方法,非成员变量/非成员方法
2.集合类容器
Collection<interface>(集合)
List<interface>(列表)
LinkedList
Vector
ArrayList
Set<Interface>(集合)
HashSet(哈希散列)
LinkedHashSet
SortedSet
TreeSet
EnumSet
Queue<interface>
Map<interface>(映射)
TreeMap
HashMap
ConcurrentHashMap
JDK1.7和1.8实现的区别
HashMap能否排序?
HashMap的长度为什么是2的幂次方?
底层实现和原理
HashTable
3.synchronized
4. 框架
1.Spring
1.AOP
2.IOC
3.DI
4.控制反转
5.注入Bean的方式?
子主题
2.Spring MVC
1.请求在Spring MVC中的执行流程
2.常用的注解
3.@RequestMapping和@ResponseMapping
3.Mybatis
1.缓存机制(一级缓存和二级缓存)
2.Mapper文件中#和$的区别?
3.Spring事务隔离级别和传播机制
4.Struts1
5.I/O
中级java
1.语言基础
1.堆/栈/内存模型
2.多线程
1.创建线程的几种方式?
2.创建线程几种方式之间的区别?
3.调用线程的方式?
4.wait、sleep分别是谁的方法?
5.wait、sleep之间的区别?
6.线程之间的通信方式?最快的通信方式?
7.线程继承和接口的区别?
8.接口线程又什么好处?
9.创建线程池的几种方式?
10.线程池有什么好处?
11.sychronizied、Lock、RentrantLock的区别,用法及原理
12.CountDownLatch与CyclicBarrier用法
13.ThreadLocal的用法和原理
14.volatile关键字的作用和原理
15.CAS是什么及底层原理
16.ArrayLockingQueue、LinkedBlockingQueue、SynchronousQueue的阻塞队列的理解
17.ThreadPoolExcutor的传入参数及内部工作原理
18.具体的业务场景如何用ThreadPoolExcutor创建一个合适的线程池
19.分布式环境下如何保证线程安全
3.线程池
4.常量池
5.JVM
1.JVM内存机制
2.介绍一下垃圾回收机制
3.垃圾回收有哪几种算法?以及各自的特点
4.GC,谈谈Major GC和Full GC 的区别?
5.垃圾收集器有哪些?他们的区别?
6.OutOfMemeroyError这个错误怎么解决?
7.JVM调优有哪些参数?
8.线上环境下如何通过查看JVM参数并进行调优?
9.能不能自己写一个类叫做java.lang,String(类加载的过程,双亲委派模型)
6.反射
2.框架
1.Spring
1.Spring中用到了哪些设计模式?
2.注入Bean的方式?
3.AOP\IOC\DI
4.Spring事务隔离级别和传播机制
2.Spring Boot
3.Spring Cloud
4.Mybaits
5.SpringMVC
3.设计模式
扩展
1.消息队列
1.RabbitMQ
2.ActiveMQ
3.RocketMQ
4.Kafka
2.中间件
1.如何进行消息中间件的选型?
2.如何保证消息中间件的高可用?
3.如何保证消息中间件重复发送消息?
4.消息队列中积压了大量的消息如何处理?
5.如何保证消费者消费信息是有序的?
6.如果让你来开发一个消息中间件,你会怎么做?
3.容器技术
Docker
K8S
4.缓存
5.敏捷开发
6.Shell 脚本
7.NodeJS
8.分布式
1.分区容错性(P)
2.高可用(A)
3.一致性(C)
4.分布式缓存
5.分布式Session方案
9.云部署
10.云计算
11.大数据
12.人工智能
前端
1.Js基础
2.ES6基础
3.框架
1.Jquery
2.Vue
3.React
4.Angular
5.Datatable
4.UI
5.NPM
6.WebPack
数据库
关系型数据库
1.Oracle
2.Mysql
3.Sybase
4.SQL
5.Procedure
6.Index
1.什么情况下索引会失效?
2.索引的原理?
7.Trigger
8.Function
9.SQL调优
1.Sql执行计划
10.事务
11.读写分离
12.分库分表
1.主从库/Mycat
13.数据库存储引擎的区别,例如Mysql的MyISAM和InnoDB
14.数据库集群
非关系型数据库
MongoDB
Redis
1.为什么要使用Redis?
2.Redis有几种数据类型?
3.Redis的持久化策略?
4.怎么保证Redis高可用?
5.什么是缓存穿透?如何避免缓存穿透?
6.什么是缓存雪崩?如何避免?
7.如何保证缓存和数据库的双写一致性?
8.Redis单线程模型原理,为什么能支持高并发?
9.Redis哨兵架构的理解和底层原理?