导图社区 Java
关于Java的思维导图,介绍了 算法数据结构、语言、JVM、网络、中间件、分布式、大数据、架构/设计、SSM、数据库的知识。
编辑于2023-05-27 23:45:45 湖南这是一篇关于电商创业跨境电商新风口:如何用Shopify抢占欧美市场?的思维导图,主要内容包括:了解Shopify平台,市场研究与定位,产品策略,品牌建设与营销,网站建设和优化,支付和物流解决方案,法律合规和税务,数据分析和持续改进,风险管理,拓展和增长策略。
这是一篇关于大学知识专业课答题逻辑训练的思维导图,主要内容包括:知识罗列的重要性,答题技巧的培养,批判性思维的培养,案例分析与应用,模拟考试与反馈,持续学习与进步。
这是一篇关于大学知识调剂系统志愿解锁的思维导图,主要内容包括:了解调剂系统流程,沟通话术模板,调剂志愿解锁操作,后续注意事项。
社区模板帮助中心,点此进入>>
这是一篇关于电商创业跨境电商新风口:如何用Shopify抢占欧美市场?的思维导图,主要内容包括:了解Shopify平台,市场研究与定位,产品策略,品牌建设与营销,网站建设和优化,支付和物流解决方案,法律合规和税务,数据分析和持续改进,风险管理,拓展和增长策略。
这是一篇关于大学知识专业课答题逻辑训练的思维导图,主要内容包括:知识罗列的重要性,答题技巧的培养,批判性思维的培养,案例分析与应用,模拟考试与反馈,持续学习与进步。
这是一篇关于大学知识调剂系统志愿解锁的思维导图,主要内容包括:了解调剂系统流程,沟通话术模板,调剂志愿解锁操作,后续注意事项。
Java
算法数据结构
快排、TOPK
二叉树
链表
队列,栈
动态规划
Hash分桶
其他
语言
1.8 变化
类
String
intern():常量池存在,取,不存在,放
AtomicXX
利用CPU的CAS指令
集合类
HashMap
1.8优化,链表长度大于8变为红黑树
Hash冲突
ConcurrentHashMap
segment+hashtable
Arrayblockingqueue和LinkedBlockingQueue
一个锁,两个锁
AbstractQueuedSynchronizer
ReentrantLock
CountDownLatch
线程
状态
线程池
Executors
newCachedThreadPool
创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程
newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待
newSingleThreadExecutor
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行
newScheduleThreadPool
创建一个定长线程池,支持定时及周期性任务执行
自定义ThreadPoolExecutor
corePoolSize:核心池的大小
,这个参数与后面讲述的线程池的实现原理有非常大的关系。在创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待有任务到来才创建线程去执行任务,除非
maximumPoolSize
线程池最大线程数,它表示在线程池中最多能创建多少个线程,在队列满了之后会创建线程,直到数量达到该值
keepAliveTime:
表示线程没有任务执行时最多保持多久时间会终止。
unit:参数keepAliveTime的时间单位,有7种取值
workQueue:一个阻塞队列,用来存储等待执行的任务
handler:表示当拒绝处理任务时的策略
ThreadPoolExecutor.AbortPolicy;//丢弃任务并抛出RejectedExecutionException异常。
ThreadPoolExecutor.DiscardPolicy;//也是丢弃任务,但是不抛出异常。
ThreadPoolExecutor.DiscardOldestPolicy;//丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
ThreadPoolExecutor.CallerRunsPolicy;//由调用线程处理该任务
同步
volatile
内存屏障,hb关系,防止重排序
内存可见性
synchronized
非公平锁
可重入锁
锁升级
偏向锁,只执行一次CAS,下次同一线程访问同步区则偏向该线程,无需再执行CAS操作。 单次CAS
轻量级锁(自旋锁)线程每次进入同步区之前,都会执行CAS,若失败则膨胀为重量级锁。 每次CAS
重量级锁,线程每次进入同步区之前,都会执行CAS,若失败则阻塞。 每次CAS+阻塞
ReentrantLock
可以指定是公平锁还是非公平锁
Condition(条件)类,用来实现分组唤醒需要唤醒的线程们,而不是像synchronized要么随机唤醒一个线程要么唤醒全部线程
提供了一种能够中断等待锁的线程的机制,通过lock.lockInterruptibly()来实现这个机制。
JVM
结构
JDK1.7中,存储在永久代的部分数据就已经转移到了Java Heap或者是 Native Heap。但永久代仍存在于JDK1.7中,并没完全移除,譬如符号引用(Symbols)转移到了native heap;字面量(interned strings)转移到了java heap;类的静态变量(class statics)转移到了java heap。 https://www.cnblogs.com/paddix/p/5309550.html
程序计数器
JAVA栈
本地方法栈
方法区
永久代实现(1.7, 堆内存)/元空间实现(1.8, 本地内存)
运行时常量池(1.7后在java堆)
类信息、常量、静态变量、即时编译器编译后的代码
Java堆
Young 1:2
Eden 8:1:1
Survivor0,1
Old
GC
Minor GC:
即新生代GC,指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快。垃圾回收分多级是1级或以上为部分垃圾回收,只会回收NEW中的垃圾
Major GC / Full GC:
老年代GC,指发生在老年代的GC,出现了Major GC,经常会伴随至少一次的Minor GC(但非绝对的,在 ParallelScavenge 收集器的收集策略里就有直接进行 Major GC的策略选择过程) 。MajorGC 的速度一般会比Minor GC慢10倍以上。垃圾回收分多级是0级为全部(Full)的垃圾回收,会回收OLD段中的垃圾。
收集器
Serial串行
只使用一个线程去回收。新生代、老年代使用串行回收;新生代复制算法、老年代标记-压缩;垃圾收集的过程中会Stop The World(服务暂停)
ParNew收集器
ParNew收集器其实就是Serial收集器的多线程版本。新生代并行,老年代串行;新生代复制算法、老年代标记-压缩
Parallel收集器
Parallel Scavenge收集器类似ParNew收集器,Parallel收集器更关注系统的吞吐量。可以通过参数来打开自适应调节策略,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或最大的吞吐量;也可以通过参数控制GC的时间不大于多少毫秒或者比例;新生代复制算法、老年代标记-压缩
Parallel Old 收集器
Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。这个收集器是在JDK 1.6中才开始提供
CMSGC
采用“标记-清除”算法实现,使用多线程的算法去扫描堆,对发现未使用的对象进行回收。
G1GC
在G1中,堆被划分成 许多个连续的区域(region)。采用标记整理算法,不会产生内存空间碎片。
ClassLoader
网络
TCP/IP
HTTP
NIO
中间件
缓存
Redis
持久化
AOF
RDB
单线程
Cas
分区,分片存储
Memcached
GuavaCache
消息队列
Kafka
RabbitMq
分布式
CAP定律:
三种保证无法同时得到满足,最多满足两个
一致性(consistency)
系统在执行过某项操作后仍然处于一致的状态。在分布式系统中,更新操作执行成功后所有的用户都应该读到最新的值,这样的系统被认为是具有强一致性的
可用性(Availability)
每一个操作总是能够在一定的时间内返回结果,这里需要注意的是"一定时间内"和"返回结果"
分区容错(partition-tolerance)
理解为在存在网络分区的情况下,仍然可以接受请求(满足一致性和可用性)。这里的网络分区是指由于某种原因,网络被分成若干个孤立的区域,而区域之间互不相通。
dubbo
Thrift
zookeeper
大数据
Hive
Storm
ack原理
bolt并发度
架构/设计
设计模式
单例
懒汉
饿汉
工厂
模板
代理
动态代理
CGlib-继承
JDK-接口实现
静态代理
调优
代码规范
SSM
SpringMVC
Spring
事务
SpringBoot
Mybatis
数据库
MySQL
存储引擎
InnoDB
索引
聚簇索引
非聚簇索引
最左生效原理
explain 字段含义
锁
事务特性ACID
原子性 Atomicity
一致性 Consistency
隔离性 Isolation
持久性 Durability
隔离级别
Serializable (串行化):可避免脏读、不可重复读、幻读的发生
Repeatable read (可重复读):可避免脏读、不可重复读的发生--默认
Read committed (读已提交):可避免脏读的发生。
Read uncommitted (读未提交):最低级别,任何情况都无法保证。
数据库连接池
Binlog同步
分库分表
Atlas
Zebra
其他素质
沟通
工作状态
工作难点