自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 面试的面经6

我会保留现场并尝试复现,然后控制导入沙发量,比如导入15个是正常,但是导入第16个出现了问题,我就会把这第16个后面的沙发单独重新导入,如果一开始导入就出现问题,那么就是这个沙发的问题,比如尺寸过大不兼容等,这个就要交回给美术同学处理这个沙发,如果没有问题,就说明这个虚拟场景容量已经满了,不能够再继续导入了,要做扩容等,这个就要交给开发同学处理,然后修复完成之后,作为测试员的我就要再次进行回归测试,如果有问题就继续修复,没有问题那就可以验收了。阻挡测试,角色或控制器碰到物体前方,会被挡住,不能穿过物体。

2026-01-31 20:14:45 284

原创 面试的面经5

我会用学过的测试知识,对我的项目里的每个接口都进行了测试,虽然中途会出现问题,但是自己会查找相关资料,借助AI来解决出现的问题,从而直到整个项目的UI自动化测试结束没有bug为止,其中我也会对我的项目使用 jmeter 进行高并发测试,测试完之后还会编写测试报告。其次,工作上测试不仅是找bug,而且还要保障产品的质量,测试作用于一个软件完整的生命周期,从需求开始测试,提前发现问题,降低修复成本。4)如果开发人员还不承认,那么就召开 bug 评审,人员要有测试代表一方,开发人员一方,还有产品经理一方。

2026-01-29 21:51:53 662

原创 面试的面经4

测试不仅仅是找bug,还有就是要保障产品的质量,测试也贯穿软件生命周期整个阶段,从需求开始介入,目的是为了降低修复成本,提前发现问题。5)验收与总结:进行回归测试,确定没有问题之后就可以上线了验收了,最后输出测试报告,复盘测试中遇到的问题。2)测试计划:确定测试资源、风险评估,以及选择什么样的测试策略(比如用什么工具,自动化覆盖多少)4)测试执行:执行用例发现bug,提交bug单并跟踪状态,直到开发修复并验证通过。1)需求分析:参与需求评审,从测试角度分析需求合理性,明确测试范围和验收标准。

2026-01-28 21:54:09 71

原创 面试的面经3

post 相对安全,因为数据是放在 body 中,不会被直接缓存或记录在历史记录中,但是也不是绝对安全的,可以通过抓包工具获取到数据。get 安全性差,因为参数能够显示在 URL 中,会被浏览器历史记录,服务器日志缓存下来,容易泄密,比如登录时候的密码。post 浏览器先发 header ,服务器响应100 Continue,浏览器再发送 data ,服务器响应200。get 有长度限制,因为 URL 有长度限制,(每个浏览器限制不同,通常是几kb),不适合传大文件或大数据。旧网址被废弃了,以后去新网站。

2026-01-22 21:04:08 596

原创 测试知识点

缺点:测试后置(1.测试前面存在的问题推迟到测试才发现,导致项目大面积返工,失去及早修复的机会;2.必须留够足够的时间给测试活动,否则导致测试不充分,给用户的体验就会差);隐式等待1000ms:driver.manage().timeouts().implicitlyWait(Duration.ofMillis(1000));一个接口可以是一个事务,多个接口也可以是事务,一个流程可以是事务,事务代表一个完整的功能。需求分析--测试计划--测试设计、测试开发--测试执行--测试评估--上线--运行维护。

2026-01-20 13:36:52 694

原创 面试的面经2

6.给出场景:一个页面里只有一个按钮,点击这个按钮会进入到一个新的界面,这个新的界面只有“北京”这个文本元素,怎么获取到这个“北京”文本元素(点击按钮之后不会新增一个界面)3)在使用driver.switchTo().frame()方法,通过frame的ID或WebElement对象切入到该iframe中。4)此时Selenium的焦点已经在frame内部,在通过Xpath/Css Selector 定位“北京”文本元素即可。语句覆盖、判定覆盖、条件覆盖、路径覆盖、判定条件覆盖、条件组合覆盖。

2026-01-17 10:31:36 148

原创 面试的面经1

多态是同一个父类引用,指向不同的子对象,调用同一个方法的不同种结果:比如动物都有叫的动作,对于猫来说是喵喵叫,对于狗来说是汪汪叫接口是一种行为的规范,只声明方法,不实现;接口的作用:1)定义规范:例如一个USB接口有读取和传输等功能,A类和B类实现这个USB接口就必须要重写这两个功能方法2)解耦:降低依赖,鼠标或者键盘实现这个接口,而主机调用这个鼠标或者键盘,哪怕鼠标和键盘里的代码再怎么修改,都不回影响到这个主机的代码改变3)支持多实现:一个类可以实现多个接口,但是在继承上只能是单继承。

2026-01-15 23:34:19 642

原创 抽奖系统测试报告

模块化页面测试:基于页面维度(如登录页、活动大厅、抽奖页等)拆分测试类,使每个测试类紧密聚焦于特定功能的逻辑验证,从而保证测试结构的清晰度,便于后续问题的快速定位与排查。用户从列表中选择心仪的活动并点击“立即抽奖”按钮发起请求,系统实时进行抽奖逻辑运算,即刻反馈中奖或未中奖的结果,并同步更新奖池中的奖品剩余库存数据。结合抽奖系统的功能模块与测试需求,自动化测试采用模块化设计思想,按页面拆分测试类,通过公共工具类实现代码复用,确保测试脚本的可维护性与扩展性。管理员拥有对奖项的增删改权限。

2026-01-08 18:08:22 1045

原创 多用户网页聊天室系统测试报告

测试范围覆盖用户登录、注册、会话聊天、创建新会话等关键模块,共执行功能测试用例-----------条、自动测试用例--------条,核心功能(如登录流程、注册流程、会话聊天等)均符合需求预期,未出现阻塞性缺陷。结合多用户网页聊天室系统的功能模块与测试需求,自动化测试采用模块化设计思想,按页面拆分测试类,通过公共工具类实现代码复用,确保测试脚本的可维护性与扩展性。同时,系统能够正确处理多用户并发消息发送场景,保证消息显示的及时性与完整性,避免消息丢失或错乱,满足网页版多用户聊天室的基本交互需求。

2026-01-07 13:36:22 1035

原创 线程安全问题的原因和解决方法

1)线程在操作系统中,随机调度,抢占式执行(根本原因,我们不能够干预)解决方法:加锁,通过关键字synchronized()来完成加锁操作。,只有t1执行完才能执行t2,在t1执行的过程中,t2是阻塞等待。由多个线程并发执行引起的bug,这个bug称为线程安全问题。引起的累加bug,导致得到的count值不是100000。例如上述代码,通过加锁操作,可以让这两个t1和t2线程。2)多个线程,同时修改同一个变量。3)修改操作,不是"原子"的。上面的这段代码就是两个线程。

2025-07-25 13:10:41 250

原创 多线程的区别和联系

4.线程是当下实现并发编程的主流方式,通过多线程,就可以充分利用好多核CPU;线程也不是越多越好,线程数目达到一定后,把多个核心都利用充分之后,此时继续增加线程不会在提高效率了,甚至可能会影响效率(线程调度也是有开销的)线程安全问题:一个线程出现问题抛出异常,其他线程可能会一并带走。一个进程崩掉了之后,不会影响到其他的进程。2.进程是系统资源分配的基本单位,线程是系统调度执行的基本单位。3.同一个进程里的线程之间,共用同一份系统资源。1.一个进程可以包含多个线程,不能够没有线程。进程和线程的区别和联系。

2025-07-12 23:16:17 404

原创 TreeMap、TreeSet和HashMap、HashSet

目录一、TreeMap&TreeSet1.数据结构:2.时间复杂度:3.键/元素: 4.TreeMap基本操作: (与 HashMap 类似,但 put, get, remove 等操作会根据键的顺序进行):5.TreeMap遍历: 6.TreeSet基本操作 (与 HashSet 类似,但 add, remove 等操作会根据元素的自然顺序或比较器顺序进行):7.TreeSet遍历:二、HashMap&HashSet1.数据结构:2.时间复杂度:3.键/元素:4.HashMap基本操作:5.HashMap

2025-05-30 19:30:26 990

原创 优先级队列(堆)

3.从k下标开始遍历,先得到堆头元素,拿去跟当前下标k的数组的元素进行比较,如果堆头元素大于当前数组下标k的值,那么就要弹出堆头元素,把数组当前下标k的值入堆。4.进行比较,如果elem[parent]<elem[child]就交换,循环前提是parent>=0;2.把堆头元素和最后一个元素进行交换,然后usedsize--,这样就会减少一个元素然后向下调整。1.如果是求前k个最小,那么就要创建大根堆,如果求前k个最大,那么就创建小根堆。2.创建大小为k的大根堆,把前k个元素放入堆中。

2025-05-18 21:18:44 384

原创 数据结构知识点1

如果要计算递归的时间复杂度,公式就是:递归次数*每次递归代码执行次数。时间复杂度是一个程序中算法执行的次数,我们用大O渐进表示法计算。注意:泛型只能接受类,所有的基本数据类型都要使用包装类。、在修改后的运行次数函数中,只保留最高阶项。,则去除与这个项目相乘的常数。空间复杂度是计算临时占用存储空间大小的量度。取代运行时间中的所有加法常数。、如果最高阶项存在且不是。

2025-03-19 12:51:58 475

原创 Java语法基础知识点4

/自定义用户名错误异常类,继承Exceptionsuper(msg);//自定义密码错误异常类,继承Exceptionsuper(msg);if (!throw new UserNameException("用户名错误");if (!throw new PassWordException("密码错误");System.out.println("登陆成功");try {System.out.println("捕获到passwordexception...");

2025-03-09 15:22:08 691

原创 Java语法基础知识点3

/抽象类也是类,可以在里面定义普通方法和变量,注意的是抽象类一定要被继承//抽象方法,发生继承时要重写抽象方法,抽象方法不用写具体的方法体System.out.println("在睡觉!");@OverrideSystem.out.println("吃狗粮!");//一定要重写抽象方法,否则Dog也会是抽象类也要用abstract修饰。

2025-03-05 10:05:21 866

原创 Java语法基础知识点2

组合与继承相似,但是不同的点就是组合是对象之间是has-a的关系,例如汽车,汽车有零配件轮胎、方向盘等,创建一个Car类时,同时创建零配件轮胎、方向盘对象,如果销毁Car类,那么零配件也会一同销毁。的是,如果子类和父类出现同名情况下,不使用super关键字的话,会优先访问子类同名的成员变量/方法;如果没有同名的话,就会访问父类的成员变量/方法,如果访问的变量在子类和父类都没有,那么就会报错。是个包子权限,在不同包的情况下,只有子类能够访问被protected修饰的父类的成员变量/方法。

2025-03-01 20:33:42 919

原创 Java语法基础知识点1

static修饰成员变量/方法,那么这就意味着这个成员变量已经不是对象所特有的,我们可以通过类名.变量能够访问,就算不实例化对象,一样可以访问到被static修饰的成员变量或者方法,被static修饰的成员变量/方法叫做类变量/类方法。在这个数组中,arr是引用变量,存储在虚拟机栈中,如果我们直接输出的是arr,那么我们得到的结果就是这个数组的地址,而不是{1,2,3,4};需要特别注意的是,如果实例化对象之后,代码块的访问顺序是1,2,3;代码块有三种,静态代码块,实例代码块(构造代码块),普通代码块。

2025-02-27 22:16:53 733

原创 【实验内容-1】自定义异常类的应用

1.写一个抽象类账户类(Account)

2024-05-24 11:20:54 451

原创 抽象类和接口

包含抽象方法的类我们称为。

2024-05-21 17:16:05 1083

原创 继承与多态2

和继承类似组合也是一种表达类之间关系的方式也是能够达到代码重用的效果。组合并没有涉及到特殊的语法(诸如extends这样的关键字),仅仅是将一个类的实例作为另外一个类的字段。继承表示对象之间是is-a的关系,比如:狗是动物,猫是动物组合表示对象之间是has-a的关系,比如:汽车汽车和其轮胎、发动机、方向盘、车载系统等的关系就应该是组合,因为汽车是有这些部件组成的。// 轮胎类// ...// 发动机类// ...// 车载系统类// ...class Car{

2024-05-20 21:07:28 710 1

原创 继承与多态1

成员方法没有同名时,在子类方法中或者通过子类对象访问方法时,则优先访问自己的,自己没有时再到父类中找,如果父类中也没有则报错。3.2.2成员方法名字相同。

2024-03-29 10:59:41 1226 1

原创 Java类与对象

类是用来对一个实体对象来进行描述的,主要描述该实体对象具有哪些属性外观尺寸等,哪些功能用来干啥),描述完成后计算机就可以识别了。// 创建类field;// 字段(属性) 或者 成员变量method;// 行为 或者 成员方法class为定义类的关键字,ClassName为类的名字,{}中为类的主体。类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法。1.3定义类的练习我们来定义一个学生类。

2024-03-27 21:25:40 803

原创 Java中数组的定义和使用

数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。1.2数组的创建及初始化数组的创建:格式如下T[] 数组名 = new T[N];T:表示数组中存放元素的类型T[]:表示数组的类型N:表示数组的长度// 创建一个可以容纳10个int类型元素的数组// 创建一个可以容纳5个double类型元素的数组// 创建一个可以容纳3个字符串元素的数组数组的初始化:数组的初始化主要分为动态初始化以及静态初始化。1.动态初始化:在创建数组时,直接指定数组中元素的个数2.

2024-03-27 11:18:47 1748

原创 Java中方法的使用

方法语法定义的格式如下:下面举一个例子:实现一个两个整数相加的方法// 方法的定义注意事项1.修饰符:现阶段直接使用固定搭配2.返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void3.方法名字:采用小驼峰命名4.参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开5.方法体:方法内部要执行的语句6.在java当中,方法必须写在类当中7.在java。

2024-03-27 09:58:29 919

原创 初识Java

通过这篇博客,我们懂得Java的结构是创建一个类,类中包含方法,方法中含有语句。还有了解标识符和关键字。知道Java的数据类型中有基本数据类型有四类八种,还有引用数据类型。两个不同类型进行运算的时候会进行整型提升。位运算符中左移就相当于乘法,又移就相当于除法,移多少个就要乘/除以2的多少次方。Java的输入是要导包,使用Scanner读取键盘输入的信息。printf和println是输出,但是println会自动换行。

2024-03-26 21:26:09 711

原创 字符串函数和内存函数的使用和理解

通过这一篇内容的学习,我们要懂得并熟悉运用字符串函数strstr和strtok的功能,还有内存函数memcpy、memmove、memset、memcmp这四个的功能,其实与我们之前学过的字符函数strcpy、strcmp大同小异,而memcpy和memmove的作用可以说是几乎一样的,只不过memmove是用来处理相同元素的情况。

2023-12-26 20:40:36 1173 2

原创 指针练习2

pa指向数组a首元素的地址,如下图所示,pa++指向的是数组的下一个位置,对其解引用之后得到a[1]的值也就是at下面我们可以通过画图来理解第一个输出是POINT,因为cpp加1,指针向前移一个单位,指向了c+2再通过解引用得到对应的值第二个输出是ER,我们先看第一个解引用符号*++cpp是指向c+1的位置的,但是它再通过二次解引用*--之后,那么原本指向c+1的位置就指向了c的值,然后得到了ENTER,但是它得到了ENTER的值后数组向右移了3个单位,那么得到的最终结果是ER。第三个输出是ST,cp

2023-12-21 21:27:32 703 1

原创 指针练习1

在我们做指针相关的题目时,我们要学会画图,知道指针指向的是什么地方,通过画图之后才能够更能直观看到指针所指的位置,如果我们懂得画图之后,那么在遇到指针题目的问题就会迎刃而解了。

2023-12-21 11:11:59 598 1

原创 深入理解指针5

通过这一篇文章,懂得qsort库函数的模拟实现,以及sizeof和strlen的对比区别sizeof1. sizeof是操作符2. sizeof计算操作数所占内存的⼤⼩,单位是字节3. 不关注内存中存放什么数据strlen1.strlen是库函数,使⽤需要包含头⽂件string.h2.srtlen是求字符串⻓度的,统计的是\0之前字符的隔个数3.关注内存中是否有\0,如果没有\0,就会持续往后找,可能会越界。

2023-12-19 21:02:39 687 5

原创 初始指针4

qsort排序也叫快速排序,可以排序任意类型的数据,而我们熟知的冒泡排序,只能用来排序整型数据。,下面是在cpluspius网站搜索到的qsort函数参数类型以及使用说明。那我们现在换成其他类型数据进行排序试试看。qsort是用来排序任意类型数据的。以上是排序结构体的数据。

2023-12-18 11:03:59 545 1

原创 初始指针3

通过这篇博客学习知道了,1.二级指针就是用来存放一级指针变量自身的地址的,通过双重解引用就可以得到变量的值;2.指针数组是存放指针的数组,数组中的每一个元素都是地址;3.字符指针是用来存放字符变量的地址的变量,字符指针有两种使用方式;4.数组指针是存放数组的地址的变量;5.二维数组传参与一维数组传参是差不多的,二维数组其实就是一维数组里还有个数组,用指针接收时,接收的是二维数组中第一个元素的地址,也就是第一行的地址;6.函数指针变量中的函数名与&函数名都是代表的是函数的地址;

2023-12-13 20:27:05 1044 3

原创 初始指针2

到了这里,第一,我们要学会assert的使用;第二,在调用函数时什么时候使用传址调用,什么时候使用传值调用;第三,还有对数组名的理解和数组名的两个特殊,出了这两个特例之外,数组名就是数组首元素的地址;第四,学会使用指针来访问数组;第五,知道数组调用过去函数接收是用指针接收,int*数组名==int 数组名[]本质是一样的;第六,理解冒泡排序的核心思想,在遇到排序问题的时候,冒泡排序一般是可以解决的,因为冒泡排序仅用于整形排序。

2023-12-11 11:47:32 1157 1

原创 初识指针以及野指针的概念

在c语言的学习过程中,我们大都会创建到变量,但是我们所创建的变量其实就是向内存申请一片空间内存或者叫地址,所以每个变量都有自己的一片空间内存或者地址,就像每个房间都有对应自己的门牌号一样,而我们可以根据得知一个地址很快找到所对应的值,就像得知门牌号一样很快找到对应的房间,生活中我们把门牌号也叫做地址,在计算机中我们把内存单元的编号也称为地址,在c语言中,如图,p是用来存放a的地址,在解引用之后,也就是*p其实就是指向a那片空间所对应的值,但是我们通过地址更改了a的值,换种简单点的说法就是*p==a。

2023-12-07 10:23:19 443 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除