路由器
🚀 什么是路由器(Router)路由器是一种连接多个网络并根据路由规则“转发数据包”的网络层设备。 它工作在 OSI 第三层——网络层。在不同的局域网、广域网之间,路由器负责决定数据包“下一跳到哪去”。 🧩 路由器的主要作用1️⃣ 实现不同网络之间的通信不同网段(如 192.168.1.x 与 192.168.2.x)无法直接通信,需要路由器连接。 2️⃣ 选择最佳路径(路由选择)路由器根据路由表决定数据从哪条路径走。 3️⃣ 数据包转发(路由转发)收到数据包 → 查看目的 IP → 查路由表 → 转发到下一跳。 4️⃣ 网络隔离 + 安全管理NAT、防火墙、ACL 等功能能隔离内外网。 5️⃣ 提供无线功能(家用路由器)无线路由器 = 路由 + 交换机 + AP(无线接入点)+ DHCP 等功能。 📡 路由器的核心功能详解① 路由选择(Routing)通过路由协议建立路由表,如: 静态路由 RIP(距离向量) OSPF(链路状态) BGP(互联网骨干路由协议) 路由器计算最优路径,然后填到路由表。 ② 路由转发(Forwarding)路由器按“最长前缀匹...
ARP和RARP
✅ARP(Address Resolution Protocol)地址解析协议作用:👉已知IP地址,求MAC地址 使用场景:🎬主机在发送数据时,链路层需要目标MAC地址。如果ARP缓存里没有,就必须用ARP 工作流程:👔 ARP 请求广播: 源主机广播:“谁是 IP = X.X.X.X?请把 MAC 地址告诉我。” ARP 响应单播: 目标主机回复:“我的 MAC 地址是 xx-xx-xx-xx-xx-xx。” ARP 缓存 主机保存 IP ? MAC 的映射,提高效率。 特点:🕵️ 请求是广播 响应是单播 属于网络层和链路层之间的协议 ✅RARP(Reverse ARP)反向地址解析协议作用:👉已知 MAC 地址,求 IP 地址。 典型用途:🎬早期用于 无盘工作站。无盘设备只有网卡 MAC,没有本地存储 IP,需要通过 RARP 服务器获取 IP。 工作流程:👔 主机发送 RARP 请求广播: “我的 MAC 地址是 xxx,谁能告诉我我的 IP?” RARP 服务器单播响应: 告诉它对应的 IP。 缺点(导致淘汰的原因)...
路由选择协议
🚦 路由选择协议(Routing Protocol)“路由选择协议”用于让路由器自动发现网络拓扑、计算路径、维护路由表,从而实现数据包的最优转发。 📌 路由选择协议分类静态路由 vs 动态路由静态路由(Static Routing):管理员手动配置,拓扑变化不会自动更新 动态路由(Dynamic Routing):路由器通过协议自动交换信息并更新路径 内部网关协议(IGP) vs 外部网关协议(EGP)判断依据:自治系统(AS) 类型 范围 协议 IGP 同一个 AS 内部使用 RIP、OSPF、IS-IS、EIGRP EGP AS 之间 BGP 距离向量、链路状态、路径向量 协议类型 工作方式 特点 示例 距离向量(DV) 路由器告诉邻居“我到各目的地的距离” 简单、收敛慢、环路风险 RIP 链路状态(LS) 路由器向全网泛洪 LSAs,计算最短路径 收敛快,适合大网,复杂 OSPF、IS-IS 路径向量(PV) 记录路径经过的 AS 序列 适合互联网规模 BGP 📕主流路由协议RIP(Routing Information Pr...
DomReady时间
定义DomReady 时间 = 页面可互动(初步可用)的时刻是衡量前端页面加载体验非常核心的性能指标。 DomReady = 从页面开始加载 → HTML 解析完成 → DOM 树构建完成 的时间,即: HTML被完全解析 DOM树已经构建好 但CSS、图片、视频等静态资源可能还没加载完 它对应浏览器事件: 1document.addEventListener("DOMContentLoaded", fn) DomReady 和 load 的区别DomReady 比 load 时间早得多。 指标 触发时机 是否等待CSS 是否等待图片/视频 DomReady(DOMContentLoaded) DOM树构建完成 会等待 CSS(因为 CSS 可能会阻塞 DOM) ❌不等待图片 window.load 页面所有资源加载完毕 ✅ ✅ DomReady 如何计算常见的计算方式: 1const domReadyTime = performance.timing.domContentLoadedEventEnd -...
测试覆盖率工具
JaCoCoJaCoCo(Java Code Coverage)是Java代码覆盖率分析工具,用来统计: 哪些代码被执行了 哪些代码没有执行 覆盖率百分比是多少 JaCoCo一般与JUint+Maven/Gradle一起使用,生成HTML报告 主要适合: 软件测试实验 Java项目 单元测试覆盖率分析 覆盖类型 含义 Line Coverage(行覆盖) 哪些代码行被执行 Branch Coverage(分支覆盖) if/else/switch的分支覆盖情况 Instruction Coverage(指令覆盖) JVM字节码层面更细粒度的覆盖率 Method Coverage(方法覆盖) 调用了哪些方法 Class Coverage(类覆盖) 多少类被执行测试 Maven项目中使用JaCoCo示例 在pom.xml添加插件 12345678910111213141516171819202122232425262728<build> <plugins> <plu...
python入门
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273# hello worldprint("Hello World!")# 多行输出print("""第一行第二行第三行""")print("first line")print("second line")print("third line")print("first line\nsecond line\nthird line")# 读入字符串s=input()# 读入整数数字n=int(input())# 格式化输出name=input()print("I am "+name)# 保留两位小数n=float(input())print(...
压力测试
定义压力测试是一种非功能测试,用来评估系统在高负载、极端压力下的表现。它的目的是让系统不能正常工作,压垮它,看看会在哪里坏、怎么坏、坏得是否优雅。 压力测试=把系统压到极致,观察性能瓶颈和系统崩溃点。 压力测试和性能测试的关系 测试类型 目的 性能测试 测试正常负载下的性能(响应时间、TPS、QPS、吞吐量) 负载测试 测试逐步增加负载时间时系统何时达到最大并发 压力测试 超过最大负载后继续加压,直到崩溃 稳定性/耐久测试 长时间运行系统,观察是否泄露、积累错误 压力测试是性能测试的一种,属于极限破坏类测试。 压力测试的目的 找出系统性能瓶颈(CPU、内存、数据库、IO、网络) 找出系统最大承载能力上限 观察系统在高压下的:稳定性、可用性、恢复能力 发现潜在的:死锁、内存泄漏、线程池耗尽、数据库连接耗尽、队列积压、超时、错误率上升 压力测试流程 确定测压目标 确定压测指标 编写压测脚本 准备测压环境 执行压力测试:超过负载逐步加压,直到系统出现明显异常 记录日志和监控 分析瓶颈并优化 重新测压验证优化效果 压力测试中的关键指标 性...
功能测试
定义功能测试是按照需求/规格从外部行为验证软件是否实现了规定的功能。关注输入处理输出是否与需求一致,属于黑盒测试范畴。 目标 验证功能实现是否满足需求(正确性) 发现业务逻辑、界面、数据校验等错误 验证系统各模块、接口间的交互是否按要求工作 为发布决策提供质量判断(功能维度) 测试范围功能点(功能列表中的每一项)界面交互(按钮、输入框、提示信息)边界和异常处理(输入校验、错误提示)业务流程(多步骤用例)数据持久化(数据库写入/读取)系统集成点(第三方接口、消息队列)权限/角色控制 按目的分几类功能测试单功能测试:单个功能点(例如“修改密码”)。集成功能测试:模块间协作(例如:下单→支付→发货)。回归功能测试:功能变更后保证老功能不被破坏。冒烟功能测试:核心功能是否能工作(发布前快速验证)。验收测试(或UAT):交付前按业务方验收用例检验。 用例设计技术等价类划分(合理分组相同处理的输入)边界值分析(关注边界、上下1位)判定表(复杂条件组合)因果图(把逻辑转为图再转用例)状态迁移测试(有状态机的功能)场景/用户流程(端到端业务场景)错误推测...
非增量集成测试和增量集成测试
非增量集成测试非增量集成测试定义一次性集成测试。 所有模块在开发完成后一次性组合起来进行测试。模块间的接口和交互问题在整个系统集成后才发现。 模块少、依赖关系简单的项目。开发周期较短、临时性小型项目。 非增量集成测试特点测试模块完成后,不分阶段,直接整体集成可以快速验证系统整体功能,但定位问题困难那 非增量集成测试优点测试准备简单,不需要构建复杂的测试驱动。对小型、模块数量少的项目比较适用。 非增量集成测试缺点定位困难,出现问题难以追踪到具体模块。发现问题较晚,修复成本高,风险大,如果多个模块有问题,调试非常复杂。 增量集成测试增量集成测试定义每次开发完成后逐步集成测试,每次只集成部分模块。每次集成后进行测试,发现问题及时解决,然后再集成下一个模块。 可以分为: 自顶向下(Top-down) 先测试顶层模块,再逐步集成底层模块 需要使用桩Stub模拟未完成的底层模块 自底向上(Botton-up) 先测试底层模块,再逐步集成上层模块 需要使用**驱动(Driver)**模拟未完成的上层模块 混合 顶层和底层同时逐步集成,中间模块逐步完成 适合模块多、依赖复杂的系统...
浸泡测试
定义浸泡测试(Soak Testing)是一种性能测试,主要用来检验系统在长时间高负载运行后是否会出现内存泄露(Memory Leak)、句柄泄漏(Handle Leak)、性能逐渐变慢、CPU 占用持续上升、响应时间变长、服务崩溃或重启、数据积压、队列堆积的问题。 浸泡测试关注的是系统长时间运行的稳定性,而不是瞬间性能。 目的 发现资源泄露的问题 验证系统是否稳定运行数小时或数天 观察性能是否有下降趋势 检测数据库连接池是否正确释放连接 发现长时间运行后才能出现的隐藏Bug 流程 设置一个长期稳定、可持续的负载 持续监控系统资源监控指标包括: 指标 重点 内存使用率 是否不断上升(内存泄露) CPU使用率 是否持续升高 磁盘IO/网络IO 是否出现阻塞 GC(垃圾回收情况) Full GC是否越来越频繁 线程数、连接数 是否不断增加 系统响应时间 是否不断变慢 测试结束后分析趋势图 浸泡测试与压力测试的区别 测试类型 目的 特点 压力测试 找极限、让系统崩溃掉 高负载、短时间 浸泡测试 看长时间是否稳定 中等负...
