news 2026/10/29 2:21:42

鸟哥Linux基础篇:重建计算机认知的地基工程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸟哥Linux基础篇:重建计算机认知的地基工程

简介:《鸟哥的Linux私房菜-基础篇》第四版是面向Linux初学者与IT从业者的系统性入门经典,聚焦计算机组成原理、Linux操作系统基础、man/info文档查阅、nano文本编辑器实操及SELinux安全机制等核心内容,帮助读者建立扎实的类Unix系统认知框架,培养独立排查与操作能力。资源为单文件PDF格式,共1个文件,大小17.5MB,结构完整、排版清晰,便于离线阅读与笔记标注。已有1237人学习下载,覆盖高校学生、转行新人及需夯实基础的运维人员。书中从零讲解计算器五大硬件单元、CPU架构差异(RISC/CISC)、内存与I/O数据流向等底层逻辑,并结合空气污染仿真等真实场景说明Linux在科学计算中的应用价值,附有大量操作提示与易错点解析,是少有的兼顾原理深度与上手友好性的中文Linux启蒙读物。

1. 《鸟哥的Linux私房菜-基础篇》第四版:不是一本“Linux说明书”,而是一套帮你重建计算机认知的地基工程

你有没有过这种体验:
明明已经会用ls查文件、用cd切目录、甚至能写个简单 Shell 脚本自动备份,可一旦遇到Permission denied却不敢动chmod,看到SELinux is preventing...就直接setenforce 0关掉完事;翻man nano看到一堆^O^X符号像看天书;查个系统日志卡在/var/log/messages里找不到关键行,最后靠重启蒙混过关……
这不是你手生,而是你的 Linux 知识缺了一块看不见的底板——它不教你怎么敲命令,而是先问你:为什么敲这个命令会起作用?为什么换台机器就失效?为什么看似一样的错误,修复方式却南辕北辙?

《鸟哥的Linux私房菜-基础篇》第四版,就是专为补上这块底板写的。它开篇不讲终端、不列命令,而是从「计算器概论」开始——对,就是那个被绝大多数教程跳过的第零章。它用人体打比方:CPU 是脑袋,内存是正在思考的短期记忆,硬盘是长期回忆,主板是神经系统……这些不是修辞,而是理解 Linux 的底层坐标系。没有这个坐标系,你学的每个命令都像散落的拼图碎片:知道怎么拼,但永远不知道整幅画是什么。
这本书真正厉害的地方在于:它把 Linux 当作一个「活的系统生态」来教,而不是一套待背诵的操作清单。你学到的nano不只是「按 Ctrl+O 保存」,而是明白它为何轻量、为何适合初学者、又为何在服务器运维中常被vim替代;你理解的 SELinux 不再是「那个总报错的安全模块」,而是看清它如何用「策略规则」代替传统权限位,实现进程级隔离;你查man页面时,不再盲目翻页,而是知道SYNOPSIS是调用骨架,OPTIONS是控制开关,EXIT STATUS是程序给你的诊断报告。
换句话说,它不教你“怎么用 Linux”,而是帮你长出一双能看懂 Linux 运作逻辑的眼睛。当你终于能从硬件层(CPU 架构、内存带宽)、内核层(进程调度、文件系统挂载)、用户层(Shell 解析、权限模型)三层贯通地思考问题时,那些曾让你头皮发麻的报错,突然就变成了可定位、可推演、可验证的线索。这才是所谓“基础”的真实分量——不是起点,而是支点。

2. 为什么必须从“计算器概论”开始:硬件认知决定你能否真正看懂 Linux 的每一行输出

很多人翻开《鸟哥》,看到第零章标题“计算器概论”就下意识跳过,觉得“这和 Linux 有啥关系?”——这恰恰是全书最锋利的认知手术刀。Linux 不是空中楼阁,它是运行在真实物理硬件之上的精密交响乐。当top显示 CPU 使用率 95%,你得知道这数字背后是 CPU 核心在疯狂取指译码;当df -h报告/分区只剩 2%,你得意识到这不仅是磁盘空间告急,更可能触发内核的 OOM Killer 杀死进程;当ssh连接超时,你得判断是网卡驱动没加载、还是中断请求(IRQ)被某颗 CPU 核心独占……所有这些,都始于对硬件单元的肌肉记忆式理解。

2.1 计算机五大单元:Linux 所有命令的物理锚点

鸟哥用一张图(图 0.1.2)把抽象概念钉死在物理世界:输入单元(键盘/鼠标)、主机部分(CPU+内存+主板)、输出单元(屏幕/打印机)。这绝非老生常谈,而是为你解码 Linux 命令的物理映射:

  • cat /proc/cpuinfo输出的model name和cpu MHz:直接对应 CPU 封装内的微指令集与工作频率。当你看到Intel(R) Core(TM) i7-4790,就知道它属于 x86_64 架构,支持Intel-VT虚拟化指令集;而cpu MHz: 3600.000并非恒定值——它背后是 Intel Turbo Boost 技术在动态调整倍频,这解释了为何stress-ng --cpu 4跑满后频率飙升,而空闲时降频至 800MHz。
  • free -h中的Mem:行:就是主存储器(RAM)的实时快照。available字段不是简单剩余,而是内核根据当前工作负载预估的“可立即分配给新进程的内存”。当它趋近于 0,系统会启动kswapd内核线程将不活跃页写入 swap,此时vmstat 1的si/so(swap in/out)列会跳动——这正是“内存不足”在硬件层的脉搏。
  • lsblk列出的sda1、nvme0n1p2:本质是输入/输出单元(I/O)的抽象。sda源自 SCSI 设备命名,哪怕你用的是 SATA 硬盘;nvme0n1p2则直指 NVMe 协议的 PCIe 通道。它们共同指向一个事实:Linux 把所有存储设备统一建模为“块设备”,其性能瓶颈不在 Linux 本身,而在 PCIe 总线带宽或 NAND 闪存的读写延迟。

提示:下次执行iostat -x 1,观察%util(设备利用率)和await(I/O 平均等待时间)。若%util接近 100% 但await很低,说明设备在全力吞吐(如顺序读大文件);若%util很低但await很高,则可能是随机小 I/O 导致队列堆积(如数据库事务),这时优化方向是调整 I/O 调度器(echo deadline > /sys/block/sda/queue/scheduler)而非升级 CPU。

2.2 CPU 架构:为什么你的程序在 A 机器跑得飞快,在 B 机器直接报错?

鸟哥在 0.1.2 节拆解 RISC 与 CISC 的差异,这直接决定你能否跨平台部署软件。举个真实案例:某开发者编译一个 Python 扩展模块,在 Intel 服务器上成功,迁移到 ARM 架构的树莓派却报Illegal instruction。原因很简单——该模块调用了 Intel 特有的AVX2指令集(属 CISC 复杂指令),而 ARM Cortex-A72 核心根本不认识这条指令。

Linux 通过uname -m暴露架构真相:

# x86_64 机器 $ uname -m x86_64 # ARM64 机器(如树莓派 4) $ uname -m aarch64

而lscpu更揭示深层能力:

$ lscpu | grep -E "Model name|Flags" Model name: Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt dtherm ida arat pln pts md_clear flush_l1d

Flags列中的avx2、sse4_2就是 CPU 支持的微指令集。当你用gcc -march=native -O2编译程序时,编译器会根据这些 Flag 生成最优指令——这也意味着二进制文件将失去跨 CPU 型号兼容性。这就是为什么 Docker 镜像需声明platform: linux/amd64或linux/arm64,否则exec format error错误会毫不留情地出现。

2.3 内存与总线:为什么加大内存有时比升级 CPU 更有效?

鸟哥在 0.1.1 节强调:“所有数据都要经过主存储器的传输”。这句话是理解 Linux 性能瓶颈的金钥匙。看一个典型场景:某 Web 服务器响应缓慢,htop显示 CPU 使用率仅 30%,但nginx进程大量处于D(不可中断睡眠)状态。iostat显示磁盘await高达 200ms——问题在硬盘?错。vmstat 1揭示真相:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 1 0 123456 78901 234567 0 0 123 456 1234 5678 12 23 45 20 0

wa(I/O wait)列高达 20%,但bi/bo(块输入/输出)数值不大。此时sar -r 1显示kbmemfree持续低于 100MB。真相浮出:内存严重不足,内核被迫频繁回收 page cache,导致后续读取必须穿透到磁盘,引发 I/O 队列阻塞。解决方案不是换 SSD,而是加内存——让cache区域足够大,使热点数据常驻 RAM。

这印证了鸟哥的断言:“要加快系统效能,通常将内存容量加大就可以获得相当好的成效”。因为内存带宽(如 DDR4-2666 的 21.3GB/s)远高于 SATA III(0.6GB/s)或 even NVMe(3.5GB/s),数据在内存中流转的延迟是纳秒级,而磁盘寻道是毫秒级——差了百万倍。Linux 的page cache机制正是利用这一物理鸿沟,把磁盘 I/O 变成内存操作。不懂内存,你就永远在治标不治本。

3. nano 文本编辑器:为什么它被称作“Linux 新手的第一把安全剪刀”?

当教程告诉你“用vim编辑配置文件”,而你对着:wq发呆时,nano就是那个默默站在你身后的教练。它不炫技,不设门槛,却用最朴素的设计哲学,把文本编辑这件危险的事变得可控、可逆、可理解。鸟哥在书中介绍nano,绝非妥协,而是深谙学习曲线——在你能驾驭vim的模式切换前,先确保你不会因一个误操作让系统瘫痪。

3.1 nano 的设计哲学:放弃自由,换取确定性

vim的强大源于其模式分离(普通/插入/可视/命令行),但这也制造了认知负担:按i进入插入模式,按Esc回普通模式,按:进命令行模式……新手常陷入“不知自己在哪一模式”的玄学困境。nano彻底抛弃模式概念:你永远处于编辑状态。所有操作通过Ctrl+字母组合键触发,且底部始终显示当前可用快捷键(^G Get Help^O WriteOut^X Exit)。这种“所见即所得”的确定性,是新手建立信心的关键。

更重要的是,nano默认启用语法高亮与自动缩进(需配置.nanorc),当你编辑/etc/fstab时,UUID、挂载点、文件系统类型会以不同颜色呈现;编辑 Shell 脚本时,ifthenfi自动对齐。这种视觉引导,让结构一目了然,避免因格式错误导致mount -a失败。

3.2 nano 的安全机制:三重防护墙,防止“手滑毁灭系统”

Linux 配置文件修改是高危操作。nano用三道防线降低风险:

  1. 只读保护(Read-only warning):
    当你用nano /etc/shadow(需 root 权限),若文件权限为--------(无读权限),nano会明确提示Warning: /etc/shadow is not readable并拒绝打开。这比vim默默打开一个空文件再让你:w!强制写入更安全。

  2. 写入确认(Write confirmation):
    按Ctrl+O保存时,nano会显示完整路径并要求你确认文件名。即使你误输/etc/passwd,也能在按下回车前最后一刻发现。

  3. 备份机制(Backup on save):
    启用set backup(在~/.nanorc中添加),每次保存都会生成filename~备份。若新配置导致系统异常,cp /etc/fstab~ /etc/fstab一键回滚。这是比 Git 更轻量、更即时的后悔药。

提示:在~/.nanorc中添加以下配置,让nano更强大:

set autoindent # 自动缩进 set backup # 保存时创建备份 set backupdir "/tmp" # 备份到 /tmp,避免污染原目录 set smooth # 滚动更平滑 include "/usr/share/nano/*.nanorc" # 启用语法高亮

启用后,编辑 Python 文件时关键词变蓝、字符串变红、注释变绿,逻辑错误一眼可见。

3.3 nano vs vim:何时该放手,何时该紧握?

nano不是终点,而是桥梁。它的存在价值,在于帮你跨越“不敢改配置”的心理门槛。当你能熟练用nano修改/etc/hosts添加本地域名解析、用nano ~/.bashrc追加alias ll='ls -alF'、用nano /etc/apt/sources.list切换国内镜像源时,你已建立起对 Linux 文件系统结构、权限模型、Shell 环境的肌肉记忆。

此时,vim的价值才真正浮现:

  • 批量编辑::%s/old/new/g一键替换全文;
  • 多文件操作::tabnew /etc/nginx/nginx.conf在标签页间穿梭;
  • 宏录制:qa开始录制,q结束,@a重复执行——处理 100 个日志文件的格式化,5 秒搞定。

但请记住:vim的高效,建立在nano奠定的“理解文件内容含义”的基础上。没有前者,后者只是花拳绣腿。鸟哥推荐nano,正是因为它把“编辑”这件事,从“技术操作”还原为“信息处理”——这才是 Linux 真正的思维方式。

4. SELinux:不是“总报错的麻烦精”,而是 Linux 内核自带的“行为审计员”

提到 SELinux,很多人的第一反应是:setenforce 0关掉它,世界立刻清净。这种“关掉安全模块求安稳”的做法,如同拆掉汽车安全气囊来避免误爆——看似解决问题,实则埋下更大隐患。鸟哥在书中详解 SELinux,并非鼓吹其复杂性,而是揭示一个真相:传统 Linux 权限(rwx)只能控制“谁”能访问“什么”,而 SELinux 控制“什么进程”在“什么条件下”能对“什么资源”执行“什么操作”。它是对 Linux 安全模型的一次升维。

4.1 传统 DAC vs SELinux MAC:权限模型的代际差异

Linux 默认使用自主访问控制(DAC),即文件所有者可随意修改权限(chmod 777)。这带来巨大风险:一旦某个服务进程(如httpd)被黑客攻陷,它就能以apache用户身份,读取/etc/shadow(若权限宽松)、写入/var/www/html(若目录可写)、甚至执行任意命令(若PATH被篡改)。

SELinux 引入强制访问控制(MAC),核心是策略(Policy)。它为每个进程、每个文件、每个端口打上“安全上下文(Security Context)”标签。例如:

# 查看 httpd 进程的上下文 $ ps -eZ | grep httpd system_u:system_r:httpd_t:s0 1234 ? 00:00:01 httpd # 查看网页根目录的上下文 $ ls -Z /var/www/html/ unconfined_u:object_r:httpd_sys_content_t:s0 index.html # 查看 80 端口的上下文 $ semanage port -l | grep http_port_t http_port_t tcp 80, 443, 488, 8008, 8009, 8443

httpd_t(进程域)只能访问httpd_sys_content_t(文件类型)标记的文件,且只能绑定http_port_t(端口类型)定义的端口。即使黑客拿到httpd进程的 shell,他也无法cat /etc/shadow,因为/etc/shadow的上下文是system_u:object_r:shadow_t:s0,而httpd_t域没有read权限——cat命令会被内核直接拦截,返回Permission denied。

4.2 SELinux 的三种模式:如何在“严格”与“实用”间平衡?

SELinux 提供三种运行模式,鸟哥强调:生产环境绝不应长期运行在disabled模式:

  • Enforcing(强制模式):策略生效,违规操作被阻止并记录到/var/log/audit/audit.log。这是安全目标。
  • Permissive(宽容模式):策略不阻止操作,但记录所有违规事件。这是调试利器——ausearch -m avc -ts recent | audit2why可分析日志,生成修复建议。
  • Disabled(禁用模式):策略完全关闭。等同于卸载安全系统。

提示:快速诊断 SELinux 问题的黄金流程:

  1. getenforce确认当前模式;
  2. 若为Enforcing且报错,立即切到Permissive:sudo setenforce 0;
  3. 复现问题,然后sudo ausearch -m avc -ts $(date --date="1 minute ago" +"%m/%d/%Y %H:%M:%S") | audit2why;
  4. 根据audit2why输出,用semanage fcontext修改文件上下文,或setsebool调整布尔值。
    例如,若 Web 应用需访问 NFS 共享,audit2why可能提示allow httpd_can_network_connect nfs_t,执行sudo setsebool -P httpd_can_network_connect on即可。

4.3 常见误区/易混概念:破除对 SELinux 的三大误解

易混点为什么混怎么区分
“SELinux 就是防火墙”两者都涉及“阻止访问”,且firewalld常与 SELinux 同时配置。防火墙(如iptables)工作在网络层,控制 IP/端口的进出流量;SELinux 工作在内核层,控制进程对本地资源(文件、端口、IPC)的访问。firewalld挡不住本地curl http://localhost:8080,但 SELinux 可以阻止httpd进程读取/tmp/malware.sh。
“关掉 SELinux 就安全了”误以为安全=无报错,忽视攻击面扩大。关闭 SELinux 后,httpd进程若被入侵,可直接rm -rf /(若以 root 运行)或窃取所有用户数据。SELinux 的价值恰在“纵深防御”——即使第一道防线(密码、补丁)失守,第二道(进程沙箱)仍能止损。
“SELinux 规则太难写,不如用 AppArmor”AppArmor 基于路径的配置(如/usr/bin/firefox)看似更直观。AppArmor 的路径依赖是双刃剑:ln -s /etc/shadow /tmp/hack可绕过/etc/shadow规则;而 SELinux 的shadow_t标签跟随文件本身,无论硬链接到何处。企业级环境更倾向 SELinux 的标签持久性。

5. Linux 文档查看方法:man、info、/usr/share/doc——别再当“命令盲人”

在 Linux 世界,最好的教程永远是系统自带的文档。但多数人只会man ls,却不知man 5 passwd查的是/etc/passwd文件格式,man 3 printf查的是 C 库函数printf()。鸟哥在书中系统梳理文档体系,教你把man从“查命令”升级为“读系统设计”。

5.1 man 页面的章节划分:读懂数字背后的系统逻辑

man页面按功能分为 8 个章节,数字即“手册卷号”:

  • 1:用户命令(ls,cp,grep)
  • 2:系统调用(open(),read(),fork())——内核提供给程序的底层接口
  • 3:库函数(printf(),malloc())——C 标准库封装的系统调用
  • 4:特殊文件(/dev/null,/dev/sda)——设备文件说明
  • 5:文件格式(/etc/passwd,/etc/fstab,crontab)——配置文件语法
  • 6:游戏(历史遗留)
  • 7:杂项(ascii,utf-8,regex)——字符编码、正则表达式规范
  • 8:系统管理命令(ifconfig,iptables,useradd)——需 root 权限的命令

提示:man -k keyword(等价于apropos keyword)可搜索所有含关键词的手册页。例如man -k "file system"会列出mount(8)、fstab(5)、ext4(5)等,帮你发现未知工具。

5.2 info 页面:比 man 更深入的“交互式百科全书”

info是 GNU 项目的官方文档格式,比man更详尽,支持超链接跳转。例如info coreutils会进入coreutils手册首页,按n(next)/p(prev)翻页,按u返回上一级,按l返回上次位置。info ls的* Menu会列出所有ls选项的详细说明,包括--color=WHEN的WHEN可取值(always/auto/never)及默认行为。

提示:info默认用less查看,但less不支持 info 的交互。用info命令直接启动 info 阅读器,或安装pinfo(彩色、支持鼠标)提升体验。

5.3 /usr/share/doc:被严重低估的“源码级说明书”

/usr/share/doc目录存放软件包的完整文档,常包含:

  • README.Debian/README.Fedora:发行版特有说明
  • changelog.Debian.gz:版本更新日志
  • copyright:许可证信息
  • examples/:真实配置示例

例如ls /usr/share/doc/nginx/可能列出examples/下的fastcgi_params、mime.types等文件,直接复制到/etc/nginx/即可使用。这些是man不会告诉你的最佳实践。

6. 什么时候该用《鸟哥的Linux私房菜》,什么时候该放下它去实战?

我第一次部署生产 Nginx 服务器时,自信满满地跳过鸟哥的第零章,直奔“网络服务配置”。结果在配置worker_connections时卡住:worker_connections 1024是设多少?1024 个连接?1024 个进程?还是别的?我翻遍nginx -h和网上教程,得到的答案五花八门。直到深夜,我鬼使神差地打开《鸟哥》第零章,重读“计算机五大单元”和“CPU 与内存的关系”,突然顿悟:worker_connections是单个工作进程能同时处理的连接数,而worker_processes auto会让 Nginx 自动创建与 CPU 核心数相等的进程——所以总并发连接数 =worker_processes × worker_connections。这个数字不能超过系统ulimit -n(文件描述符上限),而ulimit -n又受限于内存大小(每个连接约占用几 KB 内存)……那一刻,我明白了鸟哥为何坚持从硬件讲起:所有软件参数,都是对物理资源的翻译。

从那以后,我每次配置关键服务(数据库、Web 服务器、容器运行时),都强制走一遍“三层溯源”:

  1. 查man 5或man 8:确认参数的官方定义与默认值;
  2. 读/usr/share/doc/<package>/下的README和examples:看发行版如何实践;
  3. 回溯硬件层:用lscpu看 CPU 核心数,用free -h看可用内存,用iostat -x 1看磁盘能力,计算参数的理论上限。

比如配置 PostgreSQL 的shared_buffers,man 5 postgresql.conf告诉你“通常设为物理内存的 25%”,但free -h显示内存 16GB,shared_buffers = 4GB就一定最优吗?不。iostat若显示磁盘await常超 10ms,说明 I/O 是瓶颈,应减少shared_buffers,把内存留给effective_cache_size(OS page cache),让内核缓存更多数据——这只有理解“内存是 CPU 与磁盘间的缓冲”才能想通。

《鸟哥的Linux私房菜-基础篇》第四版的价值,正在于此:它不给你答案,而是给你一把能自己锻造答案的锤子。当你在深夜排查一个诡异的Permission denied,不再条件反射地chmod 777,而是ls -Z看 SELinux 上下文、getenforce确认模式、ausearch分析日志;当你面对一个陌生命令,不再百度“怎么用”,而是man 1 command看SYNOPSIS、DESCRIPTION、EXIT STATUS;当你升级服务器,不再盲目apt upgrade,而是先lscpu确认新内核是否支持 CPU 的aes-ni指令集以加速加密……你就真正从“Linux 用户”,蜕变为“Linux 理解者”。

希望帮到你。

本文还有配套的精品资源,点击获取

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

OnFill 职责边界:NGUI 顶点生成契约、调用链与性能红线

一、先把职责说清楚 在看任何代码之前,必须先明确一件事:OnFill 到底在整条管线里负责哪一段。 1.1 一句话定义 OnFill 的职责:把 widget 的配置参数,翻译成一组四边形的顶点数据。 它是一个纯粹的几何生产函数。 输入 OnFill 输出…

作者头像 李华
网站建设 2026/10/29 2:19:33

auto_rig_pro_3.40z 自动绑定工具实战:从解压到批量质量回归

简介&#xff1a;Auto_Rig_Pro 3.40z 是面向 Blender 用户的角色自动绑定插件资源包&#xff0c;主要服务于需要快速完成骨骼搭建与蒙皮权重的 3D 艺术家、动画爱好者及独立开发者&#xff0c;可显著降低手动绑定的复杂度。压缩包共 9 个文件&#xff0c;约 3.79MB&#xff0c;…

作者头像 李华
网站建设 2026/10/29 2:19:31

分类数据EDA实战:从基础统计到层次结构挖掘

1. 分类数据EDA的核心价值第一次接触分类数据集时&#xff0c;我犯过所有新手都会犯的错误——直接跳进模型构建环节。直到某次分析电商用户行为数据时&#xff0c;发现"购买频率"字段中竟然藏着7种不同的null值表示方式&#xff0c;才真正明白探索性数据分析(EDA)对…

作者头像 李华
网站建设 2026/10/29 2:19:15

第七单元多线程、第八单元网络编程

P250页任务思考1. Servlet 的工作原理客户端浏览器发送HTTP 请求给Web容器&#xff08;Tomcat&#xff09;&#xff0c;容器接收请求后&#xff0c;找到对应的Servlet&#xff1b;容器将请求、响应对象传给Servlet&#xff0c;Servlet执行业务逻辑&#xff0c;处理后把结果封装…

作者头像 李华
网站建设 2026/10/29 2:18:24

DeepSeek Harness (DSH) 实战指南:Windows 下的踩坑实录与高效开发配置

DeepSeek Harness (DSH) 实战指南&#xff1a;Windows 下的踩坑实录与高效开发配置 时间戳&#xff1a;本文所述 DeepSeek Harness&#xff08;DSH&#xff09;相关技术、安装配置、使用方式及各工具/依赖版本信息&#xff0c;均截至 2026 年 10 月 28 日。此后相关工具与版本可…

作者头像 李华