TCP 三次握手和四次挥手(传输层)
概念与机制三次握手验证双向收发、同步初始序号并协商选项。TCP 全双工,收到 FIN 只关闭一个方向,ACK 与本端 FIN 常分开发出,因此多见四次挥手。大量 CLOSE_WAIT 多是应用未及时关闭。主动关闭方用 TIME_WAIT 补救最后 ACK 并隔离旧报文,排查还要结合连接队列和进程状态。 理解“TCP 三次握手和四次挥手(传输层)”不能停在名词定义,还要找到状态保存位置、报文字段和交互顺序。发送端、接收端、中间设备和应用各自看到的现象并不相同;同一个超时可能来自解析、路由、队列、握手或业务处理。先画最小正常时序,再分别加入丢包、重复、乱序、对端重启等条件,才能理解协议为何需要缓存、确认、窗口或超时,而不是把这些机制当作孤立规则。 实践与误区验证时先记录目标地址、协议、端口、开始时间和请求标识,再把客户端错误、系统连接状态、网关指标、服务日志和抓包放到同一时间线。单一工具只能证明它实际观察的层次:端口可达不等于应用成功,收到响应也不代表业务数据已持久化。遇到异常应提出可证伪假设,选择能区分不同原因的证据,不要凭一次 Ping、一个状态码或一张抓包截图直接下结论。 ...
计算机网络专题:分层模型、HTTP、HTTPS、DNS、TCP、UDP、ARP 与 NAT
概念与机制分层把通信责任拆开:应用层管语义,传输层管进程交付,网络层管跨网段路由,链路层管相邻节点。一次请求串起 DNS、ARP、IP、TCP 或 UDP、TLS 与 HTTP。排障应依次验证解析、路由、端口、安全握手和应用响应;Ping 成功只证明 ICMP 有回应,TCP 可靠也不等于业务事务成功。 理解“计算机网络专题:分层模型、HTTP、HTTPS、DNS、TCP、UDP、ARP 与 NAT”不能停在名词定义,还要找到状态保存位置、报文字段和交互顺序。发送端、接收端、中间设备和应用各自看到的现象并不相同;同一个超时可能来自解析、路由、队列、握手或业务处理。先画最小正常时序,再分别加入丢包、重复、乱序、对端重启等条件,才能理解协议为何需要缓存、确认、窗口或超时,而不是把这些机制当作孤立规则。 实践与误区验证时先记录目标地址、协议、端口、开始时间和请求标识,再把客户端错误、系统连接状态、网关指标、服务日志和抓包放到同一时间线。单一工具只能证明它实际观察的层次:端口可达不等于应用成功,收到响应也不代表业务数据已持久化。遇到异常应提出可证伪假设,选择能区分不同原因的证据,不要...
一台主机上只能保持最多 65535 个 TCP 连接吗?
概念与机制TCP 连接由四元组区分,服务器能在一个监听端口接受大量不同来源,所以整机连接数不直接受 65535 限制。固定源 IP 反复连接同一目标时,客户端更易耗尽临时端口,TIME_WAIT 与共享 NAT 也会压缩空间。真实瓶颈还有文件描述符、内存、CPU、队列和网卡。 理解“一台主机上只能保持最多 65535 个 TCP 连接吗?”不能停在名词定义,还要找到状态保存位置、报文字段和交互顺序。发送端、接收端、中间设备和应用各自看到的现象并不相同;同一个超时可能来自解析、路由、队列、握手或业务处理。先画最小正常时序,再分别加入丢包、重复、乱序、对端重启等条件,才能理解协议为何需要缓存、确认、窗口或超时,而不是把这些机制当作孤立规则。 实践与误区验证时先记录目标地址、协议、端口、开始时间和请求标识,再把客户端错误、系统连接状态、网关指标、服务日志和抓包放到同一时间线。单一工具只能证明它实际观察的层次:端口可达不等于应用成功,收到响应也不代表业务数据已持久化。遇到异常应提出可证伪假设,选择能区分不同原因的证据,不要凭一次 Ping、一个状态码或一张抓包截图直接下结论。 工程设...
HTTP 常见状态码总结(应用层)
概念与机制状态码是摘要:1xx 表过程,2xx 表成功,3xx 引导后续动作,4xx 指向请求问题,5xx 表服务器未完成有效请求。202 只表示接受,304 表示复用缓存,401 偏认证,403 偏授权,502 是无效上游响应,504 是上游超时。API 不应把所有失败包装成 200,错误体还需稳定代码和追踪标识。 理解“HTTP 常见状态码总结(应用层)”不能停在名词定义,还要找到状态保存位置、报文字段和交互顺序。发送端、接收端、中间设备和应用各自看到的现象并不相同;同一个超时可能来自解析、路由、队列、握手或业务处理。先画最小正常时序,再分别加入丢包、重复、乱序、对端重启等条件,才能理解协议为何需要缓存、确认、窗口或超时,而不是把这些机制当作孤立规则。 实践与误区验证时先记录目标地址、协议、端口、开始时间和请求标识,再把客户端错误、系统连接状态、网关指标、服务日志和抓包放到同一时间线。单一工具只能证明它实际观察的层次:端口可达不等于应用成功,收到响应也不代表业务数据已持久化。遇到异常应提出可证伪假设,选择能区分不同原因的证据,不要凭一次 Ping、一个状态码或一张抓包截图...
计算机基础学习路线:网络、操作系统、数据结构与算法
计算机基础不是需要一次背完的题库,而是理解软件运行边界的四组模型:网络解释数据如何跨主机传递,操作系统解释程序如何使用硬件,数据结构决定信息如何组织,算法则决定计算如何推进。 四条主线如何衔接学习网络时,先建立分层视角,再追踪一次请求经历的 DNS、TCP、TLS 和 HTTP。重点不只是记协议字段,而是能解释超时、重传、连接复用与拥塞控制如何影响接口延迟。抓包分析比单纯背诵更容易形成可靠理解。 操作系统部分应围绕资源抽象展开:进程和线程对应执行与隔离,虚拟内存连接地址空间与物理内存,文件系统组织持久化数据,I/O 多路复用解决大量连接的等待问题。学习每个机制时,都应追问它解决了什么竞争或成本,以及应用程序能观察到哪些现象。 数据结构与算法最好结合学习。数组、链表、哈希表、树和图提供不同的访问与更新能力;二分、搜索、回溯、动态规划和贪心则在这些结构上探索答案。复杂度分析用于估算增长趋势,但工程选择还要考虑缓存局部性、常数成本、数据规模和可维护性。 推荐练习方式每个主题采用“模型—实验—复盘”三步。先画出关键组件与状态变化,再用最小实验验证,例如用 curl 和抓包观...
Java基础常见面试题总结(下)
基础面试下篇往往更偏工程细节:对象怎么创建、拷贝是深是浅、I/O 模型差异、以及容易被忽略的语言边角。 核心概念对象创建路径:new、反射、克隆、反序列化,以及 Unsafe 等非常规手段。浅拷贝 vs 深拷贝:clone() 默认浅拷贝,引用字段仍共享;深拷贝需递归复制或序列化(有代价)。BIO/NIO/AIO:阻塞 I/O、多路复用与非阻塞回调,Netty 等高性能网络库建立在其上。 关键机制与实践面试答「创建对象几种方式」时,按使用频率与可读性排序,并补充单例、工厂、池化等设计层模式。谈 I/O 时区分「字节流/字符流」「缓冲」「NIO 的 Channel/Buffer/Selector」。涉及 String 常量池、Integer 缓存 (-128~127) 等,用简短代码验证比背结论更有说服力。 常见误区与小结 认为 clone() 一定是深拷贝。 把 NIO 等同于「一定比 BIO 快」(小连接、低并发场景未必)。 忽略 transient、serialVersionUID 与自定义 ...
Java基础常见面试题总结(中)
「Java 基础面试(中)」通常承接语法与 OOP,转向异常处理、资源管理、泛型、反射与注解——这些题考察的是「异常会不会吞」「注解谁在解析」。 核心概念异常:Throwable 分 Error 与 Exception;受检异常必须处理或声明,非受检(RuntimeException)可选。try-with-resources 自动关闭 AutoCloseable,比手动 finally 更安全。反射在运行时获取 Class、字段与方法;注解本身只是元数据,生效依赖编译器或运行时处理器(如 Spring 扫描 @Component)。 关键机制与实践回答面试题时建议分层:先说语言规则,再说 JVM/框架怎么用。例如「反射为什么慢」——方法访问需校验与装箱,且难以内联;框架通过缓存 Method、使用 MethodHandle 或字节码生成优化。注解三要素:定义、保留策略(SOURCE/CLASS/RUNTIME)、处理方(编译期 APT 或运行时 Reflection)。 常见误区与小结 catch (Exception e) {} 空块吞掉故障...
Java 值传递详解
「Java 是值传递还是引用传递」是经典争论。结论:Java 只有值传递——传的是实参值的拷贝;对引用类型而言,拷贝的是引用(地址),不是对象本身。 核心概念形参/实参:调用时实参绑定到形参变量。值传递:形参得到副本,改形参不影响实参变量。引用传递(C++ 等):形参与实参同一存储,改形参即改实参。Java 中引用变量保存的是对象的访问地址,传参时复制这份地址到形参。 关键机制与实践案例 1:交换两个 int,方法内 swap 无效,因交换的是副本。案例 2:传入对象引用,在方法内 obj.field = x 会改堆上对象,因副本与实参指向同一对象。案例 3:方法内 obj = new Object() 只改形参指向,不影响外部引用。String 不可变,方法内 s = "b" 同样只改局部引用。 1234static void change(User u) { u.setName("A"); // 外部可见 u = new User("B"); //...
Java 魔法类 Unsafe 详解
Unsafe 提供接近 C 指针的低层能力:直接内存、字段偏移、CAS、绕过构造器实例化对象。Atomic*、ConcurrentHashMap 等 JUC 组件在 JDK 8 及以前大量依赖它。 核心概念位于 sun.misc/jdk.internal.misc,单例获取受类加载器限制(普通代码直接 getUnsafe() 会抛 SecurityException)。能力包括:allocateMemory 堆外内存、compareAndSwap* 原子更新、按偏移读写对象字段、park/unpark 线程阻塞唤醒。实现依赖 native 方法。 关键机制与实践业务代码不应直接使用;读 JUC 源码时关注 CAS 循环与 volatile 语义。Java 9+ 模块系统进一步封装 Unsafe,官方倾向 VarHandle 与 Foreign Memory API 替代。若学习实验,可通过反射读取 theUnsafe 静态字段(仅限本地理解,勿用于生产)。 12// 概念示例:CAS 自增思想(实际用 AtomicInteger)// while (!unsafe....
Java 语法糖详解
语法糖不改变语义,只让代码更简洁;理解「编译后长什么样」有助于调试字节码、排查泛型擦除与性能问题。 核心概念常见糖:增强 for → 迭代器循环;自动装箱/拆箱 → Integer.valueOf/intValue;泛型 → 擦除+桥方法;枚举 → 合成类与静态数组;try-with-resources → finally 关闭;Lambda → invokedynamic + 函数式接口。Switch 字符串/模式(新 JDK)同样是编译期变换。 关键机制与实践用 javap -c 或 IDE 反编译查看脱糖结果。自动装箱在循环里可能产生大量临时对象;Integer 缓存 -128~127 导致 == 与 equals 表现不一致。增强 for 遍历 ConcurrentModificationException 时在并发修改集合会 fail-fast(除非用并发容器或迭代器 remove 规则)。 123// 源码:for (String s : list) { ... }// 近似:for (Iterator<St...