自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计模式——入门

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。

2023-06-19 18:47:18 490

原创 Sha1算法实现流程(基于OpenSSL源码)

SHA-1(Secure Hash Algorithm 1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。

2023-04-28 22:18:47 3133

原创 Selenium入门教程

Selenium最初是由ThoughtWorks公司一个叫Jason R. Huggins的工程师和他的团队开发出来Selenium是仅针对Web系统的一款自动化测试工具Selenium是免费的、开源的,很多公司选择Selenium和它是免费的有很大关系 Selenium不是一个工具,它是一系列工具的总称

2022-11-17 11:15:12 1498

原创 C语言实现简单线程池

生产消费线程池实现

2022-08-26 21:53:58 751

原创 动态规划:01背包问题

动态规划算法入门:01背包

2022-08-19 21:48:54 399

原创 C/C++ 基础知识总结

C/C++ 知识总结

2022-08-16 13:45:54 605

原创 基于MIME风格的Base64编码

1、Base641.1 简介Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,一种基于64个可打印字符来表示二进制数据的方法。Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。

2022-05-09 17:09:23 1389

原创 记一次https访问握手失败(sslv3 Alert Handshake Failure)

前言使用C++结合openssl实现https请求时,当访问百度等网站时,可以正常动作。但是某些网站出错,SSL_connect函数返回异常。1.调查过程1、尝试使用curl测试网站是否可以正常访问,结果是正常的。2、下载curl的源码,查看源码中关于openssl关联的代码3、最终定位到这行代码。SSL_set_tlsext_host_name(ssl, hostname);2.原因正常情形下,一个ip对应一个域名(主机名)。但是对于某些拥有超过1个主机名的web服务器,客户端必须告诉

2022-04-15 11:58:01 7572

原创 手动删除win10恢复分区

前言由于Window10装机时会自动创建回复分区,当系统盘容量不足需要扩容时,由于恢复分区存在,导致无法扩容。方法1.管理员打开命令提示符,使用diskpart删除恢复分区。C:\WINDOWS\system32>diskpartMicrosoft DiskPart 版本 10.0.19041.964Copyright (C) Microsoft Corporation.在计算机上: DESKTOP-GGSOCOA1.管理员打开命令提示符,使用diskpart删除恢复分区。C:

2022-03-28 12:55:31 4019 1

原创 Oracle 启动

1.启动监听$ lsnrctl start2.启动数据库实例$ sqlplus / as sysdbaSQL> startup3.启动PDB(使用CDB的场合)SQL> startupSQL> alter pluggable database ALL OPEN;4.测试连接SQL> conn system/oracle@orclpdb;

2022-03-14 11:09:36 616

原创 openssl 安装

前言由于Window系统没有自带的openssl库,因此当需要使用openssl参与工程编译时,需要自己下载和编译openssl源码。1.编译环境下载Mingw和Msys2TDM-MingwMSYS22.编译下载openssl源码,解压OpenSSL开始菜单打开"MSYS2 MSYS",cd到openssl解压目录cd /c/openssl-3.0.1/openssl-3.0.1编译(静态库和动态库)export PATH=$PATH:/c/TDM-GCC-64/

2022-02-10 10:54:57 5255

原创 bashdb 安装

前言正常情况下,使用Shell程序-x参数打印执行日志可以满足一般的测试需求。因此,当需要更精细地调试Shell,可以通过bashdb工具实现。1.下载找到bash版本对应的bashdb源码并下载。$bash -versionGNU bash,版本 4.4.19(1)-release (sparc-sun-solaris2.11)Copyright (C) 2016 Free Software Foundation, Inc.2.编译及安装$cd bashdb-4.x... # <-

2021-12-14 15:35:42 2412

原创 java.util.Collections#sort() throws IllegalArgumentException

问题JDK6升级JDK7的情况下,由于java.util.Arrays.sort和java.util.Collections.sort使用的排序算法已被替换(mergesort → timsort)。当TimSort检测到待比较的项目违反约定,则可能抛出IllegalArgumentException。JDK6及以前的版本忽略了这种情况。如果需要以前的行为,可以使用新的系统属性java.util.Arrays.useLegacyMergeSort来恢复以前的mergesort行为。 /**

2021-12-09 13:48:22 269

原创 WindowsAPI ——GetFileAttributes

Window上用来判断简单的文件类型,如软链接等

2021-12-06 14:07:41 1506

原创 C++实现简单内存池

内存池是什么?内存池(Memory Pool)是一种内存分配方式,又被称为固定大小区块规划(fixed-size-blocks allocation)。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。内存池如何实现?若申请的内存块相对较小......

2021-12-01 15:36:29 1011

原创 KB2999226安装提示 此更新不适用你的计算机

问题安装Microsoft Visual C++ 2015-2019 Redistributable(x86) 失败。安装日志如下:[07E8:05E8][2021-11-15T18:27:34]i305: Verified acquired payload: vcRuntimeAdditional_x86 at path: C:\ProgramData\Package Cache\.unverified\vcRuntimeAdditional_x86, moving to: C:\ProgramDa

2021-11-16 10:47:35 9131

原创 WindowsAPI —— CreateMutex

CreateMutex作用用来创建一个有名或无名的互斥量对象,可用于线程锁/进程锁/文件锁。原型HANDLE CreateMutexA( [in, optional] LPSECURITY_ATTRIBUTES lpMutexAttributes, [in] BOOL bInitialOwner, [in, optional] LPCSTR lpName);参数说明lpMutexAttribut

2021-11-12 14:45:59 895

原创 数据结构——红黑树

1.红黑树是什么?红黑树首先是一棵自平衡二叉查找树。它的左右子树高差有可能大于 1,所以红黑树不是严格意义上的平衡二叉树(AVL),但 对之进行平衡的代价较低, 其平均统计性能要强于 AVL 。它具有以下的特点: 1. 首先是一棵二叉搜索树;2. 带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。3.示例简单实现template <class T>class AVLTree { private: class AVLNode { private:

2021-10-15 18:33:33 321

原创 汇编基础一:NASM环境配置

nasm编译:nasm -f elf test.asm -g -F stabs -o test.o依赖gcc运行库:main函数入口,ret返回gcc -m32 test.o -o test独立运行:_start入口,系统调用结束ld -m elf_i386 test.o -o test64位编译nasm -f elf64 test.asm -g -F stabs -o test.ogcc -m64 test.o -o testGDBgdb -tui ./testlayou

2021-09-29 18:25:01 705

原创 Makefile示例

1. Makefile环境:Windows + Mingw64(sjlj)TARGET32 := Test.exeTARGET64 := Test64.exeLDLIBS32 := -lthreadLDLIBS64 := -lthreadinclude $(Makefile.mk)2. Makefile.mkMAKE := mingw32-makeCC := gccCXX := g++RM := rd /s /q## Include DirINCLUDE-DIR :=IN

2021-09-15 14:41:01 314

原创 Makefile常用语法

1、赋值=,:=,?=,+=1)=使用”=”进行赋值,变量的值是整个makefile中最后被指定的值。即当变量A被重复赋值时,A = 最后一次的值=new;A = testA = new同上,若Makefile中存在使用变量B引用变量A的场合,无论该行代码在哪里,B始终=newB = $(A)A = g++B = $(A)A = CCall: @echo $(A) @echo $(B)输出CCCC2):=使用”:=”进行赋值,变量

2021-09-13 16:00:37 475

原创 Makefile常用函数

1、filter 和 filter-outGOALS = install clean debug all函数:filter模板:$(filter PATTERN…,TEXT)功能:1)过滤掉字串“TEXT”中所有不符合模式“PATTERN”的单词,保留所有符合此模式的单词。2)存在多个模式时,模式表达式之间使用空格分割。示例:gmake test结果:Bad Targetifeq ($(filter $(GOALS),$(MAKECMDGOALS)),) @echo "Bad Targ.

2021-09-10 17:06:49 803

原创 Selenium——元素等待

1. 背景在Selenium自动化测试过程中,经常会出现element is not attached to the page document的异常情况。这种情形往往是由于上一步操作之后,页面元素连接失败导致的。2. 解决方案针对以上问题,一般通过操作页面元素前,设置等待时间的方式解决。而在Selenium中,设置元素等待的方式一般有以下几种:1). 使用Thread.sleep()方法暂停当前线程Thread.sleep(5);driver.findElement(locator).cl

2021-09-10 13:57:59 463

原创 Makefile进阶

1、Makefile是什么一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。2、Makefile如何工作在默认的方式下,在当前目录执行make命令。那么,1、make自动寻找“Makefile”文件2、依次读取工作目录makefile文件中使用指示符“include”包含的.

2021-09-09 17:57:54 185

原创 Makefile入门

1、Makefile是什么一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,也可以执行操作系统的命令。2、Makefile如何工作在默认的方式下,在当前目录执行make命令。那么,1、make自动寻找“Makefile”文件2、依次读取工作目录makefile文件中使用指示符“include”包含的.

2021-09-08 17:44:14 219

原创 Makefile基础

AR静态库打包命令的名字,缺省值:arARFLAGS静态库打包命令的选项,缺省值:rvAS汇编器的名字,缺省值:asASFLAGS汇编器的选项,没有定义。CCC编译器的名字,缺省值:ccCFLAGSC编译器的选项,没有定义。CXXC++编译器的名字,缺省值:g++CXXFLAGSC++编译器的选项,没有定义。CPPC预处理器的名字,缺省值:$(CC) -ECPPFLAGSC预处理器的选项,没有定义LD链接器的名字,缺省值是ldLDFLAGS链接器的选项,没有定义

2021-09-08 15:17:23 405

原创 数据结构——AVL树

1.树是什么?树是一种数据结构,它是由n(n≥1)个有限节点组成一个具有层次关系的集合。它具有以下的特点: 1. 每个节点有零个或多个子节点;2. 没有父节点的节点称为根节点;3. 每一个非根节点有且只有一个父节点;4. 除了根节点外,每个子节点可以分为多个不相交的子树。2.AVL树是什么?AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。它具有以下的特点: 1. .

2021-09-08 10:14:57 185

原创 字符串匹配——Sunday算法

1.Sunday算法是什么?Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法。其核心思想是:在匹配过程中,模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较,它在发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配,从而提高了匹配效率。2.描述Sunday算法的优点主要体现在以下2点:1)当主串匹配至第3个元素失败时,如下图:此时,模式串的P[2]=T[5],因此直接移动模式串,将i=5和j=2的元素进行比较。移动的步长 = plengt.

2021-09-07 14:14:02 741 2

原创 字符串匹配——BM算法

1.BM算法是什么?BM算法是一种非常高效的字符串搜索算法。此算法仅对搜索目标字符串(关键字)进行预处理,而非被搜索的字符串。虽然Boyer-Moore算法的执行时间同样线性依赖于被搜索字符串的大小,但是通常仅为其它算法的一小部分:它不需要对被搜索的字符串中的字符进行逐一比较,而会跳过其中某些部分。通常搜索关键字越长,算法速度越快。2.BM算法实现BM算法实际上是在简单的后缀匹配算法的基础上,添加坏字符(__Bad_Char)和好后缀(__Good_Suffix)原则,实现加速移动字符串的速度。/.

2021-09-07 10:06:18 791

原创 字符串匹配——KMP算法

1.KMP算法是什么?KMP算法是一种改进的字符串匹配算法。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。2.描述相比简单匹配算法,KMP算法的优点主要体现在以下2点:1)当主串匹配至第5个元素失败时,如下图:此时,模式串的next[4]=0,因此直接移动模式串,将i=4和k=0的元素进行比较2)当主串匹配至第5个元素失败时,如下图:模式串的next[4]=1,因此.

2021-09-03 15:41:37 408

原创 字符串匹配——KR算法

1.RK算法是什么?RK算法,在简单模式匹配算法的基础上,引入字符串hash计算,避免了对字符串的重复比较。2.描述RK算法的原理如下:计算匹配串和主串一定长度子串的hash值。若2个hash值一致,则从当前索引向后,逐字比较主串和匹配串。否则,主串索引+1,重新计算当前hash,重复步骤2。3.示例/* * RK匹配 */char *RK(char *text, char *pattern) { if (text == NULL) return NULL; int t.

2021-09-02 14:17:47 839

原创 字符串匹配——BF算法

1.简单模式匹配是什么?简单模式匹配,即两个字符串像物流传送带一般,主串固定,子串一步步像前移动,一位位匹配比较,直到完全匹配找到想要的结果的位置。2.描述简单模式匹配的原理如下:从主串text[i]和字串pattern[j]开始向后遍历。若字符匹配,则索引向后移动。否则,主串回退至第一个匹配的位置 + 1,子串回退至起始位置。3.示例/* * 简单模式匹配 */char *_strstr(char *text, char *pattern) { if (text == N.

2021-09-01 17:08:13 698

原创 数据结构——队列

1.队列是什么?队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。2.示例队列的简单实现template <typename T>class Queue { private: struct Node { struct list_head list; T data; }; list_head h.

2021-09-01 16:39:40 112

原创 数据结构——栈

1.栈是什么?栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在尾部进行插入和删除操作的结构。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。2.示例栈使用的双向链表结构// From Linuxstruct list_head{ struct list_head *next, *prev;};// 初始化结构体#define list_hea.

2021-09-01 11:42:27 119

原创 排序算法——桶排序

1.基数是什么?桶排序(radix sort)属于“分配式排序”(distribution sort),顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。2.描述桶排序算法的原理如下:遍历序列,取出权重因子的最大长度(若为字符串,则radix=字符串最大长度)。按照权重因子的优先级进行排序。将步骤2中排序的数组放入原数组。权重因子+1,重复步骤2-3,直到权.

2021-08-31 15:59:47 279

原创 排序算法——基数排序

1.基数排序是什么?基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。2.描述基数算法的原理如下:遍历序列,取出权重因子的最大长度(若为字符串,则radix=字符串最大长度)。按照权重因子的优先级进行排序。将步骤2中排序的数组放入原数组。权重因子+1,重复步骤2-3,直到权重因子使用完毕。3.示例/* * 用于取得整数最大值的位数 */.

2021-08-31 09:42:55 180

原创 排序算法——计数排序

1.基数排序是什么?计数排序是一个非基于比较的排序算法。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。 当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(nlog(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(nlog(n)), 如归并排序,堆排序)。2.描述基数排序算法的原理如下:找出待排序的数组中最大和最小的元素。统计数组中每个值为i的元素出现的次数,存入数组count的第.

2021-08-27 18:56:45 272

原创 排序算法——堆排序

1.堆排序是什么?堆排序是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。2.描述堆排序算法的原理如下:将堆的末端子节点作调整,使得子节点永远小于(大于)父节点。将堆顶元素A[0]与最后一个元素A[n-1]交换,此时得到新的堆区(A1,A2,……An-1)和新的有序区(An),且满足A[1,2…n-1]<=A[n]。对堆区重复进行步骤1-2。3.示例/* * 堆排序 .

2021-08-27 18:24:51 82

原创 排序算法——快速排序

1.快速排序是什么?快速排序(Quicksort)是对冒泡排序算法的一种改进。2.描述快速排序算法的原理如下:首先设定一个分界值,通过该分界值将数组分成左右两部分。将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。分别对左右两侧,重复步骤1-2。3.示例template <typename T>inline void quickSortRecursive(T.

2021-08-27 17:18:25 138

原创 排序算法——归并排序

1.归并排序是什么?归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。2.描述归并排序算法的原理如下:把长度为n的输入序列分成两个长度为n/2的子序列;;对这两个子序列分别采用归并排序;将两个排序好的子序列合并成一个最终的排序序列。3.示例递归版// 归并排序template.

2021-08-27 14:40:56 314

适用于 Windows 2000 的 IPv6 技术预览

适用于 Windows 2000 的 IPv6 技术预览

2023-08-15

空空如也

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

TA关注的人

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