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

原创 合格程序员每天每周每月每年应该做的事
程序员每天该做的事 1、总结自己一天任务的完成情况 最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多 2、考虑自己明天应该做的主要工作 把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作 3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法 出错不要紧,最重要的是不要重复犯相同的错误,那是愚蠢 4、考虑自
2009-11-18 12:45:00
2125
7
原创 科普文:Java web应用性能分析之【Spring Boot 2.6、2.7、3.0、3.2、3.4 @SpringBootApplication 启动过程对比】
2.X 系列:以传统 Servlet 模型为主,依赖运行时反射,适合兼容旧项目。3.X 系列:面向云原生,强制 Jakarta EE 和 AOT 优化,显著提升启动效率和资源利用率。推荐升级路径:优先迁移至 (LTS 版本),充分利用虚拟线程和 AOT 特性构建高性能应用。版本初始化阶段上下文创建与刷新自动配置加载机制性能优化特性通过加载和基于创建传统 Servlet 上下文依赖的键值列表依赖 JIT 编译和运行时反射。
2025-03-27 20:09:23
882
原创 科普文:Java web应用性能分析之【Spring Boot 3.0新特性】
Spring Boot 3.0 通过 Micrometer 和 Micrometer 追踪提高应用可观察性,支持集成 Micrometer 1.10+,引入了的全新的可观察 API 并自动配置 Micrometer 追踪,包括对 Brave、OpenTelemetry、Zipkin 和 Wavefront 组件的支持。Spring Boot Actuator 在 Spring Boot 3.0 中得到了增强,提供了更多的监控和管理端点,包括对 Kubernetes 和 Prometheus 的更好支持。
2025-03-27 15:39:47
718
原创 科普文:Java web应用性能分析之【Spring Boot 2.X和3.X的 版本区别,以及Spring Boot 3新特性与升级指南】
Spring Boot 2.0在2018年2月28日发布,Spring Boot 2.7是2.x的最后一个发布版本,该版本的开源将于2023年11月停止支持,商业支持可延长到2025年2月。通过遵循下面建议,以便顺利地将项目升级到Spring Boot 3.0并享受新特性的优势。Spring Framework的主要大版本是6.x,要求JDK17,以之对应的Spring Boot的大版本是3.x,Spring Cloud的大版本是2022.x。
2025-03-27 15:12:05
1031
原创 科普文:Java web应用性能分析之【Spring Boot 3新特性:为什么放弃spring.factories,而Spring Boot 2.7还保留spring.factories】
springBoot3.0中spring.factories功能被移除而在Spring Boot 2.7中,有一个不推荐使用的内容就是关于这个/META-INF/spring.factories文件的,所以对于有自定义Starter的开发者来说,有时间要抓紧把这一变化改起来,因为在Spring Boot 3开始将移除对/META-INF/spring.factories的支持。
2025-03-27 14:51:27
560
原创 科普文:Java web应用性能分析之【SpringBoot源码解读@SpringBootApplication 】
默认情况下SpringBoot提供了多个ApplicationContextInitializer,其中比较重要的有ConditionEvaluationReportLoggingListener,别看到它的名字叫XXXListener,但是它确实是实现了ApplicationContextInitializer接口的。在SpringBoot里,@SpringBootApplication注解是一个非常重要的、核心的注解,它不仅是Spring Boot应用的入口,更是简化配置、提升开发效率的关键;
2025-03-27 14:24:51
746
原创 科普文:Java web应用性能分析之【源码解读SpringBoot如何默认支持这三款内嵌服务器:Tomcat 、 Jetty 、 Undertow 】
Spring Boot 2.6 通过 EmbeddedServletContainerAutoConfiguration(实际为 ServletWebServerFactoryAutoConfiguration)实现嵌入式容器的自动化配置,结合条件注解和 spring.factories 机制动态适配上下文环境。启动时根据依赖和配置参数选择容器类型,最终通过 SpringApplication.run() 的刷新流程完成上下文初始化与服务暴露。
2025-03-27 11:19:49
1287
1
原创 科普文:Java web应用性能分析之【Spring Boot内嵌服务器选型:Tomcat vs Jetty vs Undertow 】
对于 servlet 栈应用程序(Java web应用),spring-boot-starter-web 通过包含 spring-boot-starter-tomcat 将 Tomcat 包括在内,但也可以使用 spring-boot-starter-jetty 或 spring-boot-starter-undertow 代替。:根据业务场景选择,高并发场景优先Undertow,稳定性和兼容性需求选择Tomcat,轻量级或长连接场景选择Jetty 。Maven依赖配置,排除Tomcat后引入。
2025-03-27 08:22:12
861
原创 科普文:一文搞懂Maven【mvn dependency:tree 打印依赖和mvn dependency:analyze分析依赖冲突】
其中 omitted for duplicate 表示有 jar 包被重复依赖,最后写着 omitted for conflict with xxx 的,说明和别的 jar 包版本冲突了,而该行的 jar 包不会被引入。maven采用“最近获胜策略(nearest wins strategy)”的方式处理依赖冲突,即如果一个项目最终依赖于相同artifact的多个版本,在依赖树中离项目最近的那个版本将被使用。当冲突时把需要依赖的包重新定义在最外层依赖关系中,即在pom.xml文件中直接加上依赖。
2025-03-26 09:06:29
1205
原创 科普文:一文搞懂Maven【依赖和依赖冲突】
Maven的依赖管理通过直接依赖、间接依赖和依赖仲裁,提供了灵活而强大的功能,帮助开发者有效管理项目依赖,避免版本冲突。通过合理配置pom.xml和利用Maven插件,可以高效解决依赖问题,提升项目的稳定性和可维护性。Maven作为Java项目的构建工具,其强大的依赖管理功能使得项目管理更加高效。通过合理配置pom.xml,开发者可以轻松管理项目依赖,避免版本冲突和依赖地狱。以下将详细阐述Maven中的直接依赖、间接依赖、依赖冲突及其解决方法。
2025-03-25 20:35:21
898
原创 科普文:一文搞懂Maven【打包插件:maven-assembly-plugin插件 】
(使用maven中的tomcat插件,就可以将tomcat集成到项目中,效果就是:在不同平台中无需配置tomcat就可以直接运行web)Assembly 插件的主要作用是,允许用户将项目输出与它的依赖项、模块、站点文档、和其他文件一起组装成一个可分发的归档文件。该文件指定了打包格式,包含的文件/过滤的文件等信息,可以同时指定多个描述符文件,打包成不同的格式。2. 在Maven工程的pom.xml文件里配置maven-assembly-plugin插件,引入Assembly描述符文件。
2025-03-25 14:10:54
593
原创 科普文:一文搞懂Maven【JDK、Maven、Spring Boot、Spring Cloud版本对应关系详解】
以下是详细的版本对应关系和搭配建议,可以帮助开发者更好地选择和配置JDK、Maven、Spring Boot和Spring Cloud的版本,确保项目的顺利开发和稳定的运行。在实际项目中,建议根据项目的具体需求和团队的技术栈熟悉度,结合上述指导选择合适的版本搭配,既能保障项目的高效开发,又能确保系统的稳定性和可维护性。:对于生产环境,建议选择Spring Boot和Spring Cloud的LTS版本,这些版本通常会有更长的维护周期和更稳定的功能。
2025-03-25 13:47:29
994
原创 科普文:一文搞懂Maven
Maven基于项目对象模型 (POM) 的概念,Maven 可以通过中央信息来管理项目的构建、报告和文档。Maven(读作“马文”)是一个软件项目管理和构建工具,主要用于Java项目。它简化了项目的构建、依赖管理和项目信息管理。Maven 是一个意第绪语单词,意思是 知识的积累器,最初是为了简化 Jakarta Turbine 项目的构建过程。有几个项目,每个项目都有自己的 Ant 构建文件,但都略有不同。JAR 已签入 CVS。我们需要一种构建项目的标准方法、项目组成的清晰定义、发布项目信息的简单方法以
2025-03-25 13:43:36
1020
原创 科普文:【支持信创、宣传国产】Spring Boot 2.6 在龙芯jdk 11、openjdk 11、oracle jdk 11版本上的测试报告
以下提供基于 JMH(微基准测试) 和 JMeter(宏基准测试) 的性能测试代码模板,适配三种 JDK 环境(需自行调整参数和依赖)。http://localhost:8080/actuator/metrics/jvm.memory.used:监控 JVM 内存使用。HTTP 请求:配置目标 API 地址(如 http://localhost:8080/api)。输出指标:TPS(每秒事务数)、平均响应时间(ms)、错误率。输出指标:吞吐量(ops/ms)、平均耗时(ms/op)。
2025-03-25 07:05:49
723
原创 科普文:【支持信创、宣传国产】loongson-jdk11.0.-linux-loongarch64 龙芯JDK
龙芯中科基于OpenJDK研制并发布了龙芯平台Java环境。目前,龙芯平台Java环境已经发布了包括21、17、11和8在内的4个长期支持(Long-Term Support,LTS)版本,龙芯中科对这些LTS版本提供安全更新、问题修复和持续优化。
2025-03-25 06:24:41
739
原创 科普文:2025 年3月18日Java Development Kit (JDK) 24正式发布
Oracle 正式发布,这是备受欢迎的编程语言和开发平台推出的全新版本。Java 24 () 提供了数千项改进,可帮助开发人员提高工作效率并推动创新。此外,平台提升了性能、稳定性和安全性,可帮助企业加快业务增长。敬请关注 2025 年 3 月 18 日至 20 日在美国加利福尼亚州红木海岸举办的会议,了解有关新的 Java 24 版本的更多信息。
2025-03-23 17:07:52
987
原创 科普文:【支持信创、宣传国产】使用龙芯JDK 8/11/17的风险分析
使用龙芯JDK 8、11、17在技术、性能、法律和安全等方面都存在一定的风险。技术风险主要体现在兼容性、功能支持和依赖库适配性上;性能风险主要体现在响应时间、吞吐量和资源利用率上;法律风险涉及知识产权、合规性和开源协议的合规性;安全风险则包括已知漏洞未修复、新漏洞出现以及加密和安全机制的差异。为了降低这些风险,用户需要进行充分的兼容性测试、性能基准测试、法律合规性评估和安全漏洞评估,并制定相应的应对策略,如优化配置、调整依赖库、审查法律协议和加强安全监控等。
2025-03-23 16:31:46
889
原创 科普文:【支持信创、宣传国产】用龙芯JDK 8/11/17的法律风险
使用龙芯 JDK 8/11/17 的法律风险集中于知识产权侵权、开源协议合规及国产化政策适配。需重点审查厂商的技术授权完整性、政策认证状态及供应链稳定性,并通过合同约束与主动排查降低潜在责任。
2025-03-23 16:07:24
1047
原创 科普文:【支持信创、宣传国产】用龙芯JDK 8/11/17会被收费吗?
甲骨文JDK8在8u211(jdk11.0.1/jdk11.0.2)之后开始商用收费,而且JDK17在2021年宣布免费到2024年9月,国内使用甲骨文的商用版jdk,存在被甲骨文法务团队催缴版权费的风险。为了不被甲骨文收割,需要转战openJDK,而openJDK的兼容性问题、性能问题都不确定。现在通过甲骨文JCK兼容性认证的,国内的只有龙芯JDK 8/11/17,那么我们在项目中用龙芯JDK 8/11/17是否要被龙芯、甲骨文收费?龙芯作为厂商,有自己的商业模式。
2025-03-23 15:58:50
842
原创 科普文:【支持信创、宣传国产】Spring Boot 2.6 + Spring Cloud 2021 从 Oracle JDK 11 切换至龙芯JDK 11的适配方案
因为龙芯JDK 11已经通过了JCK认证,基本上我们不需要担心兼容性问题。通过以下分阶段方案,可系统性降低迁移风险,确保Spring Boot/Cloud应用在龙芯JDK11上的稳定运行。也分析了将springboot2.6+springcloud2021从 oracle jdk 11 替换成龙井jdk11,有那些风险、注意事项。这里我们再看看,直接将springboot2.6+springcloud2021从 oracle jdk 11 替换成龙芯JDK 11。
2025-03-23 14:08:09
733
原创 科普文:【支持信创、宣传国产】Spring Boot 2.6 + Spring Cloud 2021 从 Oracle JDK 11 切换至龙井 JDK11 的适配方案分析
下面我们看看,在信创适配过程中,将springboot2.6+springcloud2021从 oracle jdk 11 替换成龙井jdk11,有那些风险、注意事项。通过了JCK的认证测试,意味着用户无需修改Java应用,就可将已有的符合Java SE标准的应用直接迁移至厂商的JDK平台,也可在厂商的JDK上开发新的Java应用,无需担心兼容性问题。
2025-03-23 13:52:19
965
原创 科普文:【支持信创、宣传国产】通过JCK认证的国产JDK梳理
未通过JCK 认证的 OpenJDK 发行版阿里巴巴 Dragonwell:未明确标注通过 JCK 认证。腾讯 Tencent Kona JDK:未明确标注通过 JCK 认证,一组工具,和其它的一些需求,用来检查一个实现是否和Java平台规范和软件参考实现兼容。JCK (或TCK for Java SE)用于验证一个Java的运行和开发环境是否符合JavaSE标准。另一方面,JCK包含海量的测试用例,通过了JCK也代表了质量保证,其他组织可以放心地使用通过了JCK测试的Java虚拟机。
2025-03-23 13:39:39
698
原创 实战:一文搞懂JVM原理(八):startup.sh分享一个springboot启动脚本
3. 支持新特性:JDK8、JDK11和JDK17都引入了很多新的语言特性和API,如Lambda表达式、Stream API、新的日期时间API、Var关键字等,这些新特性能够提高代码的可读性、可维护性和灵活性,也使得开发更加高效和简便。4. 生态支持:JDK8、JDK11和JDK17都有丰富的生态支持,包括各种开源框架、库、工具和平台,可以帮助企业快速开发和上线应用,提升开发效率和质量。涵盖 TLAB、逃逸分析、数据共享、锁优化、大对象处理、堆内存分配 等核心优化点,
2025-03-19 11:26:50
339
原创 科普文:一文搞懂JVM原理(八):对于微服务springboot进程的jvm大小如何设置?
微服务JVM配置需结合业务负载、容器资源及GC特性综合设计,核心原则为:。建议通过压力测试验证配置合理性,并持续监控运行时指标动态优化。注:实际选型需结合压力测试验证,例如通过。分析各阶段耗时及Full GC频率。
2025-03-19 11:17:31
956
原创 科普文:一文搞懂JVM原理(七):垃圾回收之CMS、G1、ZGC对比 (补充 )
垃圾回收(Garbage Collection,简称GC)是内存管理的核心组成部分,它负责自动回收不再使用的内存空间。在Java中,程序员不需要手动释放对象占用的内存,一旦对象不再被引用,垃圾回收器就会在适当的时机回收它们所占用的内存。 这样可以避免内存泄漏和野指针,从而大大减轻了程序员的负担,也使得Java成为一个相对安全、易于开发的编程语言。防止内存泄漏:手动管理内存容易导致内存泄漏,而GC可以自动回收不再使用的对象,防止内存泄漏的发生。提高开发效率。
2025-03-19 11:12:01
744
原创 科普文:一文搞懂JVM原理(七):如何选择JDK和GC收集器
前面做了汇总,继续看看如何选择jdk和垃圾收集器?选择jdk,就一个标准收费和不收费。有钱任性的选择甲骨文高版本jdk,性能肯定会有提升,毕竟甲骨文是企业,挣的就是卖软件的钱;没钱的,老老实实的用jdk8U211,jdk11.0.2,基本没得选。所以jdk不用选,确定了jdk之后,比如不想被甲骨文收割的那么就只能这两个版本。jdk8:支持cms、Parallel GC、G1;jdk11:支持G1、以及早期版本的ZGC。
2025-03-19 10:56:38
1178
原创 科普文:一文搞懂JVM原理(六)总结
JVM内存结构堆(Heap):存放对象实例,分为新生代(Young Generation)与老年代(Old Generation)。新生代:包含Eden区、两个Survivor区(From/To),采用复制算法(G1、ZGC不是简单的复制)老年代:存储长期存活对象,采用标记-整理或标记-清除算法方法区(Metaspace):存储类元数据(JDK8后替代永久代)虚拟机栈:线程私有的方法调用栈帧本地方法栈:Native方法执行栈程序计数器。
2025-03-19 10:35:58
820
原创 科普文:软件架构Nginx系列之【nginx日志分析:access_log和error_log提取攻击者IP】
error_log前面文章提到使用命令行工具如awk、grep、sort等来分析Nginx的访问日志access_log,提取高频IP。虽然access_log和error_log结构不同,但处理IP提取的方法有相似之处。access_log。
2025-03-12 12:09:43
1117
原创 科普文:AI时代的程序员【探索提升RAG系统问答质量的技术路线】
在这个过程中,系统将原始查询转化成一种或多种可以提升信息检索效果的形式,确保系统能够更有效地从不同的数据源中提取相关信息。对于具有挑战性的检索任务,用户问题的措辞可能不太恰当。是指将用户的原始问题重新表达,使其更适合检索过程,提高检索的相关性和准确性。,数据库难以直接匹配相关内容。,例如用户只输入“DeepSeek-R1 的优势?”而没有明确上下文。,原始查询可能需要调整才能适应不同的数据源(如结构化数据、文档、向量数据库等)。:通过生成多个查询,系统可以扩大检索范围并提高准确性。
2025-02-25 10:16:28
760
1
原创 科普文:AI时代的程序员【RAG检索增强生成之Retrieval检索】
我们已经学习了 Query Translation、Routing、 Query Construction、Indexing。现在我们又要按照上图的节点顺序回到《科普文:AI时代的程序员【RAG(Retrieval Augmented Generation)检索增强生成】-优快云博客》中介绍过的Retrieval检索。在传统的 RAG 系统中,基本的流程是:Retrieval(检索):从数据库中检索出与用户查询相关的候选文档。Generation(生成):根据检索到的文档和查询生成回答。
2025-02-25 10:09:11
941
原创 科普文:AI时代的程序员【RAG检索增强生成之Indexing索引】
我们已经学习了 Query Translation、Routing和 Query Construction。现在我们又要按照上图的节点顺序回到《科普文:AI时代的程序员【RAG(Retrieval Augmented Generation)检索增强生成】-优快云博客》中介绍过的 Indexing(索引)。
2025-02-25 10:03:09
1113
原创 科普文:AI时代的程序员【RAG检索增强生成之Query Construction查询构造】
Query Construction 是指根据用户输入的自然语言问题,通过语义解析、上下文理解以及路由后的结果,生成特定领域数据源所需的查询语句或格式化内容。这一过程的目标是最大化数据源检索的准确性和相关性。比如,许多 Vector Store 都有 meta data(元数据),我们可以将用户的查询“Videos on chat langchain published after 2024”(2024年之后发布的 chat langchain 视频)转成可用于 meta data 过滤的结构化查询:
2025-02-25 09:54:50
337
原创 科普文:AI时代的程序员【RAG检索增强生成之Routing路由】
Routing 是指根据用户的查询内容,智能地选择最适合的检索路径或推理逻辑,以更高效地获取答案。这种动态选择的过程在多数据源、多检索器或多任务场景下尤为重要,能够显著提升系统的性能和准确性。Routing 在 RAG 中的实现类型:Logical Routing(逻辑路由)Semantic Routing(语义路由)
2025-02-25 09:48:39
654
原创 科普文:AI时代的程序员【7种用于构建Agentic RAG系统的架构】
传统 RAG 和自反射 RAG 的区别查询“美国各州名字的由来”:检索大量文档(包括可能无关的信息),生成混杂回答,容易出现逻辑错误或矛盾。按需检索与州名来源相关文档,分段生成具体答案(如“得州命名的历史”“加州的名字来源”),逐段验证并整合,确保回答准确。生成“描述一次暑假旅行”:不必要地检索外部文档,浪费资源。识别任务无需检索,直接生成基于个人经验的回答。总结自反射 RAG 的优势在于动态决策能力、自我批判机制和输出质量保证。
2025-02-25 09:36:45
369
原创 科普文:AI时代的程序员【RAG检索增强生成之Agentic RAG工作流】
然而,我的 AI 智能体的场景并不符合这一特征,因为智能体需要在不确定的环境中做出决策,而不仅仅是寻找单一的“正确答案”。小而具体的函数更高效:将支持复杂查询的函数拆分为小型专用函数(如 search_docs)后,LLM 可以更轻松地识别并调用适当的工具,从而提高了检索的准确性和生成的质量。我进行的第一个显著的优化是将支持复杂查询的直通函数拆分为更小的具体函数。作为基准测试,我希望通过向 LLM 提供广泛的指令来解决用户的查询,并将函数定义交给 LLM,观察这种方法能在多大程度上推动任务的完成。
2025-02-24 22:17:04
764
原创 科普文:AI时代的程序员【RAG检索增强生成之Query Translation(查询翻译)】
LLM(Large Language Model,大型语言模型)是一个功能强大的新平台,但它们并不总是使用与我们的任务相关的数据或者是最新的数据进行训练。也就是 sub-question,是将复杂的问题拆解为多个独立的子问题,每个子问题可以单独处理。在检索和回答过程中,当系统意识到当前的问题太具体或难以直接回答时,退一步改问一个更广泛、更概括性的问题,从而获取更大的上下文信息。这句话也是适合于 RAG,因为我们现在检索的原理就是根据用户的 Query(也就是 Question)的语义去检索相关的文档。
2025-02-24 22:08:35
879
原创 科普文:AI时代的程序员【RAG(Retrieval Augmented Generation)检索增强生成】
LLM(Large Language Model,大型语言模型)是一个功能强大的新平台,但它们并不总是使用与我们的任务相关的数据或者是最新的数据进行训练。RAG(Retrieval Augmented Generation,检索增强生成)是一种将 LLM 与外部数据源(例如私有数据或最新数据)连接的通用方法。它允许 LLM 使用外部数据来生成其输出。要想真正掌握 RAG,我们需要学习下图所示的技术(技巧):
2025-02-24 22:00:46
1201
原创 科普文:AI时代的程序员【Qdrant:使用Rust编写的开源向量数据库&向量搜索引擎】
它提供了一项可用于生产的服务,其中包含一个方便的 API,用于存储、搜索和管理向量,并提供额外的负载和扩展的过滤支持。必须将使用任何稀疏嵌入提供程序的 SparseEmbeddings 接口实现作为 sparse_embedding 参数的值提供。要使用密集和稀疏向量与分数融合执行混合搜索,retrieval_mode 参数应设置为 RetrievalMode.HYBRID。你也可以在本地使用仅内存的形式运行 Qdrant,或者使用 Qdrant 云的 API 访问官方提供的托管服务。
2025-02-24 21:55:46
540
原创 科普文:AI时代的程序员【今天DeepSeek开源 FlashMLA,突破H800性能上限】
利用H100的TMA(Tensor Memory Accelerator)和异步拷贝指令,实现计算与内存操作的全重叠,为下一代GPU(如B100)提供技术验证。:将MLA(Multi-Layer Aggregation)解码过程内核化,减少CPU-GPU数据传输次数,实测在千亿模型推理中实现端到端延迟降低40%。在千亿模型推理场景下,FlashMLA可使单次推理能耗降低至0.02 kWh(传统方案约0.05 kWh),推动大模型服务边际成本逼近传统云计算服务。
2025-02-24 21:47:08
814
原创 科普文:AI时代的程序员【流畅可用的DeepSeek R1平台梳理】
随着幻方量化旗下AI公司深度求索(DeepSeek)于2025年1月20日正式版发布DeepSeek R1,其火爆程度不仅仅霸榜老美、国内更甚 ,不仅官网时常“服务器繁忙,请稍后再试”,即使是国家超算中心,也是一样。
2025-02-24 11:19:18
1524
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关注的人