自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式锁实现方式

此外,通过监听机制,能够有效减少客户端的轮询,提高锁的获取效率。然而,需要注意的是,频繁地在ZooKeeper上创建和删除节点可能会对其性能造成影响,因此,在设计分布式锁方案时,需要考虑到这一点。一旦前面的节点(即客户端监听的节点)被删除(通常是因为持有锁的客户端完成任务并释放了锁),ZooKeeper会通知该客户端,客户端再次判断自己是否为最小节点,如果是,则获取锁;如果不是,它就找到比自己序号小的最近的那个节点,然后在该节点上注册一个监听器(watcher),等待这个节点被删除。

2024-03-31 20:49:40 1231 1

原创 TCP长连接与短链接的区别

TCP长连接,也称为持久连接,指的是在通信双方建立连接后,保持这个连接长时间开启,允许在同一连接上进行多次数据传输。长连接减少了建立和断开连接的频繁操作,适用于需要频繁通信的应用场景。在使用长连接时,需要注意维护连接的健康状态,比如通过心跳机制来检测连接是否仍然有效。短连接的特点是简单、直接,但如果客户端频繁地请求服务器,会因为频繁建立和断开连接而造成资源的浪费,降低系统的整体性能。长连接适合通信频繁、需要维持连接状态的应用,能有效减少TCP握手的开销,提高通信效率。

2024-03-31 19:41:03 605

原创 Java浅拷贝,深拷贝和引用拷贝区别

在 Java 中,拷贝(复制对象)有三种方式:浅拷贝、深拷贝和引用拷贝。它们之间的区别主要在于拷贝的程度和拷贝后对象之间的关系。

2024-03-28 20:31:01 233

原创 方法重写时的原则

3.子类方法的访问修饰符(如 public、protected、default、private)的范围必须大于或等于父类方法的访问修饰符,这是为了确保子类可以访问到父类中的方法。2.子类方法声明抛出的异常类型必须是父类方法声明抛出的异常类型的子类,或者与父类方法声明的异常类型相同。子类方法的返回值类型必须是父类方法的返回值类型的子类或相同类型,这样做的原因是确保在多态调用时不会发生类型转换错误。因为如果子类方法的返回值类型比父类方法的返回值类型更大,那么在多态调用时,可能会丢失一些信息或发生类型转换错误。

2024-03-28 19:38:38 391

原创 线程创建的几种方式

【代码】线程创建的几种方式。

2024-03-28 18:30:02 116

原创 双重检验锁实现单例

【代码】双重检验锁实现单例。

2024-03-27 15:58:16 338

原创 后台启动springBoot项目

【代码】后台启动springBoot项目。

2024-02-03 16:28:06 428

原创 ConcurrentHashMap源码解析

concurrentHashMap是一个线程安全的集合,在HashMap基础上进行了优化,在JDK1.7中,ConcurrentHashMap由一个个的Segment组成,每个Segment就是一个类似于HashMap的结构,每个Segement可以单独上锁,因此ConcurrentHashMap的最大并发度就是segment的个数,当插入元素时候,要先获得segment锁。同时在JDK1.8中,不再是以Segment为锁,而是以链表或者红黑树的头节点为锁。JDK1.8的put方法,

2024-01-16 10:52:10 859

原创 HashMap源码解析

与JDK1.7的put方法差异,主要在与出现哈希冲突时,采用的是头插入插入到链表头节点,也就是说新节点成为链表的第一个节点,而原来的头节点成为新节点的下一个节点。HashMap有4种构造方法,1.无参构造方法,2.传入参数为Map集合的构造放法,3.传入参数为初始容量的构造方法,4.传入参数为初始容量和负载因子的构造方法,注意即使hashMap构造方法传入了初始容量,HashMap也会将其扩容为最接近2的幂次方大小。节点不是要找的节点,则遍历该位置上的链表或红黑树,逐个比较节点的哈希值和键,当节点。

2024-01-15 15:50:18 693

原创 RockMQ面试题(1)

Producer:消息的发送者;举例:发信者Consumer:消息接收者;举例:收信者Broker:暂存和传输消息;举例:邮局NameServer:管理Broker;举例:各个邮局的管理机构Topic:区分消息的种类;一个发送者可以发送消息给一个或者多个Topic;一个消息的接收者可以 订阅一个或者多个Topic消息 MessageQueue:相当于是Topic的分区;用于并行发送和接收消息。

2024-01-09 12:47:32 968

原创 LC509. 斐波那契数

【代码】LC509. 斐波那契数。

2024-01-08 15:08:04 520

原创 多线程轮流打印a,b,c

在这个示例中,我们使用了ReentrantLock和Condition来实现线程之间的协作。每个线程在打印自己的字符后,会唤醒下一个线程,并等待自己的下一个轮次。通过这种方式,三个线程可以轮流打印出"abcabcabc..."这样的字符串。

2024-01-07 20:55:33 464

原创 SQL注入是什么呢?

为了防止SQL注入攻击,开发人员需要对用户输入进行充分的验证和过滤,使用参数化查询或者ORM框架来构建SQL查询语句,避免直接拼接用户输入到SQL语句中。攻击者可以在输入字段中插入恶意的SQL代码,这些代码会被拼接到应用程序原本的SQL查询语句中,从而改变原本的查询逻辑,甚至执行恶意操作。在这个例子中,`#{userId}`就是一个参数,当这个参数传递给SQL查询语句时,MyBatis会自动将其转换为一个安全的参数化查询,而不是简单地将用户输入直接拼接到SQL语句中。

2024-01-07 20:50:56 620

原创 Java单例模式

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。单例模式通常用于那些需要在整个应用程序中共享状态或资源的类,例如配置信息、日志对象、数据库连接池等。使用单例模式可以避免在多个地方创建多个实例,从而节省系统资源,并确保所有代码都在操作同一个实例,避免了实例之间状态的不一致性。单例模式的实现通常包括以下几个要点:1. 将类的构造函数私有化,防止外部直接实例化该类。2. 提供一个静态方法来获取该类的实例,通常命名为getInstance()。

2024-01-06 21:42:22 459

原创 happens before 和 as if serial

happens-before关系可以通过一些规则来确定,比如对volatile变量的写操作 happens-before 后续对该变量的读操作,对锁的释放操作 happens-before 后续对该锁的获取操作等。是指两个操作之间的顺序关系。如果操作A happens-before操作B,那么操作A的结果将对操作B可见,即操作B将看到操作A的影响。然而,对于多线程程序,开发者需要意识到虚拟机的重排序和优化可能会影响多线程程序的正确性,需要使用同步机制和内存屏障来确保多线程程序的正确执行。

2024-01-06 18:50:24 484

原创 Volatile关键字原理

volatile 的底层实现原理是内存屏障,Memory Barrier(Memory Fence)对 volatile 变量的写指令后会加入写屏障,写屏障保证在该屏障之前,对共享变量的改动都存到主存中。对 volatile 变量的读指令前会加入读屏障,读屏障(lfence)保证在该屏障之后,对共享变量的读取,加载的是主存中最新数据。

2024-01-06 14:35:14 393

原创 什么是索引下推

在使用索引下推之后,在存储引擎查询到满足name条件的两条数据之后,(1,张三,20),(10,张四,19),并不会立即回表查询,而是继续判断age是否等于20,如果不是就过滤掉,因此这个时候满足条件的只有(1,张三,20),然后会根据id回表查询,因此这个时候就只会经历1次回表查询,减少了磁盘io的次数,提高检索效率。在没有使用索引下推的情况下,MySQL根据联合索引查询name字段满足"张%"的数据,假设有两条(1,张三,20),(10,张四,19);

2024-01-05 15:20:43 982

原创 MySQL索引失效场景及原理

如果没有遵循这个规则,如查询条件中只有第二个字段,因此无法将该字段与索引中已经按照第一列字段排序的结果进行比较,因此失效。or前后连接了两个条件,意味着会查询满足任意条件的数据,如果其中一个没有索引,那么显然该字段无法使用索引。因为索引保存的是索引字段的原始值,因此对索引进行函数运算之后,就无法与索引节点中的值进行比较,因此失效。对于索引是字符类型的,如果使用时候没有加引号,如phone字段是字符类型,但是使用时候没有加引号。则因为无法与索引节点进行比较,进行二分查找,因此索引会失效。

2024-01-05 14:50:55 481

原创 Vue中break关键字

可以发现这次case 3 和 case 4均被执行了,并且由于在case 3中数据已经被筛选成case 3的数据,因此在经过case 4时,数据再经过一次过滤,data就变成空。以上代码是实现下拉列表切换数据的功能,这里有一个地方需要注意,也就是每一个case都要对应一个break。下面这段代码,case "3"中没有break关键字。

2024-01-04 14:56:25 755

原创 Vue计时器的使用

【代码】Vue计时器的使用。

2024-01-04 14:54:01 553

原创 如何在Linux中安装docker

1.首先卸载旧版本的Docker,若没有安装过Docker,可跳过本步。资料来源:Java微服务技术栈全套:BV1LQ4y127n4。8.docker加速。

2024-01-03 18:50:29 726

原创 浏览器输入www.baidu.com发生了什么

2024-01-03 13:06:40 431

原创 LC98. 验证二叉搜索树

【代码】LC98. 验证二叉搜索树。

2024-01-03 10:17:54 473

原创 计算机网络面试题总结

Network | JavaGuide(Java面试 + 学习指南)Cookie和Session都是用来在Web应用中跟踪用户状态的机制,但它们有一些重要的区别:存储位置:Cookie:存储在客户端(用户的浏览器)中,以文本文件的形式保存在用户的计算机上。Session:存储在服务器端,通常存储在服务器的内存中或者数据库中。数据存储方式:Cookie:以键值对的形式存储在客户端,可以设置过期时间,可以存储在客户端的硬盘上。

2024-01-02 12:44:27 928

原创 CountDownLatch,Semaphore,CyclicBarrier使用案例

总的来说,CountDownLatch用于等待其他线程的完成,Semaphore用于控制并发线程数量,CyclicBarrier用于多阶段任务的协作。

2024-01-02 12:11:38 515

原创 LC538. 把二叉搜索树转换为累加树

【代码】LC538. 把二叉搜索树转换为累加树。

2024-01-02 09:16:30 350

原创 LC122. 买卖股票的最佳时机 II

【代码】LC122. 买卖股票的最佳时机 II。

2024-01-01 16:19:31 603

原创 虚拟机类加载机制

类的生命周期指的是在Java程序中,一个类从编写到被加载、连接、初始化、使用、卸载的整个过程。类的生命周期可以分为以下几个阶段:加载,验证,准备,解析,初始化,使用,卸载。加载阶段是指将类的字节码文件加载到内存中,并生成一个代表该类的Class对象;加载阶段的工作由类加载器(ClassLoader)来完成,包括通过类的全限定名查找字节码文件,并将字节码文件加载到内存中。连接阶段包括验证、准备和解析三个步骤验证:确保被加载的类符合Java虚拟机规范,不会造成安全问题。

2024-01-01 12:51:45 645

原创 MySQL常见面试题汇总

何谓事务?何谓数据库事务?那数据库事务有什么作用呢?事务特性并发事务带来了哪些问题?不可重复读和幻读有什么区别?并发事务的控制方式有哪些?SQL 标准定义了哪些事务隔离级别?MySQL 的隔离级别是基于锁实现的吗?MySQL 的默认隔离级别是什么?

2023-12-28 15:55:08 608 1

原创 垃圾收集器与内存分配策略

不再使用的对象在系统中未被回收,内存泄漏的积累可能会导致内存溢出。

2023-12-28 15:51:05 1015

原创 Mysql抛出Access denied for user root @ 117.136.87.184 (using password: YES)

解决方法:执行下列命令授予root远程访问权限即可。

2023-12-27 20:06:41 369

原创 Java集合

Java集合主要包括Collections(存放单一元素)和Map(存放键值对)Collections包括:Set,List,QueueSet包括HashSet,LinkedHashSet,TreeSetList包括ArrayList,LinkedList,VectorQueue包括PriorityQueue,DelayQueue,ArraDequeMap包括:HashMap,LinkedHashMap,Hashtable,TreeMap。

2023-12-27 15:01:53 1461

原创 Java虚拟机内存区域

总结黑马程序员笔记。

2023-12-27 15:00:25 1121

原创 Vue从数组中取出数据并以key-value结构存储

这个属性是Vue.js内部使用的,用于实现数据的响应式追踪和观察。我想将其中的 id和name属性取出来,并以key-value结构放入集合中。由于这种后端传过来的数据对象是Vue.js的响应式对象,并且包含一个名为。属性,并以key-value结构保存到一个新的数组中,需要先使用。函数来遍历每个值,提取所需的属性。对象中的所有值,并使用。

2023-12-24 19:31:53 1039

原创 Vue在页面上添加水印

【代码】Vue在页面上添加水印。

2023-12-24 19:28:31 942 1

原创 LC24. 两两交换链表中的节点

【代码】LC24. 两两交换链表中的节点。

2023-12-21 21:25:52 764

原创 Redis面试题

1.基于内存存储2.高效的数据结构3.IO多路复用4.单线程2.

2023-12-15 23:00:00 810

原创 静态变量和静态方法

全局共享,类级别的数据,用于常量。

2023-12-08 12:48:28 70

原创 i++是线程安全的吗?

【代码】i++是线程安全的吗?

2023-12-08 11:27:05 345

原创 Java基础知识

运行Java字节码的机器。

2023-12-07 19:12:46 429

空空如也

空空如也

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

TA关注的人

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