自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 资源 (1)
  • 收藏
  • 关注

原创 JAVA中的lambda使用

当你在Java中使用Lambda表达式时,你可以更简洁地定义一个匿名函数。Lambda表达式可以用来代替某些接口类型的对象,通常是函数式接口,而不需要单独实现接口的方法。是一个接受两个整数参数并返回它们之和的Lambda表达式。接口定义了一个接受两个整数参数并返回一个整数结果的方法。的实例,分别实现了加法和减法的功能。然后,通过Lambda表达式创建了两个。方法中调用这些实例来执行相应的操作。

2024-04-09 11:42:34 136

原创 JAVA中@FunctionalInterface 注解使用

是Java 8引入的一个注解,用于标记一个接口为函数式接口。函数式接口是指只有一个抽象方法(除了Object类中的默认方法如equals、hashCode等)的接口。在Java 8及以后版本中,函数式接口可以与lambda表达式配合使用。,它的目的是提供一个没有参数,但返回值类型为T的方法实现。接口的lambda表达式。

2024-04-09 11:09:10 236

原创 Java中的内部类

在Java中,内部类(Inner Class)是指在一个类的内部定义的另一个类。在上述示例中,内部类的设计提高了代码的封装性和灵活性,使得类与类之间的关系更加紧密,同时也增加了代码的复杂度,应当根据实际情况权衡是否使用内部类。匿名内部类是没有名字的内部类,通常用于简化单次使用的类的创建过程,常用于事件监听、适配器等场景。局部内部类是在方法或者代码块内部定义的类,它的作用域只限于所在的方法或代码块。

2024-04-02 14:07:44 598

原创 Java中的原型模式

方法时,将创建一个原始对象的副本,这样修改克隆对象的属性不会影响到原始对象。注意在实现深克隆时,需要确保对象的所有属性也都进行适当的深度复制,例如在本例中,日期对象进行了克隆以防止浅克隆带来的数据共享问题。Java中的原型模式是一种创建型设计模式,它通过复制已有对象来创建新的对象,而不是每次都创建一个新的实例。这个模式适用于那些创建新对象的成本较大或者需要保持对象属性一致性的场景。在Java中,通常通过实现。接口,这意味着它可以被克隆。方法来实现原型模式。

2024-04-02 11:05:55 562

原创 Java中的装饰器模式

在Java中,装饰器模式允许我们动态地给对象添加新的行为或责任,而无需修改原有类。以下是一个简单的装饰器模式示例,我们将模拟一个咖啡销售系统,其中基础饮料类(Component)是Coffee,装饰器类(Decorator)用来添加额外的调料。运行上述代码后,将会输出每种咖啡的描述和对应的价格,展示了如何通过装饰器模式动态地添加不同的调料并计算总成本。

2024-04-02 10:24:04 696

原创 Node.js常用命令

Node.js本身提供了一些核心命令行工具,而围绕Node.js生态,最常用的是与其包管理器npm相关的命令。以上列举的是Node.js和npm的部分常用命令,实际上还有很多其他命令和子命令,具体使用时请参照官方文档以获得完整和最新的信息。打开Node.js的交互式解释器环境,可以在此环境中编写和立即执行JavaScript代码。安装指定的Node.js模块到当前项目,并写入。显示当前项目所有已安装的模块及其版本。在npm注册表中搜索包含关键字的模块。输出当前安装的Node.js版本。获取特定配置项的值。

2024-04-01 13:28:40 954 1

原创 npm常用命令详解

文件,该文件包含了项目的基本信息,比如名称、版本、作者、描述、入口文件、依赖关系等。以上就是npm一些基本且常用的命令,npm的功能非常丰富,还有更多高级选项和功能可以根据实际需求查阅官方文档或相关教程。这个命令会启动一个交互式的向导,帮助你在项目根目录下创建一个。这两个命令都会显示您当前安装的npm的版本。安装指定的模块到当前项目的。部分(生产环境依赖)在。

2024-04-01 11:57:29 515

原创 JAVA中的中文乱码原因解析和解决方法

Java编程中,中文乱码问题主要源于字符编码的不一致。

2024-03-31 12:48:03 300

原创 MySql的下载与安装

这样就完成了在CentOS 7系统中MySQL 8.0的基本下载和安装流程。请注意,由于MySQL版本更新和策略变化,具体的安装命令和过程可能会有所变动,建议在安装时参照官方最新文档进行操作。请根据实际情况和实际安装界面提示操作,以上步骤可能会因MySQL发行版本的不同而有所差异。在安装过程中,请留意具体的提示信息,按照官方文档或安装向导的指引来完成安装和配置工作。: 添加MySQL官方的Yum源以便直接通过yum命令安装MySQL 8.0。: 首先,登录到您的CentOS 7服务器并打开终端。

2024-03-31 08:00:04 877

原创 Spring OAuth2 Resource Server 配置

Spring OAuth2 Resource Server 是 Spring Security 中的一个模块,用于保护资源服务器上的API资源,确保只有持有合法访问令牌(access token)的客户端才能访问受保护的资源。

2024-03-29 15:29:42 770

原创 Java 中的 Flux 类

这段代码首先创建了一个包含数字1到5的Flux,然后将每个元素转换为字符串,接着过滤出偶数,每发出一个元素就立即打印出来,并为每个元素设置了100毫秒的延迟。最后订阅了这个Flux,使得处理流程得以启动。类是 Reactive Streams 规范在 Reactor 库中的实现,用于处理包含零个、一个或多个元素的异步序列。是一种响应式流类型,适用于处理连续的数据流,例如网络请求、数据库查询结果集、事件流等。

2024-03-28 15:06:32 821

原创 Java中的Mono类

类是Spring Reactor框架中的一个核心组件,它是Reactive Streams规范的一个实现,主要用于处理包含零个或一个元素的异步序列。Mono可以代表未来某个时刻可能出现的单一值,或者表示没有值(即空值)。这种类型的反应式类型非常适合那些你期望返回单个结果(比如查询数据库得到的单个实体)的情况。注意:由于Mono是冷信号(Cold Signal),直到订阅发生时才会执行相关逻辑。因此,它的优势在于能够构建灵活且高效的异步处理管线。

2024-03-28 15:05:37 869

原创 浏览器如何渲染页面

如果JavaScript修改了DOM结构或CSS样式,或者有其他交互导致页面变化,浏览器会重新执行部分或全部上述步骤(如布局、绘制等)以反映新的状态。浏览器将DOM树与CSSOM树结合,形成渲染树(Render Tree),它包含了每个可见节点的样式信息。通过这个例子可以看出,浏览器渲染页面是一个有序且相互关联的过程,涉及网络通信、文档解析、样式计算、布局以及最终的图形绘制等多个环节。属性,浏览器将在文档解析完成后,DOMContentLoaded事件触发前,执行JavaScript代码(在此例中为。

2024-03-26 15:35:56 286

原创 浏览器事件循环原理

由于setTimeout的延时时间为0,虽然它已经注册,但在实际应用中,至少要等到本次事件循环的微任务队列执行完毕后才会执行(实际延时通常大于0,这里是理想化表述)。5. 一旦宏任务执行完毕,主线程再次空闲,继续检查微任务队列,若有微任务则继续执行,否则继续等待新的宏任务到来,如此循环往复。- 创建一个Promise,并在其内部立即执行同步代码块,打印'2. 同步代码块内的微任务'- 清理并执行微任务队列中的所有微任务。- 执行宏任务队列中的下一个宏任务。- 执行微任务'4. 微任务'

2024-03-26 15:31:27 170

原创 JAVA中CAS原理

在Java中,CAS(Compare-and-Swap)是一种无锁算法,通过JNI(Java Native Interface)调用本地方法来利用处理器提供的原子指令实现。这意味着即使在高并发环境下,多个线程同时尝试更新同一变量时,只有一个线程能成功完成更新,其余线程将继续循环尝试直至成功,从而确保了在无锁的情况下也能实现并发控制和数据一致性。方法接受两个参数:当前预期的值和新的值。这个方法尝试将原子整数的值从预期的当前值更新为新值,如果当前原子整数的实际值与预期值相匹配,则更新,并返回。

2024-03-25 09:09:34 450

原创 进程通信(生成者-消费者)

同步块或方法中使用,因为它们依赖于对象的监视器(monitor),只有持有对象监视器的线程才能调用这些方法。下面是一个简单的例子,展示如何在一个生产者消费者模型中使用。方法的配合使用,实现了生产者和消费者线程之间的同步和通信。是用于线程间协作和同步的重要方法,它们都定义在。

2024-03-25 09:06:19 421

原创 线程间通信

在这个例子中,有两个线程分别扮演生产者和消费者的角色,共享一个资源。的代码逐步执行,但是如果每个线程间都孤立地运行,就会造资源浪。务,那么这些线程之间就需要互相协调,这个过程被称为线程的通信。线程是操作系统调度的最小单位,有自己的栈空间,可以按照既定。线程的通信可以被定义为:当多个线程共同操作共享的资源时,线。程间通过某种方式互相告知自己的状态,以避免无效的资源争夺。方法是线程间通信和同步的核心机制,它们位于。方法,它会唤醒所有等待在该对象上的线程。方式的线程间通信使用对象的。通知、共享内存、管道。

2024-03-24 12:52:55 326

原创 无锁、偏向锁、轻量级锁和重量级锁

状态、偏向锁状态、轻量级锁状态和重量级锁状态,这些状态随着竞争。内置锁可以升级但不能降级,意味着偏向锁升级成轻量。自动获取锁,降低获取锁的代价。线程来竞争锁时,先用偏向锁,表示内置锁偏爱这个线程,这个线程要。偏向(独占)锁了,锁会升级为轻量级锁,两个线程公平竞争,哪个线。版本为了减少获得锁和释放锁所带来的性能消耗,引入了偏向锁和。偏向锁是指一段同步代码一直被同一个线程所访问,那么该线程会。当有两个线程开始竞争这个锁对象时,情况就发生变化了,不再是。重量级锁会让其他申请的线程之间进入阻塞,性能降低。

2024-03-24 12:36:53 409

原创 JOL工具查看java对象布局

JOL(Java Object Layout)是一个用于分析Java对象在Java虚拟机(JVM)中内存布局的小工具包。另外,JOL也提供了一个命令行工具,可以直接通过命令行参数传入类名查看其内存布局,但这种方式可能需要额外配置并直接运行JOL项目的相关类。请注意,实际使用的JOL版本号可能会有变化,应当查阅最新的JOL文档或Maven仓库确定正确的版本号。类的对象在内存中的布局信息,包括对象头、实例变量、对齐填充等内容。首先,在Maven项目中引入JOL工具的依赖,将以下内容添加到。

2024-03-23 14:34:32 139

原创 java对象结构

组,那么此字段必须有,用于记录数组长度的数据;对象体包含对象的实例变量(成员变量),用于成员属性值,包括。对象的地址,虚拟机通过这个指针来确定这个对象是哪个类的实。数组,那么此字段不存在,所以这是一个可选字段。实例)结构包括三部分:对象头、对象体和对齐。对齐字节也叫作填充对齐,其作用是用来保证。对象头包括三个字段,第一个字段叫作。(类对象指针),用于存放方法区。的内存管理要求对象起始地址必须是。的倍数,当对象的实例变量数据不是。于存储自身运行时的数据,例如。时,便需要填充数据来保证。

2024-03-23 14:30:21 108

原创 桥接模式简介

在Java中,桥接模式(Bridge Pattern)的核心思想是将抽象部分与其实现部分分离,使其可以独立变化。以下是桥接模式的一个简单示例,我们将创建一个图形渲染系统,该系统允许用户选择不同的形状(抽象部分)和不同的颜色策略(实现部分)。这样,我们就可以独立地修改图形种类或颜色策略,而不影响彼此的实现细节。这就是桥接模式的应用。是抽象部分,它定义了所有图形共有的行为(绘制),但是不关心如何绘制颜色。是抽象部分的具体实现,它们都依赖于。则是实现部分的抽象接口,接口来决定颜色策略。

2024-03-22 16:33:20 1011

原创 单例模式的实现方式

方法时才进行实例化,为了解决线程安全问题,懒汉式单例可以通过同步方法或双重检查锁定机制来确保多线程环境下的安全性。其中,双重检查锁定(DCL)是常用的优化手段,它既保证了线程安全,也避免了每次都进行同步操作带来的性能损耗。在上述代码中,饿汉式单例在类被加载时就完成了实例化,所以它是线程安全的;而懒汉式单例则是在第一次调用。

2024-03-22 16:22:31 604

原创 数据库的分类,特征和介绍

每种类型的数据库都有其独特的优缺点和适用场景,选择哪种数据库取决于项目需求、数据结构的复杂性、可扩展性要求、性能需求等因素。

2024-03-21 13:45:19 341

原创 mysql 索引 B+tree

注意,内存中的页并不直接反映磁盘上的物理布局,而是经过了数据库系统的逻辑组织和管理,确保了即使在不同的硬件环境下,也能保持高效的读写性能。时,MySQL 会从内存缓存池(Buffer Pool)中查找对应的 B+Tree 索引页,如果不在缓存中则从磁盘读取。从根节点开始,沿着键值比较的路径向下遍历,最终到达存储该。内存中加载了一个 B+Tree 的索引页,这个页包含了多个槽(slot),每个槽包括键值(如。的叶子节点,叶子节点中找到对应的记录指针,再通过该指针获取完整的数据行。

2024-03-21 13:37:21 829

原创 Redis单线程实现高并发原理

不过,在一些极端场景下,比如涉及到大量计算的任务或者大量阻塞式操作时,单线程架构可能会成为性能瓶颈,但Redis通过精简设计和针对性优化,依然在多数实际应用中表现出良好的并发性能。: Redis 主线程开始处理事件,即读取客户端发来的命令请求。: Redis 通过使用操作系统提供的 I/O 多路复用机制,如 Linux 中的 epoll、BSD 系统的 kqueue,或者是旧版本中使用的 select 和 poll 等 API,可以在单一线程中同时监控多个客户端 socket 的读写事件。

2024-03-20 11:17:46 1101

原创 Redis设计原理简介

键值存储模型:单线程架构:内存管理:数据结构和编码:网络模型:

2024-03-20 11:02:36 411

原创 高并发IO底层原理浅析(十)

本节主要讲述一下Netty中的Future-Listener机制;

2024-03-19 16:53:20 537

原创 高并发IO底层原理浅析(九)

在Netty中,Channel 和 ChannelPipeline 是两个核心组件,用于处理网络通信的各个环节,如连接管理、数据读写、编解码、业务逻辑处理等。下面我将详细解释这两个组件的设计原理以及如何使用它们。

2024-03-19 16:38:12 839

原创 高并发IO底层原理浅析(八)

在Netty中,EventLoopGroup 是一个核心组件,它负责处理和调度网络事件。它是 Netty 的异步I/O模型的基础,实现了多路复用器(Selector)与线程池的结合,以高效地处理连接、读写等网络事件。这节我们详细研究一下 netty ,我们先看 netty中的EventLoopGroup组件。

2024-03-18 12:14:14 547

原创 Java里的callable的实现原理

在Java并发编程中,Runnable、Callable、Future、RunnableFuture 和 FutureTask 这些接口和类都是为了支持异步任务执行和结果获取而设计的。下面分别说明它们的设计原理并提供使用范例。RunnableFuture 同时继承了 Runnable 和 Future 接口,这意味着它是一个可运行的任务,同时也能作为 Future 来获取结果。Runnable 是 Java 中最基本的线程任务接口,它只包含一个 run() 方法,用于定义线程需要执行的任务。

2024-03-18 12:00:53 376

原创 高并发IO底层原理浅析(七)

【代码】高并发IO底层原理浅析(七)

2024-03-14 10:06:10 422

原创 高并发IO底层原理浅析(六)

Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端的编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发。

2024-03-14 09:51:12 787

原创 python中的排序(二)

list.sort() 和 sorted() 接受布尔值的 reverse 参数。注意 blue 的两个记录如何保留它们的原始顺序,以便 (‘blue’, 1) 保证在 (‘blue’, 2) 之前。上面显示的键函数模式非常常见,因此 Python 提供了便利功能,使访问器功能更容易,更快捷。这个美妙的属性允许你在一系列排序步骤中构建复杂的排序。模块有 itemgetter() 、attrgetter() 和 methodcaller() 函数。这意味着当多个记录具有相同的键值时,将保留其原始顺序。

2024-03-07 09:49:30 580 1

原创 python中的排序(一)

list.sort() 和 sorted() 都有一个 key 形参来指定在进行比较之前要在每个列表元素上进行调用的函。另外一个区别是,list.sort() 方法只是为列表定义的,而 sorted() 函数可以接受任何可迭代对象。你也可以使用 list.sort() 方法,它会直接修改原列表(并返回 None 以避免混淆),通常来说它不如。key 形参的值应该是一个函数,它接受一个参数并并返回一个用于排序的键。它会返回一个新的已排序列表。sorted() 方便———但如果你不需要原列表,它会更有效率。

2024-03-07 09:37:49 421

原创 高并发IO底层原理浅析(五)

Reactor模式常用于高性能网络服务器的设计中,它可以有效地提高系统资源利用率,降低延迟,提高吞吐量。例如,在Java NIO库中,Selector就是Reactor模式的一个典型应用实例;而在Node.js中,其事件循环机制也体现了Reactor模式的思想。Reactor模式是一种事件驱动设计模式,主要用于处理高并发的I/O操作。它在操作系统级别利用非阻塞I/O和事件多路复用技术来同步地监听和分发多个客户端请求到相应的处理器上。

2024-03-05 09:58:22 634

原创 Redis使用实战经验(一)

由于Redis内存在管理上的复杂性,尤其是对于压缩编码和共享对象池等因素的存在,直接通过命令得到的结果是最准确的。分析访问模式和数据增长趋势,调整数据库配置和架构,比如是否采用集群部署、分片技术来分散负载和存储压力。

2024-03-05 09:35:32 984

原创 高并发IO底层原理浅析(四)

在单个线程中,Selector可以监听和管理多个Channel上的事件,这样就极大地提高了服务器端处理大量并发连接的效率。原理: Selector基于操作系统提供的I/O复用API实现,例如Linux下的epoll或Windows下的IOCP等,它可以同时监控多个Channel,当任何一个Channel上有新的可读、可写或有连接建立等事件发生时,Selector会将这些事件通知给应用程序。注意,实际应用中可能还需要考虑异常处理、数据完整性和线程安全等问题。

2024-03-04 09:29:51 422

原创 高并发IO底层原理浅析(三)

在Java NIO中,Buffer(缓冲区)是核心组件之一,用于存储不同类型的数据,如字节、字符、短整型、整型、长整型和浮点数等。其中,最常用的可能是ByteBuffer,因为它可以处理原始的字节数据,适合于网络和文件I/O操作。此外,NIO Buffer还提供了许多其他的方法,例如rewind()用于重新读取缓冲区内容,slice()用于创建现有缓冲区的部分视图,以及各种get()和put()的变体方法用于处理不同数据类型等。

2024-03-04 09:23:25 416

原创 高并发IO底层原理浅析(二)

在Java NIO中,Channel是用于进行数据读写的基础组件,它是连接到能够执行I/O操作的实体(如文件、套接字)的对象。Channel类似于传统IO中的InputStream和OutputStream,但与之不同的是,Channel是双向的,可以同时用于读取和写出数据,并且通常配合Buffer对象使用以提高效率。以上示例展示了如何创建并使用不同类型的Channel进行I/O操作,实际场景中往往还会结合Selector来进行高效的多路复用,从而在一个单线程中处理多个Channel上的事件。

2024-03-03 10:48:59 444

原创 高并发IO底层原理浅析(一)

高并发IO的底层原理主要涉及操作系统如何处理大量并发的输入输出请求,以及Java NIO(New IO)框架是如何在Java层面利用这些机制来提高性能和并发能力的。

2024-03-03 10:27:02 412

高项知识点-重要的输入输出工具和技术重点标记

高项知识点-重要的输入输出工具和技术重点标记

2024-03-26

python编写俄罗斯方块游戏

python编写俄罗斯方块游戏 ,主要使用pygame

2024-03-26

信息系统项目管理师主要公式详解

信息系统项目管理师主要公式详解

2024-03-26

软考高项-文字题案例总结知识点,速记必备

软考高项-文字题案例总结知识点,速记必备,备考必备,抓重点,抓得分点。

2024-03-03

websphere mq 介绍

websphere mq 介绍 产品应用介绍 功能简介

2009-09-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除