自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python - sqlparse 解析库的基础使用

这样就显示已经安装好了。

2024-08-21 10:54:32 248

原创 自动化测试 — selenium + Java

将人为驱动的测试行为转化为机器执行的过程。自动化测试包括UI自动化,接口自动化,单元测试自动化。按照这个金字塔模型来进行自动化测试规划,可以产生最佳的自贡话测试产出投入比(ROI),可以用较少的投入获得很好的收益。

2024-08-06 15:43:35 579

原创 关于测试分类

界面测试(简称UI测试,指按照界面的需求(一般是UI设计稿)和界面的设计规则,对我们软件界面所展示的全部内容进行测试和检查,一般包括如下内容:① 验证界面内容显示的完整性,一致性,准确性,友好性。比如界面内容对屏幕大小的自适应,换行,内容是否全部清晰展示;② 验证整个界面布局和排版是否合理,不同板块字体的设计,图片的展示是否符合需求;③ 对界面不同控件的测试,比如,对话框,文本框,滚动条,选项按钮等是否可以正常使用,有效和无效的状态是否设计合理;④ 界面的布局和色调符合当下时事的发展。

2024-08-04 21:15:54 1001

原创 如何设计测试用例

需求文档 → 梳理需求(掌握需求)→ 针对文档设计测试用例(基于需求设计测试用例)基于需求设计测试用例是测试设计和开发测试用例的基础,第一步就要分析测试需求,验证需求是否正确、完整、无二义性,并且逻辑自洽。在需求正确的基础上细化测试需求,从测试需求提炼出一个个测试点或者测试项,然后根据每一个测试点进行测试用例的设计;在分析测试需求时,一般分为和很明显,这样设计出来的测试用例很难穷举完,而且这只是一个小小的功能,还会存在测试遗漏的问题。

2024-08-02 20:55:03 593

原创 软件测试生命周期、BUG描述与处理策略

需求分析:需求是否完整、是否正确测试计划:确定由谁测试、测试的起止时间、设计哪些模块测试设计、测试开发:写测试用例(手工、自动化测试用例)、编写测试工具执行测试用例测试评估:测试人员产生测试报告。

2024-08-02 10:46:54 1189

原创 测试的基础概念

测试用例是一组集合,包含测试环境、测试数据、预期结果、操作步骤......测试用例用户注册操作步骤期望结果进入注册页面,选择注册系统展现注册页面输入符合要求的单位名称、单位邮箱、密码、确认密码、组织机构代码、验证码,并确认同意《用户注册协议》,提交注册信息系统进行注册操作,发送激活邮件。注册成功后,跳转到注册成功页面,并提示用户进行激活操作。进入注册用的邮箱,进行激活操作激活成功用注册的邮箱和密码,进行登录操作登录成功,系统展示欢迎页面测试方式手动重要性。

2024-08-01 15:03:14 452

原创 Redis

直接输入:yum -y install redis;输入命令:vim /etc/redis.conf; 1. 然后在里面将 “bind 127.0.0.1” 注释掉 2. 将 “protected-mode yes” 改为“protected-mode no” 3. (非必须)设置密码:可以使用 “/” 再加上 requirepass 来进行搜索,然后找到 “requirepass foobared”,foobared → 设置成自己的密码,然后再把这行前面的 “#

2024-06-25 16:30:09 360

原创 Spring事务 和 事务传播机制

Spring 中事务的实现这里的 事务 和之前 MySQL的事务 一样,都是表示将⼀组操作封装成⼀个执⾏单元(封装到⼀起),要么全部成功,要么全部失败。Spring 中事务的实现1.编程式事务(手动档)。运行结果:2.声明式事务(自动挡)。

2024-06-18 17:15:35 971

原创 拦截器 之 用户登录判断

Componentpublic class LoginInterceptor implements HandlerInterceptor { // 继承这个接口表示当前是一个自定义拦截器// 生成重写代码,此方法表示在目标方法前调用,返回的是一个 boolean 类型的// 返回 true 表示拦截器校验成功,正常执行// 返回 false 表示拦截器校验失败,不会往下执行@Override// 判断用户是否登录= null) {// 说明用户已经登陆。

2024-06-15 16:58:23 473

原创 Spring AOP

AOP 组成的相关概念。AOP(Aspect Oriented Programming):面向切编程。是对某⼀类事情的集中处理,例如网站的登录验证,不使用 AOP 的话发布文章需要一段代码进行验证、编辑文章需要验证......而使用 AOP 的话只需要在某⼀处配置⼀下,需要验证的地方都可以实现了。AOP 是⼀种思想,而 Spring AOP 是⼀个框架,提供了⼀种对 AOP 思想的实现,它们的关系和IoC 与 DI 类似。AOP 组成的相关概念。

2024-06-14 18:31:53 642 1

原创 MyBatis 获取参数的两种方式

使用这种方式的结果是直接替换。

2024-06-14 15:38:59 157

原创 动态 SQL

例如在有一些网站进行注册的时候,会要求必须输入邮箱、密码,而那些年龄性别什么的则并不是必填项。假设现在有种情况:全部数据都是非必传的,其中有一个数据传过来了,但是后面没数据就会导致 SQL 语句中多出来了一个 , 逗号就会导致报错。也就是说执行的 SQL 语句并不是固定的,而是不同人的不同操作执行的语句会有所差异。用在 update 修改操作里面的,跟 的使用一样,如果不传的话就不会生成,绑定⽅法参数中的集合,即表示需要 foreach 的是谁。遍历时的每⼀个对象,每次循环的是什么。

2024-06-13 21:51:46 508

原创 使用 MyBatis 来增删改查数据库

MyBatis 是一个更简单完成程序和数据库交互的⼯具,也就是更简单的操作和读取数据库⼯具。

2024-06-12 16:21:44 481

原创 spring MVC

MVC 是Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分。● Model(模型)是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。● View(视图)是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的。(这个基本没有了,前后端分离了)● Controller(控制器)是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据,控制⽤户输⼊,并向模型发送数据。

2024-06-07 19:52:27 677

原创 关于 spring boot 的 目录详解 和 配置文件 以及 日志

spring boot 的配置文件有两种格式,分别是 properties 和 yml(yaml)。这两种格式的配置文件是可以同时存在的,此时会以 properties 的文件为主,但一般都是使用同一种格式的。

2024-06-04 20:22:04 535

原创 Bean 作用域和生命周期

先通过下述代码来感受下 Bean 的作用域然后使用两个不同的类去获取 Bean运行后发现:一个地方改了,这个 Bean 就变了,已经不是原来的值了这是因为 Bean 默认情况下是单例状态(singleton),也就是所有地方的使⽤的都是同⼀个对象,因为单例可以很大程度上提高性能,所以在 Spring 中 Bean 的作⽤域默认就是 singleton 单例模式。

2024-06-01 20:55:40 498

原创 获取 Bean 对象更加简单的方式

获取 bean 对象也叫做对象装配,是把对象取出来放到某个类中,有时候也叫对象注⼊。对象装配(对象注⼊)即DI 实现依赖注入的方式有3 种:1. 属性注⼊2. 构造⽅法注⼊3. Setter 注⼊。

2024-06-01 14:28:02 502

原创 存储 Bean 对象更加简单的方式

如果是在spring-config 中添加 bean 标签来注册内容,每个类都要弄一次就显得麻烦和臃肿了,对于 new 操作而言就没有什么优势了。因此 spring 就引入了注解操作来实现对 Bean 对象的存储。配置扫描路径想要将对象成功的存储到 Spring 中,就需要配置⼀下存储对象的路径,只有在这个路径下的(也包含子路径)所有类,添加了注解才能被正确的识别并保存到 Spring 中。 和 component-san 是可以同时存在的。

2024-05-31 17:33:18 337

原创 Spring 创建和使用

创建 Spring 项目创建 Spring 项目主要分为三步。

2024-05-30 15:05:15 416

原创 关于 Spring 是什么

Spring 就是一个包含了多种工具和方法的 IoC 容器。把 Bean 对象存进 IoC 容器中,从 IoC 中把 Bean 对象取出来。IoC 和 DI 描述的是同一件事,只是再细致区分的话会有所不同:IoC 是一种思想,DI 是一种具体实现的技术。Spring 最核心的功能就是 IoC 容器的 存 和 取。

2024-05-29 19:13:10 952

原创 关于 JVM

像办公楼一样,有办公区休息区吃饭区啥的,JVM 这个应用程序就会在启动的时候就会向操作系统申请一块内存区域,然后把这个区域分成几个部分,每个部分有不同的功能作用。一个 Java 进程就对应一个 JVM。(虽然说这里的栈也是“先进后出”的,但数据结构的栈是个更大的概念,这里的特指 JVM 的一块内存空间)native 表示 JVM 内部的 C++ 代码,这里就是给调用 native 方法(JVM 内部的方法)准备的栈空间。这里存储的是 native 方法之间的调用关系。记录当前线程执行到哪个指令了。

2024-05-27 20:57:56 861

原创 Cookie 和 Session

HTTP 协议属于 "无状态" 协议:默认情况下 HTTP 协议的客户端和服务器之间的这次通信, 和下次通信之间没有直接的联系. 但是大多数时候, 我们是需要知道请求之间的关联关系的。例如登陆网站成功后, 第二次访问的时候服务器就能知道该请求之前是不是登陆过了。图中的 "令牌" (sessionid)通常就存储在 Cookie 字段中(相当于给了一张超市会员卡)。此时在服务器这边就需要记录令牌信息, 以及令牌对应的用户信息, 这个就是 Session 机制所做的工作.

2024-05-22 20:18:15 720

原创 Servlet 的 API

init:当 tomcat 收到了 /hello 这样的路径是请求后就会调用 HelloServlet,于是就需要对 HelloServlet 进行实例化(只实例一次,后续再有请求也不实例了)。destory:如果是通过 smart tomcat 的停止按钮,这个操作本质上是通过 tomcat 的 8005 端口主动停止,能够触发 destory。但如果是直接杀进程,此时很可能来不及执行 destory(这种情况比较常见)。

2024-05-22 19:28:24 1139

原创 Servlet 是什么及创建第一个 Servlet 程序

网站的后端就涉及到 http 服务器,因此肯定需要针对 http 协议进行一系列操作。tomcat 已经把这些相关操作已经封装好了,就叫 Servlet。Servlet 是一种实现动态页面的技术是一组Tomcat提供给程序猿的API,帮助程序猿简单高效的开发一个 web app.静态页面:内容始终固定的页面即使页面内容也不会发生变化.(tomcat 官网每个人的页面都是一样的)页面内容会发生变化.(B站每个人的页面都是不一样的)使用IDEA创建一个Maven项目。

2024-05-18 16:49:45 781

原创 Tomcat

下载安装这里所说的 Tomcat 并不是动画片里的而是一个学习了 HTTP协议知道了HTTP协议就是HTTP客户端和HTTP服务器之间的交互数据的格。同时也通过 ajax和分别构造了HTTP客户端. HTTP 服务器我们也同样可以通过来实现而Tomcat就是基于Java实现的一个开源免费, 也是被广泛使用的 HTTP服务器。下载安装。

2024-05-18 13:57:40 314 1

原创 应用层之 HTTP 协议

HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议。所谓 "超文本" 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些 其他的资源, 比如图片, 视频, 音频等二进制的数据。浏览器获取到网页,就是基于 HTTP 的,也就相当于 浏览器 和 服务器 之间的桥梁。目前我们主要使用的还是 HTTP1.1。

2024-05-15 16:12:33 802

原创 DOM API

要能够和用户交互,就得先知道用户干了啥,用户做的一些动作,会在浏览器中产生一些事件(鼠标点击、按下键盘、调整浏览器窗口等),然后代码就需要针对这些事件作出反应。就像一放学回家,老妈(事件源)就一脸严肃坐在沙发上盯着我(事件类型),我这时就紧张地回忆我犯了什么事,是考试不及格还是偷偷吃辣条(事件处理程序)。使用 innerHTML 属性就能拿到元素里面的内容(开始标签 和 结束标签 夹着的内容),修改这个属性,就会影响到界面的显示。如果需要与指定选择器匹配的所有元素的列表,则应该使用。

2024-05-13 14:53:32 1003

原创 应用层协议之 DNS 协议

就是一个域名解析系统。域名就是网址,类似于 www.baidu.com。网络上的服务器想要访问它,就得需要它对应的 IP 地址,同时,每个域名对对应着一个 / N个 IP 地址(即对应多台服务器)。因此,为了能够把域名和 IP 地址给对应上,就有了以下两种方法。

2024-05-09 17:19:19 361

原创 数据链路层之 以太网协议

这个协议即规定了数据链路层,同时也规定了物理层的内容。平时使用到的网线,其实也叫做“以太网线”(遵守以太网协议的网线)。

2024-05-09 16:28:40 407

原创 网络层协议之 IP 协议

一个数据报构造出来会有一个初始的 TTL 数值(比如 32、64),这个报每经过一个路由器转发,TTL-1,如果一直减到 0,还没有到达目标,那么就会认为这个报永远不会到达了,就会丢弃。8 位服务类型:实际上只有 4 位是有效的,这四位中只能出现 1 位是 1,其余的都是 0,因此就表示 IP 协议的四种形态 / 四种工作模式:最小延时、最大吞吐量、最高可靠性、最小成本。4 位首部长度:描述了 IP 报头多长,IP 报头是变长的,因为报头中的选项部分是可有可无的,此处的单位也是 4 字节(

2024-05-08 20:39:03 1205

原创 传输层之 TCP 协议

源/目的端口号:表示数据是从哪个进程来,到哪个进程去。序号:发送数据的序号。确认序号:应答报文的序号,用来回复发送方的。4 位首部长度:一个 TCP 报头,长度是可变的,不像 UDP 固定是 8 个字节。描述了 TCP 报头具体多长。因为选项之前的部分都是确定的 20 字节,所以首部长度 -20 字节就是选项部分的长度。如果首部长度值是 5,表示整个 TCP 报头是20字节(相当于没有选项)。

2024-05-03 20:28:08 940

原创 传输层之 UDP 协议

发送方会发数据和校验和过去,接收方会针对收到的数据生成一个校验和跟收到的校验和进行比较,一样的话就是正确的,不一样就会直接丢弃。因为 UDP 报文长度是 2 个字节表示,即 16 位,表示的范围是 -32768 → +32767,即 0 → 65535,换算单位就是 64 KB。UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一 致;UDP 会把载荷数据,就是通过 UDP Socket,即 send 方法拿来的数据基础上,在前面拼接上 8 个字节的报头。

2024-05-03 09:39:59 1163

原创 TCP流套接字编程

ServerSocket 是专门给服务器使用的 Socket 对象。

2024-04-27 16:42:58 1133

原创 UDP数据报套接字编程

DatagramSocket,是UDP Socket,用于发送和收 UDP 数据报。使用这个类,表示一个 socket 对象。一个 socket 对象只能跟一台主机进行通信。在操作系统中,把这个 socket 对象当成一个文件来处理的,相当于是 文件描述符表 上的一项。创建一个UDP数据报套接字的Socket,随机分配一个空闲端口(一般用于客户端)创建一个UDP数据报套接字的Socket,绑定到本机指定的端口(一般用于服务端)从此套接字接收数据报(如果没有接收到数据报,该方法会阻塞等待)

2024-04-25 20:33:26 579

原创 关于死锁的详谈

死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。光头强和女神一起去饺子馆吃饺子. 吃饺子需要酱油和醋,光头强抄起了酱油瓶, 女神抄起了醋瓶.光头强: 你先把醋瓶给我, 我用完了就把酱油瓶给你.光头强: 你先把酱油瓶给我, 我用完了就把醋瓶给你.如果这俩人彼此之间互不相让, 就构成了死锁.酱油和醋相当于是两把锁, 这两个人就是两个线程.为了进一步阐述死锁的形成, 很多资料上也会谈论到 "哲学家就餐问题".

2024-04-20 11:15:01 885

原创 JUC(java.util.concurrent) 的常见类

Callable 是一个 interface(类似之前的 Runnable,用来描述一个任务,但是没有返回值)也是描述一个任务的,有返回值。方便程序猿借助多线程的方式计算结果.创建线程计算 1 + 2 + 3 + ... + 1000, 不使用 Callable。

2024-04-20 10:29:21 1451

原创 八股文之 synchronized 原理

偏向锁不是真的 "加锁", 只是给对象头中做一个 "偏向锁的标记", 记录这个锁属于哪个线程. 如果后续没有其他线程来竞争该锁, 那么就不用进行其他同步操作了(避免了加锁解锁的开销) 如果后续有其他线程来竞争该锁(刚才已经在锁对象中记录了当前锁属于哪个线程了, 很容易识别当前申请锁的线程是不是之前记录的线程), 那就取消原来的偏向锁状态, 升级成轻量级锁状态. 偏向锁本质上相当于 "延迟加锁" . 能不加锁就不加锁, 尽量来避免不必要的加锁开销. 但是该做的标记还是得做的, 否则无法区分何时需要真正加锁.

2024-04-19 12:59:02 1127

原创 八股文之 CAS

CAS: 全称Compare and swap,字面意思:”比较并交换“,一个 CAS 涉及到以下操作:我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。1. 比较 A 与 V 是否相等。(比较)2. 如果比较相等,将 B 写入 V。(交换)3. 返回操作是否成功。上述这个 CAS 过程并非是通过一段代码实现的,而是通过。

2024-04-18 14:30:27 1065

原创 八股文之“常见的锁策略“

接下来讲解的锁策略不仅仅是局限于 Java . 任何和 "锁" 相关的话题, 都可能会涉及到以下内容. 这些特性主要是给锁的实现者来参考的.也就是说你实现锁的时候,考虑出现锁竞争了咋办。普通的程序猿也需要了解一些, 对于合理的使用锁也是有很大帮助的.预测锁竞争不是很激烈,做的工作相对少一些预测锁竞争会很激烈,做的工作相对多一些举个栗子: 同学 A 和 同学 B 想请教老师一个问题.同学 A 认为 "老师是比较忙的, 我来问问题, 老师不一定有空解答". 因此同学 A 会先给老师发消息: "老师你忙嘛。

2024-04-17 10:45:27 833

原创 Java的定时器

schedule 包含两个参数. 第一个参数指定即将要执行的任务代码, 第二个参数指定多长时间之后执行 (单位为毫秒)。原因:把时间小的作为优先级高的先执行,如果还没到指定的执行时间就阻塞。此时就只需看队首元素即可,时间复杂度就是O(1)。定时器是软件开发中的一个重要组件. 类似于一个 "闹钟"。达到一个设定的时间之后, 就执行某个指定好的代码.比如一个 Map, 希望里面的某个 key 在 3s 之后过期(自动删除).b)一个在定时器内部的线程(用来扫描队首元素是否可以执行)a)一个带优先级的阻塞队列。

2024-04-16 17:28:57 765

空空如也

空空如也

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

TA关注的人

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