网站优化怎么样做,做设计的地图网站,一个优秀的网站,软件大全背景
很多名称其实看字面意思都挺抽象的#xff0c;有时看群里的测试大佬在不停蹦这类术语#xff0c;感觉很高大上#xff0c;但其实很多你应该是知道的#xff0c;只不过没想到别人是这样叫它的。又或者你的主编程语言不是 Java#xff0c;所以看不懂他们在讲啥#x…背景
很多名称其实看字面意思都挺抽象的有时看群里的测试大佬在不停蹦这类术语感觉很高大上但其实很多你应该是知道的只不过没想到别人是这样叫它的。又或者你的主编程语言不是 Java所以看不懂他们在讲啥因为大部分是 Java 后端的知识点或者是运维的知识 (这帮卷王)。
我尝试翻译成“人话”方便刚入行的新人。也欢迎大家在评论区补充。
1.技术概念名词类
1.1 脚手架
该名词如果熟悉工地的应该会知道脚手架是建筑时 房子周围搭的铁架子。软件开发中脚手架的意思就是一组预设的代码和文件结构方便开发人员更快地搭建一个基本的项目框架。前端框架大都有脚手架工具如使用 React 脚手架创建一个 react 项目。 $ npx create-react-app react-basic // npx create-react-app 是固定命令create-react-app是React脚手架的名称
生成如下 1.2 上下文
语义上就是理解某件事物需要了解它的环境、背景、条件等因素助于更准确解释信息。 业务上下文了解系统使用场景、业务需求、用户期望等 业务代码上下文程序或代码片段执行时包括变量的值、程序状态等有助于理解程序执行的条件和结果
1.3 设计模式
可以理解为 更好的解决问题的方法大部分设计模式的目的是解决复杂性、提高代码质量、降低耦合度并促进可维护性和可扩展性。例如写接口自动化时会想到用 yaml 做测试数据管理实现数据驱动这就是一种将测试数据和测试逻辑分离的设计模式。
1.4 集群
集群就是多台相互独立的计算机这些计算机通过网络连接在一起就组成一个计算机服务系统。在集群中每台计算机被称为一个节点Node每个节点都是运行各自服务的独立服务器节点之间通过网络通信进行协作共同完成任务或服务。
通俗讲就是一个餐厅的老板为了提高服务质量雇佣了多名服务员他们相互配合如果某个服务员忙不过来其他服务员可以帮助他或者接替他的工作确保每个顾客都能得到及时的服务以及每个服务员都负责特定的区域或特定类型的服务更有效地分工合作提高整个团队的工作效率。
1.5 分布式
分布式系统是由多台计算机组成的系统这些计算机通过网络连接在一起共同完成某个任务或提供某种服务不同的是每个节点负责的东西不同这些节点之间通过相互通信和协作来完成整个系统的任务。
通俗讲就是一个餐厅的老板为了提高服务质量请了多个厨师A 厨师负责炒菜B 厨师负责煮面C 厨师负责烤肉等等。每位厨师都独立地准备自己负责的菜品然后将做好的菜品交给服务员上菜
1.6 IO
在群里有时候看见那些大佬讨论性能时会提到 IO。这个词如果大学时有听过《计算机科学导论》这门课是会有印象的。
IOInput/Output即输入/输出是计算机系统中的一个重要概念用来描述计算机与外部设备如磁盘、网络、键盘、显示器等之间的数据传输过程。性能测试中需要关注 IO 的原因主要有几点 影响系统整体性能IO 操作的性能直接影响着整个系统的性能。如在 Web 应用程序中IO 操作包括从数据库读取数据、向客户端发送响应等这些 IO 操作的性能直接影响着用户体验和系统的响应速度 可能是称为瓶颈的原因某些场景下系统需要频繁地读取大量数据时IO 操作的性能可能成为系统性能的瓶颈导致系统响应速度变慢 资源消耗IO 操作通常需要消耗系统资源如 CPU、内存、磁盘等。当系统的 IO 操作过多或者 IO 操作的性能较差时可能会导致系统资源紧张影响系统的稳定性和可靠性
1.7 DDD
DDD领域驱动设计是一种软件开发方法论旨在通过强调领域模型的重要性来解决复杂业务需求和软件系统设计的挑战。
1.8 TDD
TDDTest-Driven Development测试驱动开发是一种软件开发方法论它强调在编写实际代码之前先编写测试用例并且通过测试驱动实现代码的开发过程。TDD 的核心理念是 “红 - 绿-重构”即先编写失败的测试红然后编写足够的代码以使测试通过绿
1.9 中台
这个概念不是国外的最早由阿里提出衍生出很多概念如技术中台、业务中台、组织中台、数据中台等。
具体可以看下这个摘编自《中台架构与实现基于 DDD 和微服务》 https://www.51cto.com/article/636223.html 1.10 网络可视化
之前有段时间好像比较流行这种把代码生成这种可交互式的网络可视化图了解这类工具的最佳方式就是自己写一下。
这里的 demo 是用 python 的【pyvis】创建交互式网络可视化和【inspect】提取对象的各种属性和信息。这里的 html 文件可以直接用 pyvis 的内置方法生成其实你需要的只是用 inspect 去把代码拆解提取下然后根据 pyvis 的方法连接好即可 这里写个 demo 自行体验下 from pyvis.network import Networknet Network() #新建一个对象net.add_node(a,label节点1,title我是节点1,color#00ff1e)net.add_node(2,label呵呵呵2,title我是节点2,color#00ff1e)net.add_node(3,label呵呵呵3,title我是节点3,color#00ff1e)net.add_edge(a, 2) #节点连接net.add_edge(a, 3)net.show_buttons(filter_[physics]) net.show(demo.html,notebookFalse) #最新版本的pyvis需要加notbookfalse的配置否则会报错
1.11 CDN
CDN 是内容分发网络Content Delivery Network的缩写。它就像是一个快递网络它把互联网上的内容比如网页、图片、视频等分散存储在世界各地的特殊 “快递站”节点上。当你在网上访问一个网页或者看一个视频时CDN 会找到离你最近的 “快递站”从那里取得你需要的内容然后迅速送到你手上。这样你就能更快地获取网站的内容而且网站也能分担更多的访问压力保持稳定运行。这里的节点在 CDN 中一个节点通常指的是一个边缘节点Edge Node它可以是一个服务器也可以是一个服务器集群。
2.测试相关
2.1 自动化测试的 PO 模式
学过 UI 自动化培训视频的都应该知道其实就是一种设计模式。为每个页面或一组相关页面创建一个 Page Object 类。这个类包含了页面的元素定位和与页面交互的方法。然后在测试用例中调用这些类主要目的是如果页面发生变化只需更新相应的 Page Object 类而不用修改测试用例。
登录页类 class LoginPage: def __init__(self, driver): self.driver driver self.username_field driver.find_element(By.ID, username) self.password_field driver.find_element(By.ID, password) self.login_button driver.find_element(By.ID, loginButton) def login(self, username, password): self.username_field.send_keys(username) self.password_field.send_keys(password) self.login_button.click()
测试用例 def test_login(): driver webdriver.Chrome() login_page LoginPage(driver) login_page.login(testuser, password123) assert Welcome in driver.page_source driver.quit() 2.2 造数工厂
这个词我也挺好奇是谁发明的本质上就是生成测试数据的脚本封装成平台所以干嘛不叫造数平台。
2.3 脏数据
测试执行或数据处理过程中由于一些异常情况、错误操作、或者测试环境配置不当等原因导致系统中出现了不符合预期的、异常或错误的数据。
2.4 流量录制回放
捕获和回放 HTTP 流量模拟生产环境中的流量以便进行性能测试、故障排除或者在其他环境中重现实际用户的操作。 相关文章https://www.cnblogs.com/nullllun/p/15205442.html 2.5 测试左右移
社区里这个词应该大家看多了至于实际意思是什么可能有些人不知道。正常的开发流程是开发➥测试➥运维 但现在我们的测试不想夹在中间想从流程中做更多的干预变成这样开发➥ ☜㊖测试㊖☞➥运维通俗的讲就是
开发不想做的事我做运维不想管的事我管。一句话开发/运维做得了的我要做开发/运维不想做的我更要做先做后测产品特许这就是测试左右移够不够清楚☻ 左右移
2.6 插桩
插桩本质就是在不改动源码的基础上插入或许修改你想要的代码如在 Android 开发中如下图第二步在转为.class 的字节码后插入代码使其生成的 dex 执行文件带有你插入的代码这过程中源码并未受到任何影响。
网图 python 的 ast 做的 demo 例子 import ast import astorexpr def addNumber(num1,num2): return num1 num2 # 将字符串解析成 ASTtree ast.parse(expr)# 定义要插入的打印语句insert_print ast.parse(print(Adding numbers:, num1, , num2, , num1 num2))# 在函数的主体中插入打印语句for node in tree.body: if isinstance(node, ast.FunctionDef): # 在函数定义的主体中的第一行插入打印语句 node.body.insert(0, insert_print.body[0])# 将修改后的 AST 转换回字符串modified_expr astor.to_source(tree)print(modified_expr)
运行后打印的结果是 def addNumber(num1, num2): print(Adding numbers:, num1, , num2, , num1 num2) return num1 num2
2.7 自动化测试金字塔
这个直接谷歌大部分解释都是这个⇲ 【测试金字塔最初的原型分三层底层是单元测试中间层是 API 测试上层 是 UI 自动化测试。而且底层的单元测试需要做最多的测试工作越往上测试工作应该越少。根据《谷歌软件测试之道》的经验三者对于精力投入的比例是把 70% 的精力放在单元测试20% 放在 API 测试而剩下 10% 的精力放在 UI 测试】 2.8 精准测试
一种测试思想简单来说就是当代码变更针对研发的代码变更点以及关联功能点进行测试。 类比看病时头痛就检查头肚子痛就检查肚子看起来经济实惠又快捷。但是症状之间可能存在相互关联某些症状可能是其他问题的表现如果医生缺乏对该病患整体状况的全面理解会耽误病情所以你在大城市医院看病一般都会走下血常规的检查。 相关知识可以看下这篇文章说得挺全https://juejin.cn/post/7230986641900683320 2.9 混沌测试
该概念来源于网飞就是拍出《纸牌屋》那家公司。其方式就是模拟系统中可能出现的故障和异常情况然后评估系统在不稳定状态下的稳定性和可靠性。个人感觉其实就是容灾演练这个名词出现在很多文章里但基本方向都在随机制造故障上描述成探索性测试那样。这种其实就应该交给运维和架构师来干不归测试才对
2.10 全链路
全链路通常是指对系统端到端执行路径从用户发起请求开始经过系统的各个组件和服务最终系统返回响应结果的过程。这一点会有些人会和接口测试混淆接口测试是验证接口的输入输出是否符合预期涉及的范围是一个独立的服务不涉及接口之间的交互和整体业务流程。以电商购买商品为例一个网上购物动作的一条链路 1. 用户浏览商品 2. 添加商品到购物车 3. 查看购物车 4. 结算购物车 5. 提交订单 6. 订单处理 7. 支付订单 8.订单确认 全链路压测也是压测压测整个购物系统的端到端执行路径从用户发起请求到系统响应完成的整个过程包括前端界面、后端服务、数据库、第三方服务等各个组件和服务的性能表现。
3.java 相关
3.1 jvm
下面三个词应该经常在各种文章里提到如果本身的技术栈里没有学过 java,是挺容易被混淆的多谷歌下就行了。
简而言之 jvm 就是一个虚拟机java 语言的解释器。jvm-sandbox 是在 jvm 的虚拟环境中创建一个独立的隔离环境类似你在 windows 下新建了一个虚拟环境运行其他系统一样。jvm-sandbox-repeater 可以理解为被个性化的 jvm-sandbox,专门封装了录制回放协议功能。 jvmJVM 是 Java 编程语言的运行环境它负责将 Java 源代码编译成字节码并在运行时执行这些字节码。JVM 提供了内存管理、垃圾回收、线程管理等基础设施使得 Java 程序能够在不同的平台上运行。 jvm-sandboxJVM-Sandbox 是一个工具或框架用于在 JVM 环境中创建安全沙箱sandbox。 jvm-sandbox-repeater jvm-sandbox-repeater 是 JVM-Sandbox 生态体系下的重要模块它具备了 JVM-Sandbox 的所有功能插件式设计旨在快速配置各种中间件封装提供请求录制/回放基础协议也通用了可扩展的各种丰富的 API。
3.2 maven
主要用于 java 项目的管理和构建这个词常见于技术栈是 Java 的测试文章中写过 Testng 应该清楚用 maven 来管理 TestNG 的依赖并且可以使用 maven 的命令来执行 TestNG 的测试。如果没用过 Java 的那类比最像的话maven 就有点相当于 python 的 pip
3.3 war 文件
在 java 写的测试平台中会看到打包部署这个流程。主语言为 python 的朋友大多会懵逼这个是啥毕竟 python 是解释性语言。
可以直接以源码形式部署。而 Java Web 要用 Maven 相应的构建命令去编译打包应用生成 WAR 文件。本质上是一个压缩包里面可以包含 Servlet、JSP、HTML、JavaScript、CSS 等文件以及相关的配置文件和依赖库。
以个人编码 Java Web 应用并发布到阿里云为例子大概流程如下
1. 需求分析、架构设计、编码实现
2. 软件测试: 点点点
3. 准备环境合适的实例 ECS安装 JDKTomcat/jboss(Servlet 的容器,数据库等
4. 编译打包本地开发环境使用 Maven 构建 Java Web 应用并生成 WAR 文件
5. 上传文件将生成的 WAR 文件上传到阿里云服务器
6. 部署应用将 WAR 文件复制到 Tomcat 的 webapps 目录中并启动 Tomcat 服务
7. 配置环境配置 Java Web 应用的运行环境包括数据库连接、日志配置、域名绑定等
8.监控和管理部署之后监控 Java Web 应用的运行状态
3.4 Servlet
看下面搜索到的解释让其与 urllib 做下对比就能理解了 ServletJavaServlet 是 Java Web 开发中处理 HTTP 请求和生成响应的规范和接口集合。开发人员可以根据 Servlet 规范编写自己的 Servlet通过继承 HttpServlet 类或者实现 Servlet 接口来处理不同类型的 HTTP 请求并生成相应的 HTTP 响应。与 Python 的 urllib 相比Servlet 更加高级、全面提供了更多的功能和灵活性适用于开发更加复杂的 Web 应用程序。 urllibPythonurllib 是 Python 中用于处理 HTTP 请求和响应的标准库之一提供了一组函数和类用于发送 HTTP 请求、处理服务器响应、管理 URL 等。urllib 包含了多个模块比如 urllib.request、urllib.parse、urllib.error 等分别用于发送请求、解析 URL、处理错误等。虽然 urllib 可以完成基本的 HTTP 请求和响应处理但相比于 Servlet它的功能和灵活性较为有限通常用于简单的网络访问和数据获取。
3.5 SDK
SDK 是 Software(软件) Development(开发) Kit(工具的缩写SDK 通常包含API 文档、示例代码、工具集、库文件、配置文件 。通俗来讲就是一个工具包。 大部分在社区里提到的 SDK 应该都是泛指 Java SDKJava SDK 也是一个工具集合它包含javac 编译器、Java 运行时环境JRE、Java 开发工具 (JDK)、Java 文档、Java 示例代码等 4.持续集成/持续交付
4.1 CI/CD
在招聘信息里经常看到XX 故弄玄虚的常用词测试不了解只因我们不是学的开发/运维很正常。CI/CD 其实就是持续集成 (Continuous Integration - CI) 、持续交付 (Continuous Delivery - CD) 或者 持续部署 (Continuous Deployment - CD) 的缩写。 两个 CD 相关但有区别,使用哪种方式取决于组织的需求和风险偏好 推送代码到代码存储库开发者将其更改推送push到版本控制系统如 Git。这触发了 CI 流程的开始 静态分析在代码提交到版本库后静态分析工具 (如 FindBugs) 会对代码进行检查, 寻找潜在的问题、代码问题和规范违规等 部署前测试在实际部署到测试环境之前执行各种测试包括单元测试、集成测试和其他自动化测试 打包并部署到测试环境通过构建工具如 Maven、Gradle打包应用程序并将其部署到测试环境。这个步骤可能涉及到配置管理、环境变量的设置等 部署后测试在应用程序成功部署到测试环境后执行一系列的后续测试以确保应用程序在真实环境中运行正常 自动化部署设置自动化部署流程在通过了所有测试并准备好发布时可以自动将应用程序部署到测试环境 部署到生产环境交付的版本通过自动化测试确保正确后需要手动触发部署到生产环境 自动化部署到生产环境 进一步的自动化部署流程在通过了所有测试后可以直接将应用程序部署到生产环境无需手动干预 回滚机制 : 设置自动回滚机制可以在发生问题时快速回退到先前的稳定版本 自动化测试编写如单元测试、集成测试、端到端测试的自动化脚本 测试自动化集成到 CI 流程 : 大白话就是确保每次代码提交都会触发自动化测试如我们常学的 Jenkins 就是实现这个功能 CI/CD 流程中嵌入监控步骤监测系统性能和稳定性 目的持续自动化和持续监控贯穿于应用的整个生命周期从集成和测试阶段到交付和部署从而提高开发团队的效率、质量和交付速度 持续集成 (CI) 包含通用流程 持续交付 (CD): 持续部署 (CD) 测试人员在 CI/CD 里可以参与的方面
4.2 DevOps
这个词也是最近招聘信息里喜欢加上去的对于测试写上这个可能就是想要你会点 docker 的指令和知识。
DevOps 是开发 (Development) 和运维 (Operations) 的合成词是一种软件开发和 IT 运维协同工作的文化和实践理念不是什么工具或者技术名称核心就是流程的统一和自动化。上面的 CI/CD 就可以称为 DevOps 流程的一部分还有大家耳熟能详的
容器技术如 Docker和容器编排工具如 Kubernetes都是为了更加方便的部署促进开发和运维之间的一致性。
5.工具模板
5.1 Swagger
Swagger 是一个工具集用于设计、构建、文档化和消费 RESTful Web 服务。非特指一个工具名称如 python 在 flask 想生成 swager 文档常用库是 flasgger使用注释的方式为你的接口添加描述包括接口名、参数、响应等信息最后生成类似下面格式的文档 5.2 Jinja
这个词大部分可能会在早期用 django 写的测试平台文章里看到它就是一个模板引擎一个静态 HTML模板中的特殊占位符允许编写类似于 Python 语法的代码。以下是例子 template.html !DOCTYPE htmlhtmlhead title{{ title }}/title/headbody h1{{ greeting }}/h1 ul {% for item in items %} li{{ item }}/li {% endfor %} /ul/body/html python from jinja2 import Environment, FileSystemLoader# 创建 Jinja 环境并指定模板文件所在的目录env Environment(loaderFileSystemLoader(templates))# 加载模板template env.get_template(template.html)# 提供数据data { title: Jinja Demo, greeting: Hello, Jinja!, items: [Apple, Banana, Orange]}# 渲染模板并输出结果output_html template.render(data)print(output_html)
6.数据库相关
6.1 慢查询
简单来说就是查询时间超过指定阀值可以设置的 sql
6.2 事务
面试时通常会问什么是事务和具有什么特性。
下订单当用户下订单时需要同时更新商品库存和用户订单信息。这两个操作必须要么同时成功要么同时失败以确保订单的一致性和完整性。在这种需求背景下可以将更新商品库存和插入订单信息的操作放在一个事务中执行如果任何一个操作失败则回滚整个事务避免出现库存不足或订单丢失的情况。
银行账户转账 把事务隔离等级设置为串行化 (最严格)即每次只允许一个事务访问数据库其他事务需要等待当前事务执行完成后才能继续执行。用户 A 发起转账操作时数据库会为其分配一个事务并且开始执行转账操作。在此期间数据库会将账户 A 的记录加锁阻止其他事务对其进行读取或修改此时用户 B 想给账户 A 转账就要等用户 A 的转帐事务提交解锁。 事务是指数据库管理系统中的一组操作这些操作要么全部成功执行要么全部失败回滚以保持数据库的一致性和完整性 四个特性原子性、一致性、隔离性、持久性 实际运用
6.3 ES
ES 通常指的是 Elasticsearch它是一个开源的分布式搜索和分析引擎 看文章https://www.cnblogs.com/buchizicai/p/17093719.html 7.职场类
PM产品经理
CEO首席执行官
CTO首席技术官
CFO首席财务官
HRBP人力资源业务伙伴
IT信息技术修电脑买软件都找 IT
PM项目经理
8.数据类
DAU日活用户 Day Activite Users
WAU周活跃用户
DNU日新增用户
DLU日登录用户
DKAU日核心活跃用户
PCU最高同时在线用户
PV页面访问量
UV独立访客
最后感谢每一个认真阅读我文章的人看着粉丝一路的上涨和关注礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 软件测试面试文档
我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。