news 2026/9/8 13:26:21

服务器异常与安全加固:从可疑进程排查到系统防护

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
服务器异常与安全加固:从可疑进程排查到系统防护

半夜,手机连着震了好几下,监控平台推送告警:CPU 使用率 98%,磁盘 IO 接近打满。登录服务器后,top里出现一个名字像系统进程、但路径和启动时间都非常可疑的进程,crontab -l里多了一条从未见过的定时任务,网络连接里还有一个不认识的外部 IP 在频繁通信。

这就是很多后端开发者都遇到过的“服务器恶势力”:不是病毒库里的老木马,而是一类悄悄寄生在生产服务器上的异常进程、定时任务和后门入口。服务器本身不会无缘无故变慢,绝大多数异常背后都有一条清晰的入侵或误操作链路。与其焦虑,不如建立一套标准的排查和加固流程。

这篇文章会从一次典型的服务器异常排查出发,完整拆解:如何定位可疑进程、如何审查网络连接、如何发现定时任务和 SSH 后门、如何安全清理恢复,以及最后如何做系统安全加固。无论你的服务器是阿里云服务器、其他云服务器,还是自建机房里的 Linux 服务器,这套思路都适用。

1. 服务器里的异常现场,到底长什么样

先给“服务器恶势力”做一个定义:所有未经授权的进程、定时任务、用户、文件和网络连接,以及由此引发的 CPU 飙高、磁盘耗尽、带宽异常、登录异常等行为。

从实际运维经验看,最常见的异常现场集中在以下几类:

异常类型典型表现常见原因
异常进程CPU 或内存占用异常高,进程名伪装成系统进程挖矿程序、恶意脚本、被注入的业务进程
异常网络连接服务器主动连接未知 IP,监听额外端口木马回连、反弹 shell、后门服务
异常用户与登录/etc/passwd出现新 UID 0 用户,SSH 登录记录异常弱口令爆破、账号被植入
异常定时任务crontab里出现curlwget下载命令下载木马或挖矿程序
异常文件与二进制系统命令被替换,/tmp目录出现随机命名文件入侵者留下的工具和后门文件

很多开发者发现服务器变慢后,第一反应是重启服务器。这其实不是一个好选择:重启会丢失当前进程、网络连接、临时文件等现场信息,而且如果攻击者设置了开机自启动或定时任务,重启后问题依然会复现。

更稳妥的做法是:先记录现场,再分析问题,最后清理加固。下面每一轮排查都围绕这个原则展开。

2. 动手之前,先确认状态与现场

2.1 远程登录与工具准备

排查服务器异常时,建议优先使用 SSH 登录。如果你平时使用 VSCode 连接 SSH 远程服务器,可以直接在 VSCode 中打开远程终端,方便一边查进程、一边查看日志文件。Windows 用户可以搭配 Windows Terminal 或 PowerShell 使用ssh命令。

排查过程中建议保留当前所有输出,至少记录到本地文件,避免排查到一半丢失证据。可以先把终端输出重定向到一个临时文件:

mkdir -p ~/incident_recovery top -bn1 > ~/incident_recovery/top_$(date +%Y%m%d_%H%M%S).log ss -tnp > ~/incident_recovery/ss_$(date +%Y%m%d_%H%M%S).log

2.2 确认系统时间与运行时长

很多恶意行为会篡改文件时间戳,日志分析也需要时间对齐,所以排查前必须先确认服务器时区是否正确。

date timedatectl status uname -a uptime

如果发现服务器时区和业务所在地区不一致,可以在确认不影响业务的前提下,将时区设置为国内的时间服务器同步的区域,并启用 NTP:

# 查看当前时区 timedatectl list-timezones | grep Shanghai # 如果服务器在业务所在地,通常设置为上海时区 sudo timedatectl set-timezone Asia/Shanghai # 启用 NTP 时间同步 sudo timedatectl set-ntp true

这里有一个容易忽略的细节:服务器时区错误会导致日志时间与真实时间偏差数小时,在追踪攻击行为和判断告警时间点时会非常痛苦。排查的第一步就把时间校准,后面的步骤会轻松很多。

2.3 云服务器先打快照

如果你使用的是云服务器(无论是阿里云服务器、腾讯云还是其他云厂商),在开始排查前,建议先做一个磁盘快照或镜像备份。清理恶意文件是有风险的操作,一旦误删关键配置,快照就是你的回滚保障。对于自建机房服务器,可以提前用tar打包关键配置目录,例如/etc/opt中的业务配置。

3. 第一轮排查:追踪进程与资源消耗

3.1 用 top 和 ps 快速定位可疑进程

登录服务器后,先用top看整体负载和 CPU 占用最高的进程。CPU 飙高是最常见的告警现象,但要注意:高 CPU 不一定代表被入侵,也可能是业务流量增长、慢 SQL、死循环代码或日志刷屏。不能一看到高 CPU 就杀进程,需要先确认进程归属。

# 动态查看进程,按 CPU 排序 top -c # 静态输出当前进程快照,按 CPU 降序 top -bn1 -o %CPU | head -n 30 # 使用 ps 查看完整进程信息 ps aux --sort=-%cpu | head -n 30

关键观察点有三个:PID、启动命令、CPU/MEM 占比。正常情况下,数据库、Java 应用、Web 服务等进程的启动命令都对应实际部署路径;如果看到/tmp目录下的进程、随机字符串命名的进程、或者kworkersystemd名字但执行路径异常,就需要进一步核实。

3.2 深入查看进程的真实路径

只看ps输出的进程名并不够,很多恶意程序会伪装成常见名称。更可靠的方式是查看/proc/<PID>目录下的真实信息:

# 查看进程的可执行文件真实路径 sudo ls -l /proc/<PID>/exe # 查看进程的启动命令和参数 sudo cat /proc/<PID>/cmdline | tr '\0' ' ' # 查看进程的当前工作目录 sudo ls -l /proc/<PID>/cwd # 查看进程打开的端口和文件 sudo ls -l /proc/<PID>/fd

这里有个非常实用的经验:进程名可以伪造,但/proc/<PID>/exe指向的文件路径很难完全伪装。如果发现进程执行文件在/tmp/var/tmp/dev/shm等非正常目录,基本可以判定为恶意或异常程序。

3.3 检查进程打开的文件和端口

确定可疑 PID 后,用lsof查看该进程打开了哪些文件、监听了哪些端口。这是判断恶意程序是否会对外通信的重要一步。

# 查看进程打开的所有文件 sudo lsof -p <PID> # 查看进程的网络连接 sudo lsof -i -p <PID> # 或者直接查看所有 LISTEN 与 ESTABLISHED 状态连接对应的进程 sudo lsof -i -nP | grep -E 'LISTEN|ESTABLISHED'

如果lsof未安装,可以用ssnetstat替代,CentOS 等系统使用yum install lsof,Ubuntu 使用apt install lsof

第一轮排查的结论输出:明确所有高占用进程的 PID、可执行文件路径、启动时间、启动用户、打开的网络端口。如果发现进程执行文件位于/tmp/dev/shm,或者路径与业务部署完全不相关,基本可以进入清除阶段,但先不要动手。

4. 第二轮排查:审查网络连接与可疑通信

4.1 查看所有 TCP 连接

恶意程序往往需要与外部通信,无论是下载恶意负载、回传数据,还是接收指令。检查网络连接是识别“恶势力”最直接的手段。

# 查看所有 TCP 连接,显示进程信息 sudo ss -tnp # 只查看 ESTABLISHED 状态的对外连接 sudo ss -tnp state established # 查看所有监听端口 sudo netstat -lntp

重点关注两类连接:

  • 对外主动连接:服务器主动发起的连接。如果本机是 Web 服务器,理论上对外连接很少;如果存在大量 ESTABLISHED 连接到陌生 IP,需要逐一确认。
  • 额外监听端口:业务明明没有用该端口,却出现监听状态,很可能是后门服务。

4.2 使用 lsof 按端口追溯进程

当发现某个陌生端口正在监听时,用下面的命令找到对应的进程:

# 查看 4444 端口被哪个进程占用 sudo lsof -i :4444 # 或者使用 ss sudo ss -lntp | grep 4444

拿到 PID 后,再回到/proc/<PID>/exe查看可执行文件路径。很多木马监听高位随机端口,等待攻击者连接,这类端口通常具备特征:出现时间点不明、没有对应业务配置、连接源来自异常 IP

4.3 结合 Web 访问日志判断入侵入口

如果服务器上部署了 Nginx、Apache 或 Tomcat,排查网络连接时,还要结合 Web 日志分析。常见情况是 Web 服务被扫描或利用漏洞,随后攻击者上传恶意脚本。

# 查看 Nginx 访问日志中可疑的 POST 请求 sudo grep -iE 'POST|upload|shell|cmd|eval' /var/log/nginx/access.log | tail -n 100 # 查看最近 24 小时访问量最高的来源 IP sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -n 20

Web 服务器安全是整个服务器安全的重要环节:如果业务代码存在文件上传漏洞、SQL 注入或反序列化漏洞,攻击者可能直接通过 Web 应用拿到服务器权限,再植入恶意程序。日志排查要和进程排查配合起来,才能还原完整攻击链。

第二轮排查的结论输出:整理出所有可疑的外部 IP、本地监听端口、对应进程 PID。此时已经具备清理的条件,但在清除前还有一轮重要的检查:定时任务与后门用户。

5. 第三轮排查:定时任务、启动项与 SSH 后门

5.1 检查定时任务

恶意程序为了在重启后复活,通常会写入 crontab。攻击者很擅长把定时任务隐藏到系统目录中,因此排查不能只看当前用户的crontab -l

# 查看当前用户定时任务 crontab -l # 查看 root 用户定时任务 sudo crontab -l -u root # 查看系统级定时任务 sudo cat /etc/crontab sudo ls -la /etc/cron.d/ sudo cat /etc/cron.d/* # 查看周期执行目录 sudo ls -la /etc/cron.hourly/ /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly/

排查要点:是否出现curlwgetbase64bash -c下载并执行脚本的任务;路径是否指向/tmp/var/tmp/dev/shm;执行时间是否每隔几分钟或每半小时运行一次。这类任务往往就是恶意程序“续命”的手段。

以下命令可以快速列出 crontab 中所有包含下载和执行命令的任务:

sudo grep -rE 'curl|wget|base64|nc |/dev/tcp|/tmp/' /var/spool/cron/ /etc/cron* 2>/dev/null

这里要补充一个重要提醒:清理定时任务必须放在杀进程之后,或者至少同时进行。如果先删除恶意文件而保留定时任务,几分钟后任务会重新下载恶意程序;同样,如果先杀进程但没删掉定时任务,进程也会被再次拉起。建议的操作顺序是:先记录所有可疑任务,再统一清理。

5.2 检查 systemd 服务

现代 Linux 发行版中,很多持久化后门会注册成 systemd 服务。查看正在运行的、近期新增的服务:

# 列出所有正在运行的服务 sudo systemctl list-units --type=service --state=running # 查看服务单元的加载路径和启动命令 sudo systemctl cat <service-name> # 查看最近新增的 service 文件 sudo ls -lt /etc/systemd/system/ | head -n 20

如果发现某个服务对应的ExecStart指向/tmp或异常脚本,或者服务名与正常软件完全无关,基本可以确认是恶意服务。清除方式:

sudo systemctl stop <service-name> sudo systemctl disable <service-name> sudo rm -f /etc/systemd/system/<service-name>.service sudo systemctl daemon-reload

5.3 检查启动脚本与 Shell 配置

除 systemd 外,还要检查传统启动脚本和用户 Shell 配置文件。恶意程序可能写入以下文件:

  • /etc/rc.local
  • /etc/profile.d/*.sh
  • /root/.bashrc
  • /root/.bash_profile
  • /root/.ssh/authorized_keys
# 检查 rc.local sudo cat /etc/rc.local # 检查 profile.d 脚本 sudo grep -rE 'curl|wget|base64|/tmp/' /etc/profile.d/ /root/.bashrc /root/.bash_profile 2>/dev/null

5.4 检查 SSH 后门与异常用户

SSH 是服务器最常用的远程管理入口,也是最容易被攻击者利用的通道。重点检查两处:authorized_keys/etc/passwd

# 查看 root 用户是否被添加了未知公钥 sudo cat /root/.ssh/authorized_keys # 查看所有用户的 authorized_keys sudo find /home -name authorized_keys -exec cat {} \; # 查看 UID 为 0 的用户,正常情况只有 root sudo awk -F: '$3==0{print $1":"$3":"$7}' /etc/passwd # 查看最近登录成功的历史记录 sudo last -n 30 # 查看最近登录失败的记录 sudo lastb -n 30 2>/dev/null

如果发现authorized_keys里多了不认识的公钥,要立即删除。如果/etc/passwd中除了 root 之外还有 UID 为 0 的账号,说明攻击者可能已经创建了高权限用户。此时需要记录账号名,然后使用userdel删除并同步检查/etc/shadow中的相关用户。

第三轮排查的结论输出:列出所有可疑定时任务、systemd 服务、启动脚本、异常用户和未授权公钥。这个阶段的排查结果决定了清理清单。

6. 安全清理与恢复:把服务器拿回来

清理恶意程序需要胆大心细。我不建议直接对可疑进程执行kill -9,更不建议盲目删除/tmp下所有文件。推荐的顺序是:先隔离,再终止,最后修复入口

6.1 隔离恶意文件而不是直接删除

在确认恶意文件路径后,先把文件移动到隔离目录,而不是直接删除。这样既能中断执行,又保留后续分析样本。

# 创建隔离目录 sudo mkdir -p /opt/quarantine # 移动可疑文件到隔离目录,保留权限和时间戳 sudo mv /tmp/.X11-unix /opt/quarantine/ sudo mv /usr/lib/tmpfile /opt/quarantine/

移动文件时,尽量保留原始时间戳和权限。如果文件正在被进程占用,可以先终止进程再移动,或者使用chattr +i临时锁定文件,防止恶意程序继续执行。

6.2 终止可疑进程

终止进程时,先用普通终止信号SIGTERM,让程序有机会释放资源;如果无效,再使用SIGKILL

# 先发送 SIGTERM sudo kill <PID> # 5 秒后未退出,再强制终止 sudo kill -9 <PID> # 终止所有名称匹配的进程(谨慎使用,先确认进程列表) sudo pkill -f '/tmp/xxx'

注意:pkill -f会匹配完整命令行,误杀风险较高。生产服务器上建议先用pgrep -af确认要匹配的进程,再执行终止操作。

6.3 清理定时任务与启动项

删除异常定时任务时,建议使用crontab -e编辑并注释掉可疑行,而不是直接删除文件。对于/etc/cron.d/下的可疑文件,可以先用mv移动到隔离目录,观察一段时间再决定是否删除。

6.4 修复 SSH 配置与账号状态

清理完进程和文件后,需要修复可能被攻击者修改过的 SSH 配置:

# 检查 SSH 配置中有无异常项 sudo grep -nE 'PermitRootLogin|PasswordAuthentication|Port|AuthorizedKeysFile|Match' /etc/ssh/sshd_config

如果发现PasswordAuthentication yes且服务器没有配置密钥登录,建议尽快改为no。但要注意:修改 SSH 配置前要确认自己已经配置了公钥登录,否则可能把自己锁在服务器外。

同时,修改受影响账号的密码,撤销可能泄露的 SSH 密钥,清理/root/.ssh/authorized_keys中未授权的公钥。

6.5 修复业务应用的入口漏洞

这是整个清理流程中最关键、也最容易被忽略的一步:找不到入侵入口,清理就只是暂时的。如果服务器是通过 Redis 未授权访问、Nacos 配置中心漏洞、Web 应用文件上传漏洞、Tomcat 弱口令等入口被攻破,那么只清理木马而不修复入口,木马很快会重新出现。

常见的入口检查包括:

  • Redis 是否绑定内网地址并开启 protected-mode,是否设置了强密码;
  • Nginx 配置中的敏感路径是否被访问过;
  • Web 应用是否有文件上传接口,上传目录是否限制执行权限;
  • 数据库、消息队列等中间件是否使用默认弱口令;
  • 服务器是否有未在安全组中登记的多余开放端口。

对于 Web 服务器安全,最有效的手段是:暂停对外服务、对比最近发布的代码版本与服务器上实际运行的代码、检查是否被插入恶意脚本、重新部署后限制上传目录执行权限。这个环节不要急着恢复业务,先确认入口已经封住。

6.6 清理后的验证

清理完成后,等待一段时间再观察服务器状态:

# 查看负载是否回归正常 uptime # 再次查看进程,确认可疑进程消失 ps aux --sort=-%cpu | head -n 20 # 再次查看网络连接 sudo ss -tnp # 再次检查定时任务 crontab -l sudo cat /etc/crontab

如果清理后仍然出现相同进程、相同连接或相同定时任务,说明入口没有被堵住,需要回到第 7 节继续排查,而不是反复杀进程。

7. 系统安全加固:让服务器不再被盯上

清理只是治标,加固才是治本。下面这些步骤是服务器上线前就应该完成的基础安全配置,也是对“服务器运维”和“服务器部署”的基本要求。

7.1 SSH 加固

推荐配置:

# 文件路径:/etc/ssh/sshd_config # 禁止 root 远程登录,使用普通用户 + sudo PermitRootLogin no # 禁止密码登录,只允许密钥登录 PasswordAuthentication no # 修改 SSH 监听端口(可选) Port 22022 # 限制可登录用户 AllowUsers deploy

修改后执行sudo systemctl restart sshd前,建议另开一个 SSH 会话测试能否正常登录,确认无误后再重启,避免配置错误导致无法登录。

7.2 安装并配置 fail2ban

即使启用了密钥登录,服务器仍可能被扫描。fail2ban 可以监控 SSH 登录日志,自动封禁多次失败的来源 IP。

sudo apt install fail2ban -y

配置文件示例/etc/fail2ban/jail.local

[DEFAULT] bantime = 3600 findtime = 600 maxretry = 5 [sshd] enabled = true port = ssh logpath = /var/log/auth.log

如果是 CentOS/RHEL 系统,日志路径通常是/var/log/secure。配置完成后执行sudo systemctl restart fail2ban

7.3 配置防火墙与云安全组

服务器自身防火墙和云服务商安全组需要同时配置,两者是不同层面的防线。安全组相当于云服务器最外层的门禁,防火墙是服务器内部的第二道门。

以 Ubuntu 的 UFW 为例:

sudo ufw allow OpenSSH sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable sudo ufw status

原则是:默认拒绝,按需放行。不要向公网开放大量端口,只开放业务必需的端口,并严格限制 SSH 管理口的来源 IP。

7.4 配置时间同步与系统更新

很多攻击利用的是已公开的漏洞,保持系统更新能有效减少漏洞暴露面。Ubuntu 系统可以启用无人值守安全更新:

sudo apt update sudo apt install -y unattended-upgrades sudo dpkg-reconfigure --priority=low unattended-upgrades

同时确认 NTP 时间同步已经开启:

sudo timedatectl set-ntp true

7.5 最小权限与账号管理

生产环境不建议直接使用 root 运行业务服务。创建专用账号,赋予最小权限:

# 创建部署用户 sudo useradd -m -s /bin/bash deploy # 添加 sudo 权限(仅限部分命令) sudo usermod -aG sudo deploy

对于 Web 目录,建议文件属主为部署用户,运行用户为www-data或专用低权限账号,目录权限控制在 755、文件权限控制在 644,上传目录单独设置为 755 并禁止执行权限。

7.6 针对 Web 服务器安全的专项加固

  • 关闭目录浏览:Nginx 配置中不使用autoindex on
  • 隐藏敏感路径:禁止访问.git.svn.env*.sql等文件;
  • 上传目录设置禁止解析 PHP:在 Nginx conf 中配置location ~ ^/upload/.*\.(php|php5)$ { deny all; }
  • 限制后台管理入口:通过 IP 白名单或关键路径访问控制。

8. 常见问题与排查方法

把排查过程中最常见的现象整理成下表,方便直接对照:

问题现象可能原因排查方式解决方案
CPU 飙高,出现陌生进程挖矿木马或恶意脚本topps auxlsof -p <PID>、查看/proc/<PID>/exe隔离文件、终止进程、清理定时任务、修复入口
crontab出现curl/wget下载任务定时任务后门crontab -lgrep -r curl /var/spool/cron删除任务、清理落盘文件、封堵入口
SSH 登录失败日志暴增密码暴力破解sudo lastb、查看/var/log/auth.log关闭密码登录、启用 fail2ban、改端口
authorized_keys里多出公钥账号被植入后门cat /root/.ssh/authorized_keysfind /home -name authorized_keys删除公钥、修改密码、更换密钥
服务器监听端口多出不认识的服务后门驻留服务ss -lntpsystemctl list-units停止服务、禁用开机启动、删除 service 文件
日志时间与告警时间对不上服务器时区或 NTP 异常datetimedatectl status设置正确时区,启用 NTP 时间同步
清理后问题重复出现入侵入口未封堵检查 Redis、Nacos、Web 漏洞、弱口令修复入口、重部署代码、限制网络访问

这张表的核心价值在于:不同现象要对应到排查路径,而不是头痛医头。CPU 飙高只是结果,原因可能是挖矿、业务异常、日志刷屏;SSH 爆破只是门口敲门声,关键是门后面有没有已经不安全的账号。

9. 最佳实践:把应急响应变成日常运维习惯

9.1 上线前建立安全基线

每次服务器部署前,建议按下面清单过一遍:

  • 系统更新到最新补丁;
  • 关闭密码登录,仅保留密钥登录;
  • 建立非 root 管理账号;
  • 配置防火墙默认拒绝策略;
  • 云服务器安全组只开放业务端口;
  • 修改所有中间件默认口令;
  • 配置 NTP 时间同步与日志集中上报。

如果服务器数量较多,尤其是服务器集群场景,建议用 Ansible 等配置管理工具批量下发安全基线,保持所有服务器配置一致,避免个别服务器成为短板。

9.2 建立日常巡检清单

不需要每天人工登录服务器,但以下指标一定要有监控和告警:

  • CPU、内存、磁盘使用率;
  • 带宽流量和连接数;
  • SSH 登录成功与失败次数;
  • 定时任务文件是否发生变化;
  • Web 访问错误日志中的异常状态码。

云服务器通常自带云监控,直接在控制台配置阈值即可。自建服务器可以使用 Prometheus + Alertmanager,或者简单的 Shell 脚本加定时任务发送告警。

9.3 数据备份与恢复演练

恶意攻击可能导致文件被加密、被删库。重要数据一定要每日备份,备份文件要存储在独立位置,并且定期演练恢复流程。备份不只是“备份了就行”,恢复不了等于没备份。

9.4 提前写好应急响应文档

团队维护的服务器越多,越需要一份离线可查的应急响应文档,包含:标准排查命令、关键文件路径、备份与恢复流程、安全组和防火墙操作入口、云控制台操作说明。不要把紧急处理流程放在某个人的脑子里,文档化之后团队每个人都能按步骤执行,避免慌乱出错。

9.5 临时服务器同样需要防护

很多团队会申请免费云服务器或临时测试机做实验,这类机器往往没有配置安全组,甚至密码就是弱口令,很容易被扫描后植入木马,成为攻击跳板。即使是临时服务器,也建议至少配置密钥登录、关闭密码登录、安全组只放行必要端口。

回到最初的问题:当服务器出现异常时,比“杀一个进程”更重要的事情,是还原攻击路径、堵住入侵入口、完善加固基线。希望下次你的服务器再遭遇“恶势力”时,你已经有一套清晰的排查清单:先记录现场,再看进程与网络,检查任务与后门,清理后验证,加固到日常运维中。这套流程多走几遍,服务器运维的底气就会越来越足。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 13:25:51

视频流行人头部椭圆虚化:从检测到遮罩的隐私保护实战

开头先交代一个背景&#xff1a;我们团队在畅联云平台做视频能力建设&#xff0c;这一期专门处理“路人头部椭圆虚化”。说白了就是在实时视频流里检测每一个入镜的路人&#xff0c;把头部区域用一个椭圆形的模糊遮罩盖住&#xff0c;既保护路人隐私&#xff0c;又不影响监控主…

作者头像 李华
网站建设 2026/9/8 13:25:40

阿里云MaaS平台多人AI世界模型部署与优化实战

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

作者头像 李华
网站建设 2026/9/8 13:25:21

DeepSeek Harness 架构解析:从工具调用到 Agent 开发实践

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

作者头像 李华
网站建设 2026/9/8 13:24:52

Qwen3-27B四卡横评:3090、4090、5090与V100实战对比

先交代一句&#xff1a;标题里的“Qwen3.8-27B”我猜实际指的是谁都能在社区里搜到的Qwen3-27B&#xff0c;可能只是随手多打了个点。下面正文里我用 Qwen3-27B 来写&#xff0c;参数和技术细节都按 Qwen3-27B 这个开放权重的 270 亿参数模型来算&#xff0c;这样对四张卡横评才…

作者头像 李华
网站建设 2026/9/8 13:24:30

从零自制Game Boy游戏:环境搭建、地图碰撞与ROM编译全解析

前阵子整理 Game Boy 相关素材时&#xff0c;突然想到一个很有意思的问题&#xff1a;现在的开发工具、模拟器、社区资料都已经非常成熟&#xff0c;为什么我们还是很少看到有人真正从零做一款 GB 自制游戏&#xff1f;原因倒不是技术门槛太高&#xff0c;而是信息太散。今天这…

作者头像 李华
网站建设 2026/9/8 13:24:20

FPGA以太网通信设计详解:从RGMII到UDP协议栈实现

做到 FPGA 开发的第七个 part&#xff0c;前面基本语法、时序逻辑、状态机、FIFO 这些基础应该都积累得差不多了。这一篇要碰一个大家迟早绕不开的东西&#xff1a;怎么让 FPGA 和电脑通信。串口太慢&#xff0c;PCIE 上手成本又高&#xff0c;其实对绝大多数入门到进阶的板卡场…

作者头像 李华