- 博客(67)
- 收藏
- 关注
原创 悲观锁和乐观锁
悲观”地假设冲突很可能发生。在操作数据(尤其是修改)之前,预先锁定该数据,确保在持有锁的期间,其他事务无法修改(甚至有时无法读取)该数据,从而避免冲突。“先取锁,再操作”。事务开始时或操作数据前就获取锁(如行锁、表锁),直到事务提交或回滚才释放。
2025-06-06 21:25:31
505
原创 LeetCode Hot100刷题——单词拆分
给你一个字符串s和一个字符串列表wordDict作为字典。如果可以利用字典中出现的一个或多个单词拼接出s则返回true。不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。wordDict。
2025-06-05 23:05:53
399
原创 LeetCode Hot100刷题——零钱兑换
给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。
2025-06-05 15:45:44
1010
原创 LeetCode Hot100刷题——完全平方数
给你一个整数n,返回和为n的完全平方数的最少数量。是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,149和16都是完全平方数,而3和11不是。
2025-06-03 19:20:14
457
原创 LeetCode Hot100刷题——跳跃游戏
给你一个非负整数数组nums,你最初位于数组的。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回true;否则,返回false。
2025-05-29 22:09:21
326
原创 LeetCode Hot100刷题——环形链表
给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。pos。仅仅是为了标识链表的实际情况。如果链表中存在环,则返回true。否则,返回false。-1。
2025-05-28 21:22:21
967
原创 LeetCode Hot100刷题——除自身以外数组的乘积
给你一个整数数组nums,返回 数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据数组nums之中任意元素的全部前缀元素和后缀的乘积都在整数范围内。请且在O(n)时间复杂度内完成此题。answer[i]
2025-05-18 20:04:06
477
原创 Room数据库
Room 是 Android Jetpack 提供的一个ORM(对象关系映射)库,用于简化 SQLite 数据库操作。它将 SQLite 表映射为 Java/Kotlin 对象,通过注解自动生成数据库操作代码,避免手动编写 SQL 语句,提升开发效率和代码可维护性。优势:编译时检查SQL查询,避免运行时错误。通过注解自动生成数据库操作代码。与数据观察机制无缝集成,数据变化时自动通知UI。2. Room的核心组件定义数据库中的表结构,每个Entity对应一张表。通过注解配置字段、主键、索引等。
2025-05-16 19:58:55
357
原创 MVVM框架
本文将介绍Android中的MVVM(Model-View-ViewModel)技术框架,包括其基本概念、核心思想、优缺点、应用场景等。
2025-05-16 15:12:29
841
原创 LeetCode Hot100刷题——合并区间
以数组intervals表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].[[1,5]]区间 [1,4] 和 [4,5] 可被视为重叠区间。检查输入数组是否为空或长度为0,如果是,直接返回空数组。否则,对intervals数组进行排序。使用Arrays.sort自定义Comparator。创建merged列表,初始时加入第一个区间。
2025-05-16 10:56:37
615
原创 Redis的两种持久化方式:RDB和AOF
Redis作为内存数据库,数据存储在内存中。为了保证数据在服务器重启或宕机时不丢失,Redis提供了两种持久化方案:RDB(Redis Database):定时生成内存快照AOF(Append Only File):记录写操作命令混合持久化:结合RDB和AOF优势。
2025-04-26 20:04:58
1021
原创 黑马点评之Feed流技术实现关注推送与滚动分页查询
关注推送也叫做Feed流,直译为“投喂”。为用户持续的提供“沉浸式体验”,通过无限下拉刷新获取新的信息。Feed流(信息流)是一种常见的内容分发形式,通过动态更新的内容列表向用户展示个性化或实时信息。典型应用包括社交媒体(如微博、朋友圈)、新闻推荐(如今日头条)、短视频平台(如抖音)等。其核心是将内容按特定规则排序并持续推送给用户,提升用户粘性和参与度。
2025-04-22 22:02:57
1151
原创 黑马点评之达人探店(点赞、点赞排行榜)
业务逻辑分析以"blog:liked:" + 博客id为键,value为用户ID集合。检查用户ID是否存在于对应博客的Set中:根据博客ID查询时,检查当前登录用户ID是否在 blog:{blogId}:likes 的Set中,若存在则 isLike = true,否则 isLike = false。对分页结果中的每个博客,执行上述检查,为每个博客的isLike字段赋值。使用Redis的。
2025-04-22 19:12:03
860
原创 黑马点评 秒杀优惠券集群下一人一单超卖问题
在单机环境下实现“一人一单”时,使用了synchronized关键字对用户ID加锁,确保同一用户只能有一个线程执行下单操作。假设同一用户发起和同时通过检查(count == 0两者都通过检查,最终插入两条订单。这在下是有效的,因为,只能控制同一JVM内的线程同步。但在下,多个服务实例同时运行,每个实例都有自己的JVM,synchronized就无法跨JVM生效了,导致,从而可能绕过“一人一单”的限制。假设系统部署在的请求1到达Node1,请求2到达Node2。和。
2025-04-15 22:13:46
1168
原创 黑马点评 秒杀优惠券单体下一人一单超卖问题
步骤操作并发安全措施查询优惠券信息检查时间、库存无用户加锁锁防止同一用户重复下单创建订单(事务)检查用户订单、扣库存、插入订单数据库乐观锁、事务隔离操作无事务的风险有事务的保障检查用户订单可能通过检查,但下单时冲突可重复读确保一致性扣减库存超卖(库存扣减到负数)数据库乐观锁(stock > 0)阻止超卖创建订单订单丢失或重复唯一键约束+原子提交保证数据完整。
2025-04-12 14:12:45
1053
原创 LocaDate、LocalTime、LocalDateTime
Java的时间处理在早期版本中存在诸多问题(如 java.util.Date 和 java.util.Calendar 的混乱设计),但Java8引入了引入了全新的 java.time包(基于JSR 310),提供了更清晰、线程安全且强大的时间处理API。
2025-04-04 23:18:25
653
原创 WebSocket
WebSocket是一种基于TCP的网络通信协议,专为设计。它允许客户端和服务器在上双向传输数据,克服了传统HTTP协议单向请求-响应模式的局限性,适用于需要的场景(如聊天、游戏、股票行情、实时数据推送等)。
2025-04-03 19:06:36
1941
原创 Spring Task 定时任务
在Bean的方法上使用@Scheduled注解,指定执行策略。@Service// 固定速率(每隔5秒执行一次,不考虑任务执行时间)// 逻辑代码// 固定延迟(任务结束后等待3秒再执行下一次)// 逻辑代码// Cron表达式(每天12点执行)")// 逻辑代码@Scheduled参数详解参数说明fixedRate固定频率(单位:毫秒),无论前一次任务是否完成,按固定时间间隔执行fixedDelay固定间隔(单位:毫秒),前一次任务结束后,延迟指定时间再执行cron。
2025-04-02 14:58:29
408
原创 软件测试的分类划分详情
单元测试后,将各单元组合成完整的体系,测试软件单位之间的接口是否正确、数据能否正常传递。运行验收测试(OAT):验证系统的部署和运维流程(如备份、恢复)。验证代码逻辑的正确性(如分支覆盖、逻辑覆盖);Selenium(UI自动化)、JMeter(性能测试)、Appium(移动端)等。介于黑盒和白盒之间,部分了解代码结构(如接口定义、架构设计),但不深入代码细节。性能、安全、兼容性、可靠性(非功能测试)非功能测试(如性能、安全、兼容性),针对软件的最小可测试单元(如函数、类、方法等)进行的测试。
2025-04-02 11:10:39
1047
原创 Spring Cache:简化缓存管理的抽象框架
Spring Cache是Spring框架提供的,通过注解和自动化配置,简化应用中对缓存的操作,支持多种缓存实现(如Redis、Ehcache、Caffeine)。
2025-03-29 21:50:26
845
原创 MyBatis之动态SQL
动态SQL是一种根据运行时条件动态生成和执行SQL语句的技术。与静态SQL(在代码中固定写死的SQL)不同,动态SQL允许程序根据不同输入或条件动态灵活构建SQL,适用于需要灵活查询、参数化条件或复杂业务逻辑的场景。通过条件判断、循环等逻辑,灵活拼接SQL字段,避免硬编码复杂的查询或更新逻辑。多条件查询、批量操作、动态字段更新等。
2025-03-26 22:34:48
1009
原创 视图对象(View Object, VO)
通常用于在应用层之间传输数据,特别是在MVC架构中,用于将数据从服务层传递到视图层。例如,当从数据库查询出多个实体类的数据,需要组合成一个对象返回给前端时,可以使用VO来封装这些数据,避免暴露数据结构,同时适应前端展示的需求。在Spring框架中,VO可用于REST API的响应对象,包含前端需要的所有字段,可能组合多个实体类的属性。
2025-03-23 09:19:43
665
原创 Spring常用注解汇总
Component@Service@Bean@Autowired@Autowired@Bean@Primary定义创建Bean的模式(方法上得有@Bean)类型包括:Singleton、Prototype、Request、Session。
2025-03-21 22:57:40
845
原创 ThreadLocal
线程:是操作系统能够调度的最小执行单元,一个进程可以包含多个线程。多线程:指程序中存在多个线程并发执行,以提高 CPU 利用率或实现异步任务处理。并发问题:当多个线程共享同一资源时,可能引发竞态条件(Race Condition)、数据不一致等问题。ThreadLocal 是 Java 中用于实现线程封闭的工具类,它能为每个线程创建一个独立的变量副本,不同线程之间互不干扰。简单来说,ThreadLocal 让每个线程都能拥有自己的“私有”数据。假设有一个储物柜(
2025-03-18 00:07:46
1017
原创 数据传输对象 DTO
数据传输对象(DTO, Data Transfer Object)是一种设计模式,用于在不同系统或应用层之间封装和传输数据。它通常用于解耦领域模型(如数据库实体)和外部接口(如API请求/响应),避免直接暴露内部数据结构,同时优化网络传输效率。
2025-03-16 21:18:01
681
原创 Spring Validation参数校验
步骤1:定义注解String message() default "手机号格式不正确";Class<?Class<?步骤2:实现校验逻辑@Override步骤3:使用自定义注解@Phone。
2025-03-16 10:55:59
446
原创 Spring MVC 拦截器(Interceptor)
Spring MVC拦截器(Interceptor)是一种在请求处理的不同阶段(如Controller方法执行前、执行后、视图渲染后)插入自定义逻辑的机制,常用于实现权限验证、日志记录、性能监控等横切关注点。
2025-03-16 09:18:51
549
原创 SpringBoot 自动配置原理
定义自己的 Bean:Spring Boot 优先使用用户定义的 Bean(会失效)。@Bean// 自定义 DataSource,覆盖自动配置创建自动配置类:@Bean注册配置类到 META-INF/xxx.imports在主启动类上添加了SpringBootApplication注解,这个注解组合了EnableAutoConfiguration注解。
2025-03-12 23:19:37
909
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人