- 博客(1406)
- 资源 (6)
- 收藏
- 关注

原创 合格程序员每天每周每月每年应该做的事
程序员每天该做的事 1、总结自己一天任务的完成情况 最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多 2、考虑自己明天应该做的主要工作 把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作 3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法 出错不要紧,最重要的是不要重复犯相同的错误,那是愚蠢 4、考虑自
2009-11-18 12:45:00
2163
7
原创 实战:软件架构设计【自定义序号生成器】
本文介绍了两种基于时间戳+序列号的64位ID生成方案:方案一(OptimizedMySnowID4Second_32_32)采用32位秒级时间戳+32位序号,适合超高并发但存在并发递增问题;方案二(SequenceGenerator)使用44位毫秒时间戳+20位序号,通过CAS实现无锁并发,具备时钟回拨检测和异常记录功能。通过并发测试验证了两者的唯一性,建议根据场景选择:前者适合大容量ID需求,后者适合严格递增场景。文章还提供了分布式ID生成器的升级方向,建议结合Snowflake特性封装更完整的解决方案。
2025-06-08 18:40:15
1042
1
原创 科普文:软件架构设计【一文搞懂Snowflake:雪花算法】
【分布式ID生成器Snowflake算法详解】 Snowflake是Twitter开源的分布式ID生成算法,采用64位长整型结构: 1位符号位 + 41位毫秒时间戳(69年) + 10位机器ID(5位数据中心+5位机器) + 12位序列号(每毫秒4096个ID)。其核心优势包括: 高性能:本地生成无网络开销,单机QPS可达400万+ 趋势递增:利于数据库索引优化 分布式支持:通过机器ID区分节点 主要挑战是时钟回拨问题,解决方案包括: 最大容忍回拨时间检测 原子操作优化序列号生成 异常处理机制 典型应用场景
2025-06-08 17:39:25
773
原创 科普文:Java基础系列之【java加密/解密、签名之SHA:SHA-256、SHA-512、SHA3-256与SHA3-512】
SHA(Secure Hash Algorithm)安全散列算法家族是现代密码学中最重要的哈希函数系列之一,由美国国家标准与技术研究院(NIST)制定并发布。该算法家族经历了多次演进,目前主要分为SHA-2和SHA-3两大系列。SHA-2 家族: SHA-256 和 SHA-512 都属于 SHA-2 标准(发布于 2001 年,作为 SHA-1 的替代)。它们基于 Merkle-Damgård 结构,并使用类似于 AES 加密算法的位运算和逻辑函数。SHA-3 家族: SHA3-256 和 SH
2025-06-07 22:51:13
617
原创 科普文:软件架构设计【安全设计:Java动态编译JavaCompiler实现代码隐藏】
* 执行ServiceConfig类* 第一次运行时会自动创建以下文件:* target/classes/com/zxx/study/rjava/codeBehind/spi/MyServiceImpl.class* data/my/key.enc(包含加密密钥)* data/my/MyServiceImpl.enc(加密后的类文件)* 注意事项:* 在生产环境中,请确保:* 密钥不应硬编码在代码中* 应使用专业的密钥管理系统(如HSM或KeyStore)* 加密类应该通过混淆工具处理*
2025-05-31 18:18:30
878
原创 科普文:软件架构设计【安全设计:Java动态编译JavaCompiler技术解析以及代码隐藏】
【摘要】本文详细解析了Java代码隐藏技术的实现方案,通过动态生成加密代码、编译时加密字节码、自定义类加载器解密等步骤构建安全架构。重点剖析了JavaCompiler API的核心原理与使用流程,包括SPI机制、编译任务配置和诊断信息收集。文章对比了该技术的性能优劣(50-200ms/次编译),列举了在线编程环境等典型应用场景,并针对常见错误提供解决方案。最后从对象复用、并行编译、内存缓存等6个维度提出优化方案,实测可降低50%-70%内存消耗,提升3-5倍吞吐量,强调需结合安全沙箱和版本控制使用。
2025-05-31 18:01:42
924
原创 科普文:软件架构设计【安全设计:Java代码隐藏技术】
本文介绍了Java代码隐藏技术的多种实现方法,包括混淆(ProGuard)、加密(AES算法)、本地编译(JNI)等技术手段。重点分析了字节码操作技术(ASM/Javassist)和动态编译体系的应用场景,提出组合防护策略:建议对核心模块采用ASM+加密+自定义加载器的三重防护架构。文章同时指出代码隐藏的局限性(无法完全防止逆向工程)、性能影响和法律风险,强调需根据安全等级要求权衡选择,并给出商业级方案建议(如ProGuard+DexGuard组合)和安全实施注意事项(避免反射高频调用、定期更新混淆规则等)
2025-05-31 14:49:45
920
原创 科普文:软件架构设计【安全设计:代码隐藏技术】
《源代码安全防护的多层次技术策略》摘要 在数字化时代,源代码作为企业核心资产面临严峻安全挑战。本文系统探讨了代码隐藏技术的防护体系:首先阐明代码隐藏的必要性,即保护知识产权和商业机密;其次详细解析了技术实现原理,包括信息嵌入、加密混淆等核心方法;进而对比分析了各类实现方式的优劣,指出需在安全性与可维护性间取得平衡;最后提出了包含法律合规、定期评估等要素的实施框架。研究表明,采用注释隐藏、变量编码等组合策略,配合动态监测机制,可构建适应逆向工程威胁的立体防护体系,为软件企业提供全方位的源代码保护解决方案。
2025-05-31 14:28:01
660
原创 Wireshark大白鲨抓包工具,请认准下载地址,不要被骗
2、选择菜单栏上 捕获 -> 选项,勾选WLAN网卡。这里需要根据各自电脑网卡使用情况选择,简单的办法可以看使用的IP对应的网卡。点击Start,启动抓包。说明:数据包列表区中不同的协议使用了不同的颜色区分。3、wireshark启动后,wireshark处于抓包状态中。按照系统版本选择下载,下载完成后,按照软件提示一路Next安装。如上面连接文章所示,某度简直是狗改不了吃屎,恶心至极。请广大网友认准下载地址,不要被骗。核心区域,每一行就是一个数据包。数据包对应的字节流,二进制。指定过滤条件,过滤数据包。
2025-05-28 15:09:36
383
原创 科普文:软件架构设计【一文搞懂UUID:主流开发语言和数据库对UUID的支持】
UUID类型选择与数据库支持情况摘要 本文系统介绍了8种UUID版本特性及主流开发语言和数据库的支持情况。根据业务场景推荐:优先选择v4(随机)或v7(时间戳有序)版本;确定性生成推荐v3/v5(命名空间哈希)。数据库支持方面,PostgreSQL对UUID支持最完善,MySQL/Oracle需注意存储优化。文章详细对比了Java、JavaScript、Go、Python、PHP等语言对UUID版本的支持差异,并提供了各数据库生成UUID的具体方法,包括PostgreSQL的uuid-ossp扩展使用指南。
2025-05-27 17:19:47
952
原创 科普文:软件架构设计【一文搞懂UUID:5种RFC 4122标准UUID和3种草案版本UUID】
UUID(Universally Unique Identifier)目前共有 8 个正式版本(Version 1 至 Version 8),每个版本有不同的生成规则和应用场景。UUID 的版本标准化状态需要特别注意——V6、V7、V8 目前尚未成为正式的国际标准(RFC 4122),但已进入 IETF 的草案阶段,未来可能被标准化。正式标准:V1-V5(RFC 4122)未来趋势:V6-V8 草案可能在 2023-2024 年正式发布为 RFC 标准当前建议:✅ 生产环境优先
2025-05-27 16:44:05
671
原创 科普文:软件架构设计之应用安全【身份验证(Authentication):2FA双因素认证详解】
前面我们详细梳理了OTP一次性密码,这里再看看双因素认证(2FA):2FA是结合两种不同的认证因素(如密码和OTP),增强安全性的身份验证方法。双因素认证,英文名称, 简称2FA。常规密码验证码使用2FA的主要目的是增强账户的安全性,提供额外的保护层,以防止未经授权的访问和潜在的安全威胁。降低了密码盗窃的风险弱密码尽管2FA并,但它是一种非常有效的方法,可以显著提高账户的安全性。通过多因素验证,即使密码泄露,攻击者也难以轻松进入您的账户。
2025-05-06 12:48:14
965
1
原创 科普文:软件架构设计之应用安全【身份验证(Authentication):OTP一次性密码 TOTP详解】
一次性密码(OTP,One-Time Password)是一种用于身份验证的安全机制,通常用于提高用户账户的安全性。前面我们一步一步地分析一下OTP的工作原理。这种机制能有效防止重放攻击和钓鱼攻击,因为每个密码只使用一次且是短暂有效的。在这里我们再继续看看OTP的另一种方式RFC 6238(TOTP)。
2025-05-06 12:25:01
1246
原创 科普文:软件架构设计之应用安全【身份验证(Authentication):OTP一次性密码 HOTP详解】
动态口令(OTP)有一个同名确不同翻译的前辈,一次性密码(OTP, One-Time Pad),也叫密电本,是一种应用于军事领域的谍报技术,即对通信信息使用预先约定的一次性密电本进行加密和解密,使用后的密电本部分丢弃不再使用,能够做到一次一密。可以做到一次一个动态口令,使用后作废,口令长度通常为6-8个数字,使用方便,与通常的静态口令认证方式类似,使用方便与系统集成好,因此OTP动态口令技术的应用非常普遍,可以应用于多种系统渠道使用,如:Web应用、手机应用、电话应用、ATM自助终端等。
2025-05-06 11:38:18
765
原创 科普文:软件架构设计之应用安全【身份验证(Authentication):OTP一次性密码 TOTP和HOTP小结】
OTP生成方式:通常基于算法生成,包括TOTP和HOTP两种方式。 生成过程不依赖外部网络,具有更高的独立性。TOTP(基于时间的 OTP,计时使用):根据当前时间和共享密钥生成,基于RFC6238协议。HOTP(基于事件的 OTP,计次使用):根据计数器值和共享密钥生成,基于RFC4266 协议。
2025-05-05 19:30:20
858
原创 科普文:软件架构设计之应用安全【身份验证(Authentication):短信验证、图片验证、TOTP一次性密码、2FA双重身份验证等小结】
为了确保应用程序的安全性和保护用户数据的隐私,开发者需要使用一些必备的身份验证应用安全技术。身份验证(Authentication)是网络安全的核心组成部分,指的是确认用户或系统的身份是否有效的过程。通过身份验证,可以确保只有授权用户才能访问敏感数据或系统资源。随着网络攻击手段的不断演进,传统的身份验证方式面临越来越多的挑战,因此多种身份验证机制相继出现,以应对日益复杂的安全威胁。
2025-05-05 16:21:23
1541
原创 科普文:一文搞懂Spring中常用的注解【@EventListener 注解的原理、核心类、应用场景】
EventListener 标记方法作为事件监听器,用于处理应用程序事件。通过松耦合方式实现事件驱动编程,适用于多组件协作场景。需注意同步/异步控制及条件表达式优化,结合具体业务合理设计事件链。我们继续梳理@EventListener的原理、核心类、优缺点、应用场景和注意事项。
2025-05-04 18:16:55
628
原创 科普文:一文搞懂Spring中常用的注解【@Profile、@PropertySource/ @PropertySources、@ConfigurationProperties】
@Profile 多环境隔离 切换开发/生产环境数据源@PropertySource 自定义配置文件加载 加载独立模块配置(如 redis.properties)@ConfigurationProperties 结构化配置映射 封装数据库连接参数对象@ImportResource 传统 XML 配置迁移 整合遗留系统的 XML 配置文件注意事项总结配置优先级:@PropertySource 默认优先级低于 application.properties,可通过 @Order 调整加载顺序。
2025-05-04 14:52:47
1004
原创 科普文:一文搞懂Spring中常用的注解【@PostConstruct、@DependsOn、@Order注解嵌套使用解决Bean加载优先级问题】
解决Bean加载优先级问题@PostConstruct、@DependsOn、@Order注解嵌套使用解决Bean加载优先级问题。注解作用域分析注解 作用层级 核心用途 生效阶段@DependsOn Bean 定义级别 显式声明依赖的 Bean,确保被依赖的 Bean 先初始化 Bean 实例化前 @Order Bean 注入/执行顺序 控制同类 Bean 在集合中的排列顺序或组件执行优先级(如拦截器链) Bean 注入时或组件调用时 @PostConstruct Bean 实例级别 标记初
2025-05-04 11:22:22
1244
原创 科普文:一文搞懂Spring中常用的注解【@Component、@Order、@DependsOn 三个注解的原理、核心类、应用场景】
DependsOn和@Order是用来解决Bean加载顺序问题的。同时,@Component是用于将类标记为Spring容器的组件,让Spring能够自动扫描并注册为Bean。@Order的使用场景,比如拦截器、过滤器、监听器的执行顺序,以及集合排序的情况。
2025-05-04 11:00:36
715
原创 科普文:一文搞懂Spring中常用的注解【@lazy注解的原理、核心类、应用场景】
前面有对java注解、spring注解做过梳理,这里我们再看看Spring框架中@Lazy注解的原理、核心类、应用场景。
2025-05-04 10:26:31
1081
原创 实战:软件架构设计之【Spring Boot 动态注册Controller:实现Mock Server】
例如,提供一个REST接口,允许用户发送一个POST请求来创建一个新的Mock端点,包括路径、方法、响应体等信息。或者使用配置文件,在启动时加载多个预定义的Mock接口。Mock Server在测试过程中快速创建临时的API端点,模拟各种响应,而不需要预先在代码中定义这些Controller。前面梳理了Spring Boot 动态注册Controller,这里我们来实现一个Mock Server,体验一下动态注册Controller。在单元测试或集成测试中动态创建接口,验证系统对不同响应的处理逻辑。
2025-04-29 15:41:41
1467
原创 科普文:软件架构设计之【Spring Boot 动态注册Controller】
Spring Boot 动态注册 Controller 的核心原理是 在运行时通过编程方式向 Spring 容器注册 Bean,并利用 Spring MVC 的 RequestMappingHandlerMapping 动态添加请求映射。传统静态注册:通过 @Controller/@RestController 注解在启动时扫描并注册 Bean。动态注册:绕过注解扫描,手动创建 Controller 的 Bean 定义,并 实现运行时灵活性,适用于插件化、多租户等动态场景。其核心依赖。
2025-04-29 14:48:08
937
原创 科普文:软件架构设计之【Spring MVC小结】
SpringMVC 注解通过简化配置和增强语义,显著提升了开发效率。在 Spring 的基本架构中, Spring Web MVC 也就是SpringMVC,它是属于Spring基本架构里面的一个组成部分,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面,所以我们在后期和 Spring 进行整合的时候,几乎不需要别的什么配置。
2025-04-29 10:23:11
691
原创 科普文:HTTP协议【GET、DELETE一定没有请求体RequestBody吗?】
A payload within a GET request message has no defined semantics; sending a payload body on a GET request might cause some existing implementations to reject the request.可以看到,RFC7231规范并没有说明GET请求不能携带body(A payload within a GET request message has no
2025-04-29 09:18:42
830
原创 科普文:Java基础系列之【线程和线程池伪共享:ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal小结】
ThreadLocal:单线程数据隔离(如 Spring 的 RequestContextHolder)。InheritableThreadLocal:简单父子线程数据传递(如单次任务拆分)。TransmittableThreadLocal:线程池、异步任务、分布式链路跟踪(如日志 traceId 透传)类别 优点 缺点ThreadLocal 轻量级、线程隔离性强、无锁性能高 父子线程无法传递数据、线程池场景失效、内存泄漏风险需手动清理InheritableThrea
2025-04-28 20:33:13
1119
1
原创 科普文:软件架构设计之【国内最好的Java 权限认证框架Sa-Token】
Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。官方地址:Sa-Token最新版本:sa-token-doc/start/new-version.md · dromara/Sa-Token - Gitee.com
2025-04-28 13:11:19
1096
原创 科普文:OAuth 2.0认证框架小结
OAuth 2.0 是一种 ,也是一个开放标准,允许第三方应用在用户授权下访问其资源服务器的数据,而无需直接获取用户凭据(如密码)。例如:用户把照片、视频、联系人数据存储在内容托管云服务R(Resource)中的Picture、Video、Contact三个模块中;用户使用在线照片打印服务P(Printer),用户需要让P服务读取R服务中的照片进行打印,但不想让P服务读取R服务中的其他数据。
2025-04-28 12:51:00
961
原创 科普文: Java web应用性能分析【Java性能优化:Java高效NIO之IO模型和零拷贝】
传统IO模式,在处理数据流过程中,线程处于阻塞状态,直到流处理(读取后写入)完毕,所以一个线程只能处理一个IO任务,如果IO未准备就绪无数据(或不可写)线程只能一直等待,直到可以有数据(或可写);NIO模式,采用IO多路复用技术,使用选择器(Selector)监控一组IO,虽然Selector线程也处于阻塞状态,但一个线程可以同时处理多个IO任务,当IO就绪时,Selector返回就绪的IO并由程序进行处理。
2025-04-26 14:32:18
784
原创 科普文: Java web应用性能分析【Java性能优化:Java高效NIO之直接内存映射】
通过用户缓存和Kernel缓存的共享,用户程序的操作直接作用到Kernel内存,无需进行内存拷贝。使用内存映射文件处理磁盘上的文件时,无需对文件执行IO操作,也不需要再为文件进行内存分配、加载和释放等管理工作,因此此模式在处理大量数据的文件时能起到高效的作用。例如,对于数据库服务等比较复杂的应用,程序根据业务更懂如何使用内存,为了提高性能,希望绕过内核缓存区,由自己在用户空间管理IO缓存,包括缓存机制和写延迟机制等,以支持事务、提高查询缓存命中率等。才是提供实际功能的其直接子类,他同时实现了。
2025-04-26 14:14:27
648
原创 科普文: Java web应用性能分析【Java性能优化:Undertow踩坑小结】
关于Undertow,前面已经做了梳理,这里整理一下用Undertow碰到的三个坑。1.spring.mvc.servlet.load-on-startup=1 对undertow 无效2.文件上传报错MultipartException3.静态资源报错404
2025-04-26 14:06:24
1286
原创 科普文: Java web应用性能分析【Java性能优化:Undertow性能调优小结】
性能调优效果对比优化项 默认配置 优化后配置 QPS提升Worker线程数 CPU*8 CPU*4 +15%~20%直接内存缓冲区 堆内存 直接内存 +30%HTTP/2支持 关闭 启用 +25%响应压缩阈值 无压缩 >10KB启用 带宽减少40%Undertow的优势:轻量级和高性能:Undertow基于非阻塞I/O模型,具有低资源消耗和高并发处理能力。支持HTTP/2和WebSockets:开箱即支持HTTP/2和WebSockets,无需重写启动类路径。可嵌入式:只
2025-04-26 13:12:34
590
原创 科普文: Java web应用性能分析【Java性能优化:传统IO、堆外内存 ByteBuffer.allocateDirect、MappedByteBuffe的io操作】
传统 IO、堆外内存 (直接内存 ByteBuffer.allocateDirect、内存映射MappedByteBuffer)的IO操作。如果你的应用主要涉及小文件处理或者需要频繁的随机访问,传统的IO可能就足够了。对于大文件或者需要高速数据传输的应用,直接内存的ByteBuffer或内存映射的MappedByteBuffer可能是更好的选择。直接内存更适合于需要频繁读写操作的场景,而内存映射更适合于大文件的随机访问。三种方式都有其独特的优势和适用场景。
2025-04-26 10:01:02
880
原创 科普文: Java web应用性能分析【Java性能优化:堆外内存 ByteBuffer.allocateDirect、MappedByteBuffe的io操作】
在Java中,内存管理主要通过垃圾回收器(Garbage Collector)进行,也就是jvm的运行时区Runtime Data Area。然而,有时我们需要直接管理内存,以实现更高效的性能或满足特定需求。这就是堆外内存的用武之地。堆外内存是Java堆内存之外的内存空间。与堆内存不同,堆外内存的分配和释放不由Java的垃圾回收器管理。这意味着,一旦你分配了堆外内存,就意味着你放弃了java自带的内存管理机制GC,所以需要你手动释放,否则可能会导致内存泄漏。
2025-04-26 09:34:24
1035
原创 科普文: Java web应用性能分析【Java性能优化:纯java编程的优化方法论小结】
switch 优化: 使用 switch 代替多个 if-else,提高分支预测效率。合理配置容器: 设置合适的初始容量,减少扩容带来的性能损耗。并行处理: 利用多线程和 Fork/Join 框架,充分利用多核 CPU。锁粒度优化: 使用细粒度锁和读写锁,减少线程竞争。池化资源: 使用线程池、数据库连接池、对象池,减少资源创建和释放的开销。直接内存: 使用 ByteBuffer.allocateDirect() 进行高效 I/O 操作。日志优化: 使用 isDebugEnabled 检查、占位符
2025-04-25 17:25:21
879
原创 实战: Java web应用性能分析之【springboot自定义Starter 】
前面我们梳理springboot自动装配的starter原理,并分析springboot如何支持tomcat、jetty、undertow三款内嵌web服务器。这里我们一起看看如何自定义一个starter。Starter 的核心目标是简化依赖管理和自动配置逻辑,我们可通过自定义 Starter 实现通用功能的模块化封装。当然其核心原理spi,这里就不再展开。我们这里还是以springboot2.X为例,构建一个自定义的starter,核心代码实现MyServiceAutoConfiguration
2025-04-25 13:11:51
988
原创 科普文: Java web应用性能分析之【springboot2.6、2.7、3.0的starter自动装配小结】
关于springboot2.6、2.7、3.0、3.5等的历史和特性,有兴趣的可以去看看前面的文章,这里我们做一个小结。即使2.6的支持已经到期,Spring Boot的自动装配主要通过@注解触发,其中是关键。稳定性与性能:Spring Boot 3.x版本因其对Java 17的支持和优化对Spring Framework 6的支持,被认为是当前最稳定的版本,适合需要高性能和长期维护的项目。社区支持:尽管2.x版本仍然有一定的市场占有率,但3.x版本因其最新的功能和性能优化,逐渐成为社区和企业
2025-04-25 11:33:25
907
原创 科普文: Java web应用性能分析之【java线程池中线程共享数据总结】
常见的并发问题竞态条件(Race Condition):多个线程同时访问和修改同一数据,导致结果依赖于线程的执行顺序。内存一致性错误(Memory Consistency Errors):一个线程写入的值可能在另一个线程中看不到,除非使用适当的同步机制。死锁:两个或多个线程相互等待对方释放资源,导致程序无法继续执行。java线程池中线程共享数据分类在分析并发问题前,我们有必要对java线程池中线程共享数据做一个分类,以便于更好的理解线程池和并发问题。下面从 “共享方式”(如显式同步
2025-04-24 22:26:15
746
原创 实战:Java web应用性能分析之【死扣代码性能:日志输出为什么要用isDebugEnabled() 】
当你在用Arthas、JPfofile等性能分析工具分析服务端应用性能时可以看到应用运行时的状态,耗时,从而及时发现性能瓶颈。以我们可以看到trace监控下,每个方法内部的耗时情况。可以明显的观察到:加了isDebugEnabled判断,在info级别时,只做了debug判断,并未执行日志拼接操作;而不加isDebugEnabled判断,info级别时,没有做debug判断,并执行日志拼接操作。至此我们再去看看开发手册,是不是就能理解为什么要这么规定。
2025-04-24 10:59:44
682
El caso de las hojas de ruta seguras para la memoria
2024-11-03
jsp+servlet+javabean.ppt
2010-04-02
Devexpress学习篇(请大家多多指教)
2009-07-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人