自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 常用排序Java

int age;@Override// 按年龄升序排序// 按年龄降序排序//按照训练次数升序排序@Override。

2025-06-16 13:41:49 126

原创 正则表达式

表示匹配字符串的开头。[a-zA-Z0-9_-] 表示字符集,包含小写字母、大写字母、数字、下划线和连接字符 -。{3,15} 表示前面的字符集最少出现 3 次,最多出现 15 次,从而限制了用户名的长度在 3 到 15 个字符之间。$ 表示匹配字符串的结尾。

2025-06-09 11:11:53 673

原创 MongoDB基础知识(浅显)

与传统的关系型数据库(如 MySQL)相比,最大的区别是它以。以下是一些 MongoDB 的基本操作命令,适用于。每个文档是一个键值对结构,类似于 JSON 对象。文档是 MongoDB 的基本数据单元,以。MongoDB 是一个。

2025-05-26 21:22:38 796

原创 Linux系统下安装mongodb

创建仓库文件添加仓库配置(若需其他版本,替换版本号即可)

2025-05-10 16:47:18 1186

原创 Mysql索引

MySQL中的索引是一种用于加速数据检索的高效数据结构,类似于书籍的目录。它通过优化数据存储和查询路径,显著减少全表扫描的开销。

2025-04-28 20:45:19 386

原创 MySQL数据库引擎

只追加写入:仅支持INSERT和SELECT,不支持修改或删除。,将不同业务模块(如订单、日志、缓存)的数据分散到不同数据库。内存存储:数据完全存储在内存中,读写速度极快。高压缩存储:数据压缩比高,节省磁盘空间。xxx.sdi : 存储表结构信息。,适合短期缓存或中间结果存储。xxx.MYD:存储数据。xxx.MYI:存储索引。

2025-04-20 11:22:40 541 1

原创 Kafka面试题

A 系统跟其他各种乱七八糟的系统严重耦合,A 系统产生一条比较关键的数据,很多系统都需要 A 系统将这个数据发送过来。( )异步:A 系统接收一个请求,需要在自己本地写库,还需要在 BCD 三个系统写库,自己 本地 写库要 3ms ,BCD 三个系统分别写库要 300ms、450ms、200ms。另外,Kafka 的定位主要在日志等方面, 因为 Kafka 设计的初衷就是处理日志的,可以看作是 一个 日志(消息)系统一个重要组件,针对性很强,所以 如果业务方面还是建议选择 RabbitMq。

2025-04-13 11:55:31 283

原创 Spring Boot 自动装配原理

比如,我们使用 Spring 创建 Web 程序时需要导入非常多的 Maven依赖,而 Spring Boot 只需要一个 Maven依赖来创建 Web 程序,并且 Spring Boot 还把我们最常用的依赖都放到了一起,我们只需要 引入spring-boot-starter-web 这一个依赖就可以完成一个简单的 Web 应用。第一步:启动依赖组件的时候,组件中必须包含 @Configuration 的配置类,在这个配置类里面声明为 @Bean 注解,就将方法的返回值或者属性值 注入 IoC 容器中。

2025-04-07 20:11:50 569

原创 锁优化机制

从 JDK1.6 版本之后,synchronized 本身也在不断优化锁的机制,有些情况下他并不会是一个很 重量 级的锁了。优化机制包括自适应锁、自旋锁、锁消除、锁粗化、轻量级锁和偏向锁。锁的状态从低到高依次为无锁-〉偏向锁-〉轻量级锁-〉重量级锁,升级的过程就是从低到高, 降级在 一定条件也是有可能发生的。

2025-03-31 19:56:39 425

原创 自旋锁讲解

自旋锁是一种基于忙等待的锁机制,适用于锁占用时间短、低竞争的场景。自旋锁通过 CAS 操作实现,避免了线程上下文切换的开销。自旋锁的优点是低延迟,缺点是可能浪费 CPU 资源。在实际应用中,可以通过自适应自旋锁或混合锁来优化自旋锁的性能。通过理解自旋锁的原理和适用场景,可以更好地选择和使用锁机制,优化并发程序的性能。

2025-03-24 19:28:20 428

原创 ReentrantLock

: 的内部同步器,继承自 。:非公平锁的实现。:公平锁的实现。构造方法 的实现 是 的核心同步器,继承自 。 是 AQS 的核心方法之一,用于尝试获取锁。公平锁的实现():非公平锁:允许新请求的线程插队,直接尝试获取锁。公平锁:严格按照 FIFO 顺序分配锁,先检查是否有等待线程。 方法 是 AQS 的核心方法之一,用于尝试释放锁。 的核心方法 方法非公平锁的实现:公平锁的实现: 方法 方法:arg:这个参数在ReentrantLock的实

2025-03-16 10:09:04 832

原创 ThreadLocal

通过为每个线程维护一个独立的来实现线程局部变量。是一个自定义的哈希表,key 是实例(弱引用),value 是线程局部变量的值。的核心方法是set()get()和remove()。使用时需要注意内存泄漏问题,及时调用remove()方法清理变量。

2025-03-10 11:05:44 764

原创 线程和进程

是操作系统资源分配的基本单位,拥有独立的内存空间和资源,适合需要高隔离性和安全性的场景。是 CPU 调度的基本单位,共享进程的内存空间和资源,适合需要高并发和资源共享的场景。:同一进程内的线程共享进程的内存空间(如堆、全局变量)和资源(如文件句柄)。一个进程是一个独立的程序执行实例,拥有独立的内存空间和系统资源。一个进程可以包含多个线程,这些线程共享进程的内存空间和资源。:一个进程可以包含多个线程,线程是进程中的执行单元。:线程共享进程的内存空间和资源,而进程之间是隔离的。

2025-03-02 11:21:24 297

原创 CAS(Compare-And-Swap)

需要更新的变量。:认为变量当前的值。:希望将变量更新为的值。CAS 的操作逻辑是:比较内存位置的值是否等于期望值(A)。如果相等,则将内存位置的值更新为新值(B)。如果不相等,则不做任何操作。CAS 的操作是原子的,即在执行过程中不会被其他线程打断。} else {

2025-02-24 19:34:38 448

原创 RabbitMQ入门

服务异步/解耦 :服务之间通过RPC进行通信的方式是同步方式,服务消费方需要等到服务提供方相应结果后才可以继续执行,使用MQ之后的服务通信是异步的,服务之间没有直接的调用关系,而是通过队列进行服务通信, 应用程序解耦合 MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合。消费者接收消息流程: 1、消费者和Broker建立TCP连接 2、消费者和Broker建立通道 3、消费者监听指定的Queue(队列) 4、当有消息到达Queue时Broker默认将消息推送给消费者。

2024-12-09 00:27:25 1333

原创 java内存模型

由于计算机的存储设备与处理器的运算速度有着几个数量级的差距,所以现代计算机不得不多加一层或者多层高速缓存来作为内存和处理器之间的缓冲,使读写速度尽可能接近处理器的运算速度。基于高速缓存的存储交互也带来了一个新的问题,缓存一致性,即当多个处理器的运算任务都涉及到同一块主内存区域时,将可能导致缓存数据不一致。在多路处理器系统中,每个处理器都有自己的高速缓存,而他们又共享同一主内存,这种系统称为内存多核系统为了解决这一问题,需要每个处理器访问缓存的时候都遵守一些协议。

2024-12-02 10:57:44 966

原创 CMS收集器和G1收集器

垃圾收集的目标范围要么是新生代,要么是老年代,再要么是整个Java堆。

2024-11-24 20:14:39 1044

原创 内存分配与回收策略

对象在Survivor区中每熬过一次Minor Gc,年龄就增加1岁,当它的年龄增加到一定程度(默认为15),就会被晋升到老年代中。为了能更好地适应不同程序的内存状况,HotSpot虚拟机并不是永远要求对象的年龄必须达到-XX:MaxTenuringThreshold才能晋升老年代,如果在Survivor空间中相同年龄所有对象大小的总和大于 Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到-XX:MaxTenuringThreshold 中要求的年龄。

2024-11-24 20:10:28 872

原创 docker

restart 重启策略,定义是否重启容器1、no,默认策略,在容器退出时不重启容器2、on-failure,在容器非正常退出时(退出状态非0),才会重启容器3、on-failure:3 在容器非正常退出时,重启容器,最多重启3次4、always,在容器退出时总是重启容器,5、unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。docker-compose -f docker-compose.yaml up -d //-f调用文件。

2024-11-11 11:55:11 901

原创 StringTable

如果你通过字符串字面量来创建字符串(例如),并且这些字面量在编译时就能够确定,那么编译器会尝试将这些字符串放入类的常量池中。在运行时,如果两个字符串字面量具有相同的内容,并且它们都属于同一个类或同一个字符串常量池(在Java 7及更高版本中,字符串常量池是Java堆的一部分,但逻辑上仍然与类的常量池分开管理),那么它们会引用常量池中的同一个字符串对象。因此,在这种情况下,使用==来比较这两个字符串会返回true。new:每次你使用构造函数来创建一个新字符串时,无论内容是否相同,都会在堆上创建一个新的。

2024-11-03 19:54:52 634 1

原创 直接内存、死锁、方法句柄

当td1醒来兵尝试获取o2的锁时,它会被阻塞,因为o2的锁已经被td2持有,同样地,当td2醒来兵尝试获取o1的锁时,因为o1的锁已经被td1持有,这样,两个线程都陷入了等待状态,形成了死锁。7. 由于直接内存在Java堆外,因此它的大小不会直接受限于-Xmx指定的最大堆大小,但是系统内存是有限的,Java堆和直接内存的总和依然受限于操作系统能给出的最大内存。当flag为1时,线程首选获取o1锁,休眠500毫秒,然后尝试获取o2的锁,如果成功过,则打印"1".不受JVM内存回收管理。

2024-10-28 16:43:18 408

原创 类文件结构和字节码指令

1、类型转换指令可以将两种不同的数值类型相互转换。这些转换操作一般用于实现用户代码中的显式类型转换操作,或者用来处理字节码指令集中数据类型相关指令无法与数据类型一一对应的问题。1、Java是面向对象的程序设计语言。虚拟机平台从字节码层面就对面向对象做了深层次的支持。有一系列指令专门用于对象操作,可进一步细分为创建指令、字段访问指令、数组操作指令、类型检查指令。1、操作数栈管理指令:如同操作一个普通数据结构中的堆栈那样,JVM提供的操作数栈管理指令,可以用于直接操作操作数栈的指令。pop、pop2。

2024-10-20 10:35:06 776 2

原创 虚拟机类加载机制

例如java.lang.Object类,无论哪个加载器想要加载此类,都最终会被委派给最顶端的启动类加载器进行加载,确保Object类在程序中的各个类加载器环境中都能保持是同一个类。双亲委派模型的第二次“被破坏”是由这个模型自身的缺陷导致的,双亲委派很好地解决了各个类加载器协作时基础类型的一致性问题(越基础的类由越上层的加载器进行加载),基础类型之所以被称为“基础”,是因为它们总是作为被用户代码继承、调用的API存在,但程序设计往往没有绝对不变的完美规则,如果有基础类型又要调用回用户的代码,那该怎么办呢?

2024-10-13 10:32:10 731

原创 垃圾收集器

标记-复制算法常被简称为复制算法。空闲列表:但如果Java 堆中的内存并不是规整的,已被使用的内存和空闲的内存相互交错在一起,那就没有办法简单地进行指针碰撞了,虚拟机就必须维护一个列表,记录上哪些内存块是可用的,在分配的时候它从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录,这种分配方式称多为“空闲列表”(Free List)。算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。

2024-10-07 08:15:08 1064

原创 集合Collection

put方法直接使用的HashMap中的put方法,但在LinkedHashMap类中,重写了afterNodeAccess(e)和 afterNodeInsertion(evict)方法,解决了LinkedHashMap中的after、before节点的问题。在容量上,hashTable默认为11,扩容为2n+1,而hashMap默认为16,扩容为2倍。HashSet存储的是对象本身,即它存储的是一个元素的集合,这些元素是唯一的。中,所有的值都被设置为一个固定的哑元素(TreeSet基于TreeMap。

2024-09-28 14:13:35 377

原创 HashMap

底层基于散列算法实现,它是一个key-value结构的容器。key不重复jdk8中的HashMap基于数组+链表+红黑树实现不保证键值的顺序可以存入null值非线程安全,多线程下可能存在问题。

2024-09-22 10:12:58 797

原创 HashMap

底层基于散列算法实现,它是一个key-value结构的容器。

2024-09-16 08:26:21 586 1

原创 jedis

/ 编写我们自己的redisTemplate@Bean// json序列化配置// String的序列化// key采用String的序列化方式// hash的key也采用String的序列化方式// value序列化采用jackon@Component@Data//在企业中,我们所有的pojo都会序列化@Autowired@Test// redisTemplate 操作不同的数据类型,api和我们的指令是一样的。

2024-06-01 20:13:53 246

原创 redis

应用:hash变更的数据user name age,尤其是用户信息之类的,经常变更的数据,hash更适合对象的存储,string更加适合字符串的存储。map集合,key—map时候这个值是一个map集合,本质上与string没有太大区别,本质上还是key—value。redis事务本质:一组命令的集合,一个事务中的所有命令都会被序列化,在事务执行过程中,会按照顺序执行。在redis中,我们可以把list当作一个栈,或者一个队列。如果移除所有的值,空链表,也代表不存在。如果key不存在,创建新的链表。

2024-05-25 20:54:01 324

原创 springboot

① 定义条件类:自定义类实现Condition接口,重写matches方法,在matches方法中进行逻辑判断,返回boolean值。matches方法两个参数:·context:上下文对象,可以获取属性值,获取类加载器,获取BeanFactory等·metadata:元数据对象,用于获取注解属性。② 判断条件:在初始化Bean时,使用@conditiona1(条件类.class)注解。

2024-05-18 16:49:08 313

原创 Java Web

dataType:参数类型,默认String,其它值dataType="Integer"defaultvalue:参数的默认值@ApiResponses:用在请求的方法上,表示一组响应。@ApiMode1:用于响应类上,表示一个返回响应数据的信息(这种一般用在post创建的时候,使用@RequestBody这样的场景请求参数无法使用。@ApiIplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面name:参数名。message:信息,例如"请求参数没填好’

2024-05-12 09:13:36 324

原创 log4j

Log4j有三个主要的组件/对象:Loggers(记录器),Appenders (输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。每条日志语句都要设置一个等级(DEBUG、INFO、WARN、ERROR和FATAL)。其中DEBUG<INFO<WARN<ERROR<FATAL。fatal等级最高对应调试信息 一般信息 警告信息 错误信息 严重错误信息。

2024-04-21 10:02:07 1294 1

原创 Spring:

若没有出现Spring Config这一选项,可能是前面的导入 Spring开发的基本包坐标有问题。这周刚开始接触spring ,下周继续学spring。

2024-04-14 14:40:44 178 1

原创 第十一周周记

用String实现字符串拼接,会在方法区中占用大量内存,因为java中字符串是不可变的,每一次拼接都会产生新字符串,即要在字符串常量池中开辟新的空间存储它(产生新的对象)。前者的方法都有synchronized修饰,表示在多线程环境下运行时是安全的,后者没有,在多线程环境下运行是不安全的。3.你可以调用append方法,往里面添加字符串,底层数组满了,会自动进行扩容(底层调用了System.arraycopy()方法,对数组进行扩容,实质就是指向一个更大的数组,原来那个小的由垃圾回收器回收)。

2023-12-31 11:07:47 1794 1

原创 第十周周记

foreach语句与set()和get()方法连用可以用于循环数组列表,从而得到数组列表中的每一个对象。如果有了static,都推荐使用类名称进行调用。如果没有static关键字,必须首先创建对象,然后通过对象才能使用它。原因this代表当前对象,通过谁调用的方法,谁就是当前对象*成员变量:类名称.静态变量 静态方法:类名称.静态方法()原因:因为在内存当中是先有的静态内容,后有的非静态内容。get用于取得属性的值,set用于给属性赋值。静态方法不属于对象,而是属于类的。1.静态不能直接访问非静态。

2023-12-24 15:42:02 397 2

原创 第九周周记

其中Exception是可以抛出的基本类型,在Java类库、方法以及运行时故障中都可能抛出Exception型异常。Exception表示可以恢复的异常,是编译器可以捕捉到的;Error表示编译时和系统错误,表示系统在运行期间出现了严重的错误,属于不可恢复的错误,由于这属于JVM层次的严重错误,因此这种错误会导致程序终止执行。Exception又分为检查异常和运行时异常。注意:缓冲流属于包装流,只能对已有的流进行封装,不能直接关联文件进行操作!缓冲流是一个包装流,目的是缓存作用,加快读取和写入数据的速度。

2023-12-17 08:47:57 383 1

原创 第八周周记

传参,当你不知道要传什么类型的参数时,可以直接将参数定义成Object类型的,这样就可以接收任意类型的参数(JAVA中所有的类都继承自java.lang.Object),但使用时要转换回来。由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象,这就是我们说的向上转型。会丢失子类特有的属性以及方法(如下),当父类对象 Animal 指向的是子类对象 Cat,调用子类 Cat 特有的方法 print 时,会报错。使用对象:变量、方法。使用对象:类、接口、变量、方法。

2023-12-10 09:07:26 548 1

原创 第七周周记

常见的行内元素:<a>、<strong>、<b>、<em>、<i>、<del>、<s>、<ins>、<u>、<span>importment > 行内 > ID选择器 > 类选择器 > 元素选择器 >通配选择器 > 继承。权重是指css选择器的优先级,优先级高的css样式会覆盖优先级底的css样式,优先级越高说明权重越高,反之亦然。常见的块级元素:<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>eg:D:/文件名/文件名/......优先级规则:行内样式>内部样式=外部样式。

2023-12-03 11:33:59 412 1

原创 第六周周记

让父元素的height = line-height,每个子元素都加上: vertical-align:middle;若子元素为块元素,给子元素加上: margin-top,值为:(父元素content-子元素盒子总高)/2。若子元素为行内元素、行内块元素,给父元素加上:text-align :center。若子元素为块元素,给父元素加上: margin : 0 auto;即:可以像处理文本对齐一样,去处理:行内、行内块在父元素中的对齐。1.行内元素、行内块元素,可以被父元素当做文本处理。

2023-11-26 15:32:20 341 1

原创 第五周周记

用于通信的端点是由Socket来定义的,而Socket是由IP地址和端口号组成的。本周学习了java的网络程序设计,有亿点难,根本什么都记不住,什么都不知道。TCP在通信的两端各建立了一个Socket对象,用Socket对象来代表两端的通信端口,并通过Socket产生的IO流来进行网络通信。TCP是通过在端点与端点之间建立持续的连接而通信的,并以字节流的方式发送出去。UDP是一种无连接的传输协议,传输是无序的,也不能确保绝对安全可靠。TCP/IP网络参考模型包括四个层次:应用层,传输层,网络层,链路层。

2023-11-18 22:17:45 56 1

空空如也

空空如也

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

TA关注的人

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