SonarQube安装部署全指南:从环境准备到代码质量平台落地

最近帮一个团队把代码静态检查环境搭起来,我在测试服务器上完整走了一遍sonar安装的流程。以前看别人部署SonarQube觉得就是下载、解压、启动三连,真到自己上手才发现,这玩意儿对环境的要求比想象中多:数据库版本要匹配、内置搜索服务对系统参数有硬性要求、运行用户还不能是root。前前后后折腾了两天,踩了不少坑,也把整个部署链路摸清楚了。

这篇文章写给两类人:一类是刚接触SonarQube、想在自己电脑或测试机上跑起来做代码质量检查的开发者和测试工程师;另一类是要在团队内部搭建统一代码质量管理平台、需要做环境规划和运维方案的同学。我会把从环境准备、数据库初始化、核心配置到启动验证的完整流程拆开讲,包括每一步为什么要这么做、哪些参数不能乱调、以及部署完成后如何管理这个服务。文章里的方案都以可落地为优先,不绕弯子。

1. 安装SonarQube前,先搞清楚这个组件到底要什么

1.1 别把它当普通Web应用

很多人第一次部署SonarQube,习惯性把它当成一个普通的Java Web应用:给个Tomcat或者Spring Boot跑起来就行。实际上SonarQube内置了好几个关键组件,它们之间是联动关系,任何一个环节配置不到位,服务都可能起不来,或者起来之后功能残缺。

SonarQube的核心由四部分组成:Web服务端负责提供管理界面和API,计算引擎负责执行分析任务并入库,内置的Elasticsearch负责代码数据和指标的索引与检索,后端数据库负责持久化存储。四个部分里,数据库是外部依赖,Elasticsearch是内嵌的。这个内置搜索组件是整个安装过程里最容易出问题的点,因为它对操作系统参数、内存分配、运行权限都有自己的要求,而这些要求往往不在SonarQube的启动脚本里自动帮你处理好。

理解了这层架构,后面遇到"启动了但马上退出""日志报内存错误""页面能开但分析任务失败"这类问题,就能快速定位到底是哪一个环节出了问题,而不是瞎猜。

1.2 版本选择先想清楚

做sonar安装之前,第一个决策不是怎么装,而是装哪个版本。SonarQube的版本分为社区版和商业版,社区版免费,功能上支持大部分主流语言的静态分析、代码坏味道检测、重复代码识别和基础的覆盖率展示。商业版才有分支分析、增量分析、更多安全规则等能力。如果只是个人学习、小团队内使用,社区版完全够了;如果企业里有严格的代码门禁和多分支流水线需求,建议先试用商业版再决定。

版本选择上还有一层要考虑的是生命周期版本。SonarQube官方会维护长期支持版本(LTS),也有功能更新版本。生产环境尽量用LTS,不要追最新大版本,因为新版本对Java和数据库的最低要求都更严格,迁移升级的坑也更多。我自己就在这个选择上犹豫过,最后选了一个相对稳定的大版本,配合对应版本的JDK和PostgreSQL,整个过程顺利很多。

安装方式上,Docker Compose和传统包安装是两条主流路径。如果只是快速验证功能,Docker方式最省事,一条编排文件同时拉起数据库和应用容器;如果是长期维护的团队平台,我更推荐传统包安装,日志、数据目录、系统服务管控都比较直白,升级时也更可控。下面正文主要以传统包安装为主线展开,Docker方式会在最后提一下适用场景。

2. 环境准备:一台干净Linux服务器上的初始配置

2.1 资源评估和目录设计

先聊硬件。SonarQube是个相对吃内存的应用,尤其是内置的Elasticsearch,默认堆内存就是较大的配置量。个人试用至少保证2GB内存能跑,但会很勉强;团队使用建议4GB起步,8GB以上比较舒服。CPU没什么特殊要求,两核就够。磁盘方面,除了安装包本身,还要预留分析数据、索引、日志的空间,建议至少10GB可用空间。我见过在1GB内存的小机器上硬装SonarQube,结果启动一分钟就因内存分配失败退出,这种问题不是调参数能解决的,别再硬扛。

然后是目录规划。不要直接解压到/home/下随意目录,也不要把数据库数据文件和SonarQube的索引目录混在一起。我惯用的目录结构是这样:

  • /opt/sonarqube:安装目录,存放程序本身
  • /data/sonarqube/data:SonarQube生成的索引和分析数据
  • /data/sonarqube/logs:运行日志
  • /data/sonarqube/temp:临时文件

这样设计的好处是:升级时只需要替换安装目录,数据目录完全不动;备份时只需要打包/data/sonarqube,日志清理也有固定位置。

2.2 专用运行用户和系统参数调优

SonarQube有一个硬性要求:不能以root用户运行,否则内置的Elasticsearch会直接拒绝启动。这个限制是Elasticsearch出于安全机制做的自我保护,Elasticsearch不允许以root身份运行。很多第一次部署的人在这里栽跟头,一直用root执行启动脚本,结果服务起来后秒退,日志里只有一行权限相关报错。

所以安装前必须创建一个专用用户,比如叫sonar:

useradd -m -s /bin/bash sonar

然后把安装目录和数据目录的所有权都交给这个用户。注意是chown -R递归处理,不然后面启动时会因为某个子目录不可写而失败。这一步看起来基础,但目录权限没理顺导致的启动失败,占了SonarQube安装问题里相当大一部分。

接下来是系统参数。Elasticsearch依赖一个叫vm.max_map_count的内核参数,它限制进程可以拥有的内存映射区域数量。默认值在多数Linux发行版上是65530,对Elasticsearch来说不够,需要提高到至少262144。不调整的话,启动时日志会明确报错,提示max virtual memory areas不够。临时修改可以这样:

sysctl -w vm.max_map_count=262144

但重启后就失效了,需要写入配置文件永久生效。在/etc/sysctl.conf或/etc/sysctl.d/下新建一个配置,内容:

vm.max_map_count=262144

然后执行sysctl -p使其加载。

另一个容易忽视的是文件描述符和线程限制。运行SonarQube的进程会打开不少文件,建议把nofile和nproc的软硬限制都调高。在/etc/security/limits.d/下新建文件,写入:

sonar soft nofile 65536 sonar hard nofile 65536 sonar soft nproc 4096 sonar hard nproc 4096

注意检查pam_limits.so是否生效,有的最小化安装默认没加载,导致limits文件配置了却不生效,后面启动任务时可能频繁报文件句柄耗尽。

2.3 JDK和数据库的版本匹配

SonarQube不同大版本对JDK和数据库的要求不一样。老版本常见要求Java 11,较新的版本要求Java 17或21,同时内置的Elasticsearch对JDK版本更敏感,用错JDK会在启动时直接报 "Unsupported Java version" 之类的错误。安装前先确认目标SonarQube版本对应的运行环境要求,官方文档里写得很清楚。建议安装OpenJDK,比如Java 17:

apt install openjdk-17-jdk # 或 yum install java-17-openjdk

安装后确认默认Java版本正确:

java -version

如果系统里同时存在多个JDK版本,一定要把JAVA_HOME环境变量指到正确版本,并且启动SonarQube的用户环境里也要能读到。这里有个坑:很多人在root下执行echo $JAVA_HOME是正确的,但切到sonar用户后环境变量丢失,启动脚本用的是默认旧版Java,照样起不来。所以切到sonar用户后再检查一次环境变量是个好习惯。

数据库方面,SonarQube对PostgreSQL的支持最好,社区版也是把PostgreSQL作为主力数据库。版本上建议用PostgreSQL 13或14这类稳定版本,太老的数据库版本会因为缺少某些功能导致初始化失败。MySQL也可以跑一些版本,但PostgreSQL是更稳妥的选择,后面的配置和初始化我都以PostgreSQL为例。

3. 数据库初始化:最容易返工的一步

3.1 创建专用数据库用户和库

SonarQube初始化的时候会在数据库里建一批表、索引和序列,整个过程是自动完成的,前提是数据库连接配置正确并且有足够的权限。数据库配置这块,很多人在sonar.properties里填错了连接串,或者在pg_hba认证文件里没有放开访问权限,导致SonarQube启动时反复报连接失败。

先登录PostgreSQL创建专用用户和库。建议不要让SonarQube使用默认的postgres超级用户跑业务数据,而是单独建一个专门账号,权限范围尽量小但要允许建表。这样后续备份和权限管理都清晰。

在psql里执行类似下面的SQL:

CREATE USER sonar WITH PASSWORD 'your_strong_password'; CREATE DATABASE sonar OWNER sonar; GRANT ALL PRIVILEGES ON DATABASE sonar TO sonar;

这里有几个细节。第一,密码别用太简单的,尤其是生产环境;第二,数据库名和用户名可以不同,但同一个名字便于识别;第三,数据库编码建议用UTF8,保证多语言项目分析结果不会出现乱码。如果创建数据库时指定了错误的编码,后面分析中文代码注释时会出现乱码,很麻烦。

创建完成之后,要确认PostgreSQL监听的是外部地址还是仅本机。如果SonarQube和PostgreSQL在同一台机器上,监听localhost就够了,安全性更好。如果分开部署,就需要在postgresql.conf里把监听地址改成0.0.0.0或具体网卡地址,并且在pg_hba.conf里加入SonarQube服务器IP的访问规则。

3.2 JDBC连接串与常见连接错误

SonarQube的数据库连接配置集中在sonar.properties文件里。核心配置是下面这几项:

sonar.jdbc.username=sonar sonar.jdbc.password=your_strong_password sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar?currentSchema=public

这个连接串有一点容易被忽略:currentSchema=public。PostgreSQL默认schema是public,大多数时候不写也能工作,但显式写上可以避免后续多schema环境下连错库。另一个常见问题是时区参数,部分SonarQube版本要求连接串里带上时区设置,否则启动时可能报时区相关的警告。可以在URL后面追加&serverTimezone=UTC之类的参数,不过PostgreSQL的驱动和MySQL不太一样,遇到具体报错再针对性调整。

初始化过程中最常见的连接错误有两类。一类是password authentication failed,基本就是密码配错或者pg_hba.conf里认证方式不对,排查时先手动用psql测试一下同一个用户名密码能不能连上,这个判断很快。另一类是FATAL: no pg_hba.conf entry for host,说明数据库端没有放行应用服务器的IP,修改pg_hba.conf后记得重载配置:

systemctl reload postgresql

我踩过的一个比较隐蔽的坑是SonarQube启动脚本里的数据库密码有特殊字符,比如@或:,在JDBC URL里没有做编码处理,导致连接串被错误解析,启动日志里报的是密码错误,实际问题是URL解析中断。处理办法是密码里尽量避免特殊字符,或者对特殊字符做URL转义。

4. 下载解压与sonar.properties配置要点

4.1 下载、校验与目录权限

从官方发行渠道下载稳定版的社区版安装包。下载之前注意核对文件摘要值。怎么核对呢?官方发布页通常会给出对应文件的SHA256校验值,下载后用工具算一下,比对一致再解压。这一步别嫌麻烦,曾有人跳过校验直接解压,结果装到了一个被篡改过的包上,服务起不来还找不到原因。

解压到规划好的安装目录:

tar -zxvf sonarqube-xx.zip -C /opt/

解压完成后,目录名通常会带有版本号,比如/opt/sonarqube-xx。为了后续升级方便,我会做一个软链接:

ln -s /opt/sonarqube-xx /opt/sonarqube

之后所有配置都走/opt/sonarqube,升级时只需要切换软链接指向,配置文件路径不会跟着变。这是个很实用的小技巧,尤其是以后做版本升级时,不用清理一堆旧路径引用。

接下来处理权限。把整个安装目录和数据目录都归sonar用户所有:

chown -R sonar:sonar /opt/sonarqube-xx /data/sonarqube

我在前面提到过,这里再强调一次:一定要递归chown。只改顶层目录会遇到随机的子目录写入失败,表现为日志目录能写,但temp目录不能写,或者数据目录能写但es目录不能写,非常折磨人。

4.2 核心配置项:数据目录、端口和搜索端口

SonarQube的配置文件是/opt/sonarqube/conf/sonar.properties。这个文件里可配置项非常多,但初始化部署只需要关注几个核心项,其余的保持默认就行,不要一开始就大刀阔斧地改,改多了反而不好排查。

首先是数据目录相关配置。如果采用我前面规划的独立数据目录,需要显式指定:

sonar.path.data=/data/sonarqube/data sonar.path.logs=/data/sonarqube/logs sonar.path.temp=/data/sonarqube/temp

如果不改,默认数据会放在安装目录下,升级时如果直接覆盖旧目录,数据就可能丢失。很多人部署完几个月后做升级,才发现数据还在旧目录里,这是个大坑。所以从一开始就用独立目录,养成好习惯。

然后是服务端口:

sonar.web.port=9000

默认端口是9000。如果机器上已经有别的服务占用9000,要改成空闲端口。还有一个sonar.web.context配置,默认是根路径,一般不用动。改动context会让访问地址多一层前缀,反向代理的规则也要跟着改,没必要为了个性化给自己添麻烦。

还有一个容易被忽略的端口是Elasticsearch的传输端口,大致在9001到9100之间,由SonarQube内部管理。如果服务器开了防火墙,或者本身处于容器环境,要确保这个端口没有被占用。一个常见的错误是,9000端口放开了,但内部的搜索服务端口被端口映射挡在外面,结果Web页面能打开,但每次执行分析任务都卡住或者失败。

4.3 wrapper.conf里的JVM内存调整

SonarQube的启动脚本依赖一个wrapper机制,JVM参数通常在/opt/sonarqube/conf/wrapper.conf里配置。里面有两个重要参数,一个是Web进程的最大堆内存,一个是内置Elasticsearch的堆内存。

默认配置对个人试用还算友善,但团队使用就可能不够。我一般会这样调整:

wrapper.java.additional.1=-Xms256m wrapper.java.additional.2=-Xmx1024m

其中的-Xms是初始堆大小,-Xmx是最大堆大小。不要一次性调太猛,尤其是内存小的机器,给Web进程分配过多堆内存,Elasticsearch那边就不够用了,反过来也一样。这两个进程的总内存消耗要控制在服务器物理内存的50%到70%以内。

Elasticsearch的堆内存调整方式和Web进程不太一样,它不用wrapper参数,而是受SonarQube预设脚本控制,位置一般在安装目录下的elasticsearch/config/jvm.options。这个文件里的-Xms和-Xmx要配置成相同的值,避免JVM动态扩展堆内存带来的性能波动。注意,如果机器内存确实紧张,宁可减少分析任务并发,也不要乱调Elasticsearch堆内存让它强行启动,很容易出现内存溢出或者频繁GC。

5. 启动、验证与随系统自启

5.1 首次启动与日志观察

配置完成后,切换到sonar用户启动。启动脚本在/opt/sonarqube/bin/linux-x86-64/sonar.sh。先给脚本加上执行权限:

chmod +x /opt/sonarqube/bin/linux-x86-64/sonar.sh su - sonar -c "/opt/sonarqube/bin/linux-x86-64/sonar.sh start"

启动过程是异步的,脚本不会一直等待,你要主动观察日志确认启动状态。日志路径默认在/opt/sonarqube/logs/,如果改了配置就在/data/sonarqube/logs/。重点看四个日志文件:sonar.log是主进程日志,es.log是搜索服务日志,ce.log是计算引擎日志,web.log是Web服务日志。

启动成功后,sonar.log里会出现类似 "SonarQube is operational" 的提示,web.log里会看到Web服务启动完成的访问地址。这只是第一步,接下来要用浏览器访问http://服务器IP:9000,看到登录页面才算真正起来。

有个关键点:首次启动到完全可用可能需要几十秒到几分钟,视机器性能而定。不要一执行完start命令就急着刷新页面,看到无法访问就以为启动失败,先去看日志。很多时候服务还在初始化数据库,多等半分钟就正常了。

5.2 登录、修改默认密码与生成访问令牌

首次访问Web界面,默认账号是admin,默认密码也是admin。这里说句实在话,SonarQube的这个默认密码相当危险,装上之后要第一时间改掉。登录成功后系统会引导你修改密码,如果跳过这一步,后面的API调用和项目管理都会一直用弱凭证,风险很大。

修改完密码后,建议在"账号设置"里生成一个访问令牌。这个令牌用于代码分析工具与SonarQube之间的认证,比如Maven、Gradle、Jenkins流水线甚至本地命令行。令牌和密码是两套体系:令牌可以按需创建和吊销,密码则不能到处乱填。分析任务最好用令牌而不是密码,这样即使令牌泄露,也可以在管理端随时撤销,不影响账号密码安全。

生成令牌的路径一般在用户头像下拉菜单的"安全"或"My Account"里。创建时给令牌起个清晰的名字,比如ci-token,这样哪天要吊销,一看就知道这个令牌是谁在用。复制令牌时注意只显示一次,关掉页面就看不到了。

5.3 用systemd托管服务

手动启动只能解决当前会话的问题,重启服务器后服务不会自动起来。团队使用的话,把SonarQube托管给systemd是正路。创建一个服务文件,比如/etc/systemd/system/sonarqube.service:

[Unit] Description=SonarQube service After=network.target [Service] Type=forking User=sonar Group=sonar ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop ExecReload=/opt/sonarqube/bin/linux-x86-64/sonar.sh restart TimeoutSec=300 Restart=on-failure [Install] WantedBy=multi-user.target

写完后执行:

systemctl daemon-reload systemctl enable sonarqube systemctl start sonarqube

两三行命令就可以把服务固定下来。这里有一个需要注意的地方:Type=forking对应的是sonar.sh脚本的启动方式,脚本会fork出后台进程。如果服务类型写错了,systemd可能误判启动失败。观察状态时可以看看:

systemctl status sonarqube

它会显示主进程PID和当前状态。如果显示failed,多半是启动脚本里某个路径或者权限没对上,直接把日志调出来看是最高效的排查方式。

6. 我在安装过程中踩过的一组坑与排查思路

6.1 Elasticsearch启动失败:不止是内存缺一条命令

第一次启动时,我盯着es.log,看到一条关于max map count的错误。当时我直接用sysctl -w临时改了一下,服务确实起来了,但没注意这个配置没持久化。过几天服务器重启,SonarQube又起不来,才意识到这不是"敲一条命令就能一劳永逸"的事。

这个问题的根因,是Elasticsearch需要足够的内存映射区域,而Linux默认的内核参数限制太低。解决方式我前面已经写了,要在/etc/sysctl.d/或/etc/sysctl.conf里持久化配置,然后执行sysctl -p。如果你已经配置了还不生效,检查一下是不是有另外一个同名配置覆盖了它,比如/etc/sysctl.d/99-sonarqube.conf和/etc/sysctl.conf同时存在相同键名,后者可能会覆盖前者。

排查这类启动故障,我的经验是先把es.log从头到尾读一遍,重点找包含[ERROR]或者fatal的行。很多问题在日志里写得非常直白,比如内存溢出、线程限制、权限拒绝,对症下药远比在网上零散搜索靠谱。

6.2 数据目录权限不对:日志显示模糊,实际是chown没到位

还有一次,我用了独立数据目录,启动时Web服务起来了,但计算引擎不断报任务失败。排查一圈发现,不是配置错误,而是/data/sonarqube下的子目录归属不对,只有顶层目录属于sonar用户,里面的temp和es目录还是root的,导致运行用户没有写权限。

这个坑的坑人之处在于启动脚本本身不会给你很明确的提示,可能只是日志里某个临时文件写入失败,或者计算引擎任务卡住。解决方法就是把整个/data/sonarqube和/opt/sonarqube都chown给sonar用户,并且递归处理。之后最好做一次验证:以sonar用户身份试着在数据目录下创建和删除一个测试文件,确认权限真正可用。

6.3 数据库连接失败:先把半小时内改过的东西逐项回滚

数据库连接失败是我觉得最考验排查思路的场景。因为我当时改过密码、改过JDBC URL、还动过pg_hba.conf,三个因素叠在一起,一下子不知道是哪个环节出了问题。后来总结出的排查顺序是:

  1. 先用psql命令行,用同一组账号密码连接同一个数据库,验证数据库侧是否正常。
  2. 再查看SonarQube的sonar.log里报的具体错误,是认证失败、连接超时还是找不到数据库。
  3. 如果连接超时,检查防火墙和PostgreSQL监听端口;如果认证失败,检查pg_hba.conf的认证方式。
  4. 如果改了密码,确认SonarQube配置文件的密码保存没有误加空格或换行。

按这个顺序排查,基本能在几分钟内定位问题。不要一上来就怀疑SonarQube本身的代码,它不是问题源头。

6.4 端口占用和升级时的数据保留问题

做团队部署时,端口占用是另外一个高频问题。我遇到过9000端口被一个监控agent占用的情况,SonarQube怎么都启动不了,最后用查看监听端口的命令才发现是别家服务占着。解决方式很简单,改sonar.web.port到空闲端口,同时把防火墙规则和反向代理配置同步改掉。

升级时还有一个常见的问题:旧版本的安装目录和数据目录混在一起,直接在原目录上覆盖新版本,结果新版本启动连数据都带乱了。我前文一直强调独立数据目录,就是为了让升级时把数据目录完整保留,安装目录整体替换。升级前先备份数据目录,升级后对比一下首页统计是否和升级前一致,这是成本最低的校验方式。

7. 写在最后:安装之外的一点运维建议

整个sonar安装过程走完,我对SonarQube这个组件最大的印象是:它不是那种"解压就能用"的项目,而是需要系统性看待的完整服务。数据库、搜索引擎、计算引擎、Web界面,任何一环掉链子,整体就不可用。所以部署时不要图省事跳过环境准备和权限配置,越是想走捷径,后面花在排查上的时间越多。

如果只是在自己的电脑上快速体验一把,用Docker Compose拉起一个PostgreSQL和SonarQube容器确实最省事,镜像里内置的配置已经调好一大半,命令也就那么两条。但放到团队里长期跑,我还是建议用传统包加systemd的方案,因为服务日志、升级路径、备份恢复都能做到心里有数。

部署完成后,有两件琐碎但重要的事别忘:一是定时备份数据目录里的重要数据文件和数据库,二是定期观察日志,尽早发现问题苗头。SonarQube作为代码质量平台,真正价值在长期运行后沉淀下来的分析数据,有了稳定的安装和运维,后面接流水线、配质量门禁、看趋势报表就都顺理成章了。

相关新闻

AI驱动的自动化渗透测试原理与金融行业防御实战

AI驱动的自动化渗透测试原理与金融行业防御实战

1. 项目概述:当金融业遭遇AI驱动的渗透测试新范式最近几周,多家韩国金融机构的公开通报和内部安全简报在技术圈悄然流传——不是传统意义上的“勒索软件爆发”或“钓鱼邮件泛滥”,而是更令人警觉的模式:攻击者未依赖社会工程&…

2026/10/20 17:02:23 阅读更多 →
HikariCP连接池原理与高并发调优:从核心机制到线上问题排查

HikariCP连接池原理与高并发调优:从核心机制到线上问题排查

有段时间我帮一个朋友做线上问题排查,晚高峰时段某个服务的日志里开始不断刷出 Connection is not available, request timed out ,但数据库端连接数远没到上限,CPU、内存也都平稳。一群人先是怀疑网络,再是怀疑驱动&#xff0c…

2026/10/20 17:02:23 阅读更多 →
网狐6.6完整源码内核拆解:消息分发、房间调度与二次开发实战

网狐6.6完整源码内核拆解:消息分发、房间调度与二次开发实战

简介:网狐6.6完整源码是一套经典网络游戏平台源代码,面向具备C基础、希望深入理解游戏服务端架构或进行二次开发的开发者。该版本已升级至Visual Studio 2008编译环境,标签中特别标注包含内核,意味着除界面与功能实现外&#xff0…

2026/10/20 17:02:23 阅读更多 →

最新新闻

基于CAN总线的DSP28335 IAP在线升级方案与Bootloader设计详解

基于CAN总线的DSP28335 IAP在线升级方案与Bootloader设计详解

做DSP28335应用开发的人,基本都体会过一种尴尬:整机已经装配完毕,外壳固定好了,或者设备已经在现场跑了大半年,这时候突然要改一个控制参数、修一个不起眼的逻辑bug,拿JTAG下载器过去才发现,拆机…

2026/10/20 17:51:45 阅读更多 →
持续交付平台架构选型与工程实践指南

持续交付平台架构选型与工程实践指南

我无法基于当前输入完成符合要求的博文创作。 原因如下: 输入中仅提供了项目标题 "Harness Engineering 全景深度调研" ,但未提供任何实质性的【项目正文】、【关键词】或【摘要描述】; 所附“相关热搜词”与“最新网络热词”…

2026/10/20 17:51:45 阅读更多 →
AI周报:端侧小模型、合成数据与多模态质检的落地观察

AI周报:端侧小模型、合成数据与多模态质检的落地观察

国庆假期回来,先补上周报。这八天里AI圈其实没闲下来,我从开源社区、模型仓库、几个行业群里观察到的信息整理了一下,发现三条主线最值得聊:端侧小模型集中突破、合成数据从辅助变成主料、多模态模型在工业质检场景里真正开始跑产…

2026/10/20 17:51:45 阅读更多 →
卷积神经网络CNN:从原理到工程部署的实战总结

卷积神经网络CNN:从原理到工程部署的实战总结

1. 从一条卷积计算开始:CNN到底在算什么先说个我自己的体验。当年第一次接触卷积神经网络时,找了一堆资料来看,结果越看越糊涂。网上教程大多从“图像分类任务”讲起,上来就是“把图片输入网络,输出类别概率”&#xf…

2026/10/20 17:51:45 阅读更多 →
2026年AI测试工具五大断代性突破与实战效能解析

2026年AI测试工具五大断代性突破与实战效能解析

1. 这场变化的底层逻辑说实话,2026年再谈“AI测试辅助”,已经有点过时了。术语都要换一换了——现在圈子里讨论的,是“测试智能体”“大模型驱动的生成式测试”“自主决策的探索引擎”。我在某大型互联网公司做质量保障这块,过去一…

2026/10/20 17:51:45 阅读更多 →
从16年大厂老兵到AGI创业CEO:系统工程思维如何撑起大模型之路

从16年大厂老兵到AGI创业CEO:系统工程思维如何撑起大模型之路

在AI大模型最火热的这几年,行业内最不缺的两种叙事,一种是“某名校天才带着炫目光环拿了多少融资”,另一种是“某大厂高管离职创业、估值一夜翻倍”。相比之下,我更愿意写一种不太会炒作的人:在跨国科技巨头里扎扎实实…

2026/10/20 17:50:44 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →