- 博客(11)
- 资源 (5)
- 收藏
- 关注
原创 挖一挖 Redis 所有数据类型的底层数据结构
INCRlen:记录buf数组中已使用字节的数量,等于SDS所保存的字符串的长度。alloc:记录buf数组中未使用字节的数量。buf[]:字节数组,用于保存字符串如果Redis存储的字符串是一个字符串值,且长度小于等于44字节,那么字符串对象将使用embstr编码方式来保存。embstr编码是一种优化策略,它在内存分配时只需要一次,因为Redis Object和SDS(Simple Dynamic String)是连续的内存空间。相比之下,对于大于44字的字符串,Redis会使用raw。
2024-04-04 23:18:51
931
原创 计算机网络基础-三次握手+IP与以太网的包收发操作
三次握手和四次挥手是TCP协议中建立和终止连接的过程,确保数据的可靠传输。三次握手(Three-Way Handshake):第一步- 客户端发送SYN(同步):客户端向服务器发送一个TCP报文,其中标志位设置为SYN(同步),表示客户端请求建立连接。客户端选择一个初始序列号(ISN)并将其包含在TCP首部中。第二步- 服务器回应SYN-ACK:服务器收到客户端的SYN后,如果同意建立连接,会向客户端发送一个TCP报文,其中标志位设置为SYN和ACK(确认)。
2023-10-16 21:53:02
224
原创 计算机网络基础-网关+DNS解析+网络分层+子网掩码
以太网是一种常见的局域网(LAN)技术,它定义了在局域网中计算机和其他设备之间进行数据通信的规范。以太网通常使用双绞线或光纤作为物理传输介质,并使用CSMA/CD(Carrier Sense Multiple Access with Collision Detection)协议来控制多个设备之间的访问冲突。它是一个在计算机网络中非常常见的协议,用于连接在同一物理网络上的设备,例如在家庭、企业或学校局域网中。以太网在OSI(开放系统互联)模型的数据链路层和物理层操作,提供了一种高效的、可靠的局域网通信方式。
2023-10-09 22:53:13
225
原创 Python异步编程详解
一、异步编程相关概念1、I/O模型IO操作实际过程涉及到内核和调用这个IO操作的进程。对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。所以说,当一个read操作发生时,它会经历两个阶段:等待数据准备 (Waiting for the data to be ready)将数据从内核拷贝到进程中 (Copying the data from the kernel to the process)正式因为这两个阶段
2021-05-02 23:17:25
4214
1
原创 爬虫抓取动态网页的6种方法
一,js 逆向分析二,使用WebKit 渲染引擎三,使用Selenium四,使用 Pyppeteer五,使用微软开源的自动化神器 Playwright六,使用 Splash
2021-02-25 22:21:07
4392
1
原创 爬虫利器JavaScript渲染服务Splash的使用
简介Splash是一个使用Twisted和QT5在Python 3中实现的支持HTTP API调用的轻量级的web浏览器,它使用Twisted和QT的反射机制以使服务完全异步并通过QT主循环以便利用webkit并发性,能提供JavaScript渲染服务。Splash 的主要功能:支持并行处理多个页面支持获取返回的HTML代码或者获取返回页面的截屏图片可以通过禁止图片加载或者使用Adblock Plus插件来提高加载页面的速度在页面的上下文中执行用户的JavaScript代码编写lua脚本
2021-01-26 08:22:59
341
原创 常见字符串匹配算法Python实现
常见字符串匹配算法Python实现class StringMatching(object): """常见字符串匹配算法""" @staticmethod def bf(main_str, sub_str): """ BF 是 Brute Force 的缩写,中文叫作暴力匹配算法 在主串中,检查起始位置分别是 0、1、2…n-m 且长度为 m 的 n-m+1 个子串,看有没有跟模式串匹配的 """ a
2020-11-29 21:49:25
792
原创 图的广度优先搜索和深度优先搜索Python实现
图的广度优先搜索和深度优先搜索Python实现class Graph(object): """图的广度优先搜索和深度优先搜索""" def __init__(self, nodes, sides): """ nodes 表示点,如:nodes = [i for i in range(8)] sides 表示边,如:sides = [(0, 1),(0, 3),(1, 2),(1, 4),(1, 0),(2, 1),(2, 5),(3, 0)
2020-11-29 21:46:45
390
原创 大顶堆的python实现
堆的python实现class Heap(object): """大顶堆的定义,实现插入和删除""" def __init__(self, capacity): self.a = [None] * (capacity + 1) self.n = capacity self.count = 0 def insert(self, data): """插入一个数据""" if self.count >
2020-11-29 21:45:06
777
原创 二分查找算法的不同实现方式
常见的查找算法class Find(object): """常见的查找算法""" def __init__(self): pass @staticmethod def b_search(a_list, target): """二分查找算法 非递归实现""" low = 0 high = len(a_list) - 1 while low <= high: mid
2020-11-29 21:41:36
101
原创 归并+插入+选择+归并+归并+桶+归并+基数排序Python实现
常见排序算法Python实现class Sort(object): """常见的排序算法""" def __init__(self): pass @staticmethod def bubble_sort(a_list): """冒泡排序""" list_length = len(a_list) if list_length <= 1: return a_list
2020-11-29 21:34:41
93
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人