- 博客(55)
- 收藏
- 关注
原创 性能测试、LoadRunner的使用
(1)实例化:创建被测对象的实例,以便进行后续的测试工作。(2)初始化:初始化被测对象的状态,以确保测试开始前对象的状态符合要求。(3)调用方法:对被测对象的方法进行调用,以验证其功能是否正确。(4)断言结果:通过使用断言方法(5)清理资源:在测试完成后,清理所有可能会影响下一次测试的资源。
2023-07-24 11:30:55
462
原创 软件测试的生命周期、Bug
功能设计与需求严重不符,模块无法启动或调用,程序重启、自动退出,关联程序间调用冲突,安全问题、稳定性等。如:错别字、界面格式不规范,页面显示重叠、不该显示的要隐藏,描述不清楚,提示语丢失,文字排列不整齐,光标位置不正确,用户体验感受不好,可以优化性能的方案等。造成系统崩溃、死机、死循环,导致数据库数据丢失,与数据库连接错 误,主要功能丧失,基本模块缺失等问题。如:代码错误、死循环、数据库发生死锁、重要的一级菜单功能不能使用等。1.6、其他:故障的分类(如功能故障、页面故障、兼容性故障)、优先级的分类等。
2023-06-08 17:03:30
2300
原创 MyBatis的使用、Spring AOP、Spring事务
PS:AfterReturning 与After 同时存在时会先执行AfterReturning。AfterThrowing 与After 同时存在时会先执行AfterThrowing。Spring 事务传播机制定义了多个包含了事务的⽅法,相互调⽤时,事务是如何在这些⽅法间进⾏传递的。
2023-06-08 16:54:42
965
原创 Junit的使用、TestxNG的使用、OKHttp框架
2.3、@BeforeEach 和 @AfterEach。2.2、@BeforeAll 和 @AfterAll。PS:不能和@Test修饰一个方法。3、测试用例的执行顺序。3.1、默认执行顺序。
2023-05-28 09:47:40
264
原创 Bean的存取、五大注解、对象的注入方式、Bean的作用域和生命周期
PS:Java语言中的对象也叫作 Bean。PS:要在 pom.xml 中添加 spring 框架支持启动类(包含main方法即可):创建bean:配置文件: 注册bean:类注解:@Controller、@Service、@Repository、@Component、@Configuration注解的作用:便于直接了解类的作用。1.1.1、@Controller(控制器)——表示的是业务逻辑层,接口的最外层,验证参数接口的正确性或者参数的转换、返回。存储 bean:读取 bean: 1.1.2、@Se
2023-05-11 18:30:16
2193
原创 SpringBoot的配置文件、日志文件
properties 是以 key=value 的形式配置的键值类型的配置⽂件,⽽ yml 使⽤的是类似 json 格式的 树形配置⽅式进⾏配置的,yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤“: ”英⽂ 冒号加空格的⽅式设置,并且空格不可省略。一般情况下,为了更高效的维护(降低故障率),一般都会只用一种配置文件格式。yml 通⽤性更好,⽀持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份 配置⽂件作为 Java 和 Go 的共同配置⽂件。
2023-05-05 18:37:15
1480
原创 数据库中文输入问题
(1)若建库时没有直接修改,则直接是默认的字符集和排序规则:(建好库后在此处再修改是不容易改好的,因此需要按照(2)(3)修改才可以)若是int、text、datetime等这种类型,则不用修改。若是 varchar类型,则需要修改。2.1、在建库的时候就直接修改:选择好字符集和排序规则(基本上整个数据库就可以实现中文输入了)2.2、若建库时忘记修改,则可以采用该步骤的修改方法。(3) 再改各项的:(以下面的表为例)直接在下载的配置文件里修改即可。一、环境:Navicat。1、永久式(一劳永逸式)
2023-05-05 14:01:26
1102
原创 SpringBoot项目创建
解决:在右边maven 库中进行 刷新 或者 先clean再刷新。若仍报错,则需重建一个项目,重新开始。则修改该项目的端口号:(默认端口号是8080,我们修改为9090即可)3、选择相关版本(选择2.x.x版本最好)以及相关依赖。修改后再重新运行项目即可。2、选择框架及相关配置。4、创建完成后的目录。
2023-05-05 14:00:35
115
原创 JVM、JVM中的垃圾回收、类加载、IoC和DI
一、JVM一、JVM1、概念JVM:的简称,意为 Java虚拟机,可以运行Java代码,是整个Java实现跨平台的最核心的部分;所有的Java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。支持多种语言,理论上无论哪种编程语言,只要能将源代码编译为*.class代码,都能在JVM上解释运行。PS:JDK=JRE+开发工具集;
2023-04-17 21:36:49
598
原创 软件的需求与测试用例、十大开发模型、生命周期
数据字典是用来描述数据的信息集合,是一种用户可以访问的目录,主要记录数据库和应用程序元数据的目录,是数据库的重要组成部分,对用户来说是一张可读的表。该模型包括建立描述系统静态的对象模型(类图)、描述系统控制结构的动态模型(状态图)(是一个越来越...的过程)、描述系统功能的功能模型(用例图)。详细设计即内部设计,也是过程设计,它的核心是算法设计,是对概要设计的一个细化,详细设计每个模块实现算法、所需的局部结构。软件很难理解,很难使用,速度超慢,测试人员站在最终用户的角度看到的问题是平常的但不是正确的。
2023-04-06 12:55:44
2689
原创 TCP与UDP协议、TCP状态、三次握手和四次挥手、HTTP协议
源目的端口号:表示数据是从哪个进程来,到哪个进程去。6位标志位:URG:紧急指针是否有效。ACK:确认号是否有效PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走RST:对方要求重新建立连接;我们把携带RST标识的称为复位报文段SYN:请求建立连接;我们把携带SYN标识的称为同步报文段FIN:通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段16位校验和:发送端填充,CRC校验。接收端校验不通过,则认为数据有问题。
2023-04-05 10:37:29
518
原创 servlet的生命周期、cookie和session
servlet 技术主要应用于动态页面开发。是一种独立于操作系统平台和网络传输协议的服务端的Java应用程序,它用来拓展服务器的功能,可以生成动态的 web 页面。运行结果:(还要注意路径)若 Tomcat 能运行 JSP 但运行不了 servlet,(可能配置问题或者路径问题则按照此路径找到该文件:servlet 生命周期:指servlet 容器创建 servlet 实例,响应客户请求后最后销毁的全过程。(容器加载servlet类)当第一次有web客户请求servlet服务或当web服务启动;
2023-04-01 18:44:57
558
原创 软件测试和开发与调试的区别、测试人员的必备素质
(1)执行阶段:调试:一般在开发完成之后或者边开发边调试(有代码才能调试)。测试:在开发前就已经介入,测试在软件需求阶段就已经开始,会伴随着软件的整个生命周期,有产品的地方就一定有测试。(2)目的:调试:发现问题,解决问题。测试:发现问题,提供解决方案。(3)人员区别:调试:开发进行调试。测试:开发+测试执行,通常情况下黑河测试由测试工程师完成,部分白盒测试和系统测试由开发完成。(4)手段区别:调试:断点调试、分析代码逻辑等。
2023-03-29 12:41:17
852
原创 CAS、sychronized原理(锁机制)
一旦这个锁请求失败,线程就会进入阻塞状态,放弃CPU,下一次执行的时间就不确定。当前值和与气质一样,可能是因为其他线程进行了修改,然后又修改了回去,这个过程,仿佛中间没有发生过变化,但真实是发生了变化。当一个线程访问时,会先判断这个标志释放等于当前线程,若等于当前线程,就直接获得锁;把锁消除,在一些不必要加锁的地方加了锁,编译器或JVM会帮助优化,把锁消掉。在比较时,不仅仅比较值,还要比较版本号,这个版本号,只能增加,不能减少。即是轻量级锁,又是重量级锁(看锁的竞争程度,逐渐升级);
2023-03-29 10:22:24
386
1
原创 HTTPS的加密流程
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。服务器生成这组 私钥-公钥 对, 然后通过证书把公钥传递给客户端,然后客户端用这个公钥给生成的对称加密的密钥加密, 传输给服务器, 服务器通过私钥解密获取到对称加密密钥。密钥的密钥(即公钥)把密钥发送给服务器,客户端就可以通过密钥,和服务器进行沟通。
2023-03-26 22:28:51
794
原创 阻塞式队列、定时器、线程池
压测:都是QA压测,但QA 几乎没有压测线程的数量。3)随着任务的执行,剩余任务逐渐减少,逐渐有利空闲线程(若空闲时间> keepAliveTime 且当前线程数> corePoolSize ,销毁线程,知道当前线程数==corePoolSize)。maximumPoolSize 最大线程数--->正式工+临时工的数量(常备线程数+临时线程数)(任务多了就创建一些临时线程,任务完了就销毁)PS:Excutors,看作一个工具,提供了一些创建线程的方法,这些线程已经有了一些默认的参数配置,就不需要再去写了。
2023-03-19 17:23:18
375
原创 多线程的单例模式
单个实例的设计模式。一个程序,可以创建多个类的实例。对外提供一个方法,来获取这个实例并进行初始化(当外部调用这个方法时,此时再去进行初始化)。只需要第一个线程对该实例进行初始化即可,后面的线程只需要直接获取前面这个实例就可以。步骤:先把这个默认的构造方法改成私有的,也就是在其他地方不能创建实例;属于设计模式的一种,常见的设计模式有23种,如单例模式、模板模式、策略模式、工厂模式、代理模式。:先提前把实例创建出来、初始化,用的时候就可以直接拿出来用。:用不到这个实例就不创建,用的时候再去创建、实例化。
2023-03-09 17:23:32
331
原创 计算机网络相关概念
IP地址分为网络号(保证相互连接的两个网段具有不同的标识)和主机号(同一网段内,主机之间具有相同的网络号,但必须具有不同的主机号)两部分。(2)拆封:目的主机的进程接收数据的时候,需要将网络数据按网络分层,从低到高的顺序来对数据进行分用。(1)封装:源主机中的进程发送网络数据的时候,需要将数据按网络分层,从高到低的顺序来对数据进行封装。数据链路层:主要负责相邻两设备之间的数据传输(数据传输可能会经过很多的主机或路由器的传输,最终才能传递到目的主机)。客户端:在常见的网络数据传输场景下,获取服务的一方进程。
2023-03-09 15:09:33
246
原创 数据库--复杂查询
给定一个字段/表达式作为分组的依据,通过 group by 来体现, 根据这个字段中每一行的值,得到最终的分组。PS:聚合查询中,只能出现聚合函数,不能出现记录的原字段。-- sum/avg/max/min 遇到 null(包含其他非数字字段),聚合的时候就不考虑这些行了。聚合查询的 select 后边,可以出现两种东西:聚合函数、分组聚合时分组的依据字段。:将一次查询的的查询结果看作一张“表”,在这个结果继续查询,可以一直嵌套。:先通过where做记录的筛选,然后针对满足条件的记录做聚合。
2023-01-13 10:57:53
1444
原创 volatile关键字、wait和notify与notifyAll
若变量没被volatile修饰,则还是这几步,但具体何时从准村中读取数据、何时把工作内存中的数据写回到主内存中时不确定的,有可能在任务开始前进行了一次读数据,在任务结束前进行了一次写数据(工作内存-->主内存)。若变量被volatile修饰,则每次读变量的值,强制从主内存里读,每次都是重新读。每次写变量的值,只要变量发生了修改,就强制把变量的值从工作内存写回到主内存中。---》 读数据,强制从主内存读数据;写数据,强制把工作内存中的数据写到主内存。
2023-01-09 21:32:54
183
原创 插入排序、冒泡排序、选择排序、希尔排序、堆排序、快速排序、归并排序
对一个区间的元素进行排序,在这个区间中任选一个元素(一般挑区间最边上的元素--最右边的, pivot ),遍历整个待排序区间,将每个元素都和 pivot 作比较(=),同时把 pivot 放到合适的位置,要求所有(= pivot )的元素都在 pivot 右边。无序区间少了一个元素,有序区间多了一个元素。[无序区间] [有序区间] 中,将无序区间维护成一个大堆(从小到大排序,需要大堆),利用大堆从无序区间中找到最大值,交换。
2023-01-07 15:17:57
681
原创 线程安全问题、锁、synchronized
如果我们的代码有因为线程的随机性,导致程序有bug,我们就认为是“线程不安全”。count++ 也即 count=count+1,这行代码也其实对应了三个指令(指令是原子性的、不可分割的,要么成功,要么失败,不存在中间态)。只要两个线程不是串行执行的,就一定会有问题,因此,也就是说,需要把(LOAD,ADD,SAVE)打包在一起执行。在进行数据操作之前,先进行加锁,通过加锁的方式,把两个线程对数据的操作变成了串行操作。在多线程的环境中,多线程的运行结果和单线程的运行结果一致,我们就认为是“线程安全”。
2023-01-02 16:55:20
320
原创 Java线程的几种状态
time-waiting:该状态是正在按一定的时间进行阻塞,调用sleep、 join、wait方法就可进入该状态。进入该状态的线程需要被其它线程唤醒。blocked:该状态是由于资源竞争而引起的,调用synchronized方法就会进入该状态。runnable:线程对象创建后,通过调用start方法,此时该线程位于可运行的线程池中,等待等等待被调度选中。BLOCKED:排队等着其他事,同步阻塞,因为资源竞争而引起的阻塞。WAITING:排队等着其他事,等待阻塞,需要其它线程唤醒。
2022-12-21 21:53:30
140
原创 在idea中创建maven,简单的数据库连接
3)通过Connection对象的PrepareStatement(String sql)得到PrepareStatement对象。无结果的SQL时,如:create、drop、insert、update、delete语句,执行excuteUpdate( )操作,得到 int 类型。有结果的SQL时,如:select、show语句,执行excuteQuery( )操作,得到ResultSet对象。注意:DataSource对象的生命周期:整个应用只需要有一个对象即可,不需要创建很多。
2022-12-13 16:12:43
2954
2
原创 优先级队列
对象可以进行比较是很多后续操作进行的前提,比如:排序(要求 线性表中的元素是可以进行比较大小的)、优先级队列(要求 放入优先级队列中的元素是可以进行大小比较的,因为优先级队列的原理是堆)Java语言帮我们指定了一个规范:Comparable接口(具备比较的能力:如何比较时逻辑层面上的),Compare(比较),Able(具备什么能力)1> 引用1==引用2为true (关于同一性的比较):都指向同一个对象(特例i:都为null时,)3> 引用类型没有< = >的比较。
2022-11-05 10:02:47
84
原创 创建Javaweb、导入jar包、配置Tomcat
空项目--项目名称(可以随便起)(与3要保持一致,一般情况3会在2后自动生成)--点完成即可。右键点击--添加框架支持--选中web应用程序--再确定即可。按照此路径找到这两个包--再点应用、确定即可。java模块--点击下一步即可。模块名称(起名字)--完成。在上述步骤的基础上进行。文件--新建--项目。文件--新建--模块。
2022-10-11 23:19:04
2085
原创 list的相关介绍--线性表
拿到这个迭代器之后,我们就可以通过hasNext()+next()配合,一次拿到容器中的元素了。线性表,元素和元素之间出现线性的结构--每个元素都要一个独一无二的位置与其关联,位置(下标)。除了第一个元素和最后一个元素,都有逻辑上的前一个元素--但无论是怎样的组织方式,一个集合(容器)都具备一些公共的特征:添加元素、取出元素、元素是否存在...next() 元素类型 ,取下一个元素。合法的位置(下标)的取值范围:[0,size)。按照对象的规则生存,相等性的比较使用equals方法,同一性的比较使用==。
2022-10-10 08:47:31
218
1
原创 数据结构--1复杂度
一般找最坏的时间复杂度(找执行次数最大的指令);分为时间复杂度(time complexity)和空间(space complexity)复杂度。的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。时间复杂度是一个关于数据规模的函数,当数据规模(记为n)趋于无穷大时的函数关系。求基本指令O(1)的执行次数与数据规模n的关系,再用大O渐近表示法化简。数基本指令的个数(CPU上每秒运行的指令个数基本固定)。各种情况的出现:最好情况,最坏情况,平均情况。冒泡排序使用了常数个额外空间,所以空间复杂度为。
2022-10-03 13:10:15
97
原创 异常的相关学习
Java程序是在JVM中运行的,当程序运行出现异常,最开始发现异常的就是JVM,此时JVM帮助我们构造异常对象交给出现异常的方法,该异常对象就会沿着调用链传递,直到该异常被处理。产生多个异常,方法中处理若干个。按照Java语法来说,有时没有任何异常,但是我们根据具体的业务场景,可以规定在某些场景下抛出相关的异常,这就要用到throw关键字人为进行异常的产生。在C语言时,当程序中某行出现错误时,程序就会异常退出,从改行开始的后面代码无法得到执行,只能退出程序检查错误再次执行,这是一个不好的问题。
2022-10-02 14:13:59
421
原创 JDK中的三个特殊类--2
的方式创建字符串对象,会使用字符串的常量池。当下次再使用该对象时(还是采用直接赋值的方式),若常量池中已有该内容的字符串,直接引用常量池中的对象,不再创建字符串。如此,对于String这个类就不存在多态,能保证所有的JDK使用者,大家用的String类都是同一个版本的,使用的方法也都完全一致。-->String类的内部提供的所有设计字符串修改的方法,都会产生新的字符串对象,并不会影响原字符串对象。存储一系列的字符串对象,当字符串常量第一次出现时,且常量池中没有该值的字符串对象,就会将该对象置入常量池。
2022-09-25 22:34:34
125
原创 JDK中的三个特殊类--1
-->(方便对于某些方法参数统一化)(因为所有类都是Object类的子类,因此方法参数若需要接收所有的类对象,可以使用Object类来接收)除了可以接收所有类的对象以外(因为Object类是Java中所有类的默认父类),Object还可以接收所有的引用类型(包括类、接口和数组引用)。1)==比较的是两个变量的数值是否相等,对于基本类型,比较的就是具体保存的数值,对于引用类型比较的是两个引用类型的地址是否相同。正因为Object类是所有类的父类,因此Object类中的所有方法,子类中都有。
2022-09-22 21:16:00
161
原创 抽象类和接口
克隆指的就是对象B就是根据对象A“复制来”的,这个复制不是简单的创建了两个引用指向同一个对象,确实产生了俩个独立的对象,对象的所有属性和方法都是完全从大学A那里复制而来的,换句话说,对象A、B除了地址不同,其它完全相同,只有的存在称之为对象的“克隆”。一般而言,在Java中,除了一些特殊的接口外(USB接口,现实生活中存在的接口),接口一般采用大写的 I 开头,子类使用 impl 结尾表示是一个接口的实现子类。抽象类中的普通方法、构造方法,抽象类中全都可以存在,简言之,抽象类就是比普通类多了一些抽象方法。
2022-09-21 18:45:05
271
原创 多态--向上/下转型
-------->能不能”.“访问方法或者属性要看’前面‘父类中有没有,至于”.“之后到底调用的是父类方法还是子类方法,要看’后面‘new的子类是否重写了该方法。发生在有继承关系的类之间,子类定义了和父类处理权限不同(子类权限>=父类权限),返回值可以为向上转型类的返回值外,参数列表、方法名完全相同的方法就称之为方法重写。--->不能,这里的重写方法都是和父类于子类对象相关的,静态方法压根就没有对象。--> 若存在,判断当前调用的这个方法是否被子类所重写,若重写,则调用的是子类重写后的方法。
2022-09-17 14:05:36
1014
1
原创 Java--类和对象-3
正因为有包访问权限的存在,可以在不同的包中创建同名的类--> 类似于在操作系统中的同一个文件夹内不能创建多个同名同类型的文件,但在不同的文件夹下可以创建多个同名称同类型的文件。类中的某些属性,不能再类的外部随意使用,无法限制,因此类中用需要将敏感数据隐藏起来,比如一行卡的密码以及余额等属性,要想在类的外部去使用这些属性,必须通过类中提供的方法来使用(限制这些属性的使用了)。若子类也定义了父类相同名称的属性,则会访问子类中的属性(就近匹配原则)---> 相当于父类中的同名变量就被子类“覆盖”了。
2022-09-16 23:54:39
160
原创 Java--类和对象-2
--> eg:main是整个程序的入口,假设主方法还得有对象才能访问,要创建对象只能进入主方法以后主方法以后才能创建对象,所以主方法一定得和对象无关,因此主方法只能设置为静态方法,与对象无关,当类产生以后就能访问这个方法。成员对象必须通过对象来访问。1》static修饰类中属性,称之为类的静态属性或类属性,和具体的对象无关。2》static修饰的方法称之为类方法或静态方法,只能直接使用类中的静态属性以及类中的静态方法。PS:static只能修饰类中的属性,该属性称之为类属性,和具体的类无关,绑定在类上。
2022-09-09 13:06:56
155
1
原创 Java--类和对象-1
关于类的实例化:在Java中定义了一个类,相当于在JVM中定义了一种新的“类型”,这个类型和JDK内置String int double 都是相同的。不同对象的属性值是不同的,正因为属性值的不同,因此对象表现出来的行为就不同。构造方法是为了给类中成员变量赋值,成员变量的类型在在定义时就已经给出,因此构造方法的重载不讲究类型,构造方法在重载时,只是决定当前这个构造方法到底给几个属性赋值。(1)面向对象关注的都是现实生活中的的实体,需要通过开发人员定义实体所具备的属性和方法(这个实体独有的属性和方法)
2022-09-06 22:23:51
152
原创 Java--数组的定义与使用
原因是此时的i只是从原数组那里得到了一个拷贝的值,修改了这个临时变量,并不会对原数组的内容产生影响---->要想在遍历数组的过程中修改原数组的内容,需要使用传统的for循环)来遍历数组。eg:i是一个临时变量,从当前arr数组中第一个元素开始遍历,每次从数组arr中取出一个元素,将该元素的值复制一份给i,知道整个arr数组遍历结束。不断比较项链两个元素的大小关系,若前一个元素大于后一元素,交换两者位置,每当进行一次循环,就将当前无序数组的最大值放在了数组的末尾,有序元素+1。...
2022-08-26 22:17:23
926
原创 Java--方法
若某些方法没有返回值,在定义方法时使用voic关键字表示该方法没有返回值(不能忽略),仍然可以在没有返回值的方法中使用 return ,表示结束当前方法的使用。重载方法的引出:定义多个不同名称的方法时,每当传入不同的参数时,就得调用不同的名称-->用户的使用成本太高,需要记很多的方法名称。在同一个类中,定义了若干个方法名称相同,参数列表不同(参数类型或个数不同),与返回值无关的一组方法,这样的一组方法称为重载方法。使用重载方法-->方法名称相同,参数列表不同(重载方法一定与方法的返回值无关)。
2022-08-25 09:16:35
255
原创 Java--程序结构&&输入输出
---> 先计算表达式的值和第一个case开始,一次进行比较,一旦遇到匹配的值,执行该case的语句,直到遇到break为止。:调用Scanner对象的 hasNextXXX() 方法-->就会判断系统输入的是否是指定类型的内容,若碰到不是相应的类型,循环终止。在Java代码中的反斜杠(\)是转义字符,因此需要表示字面意义上的\,就需要使用双反斜杠(\\)。(if更多的是表达条件的判断)(传递任意数据类型,多个类型使用+拼接),输出内容后自带换行符,println()什么都不传,默认当换行输出使用。
2022-08-22 10:32:32
375
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅