- 博客(98)
- 收藏
- 关注
原创 mysql:基本的操作
学习数据库之前我们需要先了解以下几个知识:mysql 服务端与数据库的关系,数据库与表的关系;mysql 客户端和服务端的关系我们一般谈起mysql时我们常常会说我们安装了一个mysql数据库,但其实它是一个mysql数据库的服务端(其实就是一段程序),在mysql服务端程序下管理了很多个不同的数据库。其中mysqld就是mysql的服务端,数据库的本质就是存储,那么就会涉及到磁盘的存储,他所有的数据库都会存储在/var/lib/mysql在此路径中一个数据库包含数据库表,相当于文件夹包
2021-07-25 22:05:47
265
2
原创 mysql:关于安装mariadb
安装在学习MySQL的相关知识前,最重要的当然是我们环境的搭建MySQL和mariadb它们两者在使用是功能都是相同的这里我们先来安装一下mariadb:使用命令:rpm -qa | grep mariadb查看当前路径下是否进行了安装(这里已经完成了安装)安装命令:yum install mariadb-serveryum install mariadbyum install mariadb-devel启动:service mariadb start停止:service mariad
2021-05-15 10:59:32
444
原创 网络:叮 这里有一份post和get请求区别 请注意查收
HTTP协议中post和方法的区别Http协议是应用层的网络协议,协议约束了网页的服务端和客户端的通信我们在学习Http协议时
2021-04-25 14:50:28
209
原创 软件测试:怎样编写一个测试用例
在之前的文章中有介绍关于测试用例的编写方法,那我们该如何去编写一个好的测试用例呢?我们先来回顾一下测试用例相关的知识~测试用例所包含的内容:用例编号、用例名称、测试背景、前置条件、优先级、重要级、测试数据、测试步骤、预期结果、实际结果、备注。测试用例的编写流程:需求分析->提取测试点->测试用例编写->测试用例评审测试用例篇编写测试用例整理分析需求文档分析各个模块的功能,列出主要的测试点编写具体的测试用例我们对一个具体的事物的测试用例时主要从以下几个方面去考虑:
2021-04-19 11:35:36
1763
原创 软件测试:自动化测试工具selenium
自动化测试工具selenium自动化测试selenium工具特点版本Webdriver常用的API元素的定位自动化测试 自动化测试是指软件测试的自动化,再预设的状态下运行应用程序或者系统,预设条件下包括正常和异常,最后评估运行结果,将认为驱动的测试行为转化为机器执行的过程。常见的自动化测试工具有:QTP、selenium、Rational Robot、jmeter、appium、Loadrunner等等。我们经常使用selenium工具帮助我们完成自动测试,相比起其他工具,它有着不少的优势。这
2021-04-18 23:30:16
1574
4
原创 Linux:关于死锁
概念 死锁是至在一组进程中的各个进程都占有不会释放的资源,但因为它们都在申请被其他进程所占用不会释放的资源,就将处于一种永久等待的状态。原因产生的原因可以主要分为以下两点:竞争资源系统中的资源大致分为了两类:可剥夺和不可剥夺资源,当通讯顺序不当时就会发生死锁进程间顺序非法进程被占用而阻塞于是进程就产生了死锁死锁的四个必要条件互斥条件:一个资源每次只能被一个执行流所使用请求与保持条件:一个执行流因为请求资源而阻塞时,对已获得的资源保持不放;不可剥夺条件:一个执行流已获得的资源,
2021-04-14 23:55:17
144
原创 Linux:线程和进程的区别,新鲜出炉啦~
线程和进程概念进程的优缺点线程的优缺点区别怎样理解进程和线程的并发性什么时候会用到多线程 在比较线程和进程之间有什么区别前,我们先来一起回顾一下线程和进程的相关概念和特点。概念进程:一个在内存中运行的程序。每个进程都有自己独立的一块内存空间,进程是操作系统进行资源分配的基本单元。线程:线程是进程中的一条执行流,是CPU调度的基本单元,在Linyx中这个线程的执行流通过pcb实现。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可以进行共享数据。如果还是觉得难以理解,我们看看它的抽
2021-04-14 23:32:03
231
原创 Linux:动态查看错误日志信息
当程序出现错误难以定位问题的时候,可以查看错误日志解决相关的问题,可以在错误日志目录下执行命令tail -f 文件名即可动态查看日志的内容tail -f a.out |grep -C 36 ERROR该命令实时读取日志文件,把出现“ERROR”行的日志前后各36日志打印出来。我们也可以把日志记录到文本中:tail -f a.out |grep -C 36 ERROR >>error.log如果日志在更新,如何实时查看 tail -f /var/log/messages
2021-04-13 00:03:44
6510
原创 网络:HTTP状态码及出错的原因
之前在博客中介绍了HTTP状态码相关内容,这篇文章主要是针对常见的几种错误码的原因以及相关的场景进行探究。博客链接我们在访问一个网页时经常会遇到400、404、500这样的错误页面。我们了解4xx是客户端错误,5xx服务器错误,而客户端错误,往往是由于客户端引起的某些错误进行导致的,(如:Web浏览器、URL命令、postman等服务器发出的请求)而服务器错误,是服务器发生了错误或者服务器识别出无法处理的请求时,将发送500-599的错误状态码400页面400错误页面一般为网站服务器资源
2021-04-12 23:25:16
1353
原创 C++:合并两个有序数组
题目描述:给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2:输入:nums1
2021-04-11 21:34:51
6083
原创 C++:删除有序数组中的重复项
题目描述:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。示例 2:输入:nums = [0,0,1,1,1,2,2,3,
2021-04-11 20:33:11
571
原创 C++:移除元素
题目描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参作任
2021-04-11 20:07:25
182
原创 网络:HTTP状态码
当我们访问一个网页时,浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。HTTP状态码的五种类型类别出现原因1XX信息状态码接收的请求正在处理2XX成功状态码请求正常处理完毕3XX重定向状态码需要进行附加操作才能完成请求4XX客户端错误状态码服务器无法处理请求5XX服务器错误状态码服务器处理请求错误下面是常见状态码
2021-04-09 14:47:50
95
原创 高频:怎样理解三次握手和四次挥手,详解请猛戳这里~
TCP三次握手和四次挥手TCP的连接建立1.TCP三次握手过程和状态转换过程2.查看TCP状态的方法3.为什么是三次握手4.为什么客户端和服务端的初始序列号ISN是不相同的5.初始序列号ISN怎样产生6.TCP层需要MSS的原因7.SYN攻击及避免SYN的方式TCP的连接断开1.TCP四次挥手和状态转换过程2.为什么是四次挥手3.为什么TIME_WAIT等待的时间是2MSL4.为什么需要TIME_WAIT状态5.TIME_WAIT过多有什么危害6.优化TIME_WAIT的方式7.建立连接后客户端出现故障的解
2021-04-08 20:44:37
180
原创 网络:TCP/UDP协议一篇就搞懂
目录再谈传输层TCP的基本认识1.TCP的头格式2.为什么需要TCP协议3.什么是TCP连接,如何确立4.TCP的最大连接数UDP和TCP1.UDP头部格式2.UDP特点3.UDP的缓冲区4.TCP/UDP区别及应用场景 TCP和UDP协议是我们经常使用到的协议,关于网络协议这一方面理解起来较为抽象复杂,这两个协议其实都属于传输层协议,但是它们之前的区别与联系却暗含了很多的知识点,关于TCP和UDP编程可以参考之前的博客链接,这篇文章梳理了相关的知识点,图片来源于大佬分享的一篇文章,原文在这里再谈传输
2021-04-02 20:04:08
1536
原创 C++:青蛙跳台阶问题
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1提示:0 <= n <= 100力扣题目链接点这里题目分析这种题目一般多少都会用到递归的思想,根据题目我们进行分析:设跳上台阶共有f(n)种方法
2021-04-02 12:22:03
2359
1
原创 我是真的不会写二分呀——二分查找详解!!!
二分查找算法我们会经常对它进行应用以及拓展,但它看起来很简单,实则漏洞状况百出,编写二分查找的算法就很迷惑,云里雾里,不要着急,看完这篇,立马干掉这个难题。二分查找1.概念二分查找是查找算法的一种,它又被称为折半查找,适用于有序数组中的查找。我们在平常进行查找时最通用的方法就是:对数组进行遍历,依次比较每个元素(即顺序查找)。二分查找对其进行优化,将每次的比较查找范围缩小了一半。2.算法思想二分查找就是将查找的的元素和子数组的中间值进行比较,如果查找元素小于中间值,就在左子数组中继续查找;如
2021-04-01 23:04:34
185
原创 旋转数组的最小数字
旋转数组的最小数字题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0题目链接点这里方法一:class Solution {public: int minArray(vector<int>&
2021-04-01 20:21:24
72
原创 C++:从尾到头打印链表
题目描述:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000方法一:遍历链表从尾到头依次输出class Solution {public: vector<int> reversePrint(ListNode* head) { vector<int> array; ListNode*
2021-03-31 15:32:36
303
原创 网络:简单的UDP网络程序
UDP的大致流程如下:UDP服务器和客户端实现需要的头文件#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>
2021-03-26 17:02:52
113
原创 网络:UDP网络编程的小前提
在了解如何创建套接字后,我们要实现UDP网络程序过程,在此之前,我们先对其部分功能进行测试验证;在这里插入代码片验证:sockfd是不是文件描述符;是否成功绑定端口:查看端口是否被绑定——>netstat -anp (可以查看当前操作系统端口的占用情况)...
2021-03-26 16:46:49
68
原创 如何进行数据的抓包
抓包抓包就是对网络传输中发送与接收的数据包进行截获、重发、编辑、转存等操作。前提:抓取的数据包是从网卡设备中进行抓取的;winwiresharkLinuxtcpdump从上图我们就可以了解到tcpdump就是我们使用的一个工具;我们在使用它时有一个万能公式:tcpdump -i any port [端口] -s 0 -w 文件名一定是在root用户下进行抓包的哦...
2021-03-26 15:59:43
2822
原创 vim打开文件提示:Found a swap file by the name
使用vim编辑器编写代码时,由于网络的不稳定,断开了链接,而写好的代码也没有进行运行和保存,而此时再进入之前写好的代码文件时,就会出现以下的提示界面:发现出现了这样的报错提醒:Found a swap file by the name产生原因文件发生了异常中断(非正常退出)时,就会在当前目录下生成了一个***.swp文件(我在使用时cli.cpp.swp文件)。在Linux中,以.开头的文件都是隐藏文件,可以通过使用ll -a或者ls -a来查看。这种swp文件是隐藏文件,有两个作用:避免用
2021-03-24 22:18:56
22842
1
原创 CentOS No entry for xxx in x section of the manual的解决方法
CentOS No entry for xxx in x section of the manual的解决方法问题:想要查看系统调用的函数说明时,发现产生了如下图的报错产生的原因:centos默认安装的manual是精简版解决方法:切换到roo 用户下 安装man-pages安装时按照提示确认即可完成安装这样我们便可以使用man 进行查询了~...
2021-03-24 15:20:36
473
原创 数组中重复的数字
题目描述:找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000方法一(鸽巢原理):所以我们可以将见到的元素 放到索引的位置,如果交换时,发现索引处已存在该元素,则重复 。充分利用题目条件,长度为 n 的数组
2021-03-23 15:34:54
152
原创 网络:socket编程的初步了解
应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进行提供并发服务的问题。多个TCP连接或者多个应用程序进程可能需要同一个TCP协议端口进行传输数据,为了区别不同应用程序进程和连接,需要计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)的接口,区分不同应用程序与进程间的网络通信和连接。创建套接字接口:int socket(int domain, int type,int protocol)domain:地址域,指定网络层到底使用什么协议;其中
2021-03-22 19:44:48
225
原创 网络:认识网络字节序
之前在我们学习C语言时,我们知道内存中的数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分,网络数据流向同样也有大端小端之分,那么怎样去定义网络数据流的地址呢?我们先来了解以下几个概念:小端:地位低地址;大端:高位高地址:字节序:CPU对内存的访问顺序;主机字节序:指的是机器本身的字节序,如果是大端,则主机字节序就是大端;如果是小端,主机字节序就是小端;网络字节序:规定网络中传输的字节序使用大端;如果是小端机器在传输数据的时候,需要将数据转化为大端
2021-03-22 10:34:13
566
原创 网络:TCP/IP五层(或四层)模型及网络传输的基本流程
TCP/IP五层(或四层模型)分层名称功能典型的协议应用层针对特定应用的协议(我们所说的程序员就是在这一层进行工作的 )HTTP协议、DNS协议、DHCP协议传输层管理两个节点之间数据的传输,负责可靠传输(保证数据被可靠的传送到目标地址)TCP协议、UDP协议网络层负责路由转发以及地址管理 IP协议 典型的设备:路由器数据链路层负责相邻设备的传输 以太网协议 典型的设备:交换机物
2021-03-21 23:49:19
2047
原创 网络:网络协议的初识
网络发展背景网络发展 计算机自诞生伊始,经历了一系列演变与发展。大型通用计算机、超级计算机、小型机、个人电脑、工作站、便携式电脑以及如今出现的智能手机终端等,都是这一过程的产物。起初,计算机以单机模式被广泛使用, 随着计算机不断发展,多台计算机连接成一个计算机网络。独立模式:计算机之间相互独立;网络互联:多台计算机连接在一起,完成数据共享;局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起;广域网WAN:将远隔千里的计算连接在一起.计算机网络就类似于人的神经网络系统。一个人身上
2021-03-20 15:32:44
95
原创 软件测试:软件测试的分类
1.按开发阶段分单元测试单元测试是对软件组成单元进行测试,其目的是检验软件基本组成单位的正确性。测试的对象是软件设计的最小单位:模块。测试阶段:编码后或者编码前TDD(测试驱动开发)测试对象:最小模块测试人员:白盒测试工程师或者开发工程师测试依据:代码和注释+详细的设计文档测试方法:白盒测试测试内容:模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试集成测试系统测试回归测试冒烟测试验收测试2.按测试实施组织3.按是否运行划分4.按是否手工划分5.按是否查看.
2021-03-17 23:41:53
376
2
原创 软件测试:测试用例的设计方法
在上一篇博客中,介绍了测试用例的一些基本要素,而测试用例具体的设计方法又有哪些呢?具体的设计方法等价类 依据需求将输入,划分为若干个等价类,从等价类中选出一个测试用例,如果这个测试用例测试通过,则认为所代表的等价类测试通过,这样就可以用较少的测试用例达到尽量多的功能覆盖,解决了不能穷举测试的问题。有效等价类:对于程序的规格说明书是合理的、有意义的输入数据构成的集合,利用有效等价类验证程序是否实现了规格说明中所规定的功能和性能;无效等价类:根据需求说明书,不满足需求的集合例:if(34&
2021-03-15 21:27:24
203
原创 软件测试:测试用例篇
在测试过程中,我们往往会先写一些测试用例,并且在日常测试中,有时也需要补充测试用例到现有的案列库中。测试用例的基本要素测试用例是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试用例、预期结果等要素。评价测试用例的标准:用例表达清楚,没有二义性;用例可操作性强;用例的输入与输出明确,一条用例只有一个预期结果;用例的可维护性好;用例对需求的覆盖率高;暴露程序Bug的能力强。测试用例带来的好处测试执行者的依据;使得工作可重复,自动化测试的基础;评估
2021-03-15 09:30:08
295
原创 软件测试:关于Bug~
我们该如何去描述一个Bug?在此之前我们首先要清楚一个概念,软件的生命周期。软件的生命周期有如下五个阶段:需求分析——>测试计划——>测试设计、测试开发——>测试执行——>测试评估;需求阶段这是测试人员了解需求、对需求进行分解,得出测试需求;计划阶段根据需求编写测试计划、测试方案;设计阶段测试人员适当的了解设计,对于设计测试用例是很有帮助的,测试人员搭建测试用例框架,根据需求和设计编写一部分测试用例;编码阶段测试人员一般不需要编码的,但已经编码的模块,专业的白盒测试
2021-03-14 19:29:56
918
原创 软件测试:V模型和W模型详解
软件测试中有W模型和V模型,这是我们在测试过程中经常用到的两个模型,本篇博客我们就一起深入的学习了解这两个模型~V模型V模型最早是在20世纪80年代后期提出的,目的是改进软件开发的效率和结果,它是瀑布模型的一种演化。它的具体流程如下:明确标注了测试过程中存在的不同类型的测试,并且清楚的描述了这些测试阶段和开发过程期间各阶段的对应关系;V模型指出,单元测试和集成测试应检测系统功能、性能的质量特性是否达到系统要求的指标;验收测试确定软件的实现是否满足用户需求或合同的要求;局限性:仅仅把测试
2021-03-14 11:21:14
7055
1
原创 软件测试:开发模型
在了解软件的开发模型之前。我们先来介绍一下软件生命周期。软件生命周期是指从软件产品的设想开始到软件不再使用而结束的时间,软件的生命周期可以分为6个阶段:需求分析、计划、设计、编码、测试、运行维护。软件的开发模型软件的开发模型共有四类:瀑布模型;螺旋模型;增量、迭代模型;敏捷开发;瀑布模型瀑布模型是其他所有模型的基础框架,它的每一个阶段只执行一次,它是线性顺序进行的软件开发模式;它在软件工程中占有重要地位。优点:强调开发的阶段性;强调早期计划及需求调查;强调产品测试;缺
2021-03-14 00:11:22
141
原创 软件测试:水杯的测试用例
水杯的测试用例将从以下几个方面展开描述:水杯的分类、功能测试、性能测试、界面测试、安全测试、易用测试、兼容性测试、抗震性测试
2021-03-12 00:18:53
304
原创 软件测试:概念级入门
目录软件测试的目的和原则什么是需求什么是Bug什么是测试用例 我们学习编程,自然也离不开测试行业,今天就跟随博主一起了解软件测试的一些基本概念~软件测试的目的和原则目的:验证软件是否有问题;原则:以客户需求为中心,遵循软件测试的规范、流程、标准和要求;好的测试是极可能发现迄今为止尚未发现错误的测试方案;成功的测试是发现了至今为止尚未发现错误的测试方案;根据测试目的的不同,还有回归测试、压力测试、性能测试、安全测试等,分别为了检验修改或优化过程是否引发新的问题,软件所能达到处理能力和是否到达
2021-03-12 00:11:37
102
原创 数据结构:交换排序之冒泡排序法详解
冒泡排序基本思想:实现代码如下:void BubbleSort(int* array, int size){ //外层循环控制的是冒泡的趟数,即需要多少趟 for (int i = 0; i < size - 1; ++i) { //具体冒泡的方式:依次用相邻的两个元素进行比较,将大的元素移至末尾 //j是否需要-1:我们要看j是表示的什么含义 //j:表示的是数组的下标---->j表述前一个元素的下标 for (int j = 0; j < size -
2021-03-11 18:13:16
578
原创 数据结构:直接选择排序详解
选择排序基本思想:每一次从待排序的元素中选出最大(最小)的一个元素,存放在序列的起始位置,直到待排序的元素变为有序 。选择排序算法通过选择和交换来实现排序,其排序流程如下:首先从待排序元素中选择最大的一个数据,将其和位与最后位置的数据进行交换;接着从剩下的size-1个数据中选择次大的一个元素,将其和倒数第二个位置进行数据交换;然后,这样不断重复,直到完成最后两个数据的交换,便完成了从小到大的排序其代码实现如下:void SelectSort(int* array, int size)
2021-03-11 14:59:17
1400
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人