自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 什么是solana PDA账户?

这个理念的一个关键点是 Solana 的账户模型,它采用了类似于操作系统中的虚拟内存管理的方法来管理账户的状态和内存。通过将所有的数据都视为账户。在 Solana 上,不仅仅是用户的钱包地址拥有账户,还包括智能合约、数据结构、代币、NFT 等。3、 PDA 的创建和使用可以用于实现多种功能,例如去中心化交易所中的订单账户、投票系统中的选票账户、NFT 发行中的令牌账户、资金托管账户等。4、PDA 的地址通常遵循特定的格式,例如包含基础账户地址和其他参数的哈希值等,以确保其独一无二性和易于识别性。

2024-03-27 22:30:46 226

原创 Solana关闭账户返还租金

向该交易对象添加一个 closeAccount 指令,用于关闭账户。在该指令中,指定要关闭的账户地址,并将其余额返还给指定的接收账户。如果你希望返还租金,可以将接收账户设置为你的主账户。确保账户中有足够的 SOL 用于支付关闭交易的手续费和任何租金。确保你拥有要关闭的账户的私钥,以便签署关闭交易。将已签名的交易发送到 Solana 网络。

2024-03-25 16:13:08 199

原创 TCP 的 keeplive保活机制

在一般情况下,TCP在网路为了避免半连接状态(比如客户端已经掉线服务器还在提供资源),会在长时间没有数据传输时主动关闭连接,但很多应用场景下,如websocket,连接需要一直保持,以便于客户端随时能接收到服务器的消息。只要客户端每隔一段时间向服务器发送一条保活数据,这样服务器就不会主动关闭连接。为了不影响业务数据,一方会发送与前一个seq相同的数据包,而另一方则会回复同样的ack,如果另一方没...

2019-03-27 20:23:58 950

原创 Nagle算法

Nagle算法互联网的各种复杂的情况有可能会导致网络拥塞,Nagle算法是解决网络拥塞的一种方案。我们知道在TCP为了保证可靠性,会在收到报文后答复一个确认消息。但特殊情况下,可能会导致TCP中的报文数量太多,比如客户端每次只发送一个字节,这每一个字节都会被打包,即每一个字节都会产生对应的41字节长的包(20字节IP首部,20字节TCP首部),当对端来不及处理时就会导致网络拥塞。网络拥塞一般会导...

2019-03-25 11:45:29 474

原创 C语言获取今天0点的时间戳

工作中遇到一个有趣的bug,在获取今天0点的时间戳时,我是这样算的: uint64_t today_timestamp() { uint64_t now_time = time(NULL); // 当前时间戳 -(当前时间戳 % 24h) return now_time - (now_time % (60 * 60 * 24)) - 60 * 60 * 8; }...

2019-02-20 22:40:23 2293 1

原创 Github工作流程

用开源代码库github协同开发常见的操作流程:以比特币源码为例:1.fork代码仓库先在自己的github账号下fork代码仓库,然后在终端进行如下操作:git clone [email protected]:your_username/bitcoin.gitcd bitcoingit remote set-url origin [email protected]:your_username/b...

2019-02-17 18:28:22 367

原创 docker常用操作

文章目录1.安装docker2.安装docker-compose3.常用命令4.Docker compose 配置文件docker-compose.yml注解5.docker私有仓库创建1.安装dockerwget -qO- https://get.docker.com/ | sh2.安装docker-composesudo curl -L https://github.com/dock...

2019-02-17 17:09:37 150

原创 牛顿法求解一元函数

牛顿法求解一元函数对于一个简单的一元方程我们可以通过代数运算来求解,但是对于一个非线性的复杂一元函数例如−2x5−8x2+sin(x∗x)−2x=0−2x5−8x2+sin(x∗x)−2x=0-2x^5 - 8x^2 + sin(x*x) - 2^x=0这样的方程,想要通过人力计算就很难办到。 下面介绍利用牛顿法来构建的一个一元函数方程求解的程序。牛顿法当方程没有求根公式或者求根...

2018-07-30 11:46:03 2292

原创 STL六大组件总结思维图

stl六大组件

2018-07-28 12:10:51 548

原创 计算机网络编程基础知识总结思维导图

重点在TCP、UDP协议

2018-07-13 10:00:34 3102 5

原创 进程知识总结思维导图

全面的进程知识体系,需要源文件的朋友可以留邮箱,共同学习

2018-07-11 11:20:22 623

原创 多线程总结思维导图

多线程总结

2018-07-07 20:44:08 425

原创 System V进程通信总结思维导图

要源文件的可以留个邮箱,共同学习

2018-07-06 16:47:53 221

原创 字符串匹配之KMP算法

字符串匹配之KMP算法 对于字符串匹配算法中,前面介绍的算法在字符串匹配中都会有重复比较的情况,那么对于已经比较过的子串,我们是否可以用某种方法把它保存起来,等到下次要比较的时候直接跳过已经比较过的字符串呢? 下面介绍一种由Knuth、MorrisKnuth、MorrisKnuth、Morris和PrattPrattPratt三个大佬设计的字符串匹配算法: 例如找出模式串P=ababacaP...

2018-04-09 17:53:57 181

原创 字符串匹配之有限自动机

字符串匹配之有限自动机先来看什么是有限自动机? 首先,有限状态机是一个判定的机器,所谓判定的机器就是你给它输入一个模式,会的到一个YES或者NOYES或者NOYES或者NO的结果,比如要判断1+11+11+1的结果: 有限状态机就是构建出一个满足某个特定模式的判断系统 例如,对于010111100101011110010101111001串二进制数构建一个判断111的个数是否为偶数个...

2018-04-08 23:56:55 3353 2

原创 字符串匹配之Rabin-Karp算法

字符串匹配之Rabin-Karp算法 上一篇讲解了暴力匹配,暴力匹配最大的问题就是太慢了,而且太暴力了,不符合社会主义价值观。 因此,这里来讲解一个相对快一点的字符串匹配算法。 Rabin−KarpRabin−KarpRabin-Karp算法是RabinRabinRabin和KarpKarpKarp两位大佬在198719871987年提出的。 为了能宏观的理解Rabin−KarpRabin...

2018-04-08 13:24:17 630

原创 字符串匹配之暴力匹配

字符串匹配之暴力匹配字符串匹配就是在一个字符串集里面找到某个模式串出现的所有位置。 例如,找出模式P=abaaP=abaaP=abaa在文本T=abcabaabcabacT=abcabaabcabacT=abcabaabcabac中的位置,用mmm和nnn分别表示PPP和TTT的长度,SSS表示当字符串匹配时的有效偏移。暴力匹配的方法是通过循环,找出所有的有效偏移SSS,该循环对每一...

2018-04-05 16:48:29 3004

原创 红黑树详解

红黑树红黑树是一棵二叉搜索树,它在每一个节点上增加了一个表示颜色的指针,红色或者黑色。 一棵红黑树是满足下面性质的二叉搜索树: 每个节点非红即黑 根结点是黑色的 每个叶节点(这里的叶节点是指NULL节点)是黑色的 如果一个节点是红的,那么两个子节点都是黑的 对于任一节点,从该节点到所有后代叶节点的路径上,黑色节点的数目相等 由于这些性质的约定,红黑树没...

2018-04-01 17:22:20 956

原创 进程通信之消息队列

消息队列 消息队列就是存放消息(数据)的链表,这个链表由内核维护,并且由一个消息队列的标识符标识。 消息发送者可以指定消息发送的类型,接受这也可以依据类型来接受。接受者按照特定类型遵循先进先出的原则。 当进程试图给一个满的队列发送消息时,它会被阻塞;同样的,当进程试图从一个空的队列读消息时也会被阻塞。 但当一个进程试图读取某一个特定类型的消息,但没有这类型的消息而失败时,不会被阻塞。 消...

2018-03-28 17:04:09 278

原创 进程通信之管道

管道管道是UNIX系统IPC的最古老形式,并且所有UNIX系统都提供此种通信机制,我们把一个进程连接到另一个进程的数据流称为管道,在管道中一个进程写,一个进程读。 管道的本质也就是操作系统内核提供的一段内存。管道在创建时获得固定字节数的大小,当一个进程往里面写时,如果有空间,写请求立即执行,否则该进程被阻塞。类似的,如果一个进程试图读取多于当前管道的字节数时,也会阻塞。管道有两类...

2018-03-28 16:14:18 128

原创 进程通信之信号量

信号量信号量是一个计数器,用来表示系统资源的数量,信号量用于多进程对共享数据对象的访问,来实现程序的同步互斥。为了正确实现信号量,信号量的加减操作必须是原子操作,因此,信号量也是在内核中实现的。先看一下同步互斥和原子操作:同步互斥互斥 一个进程占用资源,其它进程就不能使用该资源,进程间的这种关系为进程互斥。 这些只能被一个进程同时使用的资源被称为临界资源。 进程中访问...

2018-03-27 20:49:55 237

原创 进程通信之共享内存

共享内存 共享内存是进程间通信手段速度最快的一种,因为这些进程间的数据传递不需要执行进入内核的系统调用,而是多个进程共享一个公共内存,多个进程通过对内存的直接读写而实现通信 共享内存相关函数 shmget函数 功能 用来创建共享内存 原型 int shmget(key_t key, size_t size, int shmflg); 参数 ...

2018-03-27 16:31:21 339

原创 AVL树详解

AVL树AVL树是一个高度平衡的二叉搜索树,我们知道,二叉搜索树在最理想的情况下的时间复杂度为O(logN),但在极度差的情况下(比如左右单只),二叉搜索树会退化成一个单链表,时间复杂度退化为O(n),为了保证二叉搜索树的效率控制在O(logN),对二叉树做一些改变,是的它变为极度平衡的VAL树。AVL树的定义 一棵AVL树或者是空树,或者是左右子树都是AVL树,其中左右子树的高度之差(...

2018-03-24 20:18:45 480

原创 Anagrams问题

问题1 /* * 由颠倒字母顺序而构成的词 Anagrams *例如:输入Eat 和 Tea,输出true *要求:输入两个单词,判断是否为Anagrams *思路:将单词排序,若相等,则符合要求 */ 代码:bool IsAnagrams(const string& s1, const string& s2){ if (s1.size() != s...

2018-03-09 18:59:39 243

原创 二叉搜索树

二叉搜索树 当它不为空时,满足如下性质: 当它的左子树不为空时,左子树所有节点都小于根结点的值 当它的右子树不为空时,右子树所有节点都大于根结点的值 它的左右子树分别为二叉搜索树搜索节点如果根结点不为空 如果key和节点的值相等,返回如果key小于节点的值,去左子树查找如果key大于节点的值,去右子树查找插入节点如果根结点为空 直接插入搜索要插入的位置: ...

2018-03-09 14:48:00 176

原创 求字符串中最后一个单词的长度

例如:"hello world" 返回 5;方法一: 基于STLint LastWordLen1(const char* s){ if (NULL == s) return 0; string str(s); size_t start = str.find_last_of(' ');//返回' '的位置 return str.s...

2018-03-08 22:44:30 376

原创 二叉树的线索化和遍历

包括二叉树的前序,中序,后序线索化和线索化遍历#pragma once#includeusing namespace std;enum pInfo{ LINK, THREAD };templateclass T>struct BinTreeThreadNode{ BinTreeThreadNode(const T data) :_pLeft(NULL)

2018-01-13 13:49:00 263

原创 完成一个二叉树类

包括二叉树的前序遍历,中序遍历,后序遍历(递归/非递归)和层序遍历 包括 树的高度,树的节点个数,叶子节点个数,第k层结点的个数,判断一个节点是否在二叉树内,查找值为k的节点,二叉树的镜像,判断是否为完全二叉树#ifndef _BINTREE__H_#define _BINTREE__H_#include#include#include#includeusing name

2018-01-05 15:19:58 159

原创 error: 函数调用缺少参数列表;请使用“&BinTree<char>::_PrintNode”创建指向成员的指针

在写二叉树的遍历时,错误代码代码如下:class BinTree{public: typedef void(*pFun)(pNode); void PreVisit() { _PreVisit(_PrintNode); }protected: void _PrintNode(pNode pd) { cout <<

2018-01-02 21:00:20 998 1

原创 孤儿进程&僵尸进程

僵尸进程和孤儿进程僵尸进程 僵尸进程是一个比较特殊的状态,当进程退出并且父进程没有读取到子进程的退出码,就会产生僵尸进程,僵尸进程会一直保存在进程表中,并且一直等待父进程读取退出状态码。所以,只要子进程退出,父进程还在运行,但是父进程没有读取到子进程的状态,子进程就会进入僵尸状态。 创建一个僵尸进程:#include<stdio.h>#include<stdlib.h>int main(){

2017-12-29 13:39:03 133

原创 c++知识总结

思维导图:

2017-12-24 15:00:34 161

原创 循环队列和以单链表的形式实现队列

循环队列template<class T,size_t N = 8>class queue{public: queue() :_rear(0) , _front(0) , _count(0) {} void push(const T data) { if (_count == N)

2017-12-24 14:56:58 536

原创 C++内联函数

C++内联函数宏和内联在C语言中,使用宏可以不要普通函数调用代价(传参,函数栈)。宏的实现是在预处理阶段,预处理器使用宏代码直接替换宏调用,合理使用宏仅花费一小部分空间就是可以完成函数的功能,增加了程序的便利性和可读性。 但是,宏还是有很多的缺点:没带括号发生的边界问题变量自增自减引发的二义性问题不利于调试更重要的一点是C++预处理阶段并不能访问类的成员数据所以,c++引入了内联函数,内

2017-12-11 17:09:39 553

原创 C++类型转换

C++类型转换隐式类型转换隐式类型转换发生在以下情况:在混合类型的算术表达式中,为了防止精度丢失,这种情况最宽的数据类型称为目标转换类型,这也被称为算术转换,例如int+double被转换成double 在进行整值提升时char , signed char , unsigned char , 和short int 都被提升为int ,,枚举类型被提升为能够表示其底层类型所有值的最小整数类型用一

2017-12-10 21:26:02 165

原创 进程和task_struct

进程什么是进程? 进程就是正在计算机上执行的实例。我们知道可执行文件都是存储在磁盘中,当计算机执行可执行文件时,才把可执行文件从磁盘中读取到内存上.然后cpu从内存上读取指令来运行程序,那在内存上等待或者正在被cpu执行的程序就是进程。操作系统是怎样标识进程的? 在进程执行时,anytime,进程总是被以下元素表示:标识符:用以和其他进程区分,比如说PID状态:表示程序当前状态,比如说是就绪

2017-12-10 14:41:54 262

原创 C语言总结

C语言知识体系

2017-12-06 16:37:22 205

原创 Next Permutation-leetcode下一个排列组合

问题描述: Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers. If such arrangement is not possible, it must rearrange it as the lowest pos

2017-11-30 18:46:13 231

原创 gdb调试2

gdb调试1前面介绍了gdb的基础操作,下面再看一些其他操作 1.断点 2.观察点和看内存 上面代码,我们想看str[5]里面的值,虽然越界了但是我么可以用观察点来看里面的值 对上面所用到的指令进行总结: 指令 描述 break(b) 在某一行设置断点 break 函数名在某个函数开头设置断点 break … if … 设置条件断点 continue(或

2017-11-29 19:14:07 149

原创 C++对象模型(二)多继承

3.多继承模型 看下面代码:class Base1{public: Base1():_b1(1) {} virtual void fun1() { cout<<"Base1::fun1()"<<endl; } virtual void fun2() { cout<<"Base1::fun2()"<<endl

2017-11-18 21:55:23 208

原创 C++对象模型(一)单继承

1.无虚函数的单继承class A{public: A():_ai(1){} void Afun(); static void static_fun(); static int _val;private: int _ai;};class B:public A{public: B():_bi(2){} void Bfun();pri

2017-11-17 17:33:36 190

空空如也

空空如也

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

TA关注的人

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