进阶之路之JAVA篇 📅 发布时间:2026/7/15 20:29:01 👁️ 浏览次数: 这个世界不会是强者恒强后来者总能居上只要我们在路上就总会赢一、打包篇在 Spring Boot 项目中将resource/lib目录下的 JAR 包引入pom.xmldependency groupIdorg.apache.flink/groupId artifactIdflink-connector-clickhouse/artifactId version1.0/version !-- 或实际的版本号 -- scopesystem/scope systemPath${project.basedir}/src/main/resources/lib/flink-connector-clickhouse-1.0.0-SNAPSHOT.jar/systemPath /dependency二、算法篇2.1、标准Kahn算法拓扑排序这是一段基于 Kahn 拓扑排序算法的公式依赖解析工具专门解决多公式变量先后计算顺序问题 场景业务存在大量计算公式变量之间互相依赖不能随便乱算否则会出现「计算时依赖变量还没算出值」 作用自动算出一套合法的计算顺序同时检测循环依赖死环比如ab、ba这种无法计算的错误公式。package com.juxin.job; import java.util.*; public class FormulaTopologyDemo { // 邻接图key目标变量value它依赖的所有前置变量 private static MapString, SetString graph new HashMap(); // 入度key变量value当前还剩多少个依赖未计算 private static MapString, Integer inDegree new HashMap(); public static void main(String[] args) { // 模拟业务公式 // a b c // b d * 2 // c 10 // d 5 // 依赖关系a依赖b、cb依赖dc无依赖d无依赖 addDepend(a, b); addDepend(a, c); addDepend(b, d); System.out.println( 构建完成的邻接图 graph ); for (Map.EntryString, SetString entry : graph.entrySet()) { System.out.println(entry.getKey() 依赖 entry.getValue()); } System.out.println(\n 各变量初始入度 inDegree ); for (Map.EntryString, Integer entry : inDegree.entrySet()) { System.out.println(entry.getKey() 入度 entry.getValue()); } // 执行拓扑排序获取合法计算顺序 ListString calcOrder topologySort(); System.out.println(\n 变量正确计算顺序 ); if (calcOrder.isEmpty()) { System.out.println(检测到循环依赖无法计算); } else { System.out.println(calcOrder); System.out.println(执行规则按列表顺序依次计算公式不会出现变量未赋值问题); } } /** * 建立依赖关系target 依赖 pre 前置变量 * param target 待计算变量 * param pre 前置依赖变量 */ private static void addDepend(String target, String pre) { // 核心两行不存在则初始化防止null空指针 graph.putIfAbsent(target, new HashSet()); inDegree.putIfAbsent(target, 0); graph.putIfAbsent(pre, new HashSet()); inDegree.putIfAbsent(pre, 0); // 避免重复添加依赖 SetString preSet graph.get(target); if (!preSet.contains(pre)) { preSet.add(pre); // target入度1多了一个前置依赖 inDegree.put(target, inDegree.get(target) 1); } } /** * 标准Kahn算法拓扑排序 * return 拓扑有序的计算列表空代表存在环循环依赖 */ private static ListString topologySort() { ListString result new ArrayList(); QueueString queue new LinkedList(); // 1. 先把所有入度为0的变量入队无任何依赖可以直接计算 for (Map.EntryString, Integer entry : inDegree.entrySet()) { String var entry.getKey(); int degree entry.getValue(); if (degree 0) { queue.offer(var); } } // 2. 循环处理队列 while (!queue.isEmpty()) { String currVar queue.poll(); result.add(currVar); // 找到所有【依赖 currVar】的上层变量反向遍历图 for (Map.EntryString, SetString entry : graph.entrySet()) { String target entry.getKey(); SetString preList entry.getValue(); if (preList.contains(currVar)) { // 当前前置依赖计算完成上层变量入度-1 int newDegree inDegree.get(target) - 1; inDegree.put(target, newDegree); // 入度归零所有依赖全部算完可以进队列计算 if (newDegree 0) { queue.offer(target); } } } } // 3. 判断是否存在循环依赖 // 总变量数 ! 排序列表长度 → 有环 if (result.size() ! inDegree.size()) { return new ArrayList(); } return result; } }
10个即插即用的R语言效率提升技巧 1. 项目概述:这十个R语言技巧,不是“炫技”,是每天省下两小时的实操武器 我带过三届数据科学方向的实习生,也给五家不同行业的客户做过R语言工作流优化咨询,最常听到的一句话是:“代码能跑就行,… 2026/7/15 20:27:00
如何用C#写一个带数据可视化的上位机 1. 上位机开发基础准备在工业自动化领域,上位机软件扮演着"大脑"的角色。想象一下,就像医生需要通过心电图观察患者心跳一样,我们需要通过上位机来监控传感器数据。用C#开发这样的程序,就像搭积木一样有趣。首先打开Vis… 2026/7/15 20:25:00
JAVA客户端信任自签名或私有CA证书的两种实践路径 1. 为什么需要信任自签名或私有CA证书?在开发测试或内网环境中,我们经常会遇到这样的场景:你的Java客户端需要访问一个使用自签名证书或私有CA签发的HTTPS服务。这时候,你可能会遇到一个常见的错误——"sun.security.validat… 2026/7/15 20:22:59
模板驱动型文档自动化:从Word手工到可审计流水线 1. 这不是“点几下就出PDF”的玩具,而是把文档生产从手工作坊升级成流水线的底层逻辑 你有没有过这种经历:客户要一份产品说明书,你翻出去年的Word模板,改标题、换图片、删掉过时参数,再手动调整页眉页脚——3小时过去… 2026/7/15 22:27:56
N皇后遗传算法实战:Python手写GA核心模块与调参避坑指南 1. 这不是教科书,而是一次真实的GA项目复盘:从Matlab到Python的N皇后实战手记你点开这篇文章,大概率不是为了背诵“遗传算法是模拟生物进化过程的优化方法”这种定义。你真正想搞清楚的是:当一个真实项目摆在面前——比如用遗传算… 2026/7/15 22:27:56
C++写的RSA文件加密小工具,支持TXT和JPG/PNG等图片直接加解密 本文还有配套的精品资源,点击获取 简介:用标准C实现的RSA加解密程序,不依赖第三方库,编译即用。核心功能包括生成RSA密钥对(含示例参数)、对任意文件做公钥加密/私钥解密,自动处理PKCS#1 v1.… 2026/7/15 22:27:56
代码可对话:基于LangChain+Chroma的RAG实践指南 1. 项目概述:当代码变成可对话的“活文档”你有没有过这种体验:接手一个新项目,打开 IDE,满屏是密密麻麻的.py文件,目录结构像迷宫,函数名看着眼熟但逻辑完全摸不着边?翻文档——要么压根没有&a… 2026/7/15 22:21:53
Android随笔-Kotlin和Java如何相互兼容 Kotlin 兼容 Java 不是"勉强能跑",而是设计之初的核心目标——JetBrains当年推出 Kotlin(Google是采纳和推广) 就是为了在庞大的 Java 生态中无缝替换,而不是另起炉灶。一、源码级兼容:能混写、能互调 1. 同… 2026/7/15 22:21:53
DonkeyCar开源自动驾驶小车:树莓派+端到端学习实战指南 1. 这不是玩具遥控车,而是一台能“学开车”的开源自动驾驶小车 你拆开过遥控车的外壳吗?里面通常只有接收模块、电机驱动和几根焊线——它听指令,但不思考。而DonkeyCar完全不同:它是一套完整跑在树莓派上的 轻量级自动驾驶开发… 2026/7/15 22:21:53
行星减速机的工作原理是什么?从齿轮运动关系到减速比计算 一、行星齿轮机构的组成 标准行星齿轮机构主要包括: 太阳轮; 行星轮; 内齿圈; 行星架。 太阳轮位于机构中心。 多个行星轮围绕太阳轮均匀布置,行星轮内侧与太阳轮外啮合,外侧与内齿圈内啮合。 行星轮通过轴… 2026/7/15 0:03:00
阅读Java开源框架源码的心得分享! 前几日闲来无事有幸看到了一位博主分享自己阅读开源框架源码的心得,看了之后也引发了我的一些深度思考。我们为什么要看源码?我们该怎么样去看源码? 其中前者那位博主描述的我觉得很全了(如下图所示),就不做… 2026/7/15 0:03:00
【LINUX】驱动 【LINUX驱动】【字符设备】【中断】【Platform】【网课 设备树】【GPIO】【PINCTRL】【INPUT】【IIC】【SPI】【网络驱动】【屏幕驱动】【一 设备树】【二 内核模块编译】【三 基本驱动框架】【四 Platform总线设备驱动框架】【五 驱动子系统】【六 综合】 2026/7/15 0:07:01
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/13 8:31:55
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/14 18:25:04
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/14 5:09:41