自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis简介和数据结构

Redis是一个开源的内存中数据结构存储系统,通常用作数据库、缓存和消息代理。它支持各种数据结构,包括字符串、哈希、列表、集合等,并提供了丰富的功能,如事务、持久化、发布/订阅等。内存中数据结构存储系统:Redis主要将数据存储在内存中,这使得它具有非常高的读写速度。它通过使用持久化技术来保证数据在重启后不会丢失,因此即使是存储在内存中,也能够满足持久化的需求。数据库、缓存和消息代理:Redis可以用作多种用途,包括传统数据库的替代品、缓存系统和消息代理。

2024-05-09 20:05:36 1107 1

原创 排序——快速排序

空间复杂度由时间复杂度决定因为函数调用需要申请函数栈: 当选取中位数作为基准值时递归调用log(n+1)次函数,故其空间复杂度为0(logn);若每次选取中位数当做基准值,则n个数会递归log(n+1)次,即会进行log(n+1)次三色旗问题,每处理一次三色旗问题时间复杂度为0(n),所以最好时间复杂度为O(nlogn);每次选取最值作为基准值,则n个数会递归n次,即会进行n次三色旗问题,每处理一次三色旗问题时间时间复杂度为0(n),所以最好时间复杂度为 O(n*n)=0(n2);

2024-05-05 17:03:21 390 2

原创 排序——堆排序

n个节点的完全二又树有 log 2(n+1)层创建最大堆过程中,两两元素相互比较共比较 n-1次,在交换过程中可能破坏某个最大堆结构,我们可以假设共调整k次可以恢复最大堆结构,故建堆过程时间复杂度为 O(n+k)=O(n)。每个根节点最大下降(l0g2(n+1))-1层,每下降一层需比较两次,假设每个根节点都下降到最底层,则下降一个根节点的时间复杂度为 O(2。将堆顶元素与待排序数组(假设待排序的数据数量为nums)最后一个元素进行交换,swap(&vec[0], &vec[nums-1]);

2024-05-04 20:31:44 375

原创 排序——归并排序(+链表排序)

归并排序的效率是比较高的,设数列长为N,将数列分开成小数列一共要logN步,每步都是一个合并有序数列的过程,时间复杂度可以记为O(N),故一共为O(N*logN)首先将待排序的数组转换为单链表,然后使用归并排序对链表进行排序,最后输出排序后的结果。将两个有序的数组组合成一个数组(单个元素可看作有序数组)将数组分解,当分解成单个元素为一组的时候才是组内的有序。,归并排序需要一个与原数组相同长度的数组做辅助来排序。将两两有序的数组进行合并,重复此步骤,直到排序完成。

2024-04-22 17:27:55 361

原创 WEB_py_logging日志库

如果日志消息中包含指定的关键字,则过滤该日志消息# 创建一个 Logger 对象# 创建一个输出到控制台的 Handler# 创建一个自定义过滤器,过滤包含 "error" 关键字的日志消息# 将过滤器添加到 Handler 中# 将 Handler 添加到 Logger 中# 输出日志消息。

2024-04-21 10:51:57 1341 2

原创 Webpy(Web开发框架简单应用)

Python Web 开发中,服务端程序可以分为两个部分,一是服务器程序,二是应用程序。前者负责把客户端请求接收,整理,后者负责具体的逻辑处理。为了方便应用程序的开发,我们把常用的功能封装起来,成为各种 Web 开发框架,例如。不同的框架有不同的开发方式,但是无论如何,开发出的应用程序都要和服务器程序配合,才能为用户提供服务。这样,服务器程序就需要为不同的框架提供不同的支持。这样混乱的局面无论对于服务器还是框架,都是不好的。

2024-04-19 17:57:08 964 1

原创 左值引用与右值引用

右值引用类型是独立于值的,一个右值引用作为函数参数的形参时,在函数内部转发该参数给内部其他函数时,他就变成了一个左值(当右值被命名是编译器会认为他是个左值),并不是原来的类型了。c++11添加了右值引用,却不能左值初始化右值引用,在一些特定的情况下免不了需要左值初始化右值引用(用左值调用移动构造),如果想要用左值初始化一个右值引用需要借助std::move() 函数。● 通过非右值(右值引用、左值、左值引用、常量右值引用、常量左值引用)推导T&& 或者auto&&得到的是一个左值引用类型。

2024-04-16 19:37:18 1181 1

原创 WSGI三大组件

Web 服务器,主要是实现相应信息的转换,将网络请求中的信息,按照 HTTP 协议将内容拿出,并按照 WSGI协议组装成新的数据,同时将提供的 start response 传递给 Application。它的作用机制为:通过一个类接收environ和start_response参数和所要执行的函数或者类,然后在内部转发给真实的application进行调用,并接收返回值进行处理或者直接返回。下面的代码就是简单的用函数和类的实现application函数,并运行。接收 Application 返回的结果。

2024-04-15 12:53:10 551 1

原创 Python 面向对象

面向对象是一种程序设计思想,面向过程也是一种程序设计hi思想,这是处理问题的思考角度不一样。面向过程的思维就是需要注重的是这个事情的步骤和顺序,比较直接高效。面向对象的思维就是要注重事情的参与者,需求什么对象以及每个对象都需要做哪些事情。将其拆解为一个个模块和对象。这样的设计思想会更容易维护和扩展。

2024-04-14 17:36:05 935 1

原创 智能指针详解

这是因为,shared_ptr通过引用计数来管理资源,多个shared_ptr实例共享相同的资源,并且会增加引用计数。在类 B 的实例对象被析构的时候,内部的 aptr 也被析构,其对 A 对象的管理解除,内存的引用计数减为 1,当共享智能指针 ap 离开作用域之后,对 A 对象的管理也解除了,内存的引用计数减为 0,类 A 的实例对象被析构。在手动管理内存的时候会出现悬挂指针的问题,就是指向的内存已经被释放,但是指针的本身仍然保留,当我们再次访问这个指针的时候就会导致未定义的行为,可能会引发程序的崩溃。

2024-04-01 15:35:52 1396

原创 WEB后端架构的一些概念杂谈

后端框架就是值用于开发的服务器端应用程序的一些可重用的设计,通俗的来说,就是一个实现某种功能的半成品,提供一些常用的工具和基础通用化的组件。它主要就是负责为处理业务逻辑,数据储存,通信协议等功能提供基础的框架,实现交互功能。调用这些框架就可以实现一些常见的业务逻辑。这些框架大多是简单高效的,能极大地提高我们的开发效率。一个优秀的的框架,它相当于是一个模板代码库,很多基础性的功能,底层功能操作都已经帮我们实现了,我们只需要专心的实现所需要的业务逻辑就可以了。

2024-03-29 16:52:11 1445 1

原创 TCP第一次握手丢失的抓包

完成第二次握手,这样通过tcpdump抓取数据包传输的数据包就可以看出如果网络第一次数据包丢失会发生的事情了。重传了三个数据包就断开了连接,而且不难算出,第一次传输是在1s的时刻,第二次传输是在3s左右,第三次是7s。如果要模拟第一次握手的丢失,可以尝试客户端在进行TCP连接发送之前就先关闭服务端的网络,然后客户端通过。他们的间隔是1、2、4,是成指数增长的,当超过最大的传输次数客户端就会显示断开连接。传输的,所以,最开始的三个包就是三次握手建立连接的数据包。关闭服务器的网络,紧接着就要在客户端发送。

2024-03-27 22:28:28 297

原创 LINUX 的TCP抓包使用教程

而通常情况下,服务器端收到客户端的 FIN 后,很可能还没发送完数据,所以就会先回复客户端一个 ACK 包,稍等一会儿,完成所有数据包的发送后,才会发送 FIN 包,这也就是四次挥手了。所以,在工作中 tcpdump 只是用来抓取数据包,不用来分析数据包,而是把 tcpdump 抓取的数据包保存成 pcap 后缀的文件,接着用 Wireshark 工具进行数据包分析。可以发现ping 的数据包是 icmp 协议,所以接着在使用 tcpdump 抓包的时候,就可以指定只抓 icmp 协议的数据包。

2024-03-26 20:29:40 1065

原创 C++ 实现MyString 类(输入输出运算符重载)

对象中的字符,其中常量版本用于访问常量对象的字符,而非常量版本用于访问非常量对象的字符。输出相比于输入就简单多了,但是要注意,[]运算符要重载之后才能使用,如果没有进行重载,也可以直接使用。需要自己创建一个基本的内存段来存储所要输入的数据,直接存储是不行的,因为string底层也是。紧接着,计算读取到的字符串长度,并动态分配足够大小的内存存储该字符串内容(包括结尾的空字符。接着,在函数内部首先检查了是否需要释放当前对象的内存,如果当前对象的。是否为空,如果不为空,则释放之前动态分配的内存,避免内存泄漏。

2024-03-25 14:35:43 1337

原创 哈希表、哈希冲突、以及哈希冲突的解决方案

哈希表是一个用于储存”键值对“的的基本数据结构。在C++当中哈希表使用的是哈希函数计算出数组的索引,然后通过索引查找对应索引的值,计算索引的值的过程就被称为”哈希“。

2024-03-24 15:29:09 1060

空空如也

空空如也

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

TA关注的人

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