简介这是 OpenBLAS 在 Windows 平台下的完整安装包面向需要在 Windows 环境使用高性能线性代数库的开发者、科研与数据分析人员。OpenBLAS 专注提供 BLAS 与 LAPACK 实现借助多核并行与硬件微调显著加速科学计算与矩阵运算包内同时包含预编译组件与源码方便用户在掌握编译配置的前提下按需定制优化。包体共 2000 个文件以 c、f、s 三类核心源码为主覆盖不同架构的汇编优化 kernel 与 Fortran 接口另含 Makefile、h、cmake、py 及多份架构相关文件压缩包总大小约 23.15 MB。资源目前已有 2216 人学习下载。对希望优化 NumPy、RcppArmadillo 等科学计算工具底层运算性能的用户而言这一安装包提供了从构建到接入的具体基础以 eebc189 标记的版本快照也便于对照仓库查看演进记录。1. 在 Windows 上装 OpenBLAS为什么底层线性代数库值得你先确认一下在 Windows 上做科学计算或数据处理很多人会遇到同一个尴尬跑矩阵运算时 CPU 占用率只有一核耗时数字难看得让人怀疑电脑配置。OpenBLAS 的 window 安装包就是为这个场景准备的。它是一个高性能 BLAS 实现的动态库装上之后numpy、scipy 这些 Python 包以及你手写的 C/C 代码里的矩阵乘法、线性方程组求解都会走多线程和 SIMD 优化路径。适合读这篇内容的人有两类一类是 Python 用户想确认 numpy 底层真的在用 OpenBLAS 而不是默认参考实现另一类是 C/C 开发者要在 Windows 上给项目链接一套可靠的 BLAS还想知道配置、验证和排错的门道。下面从选安装路线开始。2. 先选安装路线Windows 下获取 OpenBLAS 的三条路径搜“OpenBLAS 的 window 安装包”的人最后基本都会落到三个选择上官方预编译 zip、MSYS2 包管理器、源码自己编。三者不矛盾但选错会浪费大量时间。我按“省事程度”排序讲清楚每条路线适合谁以及选型时最容易忽略的坑。2.1 官方预编译包看懂文件名和解压目录OpenBLAS 的官方 releases 页面里每个版本会挂一批附件。免安装的 zip 包是首选命名格式一般是openblas-版本号-x64.zip。有些人第一次下载时看到还有个.exe安装向导顺手就点了装完也不知道文件到底去了哪里。zip 包的好处是目录透明所有文件都在你解压出来的文件夹里想删就删不会被注册表和系统目录污染。文件名里的x64是架构对应 64 位程序x86是 32 位版本现在只有老项目才需要。部分发布会在包名里标msvc或者mingw这代表编译工具链。我自己处理过的项目里MSVC 编的程序链接 MinGW 版库编译能过但运行时报缺libgfortran-3.dll之类的问题非常费时间。所以选包之前先确认自己项目的编译工具链。下载后解压到比如D:\libs\openblas目录结构主要分三块目录关键文件作用binlibopenblas.dll程序运行时加载的动态库必须在搜索路径里liblibopenblas.lib、libopenblas.dll.a链接阶段使用的导入库按工具链选对应文件includecblas.h、openblas_config.hC 接口声明和编译期宏定义bin下的 DLL 是整个安装包的核心后续所有“找不到 DLL”的报错都和它有关。include里的头文件只有在你写 C/C 程序时才需要Python 用户一般不接触。还需要说明一点lib目录里经常同时存在.lib和.dll.a前者给 MSVC 链接器用后者给 MinGW 的 gcc 用选错会出现“无法解析的外部符号”。把bin目录加进系统 PATH 这一步建议在图形界面里做右键“此电脑”选属性进入高级系统设置里的环境变量面板在用户的Path变量末尾追加D:\libs\openblas\bin确定后重新打开终端才会生效。在 PowerShell 里临时设置虽然快但只对当前会话有效写代码测试时容易误判环境已经配置好。2.2 MSYS2 包管理器一条命令装完所有依赖如果你的开发环境本来就用 MSYS2那么完全不需要手动下载 zip。MSYS2 的软件源里维护了 OpenBLAS 的预编译包一条命令就能完成安装pacman -S mingw-w64-x86_64-openblas这条命令的逻辑很简单pacman -S表示安装指定包包名分为三段mingw-w64-x86_64-指用 MinGW-w64 工具链针对 64 位架构编译openblas是软件名。装完之后头文件在/mingw64/include动态库在/mingw64/bin导入库在/mingw64/lib。MSYS2 的 shell 启动时会把/mingw64/bin自动放入 PATH所以你在 MSYS2 终端里编译运行不需要额外配置。gcc -o test test.c -lopenblas-lopenblas让 gcc 在默认库路径里找 OpenBLAS这里能编译通过说明库已经就位。这条路线的主要限制是部署。编译出来的 exe 拿到一台没装 MSYS2 的机器上还是会报缺少 DLL。所以我的习惯是在 MSYS2 里做开发验证没问题交付时把mingw64/bin下的libopenblas.dll和它依赖的 GCC 运行时 dll 一起复制到 exe 同目录。这样目标机器上连 PATH 都不用改。补充一点如果你习惯用 Cygwin也可以用它的包管理器装类似包但 Cygwin 环境下的 DLL 依赖关系更复杂与 Windows 原生程序的互操作也差一些非必需不建议用。2.3 源码自己编哪些情况真的值得走这条路自己编译 OpenBLAS 的动机就三种要修改线程模型、要为特定 CPU 开指令集优化、要做静态链接。比如你需要一个完全不依赖 DLL 的 exe或者要在老旧 CPU 上找到兼容性和性能的平衡点预编译包就帮不上忙了。在 Windows 上源码编译最常见的方式是装一个 MinGW-w64 安装包这里可以直接复用 MSYS2 来装。编译前先确认环境里有没有gcc和make如果没有用pacman -S mingw-w64-x86_64-gcc make装上。还需要perlOpenBLAS 的构建脚本依赖它生成部分配置文件缺了会在早期报错make TARGETHASWELL HOSTCCgcc CCgcc BINARY64 USE_THREAD1 make install PREFIXD:/openblas-custom第一行是核心编译命令。TARGETHASWELL告诉编译器按 Intel Haswell 微架构生成优化代码如果你的 CPU 是更新的架构可以换成SKYLAKE、ZEN2这类代号HOSTCC和CC都指定为gcc避免混用工具链BINARY64生成 64 位库USE_THREAD1开启 pthread 多线程。第二行把产物安装到D:/openblas-custom编译过程大概十到二十分钟主要看 CPU 性能。自己编译的第一个翻车点往往是目标架构写错。你可以在 Intel 的官方文档里查微架构代号也可以保守一点用TARGETGENERIC损失部分指令集优化但保证兼容。第二个常见问题是编译到一半报缺少头文件或者找不到perl这在前面已经提到属于环境依赖没装齐。第三个问题是项目和 OpenBLAS 用了不同的编译器编出来的静态库和你的链接器不兼容后面第 5 章会具体讲。如果你已经装了 CMake也可以走 CMake 路线cmake -B build -DCMAKE_INSTALL_PREFIXD:/openblas-custom cmake --build build --config Release cmake --install buildCMake 路线的好处是能直接用 Visual Studio 的生成器编出 MSVC 版本的库适合不想碰 MinGW 工具链的开发者。缺点是需要额外处理架构选项容易在CMAKE_SYSTEM_NAME这类参数上纠结第一次用建议还是走 make 路线。3. 从下载到跑通安装 OpenBLAS 并完成第一次矩阵计算选完路线之后重点就转到“怎么装、怎么验证、怎么调”。这一章我按官方 zip 包走完整流程因为这是覆盖人群最广的方式MSYS2 用户跳过 3.1 的 PATH 配置步骤即可。3.1 解压、配路径、验证文件完整下载openblas-版本号-x64.zip后解压到D:\libs\openblas。然后打开 PowerShell先做一次临时环境变量设置用来验证安装包本身没问题$env:Path D:\libs\openblas\bin; $env:Path这行命令把 OpenBLAS 的 bin 目录拼到当前进程的 PATH 前面只影响当前终端窗口。接着检查 DLL 文件的基本信息(Get-Item D:\libs\openblas\bin\libopenblas.dll).VersionInfo | Select-Object FileVersion, FileSize正常输出会给出类似0.3.2x的版本号和几十 MB 的文件大小。如果文件读取不到版本信息或者文件大小只有几 MB多半是下载中断或者来源不正规直接删掉重新下。这块很多人会跳过我建议不要省因为它能在五分钟内排除掉“库没装好”这个最大的不确定性。临时 PATH 只在当前终端有效重启之后消失。要让所有程序都找到 DLL需要在系统环境变量面板里把D:\libs\openblas\bin加到 Path。注意加完以后要重开终端和 IDE它们启动时读取的是旧的环境变量。3.2 C 语言最小示例一个 dgemm 跑通整个链路为了确认 OpenBLAS 真的在工作写一个最小 C 程序调用cblas_dgemm做矩阵乘法。这个函数名看着吓人其实就是 double 精度的通用矩阵乘公式是C alpha * A * B beta * C。示例里矩阵都是 2x2方便手算验证结果。#include stdio.h #include cblas.h int main() { double A[4] {1.0, 2.0, 3.0, 4.0}; double B[4] {5.0, 6.0, 7.0, 8.0}; double C[4] {0.0, 0.0, 0.0, 0.0}; cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 2, 2, 2, 1.0, A, 2, B, 2, 0.0, C, 2); printf(C [%f, %f; %f, %f]\n, C[0], C[1], C[2], C[3]); return 0; }手动算一下C[0] 1*5 2*7 19C[1] 1*6 2*8 22第二行对应43和50。程序打印出这组数说明接口调用和数据布局都对。参数里CblasRowMajor表示行主序存储这是 C 语言的默认内存布局CblasNoTrans表示矩阵不做转置中间的三个2是矩阵的行数、列数和内维alpha、beta分别是 1.0 和 0.0后者意味着结果不叠加旧值直接覆盖 C。在 MinGW-w64 环境里编译gcc -o matrix_test matrix_test.c -I D:/libs/openblas/include -L D:/libs/openblas/lib -lopenblas-I指向头文件目录-L指向库文件目录-lopenblas让链接器在指定目录下搜索 OpenBLAS 导入库。编译通过后运行./matrix_test终端输出上面算出的四个数。如果你在这一步看到“找不到 libopenblas.dll”的弹窗回到 3.1 确认 PATH 配置或者直接把 DLL 复制到 exe 旁边。3.3 Python 环境确认 numpy 底层真的用了 OpenBLAS不少 Windows 用户是通过 numpy 间接接触到 OpenBLAS 的。官方发布的 numpy wheel 默认捆绑了 OpenBLAS所以很多人装完 numpy 不需要单独处理这个库。但“默认捆绑”不等于每个环境都如此尤其是用过 Anaconda、手动装过其他数值库的人底层 BLAS 实现可能已经变成了 MKL 或者默认参考实现。用一段 Python 代码直接看当前环境的编译配置import numpy as np np.__config__.show()输出会比较长关注和 BLAS 相关的段落。如果出现openblas关键字以及类似libraries [openblas, openblas]的记录说明 numpy 确实链接了 OpenBLAS。如果显示的是mkl或者空白说明你用的不是 OpenBLAS。还有第三行提示符下看不到的情况可以换个命令import numpy as np blas_info np.__config__.blas_opt_info print(blas_info.get(libraries, []))打印结果里只要含openblas结论就清楚了。这里要区分一种常见误会np.__config__.show()显示的 BLAS 信息属于 Python 层面的 numpy 模块不是系统里随便一个 OpenBLAS DLL。即便你系统 PATH 里没有 OpenBLAS自带的 wheel 依然能用因为它把 DLL 放在了 numpy 自己的包目录下。4. 性能验证与线程配置让 OpenBLAS 真正把 CPU 用满装好只是第一步。第 3 章的示例能跑通只能说明接口通了不能说明性能到位。这一章解决两个问题怎么确认多线程真的生效以及线程参数怎么设才合适。4.1 跑一次基准测试别用“感觉”判断快慢判断 OpenBLAS 装得好不好最直接的办法是跑一个带计时的矩阵乘法基准。用 C 写一个简单的循环对比不同矩阵规模下的耗时#include stdio.h #include stdlib.h #include time.h #include cblas.h static double now_ms() { struct timespec ts; clock_gettime(CLOCK_MONOTONIC, ts); return ts.tv_sec * 1000.0 ts.tv_nsec / 1e6; } void bench(int n) { double *A malloc(n * n * sizeof(double)); double *B malloc(n * n * sizeof(double)); double *C malloc(n * n * sizeof(double)); for (int i 0; i n * n; i) { A[i] rand() / (double)RAND_MAX; B[i] rand() / (double)RAND_MAX; C[i] 0.0; } double start now_ms(); cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, n, n, n, 1.0, A, n, B, n, 0.0, C, n); double elapsed now_ms() - start; printf(n%d: %.2f ms\n, n, elapsed); free(A); free(B); free(C); } int main() { bench(512); bench(1024); bench(2048); return 0; }在 MinGW-w64 下编译时记得加-O2链接方式和 3.2 一样。这里用clock_gettime的单调时钟计时而不是clock()因为clock()在多线程下统计的是 CPU 累计时间会把并行耗时算成好几倍结论完全失真。这是我在实测里踩过的坑。时间线的预期在 i5 或 R5 级别的现代 CPU 上512 维矩阵乘法应该在个位数毫秒2048 维在几十毫秒量级。如果你跑出来是几百毫秒甚至几秒先检查是不是根本没有开多线程再检查OPENBLAS_NUM_THREADS是否被设成了 1。作为对照用三重循环写同样的矩阵乘法2048 维耗时通常是 OpenBLAS 的几十倍这个差距能直观感受到优化库的价值。4.2 线程数配置OPENBLAS_NUM_THREADS 和 OMP_NUM_THREADSOpenBLAS 的多线程参数在 Windows 上通过环境变量控制核心是OPENBLAS_NUM_THREADS$env:OPENBLAS_NUM_THREADS 8设为 8 之后OpenBLAS 会创建一个最多 8 线程的线程池。线程数不是越大越好物理核心数通常就是最佳上限。超线程带来的逻辑核心对 BLAS 的浮点密集计算帮助有限设成逻辑线程数反而可能因为调度开销带来轻微回退。我在两台机器上做过测试一颗 8 核 16 线程的 CPUOPENBLAS_NUM_THREADS8比16快 5% 左右原因就是线程同步在抢资源。还有一个变量叫OMP_NUM_THREADS它只在 OpenBLAS 以 OpenMP 方式编译时生效。有些预编译包的线程层是 pthreads有些是 OpenMP区分方法是看include目录下的openblas_config.h里面有关THREAD_LAYER的宏定义。如果显示 OpenMP那你设置的线程数必须同时改OPENBLAS_NUM_THREADS和OMP_NUM_THREADS只改其中一个会出现“设了 8 线程实际只用了 1 线程”的黑匣子现象。我的配置习惯是写一个小的启动脚本在程序运行前统一设置两个变量而不是依赖系统级环境变量。这样做的好处是项目内可复现换机器时不用重新配置。设置时机要在程序启动之前因为 OpenBLAS 的线程是在第一次调用 BLAS 函数时就初始化的运行中途再改不起作用。4.3 编译器运行时依赖MinGW 版和 MSVC 版怎么选预编译包的编译工具链不同运行时的 DLL 依赖也不同。MinGW 工具链编出来的libopenblas.dll通常依赖libgfortran-3.dll、libquadmath-0.dll和libgcc_s_seh-1.dllMSVC 工具链编出来的则依赖vcruntime140.dll这一系。如果你的程序是 MSVC 工程却下载了 MinGW 版 OpenBLAS运行时会提示缺少 GCC 的运行时库这时候需要把这些 DLL 一并复制过去部署目录一下子多出好几个文件。预编译包依赖的运行时适合的调用方MinGW 版libgfortran、libquadmath、libgcc_sMinGW、MSYS2、部分 CMake 工程MSVC 版vcruntime140.dll 等Visual Studio 工程、原生 Windows 程序选型原则很直接你的项目用什么工具链编的就选对应的包。不确定工具链时优先选 MSVC 版因为目标 Windows 机器自带 vcruntime 的概率远高于装有 GCC 运行时的概率。如果手头只有 MinGW 版那就在发布时把上述三个 DLL 一起带上放在 exe 同目录一步到位。5. OpenBLAS 在 Windows 上的避坑指南五个绕不开的问题这一章整理我在实际项目里反复遇到的五个问题。每一条都按“现象先描述清楚再讲原因最后给解决路径”的顺序来方便你对照排查。5.1 现象程序启动报错“找不到 libopenblas.dll”文件明明在那里现象编译顺利通过但 exe 双击运行直接弹窗说找不到libopenblas.dll或者是命令行里提示无法启动程序。你打开D:\libs\openblas\bin一看文件明明就在。原因Windows 加载 DLL 的顺序是从 exe 所在目录开始接着是系统目录和系统 PATH用户 PATH 排在更后面。你把 OpenBLAS 加到了用户 PATH但启动 exe 的终端或 IDE 是在改 PATH 之前打开的它们进程内的环境变量还是旧的自然不会去新目录找。还有一种情况你把 exe 放在 U 盘或者别的机器上运行那台机器根本没有这个 DLL。解决先重启终端和 IDE让新 PATH 生效如果仍不行直接复制libopenblas.dll到 exe 同目录。这是最省事也是最稳的办法连 PATH 都不用改。5.2 现象Python 里 import numpy 直接 OSError报 LoadLibrary failed现象新建 conda 环境或者手动装完 numpy 后import numpy抛错提示numpy.core._multiarray_umath加载失败底层原因是某个 DLL 找不到。原因多数出现在混用安装源的场景。比如你先装了官方 wheel 的 numpy后来又在同一环境里手动覆盖过libopenblas.dll导致 DLL 版本和编译时的符号表对不上或者是环境里残留了旧版本的 numpy 缓存文件。解决不要继续排查 DLL 路径直接pip uninstall numpy后重新安装官方 wheel让包管理器把配套的 OpenBLAS 恢复回去。如果是 conda 环境可以新建一个干净环境重新装。我自己遇到过一次是在 conda 环境里混用了 pip 和 conda 的 numpy最后用conda create -n clean python3.11 numpy从头建环境解决。5.3 现象设了 8 线程矩阵乘法反而比单线程更慢现象程序里设置了OPENBLAS_NUM_THREADS8跑小矩阵时发现耗时反而增加甚至 8 线程比 1 线程慢了接近一半。原因OpenBLAS 内部有规模阈值判断矩阵维度太小时多线程的任务切分和线程同步开销远大于并行计算收益。用户强设线程数相当于打断了内部的自动判断逻辑让它强制走多线程路径自然变慢。解决按 4.1 的基准测试先测一轮找到从多少维度开始多线程才有收益。以 64 维以内的矩阵乘法为例单线程通常是最优解。我的做法是在程序启动阶段根据矩阵规模动态设置线程数小矩阵直接设 1大矩阵再用 CPU 核心数。5.4 现象OpenBLAS 和自己代码里的 OpenMP 同时开启出现死锁现象程序里既有#pragma omp parallel for又调用了 OpenBLAS 的多线程矩阵运算运行一段时间后整个进程挂起任务管理器里线程数疯涨但 CPU 占用很低。原因OpenBLAS 内部维护了自己的线程池你也用 OpenMP 开了另一层线程池两层并行嵌套时线程池互相等资源形成循环等待。OpenBLAS 的线程层如果是 OpenMP 编译的冲突概率更高。解决三者取其一。要么 OpenBLAS 用多线程业务代码里的 OpenMP 区域去掉要么 OpenBLAS 编译成单线程版本USE_THREAD0自己的代码管并行要么把两边的线程数统一设置一致但要小心极端数据量下的调度。长期跑的服务我推荐编译USE_THREAD0的 OpenBLAS让线程模型完全由上层控制。5.5 现象Debug 版程序链接 Release 版 OpenBLAS随机崩溃现象用 Visual Studio 的 Debug 配置编译程序链接 Release 版的 OpenBLAS 导入库程序在矩阵运算时偶尔崩溃报错位置每次还不一样像极了内存越界。原因Debug 版使用的是调试版 C 运行时内存分配器和 Release 版不同数据以二进制形式跨过 DLL 边界时堆和栈的管理方式不匹配随机崩溃很难稳定复现。这不是 OpenBLAS 本身的 bug是运行时边界问题。解决统一项目配置全用 Release 编译或者下载一个带调试信息的 OpenBLAS 版本链进去。多数预编译包只提供 Release 版所以更实际的做法是把自己的程序切到 Release。这也是我最想提醒的一句话排错先看运行时配置是否一致。6. 再进一步把 OpenBLAS 绑进你的发布产物前面几章解决的是“装好、用好、排错”最后这一步解决“交付”。我自己的习惯是不让任何 DLL 依赖环境变量而是想办法让产物自包含。最直接的做法是写一个构建脚本把 OpenBLAS 的 bin 目录里的 DLL 全部复制到输出目录# build_output.sh在构建完成后执行 mkdir -p dist cp D:/libs/openblas/bin/libopenblas.dll dist/ cp D:/libs/openblas/bin/libgfortran-3.dll dist/ # MinGW 版需要 cp D:/libs/openblas/bin/libquadmath-0.dll dist/ # MinGW 版需要这样交付给别人的就是一个 dist 目录里面放着 exe 和所有依赖 DLL对方直接运行即可不需要接触环境变量。如果你做的是 Python 项目用 PyInstaller 打包时也有一招把libopenblas.dll加到打包的--add-binary参数里避免最终的 exe 在别的机器上找不到 numpy 底层的 OpenBLAS。这一步在 Windows 上尤其重要因为 PyInstaller 对动态库的扫描并不总是把 hidden import 的依赖带进来。验证发布产物是否自包含可以用 Dependency Walker 或者更轻量的 Dependencies 工具打开 exe 查看它依赖的 DLL 列表里是否还有不在本目录的 OpenBLAS。如果列表里显示依赖路径是绝对路径那就说明没有复制干净。这个检查用眼睛看很容易漏脚本化最靠谱。我最后想留一个习惯作为结尾不要完全相信默认配置所有线程数、CPU target 都要以你手头机器的基准测试为准。我在 Windows 上部署过不少带 OpenBLAS 的项目翻车最多的不是库本身而是工具链混用和环境变量没刷新。把这些细节一次理顺后面所有项目都能复用同一套配置。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
vue-pure-admin 完整上手:Vue3 中后台模板从本地运行到 Docker 部署 vue-pure-admin 完整上手:Vue3 中后台模板从本地运行到 Docker 部署 【免费下载链接】vue-pure-admin 全面ESMVue3ViteElement-PlusTypeScript编写的一款后台管理系统(兼容移动端) 项目地址: https://gitcode.com/GitHub_Trending/vu/vue-p… · 2026/9/25 5:50:09
Claude Ads 的 TikTok Ads 审计技能:控制目录、证据边界与 schema 化输出的完整操作契约 【免费下载链接】claude-ads Claude-first paid-media operations skill for Claude Code across 12 ad platforms (Google, Meta, YouTube, LinkedIn, TikTok, Microsoft, Apple, Amazon, Reddit, Pinterest, Snapchat, X): source-grounded audits, deterministic scoring, v… · 2026/9/25 5:50:09
DeskcommCRM:融合WebRTC通信的客服关系管理系统架构与落地实践 项目代号DeskcommCRM,是我最近大半年主导落地的一套客服场景客户关系管理系统。说是系统,其实更像一个把客户资料、跟进记录、工单任务和电话通信串在一起的工作台。当初起名字的时候,Desk代表坐席工位,Comm是Communication&#… · 2026/9/25 6:23:47
FTTR主网关改造成OLT:从光猫到迷你PON网络的硬核实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 6:23:47
职场商务英语词汇:轻松突破,职场达人必备 在职场中,英语已成为一种基本技能。商务英语词汇是职场人士必须掌握的内容,但面对众多的商务词汇,许多人感到头痛。今天,就让我来分享一些实用的职场商务英语词汇记忆方法、学习习惯、家庭教育心得以及工具选择经验,助… · 2026/9/25 6:23:47
购物网站数据库设计:6张核心表与4大避坑指南 简介:本资源是一份面向数据库初学者与Web开发学习者的MySQL实战项目资料,聚焦电商场景下的数据库设计与建模能力培养。围绕MyShop购物网站系统,完整覆盖用户、地址、商品、购物车、订单及订单项六大核心实体的数据需求与业务处理逻辑… · 2026/9/25 6:23:47
如何高效积累可打印英语单词?学生假期与外企职场必备技巧 英语学习,词汇积累是基础。对于学生和即将步入职场的人来说,掌握可打印的英语单词尤为重要。那么,如何高效积累这些单词呢?本文将为你提供一些实用技巧,助你在假期和职场中轻松提升英语水平。
一、学生假期词汇积累技巧… · 2026/9/25 6:23:47
词汇零基础网课:轻松掌握英语单词,开启学习新篇章! 你是否曾经因为英语词汇量不足而感到苦恼?是否渴望通过一种轻松高效的方式积累英语单词?今天,就让我为你揭秘词汇零基础网课的奥秘,助你轻松掌握英语单词,开启学习新篇章!
一、英语单词积累:从耳… · 2026/9/25 6:23:41
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37