- 博客(55)
- 收藏
- 关注
原创 二叉树学习笔记
树是一种非线性的结构,它是由n个有限结点组成的一个具层次关系的集合。(像一颗倒着的树)特点:有一个特殊的结点,称之为根结点,根结点没有前驱结点除了根节点以外,其余节点别分成M个互不相交的集合,每一个集合又是一颗与树类似的子树,每颗子树的根节点有且只有一个前驱结点,可以有0或n个后继结点除了根结点之外,每一个结点都只有一个父结点。
2024-08-18 16:35:41
959
原创 博客系统测试用例报告
登陆成功后,跳转到博客列表展示页面,该页面上展示出用户的个人信息卡片,其中点击Github会直接跳转到个人的Github的页面,展示出主页,写博客,注销等按钮,中间展示所有博客,单条博客展示标题,时间,截取的内容,下方一个查看全文按钮,点击后跳转到详情页面。
2024-08-13 15:15:43
894
3
原创 自动化测试-selenium
自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最 后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。自动化测试包括UI自动化,接口自动化,单元测试自动化。单元自动化测试最大的投入应该在单元测试上,单元测试运行的频率也更加高。java的单元测试框架是Junit接口自动化测试接口测试就是API测试,相对于UI自动化API自动化更加容易实现,执行起来也更稳定。
2024-08-11 14:00:09
739
原创 性能测试学习笔记
测试人员借助测试工具,模拟系统在不同场景下,对应的性能指标是否达到预期LoadRunner是一种适用于许多软件体系架构的自动负载测试工具,从用户关注的响应时间、吞吐量, 并发用户和性能计数器等方面来衡量系统的性能表现,辅助用户进行系统性能的优化。
2024-08-09 15:11:32
867
原创 数据库相关命令
2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分。如果是一个分布式的系统,自增主键就没有用了(方法1:时间戳id +主机编号/机房编号)1.drop删除了表及内容而delete删除表里的数据,表还在。2.NULL数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面。1. WHERE条件可以使用表达式,但不能使用别名。添加了自增主键,如果不给主键输入值,则会自动分配。1.没有order by 子句的查询是无序的。注意:关联查询可以对关联表使用别名。
2024-07-23 20:24:24
929
原创 优先级队列模拟实现
如果有一个关键码的集合K{k0,k1,k2,......kn},把他所有的元素按照二叉树的存储方式存储,在一个一维数组李,满足:ki
2024-06-24 16:02:24
875
原创 力扣:209.长度最小的子数组
设置两个指针,分别表示子数组的开始和子数组的结束两层for循环,最后求子数组总和一个while,自己在脑子想想,跑不过,我就不画图,写代码了哈。方法二:在暴力枚举的方法上做出改进-->滑动窗口,还是用了双指针,和单调性,全是正数会越加越大,让两个指针同向移动来实现优化。3.特殊情况:数组总和小于target,返回零。方法一:暴力枚举:时间复杂度是O(n^3)如果不存在符合条件的子数组,返回。是该条件下的长度最小的子数组。个正整数的数组和一个正整数。滑动窗口步骤:1.进入窗口。
2024-01-13 13:17:24
475
2
原创 力扣:18.四数之和
时间复杂度O(n^4)-----》这个不可跑过力扣。时间复杂度O(n^3)-》利用率三数之和--》利用率两数之和。由题可知:做这个题要主要面临的困难是去重和漏选,去重主要利用的是排序,set等,漏选就枚举。示例解析[1,0,-1,0,-2,2]->排序后[-2,-1,0,0,1,2]2.去除第二个数的重如:第一固定数是-1,第二固定数:0,0结果一样。4.两数之和,设置两个指针left,right-》降低复杂度的关键。去重:1.去除第一固定数的重如:0,0,求出来的一样。请你找出并返回满足下述全部条件且。
2024-01-09 22:20:21
505
原创 力扣:15.三数之和
1.暴力枚举:显然是不行的都O(n^3),力扣肯定顶过不了,通过上面的阐述,我们可以将三个数返程1+2的形式:将一个指针i指向数组的元素,然后用target去减去nums[i]的到两个数的target然后转化成求两数之和这个就是解法二。得出结论: nums[i]+nums[j]+nums[k]==0 && i!2解法二:单调性,双指针加上暴力枚举,时间复杂度降到O(n^2)例如:[2,7,11,15,19,21],target=30。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。
2024-01-06 10:47:00
1053
原创 309.最佳卖股票的时机包含冷冻期
给定一个整数数组prices,其中第prices[i]表示第i天的股票价格。设计一个算法计算出最大利润。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。从题目中可以知道一个状态基:3对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]
2023-11-28 13:55:25
440
原创 11.盛最多的水的容器
给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i, 0)和。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。49图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
2023-11-28 10:09:11
402
原创 MyBatis的xml实现
①创建Mapper文件,首先在java目录下创建mapper目录,在mapper目录下常见UserInfoXNMLMapper文件,其次在resource目录下创建mapper目录,在maaper目录下创建同名的UserInfoXNMLMapper(2.select标签为自己编写的查询语句 ,其中id是UserInfoXNMLMapper中的方法名必须一模一样,resultType为返回数据的类型。方法声明在UserInfoXNMLMapper文件中,根据id。1.方法名和id一定要一样。
2023-11-21 00:20:55
553
原创 Spring 中存取 Bean 的相关注解
要把某个对象交给Ioc容器管理,需要在类上加上注解如@component,而spring框架提供了很多的注解主要分为两类:类注解:@Controller、@Service、@Repository、@Component、@Configuration方法注解:@Bean。
2023-11-07 20:52:49
162
原创 Cookie 和 Session
浏览器按照不同的“域名”分别存储Cookie域名和域名之间的Cookie互不干扰,Cookie存储在有硬盘中,重启不消失,但是Cookie 也不会一直存储下去,会有超时时间,不同的网站的超时时间是不同的,比如中国银行app几分钟可能就会出现让你重新登录的消息。session,在一个服务器上是存在多份的,每个用户都有自己的session,一个服务器同时会有多个用户, 每个Session对象,youkeyi存储键值对,此处我们称这个为attribute,主要是区分key,这个键值对也是程序员自定义的。
2023-10-02 20:38:32
94
原创 HTTPS 的加密流程
运营商劫持的背景下产生的,未被劫持的效果是例如我要在网站上下载一个软件,当点击下载按钮的时候,就会弹出该软件的URL,然后成功下载,而被劫持的效果就是,当点击下载按钮的时候会弹出另一个下载软件的URL,从而下载了其他的软件,这是由于我i们通过网络传输的任何数据都会经过运营商的网络设置(路由器,交换机等),那个运营商的网络就会解析出我们传输的数据内容并进行篡改(类似于黑客)
2023-09-16 22:49:58
89
原创 HTTP 协议的基本格式以及 fiddler 的用法
>最常见的应用层协议,主要是基于传输层的TCP协议传输,在日常生活中,当我们访问一个URL(网址),浏览器会给服务器发送一个HTTP请求,服务器也会返回一个HTTP响应,超文本:指的是传输内容不仅仅是文本,还可以是字符串,图片,声音,视频等。
2023-09-15 16:32:59
578
原创 NAT 机制的工作流程
1.NAT能够将私有IP对外通信时转换位全局IP,是一种将私有IP和全局IP相互转换的技术。2.很多地方采用的是每一个终端设置一个私有的IP,而在路由器或必要的服务器上设置全局IP。3.全局IP要求唯一,但是私有的IP并无要求,在不同的局域网中可以出现相同的IP。
2023-09-09 20:25:56
272
原创 IP协议相关特性
IP地址是指互联网协议地址,又译为网际协议地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的位一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。IP是一个32位二进制数,通常被分为4个“八位二进制”,通常用点分十进制表示如:127.0.0.1。
2023-09-06 15:35:20
81
原创 TCP的核心特性
丢包情况:在网上经常会发现一些数据丢失问题,是应为网络是较为复杂,路由器或者交换机工作压力大,当在繁忙的时候,又需要传入大量的数据,等待的时间过长,则会出现丢包现象,这是一个客观现象,也不知道什么时候会丢包,出现这种情况,我们要重传,当等待时间超时,我们进行重传,简称超时重传。直接用TCP的序号来作为判断依据,tcp会在内核中,给每个socket对象都安排一个内存空间,相当于一个队列,也称“接受缓冲区”,收到数据后,都会放到缓冲区,并按照序号排列好,:只需要知道这一串字节的开始编码,以及知道长度。
2023-08-31 23:21:49
62
原创 UDP 的报文结构和注意事项
使用的方法是循环冗余法,把UDP中的每个字节,都依次相加(溢出也没关系),最总得到校验和。传输数据的时候会把原始数据和校验和一起传输,接收方收到数据,后在进行校验和运算,当新校验和和旧的校验和相同则视为成功。UDP具有缓冲接收区,但是这个接收区不能保证收到UDP报的顺序和发送UDP报的顺序一直,如果缓冲区满了则会发生数据丢失。UDP没有真正意义上的发送缓冲区,发送的数据会直接交给内核,由内核将数据传送给网络层协议进行传输动作。:应用层交给UDP多长的字报,UDP会原样发送,不会拆开,也不会合并。
2023-08-29 17:52:57
69
原创 CAS介绍
CAS全称Compare and swap,就是"比较交换",一个CAS指令涉及操作:1.比较是否相等2.如果相等就写入3.返回。4)线上服务器通过这些统计内容,进行简单的计数=>实现监控服务器/获取/统计/展示/报警。2)统计效果:统计出现错的请求次数,统计收到的请求的次数(衡量服务器的压力)3)通奸每个请求的响应时间=>平均的响应时间()衡量服务器的运行效率)包,里面的类都是基于这种方式来实现的,典型的就是。
2023-08-03 16:00:09
55
原创 synchronized采用的所策略
编译器,会智能的判定,当前这个代码,是否有必要加锁,如果你写了加锁,但实际上没有必要加锁,就会把加锁操作自动删除掉(StringBuffer),在这个优化过程中,要保证优化之后的逻辑和之前的逻辑一致的,,不是真的加锁,而是做一个标记,如果有别的线程来竞争锁,才会加锁,如果没有别的锁竞争.就自始至终不会加锁(加锁本身就有一定的开销,在必要的时候才加)3).synchronized重量级锁的部分是基于系统的互斥锁实现的,轻量级主要基于自旋锁。就会按照自旋的方式,来反复查询当前的锁的状态.
2023-08-02 09:48:49
70
原创 死锁===
如果是一个不可重入锁,这把锁不会保存,是哪一个线程对他加锁,只要它当前处于加锁状态,收到了“加锁”的请求,就会当即拒绝这个请求,而不管当下是那个线程,都会产生死锁,而可重入锁,则会让这个所保存起来,是哪个线程加上锁,后续收到加锁请求就会先对比一下,看看枷锁线程是不是当前持有这把锁,这个时候就可以了灵活判断了(synchronized本身是一个可重入锁),若加锁很多个,那就是在最外面的那个锁解开,(增加一个计数器,遇到加锁+1,解锁-1,在零处释放)。1)互斥使用,一个线程获得一个锁后,别的线程就不能获得。
2023-08-01 21:30:45
50
原创 保证线程安全
若想使用该程序,可使用加锁,但是加锁会阻塞程序,未必是好事,加一个if即可解决问题,后续不用再做其他操做了,第一个线程再修改完instance之后,就结束了,释放了锁,在一个问题,字节据上述问题后,又会从在可见性问题所以加上一个volatile(编译器会不会优化是不可知的,避免了指令重排序)。1.synchronized->给对象加一个标记,当两个线程尝试对同一个变量加锁就会导致,一个线程先拿到锁,另一个线程就会阻塞等待,等第一个线程释放锁了之后,该线程才会解除阻塞,尝试获取锁。1.随即调度,抢占执行。
2023-07-28 18:42:23
45
原创 Thread 类的基本用法
而在现实中,我们更喜欢确定的东西,,所以研究出了等待一个线程,基本原理就是若存在两个线程A,B,如希望吧、B结束然后A结束,则只需在A的程序下添加一个B。注意:线程正在sleep的过程中,其他线程调用interrupt 就会强制使sleep抛出一个异常,sleep立即被唤醒,被唤醒的同时清楚标志位-》给留下了更大的空间要想停止在catch中加入break。start 方法:在系统中真正创建出线程(操作系统=内核+程序,内核是系统的核心功能,对下管理各种硬件设备,对上,提供各种程序提供稳定的运行环境)。
2023-07-24 17:00:52
61
原创 java库中的Thread类
1.创建一个类,继承自Thread,重写run方法。1)runnable 没有start方法,所以要实例化一个Thread。1)创建一个子类,这个子类继承自Thread,但是这个子类没有名字。3)把子类,创建出实例,把这个实例传给Thread的构造方法。3)创建了该子类的实例,并且使用thread这个引用指向。3.继承thread,重写run方法,基于匿名内部类。4.实现Runnable,重写run,基于匿名内部类。java标准库中,提供了Thread类,表示线程。2)在子类中重写run方法。
2023-07-24 10:54:23
69
原创 认识线程(Thread)
多进程已经很好的实现了并发编程的效果,但是,进程有很明显的缺点,进程消耗资源量大,速度慢,如果进程销毁和创建过于频繁,那么栈的开销就大了(需要给进程分配资源),于是聪明的程序员就想了一个办法,能不能,创建进程的过程中,只是简单的分配一个PCB,而不去分配内存硬盘资源。所谓线程,也可以称之为:轻量级进程,一个进程可以包含一个线程,也可以包含多个线程,这一个进程中的多个线程共同复用了进程中的各种资源(内存+硬盘),但是这些线程各自独立的存在在cpu上进行调度(有自己独立的状态,上下文,优先级,记账信息等)。
2023-07-22 14:57:00
82
原创 Map 和 Set
找到后判断该叶子节点值无key的大小,在选择要插入的位置,若要插入的数字已经在二叉搜索树内,则无法插入。(1).若左子树不为空,那么它的左子树上的节点值都小于根节点的值;(2).若右子树不为空,那么它的右子树上的节点值都大于根节点的值;2.3 cur不是root,cur 是parent .right;设待删除的节点是cur,待删除的节点的双亲节点是parent。2.2cur不是root,cur是parent.left;1.2cur不是root,cur是parent.left;
2023-06-05 11:49:18
49
原创 优先级队列
1.堆的概念:如果有一个关键词的集合K={K0,K1....},把他所有的元素按照二叉树的顺序存储方式存储,在一个一维数组里。2.堆总是一个完全二叉树。2.堆的性质:1.堆的某个节点的值不大于或不小于父亲节点。2.在让0下标元素向下调整。方法:1.让堆顶元素和堆尾元素互换。方法:1.插入大根堆的尾巴,
2023-05-24 14:36:01
53
原创 对列Queue
1.队列概念:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的的特性,FIFO(first in first out)入队列,进行插入的一端称为对尾,进行删除操作的一端是对头。1.2队列的基本使用方法。1.3方法的简单使用。1.4单链表实现队列。
2023-04-22 17:14:54
75
原创 Java中的异常
2.24finally:在写程序的时候,有些特定的代码,不论程序是否发生异常,都需要执行,比如,程序中打开资源:网络链接,数据库链接,io流等,在程序正常或者异常退出时,必须对资源进行回收,另外,因为程序的异常会引发程序的跳转,可能导致有些语句执行不到,这个时候就要用到finally。2.2.1异常声明throw:处在方法声明时参数列表之后,当方法中抛出编译异常的时候,用户不想处理该异常,此时就可以借助throw将异常抛出给方法调用者来处理,即当前方法不处理异常,提醒方法的调用者来处理该异常。
2023-04-09 15:29:30
59
原创 抽象类和接口
(1).类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定,微软的自定义接口总是后带able字段,证明其是表述一类类“我能做。使用抽象类时,实际工作不应该由父类完成,而应该有子类完成,那么因此如果不小心误用成了父类,普通编译器会报错,以及抽象的父类被实例化时也会报错,这让我们可以尽早的发现错误,充分的发挥了编译器的校验功能。(6).抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的.
2023-03-22 13:16:21
57
原创 c语言关键字
(3)修饰函数:函数本身是有外部链接属性,被static修饰后,外部链接属性就变为了内部属性,使得这个函数只能在自己所在的文件中使用这个文件的内部使用,其他源文件不能使用,限制了作用域(等价于这个函数被一个文件独吞了)。(1)修饰局部变量:普通的局部变量通常放在栈区,进入作用域创建,出作用域就销毁,但是被static修饰后,就放在静态区,存储位置改变,放在静态区的变量,创建好后,直到程序结束才释放,改变了变量的生命周期(造价越高,空间越小)。:静态的3种用法:修饰局部变量,修饰全局变量,修饰函数。
2023-03-15 21:41:58
60
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人