001-基础知识专题-关键字和接口-6、enum
1. 是什么Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。 Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。 2. 保证线程安全1public enum t { SPRING,SUMMER,AUTUMN,WINTER; } 2.1. enum 关键字的作用通过反编译得到内容如下: 123456789101112131415161718192021222324252627282930313233343536public final class T extends Enum{ private T(String s, int i) { super(s, i); } public static T[] values() { T at[]; int i; T at1[]; System.arraycopy(at = E ...
内功心法专题-设计模式-1、UML
1. 是什么统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。 UML 从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等 9 种图。 2. 类图概述类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。 3. 类图的作用 在软件工程中,类图是一种静态的结构图,描述了系统的类的集合,类的属性和类之间的关系,可以简化了人们对系统的理解; 类图是系统分析和设计阶段的重要产物,是系统编码和测试的重要模型。 4. 类的表示方式在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个Employee类,它包含name,age和address这3个属性,以及work()方法。 属性/方法名称前加的加号和减号表示了这个属性/方 ...
内功心法专题-设计模式-2、设计模式及设计原则
1. 设计模式1.1. 是什么软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案,设计模式(Design pattern)代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式的本质提高软件的维护性,通用性和扩展性,并降低软件的复杂度 1.2. 为什么编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序 (软件),具有更好 代码重用性 (即:相同功能的代码,不用多次编写) 可读性 (即:编程规范性, 便于其他程序员的阅读和理解) 可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护) 可靠性 (即:当我们增加新的功能后,对原来的功能没有影响) 使程序呈现高内聚,低耦合的特性❕%%1620-🏡⭐️◼️设计模式的目的?高内聚 (结构上)、低耦合 (行为上);(3 易 2 可):易复用、 ...
内功心法专题-设计模式-3、单例模式
1. 创建者模式创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。创建型模式分为: 单例模式 (Singleton) 工厂方法模式 (FactoryMethod) 抽象工程模式 (AbstractFactory) 原型模式 (Prototype) 建造者模式 (Builder)❕%%1804-🏡⭐️◼️5 中创建者设计模式:单例模式、工厂方法模式、抽象工厂模式、原型模式、建造者模式◼️⭐️-point-202301221804%% 2. 是什么所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法 (静态方法)。比如 Hibernate 的 SessionFactory,它充当数据存储源的代理,并负责创建 Session 对象。SessionFactory 并不是轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory 就够,这是就会使用到单例模式。 3. 实现方式⭐️🔴3.1. 八种单例模 ...
并发编程专题-基础-18、ThreadLocal
1. 是什么 2. 能干嘛 3. 底层原理%%▶3.🏡⭐️◼️【🌈费曼无敌🌈⭐️第一步⭐️】◼️⭐️-point-20230413-1620%%❕ ^ac6t1x 3.1. 关系 3.2. Thread 和 ThreadLocal 3.3. ThreadLocal 和 ThreadLocalMap 3.4. 弱引用 -2 个问题⭐️🔴 3.4.1. 为什么要用弱引用%%▶1.🏡⭐️◼️【🌈费曼无敌🌈⭐️第一步⭐️】◼️⭐️-point-20230607-1156%%❕ ^t7yb2u %%▶1.🏡⭐️◼️【🌈费曼无敌🌈⭐️第一步⭐️】◼️⭐️-point-20230320-2241%%❕ ^kqn4wd 3.4.2. 为什么要手动 remove- 内存泄露 - 线程池重复使用⭐️🔴ThreadLocal 被回收为 null 之后,ThreadLocalMap 的 Entry 的 key 指向的是 null,这个结构的回收也是一个需要解决的问题。 3.4.3. 引用 3.4.3.1. 强引用 3.4.3.2. 软引用 3.4.3.3. 弱引用 3.4.3 ...
并发编程专题-基础-16、LockSupport
1. 是什么是用来创建锁和其他同步类的基本线程阻塞原语每个使用 LockSupport 的线程都会与一个许可关联,如果该许可可用,并且可在进程中使用,则调用 park() 将会立即返回,否则可能阻塞。如果许可尚不可用,则可以调用 unpark 使其可用方法:park()、unpark() 2. 等待唤醒2.1. synchronized2.1.1. 异常 1必须在 synchronized 代码块中调用 wait 和 notify,否则报错 2.1.2. 异常 2必须 t1 先 wait(),然后 t2 再 notify(),否则无法唤醒 2.1.3. 为什么要放在代 synchronized 码块中?⭐️🔴 wait 和 notify 用来实现多线程之间的协调,wait 表示让线程进入到阻塞状态, notify 表示让阻塞的线程唤醒。 wait 和 notify 必然是成对出现的,如果一个线程被 wait() 方法阻塞,那么必然需 要另外一个线程通过 notify() 方法来唤醒这个被阻塞的线程,从而实现多线程之间 的通信。 (如图)在多线程里面,要实现多个线程之间的通信,除了管道 ...
并发编程专题-基础-17、LongAdder
1. 是什么 JDK1.8之后推出的原子操作增强类 1.1. 继承关系 2. 底层原理 3. 源码解读 3.1. add方法3.1.1. base的cas 3.1.2. cell的cas 3.2. longAccumulate方法 3.2.1. getProbe() 3.2.2. 功能划分 3.2.3. 步骤拆解3.2.3.1. 首次进入时走CASE2add()方法中base在多线程下cas发生失败时,会进入longAccumulate方法。首次进入cells为null,进入CASE2 3.2.3.2. 兜底方案CASE3 3.2.3.3. CASE1cells不为空,其中有个cell为null,进入longAccumulate方法 3.2.3.3.1. 坑位为空,写入 3.2.3.3.2. 坑位不为空,继续循环 3.2.3.3.3. 坑位不为空,cas成功 3.2.3.3.4. 不能扩容 3.2.3.3.5. 扩容 3.2.3.3.6. 总结 3.3. sum方法 3.3.1. 不精确的 3.4. 与AtomicLong对比3.4.1. AtomicLong 3 ...
Java基础-JDK新特性-1、函数式编程
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849//Runnable无参无返回值@Functionallnterfacepublic interface Runnable{public abstract void run();}//Function<T,R>接受一个参数,并且有返回值@Functionallnterfacepublic interface Function<T,R>{R apply(T t);}//Supplier没有参数,有一个返回值@Functionallnterfacepublic interface Supplier<T>{T get();}//Consumer接受一个参数,没有返回值@Functionallnterfacepublic interface Consumer<T>{void accept(T t);& ...
并发编程专题-基础-14、多线程
1. ForkJoin /Users/Enterprise/0003-Architecture/011-Java/JUC/Java并发编程与高并发解决方案(完整)/第8章 J.U.C组件拓展 1.1. 与线程池区别 采用 “工作窃取”模式(work-stealing) 当执行新的任务时它可以将其拆分分成更小的任务执行,并将小任务加 到线程队列中,然后再从一个随机线程的队列中偷一个并把它放在自己的队列中。 相对于一般的线程池实现,fork/join框架的优势体现在对其中包含的任务的处理方式上:在一般的线程池中,如果一个线程正在执行的任务由于某些原因无法继续运行,那么该线程会处于等待状态。而在fork/join框架实现中,如果某个子问题由于等待另外一个子问题的完成而无法继续运行。那么处理该子问题的线程会主动寻找其他尚未运行的子问题来执行.这种方式减少了线程的等待时间,提高了性能。 1.2. 业务场景 2. CompletableFuture2.1. 诞生原因Future是Java 5添加的类, ...
并发编程专题-基础-15、JUC
1. 实战经验2. 参考与感谢%%▶4.🏡⭐️◼️【🌈费曼无敌🌈⭐️第一步⭐️】◼️⭐️-point-20230528-1642%%❕ ^7cgnqd 2.1. 尚硅谷周阳https://www.bilibili.com/video/BV1ar4y1x727?p=3&vd_source=c5b2d0d7bc377c0c35dbc251d95cf204 并发基础-9、Java各种锁 2.2. 黑马程序员https://www.bilibili.com/video/BV16J411h7Rd?p=271&vd_source=c5b2d0d7bc377c0c35dbc251d95cf204 实例代码:013-DemoCode/heima-concurrent配套资料:/Users/taylor/Nutstore Files/Obsidian_data/pages/002-schdule/001-Arch/001-Subject/003-并发编程专题/黑马-并发编 ...


