自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 spring的常用注解

我们在学习spring的时候,经常会用到注解。那么spring都有哪些注解呢?它是一种为程序代码提供元数据信息的标记。在Java中,注解以@开头,可以附加到类,方法,字段或者其他代码元素上,用于提供额外的信息或指示编辑器解释器或其他工具对这些代码元素进行特殊处理。接下来,我将介绍一些常见的注解。

2024-04-27 22:00:20 907

原创 自动化测试框架 Selenium(3)

本篇博客,我们将继续Selenium自动化测试的学习.在前面的章节中,俺介绍了Selenium是怎么回事,和键盘鼠标操作.还有url和title的获取,接下来我们将介绍更多Selenium的操作.

2024-04-11 21:55:26 421

原创 自动化测试框架-senlenium(2)

前面我们讲了如何定位元素,那么我们把元素定位到了以后,又如何进行操作呢?这篇博客我们会分几个模块来详细的介绍这些操作.如何的去操作测试对象。

2024-04-10 23:56:07 400

原创 UI自动测试框架-selenium(1) selenium介绍和选择器

selenium是用来做web端自动化测试的框架,它支持各种游览器,各种平台,支持各种语言(如 Python,Java,C#,JS,Ruby...等)有丰富的api.它的原理就是 我们将代码构造一个http请求发送到webdiver游览器驱动,游览器驱动在发送到游览器.游览器响应到游览器驱动,驱动在返回到代码里给程序员看到.xpath是一种在XML中文档中定位元素的语言,因为HTML可以看做XML的一种实现,所以selenium用胡可以使用这种语言在web应用中定位元素,依旧可以成功的选择我们想要的。

2024-03-21 23:35:48 506

原创 什么是自动化测试,自动化测试有什么作用

在技术日益发展的今天,一个优秀的项目,不仅仅是开发人员的心血,更离不开测试人员的帮助.传统的人力测试会消耗大量的人力资源和时间成本.在面对一些项目的时候就显得力不从心了,这时候我们可以使用自动化测试来帮助我们来减少时间成本和人力成本,达到我们预期的结果.自动化测试值软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估结果,将人为驱动的测试行为转化为机器自动的过程.自动化测试金字塔.

2024-03-17 00:28:44 715

原创 测试用例的设计(2)

我们在前面的文章里讲了测试用例的几种设计方法,分别是等价类发,把测试例子划分成不同的类型,在每个类型中选取一个.这样可以解决软件测试不能穷举的问题.还有边界值法.该方法可以完善等价类划分法,我们把测试用例中的范围划分成.上点(边界上的点),内点(边界内的点),还有离点(如果是开区间,就是边界内离得最近的一个点,如果是闭区间,就是边界外离得最近的一个点). 还有因果图,通过它来画判定表,把测试的条件都全面考虑到来细致的测.

2024-03-12 16:32:29 1620 1

原创 测试用例的设计(1)

基于需求设计测试用例是测试设计和开发设计的基础,第一步是分析测试需求,验证需求是否正确完整,无二义性,并且逻辑自洽.在需求正确的基础上细化测试需求,从测试需求中提炼出来一个个的测试点.(3)外部大型复杂网络应用系统,比如电子商务,网上银行,视频网站(腾讯,优酷)等,除了有复杂的系统的功能测试需求外,在系统的性能,安全性,兼容性,容错性,可靠性等都有很高的要求。1.有效等价类,对于程序的规格说明书是合理,有以以的数据构成的集合,利用有效等价类验证程序是否实现了规格说明书中的功能和性能。

2024-03-11 00:33:04 1053 4

原创 [Spring] IoC 控制反转和DI依赖注入和Spring中的实现以及常见面试题

Spring是一个开源框架,他让我们的开发更加简单,它支持广泛的应用场景,有着活跃而庞大的社区,这也是Spring能够长久不衰的原因.这个概念还是相对于比较抽象,我们用通俗易懂的话来讲,Spring是包含了众多工具方法的IoC容器 那么问题来了,容器是什么.什么是IoC容器。

2024-03-10 14:00:36 1154 1

原创 JVM垃圾回收机制(GC)

目录1.什么是垃圾回收2.GC对于虚拟机各块的影响3.垃圾回收具体是怎么展开的3.1引入计数3.2可达性分析(JVM使用的就是这种方法)3.2.1.标记清除3.2.2.复制算法3.3.3标记整理3.3分代回收 在C语言等编程语言中,采用的是动态内存管理,我们使用malloc申请内存,free释放内存,在malloc这种方式申请到的内存是伴随整个进程的生命周期的,这一点对于服务器非常不友好,因为服务器每个请求都去malloc一块内存,如果不去free释放,在内存越来越多的时候,后续内存可能就申请不

2024-03-07 09:34:54 726

原创 软件测试的基本概念

1.发现问题的版本开发人员需要知道出现问题的版本,才能获取到对应版本的代码来重现故障,并且版本统计和分析每个版本的质量2.问题出现的环境环境分为硬件环境和软件环境,如果是web项目,需要描述游览器版本,客户机操作系统等,如果是app项目,需要描述机型,分辨率,操作系统版本等,详细的环境描述有利于故障定位3.错误重现的步骤描述问题重现的最短步骤4.预期行为的描述让开发人员指导怎么样是正确的,尤其是以用户的角度来描述程序的行为是怎么样的,如果是依据需求提出的故障,能写明需求的来源是最好的。

2024-03-07 00:42:10 540

原创 CSS选择器的常见用法

css选择器的主要功能是选中页面指定的元素,选中了元素,就可以设置元素的属性了.这就好比当我们在编辑word文档的时候,想要更改字体颜色或者大小,可以用鼠标选中要更改哪些字.然后在修改.在CSS中也需要选中元素.我们有好几种选择器可以来选则不同的元素.

2024-03-04 12:32:59 341

原创 JVM类加载机制以及双亲委派模型的介绍

类加载,指的是Java进程在运行的时候,把.class文件从硬盘读取到内存,并进行一系列校验解析的过程..class文件=>类对象.硬盘=>内村类加载的过程在Java官方文档中有说明类加载大致可以分为五个步骤:即 加载.验证 准备 解析 初始化这五个步骤.下面我们分别来介绍这五个步骤干了一些什么。

2024-03-02 21:57:05 808

原创 JVM的内存区域划分

JVM也称为Java虚拟机,它是Java代码的运行环境,Java属于半编译半解释形的语言.它的运行环境在虚拟机上,而不是物理设备.Java这么设定主要是为了跨平台,即一套代码,多处使用.我们只需要编译出一套Java代码, 就可以部署到不同的操作系统中去.Java不想重新编译,而是期望能够直接执行,先通过Javac把.Java文件=>.class文件.字节码文件就是Java字节码.是它自搞得一套cpu指令,因因此.我们编写和发布一个Java程序,只需要发布.class文件即可.

2024-03-02 20:49:56 1050

原创 HTTPS是什么,详解它的加密过程

我们知道HTTP协议是超文本传输协议,它被广泛的应用在客户端服务器上,用来传输文字,图片,视频,js,html等.但是这种传输如果经过了黑客的路由器或者别有用心的人的设备,可以很轻松的破解并修改我们的内容,这种协议的安全性得不到保障.为了解决这种问题,我们引入了HTTPS,它是基于HTTP协议的一种加密安全协议,可以把HTTP协议传输的内容进行加密传输,让黑客或者别有用心的人破解不了.

2024-03-01 22:03:11 1276

原创 [HTTP协议]应用层的HTTP 协议介绍

我们在前面的博客中,简单的介绍了传输层,网络层,数据链路层等网络层的协议和相关概念,这些协议越往上越和我们编写程序的人息息相关,尤其是应用层和传输层,本篇博客,我将带领大家认识和了解应用层的重要协议--HTTP协议.HTTP又叫做超文本传输协议,所谓的超文本就是即可以是文件也可以是图片或者视频文字之类的. 也可以是HTML 或者CSS JS文件和文本传输只能是字符串不一样,超文本可以传输更多类型的数据.

2024-02-08 23:40:00 1358

原创 数据链路层

目的地址/源地址:mac地址,是六个字节的地址,在每一个设备出场的时候网卡里就有自己的mac地址.IP地址和mac地址是两套不同的地址体系,它们是两组不同的人做的.现在都会使用.以太网数据帧的载荷部分是有长度要求的,最短是46字节,最长的1500字节,46字节是因为ARP是46字节,1500字节是因为硬件限制了.只能这么大 这个被称之为MTU。这一套流程下来,就完成了数据传递的过程,每一层所负责的都不一样.共同合作完成了我们的目标.IP地址是统筹规划的,而MAC地址是只负责相邻两个设备之间的传输。

2024-02-07 22:38:06 345

原创 IPv4的公网地址不够?NAT机制可能是当下最好的解决方案

我们都知道IPv4的地址范围是32个字节,这其中还有很多地址是不可用的.比如127.*,这些都是环回地址.那么在网路发展日新月异的今天,互联网设备越来越多,我们该如何解决IP地址不够用的问题呢?目前有一种主流的解决方案,也是大家都在用的--NAT机制首先我们把IP地址分为两大类,私网IP和公网IP,私网IP又叫做局域网IPIP地址是10.&,172.16-172.31*,192.168* 这三类地址是私网IP。

2024-02-06 18:14:36 401

原创 IP协议,把这篇文章看完就够了

方案二:使用别的协议,如IPv6,.IPv6有十六个字节的大小,可以给地球上每一粒沙子都分配一个地址,所以是远远够用的,但是这涉及到一个问题就是,设备更换起来很麻烦.全世界的所有服务器基本上都支持IPv4,但是很少有支持IP v6的.我们国家是这方面的先行者,现在中国对于IPv6的普及已经到二零百分之70以上了, 但是现在还是不太现实,我个人非常看好IP v6。2.4位头部长度,IP协议的的头部长度是32bit,也就是length*4字节数,4比特表示最大的数字是15,因为ip头部的长度是60个字节。

2024-02-05 02:15:01 910

原创 深入理解TCP网络协议(3)

在前面的博客中,我们重点介绍了TCP协议的一些属性,有连接属性的三次握手和四次挥手,还有保证数据安全的重传机制和确认应答,还有为了提高效率所用的滑动窗口等.然而TCP协议的特性远不止这些,在这篇博客中,我们将更深入的了解决TCP协议的其它特性.

2024-02-04 17:21:51 1377

原创 深入理解TCP网络协议(2)

滑动窗口机制是TCP协议中很有意思的一种机制,它的作用主要是为了提升传输效率,据我们前面所讲的,TCP协议中每次传输数据都会等待对端发送一个ack报文以后才会继续重传下一份,但是这样的效率会很低,不利于我们传输大量的数据.所以前辈们设计了滑动窗口机制.主要的机制是,我们发送端可以一次发送多个数据,然后等待一份ack即可,等到了以后继续发送,这样可以将传输效率大大提高了, 我们用一张图来生动形象的描述一下滑动窗口的过程.而现在则是发送一波数据以后,统一等一波ack,把多次请求的时间统一成一份时间来等.

2024-01-31 01:28:48 1015

原创 一篇文章带你搞懂UDP协议报文以及注意事项

答:我们可以参考TCP是如何实现可靠传输的,可以设置序列号来做一个确认应答机制,如果对端收到了我们的信息,就会发送一个应答序列号,如果我们没有收到这个序列号,就可以进行超时重发了,TCP是可靠,有连接,面向字节流的一种网络协议,而且传输的文件大小也没有限制,那么是不是TCP协议就一定要比UDP协议好呢?1.UDP本身是无连接,面向数据报,不可靠的一种网络协议,如果要基于这种协议,来实现一个可靠传输应该如何设计.2.UDP的大小受到限制,如果要基于传输层的UDP协议,传输超过64k的数据,如何设计.

2024-01-27 23:31:22 343

原创 深入理解TCP网络协议(1)

在Linux中(windows中也是如此),会以500ms为一个单位去控制,每次判定超时重传的时间都是这个数值的整数倍,如果依旧没有得到应答,就会在2*500ms的时间后再次重传,以此类推,每次都是上一次的两倍,但是如果时间过长又会发生什么呢?如果是两次握手,那么就只是在我们上面提到的第二次握手,这样,接收端就不知道自己的发送功能和发送端的接收功能是不是好的,起不到我们想要的效果.第三次握手的时候,接收端收到发送端的应答报文,就明白自己的发送功能和对方的接收功能都是好的.

2024-01-27 22:24:09 2616 4

原创 [TCP协议]基于TCP协议的字典服务器

TCP协议是一种有连接,面向字节流,全双工,可靠的网络通信协议.它相对于UDP协议来说有以下几点好处:1.它是可靠传输,相比于UDP协议,传输的数据更加可靠.当然这里的可靠是相对的,并不是真的万无一失.我们会在后面的博客中给大家详细介绍TCP协议的可靠传输.2.它传输的字节流文件没有大小限制,不像UDP协议,一次只能传输64kb的报文数据.但是也有缺点:1.开销大,需要对连接的建立与维护,以及确认数据报的确认和重传,会增加网络开销.2 传输效率低;

2024-01-27 01:20:55 1005

原创 [MySQL]关于表的增删改查

select name, math+chinese+english as 总分 from exam_result where math+chinese+english < 200;Insert into stuent(列名,列名,列名)values(数据,数据,数据,),(数据,数据,数据);select name from exam_result where name like '孙_';

2024-01-22 20:08:59 943

原创 [网络编程]UDP协议,基于UDP协议的回显服务器

UDP协议是一种网络协议,它是无连接的,全双工,并且是面向数据报,不可靠的一种协议。常用于在线视频播放,游戏这种实时性要求比较高的应用。或者无需可靠传输的应用,如DNS查询 SNMP等。一次UDP数据报报文传输的数据最大为64kb,实际上,UDP因为头部占用八个字节。所以可传输的精准大小为64kb-8b = 65507字节。

2024-01-21 19:28:24 1358 1

原创 [MySQL]基础的增删改查

MySQL是一种客户端-服务器程序。我们在客户端写的SQL语句会上传到服务器上保存。它的里面可以存database数据库,而每个database里面可以有多张表。我们可以在表里面存入我们想要的数据,这种表有点类似于EXCEL表格一样,有行和列。它的底层是B+树。

2024-01-21 00:42:17 1097

原创 [计算机网络]基本概念

注:如何去理解端口和IP地址,就好比在买快递的时候IP地址是是你家小区的地址,而端口号是你的手机号码,通过IP地址找到你家小区,在通过手机号码精准定位到个人。网络层:负责地址管理和路由选择,例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式来规划出两台主机之间数据传输的合理路线,路由器就是在网络层工作的。注意我们这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两层)、三层路由器(工作在TCP/IP五层模型的下三层)。负责设备之间的数据帧的传送和识别。

2024-01-20 00:55:39 1040 3

原创 [文件IO]文件操作的几个笔试题

直接就是先通过字节流的read()方法,把目标文件的内容通过字节数组给读出来,然后写入到我们创建的文件里。扫描指定目录,并找到名称中包含指定字符的所有普通文件(不包含目录),并且后续询问用户是否要删除该文件。看到题目以后,理清思路。首先扫描目录找到文件这种操作,和二叉树类似,得用递归来写。然后我们创建一个2.jpg把文件给复制过去看看效果。我们一开始有一个图片1.jpg。可以看到文件被成功的复制下来了。我们先来看一下题目描述。结合题目一和题目二来写。

2024-01-19 01:33:03 382

原创 [文件I/O操作] 用Java代码来操作文件

在文件中,我们可以分为两种类,一种是字符文件,另外一种则是二进制文件。而对应的,这两种类型的文件我们可以用不同的方法去读写。

2024-01-17 01:34:49 377 3

原创 一篇文章带你搞懂多线程面试相关的一些问题

Callable 是一个 interface . 相当于把线程封装了一个 "返回值". 方便程序猿借助多线程的方式计算结果.Callable 和 Runnable 相对, 都是描述一个 "任务". Callable 描述的是带有返回值的任务,Runnable 描述的是不带返回值的任务.Callable 通常需要搭配 FutureTask 来使用. FutureTask 用来保存 Callable 的返回结果. 因为Callable 往往是在另一个线程中执行的, 啥时候执行完并不确定.

2024-01-15 21:25:00 794

原创 [文件I/O操作] 文件的介绍

我们先来看看File类的常见属性,构造方法和方法。修饰符及类型属性说明依赖于系统的路径分隔符,String 类型的表示依赖于系统的路径分隔符,char 类型的表示child)根据父目录 + 孩子文件路径,创建一个新的 File 实例根据文件路径创建一个新的 File 实例,路径可以是绝对路径或者相对路径child)根据父目录 + 孩子文件路径,创建一个新的 File 实例,父目录用路径表示修饰符及返回值类型方法签名说明String。

2024-01-08 00:48:55 853

原创 [MySQL]数据库概述

我们知道,存储数据可以使用文件来存储。那么为什么我们还要大费周章的去设计和使用数据库呢?因为文件保存数据有以下几个缺点:1.文件的安全性不好保证2.文件不利于数据查询和数据管理3.文件不利于存储大量的数据4。文件在程序中不好控制,控制不方便。数据库存储的介质:1.磁盘 2.内存为了解决上述问题,专家们设计出更加利于管理数据的软件——数据库,它能更有效的管理数据。数据库可以提供远程服务,即通过远程连接来使用数据库,因此也称为数据库服务器。

2023-12-16 16:03:51 132

原创 [多线程]一篇文章带你看懂Java中的synchronized关键字(线程安全)锁的深入理解

我们都知道在多线程编程中,线程安全问题是很严重的问题。为了解决线程安全问题,我们引入了“锁这个概念”,Java中的锁是用snychrnized关键字来实现的,它是一种基于对象的锁。虽然在日常编程中,我们可以直接使用这个关键字,而不去考虑它内部的机制。但是常言道,朝闻道,夕死足以。在学习过程中我们更应该去庖丁解牛的深入理解它,而不是不求甚解。本篇文章,作者将带领大家重新认识sychrnized关键字,以及各种锁背后的机制和原因。

2023-12-15 22:13:32 86

原创 [多线程]线程池

我们知道.在开发过程中.为了效率,会引进很多池,比如常量池,对象池,字符串池.今天我们来介绍另一种可以管理线程的池,线程池.我们知道在多线程编程中,线程的开销是比较大的,如线程的摧毁和创建.为了解决这种问题,我们引入了线程池这个概念,它可以把部分线程的创建和销毁给省去了,而是直接放到特定的数据结构里,需要用的时候再拿出来.这样就可以极大的提升程序的效率在Java中,也为我们封装了线程池的类,ThreadpollExecutor类,而这个类里面有几个重要的参数。它的构造方法有四种。

2023-12-14 18:45:46 74 3

原创 [多线程]阻塞队列和生产者消费者模型

当队列已经满时,插入操作将被阻塞,直到队列中有元素被取出。因为队列的大小是固定的,所以可以在队列未满时进行批量插入操作。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等 待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取.在实际开发中,经常会用到分布式系统,服务器整个功能不是由一个服务器全部完成的,而是每个服务器负责一部分功能,通过服务器的网络通信,最终完成整个功能.不同,当队列满时,插入操作将被阻塞,直到有其他线程移除了队列中的元素。

2023-12-04 22:26:06 113 4

原创 [力扣题]1.判断一棵树是否是平衡二叉树

题目思路,创建一个队列,把每棵树的根节点还有它的左子树和右子树依次放进去.在依次弹出. 直到遇到null,再检查队列里面有没有不是null的节点,如果有,那就不是完全二叉树.中,除了最后一层外,所有层都被完全填满,并且最后一层中的所有节点都尽可能靠左。,请你判断这棵树是否是一棵。给你一棵二叉树的根节点。

2023-12-03 16:06:36 136 1

原创 [多线程]线程安全问题再讨论 - volatile

原来这是因为编译器为了执行效率,会进行优化,它检测到这个数字一直没有变化.本来的while循环步骤应该是直接在内存中读取a的值,然后在判断是否进行打印.但是为了效率,它优化的时候,发现这个数字并没有什么变化.就省去了去内存中读取这个步骤.直接从寄存器(工作内存)中读取数值a,此时我们在内存中修改这个数字,自然就影响不了结果了.为了举这个例子,我们先介绍一种设计模式-单例模式中的懒汉模式.单例模式是一种设计模式,它通过技巧,让一个类只能有一个对象,如果在实例化这个类,企图创建一个新的的对象就会报错.

2023-12-03 16:05:22 324 1

原创 [多线程】线程安全问题

针对每一把锁, 操作系统内部都维护了一个等待队列. 当这个锁被某个线程占有的时候, 其他线程尝试进行加锁, 就加不上了, 就会阻塞等待, 一直等到之前的线程解锁之后, 由操作系统唤醒一个新的线程, 再来获取到这个锁.这点也和线程的抢占试运行调度有关。我们可以这样认为,如果在多线程环境下代码运行的结果是符合我们预期的,即在单线程环境下应该有的结果,那么就说明这个线程是安全的。2) 一旦线程1 修改了 a 的值, 此时主内存不一定能及时同步. 对应的线程2 的工作内存的 a 的值也不一定能及时同步.

2023-11-25 17:26:17 111 4

原创 【操作系统】线程的状态

在线程中,有很多的状态。这些状态代表了线程目前所处的位置和情况,我们也可以通过这些状态,在以后的工作中,精准的定位到程序出现的问题。

2023-11-24 22:23:05 197 2

原创 【多线程】Thread类的使用

Thread是jvm用来管理线程的一个类,即,在Java中,每个线程都有一个唯一的Thread对象与之关联。每个执行流,也需要有一个对象来描述,类似下图所示,而 Thread 类的对象就是用来描述一个线程执行流的,JVM 会将这些 Thread 对象组织起来,用于线程调度,线程管理。

2023-11-24 20:24:02 125

空空如也

空空如也

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

TA关注的人

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