自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 922

原创 计算机网络基础-三次握手+IP与以太网的包收发操作

三次握手和四次挥手是TCP协议中建立和终止连接的过程,确保数据的可靠传输。三次握手(Three-Way Handshake):第一步- 客户端发送SYN(同步):客户端向服务器发送一个TCP报文,其中标志位设置为SYN(同步),表示客户端请求建立连接。客户端选择一个初始序列号(ISN)并将其包含在TCP首部中。第二步- 服务器回应SYN-ACK:服务器收到客户端的SYN后,如果同意建立连接,会向客户端发送一个TCP报文,其中标志位设置为SYN和ACK(确认)。

2023-10-16 21:53:02 196

原创 计算机网络基础-网关+DNS解析+网络分层+子网掩码

以太网是一种常见的局域网(LAN)技术,它定义了在局域网中计算机和其他设备之间进行数据通信的规范。以太网通常使用双绞线或光纤作为物理传输介质,并使用CSMA/CD(Carrier Sense Multiple Access with Collision Detection)协议来控制多个设备之间的访问冲突。它是一个在计算机网络中非常常见的协议,用于连接在同一物理网络上的设备,例如在家庭、企业或学校局域网中。以太网在OSI(开放系统互联)模型的数据链路层和物理层操作,提供了一种高效的、可靠的局域网通信方式。

2023-10-09 22:53:13 192

原创 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 4166 1

原创 爬虫抓取动态网页的6种方法

一,js 逆向分析二,使用WebKit 渲染引擎三,使用Selenium四,使用 Pyppeteer五,使用微软开源的自动化神器 Playwright六,使用 Splash

2021-02-25 22:21:07 4347 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 330

原创 常见字符串匹配算法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 782

原创 图的广度优先搜索和深度优先搜索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 377

原创 大顶堆的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 &gt

2020-11-29 21:45:06 762

原创 二分查找算法的不同实现方式

常见的查找算法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 97

原创 归并+插入+选择+归并+归并+桶+归并+基数排序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 89

webkit-ubuntu-20.04.zip

webkit-ubuntu-20.04

2021-10-06

firefox-92.0.1.tar.bz2

firefox-92.0.1.tar.bz2

2021-10-06

firefox-ubuntu-20.04.zip

firefox-ubuntu-20.04.zip

2021-10-06

chromium-win64.zip

chromium-win64.zip

2021-10-06

chromium-linux.zip

chromium-linux.zip

2021-10-06

空空如也

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

TA关注的人

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