自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MurmurHash 与其他哈希算法的区别

如哈希表、布隆过滤器和分布式系统。,与 MD5、SHA 家族等密码学哈希算法不同,主要用于。(如数据库、Redis、Bloom 过滤器)(请使用 SHA-256 或 SHA-3),但速度比 MurmurHash 慢。(如 Kafka、Hadoop 分区),但速度更慢,适用于未来高安全需求。(请使用 HMAC-SHA256)MurmurHash 是一种。如果你只需要高效哈希索引,如果你需要安全性,选择。

2025-03-28 23:40:48 515

原创 线程池和消息队列MQ在异步处理上有什么区别?在什么场景下使用?

线程池和消息队列(MQ)在异步处理中的主要区别在于它们的工作方式、使用场景和适用性。

2025-03-28 23:02:14 738

原创 腾讯wxg一面凉经

2的1000次方计算。开始用的数组,后面经过面试官提醒说用集合(可以动态扩容)。算法拷打了半个多小时,最后脑子不清晰,用集合写的时候忘记怎么输出了(绷不住)。还有一些项目问题,最后到了一个小时就匆忙下播。感觉🐧比美团问的更深。⑦:分布式锁有哪些,redisson与redis+lua之间的优缺。①:linkedlist和arraylist区别。⑨:tcp与udp的区别,为什么tcp更可靠等等。⑩:三次握手之间用户端和服务端之间的状态变化。⑥:几种哈希算法之间的区别。⑧:缓存三剑客与解决方案。

2025-03-26 20:59:51 173

原创 Bean的生命周期

实例化:Spring 容器通过反射机制创建 Bean 的实例。此时,Spring 会根据配置文件或注解来确定要实例化的 Bean 类型和相关依赖。填充属性(依赖注入):Spring 容器通过依赖注入(DI)将配置文件或注解中定义的依赖注入到 Bean 中。这些依赖可以是其他 Bean、属性值或者集合等。调用初始化方法:在 Bean 完成属性填充后,Spring 会调用 Bean 的初始化方法。如果 Bean 实现了接口,Spring 会调用其方法;

2025-03-26 17:28:15 794

原创 各种锁机制

锁机制是多线程和并发控制的核心,Java 中常用的锁有(互斥锁),(可重入锁),(读写锁),(印章锁)。数据库中常见的锁有行级锁和表级锁,乐观锁适用于读多写少场景,而悲观锁适用于高一致性要求的场景。分布式环境中,常用 Redis 实现分布式锁,Redisson 提供了更加丰富和高效的分布式锁功能,避免死锁并支持高并发。

2025-03-26 11:32:38 657

原创 如何解决哈希冲突

Hash 冲突(Hash Collision): 当不同的键(Key)经过哈希函数计算后,得到相同的哈希值(桶索引),称为发生冲突。👉 两个 key 都映射到索引 3,产生冲突。拉链法和开放地址法。实际应用中,Java HashMap 采用拉链法,并在链表过长时转为红黑树,避免性能退化。Redis 字典则采用开放地址法,结合 rehash 动态扩容。设计时还需要优化哈希函数、控制负载因子,避免冲突集中,提升性能。

2025-03-26 11:14:05 397

原创 红黑树详解

红黑树是一种自平衡二叉搜索树,核心通过颜色标记和旋转操作保持平衡,查找、插入和删除时间复杂度稳定在O(log n)。它相比 AVL 树,旋转次数更少,性能更稳定,尤其适合写多读少的场景。红黑树被广泛应用在Java TreeMap、TreeSet 以及 Linux 内核的调度算法中。

2025-03-26 11:09:28 324

原创 如何解决线程并发安全问题

多线程安全问题来源于多个线程同时访问共享资源,解决方式核心在于加锁、无锁、避免共享三大策略。实际开发中:数据竞争用锁机制高并发用原子类或并发集合线程隔离用读多写少用读写锁全局状态用不可变对象合理组合,才能兼顾安全性和性能!

2025-03-26 11:07:05 414

原创 进程间通信(IPC)方式

不同进程之间数据交换、信号传递的机制👉 因为进程间内存不共享,必须靠 IPC 实现通信和协作IPC 方式是否跨主机是否可靠速度数据量适用场景管道❌✅中小父子进程FIFO❌✅中小无血缘关系消息队列❌✅中等中多生产者消费者共享内存❌❌(需同步)快大大量数据传输信号量❌✅快无同步、互斥Socket✅✅慢大网络通信、跨机信号❌❌快极小控制、通知mmap❌✅快大文件共享👉。

2025-03-26 10:59:12 398

原创 UDP比TCP的优点

UDP 比 TCP 更快,无连接、无状态、无确认机制,头部更小,开销低;支持广播、多播没有 TIME_WAIT 问题,适用于音视频、在线游戏、DNS、IoT等实时性高的应用;但 UDP 不可靠,没有流控、丢包重传,需要应用层自己保障可靠性(如 QUIC、RTP 等)。

2025-03-26 10:55:23 237

原创 TCP 四次挥手原理 和 CLOSE_WAIT / TIME_WAIT状态详解

状态产生位置作用重点CLOSE_WAIT服务端收到 FIN 后等待自己处理完业务、发送 FIN业务未处理完时进入TIME_WAIT客户端收到 FIN 后确保 ACK 可靠送达,避免历史包干扰新连接2MSL定时器,主动关闭方。

2025-03-26 10:49:31 353

原创 美团一面凉经

面试官很好,奈何人太菜,属实八股准备的太少,记得太模糊。大概就这么些吧,只能说菜就是菜,还得多背。①:tcp连接的三次握手,为什么只能是三次。⑮:消息队列rocketmq,以及死信队列。⑩:shardingsphere分库分表。③:mysql数据库mvcc原理。⑧:依赖引入,有哪些,有什么区别。⑬:murmurhash算法。⑰:设计考试系统数据库表结构。⑱:算法:合并两个有序数组。②:tcp和udp区别。⑫:短链接路由表的设计。⑤:有哪些锁,介绍锁。⑭:lua脚本的设计。⑯:布隆过滤器原理。

2025-03-26 00:11:24 146

原创 核心依赖注入(Dependency Injection, DI)详解

定义:依赖注入是Spring核心机制之一,指将对象依赖(成员变量、参数、资源)由框架自动传入,而不是由对象自己创建依赖。👉本质:控制反转(IoC)的一种实现方式✔ 依赖注入让代码解耦,核心是由容器管理依赖关系✔ 推荐构造器注入,强制性强、利于测试✔ 多个 Bean 用@Qualifier或@Primary解决冲突✔ 循环依赖场景下用 Setter 或@Lazy✔ 注入配置用@Value,动态获取 prototype 用@Lookup。

2025-03-25 21:45:00 607

原创 ThreadLocal

是 Java 提供的线程本地变量(Thread Local Variable)机制:👉 作用:给每个线程分配一份独立的变量副本,互不干扰,避免多线程环境下的共享冲突问题。👉 特点:同一个变量,在不同线程中有不同的值(隔离性)。本质:每个线程内部有个作为key,自己存自己的值。方法作用设置当前线程的局部变量值get()获取当前线程的局部变量值remove()删除当前线程的局部变量,防止内存泄漏初始化默认值(JDK 8+)面试问题高分回答要点为什么要用 ThreadLocal?

2025-03-25 21:22:08 523

原创 考试系统数据库表结构设计

添加教师表(teacher)关联出卷人。,方便 A/B 卷或随机抽卷。,便于查询成绩和回溯答题详情。(选择题、判断题、简答题)支持在线判卷和人工阅卷字段。记录学生参加的考试和试卷。增加题库(题目复用)

2025-03-25 20:58:04 272

原创 读写操作发生在mysql哪个服务器上

写操作:只能在主服务器上执行。读操作:默认可以在主服务器或从服务器上执行,但实际生产中,通常会通过读写分离将读操作定向到从服务器,减少主服务器的负载。

2025-03-24 21:15:14 253

原创 MySQL主从复制

✅ binlog、relay log 作用?✅ 主从延迟怎么解决?✅ 半同步如何保证数据不丢?✅ 主从切换需要注意什么?MySQL 主从复制分为三步:主库写 binlog,从库 IO 线程拉取 binlog 存储到 relay log,从库 SQL 线程重放 relay log 实现同步。默认异步复制,支持半同步提升可靠性,核心作用是实现读写分离和高可用。

2025-03-24 21:11:17 331

原创 MVCC(Multi-Version Concurrency Control,多版本并发控制)

MySQL InnoDB 通过 MVCC 实现高并发下的非锁定读,依靠隐藏字段DB_TRX_ID和undo log存储多个数据版本,事务通过ReadView判断可见性。MVCC 只在 RC 和 RR 隔离级别下生效,核心解决了读写并发冲突问题,大幅提升了系统吞吐量。

2025-03-24 21:05:21 255

原创 SQL 执行的流程

一条 SQL 从客户端发出后,会经过连接层校验身份、SQL 解析、生成执行计划,执行器调用存储引擎层(如 InnoDB)读取数据,最终返回结果给客户端。执行过程中可能涉及索引查找、Buffer Pool、事务日志(redo/undo)、MVCC 等关键模块。

2025-03-24 20:50:57 362

原创 AQS(AbstractQueuedSynchronizer)详解

AQS(抽象队列同步器)是包下的并发框架核心基石。AQS 通过“模板方法模式”,提供了原子状态管理 + 阻塞线程排队机制,简化了自定义同步器的开发。✅管理共享资源的“状态”(state)提供FIFO 线程等待队列负责线程的阻塞与唤醒AQS 是 Java 并发框架的核心,基于state+CLH队列+CAS+LockSupport实现线程安全同步,支持独占和共享模式。核心应用包括Semaphore等,掌握 AQS 才算真正掌握 Java 高并发。

2025-03-24 20:47:27 272

原创 Synchronized和ReentrantLock

场景推荐锁理由简单同步、可控场景写法简单,JVM优化好高并发、复杂业务逻辑灵活、可控、功能强大需要尝试加锁、限时等待tryLock()需要读写分离提高读性能任务需能感知锁状态提供等API:简单易用,适合大部分场景,JVM层面优化好;:功能更强,适合高并发、复杂场景,能精细控制锁行为、支持条件队列、可中断。

2025-03-24 20:45:01 294

原创 CAS(Compare And Swap)与ABA问题解决

CAS(比较并交换)是一种无锁(lock-free)原子操作,底层由 CPU 指令(如 x86 的cmpxchg)直接支持,是里大部分原子类(如)的核心实现原理。V:当前内存值E:预期值N:要更新的新值如果 V == E,则将 V 更新为 N;否则,不做任何操作。✅原子性操作,线程安全高性能,无需加锁CAS 是无锁并发核心,能保证原子性,但存在 ABA 问题——值变化后又被改回,导致误判。生产中通过版本号(或标志位(解决 ABA 问题,确保数据一致性。

2025-03-24 20:37:47 321

原创 线程池详解

线程池(Thread Pool):一种线程复用技术,避免了频繁创建和销毁线程的开销,控制系统最大并发数,防止资源耗尽。通俗点说: 👉 线程池提前创建好一批线程,有活就拿来干,干完继续等着,循环利用。线程池解决了高并发下线程频繁创建和销毁带来的性能瓶颈,合理设计核心线程数、队列、拒绝策略,能大幅提升系统稳定性和吞吐量。

2025-03-24 20:27:03 422

原创 抽象类(abstract class) vs 接口(interface)

【代码】抽象类(abstract class) vs 接口(interface)

2025-03-24 20:21:50 245

原创 布隆过滤器(Bloom Filter)的假阳性

布隆过滤器的假阳性与多个因素有关,主要包括位数组的大小、哈希函数的数量、插入的元素数量、哈希函数的质量和位数组的填充程度等。通过优化这些因素,可以在一定程度上降低假阳性概率,但无法完全消除假阳性。在使用布隆过滤器时,需要根据具体的应用场景和需求,在性能和误判率之间找到一个平衡点。

2025-03-24 18:16:52 504

原创 双重判定锁

(Double-Checked Locking,简称 DCL)是一种常用于优化性能的并发控制技术,特别是在需要延迟初始化(如单例模式、缓存等)时,通过减少不必要的锁竞争来提高性能。它的基本思想是,首先检查资源是否已经初始化或满足条件,如果已经满足,直接返回;如果不满足,再加锁进行初始化或处理。通过这种方式,在第一次检查时避免了不必要的锁操作,只有在必要时才加锁。

2025-03-24 17:37:29 274

原创 CopyOnWriteArrayList详解

优点 ✅缺点 ❌读操作无锁,性能极高写操作开销大,涉及数组复制(O(n))读写分离,读操作不会阻塞不适合高并发写场景(大量写时性能很差)线程安全,避免并发修改异常(fail-safe内存占用大,频繁写会导致大量冗余对象产生CopyOnWriteArrayList 是线程安全的 List,核心是写时复制(Copy-On-Write)。读操作无锁,性能高;写操作加锁并复制新数组,适合读多写少场景。天然避免 ConcurrentModificationException,遍历安全。

2025-03-24 00:06:50 409

原创 ArrayList 和 LinkedList 是线程安全吗

集合类型线程安全推荐方案ArrayList❌ 否或LinkedList❌ 否自己加锁 or 改用。

2025-03-24 00:02:08 226

原创 ArrayList 是怎么实现动态的

ArrayList 本质是基于数组的,容量不够就扩 1.5 倍,重新复制数组,达到“动态”的效果。

2025-03-23 23:59:12 252

原创 ArrayList 和 LinkedList区别

场景推荐随机访问多,读多写少✅ ArrayList(查询快)大量插入删除,尤其是头尾操作✅ LinkedList(链表优势)空间敏感(节省内存)需要顺序遍历都可以,但 ArrayList 更快👉"查快用 ArrayList,增删快用 LinkedList"👉"空间紧张选 ArrayList,频繁改动选 LinkedList"

2025-03-23 23:55:04 187

原创 Java容器

类型实现类特点List有序可重复Set无序/有序不重复Queue队列、优先级、双端Map键值对并发Map多线程。

2025-03-23 23:52:51 281

原创 binlog和redolog

关系点描述顺序redo log 先写入,binlog 后写入(事务提交时)事务一致性两者缺一不可,双保险机制,MySQL 实现两阶段提交保证 binlog 和 redolog 一致崩溃恢复靠谁?redolog主从复制靠谁?binlogMySQL 有两种核心日志:redolog 和 binlog。redolog 属于 InnoDB 存储引擎层,保证事务的持久性(WAL机制),主要用于崩溃恢复;binlog 属于 MySQL Server 层,记录所有修改操作,主要用于主从复制和数据恢复。

2025-03-23 16:20:44 333

原创 索引的建立怎么考虑

✅ 数据量大且稳定的核心业务表,索引优化收益最大✅ 善用EXPLAIN分析SQL走不走索引✅ 索引=双刃剑,读快、写慢,设计时结合业务需求、访问模式综合考虑。

2025-03-22 17:19:05 270

原创 Spring AOP

面向切面编程本质:在不改变业务逻辑的前提下,动态地给程序插入功能代码(增强),比如:日志记录、权限校验、事务管理、性能监控。Spring AOP 是面向切面编程的实现,基于 JDK 动态代理或 CGLIB 代理生成增强类,常用于日志记录、事务处理、权限校验等场景。核心概念包括切面、通知、切入点、连接点和织入。常见通知有 @Before、@After、@Around 等,支持灵活的横切功能扩展。

2025-03-22 16:47:29 474

原创 线程并发场景下怎么保证线程安全

当多个线程同时访问某个方法或资源时,无论运行时环境采用何种调度方式或者这些线程如何交替执行调用结果都是正确的,就是线程安全。

2025-03-22 16:25:41 441

原创 maven中install和package的区别

命令作用生成位置作用范围package打包项目(生成 jar/war)target/目录下仅本项目可用install打包 + 安装到本地仓库本机所有 Maven 项目可用mvn package 只会把项目打包生成 jar/war,存在 target 目录下,其他项目无法直接依赖。mvn install 会将打包好的文件安装到本地 Maven 仓库(~/.m2/repository),方便其他 Maven 项目引用依赖。

2025-03-22 16:05:31 153

原创 Mybatis中的#和$符号的区别

符号作用是否预编译SQL 注入风险占位符,参数绑定✔️ 支持预编译❌ 安全(防止SQL注入)字符串拼接❌ 不预编译⚠️ 有SQL注入风险场景推荐备注传递普通参数(数字、字符串)#{}安全、高效传递动态表名、字段名、排序规则${}需要手动校验,避免 SQL 注入MyBatis 中 #{} 表示占位符,使用 PreparedStatement 预编译,能有效防止 SQL 注入,是最推荐的写法。

2025-03-22 16:00:42 231

原创 Spring IoC实现原理

步骤技术作用配置解析XML解析 / 注解扫描加载bean定义内存结构存储bean元信息实例化反射 / newInstance()创建对象依赖注入反射注入字段/方法AOP增强JDK动态代理 / CGLIB增强功能生命周期管理回调 / 观察者统一管理bean生命周期Spring IoC 实现原理核心是:1. 读取配置或扫描注解;2. 创建 BeanDefinition 容器;3. 通过反射实例化 Bean;4. 完成依赖注入;5. (可选)AOP 动态代理增强;

2025-03-22 15:46:04 209

原创 JVM 垃圾回收器(Garbage Collector, GC 收集器)

垃圾回收器(GC)是 JVM 中的内存管理模块,负责自动回收不再被引用的对象,避免内存泄漏和内存溢出。👉核心目标:自动化内存管理、提升系统性能、减少开发者手动干预。GC 收集器适用场景特点Serial单核、Client端简单稳定,单线程ParNew多CPU中配合CMS多线程,低停顿Parallel高吞吐后台、大数据吞吐优先,多线程CMS低延迟Web系统并发回收,内存碎片多G1大内存服务端分区,低停顿,预估时间金融、直播、低延迟场景几乎无停顿,支持大堆1️⃣CMS 的优缺点?

2025-03-21 22:09:16 695

原创 Java 垃圾回收算法(GC算法)

自动回收堆内存中不再被引用的对象,释放内存资源,避免内存泄漏和溢出。👉目标:清理无用对象,提升内存利用率和系统性能。Java 垃圾回收基于“可达性分析”算法,主流回收算法有复制、标记-清除和标记-整理。JVM采用分代回收策略,针对新生代和老年代使用不同算法优化性能。新生代用复制算法,老年代用标记-清除或标记-整理,避免碎片。G1和ZGC等现代GC,结合分区和并发,提升回收效率和降低停顿。

2025-03-21 22:02:50 717

SCPAS-1D太阳能电池仿真软件

SCPAS-1D太阳能电池仿真软件资源描述 内容概述 SCPAS-1D(Solar Cell Performance Analysis System - 1D)是一款专注于一维(1D)太阳能电池模拟与性能分析的先进软件工具。它集成了物理学模型、数值算法和图形用户界面,旨在帮助研究人员、工程师及学生深入理解太阳能电池的工作原理、性能优化及材料特性对电池效率的影响。通过简化复杂的物理过程到一维模型,SCPAS-1D能够在保证计算精度的同时,大幅提高仿真效率,使得用户能够轻松地进行大规模参数扫描和性能预测。 适合人群 光伏材料科学家:研究新型光伏材料特性及其对电池性能影响的研究者。 太阳能电池工程师:负责太阳能电池设计、优化及制造工艺的工程师。 高等教育学生:学习半导体物理、光电转换原理及光伏技术的本科生、研究生。 科研人员:从事能源转换、光电材料等领域的基础与应用研究的学者。 能学到什么 太阳能电池基本原理:深入理解光电效应、载流子传输、复合机制等核心概念。 材料特性对性能的影响:学习不同材料(如硅、钙钛矿、有机半导体等)的带隙、迁移

2024-07-29

空空如也

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

TA关注的人

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