CentOS 8安装Java:YUM、RPM与TAR.GZ三种方式实战对比与选择指南
1. 项目概述与选型思考最近在给一台新装的CentOS 8服务器部署应用第一步就是装Java。这活儿看起来简单不就是装个环境嘛但真动起手来你会发现选择还挺多系统自带的yum、直接下载rpm包、或者解压官方的tar.gz压缩包。每种方法背后其实对应着不同的运维场景和需求。比如你是想图省事快速装好还是要追求版本控制的绝对精确是生产环境要求稳定可追溯还是开发测试环境需要灵活切换这些选择直接决定了后续维护的复杂度。我这次的任务是在CentOS 8上安装Java目标是为一个Spring Boot应用提供运行时。网上教程很多但大多只给命令很少讲清楚为什么选这个以及选了之后会有什么“坑”。所以我决定把这次安装过程中对yum、rpm、tar.gz这三种主流方式的实践、对比和踩过的坑系统地梳理一遍。无论你是刚接触Linux的开发者还是需要管理多台服务器的运维希望这篇从实战中总结的指南能帮你避开我走过的弯路根据你的实际情况做出最合适的选择。2. 环境准备与前置检查在开始安装Java之前我们不能直接上手就敲命令。就像盖房子要先勘测地基一样安装软件前也需要对系统环境有一个清晰的了解这能避免很多因环境不一致导致的诡异问题。2.1 确认系统版本与架构首先我们必须明确我们操作的系统确实是CentOS 8。虽然标题说了是CentOS 8但有些云服务商的镜像或者自己之前可能做过升级版本会有细微差别。打开终端执行以下命令cat /etc/redhat-release对于我的机器输出是CentOS Linux release 8.5.2111这确认了系统大版本。接下来需要知道系统是64位x86_64还是其他架构如aarch64这决定了我们要下载哪个版本的Java。运行uname -m最常见的输出是x86_64代表64位英特尔或AMD处理器。如果你的输出是aarch64那么你需要寻找对应的ARM架构JDK包比如热词里提到的temurin jdk17 linux aarch64 tar.gz。这一步至关重要下错架构的包会导致安装失败。2.2 检查现有Java环境很多时候系统可能已经预装了某个版本的Java比如OpenJDK或者之前安装过其他版本。为了避免冲突和混淆我们先检查一下java -version如果返回command not found那说明是全新的环境很干净。如果已经安装了某个版本这里会显示详细信息例如openjdk version 1.8.0_362。记下这个版本如果你需要替换它在后续步骤中就要考虑如何干净地移除旧版本。对于通过yum或rpm安装的Java移除相对规范而对于tar.gz方式安装的可能需要手动清理环境变量。2.3 网络与存储空间检查网络连通性yum安装需要联网从仓库下载rpm和tar.gz方式如果你选择在线下载同样需要网络。可以ping一下外网地址如8.8.8.8测试连通性。对于内网或离线环境你需要提前下载好安装包并传输到服务器这时rpm和tar.gz方式就更具优势。存储空间检查一下磁盘空间是否充足。一个完整的JDK大约需要300MB到500MB的空间。使用df -h命令查看根目录/或你计划安装目录的可用空间。注意在CentOS 8中默认的yum包管理器已被dnf取代但yum命令作为dnf的软链接仍然可用两者命令基本兼容。在本文中为了更通用和符合习惯我们统一使用yum命令你在实际操作中会发现效果和dnf是一样的。3. 方案一使用YUM仓库安装最便捷yum或dnf是CentOS/RHEL系列发行版的包管理神器。它的核心优势是自动化解决依赖关系。当你告诉它要安装Java时它会从配置好的软件仓库Repository里找到合适的包并且把这个包所依赖的其他所有包比如特定的库文件一并下载安装。这种方式最适合追求快速部署、且对特定小版本号不敏感的场景。3.1 搜索与选择Java包首先我们可以查看仓库里有哪些可用的Java开发工具包JDK或运行时环境JRE。OpenJDK是开源的首选。yum search openjdk或者更精确地搜索yum search jdk你会看到一堆包名常见的有java-11-openjdkOpenJDK 11的JDK包含开发工具java-11-openjdk-develOpenJDK 11的开发包通常就是JDKjava-11-openjdk-headless无图形界面的JRE运行时适合服务器java-17-openjdkOpenJDK 17的JDKjava-1.8.0-openjdkOpenJDK 8的JDK对于大多数需要编译和运行Java应用的环境我们直接安装devel版本即可。例如安装OpenJDK 11sudo yum install java-11-openjdk-devel执行后yum会列出将要安装的包及其依赖并询问是否确认。输入y并回车接下来就是自动下载和安装的过程无需人工干预。3.2 验证安装与理解安装位置安装完成后再次验证版本java -version openjdk version 11.0.xx 2024-xx-xx LTS OpenJDK Runtime Environment 18.9 (build 11.0.xxxx-LTS) OpenJDK 64-Bit Server VM 18.9 (build 11.0.xxxx-LTS, mixed mode, sharing)同时也可以检查编译器javacjavac -version那么yum把Java装到哪里去了呢这是理解yum管理方式的关键。通过yum安装的软件其文件会按照Linux的目录规范分散到各个系统目录Java主程序通常位于/usr/lib/jvm/目录下。你可以用ls /usr/lib/jvm/查看里面会有类似java-11-openjdk-11.0.xx.x86_64的文件夹。可执行文件链接java和javac等命令的链接被放在/usr/bin/目录下。你可以用which java查看它实际指向/usr/bin/java而这个文件又是一个指向/usr/lib/jvm下具体Java版本的软链接。配置文件可能存在于/etc/目录下。这种分散的布局是由yum和RPM包规范决定的好处是系统能统一管理所有软件坏处是如果你想手动彻底清理某个版本会比较麻烦。3.3 YUM方式的优缺点与实战心得优点极度简单一条命令解决所有问题包括依赖。自动更新可以通过yum update命令轻松更新Java到仓库中的最新小版本安全补丁获取方便。系统集成好完全符合系统包管理规范不会污染其他目录。缺点版本受限你只能安装软件仓库里存在的版本。比如仓库里最新只有OpenJDK 17而你需要Oracle JDK 21或者某个特定的OpenJDK 21.0.3yum就无能为力了。这也是热词中有人搜索特定版本rpm包的原因。版本滞后仓库中的版本更新往往慢于上游官网。对于需要第一时间用上新特性或安全补丁的场景这可能是个问题。清理稍复杂卸载需要使用yum remove命令但一些配置文件或依赖可能残留。实操心得在生产环境中如果应用兼容性允许且你对“使用仓库提供的最新稳定版”这一策略没有异议那么yum安装是首选。它的可预测性和可维护性最高。安装后建议运行sudo yum history查看一下最近的安装事务ID万一出问题可以方便回滚。如果遇到yum install速度慢或无法连接那就是仓库源的问题。可以参考热词中的“centos8 yum源清华”或“rocky 8.10如何替换阿里云yum源”将默认源替换为国内镜像如阿里云、清华源能极大提升下载速度。替换源本身也是一个常用操作核心是备份旧的/etc/yum.repos.d/下的文件然后下载新的repo配置文件。4. 方案二使用RPM包安装折中可控rpm是Red Hat系的软件包格式。yum底层也是管理rpm包只不过yum帮你从仓库找。而rpm安装方式是指你手动从一个可信来源如官网、特定镜像站下载好了某个具体版本的.rpm安装包文件然后在本地直接安装它。这种方式比yum多了“手动下载包”的步骤但换来了对具体版本的精确控制。4.1 获取特定版本的RPM包你需要知道自己需要哪个确切的版本。以安装OpenJDK 17为例我们可以从官方项目网站如Adoptium原名AdoptOpenJDK或Red Hat的镜像站下载。例如访问Adoptium的网站找到OpenJDK 17的RPM包下载链接。对于x86_64架构包名可能类似于jdk-17.0.xx_linux-x64_bin.rpm。你可以使用wget或curl在服务器上下载wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.xxxx/OpenJDK17U-jdk_x64_linux_hotspot_17.0.xx_xx.rpm请注意这里的URL和包名需要替换成你实际找到的。这也是为什么热词中会出现“rpm 下载网站”这样的搜索找到一个稳定可靠的RPM包源很重要。4.2 执行RPM安装命令下载完成后使用rpm命令进行安装。-ivh是常用参数组合-i: 安装install-v: 显示详细信息verbose-h: 显示安装进度哈希条hashsudo rpm -ivh OpenJDK17U-jdk_x64_linux_hotspot_17.0.xx_xx.rpm如果系统已经存在一个通过rpm安装的旧版本Java并且你想升级可以使用-Uvh参数Upgrade。安装过程会显示进度并将文件释放到系统预定义的位置通常也是/usr/lib/jvm/目录下同时创建好/usr/bin下的命令链接。这一点和yum安装的结果非常相似因为yum安装的本质上也是同一个RPM包。4.3 处理依赖问题rpm命令本身不自动解决依赖。这是它与yum最核心的区别。如果这个Java的RPM包依赖系统里没有的库例如某些特定的glibc版本或其他库安装时会报错提示缺少dependency: somelib x.x。遇到这种情况你有两种选择手动安装依赖根据错误提示去仓库或网站找到对应的rpm包手动安装。这可能引发嵌套依赖比较繁琐。使用yum localinstall这是一个很好的折中方案。yum或dnf可以处理本地RPM包的依赖。命令如下sudo yum localinstall OpenJDK17U-jdk_x64_linux_hotspot_17.0.xx_xx.rpm这个命令会先检查本地RPM包的依赖关系然后自动从配置的仓库中下载并安装所有缺失的依赖包最后再安装这个Java的RPM包。它结合了rpm指定具体包文件和yum解决依赖的优点。4.4 RPM方式的优缺点与实战心得优点版本精确你可以安装从任何渠道获取的特定版本的RPM包不受限于系统仓库。部分自动化安装过程依然规范文件会放到系统标准位置命令链接会自动创建。可查询与管理安装后可以用rpm -qa | grep jdk查询已安装的JDK包用rpm -e命令卸载相对干净。缺点依赖处理纯rpm命令安装需手动处理依赖对新手不友好。使用yum localinstall可以缓解。更新麻烦未来升级到新版本需要重复“下载新RPM包 - 安装”的过程无法像yum那样一键更新。来源安全需要确保RPM包来源可信避免下载到被篡改的包。实操心得当你需要安装的Java版本在系统仓库里没有时比如热词中有人找mysql 5.7.44的离线RPM包rpm方式是标准解法。强烈推荐使用sudo yum localinstall xxx.rpm来代替单纯的rpm -ivh它能省去你大量处理依赖的时间。安装后同样使用java -version和javac -version验证。如果发现版本没切换可能是因为系统里存在多个Java需要检查和更新alternatives配置后续会讲或者你安装的RPM包可能没有自动创建/usr/bin下的链接。5. 方案三使用TAR.GZ压缩包安装最灵活tar.gz是一种压缩归档格式。这种方式是直接从Oracle官网、Adoptium等网站下载编译好的二进制压缩包如jdk-17_linux-x64_bin.tar.gz然后解压到你指定的任意目录。系统完全不知道你安装了它一切都需要手动配置。这种方式给予了用户最大的灵活性也带来了最大的管理责任。5.1 下载与解压首先选择一个安装目录。通常第三方软件可以放在/opt或/usr/local下。这里以/opt为例# 切换到/opt目录通常需要root权限 cd /opt sudo tar -xzf /path/to/your/downloaded/jdk-17_linux-x64_bin.tar.gz解压后会生成一个目录例如jdk-17.0.xx。你可以为了方便管理创建一个软链接sudo ln -s jdk-17.0.xx java-17这样/opt/java-17就指向了实际的JDK目录。未来升级时只需要解压新版本然后更改这个软链接的目标即可非常方便。5.2 手动配置环境变量这是tar.gz方式最关键的一步。系统需要知道去哪里找java、javac这些命令。我们需要修改用户的环境变量配置文件。全局配置推荐用于服务器编辑/etc/profile文件在文件末尾添加export JAVA_HOME/opt/java-17 export PATH$JAVA_HOME/bin:$PATHJAVA_HOME告诉系统Java的安装根目录。PATH将Java的bin目录添加到系统路径的最前面$PATH前面这样系统会优先使用我们设置的Java。用户级配置如果只想给当前用户配置可以编辑~/.bashrc文件添加同样的内容。编辑完成后必须执行source命令使配置立即生效或者退出终端重新登录。source /etc/profile # 如果修改的是/etc/profile # 或 source ~/.bashrc # 如果修改的是~/.bashrc5.3 验证与切换机制配置完成后验证echo $JAVA_HOME # 应输出 /opt/java-17 java -version javac -version如果系统里存在多个Java比如之前用yum装过OpenJDK 11现在又手动装了OpenJDK 17那么java -version显示哪个取决于PATH环境变量的顺序。因为我们把$JAVA_HOME/bin放在了$PATH的最前面所以会优先使用我们设置的版本。对于通过yum或rpm安装的Java系统通常会用alternatives机制来管理多个版本。你可以使用sudo alternatives --config java来交互式地选择系统默认的Java版本。但tar.gz方式安装的Java不会注册到alternatives中完全由环境变量PATH控制。5.4 TAR.GZ方式的优缺点与实战心得优点绝对控制版本、安装位置、配置完全自定义灵活性最高。多版本共存可以在不同目录安装多个JDK版本通过切换JAVA_HOME和PATH轻松切换非常适合开发测试环境。干净隔离安装和卸载不会影响系统包管理器管理的其他软件完全独立。版本最新可以直接从官网下载到最新的GA通用可用版本甚至早期访问版。缺点全手动下载、解压、配置环境变量都需要手动完成步骤最多。系统不感知系统包管理命令如yum list installed查不到它需要自己记录和管理。无自动更新安全更新需要手动下载新包并重复配置过程。依赖自包含需要确保二进制包包含了所有必要的库或者系统已满足其运行依赖。实操心得目录规划我习惯在/opt下为每个主要软件创建以版本号命名的目录并建立一个不带版本的软链接如/opt/java指向/opt/jdk-17.0.xx。这样在脚本中引用JAVA_HOME/opt/java升级时只需改变软链接指向所有脚本无需修改。环境变量冲突如果配置后命令不生效首先用echo $PATH检查路径顺序再用which java查看实际调用的命令路径。确保你的JAVA_HOME/bin在PATH中排在系统默认路径/usr/bin之前。卸载卸载极其简单直接删除解压的目录和软链接然后从/etc/profile或~/.bashrc中移除环境变量设置再source一下即可。这种“绿色安装”的方式清理起来也最彻底。适用于场景这是开发者的最爱特别是在需要同时维护多个Java版本项目的机器上。对于生产环境如果运维体系完善有统一的软件部署规范例如都部署在/app目录下这种方式也能提供清晰的版本控制和回滚能力。6. 三种方式对比与场景选择指南实践完三种方法我们来做一个清晰的对比这能帮助你在未来面对不同场景时做出快速决策。特性维度YUM 安装RPM 包安装TAR.GZ 安装安装复杂度极低一条命令中低需手动下载包可用yum localinstall解决依赖高需下载、解压、手动配置环境变量版本控制差受仓库版本限制好可安装任意获取到的RPM版本最好可安装任意版本灵活切换依赖管理自动解决需手动处理或借助yum localinstall自包含或需系统预装系统集成最好完全由系统包管理器管理好遵循RPM规范系统可查询无系统不感知完全独立更新与升级方便yum update一键更新麻烦需下载新RPM包重新安装麻烦需手动下载、替换、更新配置卸载清理较干净yum remove可能有配置残留较干净rpm -e最干净直接删除目录和环境变量多版本管理困难需靠alternatives且版本来自仓库较困难同左版本可自定义非常容易不同目录切换环境变量即可适用场景生产服务器、快速原型、对版本无特殊要求需要特定版本且该版本有RPM包、内网离线环境开发环境、需要多版本共存、追求最新版本、自定义部署目录如何选择我的个人建议是新手入门或标准生产环境无脑选yum安装。省心省力符合系统规范后续维护成本最低。除非仓库里确实没有你需要的版本。需要特定版本且该版本有官方或可信的RPM包选择rpm安装并务必使用sudo yum localinstall命令来安装。它既保证了版本的精确性又借助了yum的依赖解决能力是平衡性很好的方案。Java开发者、需要频繁切换版本、或追求极致灵活性选择tar.gz安装。虽然初始设置麻烦点但一次配置长期受益。特别是在本地开发机或CI/CD构建节点上这种方式的优势无可替代。7. 进阶多版本Java共存与管理在实际工作中一台服务器上运行多个需要不同Java版本的应用是很常见的。例如一个老项目用Java 8一个新项目用Java 17。无论你用哪种方式安装了多个Java都需要一套管理机制来指定“当前生效”的版本。7.1 使用Alternatives系统工具针对YUM/RPM安装对于通过yum或rpm安装的Java它们通常会向系统的alternatives系统注册。你可以使用以下命令管理# 查看所有已注册的java命令选项 sudo alternatives --config java # 查看所有已注册的javac命令选项 sudo alternatives --config javac执行命令后会列出所有候选版本及其优先级并提示你输入编号选择默认版本。这个选择是系统级的。7.2 使用环境变量覆盖针对TAR.GZ或混合环境当系统中同时存在alternatives管理的Java和你手动安装的Java时Shell环境变量PATH的优先级最高。也就是说如果你在~/.bashrc或/etc/profile.d/下的自定义脚本中将某个Java的bin路径加到了PATH的最前面那么无论alternatives设置的是什么当前Shell会话都会使用你指定的版本。这是实现用户级或会话级Java版本切换最灵活的方式。例如你可以在~/.bashrc中根据条件动态设置JAVA_HOME# 在~/.bashrc中 if [ -d /opt/java-17 ]; then export JAVA_HOME/opt/java-17 elif [ -d /usr/lib/jvm/java-11-openjdk ]; then export JAVA_HOME/usr/lib/jvm/java-11-openjdk fi export PATH$JAVA_HOME/bin:$PATH对于更复杂的管理可以考虑使用专门的版本管理工具如jenv类似于Python的pyenv它可以方便地切换全局、目录或Shell的Java版本。7.3 应用级指定Java版本最优雅的方式是在应用启动时直接指定使用的Java路径而不是依赖系统默认值。例如在Spring Boot应用的启动脚本start.sh中#!/bin/bash export JAVA_HOME/opt/java-17 # 明确指定此应用使用的JDK $JAVA_HOME/bin/java -jar your-application.jar这样无论系统默认Java是什么这个应用都会固定使用/opt/java-17下的Java来运行实现了完美的环境隔离。这在Docker容器化部署中也是标准做法。8. 常见问题排查与解决即使按照步骤操作也可能会遇到一些问题。这里汇总几个我踩过的坑和解决办法。问题1执行java -version显示的还是旧版本。原因PATH环境变量中旧Java的路径在新路径之前或者alternatives配置的默认版本不是新安装的。解决echo $PATH检查你的JAVA_HOME/bin是否在靠前位置。如果使用了tar.gz方式确保执行了source命令或重新打开了终端。如果使用了yum/rpm运行sudo alternatives --config java重新选择。使用绝对路径测试/opt/java-17/bin/java -version看新版本是否正常。问题2javac命令未找到。原因可能只安装了JRE运行时环境而没有安装JDK开发工具包。yum安装时包名java-xx-openjdk是JREjava-xx-openjdk-devel才是JDK。解决确保安装的是devel包。对于tar.gz下载的必须是JDK包通常包含bin/javac而不是JRE包。问题3安装过程中报错提示依赖缺失常见于纯rpm命令。原因缺少所需的系统库。解决根据错误信息使用yum install安装缺失的依赖包。或者放弃rpm -ivh改用sudo yum localinstall your-package.rpm让yum去解决依赖。问题4内存不足错误如热词中的java: outofmemoryerror: insufficient memory。注意这个错误通常发生在运行Java程序时而不是安装时。但它与Java环境相关。原因Java虚拟机JVM分配的内存不足。解决这不是安装问题需要在启动Java应用时调整JVM参数例如增加堆内存java -Xms512m -Xmx1024m -jar yourapp.jar。安装环节只需确保Java本身安装成功即可。问题5如何彻底卸载Java对于yum安装sudo yum remove java-xx-openjdk-devel。检查/usr/lib/jvm/目录下是否有残留文件夹手动删除。对于rpm安装先用rpm -qa | grep jdk找到完整包名然后sudo rpm -e package-name。对于tar.gz安装直接删除解压的目录和软链接并清理/etc/profile或~/.bashrc中的环境变量设置最后source一下。安装Java是服务器配置中的基础操作但基础不等于简单。不同的安装方式体现了在便捷性、控制力和可维护性之间的不同权衡。经过这一轮实践我的体会是没有最好的方式只有最适合当前场景的方式。对于团队协作的生产环境统一使用yum或rpm配合内部仓库可以保证环境一致性而对于个人开发机tar.gz提供的灵活性则是无可替代的。关键是在开始之前就想清楚你的核心需求是什么然后选择那条路径并清楚地知道这条路上的每一个步骤和可能遇到的坑。

相关新闻

从宇树科技IPO看硬科技公司估值:技术、资本与产业趋势的交汇

从宇树科技IPO看硬科技公司估值:技术、资本与产业趋势的交汇

上周,一家名为宇树科技的公司公布了其科创板IPO的网上发行中签结果。一个数字引起了我的注意:0.018%。这意味着,每1万个申购账户里,只有不到2个能中签。而参与这场“抽奖”的账户数量,超过了978万户。这个数字背后&…

2026/10/11 6:57:44 阅读更多 →
小米Air 13.3散热优化实战:从软件降压到硬件改造,告别过热降频

小米Air 13.3散热优化实战:从软件降压到硬件改造,告别过热降频

1. 项目缘起:一台“热情似火”的生产力工具我手头这台小米Air 13.3,i7-8550U配MX150的指纹版,当年买的时候看中的就是它轻薄机身里塞下的“标压”性能和独立显卡,想着能兼顾便携和轻度创作。但用久了才发现,这机器在性…

2026/10/11 11:28:12 阅读更多 →
园区车辆管理系统落地,司机端APP推不动?我们改用小程序后顺利多了

园区车辆管理系统落地,司机端APP推不动?我们改用小程序后顺利多了

园区车辆管理系统上线,功能都测通了,结果卡在最前面的一公里——司机不装APP。 去年做一个化工园区的YMS项目,开发测试都顺利通过了,上线第一天门岗打电话过来:司机不装APP。现场是这样的:外地货车到门口&a…

2026/10/8 16:50:09 阅读更多 →

最新新闻

螺栓销钉缺失检测:1209张VOC数据集与YOLOv8训练实践

螺栓销钉缺失检测:1209张VOC数据集与YOLOv8训练实践

简介:输电线路螺栓销钉缺失检测图像数据集专注电力设施智能巡检场景,面向计算机视觉研究者与电力运维开发人员,旨在解决销钉缺失这一高危隐患的自动识别问题。数据集共2000个文件、约89.52MB,包含791张高清JPEG巡检图像及1209个PA…

2026/10/12 0:32:15 阅读更多 →
AI知识简记(持续更新):用TaoToken统一Key打通VS Code与Cursor的大模型调用

AI知识简记(持续更新):用TaoToken统一Key打通VS Code与Cursor的大模型调用

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 0:32:15 阅读更多 →
信用风险预测模型实战:从标签定义、WOE特征工程到评分卡转换

信用风险预测模型实战:从标签定义、WOE特征工程到评分卡转换

简介:这份PDF是一篇基于机器学习算法的商业银行信用风险预测模型研究论文,适合金融科技、风控建模方向的从业者、研究生及竞赛选手参考。文章从信用风险研究的现实背景切入,系统梳理了多元判别分析、Logistic回归等传统统计方法,以…

2026/10/12 0:32:15 阅读更多 →
基于VGG的自然灾害图像分类:迁移学习与Grad-CAM实战

基于VGG的自然灾害图像分类:迁移学习与Grad-CAM实战

简介:这份资源面向图像识别与机器学习方向的初学者及进阶开发者,聚焦自然灾害场景的自动分类任务,帮助读者理解如何用VGG卷积神经网络完成从数据预处理到模型训练与评估的完整流程。压缩包共29个文件,约1.54MB,包含5个…

2026/10/12 0:31:15 阅读更多 →
JDK11核心新特性与升级实战:语法、API及GC全面解析

JDK11核心新特性与升级实战:语法、API及GC全面解析

1. 为什么说JDK11是继JDK8之后最值得升级的版本JDK11确实是一个非常特殊的存在。作为Oracle在2018年9月发布的LTS版本,它既是Java 8之后第一个真正意义上的长期支持版本,又是Oracle调整Java版本发布节奏后的关键节点。对于做Java开发的同学来说&#xff…

2026/10/12 0:31:15 阅读更多 →
Python+OpenCV答题卡自动批改:检测、切分、考号识别与选择题评分

Python+OpenCV答题卡自动批改:检测、切分、考号识别与选择题评分

简介:这份源码包面向计算机、数学、电子信息等专业的学生与开发者,聚焦答题卡自动识别与批改场景,可用于课程设计、期末大作业、毕设项目或初期项目立项演示。项目基于Python实现答题卡检测、试题切分、学生考号识别与选择题自动批改&#xf…

2026/10/12 0:31:15 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →