自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 golang接入openai

golang简单接入openai

2023-02-24 10:22:57 796

原创 后台非法尝试登录监控

#/var/log/auth.log 日志对服务器的登录连接做一些监控日志。#通过cron执行定时任务,达到监控的目的最近公司服务器偶尔会被黑,看到大佬们在讨论和做各种迁移工作。空下来的我在想,作为一个后端,怎么样能在服务器被黑的时候最快的时间能通知到自己呢?于是我google了一下,如何判断服务器被黑,大致判断思路有几种:1. w看下当前有无可疑的当前登录ip2. last命令看下历史登录ip,查看下是否有可疑的用户3. netstat 看下有无可疑端口和连接4. 检查有无cpu占用.

2021-10-11 22:45:05 290

原创 vi常用命令

1)移动光标h :光标左移一个字符j :光标上移一个字符k :光标下移一个字符l :光标右移一个字符0 :光标移至行首$ :光标移至行尾H :光标移至屏幕首行M :光标移至屏幕中间L :光标移至屏幕最末行2)插入文本i :在光标前插内内容a :在光标后插入内容o :在所在行的下一行插入新行O :在所在行的上一行插入新行3)删除文本x:删除光标后面的字符X:删除光标前面的字符nx:删除光标后面n个字符nX...

2021-04-02 18:17:01 116

原创 关于c++模版

实现一个MessageHandle消息路由:#include <functional>#include <iostream>#include <map>#include <memory>#include <string>using namespace std;///////////////template <class T>class test{public: int getType(){return T:

2021-03-31 12:04:27 97

原创 关于STL map的一些疑问

记录一下一个疑问:#include <string>#include <map>#include <iostream>#include <functional>using namespace std;typedef function<void(int)> ff;class vv{public: int v; vv(int x):v(x){} void f1(int a){} void f2(int b){} b

2021-03-30 22:04:17 96

原创 多路复用IO-EPOLL

epoll是什么 epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外,还提供了边缘触发(Edge Trigger...

2021-03-15 11:47:01 205

原创 redis源码剖析-内存淘汰

redis的内存淘汰策略一共有八种volatile-lru (1):从有过期时间的键中淘汰最近最少使用的volatile-lfu (258):从有过期时间的键中淘汰最不经常使用的volatile-ttl (512):根据过期时间,先淘汰快过期的volatile-random (768):从过期时间的键中随机淘汰allkeys-lru (1029):无论有没有过期时间,淘汰最近最少使用的allkeys-lfu (1286):无论有没有过期时间,淘汰最不经常使用的allkeys-ra

2021-02-03 18:44:33 116

原创 redis源码剖析-五种数据类型

string类型相关的命令 get set setnx setex psetex append strlenstring使用sds实现list类型相关命令 lpush rpush lpushx rpushx lpop rpop llen lrange等list是使用quicklist实现dict类型相关命令 hset hget hdel hlen hkeys hvalues等哈希有两种编码 一种是使用ziplist 另一种是使用dict默认使用ziplist...

2021-02-01 14:03:57 127

原创 redis源码剖析-dict

看一下redis的hash dick的定义typedef struct dictEntry { void *key; union { void *val; uint64_t u64; int64_t s64; double d; } v; struct dictEntry *next;} dictEntry;typedef struct dictType { uint64_t (*hashFu

2021-01-31 23:53:39 130

原创 redis源码剖析-skiplist

试想一个业务场景:游戏需要实现一个实时更新的排行榜应该如何实现首先想到使用有序的双端链表, 因为插入的时间复杂度为O(1) 但是定位的平均时间复杂度为O(N) 当频繁更新排行榜的时候效率比较低有没有一个结构 能够满足快速定位到相应的位置并插入?跳跃表就能满足这个需求跳跃表(skiplist)跳跃表的思想是给数据结点建立索引 从最高层索引根据关键字查找 如果当前结点<关键字 且下一节点>关键字 则降层继续从当前结点开始查找 一直到查找到结点 或 降到第0层算法平均复杂度...

2021-01-31 23:12:32 131

原创 redis源码剖析-quicklist

注:本人分析的源码是 redis-5.0.7-linux版本先看下quicklist的结构typedef struct quicklistNode { struct quicklistNode *prev; struct quicklistNode *next; unsigned char *zl; unsigned int sz; /* ziplist size in bytes */ unsigned int count : 16

2021-01-29 16:06:06 150

原创 redis源码剖析-intset

首先看下intset的定义typedef struct intset { uint32_t encoding; uint32_t length; int8_t contents[];} intset;encoding: 集合的元素使用的什么什么编码,有以下三种#define INTSET_ENC_INT16 (sizeof(int16_t))#define INTSET_ENC_INT32 (sizeof(int32_t))#define INTSET_ENC

2021-01-28 17:39:15 155

原创 redis源码剖析-ziplist

ziplist基本结构ziplist 的结构大概为ziplist->entry的结构大概为prev_length: 当前一个元素的大小小于254字节时,prev_length只占用一个字节,当前一个元素大小大于254时,prev_length占用5个字节,其中第一个字节固定是0xFF 后四个字节为前一个元素实际占用大小encoding:当元素是字符串时:当content长度不大于0x3f的时候用1个字节 当长度不大于0x3fff的时候用2字节 否则就用5个字节当元素是整数时:.

2021-01-28 17:04:38 188

原创 redis源码剖析-robj

robj(redisObject)看下源码中的定义:typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:LRU_BITS; /* LRU time (relative to global lru_clock) or * LFU data (least significant 8 bits frequency

2021-01-28 16:11:39 323

原创 reids源码剖析-sds

sds(simple dynamic string,简单动态字符串)在redis源码sds.h文件里定义了这个数据结构 typedef char *sds; sds其实就是一个字符串指针由于使用的场景不一样,所以redis定义了五个基础的数据结构 分别是 sdshdr5 sdshdr8 sdshdr16 sdshdr32 sdshdr64,看下源码是这么定义的typedef char *sds;/* Note: sdshdr5 is never used, we just acces...

2021-01-28 12:08:04 197

原创 内存置换算法总结

前言因为python语法比较能简洁清晰体现出算法的实现过程 所以使用python实现水平有限,如有错误敬请指出转载请说明出处1.最佳置换算法解释:这是一种理想化的算法,即选择哪些是永不使用的,或者是在最长时间内不再被访问的页面置换出去。这种算法性能最好,但实际上难以实现。因为要确定哪一页是在最长时间内不再被访问是很困难的,所以该算法通常用来评价其他算法。def has_memory_cache(cache, cache_size): return len(cache) <.

2021-01-26 15:49:52 1554

原创 好记性不如烂笔头-字节对齐

先介绍三个概念:1.自身对齐值:数据类型本身的对齐值,例如char为1 short为2 int、float为4 double为82.指定对齐值:编译器默认对齐值或者使用#pragma pack(value)指定的值3.有效对齐值:取自身对齐值和指定对齐值中较小的那个对齐规则:1.不仅结构体的成员变量有有效对齐值,结构体本身也有对齐值,这主要是考虑到结构体的数组,对于结构体或者类,要将其补齐为其有效对齐值的整数倍。结构体的有效对齐值是起最大数据成员的自身对齐值(若有指定对齐值 则取两者小的

2020-12-24 17:13:48 199

原创 深度优先搜索算法解决寻路问题

要求:根据图,输入两个任意顶点a,b,输出所有a->b的路径。a.首先定义一个矩阵描述这个图class matrix: def __init__(self, n): self._Vnum = n self._d = self.init(self._Vnum) @staticmethod def init(n): d = [] for i in range(0, n): t = [] for j in range(0, n): t.append..

2020-12-10 19:53:28 413

原创 【记录项目中的bug】- 头文件宏定义

今天早上一直编译项目代码编译不过,一直提示TBXXXXX has no been declared 的错误项目数据库用的是orm框架,新建表的时候需要自定义一个tb_xxxx.h 文件并定义表对应的字段所以新建自定义tb_xxxx.h的时候为了省事 从别的表.h copy了一份过来修改内容跟文件名即可结果复制过来的.h文件过来的时候 #define __TB_XXXX__H 没有修改 导致了表结构没有被包含进来记得很久以前写代码出现过类似的问题 记录一下自己的粗心大意!...

2020-08-14 13:36:22 149

原创 什么是乐观锁,什么是悲观锁

推荐简书上一篇写得很好的文章https://www.jianshu.com/p/d2ac26ca6525

2020-08-05 12:23:19 89

原创 c++连接mysql的连接池实现

connector_pool头文件#ifndef __DB_CONNECT_POOL__H#define __DB_CONNECT_POOL__H#include <string.h>#include <mysql/mysql.h>#include <mutex>#include <condition_variable>#include <list>struct db_config{ std::string host;

2020-07-19 16:38:39 734

原创 c++ 位运算

今天翻看两年前写的一个函数,咋一看还差点迷糊了void setBitValue(int &v, int beg_b, int end_b, int bv){ int tv = pow(2, end_b - beg_b + 1) - 1; bv &= tv; tv = ~(tv << (beg_b - 1)); v &= tv; v |= (bv << (beg_b - 1));}...

2020-07-17 14:36:46 63

原创 python对称加密

一、安装必要的库文件1.window下安装pycryptodemo,linux下安装pycrypto二、开始conding先定义一些帮助函数#生成唯一文件名def get_unique_filename(file): md5 = hashlib.md5() md5.update(file) return md5.hexdigest()#获取到文件目录def get_path_dir(path): pos = path.rfind('/') return path[:pos

2020-07-10 13:49:48 1231

原创 python身份证照片识别信息

一、主要步骤1. 先来看下百度的API文档 https://cloud.baidu.com/doc/OCR/s/rk3h7xzck2. 它让我们先获取 access_token,先看获取access_token的文档 https://ai.baidu.com/docs#/Auth/top3. 需要 app_key secrect_key 需要先自行申请好二、开始coding1. 先定义一个baidu_token类用来处理token相关的工作class baidu_token:

2020-07-08 10:42:00 1613 4

原创 python抓取京东的商品信息

一、需要具备的技能以及开发环境:1. 安装python开发环境2. requests库 BeautifulSoup库3. 具备python一定基础二、分析JD搜索商品的URL参数1. 经过分析可以知道keywork为搜索关键字2. page参数为筛选商品的页下标,每页30条数据3. ev参数为筛选商品的价格参数三、接着 我们分析一下 URL返回来的数据 定位到我们需要的数据1. 我们发现商品的数据是访问url直接返回来的 所以我们需要分析下商品所在的标签跟每.

2020-07-07 17:04:09 909

原创

树的基本概念1.双亲、孩子和兄弟。结点的子树的根称为该结点的孩子;该节点称为孩子的双亲结点;具有相同双亲结点的结点互为兄弟。2.结点的度。一个结点的子树的个数记为该结点的度。3.叶子结点。叶子结点也称为终端结点,指度为0的结点。4.内部结点。度不为零的结点5.结点的层次。根为第一层,根的孩子为第二层,以此类推。6.数的高度。一棵树的最大层数记为树的高度(或深度)。...

2019-12-19 16:53:43 256

空空如也

空空如也

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

TA关注的人

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