- 博客(224)
- 收藏
- 关注
原创 如何评价代码的质量
摘要:本文探讨了高质量代码的五个核心特性:1)可维护性,强调代码修改时能保持稳定;2)可读性,提出代码应便于人类理解;3)可扩展性,遵循"对修改关闭,对扩展开放"原则;4)灵活性,体现为代码对新功能的兼容性;5)简洁性,遵循KISS原则,用简单方案解决复杂问题。文章指出这些特性相互关联,共同构成优秀代码的标准。其中,可维护性因人而异,而可读性是其他特性的基础,最终目标都是提升代码质量和开发效率。
2025-06-11 21:53:49
353
原创 Spring Security是如何完成身份认证的?
摘要:Spring Security认证流程包含四个关键步骤:1)用户凭证被封装为UsernamePasswordAuthenticationToken;2)AuthenticationManager进行验证;3)验证成功返回包含权限信息的Authentication对象(密码被移除);4)认证信息通过SecurityContextHolder存入安全上下文。示例代码展示了完整的认证过程,包括自定义AuthenticationManager实现和线程绑定认证信息的操作。该流程体现了Spring Securi
2025-06-11 21:45:24
409
原创 UC并发工具 CountDownLatch应用&源码分析
摘要:CountDownLatch是JUC包下的并发计数器工具,用于并行任务协同。主线程通过await()等待计数器归零,子任务完成时调用countDown()减1。源码分析显示其基于AQS实现,state存储计数值,await()阻塞线程至state=0,countDown()CAS减state并在归零时唤醒阻塞线程。适用于多任务并行处理并需全部完成的场景,如文中的三任务并行示例。还介绍了超时等待和中断处理机制。
2025-06-08 14:49:56
906
原创 深入了解NIO的优化实现原理
网络通信中,最底层的就是内核中的网络 I/O 模型了。随着技术的发展,操作系统内核的网络模型衍生出了五种 I/O 模型,《UNIX 网络编程》一书将这五种 I/O 模型分为阻塞式 I/O、非阻塞式 I/O、I/O 复用、信号驱动式 I/O 和异步 I/O。每一种 I/O 模型的出现,都 是基于前一种 I/O 模型的优化升级。
2025-06-08 14:35:13
559
原创 CDN:静态资源如何加速?
CDN(Content Delivery Network/Content Distribution Network,内容分发网络)。简单来说,CDN 就是将静态的资源分发到,位于多个地理位置机房中的服务器上,因此它能很好地解决数据就近访问的问题,也就加快了静态资源的访问速度。在大中型公司里面,CDN 的应用非常的普遍,大公司为了提供更稳定的 CDN 服务会选择自建 CDN,而大部分公司基于成本的考虑还是会选择专业的 CDN 厂商,网宿、阿里云、
2025-06-06 23:04:09
1107
原创 配置管理:成千上万的配置项要如何管理?
配置管理的主要方式包括文件管理和配置中心管理。在Linux系统中,可通过配置文件或sysctl命令动态调整配置。应用开发中,初期常将配置与代码耦合,后期独立为配置文件(如properties、xml、yaml格式),但仍需重启生效。配置中心(如Apollo、Disconf)通过存储和推送机制实现动态更新,避免重启。关键设计包括:选择合适的存储组件(MySQL、ZooKeeper等)、变更推送机制(轮询或长连)、以及高可用方案(客户端两级缓存)。配置中心的高可用性尤为重要,可通过内存和文件缓存实现灾备,确保服
2025-06-06 22:56:22
605
原创 什么是I/O多路复用?
I/O多路复用技术让程序能用单线程高效管理多个I/O流,避免多线程开销。其工作原理类似同时监控多个炉灶:通过集中轮询机制(如select/poll)或事件通知机制(如epoll/kqueue)实时检测各I/O状态,实现单线程并发处理。典型实现包括跨平台的select/poll函数,以及系统专用的epoll(Linux)和kqueue(BSD/Mac),它们都能显著提升程序吞吐量和响应速度。这种技术尤其适合高并发网络应用场景。
2025-06-01 20:55:05
150
原创 在Java中,NIO(New I/O)与传统的I/O模型有什么不同?NIO中的核心组件有哪些?
Java NIO与传统I/O的主要区别在于阻塞机制:传统I/O是阻塞式的,需等待当前操作完成才能继续;而NIO是非阻塞式的,可以同时处理多个I/O操作。NIO的核心组件包括通道(数据传输管道)、缓冲区(数据容器)、选择器(多通道状态监控器)和通道适配器(不同类型I/O接口连接器),这些组件共同提升了I/O处理效率,避免了单线程阻塞问题。NIO模型类似自助餐厅的多任务处理方式,比传统I/O的单线程等待模式更高效。
2025-06-01 20:52:36
207
原创 TCP粘包和拆包问题是如何产生的,以及如何在网络编程中处理这些问题
文章摘要: TCP粘包和拆包是网络编程中的常见问题。粘包指多条消息被合并发送,接收方难以区分;拆包指单条消息被分割发送,接收方难以重组。解决方法包括:添加消息边界标识、使用固定长度消息或在应用层采用JSON/XML等协议处理粘包;通过消息长度标识或固定长度格式避免拆包。这些方法能有效保证TCP传输的准确性和完整性。
2025-06-01 20:50:36
275
原创 电商产品详情接口并发编排提升性能
本文介绍了使用Java的CompletableFuture实现电商系统产品详情接口的并发编排优化。通过异步调用产品基本信息、库存、定价和评论等多个服务,显著提升接口响应性能。文章详细展示了项目结构设计,包括Controller层、Service层和各服务类的实现,重点解析了CompletableFuture.allOf方法用于并发任务编排,以及thenApply进行结果合并的关键技术。这种非阻塞的异步设计不仅提高了系统性能,还保持了代码的模块化和可扩展性,为类似场景的接口优化提供了实用参考方案。
2025-06-01 14:25:09
920
原创 MySQL中的锁
摘要: MySQL InnoDB引擎通过多种锁机制解决并发事务问题,包括共享锁(S锁)和排他锁(X锁)等行级锁,以及表级锁和意向锁。锁的类型根据操作需求选择,读操作可使用MVCC避免阻塞,写操作需加锁保证数据一致性。InnoDB还支持间隙锁(Gap锁)防止幻读。死锁发生在多个事务互相等待资源时,MySQL能自动检测并解除。锁的粒度影响并发性能,行锁比表锁更细粒度但开销更大。实际应用中需平衡锁的并发控制与系统性能。
2025-06-01 11:22:15
1020
原创 Tomcat优化篇
reloadable:如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下 class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用。你可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。nio:new I/O,同步非阻塞的I/O操作,比传统的bio有更好的并发运行性能。
2025-06-01 11:19:25
1311
原创 Https
摘要:HTTPS已成为现代互联网安全的重要标准,本课程将从原理到实战讲解HTTPS技术。内容包括:通过OpenSSL工具生成服务器证书和自建CA机构进行签名,详细介绍在Windows和Linux系统中安装配置OpenSSL的步骤,以及如何创建私钥、待签名证书和根证书。最后讲解如何将生成的证书配置到Nginx服务器,实现HTTPS安全连接。课程旨在帮助学员掌握企业级HTTPS应用技术,提升网站数据传输安全性。
2025-06-01 09:40:12
974
原创 内存模型以及如何判定对象已死问题
本文介绍了Java内存管理相关内容,主要包括: 使用VisualVM的VisualGC插件监控JVM内存; 演示三种内存溢出情况:堆内存溢出(OOM)、方法区溢出(Metaspace)和栈溢出(StackOverflow); 四种引用类型(强引用、软引用、弱引用、虚引用)的区别及代码示例; 对象生命周期和垃圾回收机制,包括可达性分析和GC Roots概念; finalize方法的作用和局限性。 文章通过具体代码演示了各种内存异常场景,并分析了垃圾回收的判断标准和工作原理,帮助理解JVM内存管理机制。
2025-06-01 09:24:21
1165
原创 Java并发编程
本文系统地介绍了Java并发编程的核心知识,涵盖了线程基础、并发特性、锁机制和阻塞队列四大模块。 线程基础部分首先讲解了进程与线程的区别,线程是CPU调度的基本单位。接着详述了多线程的优缺点,包括提升CPU利用率但可能带来线程安全问题。还介绍了线程状态转换、创建线程的三种方式(继承Thread、实现Runnable、实现Callable)以及线程的常用方法。 并发编程三大特性部分深入解析了: 原子性:通过synchronized、CAS、Lock和ThreadLocal四种方式保证 可见性:使用volati
2025-06-01 09:22:36
909
原创 Spring的事务机制
Spring事务机制基于数据库事务和AOP实现,通过代理对象处理@Transactional注解方法,控制事务的创建、提交与回滚。事务隔离级别对应数据库设置,传播机制则通过多数据库连接实现。失效场景包括:非代理对象调用方法或将方法设为private(cglib无法代理)。事务的核心在于修改连接autocommit属性,由AOP在方法执行前后管理事务状态。
2025-05-27 21:33:41
282
原创 作为程序员,你应该有产品意识
产品意识是站在产品角度思考问题的思维方式,包含用户意识、数据意识和商业意识。用户意识要求挖掘真实需求,提升用户体验;数据意识强调通过数据分析验证决策;商业意识关注产品价值。程序员培养产品意识需要转变思维习惯:从技术实现转向用户体验,从功能开发转向价值创造。具备产品意识能提升模块体验、优化技术方案、改善协作效率,为产品和自身带来更大价值。关键在于解放思想、改变习惯并付诸实践,在技术思维基础上融合产品视角。
2025-05-27 21:26:34
350
原创 为什么要使用线程池
摘要:Java线程创建成本高昂,涉及内存分配和系统调用,频繁创建销毁线程效率低下。线程池通过复用线程提升性能,并管理线程统计信息实现高效任务调度。推荐阅读业务幂等性技术架构相关内容。
2025-05-24 16:46:43
228
原创 如何用事件风暴构建领域模型?
本文介绍了通过事件风暴进行领域建模的方法,以用户中台为例,重点阐述了产品愿景和业务场景分析两个关键阶段。产品愿景阶段需要明确产品定位、目标用户和核心价值,通过团队讨论达成一致;业务场景分析则需从用户视角出发,梳理典型业务流程(如系统岗位设置、用户权限配置、登录校验等),识别领域对象。该方法强调跨职能团队参与,确保业务需求与系统设计的有效对接。
2025-05-24 16:39:53
275
原创 领域建模:如何用事件风暴构建领域模型?
摘要: 采用DDD(领域驱动设计)能有效划分微服务的逻辑与物理边界,其战略设计(如事件风暴)比战术设计更关键。事件风暴通过工作坊形式,聚集领域专家、开发团队等,利用可视化贴纸协作构建领域模型。核心参与者包括业务专家(如产品经理、资深开发等),需准备不同颜色的贴纸标记命令、实体、事件等,并选择宽敞墙面以促进高效互动。重点关注业务行为、触发关系及领域对象(事件、命令、实体),从而统一团队语言并指导微服务设计。
2025-05-24 16:34:17
738
原创 数据保护与通讯安全
本文摘要:数据安全保护要点包括实施最小权限原则、加密存储敏感数据、清除临时文件、保护源代码和客户端信息;通信安全方面要求使用TLS加密传输、配置有效证书、防止降级攻击,并对所有含敏感内容的连接强制加密。同时需注意清除注释文档、禁用自动填充和客户端缓存,过滤HTTP请求中的敏感参数。
2025-05-24 00:15:37
790
原创 会话管理有哪些
本文总结了会话管理的安全控制要点:1)服务器端生成强随机会话标识符;2)安全设置cookie属性(Secure、HttpOnly);3)实施会话超时和强制终止机制;4)禁止并发登录和会话复用;5)敏感操作使用随机令牌防CSRF;6)避免在URL/日志中暴露会话ID;7)HTTPS环境下创建新会话标识符。这些措施可有效防范会话劫持、CSRF等安全风险。
2025-05-24 00:13:12
454
原创 MySQL8新特性底层原理
MySQL 8.0引入了降序索引,仅InnoDB存储引擎支持,且仅限于BTREE索引。与之前的版本不同,MySQL 8.0不再对GROUP BY操作进行隐式排序,需要手动添加排序语句。降序索引通过优化B+树结构,使得查询时无需额外排序操作,提高了查询效率。此外,MySQL 8.0在Doublewrite Buffer和redo log方面也进行了优化,如将doublewrite存储区从系统表空间独立出来,提高了写入效率和灵活性。快速添加列的功能通过InnoDB的“Fast Index Creation”特性
2025-05-17 11:07:56
640
原创 超高并发直播弹幕方案
弹幕是一种在视频网站上广泛使用的互动形式,允许用户在观看视频时实时发表评论和吐槽。服务器推送技术则用于实现信息的实时更新,无需用户手动刷新页面。这种技术在视频网站的弹幕功能、股票网站的实时数据更新以及电商平台的支付成功后页面跳转等场景中广泛应用。弹幕和服务器推送技术均基于HTTP协议,通过JavaScript和后台技术实现,无需Flash支持。服务器推送技术包括Ajax短轮询、Comet和SSE(Server-Sent Events)等,每种技术各有优势,适用于不同的业务需求。WebSocket则提供了真正
2025-05-17 10:41:36
940
原创 程序开多少线程合适?
文章讨论了CPU密集型和I/O密集型程序在处理线程数上的不同策略。CPU密集型程序主要依赖于CPU的计算能力,因此其最佳线程数通常等于CPU的核心数或核心数加一,以确保CPU的高效利用。而I/O密集型程序由于涉及大量的输入输出操作,线程等待时间较长,因此需要更多的线程来优化性能,最佳线程数可以按照CPU核心数乘以(1+(I/O耗时/CPU耗时))来计算,通常建议为2N+1,其中N为CPU核心数。这些策略有助于根据程序类型合理分配线程资源,提升系统整体性能。
2025-05-17 10:37:01
327
原创 如何预防死锁?
死锁发生的四个必要条件是:互斥条件、不可剥夺条件、请求和保持条件、循环等待条件。预防死锁的策略包括破坏这些条件。互斥条件由于是资源使用的固有特性,无法改变。破坏不可剥夺条件可以通过在进程等待时释放其占有的资源,使其重新加入系统资源列表。破坏请求与保持条件可以通过静态分配(进程开始执行时申请所有资源)或动态分配(申请资源时不占用系统资源)实现。破坏循环等待条件则采用资源有序分配,要求进程按资源编号顺序申请资源。这些策略有助于预防死锁的发生。
2025-05-17 10:33:52
255
原创 字符串性能优化不容小觑,百M内存轻松存储几十G数据
在 Java 语言中,Sun 公司的工程师们对 String 对象做了大量的优化,来节约内存空间, 提升 String 对象在系统中的性能。了解了 String 对象的实现后,你有没有发现在实现代码中 String 类被 final 关键字修饰 了,而且变量 char 数组也被 final 修饰了。我们知道类被 final 修饰代表该类不可继承,而 char[] 被 final+private 修饰,代表了 String 对象不可被更改。
2025-05-07 15:46:24
416
原创 JDK8 新特性 Stream 如何优化遍历?
现在很多大数据量系统中都存在分表分库的情况。例如,电商系统中的订单表,常常使用用户 ID 的 Hash 值来实现分表分库,这样是为了减 少单个表的数据量,优化用户查询订单的速度。 但在后台管理员审核订单时,他们需要将各个数据源的数据查询到应用层之后进行合并操 作。 例如,当我们需要查询出过滤条件下的所有订单,并按照订单的某个条件进行排序,单个数 据源查询出来的数据是可以按照某个条件进行排序的,但多个数据源查询出来已经排序好的 数据,并不代表合并后是正确的排序,所以我们需要在应用层对合并数据集合重
2025-05-07 15:38:52
536
原创 Kafka消费者端重平衡流程
重平衡的完整流程需要消费者 端和协调者组件共同参与才能完成。我们先从消费者的视角来审视一下重平衡的流程。在消费者端,重平衡分为两个步骤:分别是加入组和等待领导者消费者(Leader Consumer)分配方案。这两个步骤分别对应两类特定的请求:JoinGroup 请求和 SyncGroup 请求。 当组内成员加入组时,它会向协调者发送 JoinGroup 请求。在该请求中,每个成员都要将 自己订阅的主题上报,这样协调者就能收集到所有成员的订阅信息。一旦收集了全部成员的 JoinGroup 请求后,协调
2025-04-18 18:12:01
638
原创 Kafka 中幂等生产者和事务生产者是一回事吗
所谓的消息交付可靠性保障,是指 Kafka 对 Producer 和 Consumer 要处理的消息提供什么样的承诺。常见的承诺有以下三种:最多一次(at most once):消息可能会丢失,但绝不会 被重复发送。精确一次(exactly once):消息不会丢失,也不会被重复发送。目前,Kafka 默认提供的交付可靠性保障是第二种,即只有 Broker 成功“提交”消息且 Producer 接到 Broker 的应答才会认为该消息成功发送。
2025-04-18 17:00:32
365
原创 解读数据集成建模中的数据模型
概念数据集成模型是针对目标系统数据集成需求的一种无需实现的展示,该 系统将作为基本的“范围”,定义了它们要如何才能被满足,同时也是为了源系统 分析,仸务和持续时间以及资源的项目规划的目的。在这个阶段,只需要确定主要的概念性流程,充分理解用户数据集成幵规划 下一阶段需求。逻辑数据集成模型对捕获首次过滤源映射、业务规则、目标数据集表戒者文 件)的数据集成需求产生一组详细描述。这些模型为预期的数据集成应用描绘逡辑 提取,数据质量,转换,以及加载需求。这些模型仍然被认为是不技术无关的。
2025-04-13 20:49:37
361
原创 如何优化多线程上下文切换?
如果是单个线程,在 CPU 调用之后,那么它基本上是不会被调度出去的。如果可运行的线程数远大于 CPU 数 量,那么操作系统最终会将某个正在运行的线程调度出来,从而使其它线程能够使用 CPU ,这就会导致上下文切换。还有,在多线程中如果使用了竞争锁,当线程由于等待竞争锁而被阻塞时,JVM 通常会将 这个锁挂起,并允许它被交换出去。如果频繁地发生阻塞,CPU 密集型的程序就会发生更 多的上下文切换。
2025-04-12 16:40:43
955
原创 如何制定性能调优策略
性能测试是提前发现性能瓶颈,保障系统性能稳定的必要措施。下面我先给你介绍两种常用 的测试方法,帮助你从点到面地测试系统性能。微基准性能测试可以精准定位到某个模块或者某个方法的性能问题,特别适合做一个功能模 块或者一个方法在不同实现方式下的性能对比。例如,对比一个方法使用同步实现和非同步 实现的性能。宏基准性能测试是一个综合测试,需要考虑到测试环境、测试场景和测试目标。首先看测试环境,我们需要模拟线上的真实环境。然后看测试场景。我们需要确定在测试某个接口时,是否有其他业务接口同时也在平行运 行,造成干扰。
2025-04-12 16:31:26
748
原创 数据仓库元数据的管理
数仓建模方法元数据(),主要记录数据仓库中模型的定义、各层级间的映射关系、监控数据仓库的数据状态 及的任务运行状态。一般会通过元数据资料库()来统一地存储和管理元数据,其主要 目的是使数据仓库的设计、部署、操作和管理能达成协同和一致。元数据是数据仓库管理系统的重要组成部分,元数据管理是企业级数据仓库中的关键组件,贯穿数据仓库构建 的整个过程,直接影响着数据仓库的构建、使用和维护。元数据可分为技术元数据和业务元数据。
2025-04-11 20:35:42
545
原创 金融科技数据安全
金融科技安全架构金融科技安全架构数据安全生命周期数据安全管理从数据全生命周期角度,从数据产生、数据存储、数据使用、数据展现、数 据传输,到数据销毁,最终建立闭环数据安全管理机制移动安全 - 域名解析HTTPDNSHTTPDNS使用HTTP协议承载DNS服务,代替传统的基于UDP协议的DNS。绕开运营商LocalDNS,有效防止域名劫持,提高域名解析效率。智能解析,精准调度。域名修改实时生效,支持HTTP/HTTPS。
2025-04-11 20:27:10
611
原创 业务幂等性技术架构体系-接口幂等
但是,业务失败或超时,在生产环境下,一万个里最多也就十个左右会失败,那为了这十来个请求,让其 他九千九百多个请求都产生额外请求,就有一些得不偿失了。当用户进行表单提交时,会重定向到另外一个提交成功页面,而不是停留在原 先的表单页面。其实也会存在问题,假设具体业务代码执行超时或失败,没有向客户端返回 明确结果,那客户端就很有可能会进行重试,但此时之前的token。则是一个合法请求允许执行,如果是其他值,则代表是非法请求,直接返回。已经被删除了,则会被认为是重复请求,不再进 行业务处理。后退导致表单重复提交。
2025-04-11 16:08:32
376
原创 业务幂等性技术架构体系-业务问题
幂等性介绍幂等性介绍现如今很多系统都会基于分布式或微服务思想完成对系统的架构设计。那么在这一个系统中,就会存在若干个微服 务,而且服务间也会产生相互通信调用。那么既然产生了服务调用,就必然会存在服务调用延迟或失败的问题。当 出现这种问题,服务端会进行重试等操作或客户端有可能会进行多次点击提交。如果这样请求多次的话,那最终处 理的数据结果就一定要保证统一,如支付场景。此时就需要通过保证业务幂等性方案来完成。
2025-04-11 16:03:19
1016
原创 Java 存储模型
我们知道,Java 采用共享内存模型来实现多线程之间的信 息交换和数据同步。在解释为什么会出现这样的结果之前, 我们先通过下图来简单了解下 Java 的内存模型,程序在运行时,局部变量将会存放在虚拟机栈 中,而共享变量将会被保存在堆内存中。由于局部变量是跟随线程的创建而创建,线程的销毁而销 毁,所以存放在栈中,由上图我们可知,Java 栈数据不是 所有线程共享的,所以不需要关心其数据的一致性。共享变量存储在堆内存或方法区中,由上图可知,堆内存和 方法区的数据是线程共享的。
2025-04-08 14:59:28
195
原创 如何避免死锁
避免死锁最直观的方法就是在两个事务相互等待时,当一个事务的等待时间超过设置的某一 阈值,就对这个事务进行回滚,另一个事务就可以继续执行了。5. 设置锁等待超时参数,我们可以通过 innodb_lock_wait_timeout 设置合理的等待超时 阈值,特别是在一些高并发的业务中,我们可以尽量将该值设置得小一些,避免大量事务等 待,占用系统资源,造成严重的性能开销。例如,以上我例举的两种发生死锁的场景,一个考验的是我们对锁算法的了解,另外一个考 验则是我们对聚簇索引和辅助索引的熟悉程度。
2025-04-08 14:49:43
308
原创 需求管理策略
优先战略、标准、成熟需求,强化流程对需求的管控与牵引,强化各个部门分工与协同,实现需求有序管理、高效交付。统一归口,实现需求端到端的可视化管理。根据需求分类分级,快速响应需求。加强架构对需求的主动引导。
2025-04-07 16:01:35
407
蚂蚁金融智能中台的数据底座建设与应用场景
2025-02-06
腾讯社交网络APM端到端运维监控体系解析及其应用场景
2025-01-20
对于MySQL调优,需要确认业务表结构设计是否合理,SQL语句优化是否足够,该添加的索引是否都添加了,是否可以剔除多余的索引等等
2025-01-17
基于Activiti的低代码办公平台设计与开发:实现流程与表单自动化管理
2025-01-11
银行业IT治理最佳实践-构建安全、高效的IT治理框架以适应数字化转型
2025-01-10
华为变革及流程管理框架:IPD和ISC流程的详细解析
2024-12-18
领域驱动设计中实体与限界上下文的重构方法
2024-12-17
构建高效研发体系:IPD理论及案例解析
2024-11-01
领域驱动设计(DDD)中统一语言的开发方法与实践
2024-10-26
代码为王时代:车企软件开发能力转型策略解析
2024-10-21
云闪付微服务基础设施建设及分布式ID实践
2024-10-10
加州政府企业架构框架V2.0
2024-09-24
业务结果驱动型企业架构的分阶段规划
2024-09-24
TOGAF系列指南:企业架构中的业务场景方法论
2024-09-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人