Java后端TCP面试核心拆解:握手挥手、可靠传输与性能优化
最近在帮几个准备Java后端面试的朋友做模拟发现几乎每个人都在TCP这块被问得有点发慌。背了三次握手、四次挥手结果面试官一追问“为什么偏偏是三次”“TIME_WAIT留着到底干什么”就直接卡壳。其实TCP在Java面试里是性价比很高的一个板块——考点集中、套路清晰但大多数人的问题不是不懂而是把“背答案”当成了“理解”一变形就露馅。这篇内容就是我从实际面试准备和面试官视角整理出来的TCP面试部分拆解。不吹原理十级学者只讲面试现场真正会被问到的东西以及每个回答背后该想通的逻辑。适合准备Java后端、网络方向、以及想把自己的网络基础补扎实的同学拿去直接当复习提纲也够用。1. 面试官到底在问什么TCP考点全景拆解很多同学把TCP面试理解成“背诵大作战”三次握手几个报文、四次挥手几个状态、超时重传时间怎么算。但面试官问TCP从来不是想听你背书而是想验证三件事第一你知不知道这个机制解决了什么问题第二你能不能把它和实际开发中的现象联系起来第三当你遇到线上问题连接超时、大量TIME_WAIT、卡顿时有没有排查思路。1.1 高频考点和它们背后的真实意图我梳理了面试里出现频率最高的TCP问题也标注了我作为面试官更希望听到的回应方向表格放在下面。高频问题表面考查点真正想验证的素质为什么TCP需要三次握手握手过程记忆对不可靠信道的理解对序列号协商的必要性认识为什么挥手要四次半关闭概念对TCP双工通信模型的理解TIME_WAIT为什么非要2MSL状态机细节是否从数据完整性和连接可靠性角度思考问题TCP如何保证可靠传输重传机制是否理解超时重传、快速重传、SACK之间的演进逻辑流量控制和拥塞控制区别两类窗口的区分是否知道接收方和网络是两个不同瓶颈粘包/拆包怎么处理应用层编码是否踩过实际网络编程的坑你会发现真正加分点往往不在答案本身而在你解释“为什么”的过程里。比如“为什么三次握手而不是两次”如果只能说“因为要确认双方收发能力”还不够如果能把“序列号同步”和“防止历史重复连接初始化”也带出来立刻不一样。1.2 Java开发者和TCP的交集点TCP在Java面试里不会单独出现它一定会和你熟悉的技术栈绑定Netty的Reactor模型为什么高效、HTTP连接池为什么需要合理配置、Dubbo底层用TCP长连接时为什么需要心跳、MySQL连接失败时客户端卡住是什么原因。面试官真正想确认的是你会不会用网络知识解释现象。有一次朋友被问“线上服务出现大量close_wait你怎么排查”他先背了一遍close_wait是什么然后就不说话了。这题其实没那么难close_wait是服务端被动关闭的一端收到了FIN但自己还没主动关连接一般是代码没正确调用close导致的结合lsof或netstat看句柄、检查业务线程是否阻塞基本能定位。但这些操作层面的思路恰恰是平时只看理论不看实际的人最容易漏掉的。2. 三次握手与四次挥手背出答案只是及格线这一节是TCP面试的入门必考但也是最容易被深挖的部分。我只把关键逻辑和面试中反复出现的变形题讲透不把报文细节塞给你。2.1 三次握手不只是“相互确认”还有序列号同步三次握手的核心处理对象是初始序列号。通信双方都需要知道对方的起始序号才能对后续报文排序和去重。第一次握手客户端发送SYN并携带自己的初始序号第二次握手服务端回复SYNACK同时带上自己的初始序号第三次握手客户端再发ACK确认。这里最经典的问题是为什么不能两次握手只握手两次服务端无法确认客户端已经收到了自己的SYNACK。更关键的是如果客户端一个老旧的SYN报文在网络里绕了很久才到达服务端服务端建立了连接并发送数据但客户端根本没有这个连接的意愿数据就会被堆积且无法被正确接收。第三次握手存在的意义之一就是让服务端确认客户端“还活着并且确实想连”。面试现场我一般会建议你主动补一句客户端最后发的ACK如果丢了服务端会超时重传SYNACK直到收到确认或放弃。这句话能体现你对超时机制的理解很多面试官会顺着这句继续问超时参数怎么调。2.2 四次挥手里的半关闭和TIME_WAIT四次挥手之所以是四次是因为TCP可以半关闭一端停止发送数据但还能接收。客户端发FIN表示“我不再发数据了”服务端可以先回ACK表示“收到了”但此时服务端可能还有数据要发给客户端所以服务端自己的FIN要等数据发完后再单独发因此多出一次。TIME_WAIT是面试重灾区。主动关闭的一方发出最后的ACK后进入TIME_WAIT持续2MSLMaximum Segment Lifetime报文最大生存时间。原因有两个一是如果最后那个ACK丢了对端会重发FIN主动方得留足够时间处理重传二是防止本次连接的旧报文出现在相同四元组的新连接里2MSL能让网络中属于旧连接的报文全部消失。面试容易被问“TIME_WAIT能不能消灭”不能靠改系统参数绕过那是掩盖问题。正确做法是让客户端去确保对端收到的数据完整同时通过调整应用层逻辑或长连接池降低主动关闭方的连接创建频率。如果服务端大量TIME_WAIT就要检查是不是有短连接频繁建立而不是直接调小TIME_WAIT窗口。2.3 握手和挥手场景下的Java层表现在Java里你不需要自己实现握手但Socket编程中的很多现象都和它有关。比如客户端连接服务端超时底层往往卡在握手阶段这时需要检查服务端是否处于backlog队列满的状态再比如调用close时如果没有先shutdownOutput就可能遇到对端不知道怎么判断数据结束的问题。另一个容易被忽略的点Java Socket的half-close支持。Socket类提供了shutdownInput和shutdownOutput允许一端停止发送但继续读取这正是TCP半关闭语义在Java里的直接体现。面试被问到“TCP半关闭应用层怎么实现”时能提到这两个方法就很加分。3. 可靠性、流量控制与拥塞控制Java面试的高频深水区很多人把TCP可靠性简单理解成“丢包了会重传”但面试官想考的细节比这个深入得多重传怎么触发、窗口怎么变化、多个丢包怎么应对这些直接影响你对网络编程和调优的敏感度。3.1 可靠传输的完整链路确认、序号、重传、去重TCP可靠传输的基础是“每个字节都有序号”。接收方收到数据后回ACK确认号表示“在这个序号之前的字节我都收到了”。如果发送方等不到ACK就需要重传。重传机制经历了几个阶段超时重传等超时时间到了还没收到ACK就把数据重发一遍。超时时间不能太大也不能太小太大有延迟太小容易误判重传。快速重传如果连续收到三个重复ACK发送方不用等超时直接重传那个疑似丢失的包。这个Fast Retransmit比超时更快。SACKSelective Acknowledgment传统重传只回最后一个连续收到的序号如果中间丢了一个包但后面很多包都到了接收方只能把后面全丢掉等待重传。SACK让接收方在ACK里告诉发送方“我收到了哪些不连续的段”发送方只重传真正丢失的部分。面试里你可以这样回答可靠传输不是靠某一个机制而是靠序列号确认重传去重的组合拳。如果面试官问“那重传一定不丢吗”你还可以补充如果网络持续严重拥塞重传也无法保证不丢这时候应用层需要自己的超时和重试机制。3.2 流量控制不是网络挤不挤而是接收方忙不忙流量控制解决的是发送方不要压垮接收方的问题。接收方会在TCP头部通告自己的接收窗口大小表示自己当前最多能收多少字节。发送方必须保证发送未确认的数据量不超过接收方通告的窗口。如果接收方应用程序处理慢接收缓冲区被占满接收方就会把通告窗口减小甚至通告为零。通信双方并不会因此断开但发送方必须停止发送。这里有个Java里的常见场景读了SocketInputStream不消费缓冲区被占满对端写数据时就会阻塞——很多人查半天性能问题最后发现是业务代码漏了读。调试这类问题最实用的命令是ss -ti或者netstat -s观察发送队列 Send-Q 是否长期非零或者接收队列 Recv-Q 是否一直在涨。Java应用里如果发现连接占用但CPU很低优先怀疑流量控制和业务消费速度不匹配。3.3 拥塞控制网络堵了TCP自己会踩刹车拥塞控制解决的是网络链路本身过载的问题。发送方维护一个拥塞窗口cwnd和接收窗口rwnd一起作用实际发送量取二者最小值。拥塞控制算法发展阶段很多面试一般考最经典的四个过程慢启动、拥塞避免、快重传、快恢复。慢启动阶段cwnd从很小的值开始指数增长每收到一个ACK就翻倍。目的是“小步试水”快速探测可用带宽。当cwnd到达慢启动阈值ssthresh后进入拥塞避免阶段按线性增长慢慢逼近网络极限。一旦出现超时TCP认为网络严重拥塞把ssthresh降为当前cwnd的一半cwnd重置为初始值重新慢启动。如果是快速重传则进入快恢复ssthresh减半cwnd减半但不回到起点避免链路吞吐量抖动太厉害。面试现场很容易踩的坑是把流量控制的接收窗口rwnd和拥塞控制cwnd混为一谈。你可以在纸上随手画两个窗口说“rwnd是接收方给发送方的约束cwnd是网络拥塞状态给发送方的约束两者取最小”这个概念一旦说清楚面试官基本不会再追着问细节。3.4 从Nagle到延迟ACKJava socket上的小动作Nagle算法和延迟ACK可能是很多Java开发者的盲区。Nagle算法为了让小包合并发送攒数据代价是可能引入几十毫秒级别的延迟延迟ACK则是接收方故意等一小段时间把多个ACK合并回复。两者碰在一起就可能出现“发送方等ACK、接收方等数据”的经典死锁局面。Java里应对低延迟场景标准操作是开启TCP_NODELAYSocket socket new Socket(); socket.setTcpNoDelay(true);Netty里也类似NioSocketChannel配置了TCP_NODELAYtrue。如果你做即时通讯或高频交易客户端这句配置几乎是必须的。面试时主动提这个优化细节比单纯说“我了解Nagle”要有说服力得多。4. 从TCP到HTTP层连接复用、队头阻塞与长连接实战TCP面试题很少只停在传输层它几乎总会顺着往上爬问到你做Java后端天天遇到的东西HTTP连接池、长连接、队头阻塞、性能优化。这一节我就讲讲那些让初学者头疼、但面试里经常被当作“应用实战”来问的问题。4.1 为什么HTTP要复用TCP连接一次HTTP请求如果每次都新建TCP连接成本很高三次握手加上可能的TLS握手开销能占到整个请求时间的相当比例。尤其对Java后端的高并发服务客户端每次请求都重新连接会造成大量TIME_WAIT、大量文件句柄QPS根本扛不起来。解决方案就是连接复用。HTTP/1.1里的Keep-Alive是一种方式客户端跟服务端建立一条TCP长连接完成一个请求后不立即关闭留给后续请求复用。Java里的HttpClient和Apache HttpClient都维护连接池连接池的核心参数就是最大连接数、每个路由连接数、空闲连接存活时间。面试可能追问“连接池里的连接如果被服务端偷偷断开客户端怎么感知”答案依赖于TCP保持活性机制以及HTTP client读响应时的超时。更实用的做法是客户端在拿连接前先把过期的空闲连接剔除或者在请求时对SocketException做重试。这是线上服务经常要调的点。4.2 HTTP队头阻塞到底是什么HTTP/1.1在同一TCP连接上是串行处理请求的一个请求的响应没回来后面的请求就得排队这个问题叫HTTP队头阻塞。解决它有两种思路一是浏览器开多个TCP连接比如同域名6条二是协议层面升级到HTTP/2。HTTP/2引入多路复用一个TCP连接里可以同时跑多个stream每个stream独立收发请求和响应逻辑上解决了HTTP/1.1的队头阻塞。但很多人忽略了TCP层面的队头阻塞依然存在如果某个TCP包丢了TCP为了保证有序性会把后续已到达的数据都放在缓冲区里等重传对HTTP/2这样的多路复用上层来说所有stream都会被这个丢失的包拖住。所以HTTP/2只是解决了HTTP队头阻塞并没有根治TCP队头阻塞。面试谈到这里如果你能补一句“所以条件允许时用多个TCP连接或改用UDP之上的QUIC能进一步规避这个问题”面试官对你网络视野的评分会高不少。注意QUIC就是基于UDP实现的这句话如果引发追问你得能讲清楚QUIC的独立数据流机制别挖坑埋自己。4.3 Java后端与TCP相关的性能调优清单我把实际工作中最常用的TCP调优点整理成清单面试很适合作为“你平时怎么排查性能问题”的素材。增大端口范围避免高并发短连接场景下客户端端口耗尽。调整backlogJava里ServerSocket可以传入backlog参数避免连接排长队直接拒绝。启用setReuseAddress(true)服务端重启或主动关闭后快速重新绑定端口避免Address already in use。合理设置读超时和连接超时连接超时是握手的等待时间读超时是响应迟迟不来时的保护两者别混。使用epoll模型而非阻塞IOJava NIO在Linux上底层就是epollNetty更是把它发挥到极致能支撑大量空闲连接。每一项都值得在面试时展开一两句比如backlog调优要结合TCP握手的accept队列讲解这样面试官才信你是真用过。5. 面试追问实战当我被连环问时怎么稳住理论知识说到底要能在面试对话里流畅输出。我模拟几段面试中典型的“连环追问”用QA的方式还原思考过程。这些不是标准答案而是你在现场可以迁移的回答路径。5.1 经典连环问一三次握手的“第三次丢了怎么办”面试官三次握手如果客户端的ACK丢了连接还能建立吗 候选人服务端收不到ACK会超时重传SYNACK。如果重传几次都收不到服务端会放弃这个半连接。客户端这时可能认为连接已经建立一旦向服务端发数据服务端因为没有完成握手会回RST连接直接重置。这里要能说出RST这个细节就很加分。很多新人只会说“连接失败”却不知道失败的具体信号是什么。RST是TCP里表示“连接直接异常关闭”的报文遇到它说明对方的TCP栈认为这个连接不存在或不合法。5.2 经典连环问二SYN Flood攻击和半连接队列面试官如果有人不断发SYN但不回第三次握手服务端会怎样 候选人服务端会为每个SYN分配一个半连接放进半连接队列然后等待ACK。如果攻击者大量伪造SYN半连接队列很快被打满后面的正常连接要么被丢弃要么排队超时导致服务不可用这就是SYN Flood。如果面试官继续问“怎么防”你可以说启用SYN Cookie不立即分配资源而是把序列号编码成Cookie返回等收到ACK再决定是否分配或者调小SYN超时时间、限制单个IP的连接速率。能按轻重缓急说出两个方案基本就把题答稳了。5.3 经典连环问三粘包怎么处理面试官用Java Socket发送多条消息对端读到的是什么 候选人TCP是流没有消息边界多条消息可能会粘在一起也可能一条消息被拆成两次读。处理粘包需要自己在应用层定义消息边界常用方式有固定长度、分隔符、消息头带长度字段。Netty里可以用LengthFieldBasedFrameDecoder或者直接用字符串分隔符解码器。这里最容易答错的是说“TCP有消息边界”这是对TCP最基本的概念性误解。面试官听到你准确说出“TCP是字节流”后一般就不再纠结这一点了。5.4 经典连环问四长连接的保活和心跳面试官服务端维护了大量TCP长连接怎么判断对端是不是还在 候选人TCP本身有Keep-Alive机制但默认要等两个小时才探测一次很多业务场景等不了。实际应用一般用应用层心跳比如每隔30秒发一次ping超过90秒没收到pong就判定对端失联关闭连接并清理资源。Netty的IdleStateHandler就是做这个的可以配置读空闲、写空闲、读写空闲的触发时长。建议把心跳和连接池的失效剔除放到一起讲一个是纯空闲检测一个是业务健康检查一起结合能覆盖更多异常场景。面试官听到你既懂协议层又懂框架层这题基本就过了。5.5 我的临场经验先给结论再给机制我面试候选人的时候最舒服的状态是对方回答结构化先直接说答案再用一到两句解释机制最后补一个实际场景。比如“TIME_WAIT会降不了但真正的问题是短连接太多我上次线上排查用ss统计了状态分布发现TIME_WAIT占了90%修改应用逻辑改用连接池就好了。”这个“结论-机制-场景”的三段式比长篇背诵管用得多。面试官不会因为你说错一个边角参数就否定你但会因为你的回答没有重点而觉得你基础不牢。准备TCP面试时与其把每本教科书的细节都背下来不如把每个核心问题用自己的话讲三遍每讲一遍都缩短长度、突出重点。我个人还有个笨办法但在面试时很有效把TCP状态机抄几遍再配合tcpdump抓一次真实的三次握手、四次挥手报文对照着看状态变化。抓过一次之后面试中无论怎么变形的问题你脑海里都有主线不会慌。这个建议同样适用于准备Java网络编程和Netty面试的同学——纸上得来终觉浅抓包一看全明白。

相关新闻

Java+OpenCV实战:HSV颜色分割与凸点判形识别几何图形

Java+OpenCV实战:HSV颜色分割与凸点判形识别几何图形

简介:这份PDF面向Java开发者与计算机视觉初学者,聚焦如何用Java调用OpenCV视觉库完成几何图像的颜色与形状识别,可解决传统RGB识别率不高、Java实现案例偏少的问题。资源包共1个PDF文件,约894KB,内容为完整技术文档&am…

2026/10/17 0:14:45 阅读更多 →
如何加载InternVL3_5-30B-A3B-MPO模型:bf16、8bit量化与多GPU部署的3种方法完整指南

如何加载InternVL3_5-30B-A3B-MPO模型:bf16、8bit量化与多GPU部署的3种方法完整指南

【免费下载链接】InternVL3_5-30B-A3B-MPO 项目地址: https://ai.gitcode.com/OpenGVLab/InternVL3_5-30B-A3B-MPO 点击查看 免费下载 InternVL3.5-30B-A3B-MPO 是 InternVL3.5 系列中基于 Qwen3-30B-A3B 混合专家(MoE)架构的多模态大模型&a…

2026/10/17 0:14:45 阅读更多 →
tcblaunch.exe丢失怎么办?安全修复方法全解析

tcblaunch.exe丢失怎么办?安全修复方法全解析

开机弹窗突然冒出“tcblaunch.exe文件丢失”或“找不到tcblaunch.exe”的时候,第一反应基本都是懵的。这个文件听着耳熟又陌生,系统还能正常进,可某个软件就是起不来,甚至整个桌面都有点卡。更烦的是,网上一搜&#xf…

2026/10/17 0:14:45 阅读更多 →

最新新闻

Avantesto与MATLAB桥接实战:从接口选型到数据契约的完整路径

Avantesto与MATLAB桥接实战:从接口选型到数据契约的完整路径

简介:面向需要使用Avantes光谱仪的科研与工程人员,这份资源提供了一套完整的基于MATLAB的光谱数据读取与处理工具箱。工具涵盖了设备通信、二进制文件解析、按时间与样本名筛选、按指定波长取值等常见功能,支持自定义时间范围,并能…

2026/10/17 0:50:09 阅读更多 →
Audacity 资源包实战:降噪、压缩、均衡与批量处理全指南

Audacity 资源包实战:降噪、压缩、均衡与批量处理全指南

简介:Audacity资源下载面向音频编辑初学者、播客制作者与音乐爱好者,提供一款免费、跨平台的开源录音与音频处理工具,可解决多轨录音、剪辑混音及降噪修复等实际需求。压缩包共1488个文件,约31.16MB,以png界面截图、ht…

2026/10/17 0:49:09 阅读更多 →
DeepSeek使用指南:网页、Ollama本地部署与API接入全攻略

DeepSeek使用指南:网页、Ollama本地部署与API接入全攻略

简介:DeepSeek的相关资料很多,但不少用户仍不清楚如何下载、选用模型或做本地部署。这份PDF上手即为零基础用户扫清障碍:从DeepSeek V3与R1两款模型讲起,既比较了各自的适用任务与成本差异,也直接给出了一套“按需选模…

2026/10/17 0:49:09 阅读更多 →
Deepseek本地知识库实战:Cherry Studio与AnythingLLM部署指南

Deepseek本地知识库实战:Cherry Studio与AnythingLLM部署指南

简介:本资源是一份面向企业用户与个人开发者的本地化AI知识管理实战指南,聚焦DeepSeek大模型与私有知识库的端到端部署方案,解决隐私敏感场景下知识检索、智能问答与离线分析等核心需求。资源以1个1.47MB的Word文档(.docx&#xf…

2026/10/17 0:48:08 阅读更多 →
雨花区语文辅导中心,赏识培训:语文提分,关键是“精批精改”

雨花区语文辅导中心,赏识培训:语文提分,关键是“精批精改”

“雨花区语文辅导中心”怎么选?长沙赏识培训给你一个关键标准:看老师能不能“精批精改”。语文和数学不一样——数学对错分明,语文的“对”与“好”之间有很大空间。一个负责任的语文老师,应该能指出孩子作文“哪里写得好、哪里可…

2026/10/17 0:48:08 阅读更多 →
PCA主成分分析:从二维点云中提取主方向与臂展长度

PCA主成分分析:从二维点云中提取主方向与臂展长度

做视觉和几何算法的人,迟早都会遇到这样一类需求:给我一堆散在平面上的二维点,告诉我这堆点整体朝哪个方向、整体有多长。手写笔画的走向判断、车辆检测时的车头朝向估计、工业零件定位时的长轴角度计算,甚至点云处理的初始摆正&a…

2026/10/17 0:48:08 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →