Python大法好!云应用状态机的可靠性测试全攻略

Transformer 常见面试题深度解析:从原理到工程实践 先给结论,再展开推导:面试官时间有限,先一句话回答核心,再补充细节;公式与直觉并重:能推导dk\sqrt{d_k}dk​​的方差来源,也能用"防止 softmax 饱和"的直觉解释;主动关联工程实践:提到 FlashAttention、KV Cache、GQA 等,体现落地经验;诚实面对不确定:不清楚的细节不要编造,可以说"这部分我了解思路,具体实现需要再确认";准备一个完整项目故事:能讲清"遇到什么问题 → 如何定位 → 用什么方案 → 效果如何量化"。 阅读详情

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


摘要

测试云应用程序中的状态机对于可靠性、性能和处理各种情况至关重要。自动化Python脚本模拟真实世界的用例,以暴露问题、错误、弱点和时间问题。

它们还有助于优化性能。其中包含的asyncio和多处理示例提供了对云应用状态机行为的宝贵见解,使产品团队能够构建更强大、更高效的应用。

测试云应用程序中的状态机可以使用它们的API和Python脚本。我之前开发的一个管理浏览器配置文件的云应用程序。这些配置文件用于自动化,包括web抓取,并且需要管理许多不同的浏览器。用户将通过API与服务交互来创建、启动、停止、删除、保存数据/状态等配置文件。

一般方法

在深入研究之前,让我们考虑一下状态机测试的一般方法:

  • 确保负责生成输出的代码与状态转换的逻辑分离。

    这种分离增强了状态机的可测试性。

  • 通过关注单个状态和转换来分解测试过程。

    设置初始状态,执行转换方法,并验证结果状态是否符合预期。这种粒度方法有助于精确定位错误,并确保每个转换按预期进行。

    这种系统的方法应该可以捕获大多数错误,但可能会遗漏一些极端情况(孤立地测试单个状态转换,对于复杂的、依赖于上下文的交互或通常只在特定或典型条件下出现的序列并不理想)。也可以很容易地自动化。

  • 测试状态机中每个可能的状态转换

    这包括从初始状态到最终状态的遍历,并检查所有中间转换。通过覆盖所有可能的路径,您可以验证状态机的健壮性。

    在这里,它不仅是关于预期结果定义的状态,而且还应该触发从所有状态的转换(您可能需要这样进行自动化测试)。

  • 通过测试边界条件来探索状态机的能力。

    确定状态机可以处理的最小和最大值,确保它在这些情况下正常工作。这有助于防止意外行为,并确保系统的可靠性。

  • 通过将状态机置于无效输入或意外场景中来测试状态机的弹性。

    验证系统在不破坏其功能或稳定性的情况下优雅地处理此类事件。这种方法旨在解决潜在的问题,并确保状态机处理各种条件的能力。

在更广泛的系统上下文中检查状态机和其他组件之间的交互。对使用状态机的应用程序或服务执行集成和系统测试。确保它在软件系统中按预期工作。

掌握状态机

复杂的状态机及其独特的状态和转换阵列的制作、测试和维护可能令人相当费解。这不仅仅是逻辑正确的问题;也是关于发现任何隐藏的问题,可能会给工作带来阻碍。

下面是我发现在测试状态机、确保它们的可靠性以及评估它们在压力、潜在冲突和外部因素影响下的承受能力时需要记住的一些策略的简要介绍。

测试竞态条件:

竞态条件对状态机的稳定性有很大的风险,因为多个实体可以并发地改变它们的状态。对竞争条件的测试包括并发地、顺序地发送各种转换请求。

通过有意引入冲突的请求,目标是发现可能导致不一致或错误状态转换的缺陷甚至潜在漏洞。

外部中断:

将混乱注入系统涉及测试场景,例如过期的访问令牌token,广泛的应用程序负载,以及在尝试状态更改时持续创建,删除或修改实体。

这种测试对于测试整个应用程序和系统的可靠性是必不可少的。

评估网络挑战:

在分布式系统中,网络通常是复杂性的来源。在网络条件中引入可变性(如延迟、数据包丢失或间歇性连接问题)有助于评估状态机的弹性。这些测试揭示了系统适应非最佳网络环境的能力,以及从中断中优雅恢复的能力。

此外,它可能是一种查找竞争条件的附加技术。当你测试一个软件时,用户可以使用api自动化与之交互来改变系统内部实体的状态,网络连接可能起着至关重要的作用——考虑这些自动化交互的潜在影响很重要。

在不同的网络配置文件上进行不同的测试。例如,您可以使用macOS (Network Link conditioning)或类似的简单工具来完成基本网络配置文件。

处理高负载时:

让系统在高负载下处理大量请求是至关重要的。此测试反映了许多实体同时尝试状态转换的真实场景。其目的是识别系统在极端压力下可能出现的潜在瓶颈、性能中断或意外行为。

作为一个软件,用户可以通过api自动化与之交互,以改变系统内部实体的状态,网络连接可能起着至关重要的作用——考虑这些因素的潜在影响很重要.

技术细节:

了解状态机的技术方面。虽然用户可能只看到两种状态(例如活动和不活动),以及两种转换,但幕后的代码逻辑可能更复杂。

例如,状态机可能涉及额外的状态或步骤,如准备、检查、加密/解密、同步、错误状态等。必须测试所有内容,包括状态机可能陷入任何这些隐藏状态的所有情况。测试人员应该知道并理解所有的状态。

编写脚本以确保可靠性

接下来,让我们考虑使用简单的Python脚本自动化前面提到的一些情况的几种方法。

使用asyncio和httpx

下面的Python脚本模拟了该场景(用户通过API与所考虑的服务进行交互,以创建、启动、停止和删除概要文件,如本文开头所述),通过重复执行不同的操作来初始化到不同状态的转换,从而将负载应用到云服务。

import asyncio
import httpx
HOST = 'https://foo.bar' # 被测应用程序的主机
"""
上述主机不是真实的。
我使用一个随机的主机作为演示目的。

"""
KEY = 'qatest'
HEADERS = {
"x-cloud-api-token": API_KEY
}
NUMBER_OF_CYCLES = 5
# 浏览器代理设置
start_payload = {
"proxy": "http://127.0.0.1:8080", # 你的代理
"""
这不是一个真实代理器。
它可能是只有你在运行的一个本地代理服务。
"""
"browser_settings": "debug"
}

异步函数:get profiles函数从服务获取浏览器配置文件,模拟用户请求配置文件列表的场景。​​​​​​​

async def get_profiles(cl: httpx.AsyncClient):
  resp = await cl.get(f'{HOST}/profiles_list', params={'page_len': 25, 'page': 1}, headers=HEADERS)
  return resp.json()

脚本启动循环,每个循环都涉及异步启动浏览器配置文件——用户并发创建多个浏览器并使用它们。​​​​​​​

async def profile_start(cl: httpx.AsyncClient, uuid):
  resp = await cl.post(f'{HOST}/profiles/{profile_id}/start',   json=data_start, headers=HEADERS)
  if error := resp.json().get('error'):
    print(f'profile_id} - {error}')

启动概要文件后,脚本激活(运行)概要文件,停止它们,然后删除在第一步中获得的所有概要文件。它显示了云服务的响应能力及其在资源清理方面的效率,这一点至关重要。​​​​​​​

async def stop_profile(cl: httpx.AsyncClient, uuid):
  resp = await cl.post(f'{HOST}/profile/{profile_id}/stop', headers=HEADERS)
  if error := resp.json().get('error'):
    print(f'{profile_id} - {error}')
async def delete_profile(cl: httpx.AsyncClient, uuid):
  resp = await cl.delete(f'{HOST}/profile/{profile_id}', headers=HEADERS)
  if error := resp.json().get('error'):
    print(f'{profile_id} - {error}')

进行中的测试

每个循环代表一个模拟的用户交互,创建、使用和删除浏览器配置文件。

async def main():
  async with httpx.AsyncClient(timeout=httpx.Timeout(timeout=300)) as cl:
  for _ in range(NUMBER_OF_CYCLES):
    List_of_profiles = await get_profiles(cl)
    tasks_start = [asyncio.create_task(profile_start(cl, profile['id'])) for item in List_of_profiles]
    await asyncio.gather(*tasks_start)
active_browsers = await get_active_profiles(cl)
  stop_tasks = [asyncio.create_task(stop_profile(cl,   active_browser['id'])) for active_browser in   active_browsers['data']]
  await asyncio.gather(*stop_tasks)
List_ofprofiles = await get_profiles(cl)
  del_tasks = [asyncio.create_task(delete_profile(cl, profile['id'])) for item in List_of_profiles]
  await asyncio.gather(*del_tasks)

使用多处理

我将简要讨论使用Python的multiprocessing模块在高负载下自动测试状态机的另一种方法。

该方法旨在通过并发执行测试脚本的多个实例来测试负载能力和状态机健壮性。

主要目标仍然是并行化脚本的执行,促进与服务和多个概要文件的同时交互,触发从一种状态到另一种状态的转换。

通过使用多处理,这种方法提供了一种有效的方法来模拟与云服务并发交互的大量用户。​​​​​​​

# …
# 你的函数
def run_script():
# 你的函数 1 (步骤 1)
# 你的函数 2 (步骤 2)
# …
# 你的函数N (步骤 N)
if __name__ == "__main__":
for runs in range(0, 5):
  processes = []
for i in range(20):
  p = multiprocessing.Process(target=run_script)
  processes.append(p)
  p.start()
for p in processes:
  p.join()

根据需要定制测试并进行监控

通过自定义循环次数、调整用户交互以及修改脚本以适应特定的API端点和测试场景,您可以获得有关应用程序在不同负载下的性能的宝贵数据。

请记住,您将需要必要的监视工具来获取服务器状态信息、评估服务器负载以及跟踪资源利用率和日志。

利用Grafana, Kibana, Prometheus等工具进行全面监控。此外,密切关注脚本接收到的响应,确保对应用程序的性能、响应代码、代码和代码进行全面评估。

总结

测试应用程序的状态机对于确保它们在各种条件下的可靠性、性能和弹性至关重要。

通过使用Python脚本,您可以自动化测试过程并模拟真实世界的场景,以发现潜在的问题、错误、漏洞和竞争条件,并优化系统性能。

无论是通过asyncio进行异步测试,还是通过multiprocessing进行并行负载测试,这些示例都为了解云应用程序状态机的行为提供了有价值的见解,帮助产品团队构建更健壮、更高效的产品。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​

16 硬件工程师笔面试高频考点真题解析——滤波器 文章系统介绍了滤波器的核心参数(截止频率、滚降斜率等)、分类(低通/高通/带通/带阻)及有源/无源滤波的区别。重点分析了开关电源采用LC滤波的原因(高效、强抑制),并详解了交流EMI滤波电路的工作原理。此外,阐述了信号干扰来源(传导/辐射/地耦合)、有源晶振串磁珠的作用(抑制噪声),以及巴特沃斯(幅频平坦)、切比雪夫(衰减快)和贝塞尔(相位线性)三种滤波器的特性差异与应用场景,为硬件设计提供实用参考。 阅读详情

相关推荐

21 硬件工程师笔面试高频考点真题解析——单片机

本文系统介绍了单片机的核心概念与应用知识,包括:单片机定义与选型要点(性能、存储、外设等);核心参数(主频、I/O、通信接口等);最小系统组成(电源、复位、晶振、BOOT);常见外设(GPIO、ADC、定时器等);GPIO工作模式(输入/输出);死机原因分析(硬件干扰、软件错误等);上电故障排查流程(电源、时钟、程序等);与DSP、FPGA的对比(控制vs运算vs可编程);常用通信总线特点(UART、I2C、SPI、CAN);看门狗功能(超时复位防死机)。内容涵盖单片机硬件设计关键要点,适合嵌入式开发者参考

XU157303764的博客 1314

Python代码实例!云应用状态机的可靠性测试全攻略

下面的Python脚本模拟了该场景(用户通过API与所考虑的服务进行交互,以创建、启动、停止和删除概要文件,如本文开头所述),通过重复执行不同的操作来初始化到不同状态的转换,从而将负载应用到云服务。这种系统的方法应该可以捕获大多数错误,但可能会遗漏一些极端情况(孤立地测试单个状态转换,对于复杂的、依赖于上下文的交互或通常只在特定或典型条件下出现的序列并不理想)。下面是我发现在测试状态机、确保它们的可靠性以及评估它们在压力、潜在冲突和外部因素影响下的承受能力时需要记住的一些策略的简要介绍。

我的博客 1083

15 硬件工程师笔面试高频考点真题解析——晶振

本文系统介绍了晶振的核心参数、选型与设计要点,涵盖无源晶振(频率、负载电容CL、ESR、激励功率)和有源晶振(供电电压、输出电平、相位噪声等)的关键指标差异。无源晶振成本低但依赖外部匹配,适合普通MCU;有源晶振集成度高、稳定性强,适用于高速通信(WiFi/USB)、射频及多芯片同步场景。文中对比了XO、TCXO、OCXO的温补精度与适用领域,并给出PCB布线规则(短走线、包地隔离)及不起振排查方法(参数匹配、干扰排查)。特别指出32.768kHz因分频便利和低功耗成为RTC首选,而高速接口需有源晶振

XU157303764的博客 2365

C++ 实习面试第一阶段:面向对象基础

C 和 C++ 都是通用编程语言,但设计思想和语言特性有所不同。C++ 相比 C 增加了以下重要特性:面试回答: C++ 并不是完全取代 C 的语言,它兼容了大量 C 语言的编程方式,同时提供了面向对象、泛型编程和资源管理等更丰富的特性。指针是存储对象地址的变量,引用是对象的别名。代码示例: 需要注意:两者都用于表示空指针,但类型和使用方式不同。为什么引入 nullptr?因为 NULL 在一些实现中本质上是整数 0,可能导致函数重载时产生歧义。 面试重点: C++11 以后优先使用 nullptr

zengjiajun2006的博客 1133

三相电机控制入门:端电压、相电压、线电压到底怎么测?(附实测波形对比)

本文为三相电机控制初学者提供了端电压、相电压和线电压的完整测量指南。通过厘清三者的物理定义与测量方法,详细讲解了如何搭建虚拟星形点电路,并对比分析了方波、SPWM和SVPWM三种主流控制模式下关键电压波形的核心特征与差异,帮助工程师掌握正确的示波器测量与波形解读技巧。

oauth7security的博客 657

OpenVins解析:基于滤波框架的SLAM

这一方式存在的关键问题是匹配耗时很长,对性能影响显著。可以参考ORBSLAM3中的匹配方式来对其优化,比如左右目匹配可以在极线上搜索,前后帧可以利用运动先验投影匹配。理论上加入路标点会提升精度,代价是增加了计算量。着重说下基于描述子的匹配:OpenVins中匹配的方式是robust_match(),里面是调用的opencv的。openvins中不仅仅进行了传统的MSCKF更新(状态向量中不包含路标点),还在。中进行了包含路标点的估计更新。图像帧到来时,利用IMU递推得到的位姿给该图像帧赋初值。

qq_18076309的博客 4078

Java 集合容器高频面试题全解:HashMap 树化阈值、1.7 死循环与 ConcurrentHashMap 演进(2026 招聘 JD 真题复盘)

HashMap 树化阈值 8 的泊松分布依据、退化阈值 6 的防抖设计、JDK 1.7 头插成环死循环的排查与修复、1.8 尾插后为何仍线程不安全、ConcurrentHashMap 放弃分段锁的原因与 ForwardingNode 协作扩容、computeIfAbsent 死锁陷阱、大集合找重复的场景题选型,附三层追问链自测。题目来源为 38 期公开招聘 JD 样本与字节、拼多多、建行、美团、快手公开面经。

蒙眼过河 418

域格4G网优模块获取

1、获取当前小区信息 接口说明 该命令用于获取当前小区信息。 语法结构 命令类型 格式 返回结果 Execute AT+SCELLINFO +SCELLINFO: <cellMode>,<mcc>,<mnc>,<lac>,<cellId>,<afrcn>,<cpi>,<rxLevel>

自由的幻想 2464

你背的Spring答案,全是5.x时代的:7.0.8源码一翻,80%的博客都过时了

这是 **Spring 7.0.8 源码系列的准备篇**,不急着逐行啃代码,只解决三件事:**为什么读、读什么、怎么读才不半途而废**。如果你正处在“注解一贴、项目一跑、日志一红、开始玄学”的状态,这篇就是给你写的。

xiaokjv的博客 269

距离多普勒谱(RD谱)绘制方法及理解

RD谱是信号处理领域常用的图形。原始信号往往是一维时域序列,如何将其二维化,并进行变换生成RD谱呢?由于刚刚接触,查阅了网络上、老师手里的资料,发现RD谱的绘制方法并不统一,有些存在一定问题。在此,将心得体会记录下来。

mddh_123的博客 3万+

UE4 Instanced Mesh 半透明渲染顺序不对解决

以绿色方块为Instanced Mesh为例。 正确的半透应该是这样的: 这是一般蓝图Actor方块,其半透是正常的。 然而Instanced Mesh因为过多,UE4不给你缓存正确的渲染顺序。所以,在不改代码的情况下,想解决Instanced Mesh半透问题,是不可能的。不正确的半透如下: 注意到错误发生在Instanced Mesh的方块与方块之间。 但我就是要解决,...

qq_41524721的博客 5569

【AI Agent面试系列】上下文管理1

工具返回价值密度最低、体积最大(常占 30%~60%),清理它收益最高、损失最小。摘要对话会丢语义细节,代价更高。按"价值密度从低到高"排序,不是按"体积从大到小"。

363

化学科学催化反应产率预测之Transformer建模SMILES(Datawhale AI 夏令营)

循环神经网络:由于所有的前文信息都蕴含在一个隐向量中,随着序列长度的增加,早期的上下文信息会逐渐被遗忘。卷积神经网络:受限的上下文窗口在建模长文本时存在天然不足。需要多层卷积操作才能处理长文本。在本篇文章中,我们学习了Transformer的基本架构及其在化学反应产率预测中的应用。通过利用Transformer的Encoder部分对SMILES进行建模,我们能够更有效地捕捉序列数据的特征,从而提高模型的预测性能。

不想宅的冷同学 1096

上位机面试:值类型 vs 引用类型

大部分教程会告诉你"值类型在栈上,引用类型在堆上"。如果 ④ 和 ⑤ 都用 99,⑤ 打印出 99 时你分不清是"第 3 条和第 4 条是最容易混的,也是面试最爱追问的地方。很多人把"传引用类型的参数"当成"引用传递",这是错的。所以那句"引用类型比较就是比地址"不是通则——跑 100 万次对比,数量级差异很明显。记住这张图,下面所有现象都能推出来。这一行,才是真正的"按引用传递"。的核心原因——泛型不需要装箱。生效了"还是"根本没生效"。,比背"栈和堆"高一个层次。,这是测试设计的基本要求。

hanxiaodihhh的博客 249

一.镜头知识之焦点,焦距,有效焦距,前焦距,后焦距

由光学系统中镜片的最后一面到像面的距离。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 5586

番外篇 | 关于YOLO11算法的改进点总结

关于YOLO11算法的改进点总结。🌈

小哥谈 2312

C++ 运行时多态与虚函数机制全面剖析【面试重点】

构成C++ 运行时多态必须是基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,并且派生类必须对该虚函数完成重写/覆盖(Override)。只有基类的指针或引用才能既指向基类对象,又指向派生类对象(切片机制);而只有完成了虚函数重写,派生类与基类才具备不同的函数行为,达到“指向谁就调用谁”的效果。在类成员函数的前面加上virtual关键字修饰,该成员函数就成为了虚函数。public:// 成员函数前加 virtual 修饰,声明为虚函数。

Fuyo_0209的博客 450

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

力扣35搜索插入位置(二分查找)

该题通过二分查找寻找插入位置。使用 mid = (left + right) >> 1 防止整数溢出,等价于 (left + right) / 2,但更安全。当 target <= nums[mid] 时,更新答案并继续向左查找;否则向右。最终返回最小的插入位置,时间复杂度 O(log n),空间复杂度 O(1)。

Pniubi的博客 193

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LeetCode 面试经典 150_位运算_只出现一次的数字 II(137_C++_中等)

LeetCode 面试经典 150_位运算_只出现一次的数字 II(137_C++_中等) 题目描述: 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。

huayimenghan的博客 127

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

微服务体系下DevOps运维岗位面试方案设计

建立岗位题库与评分卡:把本文的考察点固化为结构化评分表,减少面试官主观漂移。面试官认证与校准:定期做「同候选人多人评分」校准,提升一致性。持续迭代题库:每季度根据真实招聘结果回看,淘汰区分度低的问题。候选人侧:把 STAR 案例当成工程资产来维护,每次项目结束就沉淀一份,面试时自然从容。微服务下的 DevOps 与运维岗位,考察的核心不是「你会不会用某个工具」,而是面对复杂系统时,能否用工程化手段持续降低不确定性。用 STAR 原则把这一点问出来、讲出来,面试双方都能少走弯路。

流水账 641

【全栈面试】Excel 导入流程

本文系统梳理全栈工程师面试中关于Excel导入功能的五大核心考察维度:架构分层(DTO/BO/DO职责分离)、前后端校验分工、性能优化(异步+流式读取+批量插入)、异常处理策略(精准反馈与错误报告)、技术选型原理(EasyExcel vs POI)。强调全栈思维应贯穿“契约先行、解耦设计、安全兜底、体验优化”全流程,通过实例展示如何从同步阻塞到异步高效重构,实现高可用、可维护、用户体验佳的完整链路设计。

qq_38980678的博客 288

【AI Agent面试系列】AI Agent可观测、评测、安全相关的知识点

之前的文章介绍了和,本文主要介绍AI Agent的测评、可观测等知识。

297

2026-11-05-Go内存管理面试

内存分配器分层、三色标记、写屏障、STW、内存泄漏——Go 内存管理这块面试最容易问懵。这篇把分配器到 GC 到泄漏排查串成十连问,每题配答案框架和追问应对,文末给 GC 调优对照表。

利威尔的博客,主要分享一些go后端,agent相关知识,都是最新最前沿而且是免费的,在我的专栏里有各种方向的详细分类和内容整理,详细内容请阅读主页置顶文章,希望对你有帮助。 404

FreeRTOS深入解析(十)栈结构、水位线与运行时间统计

本文深入解析 FreeRTOS 中任务栈与 CPU 占用率两大核心机制。任务栈为每任务独立的向下生长内存,通过 pxStack 与 pxTopOfStack 定义边界,结合 0xA5 染色与水位线检测剩余空间,有效识别栈溢出;区分“栈溢出”(空间不足)与“写越界”(代码缺陷)两类问题。CPU 占用率则基于 DWT 计数器实现高精度时间统计,避免使用 SysTick 干扰,精准量化任务耗时。二者共同构成嵌入式系统排障基石。

qq_45290757的博客 180

秋招学习笔记 day109

在三次握手阶段,首先初始状态下,是 close 的服务端进入 listen 状态,然后客户端是发送一个序号以及 SYN 标志,然后进入 SYN_SENT 阶段,服务端收到之后发送一个 ACK,它 ACK 是客户端发的序号加一,然后发送 ACK 标志,以及自己的 SYN 标志。SYN 进入 SYN_RECEIVE 阶段之后,客户端收到服务端的确认之后,返回最后的确认和 SYN,这时候可以写数据,这时候客户端进入 ESTABLISHED 的状态,然后服务端收到确认后也是一样的。但是事实上,不知道就是不知道。

m0_57222081的博客 192

Java基础:String、StringBuilder 和 StringBuffer 的区别

都能在原有缓冲区上追加或修改字符。前者不保证线程安全,通常同步开销更低;后者的方法使用同步控制,但多个方法组合成的复合操作仍可能需要外部同步。性能会受到 JDK、使用方式和运行环境影响。面试时可以这样回答:String 不可变;StringBuilder 和 StringBuffer 可变,前者适合单线程频繁拼接,后者对主要操作提供同步,通常有额外的同步开销。的内容创建后不可变。拼接或替换等操作返回结果,原有对象不变;实现可能复用已有对象,不能笼统认为每次调用都必然新建对象。

cjpabc的博客 336
上一篇: UI自动化测试新手村:用pytest-html打造个性化HTML报告
下一篇: 故障测试用例设计思路
字节自动化测试
博客等级 码龄6年 7034粉丝 1810原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值