![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
java 基础与中高级
文章平均质量分 81
java 语言基础及中高级
红衣女妖仙
先知而后行 行必有所为
展开
-
走近科学之《netty 的秘密》
IO 相关概念、五种 IO 模型、BIO NIO AIO 特点及区别、NIO 设计原理及核心组件、netty 简介及应用场景、netty 线程模型(Reactor 线程模型)、netty 设计原理及核心组件、netty 常用技巧实现(心跳机制、长连接、tcp 粘包/拆包、大文件传输、SSL/TLS 加密传输等)、相关代码示例。原创 2024-06-17 16:33:53 · 1082 阅读 · 0 评论 -
《JUC》万万万万字长文解析!
四万字长文解析 juc,涵盖线程、内存模型、锁、线程池、原子类、同步器、并发容器、并发编程模式、并发编程应用等。原创 2023-09-10 21:42:11 · 528 阅读 · 1 评论 -
走近科学之《JVM 的秘密》
JVM、内存模型、类加载机制、对象的创建、垃圾回收机制、对象内存分配策略、JVM调优等。原创 2023-06-14 21:30:42 · 1002 阅读 · 0 评论 -
经典设计模式总则
设计模式背景-概念、面向对象六大原则、设计模式分类、二十三中常用设计模式即创建型模式、结构型模式、行为型模式原创 2022-12-22 18:11:20 · 1224 阅读 · 0 评论 -
设计模式之备忘录模式
备忘录模式,又称快照模式,即在不破坏封装的前提下,获取并保存一个对象某一时刻的内部状态,以便以后恢复它。编辑器中的 Ctrl + Z、后退、数据库事务回滚、游戏存档、后悔药等都是备忘录模式的典型应用。备忘录模式的概念、备忘录模式的结构、备忘录模式的优缺点、备忘录模式的使用场景、备忘录模式的实现示例、备忘录模式的源码分析。原创 2022-12-22 18:05:02 · 820 阅读 · 0 评论 -
设计模式之访问者模式
访问者模式,即在不改变聚合对象内元素的前提下,为聚合对象内每个元素提供多种访问方式,即聚合对象内的每个元素都有多个访问者对象。访问者模式主要解决稳定的数据结构和易变元素的操作之间的耦合问题。变量被声明时的类型叫做变量的静态类型,又称为明显类型;而变量所引用的对象的真实类型叫做变量的实际类型。如 Map map = new HashMap(),map 变量的静态类型是 Map,实际类型是 HashMap。根据对象的类型对方法进行选择,就是分派,即 Dispatch,分派又分原创 2022-12-22 12:15:05 · 2258 阅读 · 0 评论 -
设计模式之迭代器模式
java 中集合接口 Collection< E> 的子实现类,Map 接口的子实现类大部分都是用了迭代器模式,被广泛使用。需要注意的是,在 java 中当需要使用迭代器模式时,只需要让我们自定义的聚合类实现 java.util.Iterable 接口,并实现其定义的 iterator() 让其返回一个 java.util.Iterator 接口的子实现类实例即可。迭代器模式的概念、迭代器模式的结构、迭代器模式的优缺点、迭代器模式的使用场景、迭代器模式的实现示例、迭代器模式的源码分析。原创 2022-12-21 22:44:46 · 984 阅读 · 0 评论 -
设计模式之中介者模式
中介者模式,又称调停模式,即定义一个中介者来封装原有多个对象之间的依赖关系,且可以独立改变它们之间的交互,以降低对象之间的耦合度。其是迪米特法则的典型应用。中介者模式的概念、中介者模式的结构、中介者模式的优缺点、中介者模式的使用场景、中介者模式的实现示例、中介者模式的源码分析。原创 2022-12-21 19:32:33 · 416 阅读 · 0 评论 -
设计模式之观察者模式
观察者模式,又称为发布-订阅模式,即它定义了一种对象间一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有监听这个主题对象的观察者对象,使它们能够自动更新自己。java.util.Observer 和 java.util.Observable 这两个接口实现了观察者模式,当我们需要使用观察者模式时只需要实现这两个接口即可。观察者模式的概念、观察者模式的结构、观察者模式的优缺点、观察者模式的使用场景、观察者模式的实现示例、观察者模式的源码分析。原创 2022-12-21 17:10:10 · 585 阅读 · 0 评论 -
设计模式之状态模式
状态模式的概念、状态模式的结构、状态模式的优缺点、状态模式的使用场景、状态模式的实现示例、状态模式的源码分析。对有状态的对象,把复杂的判断逻辑提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。原创 2022-12-21 15:05:42 · 480 阅读 · 0 评论 -
设计模式之责任链模式
java web 中的 FilterChain 就是责任链模式的典型应用,spring security 中的 SecurityFilterChain 也是责任链模式的典型应用,其在 FilterOrderRegistration 类中声明了默认内置 filter 的顺序,并在 HttpSecurity 类中声明了内部类 OrderedFilter 来承载 Filter,并对外提供了可以指定顺序的 addFilter 方法,以这些手段来明确 filter 在 filter chain 中的执行顺序。原创 2022-12-20 23:14:36 · 451 阅读 · 0 评论 -
设计模式之命令模式
jdk 中的 Runnable 接口的设计就是一个典型的命令模式。Runnable 接口担当命令角色,Thread 则是调用者,start 方法就是命令执行方法。命令模式,即将请求封装成一个对象,使发出请求的责任和执行请求的责任分离开。这样两者之间通过命令对象进行沟通,方便讲命令对象进行存储、传递、调用和管理。通过源码可以发现,其在发出命令调用时会调用一个本地方法 start0(),开启一个县城。命令模式的概念、命令模式的结构、命令模式的优缺点、命令模式的使用场景、命令模式的实现示例、命令模式的源码分析。原创 2022-12-19 22:52:47 · 582 阅读 · 0 评论 -
设计模式之策略模式
这是典型的策略模式的应用,同样,SessionRegistory 也用到了策略模式。策略模式,即定义一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的用户。策略模式属于对象行为模式,它通过对算法进行封装,使把使用算法的责任和算法的实现分离开来,并委托给不同的对象对这些算法进行管理。策略模式的概念、策略模式的结构、策略模式的优缺点、策略模式的使用场景、策略模式的实现示例、策略模式的源码分析。原创 2022-12-19 19:46:32 · 559 阅读 · 0 评论 -
设计模式之模版方法模式
jdk 中的 InputStream 类的设计就使用了模版方法。而 read(byte b[]) 调用了 read(byte b[], int off, int len) 方法,所以此处 read(byte b[], int off, int len) 方法是模版方法,其定义了算法的步骤,read() 是算法中抽象化的某个步骤,由子类。模版方法模式的概念、模版方法模式的结构、模版方法模式的优缺点、模版方法模式的使用场景、模版方法模式的实现示例、模版方法模式的源码分析。原创 2022-12-19 17:25:34 · 353 阅读 · 0 评论 -
设计模式之组合模式
组合模式的概念、组合模式的结构、组合模式的优缺点、组合模式的使用场景、组合模式的实现示例、组合模式的源码分析。合模式,即部分整体模式,是用于把一组相似的对象当做一个单一个的对象。组合模式依据树形结构来组合对象,用以表示部分以及整体层次。这种类型的设计模式属于结构形模式,它创建了对象组的树形结构。原创 2022-12-18 23:38:14 · 534 阅读 · 0 评论 -
设计模式之享元模式
享元模式,即运用共享技术来有效的支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量,避免大量相似对象的开销,从而提高系统资源的利用率。 享元模式中存在以下两种状态:- 内部状态:即不会随着环境的改变而改变的可共享状态。- 外部状态:即随着环境的改变而改变的不可共享状态。享元模式的实现要领就是区分应用中的这两种状态,并将外部状态外部化。原创 2022-12-18 21:22:01 · 535 阅读 · 0 评论 -
设计模式之外观模式
外观模式,为多个复杂的子系统提供一个统一的接口,使得这些子系统更加容易被访问。在现有的系统中增加一个接口,提供了客户端请求的简化方法和现有系统类方法的委托调用,同时隐藏了系统的复杂性。原创 2022-12-18 17:16:35 · 342 阅读 · 0 评论 -
设计模式之装饰器模式
装饰模式的概念、装饰模式的结构、装饰模式的优缺点、装饰模式的使用场景、装饰模式与代理模式的区别、装饰模式的实现示例、装饰模式的源码分析原创 2022-12-18 14:14:50 · 419 阅读 · 0 评论 -
设计模式之桥接模式
桥接模式,即将抽象和实现分离,使他们可以独立变化。它是用组合关系来代替继承关系实现的,从而降低了抽象和实现这两个可变维度的耦合度。桥接模式基于类的最小设计原则,通过使用封装、聚合、继承等关系让不同的类承担不同的职责。原创 2022-12-17 21:45:16 · 665 阅读 · 0 评论 -
设计模式之适配器模式
适配器模式,即将一个类的某个接口转换成用户希望的另一个接口,使得原本由于接口不兼容而不能在一起工作的类可以在一起工作。适配器模式分为类适配器模式和对象适配器模式,类适配器模式依赖继承关系实现,故比依赖组合或聚合关系实现的对象适配器模式耦合度高。jdk 中的 Reader(字符流)、InputStream(字节流)的适配使用的是 InputStreamReader。适配模式的概念、适配模式的结构、适配模式的优缺点、适配模式的使用场景、适配模式的实现示例(类适配模式和对象适配模式)、适配模式的源码分析。原创 2022-12-17 18:03:11 · 599 阅读 · 0 评论 -
设计模式之代理模式
代理模式的概念、代理模式的结构、代理模式的优缺点、代理模式的使用场景、代理模式的实现示例(静态代理、jdk 动态代理、cglib 动态代理)、代理模式的源码分析原创 2022-12-16 22:40:11 · 1449 阅读 · 0 评论 -
设计模式之建造者模式
建造者模式出上述用途外,其在在 jdk、spring 等源码中以及日常开发中最常用的另外一种方式则是:当一个构造器需要传入很多参数时,其代码可读性会较差,且很容易引入错误,此时就可以利用建造者模式。将一个复杂对象的构建和表示分离,使得同样的创建过程可以得到不同的表示。其主要特点是将产品本身和产品创建过程解耦,且分解产品创建过程,使创建过程更加清晰,同时也方便控制产品的创建过程步骤。建造者模式的概念、建造者模式的结构、建造者模式的优缺点、建造者模式的使用场景、建造者模式的实现示例、建造者模式的源码分析。原创 2022-12-15 12:32:54 · 382 阅读 · 0 评论 -
设计模式之抽象工厂模式
抽象工厂模式的概念、抽象工厂的结构、抽象工厂的优缺点、抽象工厂的使用场景、抽象工厂的实现示例、抽象工厂的源码分析。原创 2022-12-08 19:46:35 · 1248 阅读 · 0 评论 -
设计模式之工厂方法模式
工厂方法模式的概念、工厂方法模式的结构、工厂方法模式的优缺点、工厂方法模式的使用场景、工厂方法模式的实现示例、工厂方法模式的源码分析。工厂方法模式,及简单工厂模式的升级版,其抽象了对象的创建,将对象的具体创建延迟到了其子类中。这样,当有新产品加入时,不用再修改已有的工厂类,只需要增加新产品的实现和新产品对应工厂的实现即刻。原创 2022-12-08 17:55:01 · 541 阅读 · 0 评论 -
设计模式之简单工厂模式
简单工厂模式,与其说是设计模式,不如称它为编程习惯。简单工厂只提供了简单的对象生产能力,且违反了软件设计原则的 开闭原则。其没有被收录在 GoF 的二十三种设计模式中。简单工厂模式的概念、简单工厂模式的结构、简单工厂模式优缺点、简单工厂模式的使用场景、简单工厂模式的实现示例。注:简单工厂模式没有被收录在 GoF 的二十三种设计模式中。原创 2022-12-08 17:49:15 · 330 阅读 · 0 评论 -
设计模式之原型模式
原型模式的概念、原型模式的结构、原型模式的优缺点、原型模式的使用场景、浅拷贝与深拷贝、原型模式的实现示例、原型模式的源码分析 原型模式,即将一个对象作为原型对象,通过对其克隆而复制出多个与原型对象类似的新实例。 使用原型模式创建对象要比使用 new 等关键字创建对象性能好的多,因为原型模式的本质是使用 Object 的 clone() 方法克隆对象,而这个方法是本地方法,它直接操作内存中的二进制流,特别是大对象时,性能差异特别明显。使用原型模式就好比复制粘贴,而不是亲手码。需要注意的是,使用原型模式时需原创 2022-12-07 12:01:22 · 381 阅读 · 0 评论 -
设计模式之单例模式
单例模式的概念、单例模式的结构、单例模式的优缺点、单例模式的使用场景、单例模式的实现示例、序列化和反射与单例模式、单例模式源码分析 单例模式,即只能生成一个实例的模式叫做单例模式。单例模式是只有一个简单的类,没有复杂的调用和接口的设计,只要求这个类无论什么时候只能生成一个实例即可。 如日志应用、应用配置读取、通信、线程池、windows 的任务管理器、垃圾回收站等。 单例模式一般有七种实现方式,即懒汉-线程不安全、懒汉-线程安全、饿汉、饿汉-变种、静态内部类、枚举、双重校验锁。懒汉-线程不安全懒原创 2022-12-06 18:30:09 · 675 阅读 · 1 评论 -
Java 锁
Java 锁java lockJava 中提供了种类丰富的锁,每种锁因其特性的不同而在适当的场景下会展现出非常高的效率。通过锁的特性或者使用场景可以进行以下归类:乐观锁 VS 悲观锁乐观锁和悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在 java 和数据库中都有此概念对应的实际应用。乐观锁:相反,悲观锁认为自己在使用数据的时候不会有别的线程来修改数据,所以在获取数据时不会加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据,如果该数据没被更新则成功写入,如果被其它原创 2021-11-30 11:28:00 · 294 阅读 · 0 评论 -
经典设计模式
经典设计模式二十三种经典设计模式软件设计模式可以让成功的设计和体系结构更加简单方便的复用。它通常包含以下几个基本要素:模式名称、别名、动机、问题、解决方案、、效果、模式角色、合作关系、实现方法、实用性、已知应用、例程、模式扩展和相关模式等。设计模式六大原则单一职责原则(SRP)单一职责原则是指让一个类只负责一件事,当这个类需要负责多件事时,就应该考虑将其拆分成多个类。单一职责原则可以看成是低耦合、高内聚在 oop 上的引申。开放封闭原则(OCP)开放封闭原则是指类对外扩展开放,对内修改关闭原创 2021-11-30 11:09:54 · 519 阅读 · 0 评论 -
BlockingQueue 分批处理数据
BlockingQueue 分批处理数据BlockingQueue 简介 : BlockingQueue 是 jdk-1.5 中新增的并发包(concurrent)中的阻塞队列接口,主要用来实现高并发场景下的数据传输问题。其常见实现类主要有: ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue。队列定义时可设置队列长度,默认长度为 Integer.MAX_VALUE。// 其核心方法如下public interface Bl原创 2021-03-10 20:01:14 · 944 阅读 · 0 评论 -
RateLimiter API 限流
RateLimiter API限流注:并没有做深入研究,只是简单记录 RateLimiter 的使用方法。RateLimiter 与 Semphore :RateLimiter 是 google 的 guava 工具包中提供的限流工具类,而 Semphore 是 jdk 中提供的信号量类。两者都可做限流。RateLimiter 是基于速率限流,常见算法有漏桶算法和令牌桶算法;Sempgore 是基于并发量限流(也就是数量),它是通过线程个数去限流的。RateLimiter 的原理是系统以一个恒原创 2021-02-24 20:34:12 · 703 阅读 · 0 评论 -
多线程
多线程参考与这位大佬多线程与并发的关系:并发是程序的一种允运行状态,多线程是解决这种状态的一种手段方法。并发编程三要素(即并发编程常见的是三个问题):原子性: 原子性指的是一个或者多个操作要么执行成功,要么不执行可见性: 可见性指的是当多个线程共享一个变量时,当其中一个线程修改变量后,其它线程可立刻看到修改结果有序性: 有序性指的是程序执行的顺序按照代码的顺序执行原子性问题:经典例子: 银行转账问题。A 账户向 B 账户转账 1000 元。包括两个步骤,一 A 账户减去 1000 元,原创 2020-09-03 23:39:37 · 165 阅读 · 0 评论 -
数据库事务
数据库事务事务的四个特性:原子性–原子性指的是一个事务中的所有操作要么全部成功执行,要么不执行。当其中一个操作发生异常时,事务回滚。一致性–一致性指的是当一个事务完成后,使数据从一个状态转换到另一个状态,但对于数据的完整性保持一致。隔离性–隔离性指的是当多个用户并发访问数据库时,数据库会给每个用户开启事务,以事务为单位访问,事务之间相互不影响。持久性–持久性指的是事务执行成功后,对数据的修改是持久的。并发事务所造成的问题:丢失更新:第一类丢失–两个事务同时更新一行数据时,当其中一个事原创 2020-09-02 14:10:04 · 138 阅读 · 0 评论 -
数据库优化(sql 优化)
数据库优化创建索引:创建索引可以给检索带来性能上的很大提升(当发现检索慢时首先想到的应该是建立索引)首先应该考虑在 where、order by 所涉及到的列上建立索引在经常需要检索的字段上建立索引,比如用户名、商品名等一个表的索引最好不要超过 6 个,索引固然可以提高检索效率,但同时也降低了 insert 和 update 的效率,因为 insert 或 update 时可能会重建索引对于建立了索引的表要尽可能的避免全表扫描,否则会使索引失效sql 优化:应尽量避免在 where 子原创 2020-08-23 17:37:46 · 151 阅读 · 0 评论 -
RabbitMQ、RocketMQ、Kafka、ActiveMQ
RabbitMQ、RocketMQ、Kafka、ActiveMQ注: 由于本猿键盘Q键坏了,时好时坏,所以下文中的 rabbitmq == rabbitm消息中间件:消息中间件指的是利用高效可靠的消息传递机制进行跨进程、与平台无关的数据交流,可以在分布式环境下扩展进程的通信目前主流的消息中间件有 ActiveMQ、Kafka、RabbitMQ、RocketMQ等MQ使用场景:mq使用场景很多,主要有三个: 解耦、异步、削峰解耦: 解耦主要指的是 A 系统需要与 B C D 系统实现数据交互(原创 2020-08-22 00:49:09 · 272 阅读 · 0 评论 -
MongDB 与 Redis 的区别
MongDB 与 Redis 的区别mongdb 与 redis 都是 Nosql 数据库,mongdb 适合做集群,redis 适合做缓存1、内存机制redis: 数据全部存储在内存中,定期备份到磁盘,当内存不足时可指定 LRU 算法删除mongdb: 数据存储在内存中,由 linux 系统的 mmap 实现,当内存不足时只将热点数据放入内存,其它数据放入磁盘2、数据结构redis: 支持丰富的数据结构,如string、hashes、list、set、sortedsetmongdb: 支持的原创 2020-08-20 17:24:22 · 719 阅读 · 0 评论 -
Redis简介
Redis参考与这位大佬定义:redis 是一个用 C/C++ 开发的开源、高性能键值对的 Nosql 内存数据库。可用作数据库、缓存、消息中间件等特点:性能优秀,数据在内存中读写速度非常快,支持并发 10wQPS单线程单进程,是线程安全的,采用 IO 多路复用机制支持多种数据类型: 字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)支持数据持久化,可将内存中数据存储到磁盘中,重启时加载主从复制、哨兵、高可用可用作分原创 2020-08-20 17:23:07 · 138 阅读 · 0 评论 -
设计模式之代理模式
代理模式定义: 调用者使用代理类来调用目的接口的对象使用场景: 当调用者不想直接调用目的接口对象或者调用者调用目的接口对象存在困难时实现一(静态代理):创建代理类来实现优点: 任何实现目的接口的对象都可以通过代理类来访问,增加了代码的通用性缺点: 当目的接口发生更改时,代理类 也得随之改变;当代理对象非常多时就会显得代理对象特别臃肿目的接口:public interface Subject { void visit();}目的接口实现类(代理对象):public clas原创 2020-08-20 17:20:00 · 88 阅读 · 0 评论 -
设计模式之单例模式
单例模式定义: 确保应用中应用单例模式的类只能有一个实例实现:构造方法私有化,使其不能在外部通过使用 new 关键字来实例化对象在类产生唯一一个 private static 的实例化对象定义一个静态方法返回该对象具体实现一: 饿汉模式(线程安全) 在类加载时就创建对象优点: 实现简单,线程安全缺点: 在类加载时就实例化了对象,使此对象一直存在,当类被卸载时才会释放内存,故在一定情况下消耗内存public class TestOne {原创 2020-08-20 17:18:28 · 109 阅读 · 0 评论 -
docker 集群 springboot 项目
前言关于集群的概念以及集群很分布式的关系或者区别,请各位自行百度,道理大家都懂,只要能理解、知道是怎么回事就行。注:杨千嬅-2019世界巡回演唱会-天津站:2019-12-29,天津体育馆(舒服哦!)准备1、准备两个 springboot 项目,端口自定义,笔者这里都是 80812、这两个 springboot 项目添加两个测试接口,接口都为 /test/hello,且接口返回...原创 2019-11-26 12:13:59 · 261 阅读 · 1 评论