自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(120)
  • 资源 (3)
  • 收藏
  • 关注

原创 CROSS JOIN 和 INNER JOIN 的区别

INNER JOIN 基于指定的连接条件(通常是两表的列匹配)返回满足条件的行。仅当两表的连接条件为真时,才会包含结果。CROSS JOIN 和 INNER JOIN 是 SQL 中两种常见的表连接方式,它们在功能和应用场景上有显著差异。CROSS JOIN 返回两个表的笛卡尔积,即第一个表的每一行与第二个表的每一行组合。CROSS JOIN 的结果集是两表行数的乘积,可能非常大;INNER JOIN 的结果集通常较小,仅包含匹配行。INNER JOIN 的结果集是两表的交集,仅包含匹配的行。

2026-03-26 14:14:40 87

原创 Pytest Fixture 主要用法举例

功能关键字/参数最佳使用场景清理工作yield关闭文件、数据库或浏览器。作用域共享资源,如 Web 服务器或大型数据库连接。自动运行日志记录、性能计时或全局环境设置。多数据运行使用多组不同数据测试相同的逻辑。动态创建工厂函数 (return 内部函数)当一个测试需要动态创建多个对象时。跨文件共享全局通用的配置或工具。

2026-03-06 10:59:38 427

原创 Pytest的Fixture与XUnit风格的区别

Pytest中Fixture与XUnit风格测试框架对比:Fixture作为Pytest核心特性,提供灵活的资源管理(支持参数化、作用域控制和自动清理),通过依赖注入实现代码重用;而传统XUnit风格(setup/teardown)作用域固定且需手动调用。关键差异在于Fixture具有更优的作用域控制、依赖管理和维护性。虽然XUnit适用于简单测试,但Fixture凭借其扩展性和简洁性成为现代测试首选方案,特别适合处理复杂测试环境和共享资源场景,能显著提升测试代码的可读性和可维护性。

2026-03-05 22:11:00 371

原创 软件测试 - 黑合测试用例设计方法总结

正交测试法是一种基于统计学和组合数学的高效测试设计方法。它通过精心挑选的正交表,用远少于穷举法的测试用例数量,实现了对所有因素两两组合的均衡覆盖。这种方法特别适用于配置测试、兼容性测试、多参数输入的功能测试等存在“组合爆炸”风险的场景。尽管存在对多因素交互覆盖不足等局限,但其在提高测试效率、降低测试成本方面的巨大优势,使其成为测试工程师工具箱中不可或缺的利器。掌握并合理应用正交测试法,可以显著提升软件测试的有效性和效率。十、总结与比较以上方法各有适用场景:等价类划分和边界值分析适合数值输入;

2026-03-02 20:04:07 831

原创 Linux命令高频面试题

本文介绍了10个常用Linux命令面试问题及其解答,涵盖文件操作、文本处理、权限管理和系统监控等方面。主要内容包括:使用ls -a查看隐藏文件、less分页浏览文件内容、find搜索文件、grep查找文本、chmod修改权限、ps/top查看进程、ping测试网络、df/du检查磁盘空间、tar压缩解压文件以及I/O重定向操作。文章强调实际操练的重要性,建议通过虚拟机模拟场景加深理解,并推荐查阅man手册提升命令熟练度。这些基础命令的掌握是Linux系统管理的核心技能。

2026-02-27 16:12:36 525

原创 SQL常见面试题

本文摘要:SQL查询实战指南涵盖了基础查询、多表关联、聚合函数与窗口函数等核心内容。重点包括:1)基础查询语法与分组统计;2)多表关联中的JOIN类型选择与空值处理;3)窗口函数的高级应用(RANK/ROW_NUMBER区别)和框架子句使用;4)复杂业务场景解决方案;5)性能优化技巧(索引策略、覆盖索引等)。特别强调LEFT JOIN与INNER JOIN的区别、GROUP BY陷阱以及窗口函数边界定义方法,为SQL查询提供了全面实用的参考框架。

2026-02-27 14:36:20 1066

原创 Selenium和Playwright对比

本文对比分析了Selenium和Playwright两大Web自动化测试框架的核心差异。Selenium采用客户端-服务器架构,支持多语言但通信开销较大;Playwright直接嵌入浏览器协议,执行效率更高。功能方面,Playwright提供更智能的自动等待、网络拦截等内置功能,而Selenium生态更成熟。性能测试显示Playwright通常更快,但Selenium在分布式测试和浏览器支持上更具优势。建议新项目优先考虑Playwright,现有Selenium项目可评估部分迁移。两者各有优劣,需根据项目需

2026-02-26 18:11:27 1001 1

原创 什么是金丝雀(Canary)部署?

摘要:金丝雀部署是一种渐进式软件发布策略,通过将新版本先小范围部署给部分用户,在监控验证通过后再逐步扩大范围。核心优势在于降低发布风险,避免全量更新导致的大面积故障。实施要点包括流量控制、实时监控和快速回滚机制,关键技术涉及服务网格、API网关等流量路由工具。该策略适用于高风险变更、新功能上线等场景,但需注意数据兼容性、会话保持等挑战。相比蓝绿部署,金丝雀部署具有风险更低但耗时更长的特点,两者可结合使用。(149字)

2026-02-26 16:24:32 997

原创 什么是蓝绿部署?

本文介绍了蓝绿部署这一零停机发布策略。通过维护两个相同的生产环境(蓝绿环境),实现新版本在绿环境测试后瞬时切换流量,确保业务连续性。文章详细阐述了蓝绿部署的工作原理、关键要素(基础设施即代码、自动化部署等)及优势(零停机、快速回滚),同时也分析了其资源成本高、数据同步复杂等挑战。与其他部署策略比较后指出,蓝绿部署特别适合对可用性要求高的场景,但实施时需注意版本兼容性、自动化水平和充分测试。该策略是实现安全可靠发布的强有力工具。

2026-02-26 16:10:08 821

原创 JMeter、Postman 和 SoapUI 在做接口测试上的优势和缺点

本文对比分析了JMeter、Postman和SoapUI三款主流接口测试工具。JMeter擅长性能测试,支持多协议,但学习曲线较陡;Postman以API开发和协作为核心,界面友好但性能测试能力有限;SoapUI专注于WebService测试,对SOAP支持最佳但高级功能需商业版。建议根据项目需求选择:性能测试选JMeter,API协作选Postman,WebService深度测试选SoapUI。三款工具各有所长,可根据测试类型、团队规模等实际需求组合使用。

2026-02-25 23:50:36 831

原创 性能测试(Performance Testing)、压力测试(Stress Testing)和 负载测试(Load Testing)三者的区别

性能、负载、压力三个非功能性测试的目标部分重叠、实施工具也有重叠,常被混淆对待。验证系统在正常或高峰用户/事务负载下能否维持可接受的性能水平(响应时间、错误率)。验证系统在压力消除后的 恢复能力(能否自动恢复?观察系统在持续负载下的稳定性(是否有内存泄漏、资源耗尽等)。验证系统是否满足既定的性能指标(如响应时间、吞吐量)。识别性能瓶颈(CPU、内存、I/O、网络、数据库等)。确定系统在目标负载下的最大处理能力(吞吐量)。确定系统的 崩溃点 或 性能断崖式下降点。验证系统在内存溢出或磁盘写满时的处理逻辑。

2026-02-25 14:04:40 973

原创 算法 - 计算一个四则运算字符数组(Java)

实现一个一位数字的四则运算计算函数,输入是一个char数组,输出是计算结果。比如,输入是 char[] inputs = {'1','+','2','*','3'},输出是7。输入的字符里面,如果是数字,则只有1位;如果是符号,则只有加减乘除四个运算符,没有括号...

2021-03-27 14:27:13 1013

原创 算法-根据输入数组,用后一个值减去前一值得到差值,找出最大的差值(Java)

贪心算法: 根据输入数组,返回后一个值减去前一值的差值,找出最大的值(注意先后顺序)package algorithm;import java.util.Arrays;public class Greedy { public static void main(String[] args) { int[] prices = {7, 9, 1, 5, 3, 6, 4}; int max = getMaxProfit(prices); .

2021-03-25 19:33:37 1336

原创 Java编码规范-创建和销毁对象

使用static factory 方法取代构造方法(Consider static factory methods instead of constructors) 当构造方法参数很多时考虑使用builder (Consider a builder when faced with many constructor parameters) 单例模式的属性用私有的构造方法或者是一个enum 类型初始化(Enforce the singleton property with a privagte constr

2021-03-12 18:18:19 361

原创 Pattern - Factory Method (Creational Pattern)

Factory Method 顾名思义就是负责创建对象的方法。Factory Method适用情景:当一个类无法预测创建什么类型的对象时 当一个类想要它的子类去指定要创建的对象时 当类将责任委托给子类,并且想在子类中本地化信息时例子:Pattern - Template Method pattern (Behavioral Pattern)中的createProcessor就是工厂方法。...

2021-02-24 17:01:45 212

原创 Pattern - Adapter pattern (Structural Patterns)

Adapter pattern适用情景:如果想使用已有的类(Adaptee),并且自身(Target)的接口并不满足需求 想要创建一个可以重复使用的类(Adapter),这个类要与另一个无关的类(Adaptee)交互,也就是说两个类之间不一定有兼容的接口 (只用于对象适配器-Object adapter)需要使用多个已有的子类(Adaptee1, Adaptee2),但是为这些子类(Adaptee1, Adaptee2)分别创建子类是不切实际的,这时可以创建一个对象适配器(Adapter)用来适配其

2021-02-24 14:07:55 142

原创 Pattern - Template Method pattern (Behavioral Pattern)

Template Method pattern适用情况:为了一次性实现一个算法的不变部分,子类实现变化的部分时。 为了避免代码重复,当子类中的共同行为应该被分解出来并写在通用类中时。首先确定现有代码中的差异,然后将这些差异拆分成新的操作,最后将不同的代码替换成一个template method,这个template method调用这些新的操作。 为了控制子类扩张。可以定义一个template method, 这个template method在特定的地方调用hook操作,从而允许扩展只发生在这些特

2021-02-23 13:36:50 287 2

原创 sql - delete和truncate区别

delete 和 truncate 都可以删除表数据。区别:delete是DML命令,truncate是DDL命令。truncate可以删除整张表的数据而不维护表的完整性,delete可以删除指定的数据, delete不能绕过完整性强制机制。| Key | delete | trucate || Basic|删除指定的数据|删除整张表的数据|| where 语句 | 可以带where语句 |不能跟where|| Locking| 删数据前锁定要删除的数据| 锁整张表|| 回滚| 可以回滚变更

2021-01-09 22:31:23 1207

原创 算法 - 找出数组中第二大的元素(java)

public class SecondMax { public static void main(String[] args) { SecondMax count = new SecondMax(); Integer[] arr = {10, -2, 33, 140, 25, 33, -2, 0, 140}; //1. Use sorting, output is : //The second max element is 33

2021-01-09 22:16:38 887 2

原创 算法 - 计算数组中每个数字出现的次数(java)

public class Count { public static void main(String[] args) { Count count = new Count(); int[] arr = {10, -2, 33, 140, 25, 26, 10, -2, 0, 25, 10, 33, -2, 50}; count.printElementsCount(arr); // output is (0出现1次,-2出现2次,以此类

2021-01-09 21:37:40 3712

原创 算法 - 从数组中找出和为给定值的所有组合(java)

public class Pairs { public static void main(String[] args) { Pairs pairs = new Pairs(); // 输出结果为: //[1, 2] //[1, 2, 0] //[1, 3, 0, -1] //[1, 3, -1] //[3] //[3, 0] //[0, -1, 4] .

2021-01-09 21:22:57 3046

原创 算法 - 从数组中找出两个数和为给定值的组合(java)

public class Pairs { public static void main(String[] args) { Pairs pairs = new Pairs(); //1. no duplicated elements, result is : //arr[0] + arr[11]= 40 //arr[3] + arr[5]= 40 //arr[6] + arr[8]= 40 //arr[1

2021-01-09 21:18:41 661

原创 Pattern - Telescoping Constructor pattern

Telescoping Constructor pattern当一个类属性较多,需要创建接受许多参数列表的构造方法时,需要这种设计方法。次等的写法(重复代码较多):public class Person { private final String name; private final String lastName; private final int age; private final String profession; private fi

2020-12-29 18:36:18 300

原创 汉诺塔(Hanoi towers)- java

汉诺塔递归算法如下:输入的n表示的是环的数量 假如有三个柱子A,B,C,将A上的n个环移动到C上,始终保持由小到大的次序: 首先把前面n-1个环从A移动到B上,使用C作为辅助 然后将最后一个环从A移动到C上 最后将B上的n-1个环从B移动到C上,使用A作为辅助 public class Hanoi { public static void main(String[] args) { Scanner scanner = new Scanner(System.in)

2020-06-13 16:17:19 311

原创 java学习总结 - 线程

程序-进程-线程程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。进程(process)是程序的一次执行过程,或是正在运行的一个程序。动态过程:有它自身的产生、存在和消亡的过程。如:运行中的QQ,运行中的MP3播放器程序是静态的,进程是动态的线程(thread):进程可进一步细化为线程,是一个程序内部的一条执行路径。若...

2020-02-16 18:40:48 216

原创 java学习总结 - 反射

Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。Java反射机制提供的功能在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时调用任意一个对象的成员变量和方法 生成动态代理反射相关的主要API...

2020-02-16 11:45:39 227

原创 java学习总结 - IO流

注意: 流正的开,反着关(close)File类

2020-02-15 22:53:29 166

原创 java学习总结 - 泛型

Java中的泛型只在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型的相关信息查出,并且在对象进去和离开方法的边界处提娜佳类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。泛型类独享实例化时不指定泛型,默认为Object泛型不同的引用不能相互赋值泛型接口泛型方法方法,也可以被泛型化,不管此时定义在其中的类是不是泛型化的。在泛型方法中...

2020-02-15 18:06:19 228

原创 java学习总结 - 集合

Table of ContentsHashSetTreeSet:自然排序定制排序List与ArrayListArrayList和VectorMapHashMap 与 HashtableTreeMapCollections操作集合的工具类集合类存放在java.util包中,是一个用来存放对象的容器。集合只能存放对象,比如存一个int型整数5...

2020-02-15 16:37:29 345

原创 java学习总结

java都是值传递基本数据类型的变量传递的是值,即栈中的值引用数据类型的变量传递的是栈中的值,即对应的堆中对象的地址java支持单继承,不允许多重继承。override:子类重写父类方法,只是重写方法体;重写方法不能使用比被重写方法更严格的访问权限(如果父类的方法是public,子类重写的时候不能缺省);两者必须同时为static或同时为非static;子类抛出的异常不能大于父...

2020-02-14 00:42:04 210

原创 选择排序

public void selectionSort(int[] a) { for(int j=0; j<a.length-1; j++) { int minPos = j; for(int i=j+1; i<a.length; i++) { if(a[minPos] > a[i]) { minPos = i; } } //s...

2019-08-05 12:21:19 184

原创 冒泡排序

public void bubbleSort(int[] a) { for(int i=0; i<a.length-1; i++) { boolean stop = true; for(int j=0; j<a.length-1-i;j++) { if(a[j]>a[j+1]) { int tmp = a[j+1]; a[j+1] =...

2019-08-05 12:16:35 154

原创 最常见的SQL语句

假设有employee和department两个table1. Return employee record with max salaryselect * from employee where salary = (select Max(salary) from employee)2. Select highest salary in employee table.selec...

2019-07-28 21:15:30 215

原创 Windows Server 2016 升级到 Windows server 2019

准备工作准备Windows server 2019的镜像文件(类似这样的文件17763.107.101029-1455.rs5_release_svc_refresh_SERVER_VOL_x64FRE_en-us.iso)步骤将iso文件拷贝到Windows server 2016上,并双击打开,可以看到类似这样的目录结构: 如果windows server 2016上运行了AD...

2019-03-14 18:20:00 14660 2

原创 Python面向对象编程(OOP)技术总结

Table of Contents属性对象初始化构造方法(函数)析构方法(函数)类的方法实例方法类方法静态方法类的继承继承类构造方法方法与属性的继承属性Sample:class Book: name = "C Programming" __publisher = "T University" def show(se...

2018-10-30 14:58:32 442

原创 队列的正确顺序 - 算法有待改善

1. 描述有一群人站队,每人通过一对整数(h,k)来描述,其中h表示人的高度,k表示在此人前面队列中身高不小于此人的总人数。实现一个算法输出这个队列的正确顺序。输入格式输入格式为二维列表,即list[list[]]形式外层list包含队列中全部的人,内层list为[h,k]格式,代表个人信息。输出格式输出格式为:list[list[]]形式与输入格式一样,需要按照队列顺序排列。输入输出示例示例 输...

2018-07-09 22:12:57 589

原创 凯撒密码

1 . 描述凯撒密码是古罗马凯撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:原文: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z密文: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C...

2018-07-09 21:48:58 2790

原创 斐波那契数列

1. 描述斐波那契数列如下:F(0)=0, F(1)=1F(n)=F(n-1)+F(n-2)编写一个计算斐波那契数列的函数,采用递归方式,输出不超过n的所有斐波那契数列元素,调用上述函数,完成如下功能:用户输入一个整数n,输出所有不超过n的斐波那契数列元素、输出数列的元素和及平均数,输出按照顺顺序,用英文逗号和空格分割。输入示例1:5输出示例1:0,1,2,3,5,12,22. 代码def f(n...

2018-07-09 21:32:22 896

原创 SQL script- 将select获得的数据结合其他的数据插入一个已经存在的table

使用insert into select .例子:declare @minNum int; --定义变量用来循环初始值declare @maxNum int; --定义循环的上线declare @copiedNum = 1234 -- 源数据Column1的筛条件set @minNum=53508; -- 初始化最小值set @maxNum=54494; -- select@maxNum=5449...

2018-06-22 17:11:53 317

原创 Usefull links

fiddler dochttp://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/DecryptHTTPSSelenium-python tutorialhttp://selenium-python.readthedocs.io/index.html

2018-05-29 17:55:26 239

gtest-1.7.0.zip

Google开源单元测试框架gtest源代码

2016-02-17

gtest源文件

Google开源单元测试框架gtest源代码

2016-02-17

selenium-ide-2.5.0.zip

2016-03-16

空空如也

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

TA关注的人

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