自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 0119java面经

在这个示例中,由于设置了可重复读隔离级别,无论在两次查询之间其他事务如何修改账户余额(只要不涉及当前事务正在操作的行),两次查询得到的余额结果应该是相同的。在实际应用中,需要根据系统的具体需求、性能要求和数据一致性的严格程度来选择合适的策略。排他锁(ExclusiveLock,X锁)表级锁(Table-levelLock)行级锁(Row-levelLock)共享锁(SharedLock,S锁)临键锁(Next-KeyLock)发送更新消息到消息队列(在业务代码中)

2025-01-19 09:49:30 617

原创 0118java面经

MySQL实现读写分离主要有以下几种方式:启动MySQLProxy服务。在应用程序中,将数据库连接配置指向MySQLProxy的地址和端口,而不是直接指向主库。基于数据库驱动实现原理:在应用程序的数据库连接池配置中,配置多个数据源,分别指向主库和从库。通过自定义的数据源路由规则,在执行数据库操作时,根据操作类型(读或写)动态选择使用主库数据源或从库数据源。以SpringBoot项目为例的代码实现步骤首先,在文件中添加必要的依赖,如和数据库驱动。在文件中配置主库和从库

2025-01-18 09:29:51 749

原创 0117java面经

字符串:使用简单动态字符串,方便存储和操作,支持原子操作。列表:根据元素数量和长度,使用双向链表或压缩列表。集合:根据元素类型和数量,使用整数集合或哈希表。有序集合:结合跳跃表和哈希表,实现有序存储和查找。哈希:根据元素数量和长度,使用压缩列表或哈希表。位图:使用字符串存储二进制信息。地理空间:使用有序集合存储和操作地理信息。流:基于列表和哈希表存储消息和属性。这些数据结构及其底层原理使得 Redis 能够在不同的场景下灵活存储和操作数据,同时通过内部转换机制优化性能和空间使用。

2025-01-17 09:40:16 1101

原创 0116java面经

进程:是操作系统进行资源分配和调度的基本单位,每个进程都有独立的地址空间、内存、数据栈以及其他资源。不同进程之间的资源相互隔离,它们可以通过进程间通信(IPC)机制进行通信和数据共享。线程:是进程中的执行单元,是操作系统能够进行运算调度的最小单位。一个进程可以包含多个线程,这些线程共享进程的资源,如地址空间、内存等,但每个线程有自己的栈空间、寄存器和程序计数器等。协程:是一种用户态的轻量级线程,由程序员在代码中自行控制调度,不需要操作系统参与。

2025-01-16 10:29:22 883

原创 0115java面经

当一个线程访问同步块时,首先尝试使用偏向锁,如果没有竞争,偏向锁会持续有效。当有其他线程竞争时,偏向锁会升级为轻量级锁,通过 CAS 操作尝试获取锁。当多个线程竞争轻量级锁时,轻量级锁会升级为重量级锁,使用操作系统的互斥量来管理线程的阻塞和唤醒。可以自定义来创建线程,并在创建线程时设置,以便在未捕获的异常发生时进行处理。

2025-01-15 17:11:20 830

原创 0114java面经

Java 内存模型(Java Memory Model,JMM)是 Java 虚拟机(JVM)中定义的一种抽象的内存架构,用于规范 Java 程序在多线程环境下的内存访问行为。时,任何线程对该变量的修改都会立即同步到主内存中,其他线程在读取该变量时,会直接从主内存中获取最新的值,而不是使用自己工作内存中的缓存副本。用户在浏览器地址栏中输入网址并按下回车键后,浏览器首先会对输入的 URL 进行解析,确定协议(如 HTTP、HTTPS)、主机名、端口号(如果有)、路径、查询参数等。例如,有一个联合索引。

2025-01-14 10:05:48 594

原创 0112java面经

如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新事务。示例场景与代码示例假设我们有两个方法。

2025-01-12 17:51:47 711

原创 My Day on January 10th

Friday, SunnyI got up at 8:30 this morning. On my way to work, I stopped by a bakery and bought two buns. When I arrived at the company, we had our daily meeting. After that, I dived into learning programming knowledge.At noon, after work, I went to a loca

2025-01-11 10:00:30 543

原创 0111java面经

例如,线程 A 和线程 B 都需要分配一块较大的内存来完成自己的任务,它们会不断地尝试获取内存,可能会导致线程之间的相互等待和阻塞,进一步降低系统的性能和响应能力。TCP 通过不断地加大发送速率来探测网络的实际承载能力,并根据网络发回的拥塞信息迅速做出响应,调整发送端的发送速率,将网络运行在轻度拥塞的最佳状态,在保证网络效率的同时确保流量间的公平性。TCP 拥塞控制是一种在传输控制协议(TCP)中,用于防止过多的数据注入网络,避免网络出现拥塞崩溃,确保网络高效稳定运行的机制12。

2025-01-11 09:57:56 1112

原创 0110java面经

定义与背景HTTPS(Hypertext Transfer Protocol Secure)即超文本传输安全协议,是在 HTTP 协议基础上加入 SSL/TLS 协议构建的可进行加密传输、身份认证的网络协议。它的出现主要是为了解决 HTTP 协议在网络通信中存在的数据安全和隐私问题。在互联网环境下,HTTP 传输的数据是明文的,这使得数据在传输过程中容易被窃取、篡改或伪造,而 HTTPS 通过一系列加密和认证机制来保障通信安全。工作原理加密机制非对称加密。

2025-01-10 10:53:23 891

原创 0109鹅厂面经

解释虚拟内存是内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(即虚拟地址空间),而实际上这些内存可能并不全部存储在物理内存中,部分数据会被存储在外部磁盘存储器上,在需要时进行数据交换。当程序运行时,操作系统会将程序的一部分数据加载到物理内存中,当物理内存不足时,操作系统会将暂时不用的数据从物理内存交换到磁盘上的虚拟内存区域(称为页面交换),当需要这些数据时,再将其从磁盘交换回物理内存。

2025-01-09 09:33:38 712

原创 http1.0 2.0 3.0的区别

由于每次请求都要建立和关闭连接,对于包含多个资源的网页,会产生大量的连接建立和关闭开销。比如,一个网页有 10 张图片,浏览器需要建立 10 次连接来获取这些图片,这会导致较长的加载时间。

2025-01-08 10:05:22 1014

原创 ConcurrentHashMap底层原理

分段锁(Segment)机制ConcurrentHashMap 在 JDK 1.7 及以前采用了分段锁的设计。它将整个哈希表分成多个段(Segment),每个段实际上是一个独立的哈希表,并且都有自己的锁。例如,默认情况下会有 16 个段。当对 ConcurrentHashMap 进行操作时,如put或get操作,首先会根据键(key)的哈希值确定它属于哪个段,然后只对这个段进行加锁操作,而不是对整个哈希表加锁。这样就允许多个线程同时访问不同段的数据,大大提高了并发性能。以putHashMap。

2025-01-08 10:04:51 1017

原创 0108腾讯面经

List 接口及实现类ArrayList特点ArrayList 是基于动态数组实现的。它可以动态地增长和收缩,能够自动处理数组容量的调整。例如,当添加元素时,如果数组已满,它会自动创建一个更大的新数组,并将旧数组中的元素复制到新数组中。它允许存储重复元素,并且元素是有序的,存储和取出的顺序一致。例如,,添加元素,这里的元素顺序是按照添加顺序排列的,并且可以有重复的 “apple”。随机访问效率高,通过索引访问元素的时间复杂度为。因为它内部是数组结构,知道元素的索引就可以直接定位到元素。比如。

2025-01-08 10:04:21 926

原创 stringRedisTemplate.execute执行lua脚本

确保项目中已经引入了相关依赖,例如在 Maven 项目中,一般会有如下依赖(版本号根据实际情况调整):</</</

2025-01-07 11:24:16 1231

原创 EasyExcel.read读取 Excel 文件

第二步:定义数据模型(实体类)第三步:读取 Excel 文件。

2025-01-07 09:53:05 1766

原创 0107JAVA滴滴面经

TCP 三次握手和四次挥手的过程如下:

2025-01-07 09:38:24 1339

原创 0105java字节面经

进程(Process)定义示例代码(在 Java 中启动一个新进程)特点线程(Thread)定义示例代码(在 Java 中创建和使用线程)特点协程(Coroutine)定义示例(在 Java 中可以使用一些第三方库来模拟协程,如 Quasar)</</</</特点。

2025-01-05 09:45:01 786

原创 0104java面经

相关信息,包含order_id(订单编号)、(客户编号)、(总金额)等字段;另一张是customers表,存储客户信息,包含(客户编号)、(客户姓名)等字段。

2025-01-04 09:42:47 933

原创 EasyExcel监听器详解

这个方法是在 EasyExcel 读取 Excel 文件时,每解析一行数据就会被调用一次。它接收两个参数,一个是当前行数据对应的 Java 对象(根据开发者定义的 Excel 数据模型转换而来),另一个是。例如,在数据导入场景下,如果 Excel 文件包含用户信息,那么可以在。就是自定义的监听器对象。通过这种方式,EasyExcel 在读取 Excel 文件时就会按照监听器中定义的逻辑来处理数据。参数,主要用于在所有数据解析完成后进行一些收尾工作,比如关闭数据库连接、释放资源、统计数据导入的结果等。

2025-01-03 16:05:16 2458

原创 0103java面经

定义指针压缩(Compressed Oops)是 Java 虚拟机(JVM)中一种优化技术。在 64 位的 JVM 中,对象引用(指针)本来是 64 位大小,这会占用较多的内存空间并且在某些情况下会影响性能。指针压缩的目的是通过一定的方式将这些 64 位的指针压缩为 32 位,从而减少内存占用并且在一定程度上提升性能。工作原理当启用指针压缩时,JVM 会将对象的指针进行转换。它的基本原理是基于这样一个假设:在 Java 堆内存中,对象的地址是按照字节对齐的,通常是 8 字节对齐。

2025-01-03 10:16:30 765

原创 0102java面经

降级逻辑的定义与概念定义:降级逻辑是一种系统设计策略,当系统的某些服务、功能或者资源出现故障、过载、性能下降等异常情况时,为了保证系统的核心功能能够继续稳定运行,主动降低系统非核心功能的服务质量或者暂时关闭非核心功能的处理机制。例如,在一个电商系统中,如果推荐系统出现故障,为了不影响用户正常的购物流程(如商品浏览、下单等核心功能),可以暂时关闭推荐功能,这就是一种降级策略。产生降级逻辑的场景与原因外部服务依赖故障场景示例:一个在线旅游平台依赖于第三方的天气服务来为用户提供旅游目的地的天气信息。

2025-01-02 10:58:15 1203

原创 0101java面经

空间利用率与哈希冲突的平衡空间利用率方面:负载因子是哈希表中元素个数与哈希表容量的比值。如果负载因子设置得过高,比如接近 1,那么哈希表会被填充得很满。虽然这样可以充分利用空间,但会导致哈希冲突的概率大大增加。因为随着元素增多,不同的键被映射到同一个桶的可能性就会变高。哈希冲突方面:哈希冲突是指不同的键通过哈希函数计算后得到相同的哈希值,从而被分配到同一个桶中。当哈希冲突过多时,在桶中查找、插入和删除元素的效率会降低。

2025-01-01 23:15:08 1546 3

原创 1231java面经md

Collection 接口概述地位与定义:Collection 接口是 Java 集合框架中的根接口之一,它位于java.util包中。这个接口定义了一组用于操作对象集合的通用方法,这些方法包括添加、删除、查询集合中的元素,以及判断集合的一些基本属性(如是否为空、大小等)。所有的集合类(如 List、Set、Queue 等)都直接或间接实现了 Collection 接口,这使得可以以一种统一的方式来处理不同类型的集合。主要方法及其功能添加元素方法add(E e):用于向集合中添加一个指定的元素。

2024-12-31 15:19:35 1303

原创 1230java面经

公司有一个内部使用的报表系统,基于传统的三层架构(表示层、业务逻辑层、数据访问层)开发,使用的是 Java Web 技术栈,随着业务数据量的不断增长,用户反馈报表生成速度越来越慢,尤其是一些涉及多表关联查询和大量数据聚合的复杂报表,有时需要等待几分钟甚至十几分钟才能生成,严重影响了工作效率,需要对其进行性能优化,但前期定位性能瓶颈比较困难。开发了一个数据处理工具,用于读取大量的文本文件(每个文件大小在几 MB 到几十 MB 不等),解析其中的数据并进行一些复杂的业务逻辑处理,然后将结果存储到数据库中。

2024-12-30 23:19:15 1104

原创 1229java面经

双亲委派模型(Parents Delegation Model)的定义双亲委派模型是 Java 虚拟机(JVM)加载类的一种机制。它要求除了顶层的启动类加载器(Bootstrap Class Loader)外,其余的类加载器(包括扩展类加载器(Extension Class Loader)和应用程序类加载器(Application Class Loader)等)在加载类时,首先要把加载请求委派给父类加载器。只有当父类加载器无法完成该类的加载(找不到对应的类)时,子类加载器才会尝试自己去加载。

2024-12-29 10:46:10 649

原创 1228java面经

RPC(Remote Procedure Call)框架简介RPC 是一种远程过程调用协议,它允许一个程序调用另一个位于不同内存空间(通常是在不同的服务器或进程中)的程序的过程或函数,就像调用本地函数一样。其主要目的是为了方便分布式系统中不同服务之间的通信,隐藏底层的网络通信细节,让开发者可以更专注于业务逻辑的实现。Dubbo 概述基本定义:Dubbo 是一个高性能、轻量级的开源 Java RPC 框架,由阿里巴巴开源并贡献给 Apache。

2024-12-28 10:10:32 789

原创 1227java面经

1,HTTP 请求报文是如何组成的?HTTP 请求报文主要由以下几个部分组成:请求行(Request Line)这是请求报文的起始行,包含了请求方法、请求的 URL(统一资源定位符)以及所遵循的 HTTP 协议版本这三个关键要素,各部分之间通过空格进行分隔。请求方法:用于告知服务器客户端期望执行的操作类型,常见的请求方法有:GET:通常用于获取指定资源,例如从服务器获取一个网页文档、查询某些数据等,它一般不会对服务器端的数据产生实质性修改,并且请求参数通常会附加在 URL 后面传递。PO

2024-12-27 17:59:50 1025

原创 122601java面经

JVM 的类加载过程加载(Loading)字节流获取:类加载过程的第一步是将类的字节流加载到 JVM 中。这个字节流可以来自多种途径,比如从本地文件系统中的.class 文件读取、从网络获取(如 Java Web 应用从远程服务器下载类)、从数据库读取或者通过自定义的类加载器生成字节流。例如,在一个普通的 Java 应用中,当程序启动时,JVM 会通过系统类加载器从本地文件系统中加载主类(包含main方法的类)的字节流。转换为方法区数据结构。

2024-12-26 10:42:57 844

原创 1225面经

(AQS)是 Java 并发包中的一个基础框架,它提供了一种实现阻塞锁和相关同步器的通用机制。功能概述:AQS 通过内置的FIFO(先进先出)队列来管理线程的阻塞和唤醒,实现了多线程对共享资源的互斥访问和同步控制。它简化了锁和同步器的实现,许多并发工具类如Semaphore等都是基于 AQS 实现的。核心成员变量:AQS 中有两个重要的成员变量,一个是state变量,用于表示同步状态,通常用于记录锁的持有情况等;另一个是CLH队列,用于存储等待获取同步资源的线程节点。

2024-12-25 14:40:41 929

原创 1222面经

指令重排序是指在程序执行过程中,编译器和处理器为了优化程序性能,对指令执行的顺序进行重新排列的一种现象。

2024-12-22 13:17:40 1052

原创 241221面经

分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种机制,用于在分布式环境中确保在同一时刻只有一个客户端能够访问某个共享资源或执行某个关键代码段,从而避免数据冲突和不一致性问题。以下是一些常见的实现分布式锁的方式:同节点之上的一种事务处理方式。

2024-12-21 17:58:21 808

原创 阻塞队列和延迟队列

Redisson 的延迟队列是一个支持延迟获取元素的无界阻塞队列。这种队列通常用于任务调度,例如,你可以将任务放入延迟队列中,任务将在指定的延迟时间后执行。Redisson 是一个基于 Java 的 Redis 客户端库,它提供了多种分布式数据结构和服务,包括延迟队列和阻塞队列。下面我将分别介绍 Redisson 中的延迟队列和阻塞队列的基本概念和使用方法。Redisson 的阻塞队列是一个支持阻塞操作的队列。:确保你的项目中已经添加了 Redisson 的依赖。在 Java 项目中,需要在。

2024-12-19 17:50:35 1497

原创 241212

这是类加载过程的第一个阶段。在这个阶段,Java 虚拟机(JVM)会通过类的全限定名来获取定义此类的二进制字节流。这个字节流可以来自多种渠道,比如从本地文件系统加载。

2024-12-12 15:03:51 860

原创 121101

缓存击穿是指在缓存系统中,一个热点数据在缓存过期的瞬间,大量并发请求同时穿透缓存直接访问数据库,导致数据库压力瞬间增大的现象。

2024-12-11 11:57:10 725

原创 241210

Redis 分布式锁在某些情况下可能会出现死锁,以下是一些可能导致死锁的原因及相应的避免方法:合理设置锁的过期时间:根据业务逻辑的执行时间来合理设置锁的过期时间,确保在业务逻辑正常执行完成之前锁不会过期。同时,可以结合使用等开源框架,它提供了机制,会在锁快要过期时自动延长锁的有效期,避免业务执行过程中锁过期。使用 RedLock 算法:RedLock 算法是一种基于多个 Redis 节点的分布式锁算法,通过在多个 Redis 节点上获取锁,并要求大多数节点都成功获取锁后才能认为获取锁成功,这样可以避免

2024-12-10 22:13:18 1048

原创 120904

主键:主键是一种特殊的约束,用于唯一标识表中的每一行记录。一个表只能有一个主键,主键列的值不能为空且必须唯一。唯一索引:唯一索引是一种索引类型,它要求索引列的值必须唯一,但允许该列存在空值,并且一个表可以有多个唯一索引。

2024-12-10 00:03:50 1024

原创 120903

在可重复读隔离级别下,事务在执行期间多次查询相同条件的数据时,间隙锁可以防止其他事务插入新的满足查询条件的记录,从而避免出现幻读现象。以下代码通过一次遍历数组,使用两个指针来记录连续子串的起始位置和当前位置,通过比较相邻元素大小来判断是否连续递增,进而找到最长连续递增子串的长度。值在 11 到 20 之间的记录进行操作,只要它们操作的区间不重叠,就可以并发执行,间隙锁可以确保它们各自操作区间的数据完整性和一致性。值在 10 到 20 之间的新记录,就会被阻塞,直到事务 A 释放间隙锁。

2024-12-09 18:17:39 662

原创 120902

用于标识一个类是配置类,相当于一个 Spring 配置文件。在该类中可以使用@Bean注解定义各种 bean。@Bean:用于在类中或@Component类的方法上定义一个 bean。被标注的方法返回的对象将作为一个 bean 被 Spring 容器管理。@Component:是一个通用的注解,用于标识一个类是 Spring 中的组件,会被 Spring 自动扫描并注册为 bean。它有几个衍生注解,如@Service用于标注业务逻辑层组件,用于标注数据访问层组件,用于标注控制层组件。

2024-12-09 18:16:46 885

原创 12091

当调用线程的start方法时,Java 虚拟机会执行一系列操作来启动该线程并使其开始独立运行。这主要涉及到将线程从初始的NEW状态转换为RUNNABLE状态,然后由操作系统的线程调度器来分配 CPU 时间片,进而使线程开始执行其run方法中的代码。切点(Pointcut):用于定义在哪些连接点(Join Point)上应用切面逻辑,通常使用 AspectJ 的切点表达式来指定。切点表达式可以根据方法的签名、包名、类名等条件来匹配需要增强的方法。例如,表示匹配包下的所有类的所有方法。通知(Advice)

2024-12-09 18:15:56 1002

空空如也

空空如也

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

TA关注的人

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