对码当歌,猿生几何?
#最热 #最新

redis整数集合数据结构源码解析

整数集合是集合键的底层实现之一,当一个集合只包含整数时,redis会使用整数集合作为集合的底层实现,整数集合类型会尽可能的节约内存空间,只有新插入的数据大于encoding时,才会升级集合类型。数据结构整数集合的定义包含三个部分,encoding表示集合元素的数据类型,length表示集合包含多少元素,contents存储集合成员的一段连续的地址空间。1、整数集合typedef struct intset {     // 集合的编码,可以为16 32 64位的整数类型     uint32_t encoding;     // 集合长度  & 查看全文

redis跳跃表数据结构源码解析

跳跃表,是一种有序的数据结构,可以在一个节点中维护多个执行其他节点的指针,从而快速访问其他节点。大多数情况下跳跃表的效率可以跟平衡树相媲美,并且跳跃表的实现相对简单,redis使用跳跃表做有序集合的底层实现。数据结构redis的跳跃表包含头尾指针、跳跃表的长度以及维护的跳跃表中的最大层数。跳跃表的接点由key、score、前驱节点以及多个后继节点的指针组成。1、跳跃表typedef struct zskiplist {     // 头节点和尾节点     struct zskiplistNode *header, *tail;     // 跳跃表的长 查看全文

redis字典数据结构源码解析

字典,又称关联数组或者映射,是用于保存键值对的数据结构,字典中的每一个key都是唯一的。通常用作hash类型和string类型的数据存储结构。数据结构redis的字典是由两张hash表组成的,以用户字典的扩容,hash表的基本数据类型是hash表节点。具体定义如下。1、字典typedef struct dict {     dictType *type;     // 保存了type中需要用的私有数据     void *privdata;     // ht[0]用来正常访问,ht[1]用来rehashing   查看全文

redis链表数据结构及源码解析

链表在redis中使用非常频繁,常用的list数据就是使用链表数据结构,除此之外,还有发布与订阅、监视器也用到了链表。数据结构redis的链表由多个链表节点组成,每个链表节点分别保存了前驱和后继节点,形成了一个双向链表。最终的链表会包含一个头节点、尾节点以及链表长度。具体定义如下。1、链表节点typedef struct listNode {     // 前驱节点     struct listNode *prev;     // 后继节点     struct listNode *next; &nbs 查看全文

redis字符串——sds源码解析

redis没有直接使用C语言传统的字符串(以空字符结尾的字符串数组),而是自己构建了一种为简单动态字符串(simple dynamic strring, SDS), 并将SDS作为redis默认的字符串表示。数据结构redis定义的SDS由协议头和字符串组成,根据字符串的长度分为五种不同类型的字符串,不同长度的字符串分别使用不用的类型。header组成header = len  + alloc  + flag + bufheader释义len字符串的长度alloc字符串实际占用的存储空间(不包含header和null)flag字符串类型, sdshdr5 ... sdshdr64buf字符串指针SDS类型类型字符串长度备注sdshdr50 - 31空字符串使用sdshdr8表示sdshdr832 - 255sdshdr1 查看全文

压力测试工具Siege

常见的压力测试工具有很多,在本文就简单介绍一下Siege 。Siege是Linux/Unix下的一个WEB系统的压力测试工具。下载与安装:下载地址: http://download.joedog.org/siege/    可根据需要下载版本$ wget http://download.joedog.org/siege/siege-latest.tar.gz$ tar zxf siege-latest.tar.gz      解压安装$ cd siege-4.0.2/      进入安装路径下$ ./configure      配置安装路径(默认路径)$ sudo make     编译$ sudo make insta 查看全文

C++语法小记---异常处理

异常处理(C语言)异常是对代码中可以预知的问题进行处理;代码中不可以预知的问题叫Bug;if () { ... } else { ... }setjmp和longjmp 1 #include <stdio.h> 2 #include <setjmp.h> 3  4 jmp_buf env = {0}; 5  6 int divid(int a, int b) 7 { 8     if(b == 0) 9  查看全文

Java泛型

使用泛型创建的类和方法可以支持不同类型的数据泛型类泛型类声明规则如下1.类名后跟<T> T可以是任意字母,也可以声明多个泛型,如<T,S,E>2.在需要使用泛型的地方使用 T 来代替类型如声明方法,声明集合类型时 1 class myList<T>{ 2     private  List<T> ls=new ArrayList<T>; 3     public void add(T t){ 4     ls.add 查看全文
加载更多

7-4 判断素数 (10 分)

本题的目标很简单,就是判断一个给定的正整数是否素数。输入格式:输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于231的需要判断的正整数。输出格式:对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No。输入样例:2 11 111输出样例:Yes No代码如下: #include<bits/stdc++.h> using namespace std; int main() { int N; cin >> N; while (N--) { int p,flag=0; cin >> p; if (p == 1)flag&nbs 查看全文

c语言-字符串去掉最后一个字符

在yolo中pdb出现了字符串“name ”,错误,于是想到去掉字符串中的最后一个字符#include "stdio.h" #include "malloc.h" #include "string.h" int main() {     char* s="GoldenGlobalView ";     char * d= (char *)malloc((strlen(s)-1)*sizeof(char));     memcpy(d,s,(strlen(s)-1)) 查看全文

FBX格式解析顶点信息和用OpenGL显示

FbxSDK是解析FBX的工具,在unity和ue中使用较多,下面介绍一下用这个工具解析FBX格式并用OpenGL显示出来。FBX的scene是由一系列node组成的,node包含一个Transfrom和NodeAttribute,NodeAttribute包含很多类型,如eMaker、eSkeleton、eMaker、eMesh等。模型的顶点信息存放在eMesh里,eMesh中包含了控制点信息和索引信息。索引信息指的是一系列index,如1个三角形由控制点的第0,1,2这三个点组成一个三角形,则索引信息存放这3个索引数组。控制点 信息可以由GetControlPoints方法得到,而索引信息可以由GetPolygonVertex得到。接下来用一个数组存放这些所有的控制点和索引号,定义如下数据结构:struct Point{   查看全文

信息学奥赛C++语言:等差数列末项计算

【题目描述】给出一个等差数列的前两项a1,a2,求第n项是多少。【输入】一行,包含三个整数a1,a2,n。其中−100≤a1,a2≤100,0<n≤1000。【输出】一个整数,即第n项的值。【输入样例】1 4 100【输出样例】298代码#include<iostream> using namespace std; int main() {     int a1,a2,n,s;     cin>>a1>>a2>>n; s=a1+(a2-a1)*(n-1); cout<<s;        &nb 查看全文

Qt结构---Qt 手动生成moc 文件

1.问题来源Qt会自己先把用到Qt自己的东西编译一遍,变成标准C++编译器可以识别的东西。moc 全称是 Meta-Object Compiler,也就是“元对象编译器”。Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件。如果它发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个 C++ 源文件。这个源文件中包含了 Q_OBJECT 宏的实现代码。这个新的文件名字将会是原文件名前面加上 moc_ 构成。这个新的文件同样将进入编译系统,最终被链接到二进制代码中去。因此我们可以知道,这个新的文件不是“替换”掉旧的文件,而是与原文件一起参与编译。另外,我们还可以看出一点,moc 的执行是在预处理器之前。因为预处理器执行之后,Q_OBJECT 宏就不存在了。  2. 一般当moc_xxx文件生成后,不要 查看全文

awk使用手册 (二)

输出到一个文件awk中允许用如下方式将结果输出到一个文件:echo | awk '{printf("hello word!n") > "datafile"}' 或 echo | awk '{printf("hello word!n") >> "datafile"}'设置字段定界符默认的字段定界符是空格,可以使用-F "定界符" 明确指定一个定界符:awk -F: '{ print $NF }' /et 查看全文

习题10-5 递归计算Ackermenn函数(15 分)

本题要求实现Ackermenn函数的计算,其函数定义如下:函数接口定义:int Ack( int m, int n );其中m和n是用户传入的非负整数。函数Ack返回Ackermenn函数的相应值。题目保证输入输出都在长整型范围内。裁判测试程序样例:#include <stdio.h> int Ack( int m, int n ); int main() {     int m, n;     scanf("%d %d", &m, &am 查看全文

C语言中编码中BOM问题

问题描述输出的csv文件显示乱码,是因为输出的文件是utf8编码,但是没有输出BOM,所以显示乱码。一些系统如window就是使用BOM来判断文件编码方式的。什么是BOM?在UCS 编码中有一个叫做”ZERO WIDTH NO-BREAK SPACE”的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符”ZERO WIDTH NO-BREAK SPACE”。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符”ZERO WIDTH NO-BREAK SPACE”又被称作BOM。UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符”ZERO WIDTH NO- 查看全文
加载更多