自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 各进制的相互转换

进制每一位上可以是从小到大为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F这16个大小不同的数,即逢16进1,其中用A,B,C,D,E,F(

2023-12-22 17:28:36 397

原创 Rabbitmq

2. 如果不使用信道,那么引用程序就会使用TCP的方式连接到rabbitmq,高峰时每秒成千上万条连接会造成资源的巨大浪费(一条tcp消耗资源,成千上万的tcp会非常消耗资源),而且操作系统每秒处理TCP连接数量也是有限的,必定会造成性能瓶颈。信道是建立在TCP连接上的虚拟连接,就是说rabbitmq在一条TCP上建立成百上千个信道来达到多个线程处理,这个TCP被多个线程共享,每个线程对应一个信道,信道在rabbit都有唯一的ID ,保证了信道私有性,对应上唯一的线程使用。

2023-12-20 18:10:43 338

原创 文件字节数计算

在计算机中无论任何数据的传输、存储、持久化,都是以二进制的形式体现的。那么当我存一个字符的时候,计算机需要持久化到硬盘,或者保存在内存中。这个时候保存在内存、硬盘的数据显然也是二进制的。那么当我需要从硬盘、内存中取出这些字符,再显示的时候,为什么二进制会变成了字符呢?码表其实就是一个字符和其对应的二进制相互映射的一张表。这张表中规定了字符和二进制的映射关系。计算机存储字符时将字符查询码表,然后存储对应的二进制。计算机取出字符时将二进制查询码表,然后转换成对应的字符显示。

2023-12-13 15:59:13 406

原创 双亲委派模型

JVM预定义有三种类加载器,当一个 JVM启动的时候,Java 默认开始使用如下三种类加载器:(1)引导类加载器(Bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader。它负责将<Java_Runtime_Home>/lib下面的核心类库或-Xbootclasspath选项指定的jar包加载到内存中。

2023-12-12 15:53:17 920

原创 SQL优化一般步骤

in查询在进行cost代价计算时(代价 = 元组数 * IO平均值),是通过将in包含的数值,一条条去查询获取元组数的,因此这个计算过程会比较的慢,所以MySQL设置了个临界值(eq_range_index_dive_limit),5.6之后超过这个临界值后该列的cost就不参与计算了。mobile是字符类型,使用了数字,应该使用字符串匹配,否则MySQL会用到隐式替换,导致索引失效。对于推送业务的数据存储,可能数据量会很大,如果在方案的选择上,最终选择存储在MySQL上,并且做7天等有效期的保存。

2023-11-28 10:54:11 848

原创 SpringBoot/SpringCloud 开源项目

SpringBoot 是一个非常流行的 Java 框架,它可以帮助开发者快速构建应用程序。他不仅继承了 Spring 框架原有的优秀特性,而且还通过简化配置来进一步简化了 Spring 应用的整个搭建和开发过程。

2023-09-07 17:18:07 123

原创 Configuration 注解的 Full 模式和 Lite 模式!

在 Full 模式下,在 user() 方法中调用 dog() 方法的时候,调用的是一个代理对象的 dog 方法,在这个代理对象的 dog 方法中,会首先去检查 Spring 容器中是否存在 Dog 对象,如果存在,则直接使用 Spring 容器中的 dog 对象,就不会真正去执行 dog 方法而获取到一个新的 dog 对象了,如果 Spring 容器中不存在 dog 对象,才会创建新的 dog 对象出来。

2023-08-29 17:00:24 106

原创 Spring9种设计模式

(1)source 接口是具体资源访问策略的抽象,也是所有资源访问类所实现的接口。(2)Resource 接口主要提供了如下几个方法:getInputStream():定位并打开资源,返回资源对应的输入流。每次调用都返回新的输入流。调用者必须负责关闭输入流。exists():返回 Resource 所指向的资源是否存在。isOpen():返回资源文件是否打开,如果资源文件不能多次读取,每次读取结束应该显式关闭,以防止资源泄漏。

2023-08-29 15:36:25 34

原创 Java注解使用

这个注解表示这是一个配置类,它会被Spring容器扫描并加载,用于定义Bean的创建和配置。是 Spring Boot 中的一个注解,用于将配置文件中的属性值映射到 Java 类的属性上。通过这个注解,你可以将配置文件中的配置项值直接绑定到相应的 Java 类的属性,从而方便地获取和使用这些属性值。以下是一个简单的示例,演示如何使用在这个示例中,我们定义了一个名为的 Java 类,并使用注解将其与配置文件中的myapp前缀相关的属性绑定。这意味着,如果在配置文件中设置了和这两个属性,它们会自动地映射到。

2023-08-22 10:35:54 234

原创 正则表达式

正则表达式(Regular Expression),简称为正则或者正则式,是一种用于匹配字符串模式的工具。它是一种强大的文本处理工具,广泛用于字符串搜索、替换、验证等操作。在Java中,正则表达式通过。包来实现,提供了一套丰富的API来支持正则表达式操作。

2023-08-21 17:16:45 25

原创 Optional介绍

使用 Optional 时尽量不直接调用 Optional.get() 方法, Optional.isPresent() 更应该被视为一个私有方法, 应依赖于其他像 Optional.orElse(), Optional.orElseGet(), Optional.map() 等这样的方法.6:实例演示- Optional 的三种构造方式: Optional.of(obj), Optional.ofNullable(obj) 和明确的 Optional.empty(),生成user。

2023-08-18 15:58:30 32

原创 字节码指令介绍

在Java程序被编译后,会生成对应的字节码文件,这些字节码文件可以在JVM上执行。字节码的执行由JVM负责,它会解释这些指令并在虚拟机上执行相应的操作。字节码的优势之一是它在不同平台上具有良好的可移植性,因为JVM负责将字节码翻译成特定平台的本地机器码。需要注意的是,不同的Java版本可能会引入新的字节码指令或对现有指令进行修改,以提供新的功能或优化执行效率。astore_1:将操作数栈顶的引用类型值存储到局部变量表中的索引为1的位置。:如果栈顶两个整数值的比较结果为大于等于,则跳转到指定的标签位置。

2023-08-18 15:09:55 176

原创 linux查看日志的方式

显示文件中从第3行起的内容more +3 file.log从文件中查找第一个出现test字符串的行,并从该处前两行开始显示输出more +/test file.log设定每屏显示行数more -5 log2012.log。按照行号:只查看文件的第5行到第10行sed -n ‘5,10p’ file.log按照时间段sed -n ‘/2019-12-17 16:17:20/,/2019-12-17 16:17:36/p’ file.log。shift + G 命令到文件尾部 然后输入?

2023-08-18 11:19:28 997 1

原创 spring、springboot的aop是什么动态代理

基于 JDK 的动态代理基于 Cglib 的动态代理这两者最大的区别在于基于 JDK 的动态代理需要被代理的对象有接口,而基于 Cglib 的动态代理并不需要被代理对象有接口。

2023-08-16 17:22:10 38 1

原创 jdk、cglib动态代理介绍

在 Java 中,动态代理可以使用两种主要的方式实现:JDK 动态代理和 CGLIB 动态代理。下面详细介绍这两种动态代理方式,并提供相应的 Java 代码示例。CGLIB(Code Generation Library)是一个字节码生成库,它可以在运行时动态生成类的子类,用于实现代理。CGLIB 动态代理要求目标类不是。类来生成代理对象的机制。它要求目标类实现一个或多个接口,代理对象会实现这些接口,并将方法调用转发到。JDK 动态代理是使用 Java 标准库中的。类型,并且不需要实现接口。

2023-08-16 17:21:17 62 1

原创 布隆过滤器介绍

布隆过滤器(Bloom Filter)是一种用于快速检索一个元素是否在集合中的数据结构,它具有高效的插入和查询操作,同时占用很少的内存空间。布隆过滤器在大规模数据处理、缓存系统、网络路由器等领域中有广泛的应用,特别适用于需要快速判断元素是否存在的场景。布隆过滤器的核心思想是利用多个哈希函数以及一个位数组来表示一个集合。它的基本结构如下:位数组(Bit Array):布隆过滤器使用一个固定长度的位数组,通常初始化为0。每个位代表一个位置,可以被设置为1或0。

2023-08-16 10:24:06 37 1

原创 java中常见的缓存

在Java中,有几种常见的缓存实现,它们可以用于不同的应用场景来提高性能和降低系统开销。应用场景:适用于数据量大、数据变化较少且需要长期保留的场景,如图片缓存、文件缓存等。应用场景:适用于多服务器环境下需要共享缓存数据的场景,如会话管理、全局状态等。应用场景:适用于读取频繁但数据不经常改变的场景,如配置信息、元数据等。应用场景:适用于Web应用,减少重复请求,提高网页加载速度和用户体验。

2023-08-16 10:18:00 380 1

原创 java高频面试题

装箱(Boxing)和拆箱(Unboxing)是Java中用于在基本数据类型和对应的包装类之间进行转换的概念。装箱(Boxing): 装箱是将基本数据类型转换为对应的包装类对象的过程。在Java中,为每种基本数据类型都定义了对应的包装类,这些包装类位于java.lang包下,如Integer对应intDouble对应doubleBoolean对应boolean等。当我们需要将基本数据类型的值存储在对象中,或者需要将基本数据类型传递给一个接受对象参数的方法时,就需要进行装箱操作。

2023-08-16 10:15:27 48 1

原创 git操作命令

Git常用命令及方法大全下面是我整理的常用 Git 命令清单。几个专用名词的译名如下。本地分支关联远程代码库修改密码后push不上去怎么办?

2023-08-09 15:46:10 31 1

原创 ThreadLocal介绍

Overridetry {这段代码是 Java 中用于管理线程局部变量的代码片段,主要涉及到类的使用。是 Java 中的一个类,它提供了一种线程局部变量的机制,允许你在每个线程中存储和获取各自独立的数据,而不会互相干扰。在多线程环境中,通过,每个线程都可以独立地存储和访问特定于该线程的数据。:这一行定义了一个类型的静态私有常量变量,它用来存储对象。对象的泛型类型参数是要存储的数据类型。:这是一个匿名内部类,它继承了并覆写了其中的方法。

2023-08-08 14:35:50 30

原创 Stream流

来自其他博士的介绍:https://blog.csdn.net/mu_wind/article/details/109516995。

2023-07-28 10:08:27 58 1

原创 线程池的拒绝策略

这意味着任务提交者自己会执行被拒绝的任务。线程池的拒绝策略定义了在线程池达到最大线程数并且任务队列也已满的情况下,如何处理新提交的任务。DiscardOldestPolicy:该策略丢弃最早被放入任务队列的任务,然后尝试重新提交被拒绝的任务。如果对任务丢失不敏感,但希望能够知道有任务被丢弃,可以选择使用DiscardOldestPolicy,允许新任务替换掉队列中的旧任务。如果对任务丢失敏感,可以选择使用CallerRunsPolicy,将任务提交者线程作为工作线程执行被拒绝的任务,确保任务不会丢失。

2023-07-26 17:42:41 167 1

原创 idea快捷键

Ctrl+Shift+F8: 打开断点查看框,用于快速查看或删除断点。 Ctrl+Shift+Enter: 在代码行尾部自动补全,可以补全{}、;等符号。 Shift+Enter: 快速到当前行的下一行起始位置。 Alt+Insert: 快速创建文件或类,也可用于快速创建构造方法、set和get方法、toString方法等。 Ctrl+Alt+L: 代码格式化。 Ctrl+Alt+R: 快速进行Maven清除、编译、安装、打包等操作。 Ctrl+Alt+T: 快速编写try catch fina

2023-07-26 17:18:43 44 1

原创 为什么要同时重写equals方法和hashCode方法,哪一个先执行

当你向集合中添加一个对象时,集合会根据该对象的哈希码来决定在哪个位置存储它,以便后续快速查找。集合类中使用哈希表来存储对象,当不同的对象具有相同的哈希码时,它们将被放置在同一个哈希桶中。方法,目的是让它根据对象的内容来判断相等性,而不是引用的相等性。但通常情况下,我们需要根据对象的内容来判断两个对象是否相等,这时就需要在自定义的类中重写。方法返回不同的值,那么集合类会认为它们是不同的对象,从而可能导致重复元素的出现。最后来回答第二个问题:在Java中,当你使用集合类存储对象时,首先会调用对象的。

2023-07-25 20:05:34 119

原创 线程池七个参数的执行顺序

降低系统资源消耗,通过复用已存在的线程,降低线程创建和销毁造成的开销;提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程创建便立即能够执行。方便线程并发数的管控,因为线程是稀缺资源,若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成CPU过度切换。使用线程池能够进行统一分配、调优和监控。提供更强大的功能,延时定时线程池。线程池的主要参数:核心线程数核心线程会一直存活,及时没有任务需要执行。

2023-07-25 19:56:28 256

原创 MySQL explain详解

本文主要讲述如何通过 explain 命令获取 select 语句的执行计划,通过 explain 我们可以知道以下信息:表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些索引实际使用了,表之间的引用,每张表有多少行被优化器查询等信息。下面是使用 explain 的例子:在 select 语句之前增加 explain 关键字,MySQL会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中)。

2023-07-25 14:29:46 112

原创 Class.forName()和ClassLoader区别

最后调用的方法是forName()这个方法,在这个forName()方法中的第二个参数被默认设置为了true,这个参数代表是否对加载的类进行初始化,设置为true时会类进行初始化,代表会执行类中的静态代码块,以及对静态变量的赋值等操作。源码中的注释只摘取了一部分,其中对参数initialize的描述是:**if {@code true} the class will be initialized.**意思就是说:如果参数为true,则加载的类将会被初始化。方法来手动选择在加载类的时候是否要对类进行初始化。

2023-07-25 14:16:55 22

原创 Dataway 接口配置工具

经过上面的几个步骤我们介绍了如何基于 Spring Boot 项目使用 Dataway 来简单的配置接口。Dataway 的方式确实给人耳目一新,一个接口竟然可以如此简单的配置出来无需开发任何一行代码,也不需要做任何 Mapping 实体映射绑定。

2023-07-25 10:23:26 135

原创 通过反射技术获得的Field类的解析

与前面的注释类似,该数组也是空的,这意味着没有直接应用于该字段的注释。提供的 JSON 似乎是使用属性集合来表示 Java 中的字段。,这意味着默认情况下该字段不可访问,并且可能需要额外的权限才能访问其值。:表示声明此字段的类的完全限定名称的字符串。在本例中,该字段在类中声明。:一个布尔值,指示该字段是否是合成的(由编译器生成)。该字段是冗余的,并且提供与该字段相同的信息。:一个布尔值,指示该字段是否表示枚举常量。:一个布尔值,指示该字段是否可访问。:表示字段的通用类型的字符串。,表示该字段不是合成的。

2023-07-21 14:39:11 81 1

原创 浅谈Redis缓存处理,在项目中如何实现

缓存击穿是指当缓存中某个热点数据过期了,在该热点数据重新载入缓存之前,有大量的查询请求穿过缓存,直接查询数据库。第一种方法比较好理解,就是当数据库中查不到数据的时候,我缓存一个空对象,然后给这个空对象的缓存设置一个过期时间,这样下次再查询该数据的时候,就可以直接从缓存中拿到,从而达到了减小数据库压力的目的。缓存雪崩是指当缓存中有大量的key在同一时刻过期,或者Redis直接宕机了,导致大量的查询请求全部到达数据库,造成数据库查询压力骤增,甚至直接挂掉。第二种方案是使用布隆过滤器,这也是比较推荐的方法。

2023-07-14 14:29:08 46

原创 1. 高频面试题-集合

高频面试题-集合

2022-09-20 07:19:52 116 2

空空如也

空空如也

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

TA关注的人

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