- 博客(1189)
- 收藏
- 关注
原创 “热点数据永不过期”方案
摘要: 针对电商秒杀活动等高频访问、极少变更的热点数据,采用“Redis永不过期缓存”方案可避免缓存击穿。核心流程:1)系统启动或定时任务主动加载数据至Redis(不设TTL);2)用户请求直接读取缓存;3)数据变更时由后台手动更新缓存与数据库。此方案通过确保缓存持续可用,防止瞬时高并发请求压垮数据库。适用场景:极高频访问且几乎不变的数据(如首页推荐商品),需配合后台主动更新机制保障一致性。 (字数:149)
2025-09-13 05:15:00
353
原创 为什么复杂的架构一定要做分层设计?
摘要:分层设计是复杂系统架构的重要原则,通过职责分离提升可维护性、可扩展性和安全性。它遵循单一职责和开闭原则,支持独立修改和优化各层功能,提高代码复用性和团队协作效率。实际案例如电商系统和社交平台证明,分层设计能有效管理复杂性,支持功能扩展和性能优化,是构建高质量系统的关键方法。
2025-09-12 05:15:00
916
原创 【办公自动化】如何使用Python库高效自动化处理图像?
本文介绍了如何使用Python库实现办公自动化中的图像处理任务。通过Pillow和OpenCV两个强大的库,可以高效完成批量缩放、裁剪、水印添加和格式转换等操作。文章重点讲解了Pillow的基本使用方法,包括图像打开/保存、尺寸调整(含等比例缩放)、裁剪、旋转、格式转换以及添加文字水印等常见功能,并提供了详细的代码示例。这些自动化方法能显著提升办公效率,减少重复性工作,特别适合需要处理大量图像文件的场景。
2025-09-11 05:15:00
639
原创 vue3高德地图api整合封装(自定义撒点、轨迹等)
本文总结了Vue3项目中高德地图API的封装实现,主要包含地图初始化、交通图层控制、自定义撒点标记和轨迹回放等功能。通过自定义DOM元素实现不同状态的撒点样式(在线/充电/停车),并支持聚合显示。文章提供了核心代码片段,包括地图初始化配置、交通图层管理以及自定义标记DOM构建方法,重点解决了不同类型点位显示和聚合交互问题。实现过程中通过插件注入方式集成了地图缩放、工具条、地理编码等常用功能,为类似地图应用开发提供了参考方案。
2025-09-10 05:15:00
735
原创 Elasticsearch有哪几种分页方式?该如何选择?
Elasticsearch 提供四种主要分页方式:1) from/size 简单易用但深页性能差,适合浅分页;2) search_after 高效处理深页但需维护状态,适合连续数据流;3) Scroll API 适合批量处理大数据但资源消耗大;4) Point in Time 保证数据一致性,适合结合 search_after 使用。选择时应考虑分页深度、数据一致性要求和资源限制,浅页用 from/size,深页用 search_after,批量处理用 Scroll,一致性要求高则用 PIT。
2025-09-09 05:15:00
961
原创 博彦科技真实面试问题
这是一篇关于技术面试的对话记录,主要围绕高并发系统设计展开讨论。内容包括:自我介绍、项目功能讲解、线程接入框架方式、系统流量和TPS数据、幼儿园系统并发支撑方案、数据库优化(分库分表)、Redis分布式锁实现、MySQL索引结构等核心技术问题。同时涉及研发流程(编码、自测、联调)、工作强度等常规面试问题,最后包含异地工作等生活问题。对话展现了典型的技术面试场景,全面考察候选人的系统设计能力、技术深度和工作适应性。
2025-09-08 10:47:49
127
原创 揭秘Webpack:从零实现一个简易JavaScript打包器
本文介绍了如何实现一个简易JavaScript模块打包器,核心流程包括:1)解析入口文件生成AST并收集依赖;2)递归构建完整依赖图;3)将依赖图转换为可执行代码。通过@babel相关工具实现代码解析、依赖分析和ES6转ES5,最终生成一个立即执行函数(IIFE)打包结果。该实现模拟了Webpack等现代打包工具的核心功能,展示了模块化代码如何被转换为浏览器可执行的单一文件。关键点包含:依赖图构建、模块隔离处理、require/exports机制模拟等,为理解前端工程化工具原理提供了实践参考。
2025-09-07 05:15:00
597
原创 vue实现甘特图效果
本文介绍了使用Vue实现甘特图效果的关键技术方案。主要内容包括: 数据结构设计:定义父子任务的数据结构,包含任务ID、名称、时间戳、状态、进度等字段,支持层级任务树结构。 时间轴算法:实现本周/本月/本季三种时间周期视图,包含日期范围计算和时间线日期生成逻辑。 核心定位算法:详细说明了任务条在时间轴上的精确定位方法,包括时间标准化、有效范围计算和位置百分比转换。 组件结构:采用分层设计,包含筛选区、时间轴头部和任务行主体,支持父子任务的展开/折叠功能。 该方案通过合理的数据结构和精确的定位算法,实现了专业级
2025-09-06 05:15:00
1405
原创 告别“失忆”AI:打造有记忆、有温度的智能助手
Data@Builder// 1001-数据事件,1002-停止事件,1003-参数事件拥有独立会话空间的AI助手支持流式、自然对话的智能系统遵循严格业务规则的专业客服能够优雅停止回答的“懂礼貌”助手具备持久会话记忆的“有温度”伙伴不再是“金鱼脑”,而是真正懂你、记得你的智能助手。未来,让我们一起持续优化,让AI陪伴更贴心、更高效。
2025-09-05 17:32:08
367
原创 跨端技术哪家强?
跨端技术对比分析(150字摘要) 本文对比分析Kuikly、React Native、美团MRN、Flutter和Lynx五大跨端框架。从技术原理看,Kuikly采用Kotlin Multiplatform实现原生渲染,性能最优;Flutter自绘引擎表现稳定;RN和Lynx依赖桥接,开发效率高但性能略低。动态化能力方面,Kuikly支持原生级动态更新,Lynx适合内容频繁变动的业务。多端覆盖上,Kuikly和Flutter支持最全平台。团队协作方面,Flutter和RN生态成熟,Kuikly适合Kotli
2025-09-04 10:05:19
1090
原创 Iframe 跨域问题全解析:5 种方案及适用场景
Iframe 跨域问题解决方案摘要 跨域问题是 Iframe 使用中的常见挑战,主要由浏览器的同源策略引起。本文总结了5种解决方案: document.domain:适用于同主域不同子域场景,通过设置相同主域解除限制 postMessage(推荐):HTML5标准方案,支持任意跨域双向通信,需注意消息验证 服务器代理:通过同源服务器中转请求,适合无法控制目标服务器的场景 CORS:需服务器配合设置HTTP头,适用于资源加载场景 历史方法(window.name/location.hash):已逐渐被post
2025-09-03 05:15:00
923
原创 客户端存储 - IndexedDB
IndexedDB是HTML5引入的强大客户端存储API,支持结构化数据的高效存储和检索。相比Cookies和LocalStorage,它突破了存储容量限制(最大约250MB),支持复杂查询、事务处理和索引功能。本文详细介绍了IndexedDB的发展历程、技术原理和核心API,包括键值存储、对象存储、索引和事务等核心概念。通过完整代码示例,演示了CRUD操作、处理数据关系以及使用索引进行高级查询等实际应用场景。IndexedDB特别适合需要离线功能或处理大量结构化数据的Web应用,如博客系统、电商平台等复杂
2025-09-02 05:15:00
740
原创 为什么不推荐使用@Transactional声明事务
Spring提供两种事务管理方式:声明式(@Transactional)和编程式(TransactionTemplate)。@Transactional虽然简单易用,但存在内部调用无效、默认异常行为不直观、不支持异步/远程调用等问题。TransactionTemplate则提供更细粒度控制,适用于复杂逻辑、多线程和嵌套事务场景。建议简单业务使用@Transactional,复杂场景选择TransactionTemplate以获得更好的灵活性和可控性。核心区别在于易用性与控制力之间的权衡。
2025-09-01 05:15:00
424
原创 Redis7系列: 用 1% 的内存解决 99% 的难题
Redis7通过Bloom Filter和HyperLogLog两种概率型数据结构,以极小内存解决大数据难题。Bloom Filter使用位数组和多哈希函数,实现高效元素存在性检测,适用于注册查重、风控黑名单等场景,百万数据仅需0.1MB内存。HyperLogLog采用概率统计和分桶算法,12KB内存即可统计十亿级UV,误差仅0.81%。两者各有所长:Bloom Filter用于存在判断,HyperLogLog用于基数统计。使用时需注意Bloom Filter的误判特性和HyperLogLog的近似性质,避
2025-08-31 05:15:00
456
原创 年少不知自增好,错把UUID当个宝!!!
摘要: 在 MySQL 中使用 UUID 作为主键可能导致性能问题,因其无序性和字符串特性(36字节)会引发索引分裂、插入效率低、查询慢等问题。相比整型主键,UUID 占用更大存储空间,字符串比较更耗时,且修改数据时索引刷新代价高。优化方案包括:改用有序 UUID(如 UUIDv7)、二进制存储(BINARY(16))、自增主键+UUID 组合,或对大表分区。核心结论:自增主键在单机系统中性能更优,UUID 适用于分布式场景但需优化存储方式。
2025-08-30 05:15:00
388
原创 反射太慢了?那是你不会用LambdaMetafactory!
摘要:LambdaMetafactory - 高性能反射替代方案 Java 8引入的LambdaMetafactory通过动态生成lambda实现类,在保持反射灵活性的同时大幅提升性能。其核心原理是使用MethodHandle和CallSite机制,在运行时生成优化的字节码实现方法调用。相比传统反射,LambdaMetafactory减少了安全检查开销,支持JIT优化,特别适合高频调用场景。性能测试显示,在10亿次调用中,LambdaMetafactory耗时仅比直接调用慢3%,而反射调用则慢36%。该技术
2025-08-29 05:15:00
633
原创 面试官问我:你写代码会复用公共SQL么?
摘要 在Java后端开发面试中,面试官询问了公共SQL复用的问题。作者分享了三种实现方式:1) 使用MyBatis的<sql>标签定义复用SQL片段;2) 通过动态SQL和Java工具类实现分页等复杂逻辑复用;3) 用常量类管理SQL片段。SQL复用的优势包括减少重复代码、提高维护性和保证一致性,这些方法在实际项目中能显著提升开发效率。
2025-08-28 05:15:00
372
原创 java程序员必须掌握的 InheritableThreadLocal
文章摘要: Java程序员必须掌握InheritableThreadLocal,它解决了父子线程间的数据传递问题。通过分析Shiro上下文资源在多线程中的传递机制,揭示了InheritableThreadLocal的使用场景和实现原理。文章重点指出在线程池中使用InheritableThreadLocal的陷阱:线程复用会导致上下文污染。针对这一问题,提出了两种解决方案:避免在线程池中获取InheritableThreadLocal资源,或使用Spring的TaskDecorator接口处理上下文。最后给出
2025-08-27 10:32:37
497
原创 TypeScript高手密技:解密类型断言、非空断言与 `const` 断言
本文介绍了TypeScript中的三种高效类型断言技巧。首先讲解了基本类型断言的两种语法:as语法和尖括号语法。其次重点介绍了两种高级断言:非空断言操作符(!)用于排除null/undefined情况,需谨慎使用;const断言(as const)可将对象/数组转为不可变类型并精确推断字面量类型。最后提醒开发者避免滥用断言,优先使用类型守卫等更安全的类型收窄方式,特别是要避免使用as any这种完全关闭类型检查的方案。合理使用这些技巧能在保证类型安全的同时提升开发效率。
2025-08-27 10:30:59
195
原创 Java 泛型中的通配符 T,E,K,V,?有去搞清楚吗?
本文介绍了Java泛型中的常见通配符T、E、K、V、?的作用和区别。泛型提供了类型安全、消除强制转换、代码复用和增强可读性等优势。T表示任意类型,E表示集合元素类型,K/V表示映射键值类型。通配符?分为无界(<?>)、上界(<? extends T>)和下界(<? super T>)三种,分别用于处理未知类型、限定子类和父类场景。文章通过代码示例展示了不同通配符的使用方法,并指出这些约定虽非强制但能提高代码可读性。最后强调深入理解技术原理对提升编程能力的重要性。
2025-08-27 05:15:00
274
原创 100W QPS高可用架构和系统设计
本文探讨了100W QPS级别的高可用系统设计思想与实践方法。首先阐述了可用性概念,指出高可用系统需要达到99.99%以上的可用性。随后从研发规范、容量规划、服务设计三个层面详细介绍了高可用系统的构建方法,包括方案评审、代码规范、容量评估、无状态设计、弹性扩缩容、消息队列异步解耦等关键技术。特别强调了过载保护机制,如限流、熔断、降级等措施的重要性。文章通过电商、演唱会等实际案例,说明如何通过分层架构和消息队列实现系统解耦,应对突发流量。整体提供了从理论到实践的高可用系统设计指导。
2025-08-26 05:15:00
960
原创 Guava 简介:让 Java 开发更高效
Guava是Google提供的Java工具库,包含集合处理、缓存、并发编程和字符串处理等实用工具。主要功能包括:ImmutableList、Multiset等扩展集合类,CacheBuilder构建缓存,ListenableFuture简化并发编程,Joiner/Splitter处理字符串,以及Preconditions参数校验。Guava能显著简化代码、提高性能(如缓存数据库查询结果)并减少错误(如使用Multimap处理一对多关系)。通过防御性编程和实用API,Guava为Java开发者提供了高效可靠的
2025-08-25 05:15:00
775
原创 支付宝或者微信支付业务
本文介绍了支付宝/微信支付的业务流程及可能出现的问题解决方案。支付流程包括订单生成、支付、转账确认等8个步骤,关键问题包括数据安全、超卖和支付失败处理。数据加密方面,采用单向加密、对称加密和非对称加密保障通信安全;超卖问题通过悲观锁、乐观锁、Redis+异步队列等技术组合解决;支付失败可使用Redis TTL缓存策略处理。文章总结指出,通过加密技术、乐观锁、Redis缓存和异步队列等方案,能有效保障支付业务的安全性和稳定性,避免超卖等问题。
2025-08-24 05:15:00
833
原创 Dockerfile不会写?于是我花十分钟看了这篇文章
本文介绍了Dockerfile的基本概念和使用方法,通过一个实际案例展示了如何编写Dockerfile来构建Java应用镜像。主要内容包括: Dockerfile核心指令解析:FROM指定基础镜像、RUN执行命令、COPY复制文件、EXPOSE声明端口、ENTRYPOINT定义启动命令 docker build命令的常用选项和示例用法 docker run命令启动容器的基本方法 Docker镜像的分层结构原理 BuildKit构建器的启用方式(#syntax注释) 文章通过比喻和结构图帮助理解Docker镜
2025-08-23 05:15:00
1294
原创 为什么 Java 大佬都不推荐使用 keySet() 遍历HashMap?
Java专家不推荐使用keySet()遍历HashMap的主要原因在于性能和效率问题。keySet()方法需要额外生成键集合并通过get()方法多次查找值,导致两次哈希查找操作,在数据量大时效率较低。相比之下,entrySet()方法直接返回键值对集合,只需一次遍历就能获取键和值,避免了重复查找的开销。性能测试表明entrySet()比keySet()快约30-50%,特别是在大数据量时差异更明显。此外,entrySet()还减少了内存消耗,代码可读性更好。因此,在遍历HashMap时,推荐优先使用entr
2025-08-22 05:15:00
669
原创 Redis 热 key 的终极解决方案?京东、得物、b 站都是如何解决的?
摘要 Redis热key问题指特定key被高频访问导致流量倾斜,可能引发缓存雪崩。常见于爆款商品、秒杀等场景,难以预测且无法单纯通过扩容解决。解决方案包括: 发现热key: Redis Monitor命令(性能开销大) 抓包分析(实现复杂) 客户端收集(内存负担重) 聚合服务(如京东hotkey框架) Redis源码改造(成本高) 终极解决方案——本地缓存: 将热key数据缓存到应用本地,避免访问Redis 优势:性能更高、减轻Redis压力、解决大key带宽问题 挑战:内存限制、实时性要求、数据一致性保障
2025-08-21 05:15:00
848
原创 吃透这六大设计模式,你也能写出优雅代码!
本文介绍了三种常用的设计模式:单例模式、代理模式和工厂模式。单例模式确保类只有一个实例,提供饿汉式(立即加载)和懒汉式(延迟加载)两种实现方式;代理模式通过代理类控制对目标对象的访问,分为静态代理和动态代理,适用于权限控制、日志记录等场景;工厂模式封装对象创建过程,包括简单工厂模式,适用于日志记录器、数据库访问等需要灵活创建对象的场景。这些设计模式能帮助开发者编写更清晰、可维护的代码结构。
2025-08-20 05:15:00
779
原创 告别重复劳动:SpringBoot公共字段自动填充的六种武器
本文介绍了SpringBoot中实现公共字段自动填充的多种方案,重点分析了MyBatis-Plus自动填充和AOP统一处理两种核心方法。通过示例代码展示了如何配置元对象处理器、自定义注解和编写切面逻辑,有效解决公共字段维护中的代码重复、维护困难和遗漏风险等问题。文章还提供了多数据源适配、分布式ID生成等生产环境实践,以及空指针防护等常见问题的解决方案,帮助开发者根据项目需求选择最适合的自动填充策略,显著提升开发效率和代码质量。
2025-08-18 05:15:00
247
原创 RedisTemplate和Redisson的区别
Redisson与RedisTemplate的主要区别在于功能定位:Redisson提供丰富的分布式服务(如分布式锁、集合、对象等),适合复杂分布式系统开发;RedisTemplate则专注于基本Redis数据结构的操作,适合简单场景。Redisson自动适配不同Redis部署模式(单点/集群/哨兵),而RedisTemplate需要手动处理分布式逻辑。性能上,RedisTemplate更轻量但对复杂功能需自行实现。开发体验上,Redisson提供高级API简化开发,RedisTemplate则更灵活可控。
2025-08-17 05:15:00
1590
原创 Java高效开发实战:10个让代码质量飙升的黄金法则
摘要: 本文总结了提高Java代码质量的6个黄金法则:1)使用参数化日志替代字符串拼接,提升28%性能;2)采用Guava+Stream优化集合处理,减少14%耗时;3)通过异常包装实现精确错误传递;4)利用Try-With-Resources自动管理资源;5)使用CompletableFuture实现并行编排,降低60%调用时间;6)借助Apache Commons进行防御性编程。这些实践在日志、集合、异常、资源、并发等关键场景中,从代码可读性、性能和健壮性三个维度显著提升开发质量。
2025-08-16 11:05:44
666
原创 中国移动 Java 一面,直接秒了。。。
Java面试中常考察核心概念:Java优势包括跨平台、面向对象、强大生态、自动内存管理;劣势是性能开销和语法繁琐。依赖注入通过Spring容器管理对象依赖,降低耦合。MyBatis在SQL灵活性、动态SQL和结果映射方面表现优异。HashMap线程不安全,可用ConcurrentHashMap替代。String不可变,StringBuilder和StringBuffer可变,后者线程安全。hashCode()与equals()需同时重写以保持一致性,确保对象在哈希集合中正确存储和检索。
2025-08-12 05:15:00
743
原创 2025年软件开发的趋势
2025年软件开发将呈现AI深度融合、低代码普及和云原生主流化三大趋势。AI将重构开发流程,自动化代码生成、调试和测试,使开发者更专注于创新;低代码/无代码平台进一步降低开发门槛,加速应用交付;云原生技术成为标准,推动可扩展的云应用发展。同时,DevSecOps整合安全流程,伦理AI受重视,可持续开发理念兴起。远程协作工具升级,跨职能团队协作增强,API优先策略和CI/CD流程优化开发效率。边缘计算提升实时处理能力,个性化体验和以人为本设计成为UX核心。这些变革将全面提升软件开发效率、质量和用户体验。
2025-08-10 05:15:00
1041
原创 点赞功能开发
本文介绍了点赞功能的开发方案。由于点赞业务具有高频特性,采用Redis处理并发问题,数据库通过定时任务同步数据。设计包含三个关键信息:点赞人、被点赞题目和点赞状态。Redis使用hash类型存储数据,string类型存储点赞数和用户标记。功能实现包括新增/取消点赞接口,通过操作Redis实现点赞状态切换和计数。同时为题目详情增加了点赞数量和当前用户点赞状态查询功能,直接从Redis获取数据。该方案有效解决了高并发场景下的点赞业务需求,通过Redis与数据库的配合确保了数据一致性和系统性能。
2025-08-09 05:15:00
1049
原创 SpringBoot实现网页消息推送的5种方法
本文介绍了SpringBoot实现网页消息推送的5种方法,包括短轮询、长轮询、Server-Sent Events (SSE)等。短轮询简单但资源消耗大,长轮询减少无效请求但服务器资源占用高,SSE支持服务器单向推送。文章详细分析了每种方案的原理、实现代码、优缺点及适用场景,帮助开发者根据项目需求选择合适的技术方案实现实时消息推送功能。
2025-08-08 05:15:00
803
原创 URL地址末尾加不加”/“有什么区别
URL结尾是否带/会影响服务器解析和相对路径。带/通常表示目录,服务器会返回默认文件(如index.html),相对路径基于该目录解析;不带/可能被视为文件或触发重定向,导致相对路径解析错误。SEO方面可能被视为不同页面,建议统一规则并使用301重定向。API请求中带/与否可能导致不同结果,需遵循API规范。最佳实践是统一URL格式并测试API行为。
2025-08-07 05:15:00
260
原创 为什么用了 Stream,代码反而越写越丑了?
摘要: Java 8的Stream API虽能简化集合操作,但滥用可能导致代码可读性下降。常见问题包括:过度链式调用使逻辑模糊、懒加载特性导致执行不直观、调试困难以及不当并行化引发性能问题。优化建议:拆分长链式调用、明确终止操作、增强代码可读性,并谨慎评估并行流使用场景。合理运用Stream才能发挥其简洁高效的优势,避免“代码变丑”。(150字)
2025-08-06 05:15:00
1006
原创 别只会写 SELECT,这10个 MySQL 技巧太香了
这篇文章介绍了10个实用的MySQL技巧,帮助开发者提升数据库操作效率。主要内容包括:使用JSON类型存储灵活数据、WITH ROLLUP进行分组统计、CASE WHEN条件统计、INSERT IGNORE避免重复插入、ON DUPLICATE KEY UPDATE实现插入或更新、FIND_IN_SET进行集合查询、GROUP_CONCAT合并多行数据、EXISTS优化子查询性能,以及ROW_NUMBER()实现分页功能。每个技巧都配有实际SQL示例,特别适合需要优化数据库查询和统计功能的开发者参考。这些技
2025-08-05 05:15:00
565
原创 别再用后缀判断文件类型了,来认识一下魔数头
本文介绍了通过文件魔数头识别文件类型的方法,相比传统后缀名方式更加准确可靠。文章首先解释了魔数的概念,即文件开头特定字节序列,作为文件格式的唯一标识。然后详细阐述了文件类型检测的原理和步骤,包括读取文件头、比较魔数等关键操作。最后提供了Java实现方案,包含文件类型枚举定义和工具类代码,支持通过文件输入流判断文件类型。该方法可有效识别JPEG、PNG、PDF等多种常见文件格式,具有实际应用价值。
2025-08-04 05:15:00
732
原创 Java 泛型中的通配符 T,E,K,V,?有去搞清楚吗?
Java泛型通配符T、E、K、V、?的作用与区别: 泛型作用:提供编译时类型检查,避免运行时类型转换错误,增强代码安全性和可读性。 常见通配符: T (Type):表示任意类型 E (Element):常用于集合元素类型 K (Key) / V (Value):表示Map的键值类型 ?(通配符): <?>:无界通配符,接收任意类型 <? extends T>:上界通配符,表示T或其子类 <? super T>:下界通配符,表示T或其父类 使用场景: 上界通配符用于安全读取
2025-08-03 05:15:00
292
原创 为什么CPU缓存偏偏是三级?少一级不够,多一级浪费?
CPU缓存采用三级结构是性能与成本的黄金平衡。初代单级缓存(16KB L1)无法满足需求,双核时代引入的二级缓存又出现共享冲突。三级缓存通过分层设计(L1 32-64KB、L2 256KB-2MB、L3 8-128MB)在90%命中率下实现最优延迟。两级缓存会导致多线程性能下降23%,而实验性四级缓存仅提升5%性能却增加18%面积和22%功耗。未来3D堆叠和新型存储材料可能优化缓存架构,但目前三级结构仍是效率最优解,如同快递网络:L1是楼下快递柜,L2是社区驿站,L3是区域分拣中心,少一级不够用,多一级不划
2025-08-02 05:15:00
516
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人