当前位置: 首页 > news >正文

医学影像系统性能优化与调试技术:深度剖析与实践指南

在这里插入图片描述

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用,熟悉DICOM医学影像及DICOM协议,业余时间自学JavaScript,Vue,qt,python等,具备多种混合语言开发能力。撰写博客分享知识,致力于帮助编程爱好者共同进步。欢迎关注、交流及合作,提供技术支持与解决方案。
技术合作请加本人wx(注明来自csdn):xt20160813

在这里插入图片描述

医学影像系统性能优化与调试技术:深度剖析与实践指南

在医学影像领域,PACS(Picture Archiving and Communication System)系统和DICOM(Digital Imaging and Communications in Medicine)协议是影像数据传输、存储和管理的核心技术。随着医院数字化转型的加速,医学影像数据呈现爆发式增长,单次CT或MRI扫描可产生数百MB甚至GB级数据,高并发请求、存储压力以及系统稳定性成为开发者和运维人员面临的重大挑战。本文将围绕医学影像系统的性能优化与调试,深入探讨高并发处理、存储优化、错误排查及性能测试等关键技术,结合国产操作系统环境,提供详细的实践方法、代码示例和工具使用指南,旨在为开发者构建高效、稳定的医学影像系统提供全面参考。


一、引言:医学影像系统的挑战与优化需求

医学影像系统的核心任务是实现影像数据的快速传输、可靠存储和高效查询。典型的应用场景包括:

  • 高并发传输:多家影像设备(如CT、MRI、DR)同时向PACS服务器上传数据。
  • 海量存储:医院每年产生数十TB影像数据,需兼顾存储成本与访问速度。
  • 复杂调试:DICOM协议的复杂性及跨厂商兼容性问题,导致错误排查困难。
  • 国产化趋势:在国产操作系统(如麒麟、统信)和数据库(如达梦、OceanBase)环境下,需适配本地化工具和技术。

性能优化与调试不仅是技术问题,还直接影响医疗服务的效率和患者体验。例如,影像传输延迟可能导致诊断延误,而存储不足可能引发数据丢失。因此,开发者需要从系统架构、算法优化到工具应用等多个层面入手,构建高性能、高可靠的医学影像系统。

本文将从以下几个方面展开:

  1. 高并发处理:分析网络传输与服务器处理的瓶颈,提供异步I/O、负载均衡等优化方案。
  2. 存储优化:探讨压缩算法、分布式存储和数据清理策略,兼顾性能与成本。
  3. 错误排查:介绍日志分析、协议调试和国产系统工具的使用方法。
  4. 性能测试与监控:构建测试框架,集成国产化监控工具,确保系统持续优化。
  5. 国产化适配:结合麒麟、统信等国产操作系统,分享调试与优化经验。

二、高并发处理:应对海量影像传输

医学影像系统的高并发场景主要体现在DICOM协议的C-Store、C-Find和C-Move等操作中。例如,大型三甲医院可能有数十台影像设备同时向PACS服务器发送数据,每台设备每次传输数百个DICOM文件,数据量从几MB到数GB不等。如何在高负载下确保系统稳定运行,是性能优化的首要任务。

2.1 性能瓶颈分析

高并发场景下的性能瓶颈通常出现在以下环节:

  • 网络传输:DICOM协议基于TCP/IP,网络带宽、延迟和丢包率直接影响传输效率。典型DICOM端口(如4242)可能因连接数过多而阻塞。
  • 服务器处理能力:PACS服务器需解析DICOM文件、验证协议并存储数据,CPU和内存占用较高。
  • 数据库操作:影像元数据的存储和查询(如患者ID、检查日期)可能因索引不当或锁竞争导致延迟。
  • 磁盘I/O:高并发写入可能导致磁盘I/O瓶颈,尤其在机械硬盘环境中。

为量化瓶颈,开发者需进行性能测试。DCMTK工具集中的storescu是模拟高并发的理想工具,可生成多个客户端并发发送DICOM文件。例如:

# 模拟20个并发客户端向PACS服务器(IP: 192.168.1.100,端口: 4242)发送DICOM文件
for i in {1..20}; dostorescu -v -aet CLIENT$i -aec SERVER 192.168.1.100 4242 image.dcm &
done

运行上述脚本后,可通过以下指标评估系统性能:

  • 响应时间:每个C-Store请求的完成时间。
  • 成功率:传输成功的文件比例。
  • 资源占用:使用htoptop监控CPU、内存和网络带宽。

在国产操作系统中,htop是监控资源占用的首选工具,其直观界面显示每个进程的CPU和内存使用情况:

# 安装htop(以麒麟系统为例)
sudo apt-get install htop
# 启动htop
htop

此外,可用ss检查DICOM服务端口的连接状态:

# 检查4242端口的监听状态和活跃连接
ss -tuln | grep 4242
ss -tunap | grep 4242

2.2 优化策略

针对上述瓶颈,可从以下几个方面优化高并发性能:

2.2.1 异步I/O模型

传统阻塞I/O模型在高并发场景下效率低下,因为每个DICOM连接占用一个线程,线程切换开销大。异步I/O模型(如libevent、epoll或io_uring)通过事件驱动机制显著提升性能。例如,使用C++和libevent开发DICOM服务器的伪代码如下:

#include <event2/event.h>
#include <event2/listener.h>
#include <iostream>void on_accept(evconnlistener *listener, evutil_socket_t fd, struct sockaddr *addr, int len, void *ctx) {std::cout << "New DICOM connection accepted" << std::endl;// 处理DICOM协议逻辑
}int main() {struct event_base *base = event_base_new();struct sockaddr_in sin = {0};sin.sin_family = AF_INET;sin.sin_port = htons(4242);sin.sin_addr.s_addr = INADDR_ANY;struct evconnlistener *listener = evconnlistener_new_bind(base, on_accept, nullptr, LEV_OPT_REUSEABLE | LEV_OPT_CLOSE_ON_FREE, -1,(struct sockaddr*)&sin, sizeof(sin));if (!listener) {std::cerr << "Failed to create listener" << std::endl;return 1;}event_base_dispatch(base);evconnlistener_free(listener);event_base_free(base);return 0;
}

此代码利用libevent监听DICOM端口(4242),异步处理客户端连接,适用于高并发场景。

在国产系统中,需确保libevent库的兼容性。麒麟和统信系统通常预装libevent,可通过以下命令检查:

# 检查libevent版本
dpkg -l | grep libevent
2.2.2 连接池管理

为避免服务器资源耗尽,需限制并发连接数。例如,可在PACS服务器配置文件中设置最大连接数为100:

# 示例:PACS服务器配置文件
[max_connections]
value = 100

当连接数超限时,服务器应返回DICOM协议的“Association Rejected”响应,提示客户端稍后重试。

2.2.3 负载均衡

在超大规模场景下,单台PACS服务器可能无法应对所有请求。推荐部署多台服务器,通过Nginx或HAProxy实现负载均衡。例如,配置Nginx分发DICOM请求:

upstream pacs_servers {server 192.168.1.101:4242;server 192.168.1.102:4242;server 192.168.1.103:4242;
}server {listen 4242;location / {proxy_pass http://pacs_servers;proxy_set_header Host $host;}
}

此配置将DICOM请求均匀分发到三台PACS服务器,提升系统吞吐量。

2.2.4 网络优化
  • 增大TCP缓冲区:调整系统参数,增加TCP发送和接收缓冲区大小:
# 修改/etc/sysctl.conf
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# 应用更改
sysctl -p
  • 启用TCP Fast Open:减少连接建立时间:
# 启用TCP Fast Open
echo 3 > /proc/sys/net/ipv4/tcp_fastopen
  • MTU优化:根据网络环境调整MTU大小,避免分片:
# 检查MTU
ip link show eth0
# 设置MTU为1500
ip link set eth0 mtu 1500
2.2.5 国产系统监控

在麒麟或统信系统中,除htop外,还可使用nmon进行全面性能监控:

# 安装nmon
sudo apt-get install nmon
# 启动nmon
nmon

nmon提供CPU、内存、网络和磁盘I/O的实时数据,适合高并发场景下的性能分析。

通过上述优化,医学影像系统可显著提升并发处理能力。例如,某三甲医院通过异步I/O和负载均衡,将C-Store请求的平均响应时间从500ms降低到100ms,成功率从95%提升到99.9%。


三、存储优化:高效管理影像数据

医学影像数据的存储需求呈现两大特点:数据量大访问模式多样。例如,CT影像需快速访问以支持急诊诊断,而历史影像可能仅用于归档查询。存储优化需兼顾性能、成本和可靠性。

3.1 数据压缩

DIC Gage 2000和JPEG-LS。开发者应根据影像用途选择合适的压缩策略:

  • 无损压缩:适用于诊断级影像,保留所有细节,压缩比通常为2:1至3:1。
  • 有损压缩:适用于预览或归档影像,压缩比可达10:1以上,但需评估图像质量。

DCMTK提供了丰富的压缩工具。例如,使用dcmj2pnm将DICOM文件转换为JPEG 2000格式:

# 无损压缩
dcmj2pnm --write-jpeg2000-lossless image.dcm output.jp2
# 有损压缩(质量因子50)
dcmj2pnm --write-jpeg2000 --quality 50 image.dcm output.jp2

为自动化压缩历史影像,可开发Python脚本结合pydicom库:

import os
from pydicom import dcmread
from subprocess import calldef compress_dicom(input_dir, output_dir, lossless=True):for root, _, files in os.walk(input_dir):for file in files:if file.endswith(".dcm"):input_path = os.path.join(root, file)output_path = os.path.join(output_dir, file.replace(".dcm", ".jp2"))cmd = ["dcmj2pnm","--write-jpeg2000-lossless" if lossless else "--write-jpeg2000",input_path,output_path]if not lossless:cmd.insert(2, "--quality")cmd.insert(3, "50")call(cmd)print(f"Compressed {file}")# 示例:压缩指定目录下的DICOM文件
compress_dicom("/data/dicom", "/data/compressed", lossless=True)

此脚本可批量处理影像,适合归档任务。

3.2 分布式存储

为应对数据增长,分布式存储是必然选择。常见的架构包括:

  • 对象存储:如阿里云OSS、腾讯云COS或Ceph,适合存储冷数据(不常访问的影像)。Ceph支持POSIX接口,易于集成到PACS系统:
# 部署Ceph对象存储(简要步骤)
sudo apt-get install ceph
ceph-deploy new mon1
ceph-deploy mon create-initial
ceph-deploy osd create --data /dev/sdb mon1
  • 分布式文件系统:如HDFS或GlusterFS,适合高吞吐场景。HDFS的配置示例:
<!-- hdfs-site.xml -->
<configuration><property><name>dfs.replication</name><value>3</value></property><property><name>dfs.namenode.name.dir</name><value>/data/hdfs/namenode</value></property>
</configuration>
  • 数据库优化:影像元数据(如患者ID、检查时间)需存储在高性能数据库中。推荐使用PostgreSQL或MongoDB,并为常用字段(如StudyInstanceUID)创建索引:
-- PostgreSQL:创建索引
CREATE INDEX idx_study_uid ON dicom_studies (StudyInstanceUID);

在国产系统中,需验证存储设备的兼容性。例如,检查Ceph是否支持麒麟系统的内核版本:

# 检查内核版本
uname -r
# 检查Ceph版本
ceph --version

3.3 数据清理策略

为降低存储成本,需定期清理过期影像。医院通常遵循7年归档政策,可基于DICOM标签(如StudyDate)开发清理脚本:

import os
from pydicom import dcmread
from datetime import datetimedef clean_old_studies(folder, years=7):for root, _, files in os.walk(folder):for file in files:if file.endswith(".dcm"):ds = dcmread(os.path.join(root, file))study_date = ds.get("StudyDate")if study_date:study_year = int(study_date[:4])if datetime.now().year - study_year > years:os.remove(os.path.join(root, file))print(f"Deleted {file}")else:print(f"Skipping {file}: No StudyDate")# 示例:清理超过7年的影像
clean_old_studies("/data/dicom")

为避免误删,建议先备份数据并记录清理日志:

import logginglogging.basicConfig(filename="clean.log", level=logging.INFO)def clean_old_studies(folder, years=7):for root, _, files in os.walk(folder):for file in files:if file.endswith(".dcm"):ds = dcmread(os.path.join(root, file))study_date = ds.get("StudyDate")if study_date:study_year = int(study_date[:4])if datetime.now().year - study_year > years:os.remove(os.path.join(root, file))logging.info(f"Deleted {file}")else:logging.warning(f"Skipping {file}: No StudyDate")

3.4 存储性能监控

在国产系统中,可使用以下工具监控存储性能:

  • df:检查磁盘使用率:
df -h
  • iostat:监控磁盘I/O:
iostat -x 1
  • iotop:实时查看进程的I/O占用:
sudo iotop

通过压缩、分布式存储和数据清理,某医院将影像存储成本降低30%,同时将查询延迟从500ms降至100ms。


四、错误排查:日志分析与协议调试

医学影像系统的复杂性使得错误排查成为开发和运维的重点。常见问题包括:

  • 网络中断:导致C-Store失败。
  • 协议不兼容:不同厂商的DICOM实现差异。
  • 数据损坏:DICOM文件格式错误或存储故障。

4.1 日志配置与分析

DCMTK提供了灵活的日志系统,支持TRACE、DEBUG、INFO、WARN、ERROR和FATAL六个级别。开发者可通过环境变量或配置文件设置日志级别。例如:

# 设置DEBUG级别,输出详细协议信息
export DCMDICTPATH=/usr/share/dcmtk/dicom.dic
export DCM_LOG_LEVEL=DEBUG
storescu -v -aet CLIENT -aec SERVER 192.168.1.100 4242 image.dcm > debug.log 2>&1

生成的debug.log包含DICOM协议的协商细节、错误码等信息。可用grep提取关键错误:

# 提取协议错误
grep "ERROR" debug.log
# 提取特定错误码(如A-ASSOCIATE-RJ)
grep "A-ASSOCIATE-RJ" debug.log

在国产系统中,journalctl是查看系统级日志的首选工具。例如,排查PACS服务异常:

# 查看PACS服务日志
journalctl -u pacs.service -b
# 实时跟踪日志
journalctl -u pacs.service -f

为便于分析,可将日志输出到ELK Stack(Elasticsearch、Logstash、Kibana)进行可视化:

# Logstash配置文件:logstash.conf
input {file {path => "/var/log/pacs/debug.log"start_position => "beginning"}
}
output {elasticsearch {hosts => ["localhost:9200"]index => "pacs_logs"}
}

在Kibana中,可创建仪表板展示错误分布和趋势。

4.2 协议调试

DICOM协议问题通常与以下因素相关:

  • AE Title不匹配:客户端和服务端的AE Title配置错误。
  • SOP Class不支持:服务器不支持客户端请求的SOP Class。
  • Transfer Syntax不兼容:客户端和服务端协商失败。

可用tcpdump捕获网络数据包,分析协议细节:

# 捕获4242端口的DICOM流量
tcpdump -i eth0 port 4242 -w dicom.pcap

随后,使用Wireshark打开dicom.pcap,检查DICOM协议的PDU结构。例如,A-ASSOCIATE-RQ包包含AE Title和Transfer Syntax信息,A-ASSOCIATE-RJ包指示拒绝原因。

为简化调试,可使用DCMTK的echoscu测试服务器连通性:

# 测试PACS服务器是否响应
echoscu -v -aet CLIENT -aec SERVER 192.168.1.100 4242

4.3 国产系统调试工具

在麒麟或统信系统中,以下工具对错误排查尤为有效:

  • strace:跟踪系统调用,定位文件I/O或网络问题:
# 跟踪PACS服务进程(假设PID为1234)
strace -p 1234 -o strace.log
# 分析strace日志,查找错误
grep "errno" strace.log
  • lsof:检查进程打开的文件和端口:
# 查看PACS服务(PID为1234)的端口占用
lsof -p 1234 -a -i
  • perf:分析性能瓶颈:
# 采集PACS服务的性能数据
perf record -p 1234
# 生成报告
perf report

通过日志分析和协议调试,某医院成功定位了因Transfer Syntax不兼容导致的C-Store失败问题,将传输成功率提升至99.8%。


五、性能测试与监控

性能优化是一个持续迭代的过程。开发者需建立性能测试框架,定期评估系统表现,并通过监控工具实时跟踪关键指标。

5.1 性能测试方法

5.1.1 压力测试

使用storescu模拟高并发,记录响应时间和成功率:

# 模拟50个并发客户端
for i in {1..50}; dostorescu -v -aet CLIENT$i -aec SERVER 192.168.1.100 4242 image.dcm &
done

可用Python脚本统计测试结果:

import re
from glob import globdef analyze_storescu_logs(log_dir):total_requests = 0successes = 0response_times = []for log_file in glob(f"{log_dir}/*.log"):with open(log_file) as f:content = f.read()total_requests += len(re.findall(r"C-Store RQ", content))successes += len(re.findall(r"C-Store RSP.*Status: Success", content))times = re.findall(r"Completed in (\d+\.\d+) seconds", content)response_times.extend(float(t) for t in times)success_rate = (successes / total_requests) * 100 if total_requests > 0 else 0avg_response_time = sum(response_times) / len(response_times) if response_times else 0print(f"Total Requests: {total_requests}")print(f"Success Rate: {success_rate:.2f}%")print(f"Average Response Time: {avg_response_time:.2f} seconds")# 示例:分析日志目录
analyze_storescu_logs("/var/log/storescu")
5.1.2 容量测试

逐步增加影像数据量,观察存储和查询性能。例如,批量上传10TB影像,记录数据库查询延迟:

-- PostgreSQL:测试查询性能
EXPLAIN ANALYZE SELECT * FROM dicom_studies WHERE StudyInstanceUID = '1.2.3.4';
5.1.3 故障测试

模拟网络中断或服务器宕机,验证系统恢复能力。例如,临时关闭PACS服务端口:

# 关闭4242端口
iptables -A INPUT -p tcp --dport 4242 -j DROP
# 恢复端口
iptables -D INPUT -p tcp --dport 4242 -j DROP

5.2 性能监控

关键性能指标包括:

  • 传输速度:DICOM文件上传/下载的平均速度(MB/s)。
  • 查询延迟:影像元数据的检索时间(ms)。
  • 错误率:C-Store或C-Find请求的失败比例。

在国产系统中,可集成Prometheus和Grafana进行实时监控。Prometheus采集PACS服务的指标(如HTTP接口的响应时间),Grafana展示趋势图。配置示例:

# prometheus.yml
scrape_configs:- job_name: 'pacs'static_configs:- targets: ['192.168.1.100:9100']

在PACS服务中,需暴露Prometheus指标端点。例如,使用Python和prometheus_client库:

from prometheus_client import start_http_server, Summary
import time# 定义指标
REQUEST_TIME = Summary('pacs_request_processing_seconds', 'Time spent processing requests')@REQUEST_TIME.time()
def process_dicom_request():# 模拟DICOM请求处理time.sleep(0.1)if __name__ == '__main__':# 启动Prometheus HTTP服务器start_http_server(9100)while True:process_dicom_request()

5.3 国产化监控工具

在麒麟系统中,推荐使用ksar分析系统性能:

# 安装ksar
sudo apt-get install ksar
# 采集sar数据
sar -A > sar_data.txt
# 使用ksar可视化
ksar -input sar_data.txt

通过性能测试和监控,某医院将系统可用性从99%提升到99.9%,显著降低了故障响应时间。


六、国产化适配:麒麟与统信环境下的优化

随着国产化政策的推进,医学影像系统需适配麒麟、统信等操作系统。这些系统在内核、库依赖和工具链方面与传统Linux发行版存在差异,开发者需特别注意以下方面:

6.1 兼容性验证

  • DCMTK编译:确保DCMTK在国产系统上编译正常。麒麟系统可能缺少某些依赖,需手动安装:
# 安装依赖
sudo apt-get install build-essential libpng-dev libjpeg-dev libxml2-dev
# 编译DCMTK
cd dcmtk-3.6.7
./configure --prefix=/usr/local
make && sudo make install
  • 数据库适配:验证PostgreSQL或达梦数据库的兼容性。例如,达梦数据库的安装:
# 安装达梦(以DM8为例)
tar -zxvf dm8_setup.tar.gz
cd dm8
./install.sh

6.2 性能调优

  • 内核参数:调整文件描述符限制和网络参数:
# 修改/etc/sysctl.conf
fs.file-max = 2097152
net.core.somaxconn = 65535
# 应用更改
sysctl -p
  • NUMA优化:在多核服务器上,启用NUMA(Non-Uniform Memory Access)优化:
# 检查NUMA状态
numactl --hardware
# 绑定PACS服务到特定NUMA节点
numactl --cpunodebind=0 --membind=0 /usr/local/bin/pacs

6.3 调试工具

htopstrace外,麒麟系统支持gstackpmap

  • gstack:查看进程的堆栈信息:
gstack 1234 > stack.txt
  • pmap:分析进程的内存映射:
pmap -x 1234

通过适配国产系统,某医院成功将PACS系统迁移到麒麟环境,性能与CentOS环境相当,满足国产化合规要求。


七、未来展望:AI与国产化的融合

未来,医学影像系统的优化将与AI技术和国产化趋势深度融合:

  • AI驱动的压缩:利用深度学习算法(如变分自编码器)实现更高压缩比,同时保持诊断质量。
  • 智能错误检测:通过机器学习分析日志,自动定位协议或数据错误。
  • 国产化生态:随着鲲鹏、飞腾等国产芯片的普及,需优化PACS系统在ARM架构上的性能。

例如,使用TensorFlow开发影像压缩模型:

import tensorflow as tf
from tensorflow.keras import layersdef build_autoencoder():model = tf.keras.Sequential([layers.Input(shape=(512, 512, 1)),layers.Conv2D(32, (3, 3), activation='relu', padding='same'),layers.MaxPooling2D((2, 2), padding='same'),layers.Conv2D(16, (3, 3), activation='relu', padding='same'),layers.MaxPooling2D((2, 2), padding='same'),layers.Conv2D(16, (3, 3), activation='relu', padding='same'),layers.UpSampling2D((2, 2)),layers.Conv2D(32, (3, 3), activation='relu', padding='same'),layers.UpSampling2D((2, 2)),layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same')])return model# 训练模型
autoencoder = build_autoencoder()
autoencoder.compile(optimizer='adam', loss='mse')
# 假设image_data为DICOM影像数据
autoencoder.fit(image_data, image_data, epochs=50, batch_size=32)

八、总结

医学影像系统的性能优化与调试是一项复杂而系统的工程,涵盖高并发处理、存储优化、错误排查和性能测试等多个维度。通过合理使用DCMTK工具、日志分析和国产系统调试工具(如htop、strace),开发者可显著提升系统性能和稳定性。在国产化背景下,适配麒麟、统信等操作系统,结合Prometheus、Grafana等监控工具,构建高性能、高可靠的PACS系统,不仅满足医院需求,还符合政策要求。

未来,随着AI技术的深入应用和国产化生态的完善,医学影像系统将迎来更多创新机遇。开发者应持续关注新技术动态,结合实际场景,推动系统向智能化、自主化方向发展。


参考文献

  1. DCMTK官方文档:https://dcmtk.org/
  2. DICOM标准:https://www.dicomstandard.org/
  3. Linux性能监控工具:https://man7.org/linux/man-pages/
  4. Ceph官方文档:https://docs.ceph.com/
  5. Prometheus官方文档:https://prometheus.io/

(注:本文仅供学习参考,技术交流,创作不易,希望能得到您的关注与支持。)

相关文章:

  • sqli-labs靶场29-31关(http参数污染)
  • maven和npm区别是什么
  • CVPR2025 | 首个多光谱无人机单目标跟踪大规模数据集与统一框架, 数据可直接下载
  • 中文分词与数据可视化02
  • k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标
  • mac中加载C++动态库文件
  • 6 任务路由与负载均衡
  • Linux进程信号(一)之信号的入门
  • Redis + ABP vNext 构建分布式高可用缓存架构
  • flutter缓存网络视频到本地,可离线观看
  • RabbitMQ ④-持久化 || 死信队列 || 延迟队列 || 事务
  • 排序算法之基础排序:冒泡,选择,插入排序详解
  • LabVIEW光谱检测系统
  • Ubuntu快速安装Python3.11及多版本管理
  • 提权脚本Powerup命令备忘单
  • Ubuntu系统安装VsCode
  • 2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛) | 珂学家
  • 牛客网NC22000:数字反转之-三位数
  • python打卡训练营Day27
  • Pywinauto:轻松实现Windows桌面自动化实战
  • 美联储官员:美国经济增速可能放缓,现行关税政策仍将导致物价上涨
  • 福州一宋代古墓被指沦为露天厕所,仓山区博物馆:已设置围挡
  • 查幽门螺杆菌的这款同位素长期被海外垄断,秦山核电站实现突破
  • 【社论】城市更新,始终以人为核心
  • 澎湃·镜相第二届非虚构写作大赛初选入围名单公示
  • 陕西宁强县委书记李宽任汉中市副市长