- 博客(310)
- 资源 (2)
- 问答 (5)
- 收藏
- 关注
原创 【JVM】类加载机制常问题目
✅是什么:类加载机制是JVM将.class字节码文件(磁盘/网络/内存中)加载到方法区,并在堆中创建对象(作为类的元数据入口),最终让类具备可使用能力的完整过程。✅核心作用:3个核心——① 加载字节码(来源多样);② 验证字节码合法性(防恶意篡改);③ 初始化类信息(静态变量、静态代码块),为后续对象实例化打基础。✅生活比喻:就像“工厂生产产品”——.class是“设计图纸”,类加载机制是“工人按图纸造模具”,Class对象是“模具”,后续new对象就是“用模具生产产品”。✅面试陷阱。
2026-03-26 04:42:01
640
原创 【JVM】编译原理-JIT常见题目
是什么:JIT(Just-In-Time Compilation,即时编译)是HotSpot的核心编译器,作用是「将高频执行的字节码(热点代码)动态翻译成机器码」,解决解释执行效率低的问题。✨ 关键考点:HotSpot有两个JIT编译器——客户端编译器(C1)和服务器编译器(C2),分别对应不同场景。工作流程(4步走,面试按这个逻辑说):① 代码执行:虚拟机先解释执行字节码;② 热点检测:通过「计数器」统计代码执行频率(后面会细讲),识别热点代码;
2026-03-26 00:45:04
470
原创 【Java并发】无锁编程常问题目
无锁化编程(Lock-Free Programming)是一种并发编程范式不依赖互斥锁/信号量等阻塞同步原语,而是通过原子操作(如CAS)和内存序控制,实现线程间对共享资源的安全访问。核心特点:无阻塞:线程不会因等待锁而被挂起(内核态阻塞);进度保证:在任意时刻,至少有一个线程能持续推进执行(区别于“忙等”的自旋锁);依赖原子操作:通过硬件级原子指令保证共享变量操作的不可中断性。ABA问题场景。
2026-03-25 15:05:47
85
原创 【Java并发】CompletableFuture常问题目
回答默认线程池:CompletableFuture 的runAsync若无指定线程池,默认使用(JVM 全局共享的线程池,核心线程数=CPU核心数-1)。自定义线程池注意事项:避免使用commonPool:若任务耗时较长,会占用共享线程池导致其他任务阻塞;合理设置线程池参数:核心线程数、最大线程数、队列容量需匹配业务场景;线程池需手动关闭(若为临时使用),或使用 Spring 托管的线程池避免泄漏。示例// 自定义线程池5, // 核心线程数10, // 最大线程数。
2026-03-25 15:03:49
106
原创 【Java并发】锁升级涉及到技术栈汇总
锁升级的核心原则是根据竞争强度动态调整锁粒度,平衡性能与安全性。无论是数据库锁、分布式锁还是Java同步锁,都遵循这一原则:从无锁→偏向锁→轻量级锁→重量级锁(或表锁)的升级路径。减少锁持有时间降低锁粒度增加索引覆盖和合理设计事务边界。高频考点记忆口诀无锁偏向轻量级,重锁表锁最伤性能;索引事务隔离级,锁优化的三板斧。
2026-03-24 16:23:53
46
原创 【Java并发】ThreadLocal常见题目
回答重写时确保线程安全(避免返回共享实例);若需支持父子线程传递,继承并注意复制逻辑;必须提供清理机制(如封装remove()调用),避免内存泄漏。回答一核二问三场景,四避五原六工具。一核:线程隔离(副本机制);二问:内存泄漏(弱引用+remove)、数据传递(ITL+TTL);三场景:工具类隔离、上下文传递、框架应用(Spring事务);四避:忘remove、共享value、滥用大对象、线程池脏数据;
2026-03-24 16:18:43
61
原创 AQS(AbstractQueuedSynchronizer)常见题目
回答:AQS是Java并发包核心抽象类,为同步器(如ReentrantLock,Semaphore(信号量)等)提供基础框架。用volatile state 变量 + CAS 管理同步状态,用CLH 队列变种管理等待线程,用模板方法模式让子类实现同步规则,自身处理线程排队、阻塞 / 唤醒等通用逻辑。回答:自定义AQS同步器需遵循3步:① 定义state语义;② 实现独占模式的tryAcquiretryRelease;③ 包装成锁接口(实现Lock示例代码// 自定义简单独占锁(不可重入)
2026-03-24 06:15:59
48
原创 【Java并发】CAS(Compare-And-Swap)常见题目
CAS 是一种无锁同步机制,核心是“比较并交换”:它包含 3 个核心要素(内存值 V、预期值 A、新值 B),只有当内存中的实际值 V 等于预期值 A 时,才会将 V 改成 B,否则不做任何操作。操作全程是原子性的(由 CPU 指令直接支持,无需加锁)。(V=A 时,更新 B 值)// 自旋锁:线程获取锁失败时,循环重试直到成功// 0:未加锁,1:已加锁static {try {// 通过反射获取 Unsafe 实例(Unsafe 不能直接 new)
2026-03-24 06:13:23
125
原创 【Java多线程并发】JMM常见题目
回答:JMM是Java虚拟机规范定义的抽象内存模型,并非物理内存,它规定了线程之间如何通过内存进行交互,定义了主内存(所有线程共享)和工作内存(每个线程私有)的抽象概念。主要目的:回答:JMM的三大核心特性是:原子性、可见性、有序性。回答:是JMM提供的轻量级同步机制,作用:保证共享变量的可见性和有序性,但不保证原子性。回答:不能保证原子性。原因:原子性要求操作不可分割,而变量的复合操作(如)会被分解为读取、加1、写入三步,多线程下会出现竞态条件(多个线程同时读取旧值,加1后写入,导致最终值小于预
2026-03-23 14:49:37
105
原创 【Java多线程】Volatile常见题目
三大特性:保证可见性、有序性,不保证原子性(复合操作需锁/原子类);底层原理:缓存一致性协议(MESI)+ 内存屏障(禁止重排序、强制刷主存);核心应用:状态标记位(线程停止)、DCL单例模式(禁止重排);对比区别:与synchronized(无锁vs悲观锁)、Atomic类(无原子性vs CAS原子性);易错陷阱:DCL单例漏加volatile、认为volatile能保证i++原子性、忽略long/double的单次读写原子性(Java 1.5+支持)。误区1。
2026-03-23 14:47:40
77
原创 synchronized-面试120题
回答锁消除是 JVM 的优化手段:JIT 编译器检测到某些同步代码块的锁对象不存在共享竞争(如局部对象、逃逸分析判定为线程私有),会自动移除锁,减少性能开销。回答JVM 设定偏向锁批量撤销阈值为 40 次,是「性能权衡」的结果,回答synchronized 是 Java 并发的核心考点,面试答题需遵循「先定义→再原理→再场景→最后优化基础层:3 种用法+锁对象,避免基础用法错误;原理层:Mark Word+Monitor+锁升级,理解底层实现;优化层。
2026-03-23 14:43:00
52
原创 【Java并发】常问题目
怎么回答(大白话):CPU 切换执行不同线程的过程。比如线程 A 正在执行,CPU 突然切换到线程 B 执行,此时需要保存线程 A 的执行状态(比如程序计数器、寄存器值),再加载线程 B 的状态,这个过程就是上下文切换,切换次数多会消耗性能。怎么回答(大白话):是可重入锁!可重入性就是「同一个线程可以多次获取同一把锁」,不会死锁。比如:一个同步方法 A 调用另一个同步方法 B(两者用同一把锁),线程进入 A 后已经拿到锁,再进入 B 时,会直接获取锁成功,不用等自己释放。
2026-03-23 14:18:14
68
原创 【Java并发】源码分析篇
线程管理:通过Thread与Runnable实现线程创建,start()触发线程启动,生命周期状态通过监控。同步控制保证原子性/可见性/有序性(悲观锁),volatile保证可见性/有序性(轻量级,不保证原子性)。线程协作wait()notify()基于 Monitor 实现线程等待与唤醒,是多线程协作的核心机制。这些基础知识点是理解进阶并发工具(如、线程池、)的前提,实际开发中需根据场景选择合适的同步工具(如“读多写少”用volatile,竞争激烈用:它通过为每个线程维护一个独立的。
2026-03-23 14:05:09
81
原创 【Java并发篇2】有什么区别
Java 并发编程的核心是“协调多线程访问共享资源”,需掌握线程生命周期、同步机制(volatile、锁)、并发工具(线程池、等),同时规避死锁、内存泄漏、过度同步等误区。实际开发中,应优先使用线程池、并发集合等高级工具,减少手动管理线程的复杂度,同时结合业务场景选择合适的同步策略,平衡线程安全和性能。AQS 是 Java 并发工具类的底层同步框架(位于包),为Semaphore等提供统一的同步基础。它基于“同步状态”和“等待队列”实现线程的阻塞与唤醒。Java 并发编程的进阶知识点围绕“高效协调多线程”
2026-03-23 14:01:25
104
原创 【Java并发篇】有什么区别
/ 自定义线程池:核心线程数=2,最大线程数=5,队列容量=10,空闲线程存活时间=30秒2,5,30,new ArrayBlockingQueue<>(10), // 有界队列,容量10Executors.defaultThreadFactory(), // 默认线程工厂new ThreadPoolExecutor.AbortPolicy() // 拒绝策略:抛出异常// 提交15个任务(核心线程2 + 队列10 + 非核心线程3 = 15,刚好处理)i < 15;i++) {
2026-03-23 13:59:52
196
原创 【Java并发篇3】什么是
这是对偏向锁机制的进一步细化,解释了偏向锁在面对竞争时的行为。偏向锁的撤销:当一个偏向锁已经偏向于线程 A,此时线程 B 尝试获取该锁。JVM 会检查持有锁的线程 A 是否仍然存活且在执行同步块。如果线程 A 已经退出同步块或已经终止,JVM 会将锁状态从“偏向锁”重置为“无锁”状态,这个过程就是撤销。之后线程 B 可以重新尝试获取锁(可能会再次偏向于 B)。批量重偏向:在某些场景下,大量线程会竞争访问同一类的不同对象(例如,在循环中创建对象并进行同步)。如果每次都进行偏向锁撤销,开销会很大。
2026-03-23 13:49:50
63
原创 【Java并发篇2】什么是
CPU 从一个线程切换到另一个线程执行时,需要保存当前线程的执行状态(如程序计数器、寄存器值、栈指针等),并加载新线程的执行状态,这个过程就是上下文切换。它是操作系统实现多线程并发的基础。用户线程:默认创建的线程,执行核心业务逻辑,JVM 会等待所有用户线程执行完毕后才退出。守护线程:后台线程,为用户线程提供服务(如 GC、日志监控),JVM 不会等待守护线程执行完毕,只要所有用户线程退出,守护线程会被强制终止。
2026-03-23 13:47:40
99
原创 【Java并发篇】什么是
线程是进程内的一个独立执行路径,是操作系统进行CPU调度的最小单位。一个进程可以包含多个线程,它们共享进程的内存空间和资源。(可以理解为一件事情)进程是操作系统进行资源分配和调度的一个独立单位。它拥有自己独立的内存空间、代码段、数据段和打开的文件句柄等资源。进程是程序的一次动态执行过程。指多个任务在同一时间段内交替执行。在单核CPU上,操作系统通过快速切换线程的执行来模拟并发,使得看起来多个任务在同时进行。指多个任务在同一时刻真正地同时执行。这需要多核CPU的支持,每个核心可以独立执行一个任务。当。
2026-03-23 13:40:31
77
原创 【Java并发】synchronized
回答锁消除是 JVM 的优化手段:JIT 编译器检测到某些同步代码块的锁对象不存在共享竞争(如局部对象、逃逸分析判定为线程私有),会自动移除锁,减少性能开销。回答JVM 设定偏向锁批量撤销阈值为 40 次,是「性能权衡」的结果,回答synchronized 是 Java 并发的核心考点,面试答题需遵循「先定义→再原理→再场景→最后优化基础层:3 种用法+锁对象,避免基础用法错误;原理层:Mark Word+Monitor+锁升级,理解底层实现;优化层。
2025-12-12 20:15:35
1091
原创 【Java并发】线程池常见面试题
思路:创建多个线程池(对应不同优先级),提交任务时根据优先级选择对应的线程池执行。高优先级任务提交到(核心线程数多、队列容量小),低优先级任务提交到。优点:实现简单,优先级隔离(高优先级任务不会被低优先级任务阻塞);缺点:资源占用多(多个线程池),可能导致低优先级线程池资源闲置。示例代码// 高优先级线程池(核心线程数多,队列容量小)// 低优先级线程池(核心线程数少,队列容量大)// 提交任务时指定优先级} else {思路:任务实现Comparable接口,通过“
2025-12-12 20:06:11
1103
原创 【Java并发】线程
并发:同一时间段内多个任务“交替执行”(单核CPU,通过时间片轮转实现);因为是交替执行,所以就会诞生高并发问题,也会产生线程安全问题并行:同一时刻多个任务“同时执行”(多核CPU,真正的同时处理)。线程安全:多线程环境下,程序执行结果与单线程一致,且无数据竞争、死锁等问题;临界区:多个线程共享资源的代码块(需同步保护)。多个线程互相持有对方需要的锁且都不释放,导致线程永久阻塞。多线程并发访问时,程序仍保证执行结果正确(符合预期),且无数据污染、死锁等问题。
2025-12-12 19:07:47
838
原创 【MySQL】大厂为什么用 RC(Read Committed)
大厂选择RC的本质是在业务一致性需求和数据库并发性能之间找到最优解:RC以牺牲“不可重复读”和“幻读”的严格一致性为代价,换取更高的并发吞吐量和更灵活的业务适配性,这与大厂高并发、高可用的核心诉求高度匹配。graph LRA[RC核心考点] --> B[基础概念:读已提交,解决脏读]A --> C[底层原理:MVCC+记录锁]A --> D[性能优势:锁范围小,并发高]A --> E[兼容性:Oracle迁移适配]A --> F[binlog:必须搭配Row格式]
2025-12-12 16:45:45
749
原创 【MySQL】索引原理(65道)
数据库索引是帮助数据库系统高效查询、快速定位数据的数据结构加速查询:避免全表扫描(如百万级表全表查需遍历所有数据,索引可直接定位目标数据),降低磁盘I/O次数;优化排序:若查询需按某字段排序(如),若该字段有索引,数据库可直接利用索引的“有序性”返回结果,无需额外排序;减少数据对比:通过索引键的有序性或哈希映射,快速过滤不符合条件的数据,减少无效数据的判断。聚簇索引(Clustered Index)和非聚簇索引(Non-Clustered Index)是B+树索引的两大分类,核心差异在。
2025-12-12 16:30:18
687
原创 【MySQL篇】MySQL8.0新特性
窗口函数(Window Function)允许在一组与当前行相关的行上计算值,不分组聚合(保留原表行数),适用于排名、累计统计等场景。,旧版本双写缓冲区刷新是串行的,而8.0可并行刷新多个页到双写缓冲区和数据文件,提升I/O效率;优势:对于非均匀分布列(如订单状态,大部分为“已完成”),直方图能让优化器准确判断行数,避免选错索引。是存储元数据(表结构、列信息、索引等)的事务性存储引擎(基于InnoDB),替代了旧版本的。:角色是权限的集合,适用于批量管理多个用户的权限(如给所有DBA授予相同权限)。
2025-12-12 16:21:31
935
原创 【MySQL篇】InnoDB
答案答案InnoDB表的物理存储方式,数据按 主键顺序 存储 在B+树的叶子节点,叶子节点包含 完整的行记录数据每张表必须有且仅有一个聚簇索引,通常是主键;若没有显式主键,InnoDB会选择第一个非空唯一索引;若仍没有,则自动生成6字节隐藏主键Insert Buffer(插入缓冲)是InnoDB的一种优化机制,专门针对非唯一二级索引的插入和更新操作自适应哈希索引是InnoDB自动创建的索引结构,通过监控缓冲池中数据页的访问频率,自动为热点数据构建哈希索引,加速等值查询。
2025-12-12 16:15:53
1076
原创 在Mybatis中,Xml映射文件里,除了常见的select|insert|updae|delete 标签之外,还有哪些标签?
通过构造方法注入结果(替代 setter):定义数据库列与 Java 对象的映射规则。:获取插入后的自增主键(或数据库序列值):查询用户及其订单(一对一 + 一对多):处理复杂定制需求(注解中用动态SQL):像代码中的公共方法,需要时直接调用。:在注解中使用动态 SQL(需配合。:像预制好的「高汤块」,保存常用配方。:VIP顾客优先获取餐号(自增ID)过度嵌套的动态 SQL(可读性差):设置冷冻库存规则(保存30分钟):像发黄的纸质菜谱,已被电子菜单(:淘汰策略(LRU/FIFO等)
2025-06-05 12:27:13
1042
原创 Mybatis 动态sql有什么用?执行原理?有哪些动态sql?
根据不同条件拼接不同的SQL语句,避免在Java代码中拼接SQL字符串。自动过滤掉无效要求(如顾客说"不要香菜"但本来就没放香菜)顾客改需求:"把牛排改全熟,再加黑椒汁" → 自动处理逗号。自动修剪多余的"AND"/"OR"(像去掉菜里多余的装饰)顾客说"如果爱吃辣,就加辣椒" → 实际加辣时才放辣椒。"找浦东新区500-1000万,3房带车位的二手房"把顾客说的"微辣"转换成具体辣度值(如辣度=2)常用的"红烧肉套餐"可以提前备好,直接复用。:忽略矛盾/无效需求(如"冰的热咖啡")
2025-06-05 12:18:38
750
原创 Mybatis 在mapper中如何传递多个参数?
"面条 牛肉" ← 这是要牛肉面?(厨师困惑:到底是"红烧肉配米饭"还是"红烧肉味的米饭"?清晰高效:"#{菜名}:鱼香肉丝 #{辣度}:中辣 ""我要①#{主食}:饺子,②#{蘸料}:醋+辣椒"通过合理选择传参方式,可以使代码既清晰又灵活。厨师要自己解读潦草字迹(通过key取值):点全套套餐时(前菜+主菜+甜点+饮料)就像去餐厅说:"给我第一个和第三个":字迹不清可能上错菜(key写错)扔出一张便签:"多加香菜 不要蒜"对着后厨大喊:"米饭 红烧肉":填菜单(JavaBean)菜单有固定栏目(属性字段)
2025-06-05 12:09:19
5414
原创 Mybatis 如何获取自动生成的(主)键值?
只适用于标准快递柜(MySQL等支持自增的数据库)银行特殊流程(Oracle等需要序列的数据库)快递站同时处理100个包裹,每个包裹自动获得。批量操作时主键会注入到原集合对象的每个元素中。(获取序列),窗口叫号时出示号码(插入数据)你在快递柜寄件(插入数据),柜子自动生成。:插入后获取ID(适合MySQL)→ 把号码写入包裹单的"id"栏。确保快递柜(数据库)支持自增功能。MySQL支持批量获取自增ID。Oracle需配合序列使用。SQL Server需检查。
2025-06-05 11:44:13
962
原创 Mybatis如何执行批量插入?
SQL长度有限制(需注意数据库配置的max_allowed_packet)箱子太大(SQL太长)会被收费站(max_allowed_packet)拦下。1000个快递要重复1000次流程,前台累瘫(性能差)寄100件要跑100次,累到虚脱(10秒)流水线自动处理,100件秒过(0.5秒)整列车直接发走,万件起步(0.1秒)1车拉走100件,但装箱慢(3秒)包裹预处理(预编译SQL)只做一次。但需要提前报备(文件预处理)卡车(数据库连接)只跑一趟。传送带自动分拣(批量执行)批量操作必须显式管理事务。
2025-06-05 11:33:48
1455
原创 跨域请求是什么?有什么问题?怎么解决?
跨域是指浏览器在发起⽹络请求时,会检查该请求所对应的协议、域名、端⼝和当前⽹⻚是否⼀致,如 果不⼀致则浏览器会进⾏限制,⽐如在www.baidu.com的某个⽹⻚中,如果使⽤ajax去访问 www.jd.com是不⾏的,但是如果是img、iframe、script等标签的src属性去访问则是可以的,之所以浏览器要做这层限制,是为了⽤户信息安全。jsonp的⽅式,该技术底层就是基于script标签来实现的,因为script标签是可以跨域的。⽹关,和第三种⽅式类似,都是交给后台服务来进⾏跨域访问。
2025-05-21 15:36:55
412
原创 浏览器发出⼀个请求到收到响应经历了哪些步骤?
然后servlet来处理这个请求,如果是SpringMVC中的DispatcherServlet,那么则会找到对应的Controller中的⽅法,并执⾏该⽅法得到结果。服务器收到请求后,根据请求所指定的端⼝,将请求传递给绑定了该端⼝的应⽤程序,⽐如8080被tomcat占⽤了。tomcat接收到请求数据后,按照http协议的格式进⾏解析,解析得到所要访问的servlet。Tomcat得到响应结果后封装成HTTP响应的格式,并再次通过⽹络发送给浏览器所在的服务器。
2025-05-21 15:36:16
212
原创 TCP的三次握手和四次挥手
服务端接收FIN后,向客户端发送ACK,表示我接收到了断开连接的请求,客户端你可以不发数据了,不过服务端这边可能还有数据正在处理。TCP协议是7层网络协议中的传输层协议,负责数据的可靠传输。服务端处理完所有数据后,向客户端发送FIN,表示服务端现在可以断开连接。客户端收到服务端的FIN,向服务端发送ACK,表示客户端也会断开连接了。客户端接收到SYN_ACK后,再给服务端发送⼀个ACK。服务端接收到SYN后,给客户端发送⼀个SYN_ACK。客户端向服务端发送⼀个SYN。客户端向服务端发送FIN。
2025-05-21 15:35:35
232
原创 epoll和poll的区别
epoll模型,epoll和poll是完全不同的,epoll是⼀种事件通知模型,当发⽣了IO事件时,应⽤程序才进⾏IO操作,不需要像poll模型那样主动去轮询。poll模型,使⽤的是链表来存储Socket连接⽂件描述符,容量是不固定的,同样需要通过轮询来判断是否发⽣了IO事件。select模型,使⽤的是数组来存储Socket连接⽂件描述符,容量是固定的,需要通过轮询来判断是否发⽣了IO事件。
2025-05-21 15:34:55
217
原创 什么是SSO?与OAuth2.0有什么关系?
OAuth2.0的使⽤场景通常称为联合登录, ⼀处注册,多处使⽤SSO Single Sign On 单点登录。⾸先需要待接⼊的第三⽅应⽤在开放授权平台进⾏注册,注册需要提供⼏个必要的信息clintID, 消息推送地址,密钥(⼀对公私钥,私钥由授权平台⾃⼰保存,公钥分发给第三⽅应⽤)。接下来:授权开放平台同步响应第三⽅应⽤的只是消息是否处理成功的结果。⽽真正的业务数据由授权开放平台异步推动给第三⽅应⽤预留的推送地址。然后,第三⽅应⽤引导客户发起请求时,采⽤公钥进⾏参数加密,授权开放平台使⽤对应的私钥解密。
2025-05-21 15:34:18
353
原创 什么是OAuth2.0协议?有哪⼏种认证⽅式?
OAuth2.0是⼀个开放标准,允许⽤户授权第三⽅应⽤程序访问他们存储在另外的服务提供者上的信息,⽽不需要将⽤户名和密码提供给第三⽅应⽤或分享他们数据的所有内容。OAuth2.0协议的认证流程,简单理解,就是允许我们将之前的授权和认证过程交给⼀个独⽴的第三⽅进⾏担保。
2025-05-21 15:33:39
318
原创 什么是CSRF攻击?如何防止?
CSRF: Cross Site Requst Forgery 跨站请求伪造,⼀个正常的请求会将合法⽤户的session id保存到浏览器的cookie。这时候,如果⽤户在浏览器中打来另⼀个tab⻚, 那这个tab⻚也是可以获得浏览器的cookie。如果有⼀个⽤户,登录了银⾏⽹站,然后⼜打开浏览器的另⼀个tab⻚,点击了这个图⽚。这时,银⾏就会受理到⼀个带了正确cookie的请求,就会完成转账。在请求中放⼊⼀个攻击者⽆法伪造的信息,并且该信息不存在于cookie当中。尽量使⽤POST请求,限制GET请求。
2025-05-21 15:32:56
281
原创 什么是认证和授权?如何设计⼀个权限认证框架?
当服务器tomcat第⼀次接收到客户端的请求时,会开辟⼀块独⽴的session空间,建⽴⼀个session对象,同时会⽣成⼀个session id,通过响应头的⽅式保存到客户端浏览器的cookie当中。以后客户端的每次请求,都会在请求头部带上这个session id,这样就可以对应上服务端的⼀些会话的相关信息,⽐如⽤户的登录状态。session黏贴: 在负载均衡中,通过⼀个机制保证同⼀个客户端的所有请求都会转发到同⼀个tomcat实例当中。如果没有客户端的Cookie,Session是⽆法进⾏身份验证的。
2025-05-21 15:31:35
251
原创 从业务场景的角度,让你设计⼀个MQ,你会如何设计?
支持多种寄件方式:电话/APP/柜台(HTTP/MQTT协议)全局有序:单写者模式(如Kafka的单Partition)设计:专车直送+全程GPS追踪(同步刷盘+事务消息)设计:临时仓库+分批次发货(内存队列+批量压缩):高峰期提示"当前排队50人"(令牌桶限流)客户端保存:灵活重置(如RocketMQ):同一收件人的包裹必须按顺序送(哈希分区)物联网场景:Kafka分区设计+分层存储。服务端保存:简化客户端(如Kafka)设计:空运+多港口备份(多副本同步)让客户先领"电子排队号"(请求入队)
2025-05-21 15:27:36
878
原创 如何保证消息的高效读写?
零拷⻉: 有两种⽅式, mmap和transfile,Java当中对零拷⻉进⾏了封装, Mmap⽅式通过MappedByteBuffer对象进⾏操作,⽽transfile通过FileChannel来进⾏操作。每次顾客要货,店员都得去仓库查库存(磁盘IO),来回跑腿(高延迟)顾客点汉堡后,店员现去农场杀牛(从磁盘读取),等1小时(高延迟)所有顾客排一队,等唯一收银员(全局锁),队伍越来越长(低吞吐)到货架(PageCache),顾客直接取货(内存访问)。:搬运工(CPU)累死,发货慢(高CPU占用)
2025-05-14 15:55:56
1107
计算机组成原理(唐朔飞)
2018-03-08
Java SSH spring 无法读取候选组件类
2017-11-15
ASP.NET MVC 怎么实现显示登录用用户名
2017-06-11
Asp.net</form> 的问题
2017-05-31
这是什么问题 看的不是很明白
2017-05-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅