自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Nginx反向代理服务器高速缓存数据结构的部分实现

#ifndef _NGINX_H_#define _NGINX_H_#include <iostream>#define NGX_QUEUE_T typedef#define NGX_T typedef#define LIST_T typedeftypedef int NGX_ELEM_TYPE;//双向循环链表...

2019-10-16 14:56:04 242 1

原创 广度遍历题目

/*问题1给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。例如:[1,1,0,0,0],[0,1,0,1,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,1,1,1]对应的输出为3*/struct pos_t { int row, col; pos_t(int r, int c):row(r), col(c){}};int solv.

2022-04-17 09:19:07 617

原创 链表类题目

/*问题1* 将链表的后半截逆序,然后跟前半截交叉生成新的链表。* 要求: Time: O(N), Space: O(1),不允许递归如:1->2->3->4->5 ==>1->5->2->4->3*/void reserve(ListNode* &head) { if (!head) return; // 1->2->3->4->5 // 1 2 3 4 null // s .

2022-04-17 09:18:38 262

原创 二分类题目

/*问题1leetcode 33. 搜索旋转排序数组*/int search(vector<int>& nums, int target) { int len = nums.size(); if (len == 0) return -1; int left = 0, right = len - 1; int mid = 0;// 分割 // 将数组一分为二,其中一定有一个是有序的,另一个可能是有序,也能是部分有序。此时有序部分用二分法查找。无序部分再一分为二,其中一..

2022-04-17 09:18:09 266

原创 动态规划类题目

/*问题 1 背包问题 (需要花费的时间,幸福感)比如 成都(1天, 10) 上海(3天, 20) 重庆(2天, 40) 武汉(4天, 50) 深圳(3天, 30) 北京 (3天, 20) 6个城市问:如果你只有 n天的时间 怎么才能让幸福感最大*/struct city { string name; int cost; int weal; city() :name(""), cost(0), weal(0) {}; city(cons.

2022-04-17 09:17:37 713

原创 无法分类题目

/*问题 1给定一个数组nums,编写一个函数将所有О移动到数组的末尾,同时保持非零元素的相对顺序输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]*/void moveZeroes(vector<int>& nums) { int len = nums.size(); if (len == 0 || len == 1) return; int i = 0, j = 0; for (; j < len; .

2022-04-17 09:17:21 153

原创 回溯类题目

/*问题 1输入:s = "3[a]2[bc]"输出:"aaabcbc"*/void reserve(string& s) { int len = s.size(); int i = 0, j = len - 1; while (i < j) { swap(s[i++], s[j--]); }}string decodeString(string s) { int len = s.size(); if (len ..

2022-04-17 09:16:35 616

原创 贪心类题目

/*问题1输出最短路径的题目:/a/b/.././*/vector<string> split_by_char(const string& str, char ch) { vector<string> ret; int index = -1; int i = 0; while (true) { index = str.find_first_of(ch, i); if (index == string::npos) {// 找不到 break; .

2022-04-17 09:16:13 147

原创 二叉搜索树

#include "Btree.h"#include "stack.h"#include <stack>/*********************函数定义区**************************//****************************************************插入成功 返回 true, 插入失败 返回 false****************************************************/.

2022-04-15 09:35:42 115

原创 LFU页面置换

#pragma onceextern "C" {#include "double_queue.h"}#include <unordered_map>#define MAX_BLOCK 4struct map_val { int num; // 访问数量 double_queue_node* node;};class LfuCache {public: LfuCache(int max = MAX_BLOCK) { max_blocks = max;.

2022-04-09 16:46:50 235

原创 LRU页面置换

#pragma once#include "double_queue.h"#include <unordered_map>#define MAX_BLOCK 3class LruCache {public: LruCache(int block = MAX_BLOCK) { this->max_block = block; mem_queue = create_double_queue(); } ~LruCache() { this->m.

2022-04-09 16:46:02 390

原创 线程池c++11

#include <iostream>#include <string>#include <mutex>#include <condition_variable>#include <thread>#include <queue>using namespace std;struct Task { void* ctx; void (*handle)(void* ctx);};void thread_cycle_.

2022-04-09 16:42:32 617

原创 最长重复子串

#include <iostream>#include <string>using namespace std;/*给一个字符串、例如 “ababc”要求返回“ab”. 因为“ab”连续重复出现且最长。 用C/C++语言写一函数完成该算法,给出复杂度*/string find(const string& str) { string ret; int len = str.size(); if (len <= 1) return str; i.

2022-04-09 16:36:45 677

原创 算法-滑动窗口

#include <iostream>#include <string>using namespace std;// 题目描述 在 一个字符串中 找到子串,子串可以无序// 如 absdfgk 中 存在 fds // 使用滑动窗口bool is_exist(const string& str, const string& sub) { int i = 0; int j = 0; int map[256] = { 0 }; int s.

2022-04-09 16:03:36 149

原创 排序算法-堆排序

// (堆排序-大堆) 使用数组来表示 二叉树型结构static void down_adjust(int array[], int size, int father) { int r_chirld = 0; int l_chirld = 0; bool flag = false; for (int cur = father; cur <= size / 2 - 1; ) { r_chirld = (cur + 1) * 2; l_chirld = (cur + 1) * 2 - .

2022-04-09 15:54:41 714

原创 版本管理工具git 使用【本地操作篇】

Git 常用的是以下 6 个命令:git clone、git push、git add 、git commit、git checkout、git pull,命令从0开始,我们一一介绍。【一.单分支情况】1.首先需要创建一个工作区git init2.在工作区中修改或者编写新的文件1)git add demo.txt到本地缓存之前和之后的状态【文章莫问git status中字符的含义】2)此时我们修改demo.txt(已经提交到本地缓存了)可以通过git dif...

2022-04-06 18:55:50 823

原创 linux命令useradd

useradd 命令:创建新用户并指定工作目录,passwd指定新用户的登录密码 vim /etc/passwd登录成功useradd 其他参数-c<备注>  加上备注文字。备注文字会保存在passwd的备注栏位中。 -d<登入目录>  指定用户登入时的起始目录。 -D  变更预设值. -e<有效期限>  指定帐号的有效期限。 -f<缓冲天数>  指定在密码过期后多少天即关闭该帐号。 -g&l...

2022-04-02 10:35:37 1632 1

原创 linux-awk, grep文本分析工具。

1.grep 工作中常用的使用方式:(也可以配合正则,在shell篇里有讲)grep -rn "main(" ./ 从当前目录开始 查找有main( 的行grep -vn "const" ./从当前目录开始 过滤有const 的行2.awk:每行按 空格 or TAB分割,也可以使用正则比如文件:用法一: 比如选取 1 4列的数据用法二: 比如选取 第 2列的数据(使用","进行分割)这里有个问题怎么...

2022-04-01 14:51:45 299

原创 linux命令-top

top命令:Linux top命令用于实时显示 process 的动态。使用权限:所有使用者。当前时间 23:27:24 系统运行时间 28分钟 当前登录用户数量 2 个 load average: 0.04, 0.09, 0.08 系统负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。 tasks总进程数 289个 1 running 1个运行 288 sleeping 288个睡眠.

2022-04-01 12:00:12 133

原创 Http协议学习笔记1.0, 1.1, 2.0, 3.0区别

Http1.01.只支持短连接:每次发送请求都需要进行三次握手。【性能差】2.在请求头部中没有Host头域(用于存储域名):只有ip地址,无法区别虚拟主机(同一个服务器ip,可以通过端口号或者子网来进行虚拟主机的划分)。【跟不上网络发展】3.不支持断点续传:比如一部2个小时的电影,上次下载了50%,下次想从50%那里接着下载,这在1.0里面是没办法的,只能从头开始下载,要么你全部下载完,要么从头开始下。Http1.11.引入了更多的缓存策略:在Http1.0中主要使用header里的lf

2022-03-12 20:51:15 2812

原创 音视频学习-音频编码冗余信号

冗余信号在介绍音频编码之前,介绍一下压缩的必要性:数字音频信号如果不压缩,直接进行传输,将会占用极大的带宽。例如一套双声道数字音频若取样频率为44.1KHz,每样值按16bit量化,则其码率为:2*44.1kHz*16bit=1.411Mbit/s。如此大的带宽,将给信号的传输和处理都带来许多困难和成本。(阿里云服务器带宽大于5M后,每M价格是100元/月),因此必须采取音频压缩技术对音频数据进行处理,才能有效地传输音频数据。数字音频压缩编码在保证信号在听觉方面不失帧的情况下,因该尽可能的压缩音频.

2021-11-03 19:29:26 899

原创 音视频学习-音频相关知识

一.声音的本质:声音是由物体的振动产生的,这种振动引起了周围空气压强的振荡,我们称这种振荡的函数表现形式为波形.声音有振幅,振幅的主观感觉是声音的大小。声音的振幅大小取决于空气压力波距平均值(也称平衡态)的最大偏移量。【这些物理知识,大家了解一下就行了】二.声音的物理性质:声音的频率是周期的倒数,它表示的是声音在1秒钟内的周期数,单位是赫兹(Hz)。千赫(kHz),即1000Hz,表示每秒振动1000次。声音按频率可作如下划分:1. 次声...

2021-10-28 16:55:53 621

原创 音视频学习笔记-视频的主要概念

嘤嘤嘤

2021-10-14 19:32:07 878 1

原创 音视频学习笔记-图像表示

一.RGB格式如图所示RGB方式:对于一幅图像,一般使用整数表示方法来进行描述,比如计算一张的RGB_888图像的大小,可采用如下方式: 1280×720 * 3 = 2.637 MB,4分钟就达到了15G的容量。 假如是一部90分钟的电影,每秒25帧,则一部电影为 2.637MB*90分钟*60秒*25FPS= 347.651GB二.YUV格式如图所示:用途:主要用于视频信号的压缩、传输和存储,和向后相容老式黑白电视。 1.其中“Y”表示明亮度(Luminance或Luma

2021-09-12 21:36:41 268

原创 音视频学习笔记-视频基础

一.音视频录制原理先上图看一看时钟就是音频和视频同步的基础。我们在采集音频和视频时打上相应的时间戳,因此这个时钟是公共的。摄像头1.从摄像头开始:比如我们1s采集25张图片,就是25帧率。每张图可以用RGB,或者YUV的方式表示。2.图像处理:比如我们这个图像比较暗淡,我们可以才这个环节把图像设置亮一些。3.图像帧队列:相当于一个图像帧的缓冲,可以把他理解成内存,视频编码为CPU, 图像采集为读磁盘。4.视频编码:如果你不做视频编码,视频的体积是非常大的,比如:192..

2021-09-12 20:52:58 200

原创 linux环境高级编程-IPC机制【消息队列】

ftok在内核中创建一个进程间都看得到的标识 #include <sys/types.h> #include <sys/ipc.h> key_t ftok(const char *pathname, int proj_id);pathname相当于这个 标识符在那个目录,proj_id就是相当于一个密码,在相同的pathname,用相同的 proj_id就可以获取到 相同的 key_t 也就是那个 msgfd。代码Demomsgcomm.h...

2020-11-01 10:49:54 269

原创 BASE64编码

Base64 其实 是 基于 64 个可打印字符来表示 二进制数据的 表示方式,比如用不可打印的字符 用可以打印的字符来表示【例如:空格】,Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一。【QQ邮箱用的就是这个编码方式】,接收端收到之后解码就行了。Base64编码表ASCII码表特点:按字符串长度,从左往右以每三个8bit的字符为一组。 针对每组,首先获得每个字符的 ASCII编码。 将 ASCII编码转为8Bit的二进制,得到一组 3*8 =24b...

2020-10-31 17:17:06 321 2

原创 Hash函数MD5-【C/C++操作openssl/md5】

白嫖是一种罪,如果有帮助建议点个赞或者关注一下。一.MD5 即:Message-Digest Algorithm 5 (信息-摘要算法5),用于确保信息传输完整一致,是计算机广泛使用的Hash算法,将数据运算为另一个固定长度的值,是hash算法的基本原理,MD5的前身有 MD2 ,MD3, MD4。MD5算法特点:1. 压缩性:任意长度的数据,算出的 MD5值长度都是固定的,16个字节。 2.容易计算:从原数据计算出MD5 非常容易。 3.抗修改性:对原数据进行任意的改动,哪怕只.

2020-10-31 15:00:42 469

原创 加密算法RSA 【C/C++运用openssl】

白嫖是一种罪,如果有帮助请点赞收藏RSA:非对称加密算法。RSA公开密钥算法的发明人【三人帮】,从左往右 RonRivest,Adi Shamir,Leonard Adleman. 照片拍摄于1978年RSA公钥加密算法是1977年由罗纳德李维斯特(Rgn Rivest)、阿迪萨莫尔(AdiShamir)和伦纳德阿德曼(Leonard Adleman) - -起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA就是他们三大姓氏开头字母拼在一起组成的。 RSA是目..

2020-10-31 12:10:28 501 2

原创 对称加密算法AES【C/C++运用openssl库】

白嫖是一种罪,有用就点个赞把一.在介绍AES之前我们还是简单的介绍一下DES和3DES1.DES【可破解的】:全称为Data Encryption Standard ,即数据加密标准,是一种使用密钥加密的块算法,DES算法的入口参数有三个: Key,Data,Mode,其中Key 为7个字节 共56位,是DES算法的工作密钥: Data为8字节 64位,是要被加密或者破解的数据,Mode是DES的工作方式,有加密或者解密两种2.3DES【很难破解的】:【即Triple DES】,是DES.

2020-10-31 11:17:56 940 1

原创 加密算法的分类

一.对称加密:XOR【这篇介绍 】 DES(可破解得,过时的), 3DES【DES -> AES过度得中间产物】 AES Blowfish twofish二.非对称加密:RSA Elgamal 背包算法 Rabin D-H ECC(椭圆曲线加密算法)三.散列算法:MD5 【Message-Digest Algorithm 5】SHA1 SHA2(SHA-256,512) Secure Hash...

2020-10-31 10:20:56 240 4

原创 加密【encrypt】和解密【decrypt】介绍

先弄清楚是个 什么东西,后面再说代码怎么写。一.重要性:1.互联网重要数据的传输需要加密TCP/IP协议本身是明文的,不安全 登录时候用户的账号或者密码 比如收发电子右键 QQ聊天内容,曾经的恐怖分子还列出一份安全IM工具列表加密协议包括:https tls ssl等2.重要的数据存储也需要加密:NTFS和 EFS WINRAR的文件加密等3.防止文件被篡改,需要数字签名二.加密算法的分类1.对称加密【也叫单钥加密】:说的直白一些就是 加密和解密 都是...

2020-10-30 20:01:11 3487

原创 心跳包&乒乓包【介绍】

心跳包&乒乓包(可以携带少量的信息)【应用层协议】心跳检测机制:主要是用来检测用户是否处于连接的状态。在TCP网络通信中客户端与服务器时常的非正常断开,所以需要检测client是否保持连接,常用的手段就是心跳机制。Heart-Beat线程就是运用守护进程https://blog.csdn.net/qq_44065088/article/details/109141683我已经讲过了 守护进程(线程)怎么编写,在接收和发送数据时个人设计一个守护进程(线程),定时发送 Heart-Bea

2020-10-26 13:20:26 934 1

原创 软件工程-敏捷开发概述

敏捷开发SCRUM【迭代式增量软件开发过程】SCRUM概述 SCRUM团队 SCRUM的工作件 SCRUM管理实践 SCRUM技术实践1.SCRUM概述看看到底又那些公司在使用敏捷开发【敏捷开发浪潮】敏捷开发流程:就是让我们尽量能完美的完成用户需求的一种开发模式【快速实现用户想要的软件】 ,无论是 上百人的大型团队,还是小到 几个人或者两个人的小型团队ISO 9000(09版)标准将在原来八大原则的基础上新增敏捷原则 2000年美国军方软件开发标准(...

2020-10-26 09:12:50 379

原创 linux网络高级编程-libco协程事件驱动与调度

一.协程的“阻塞”与线程的“非阻塞”一个线程中的所有协程 本质上都是串行执行的,在上一篇章的代码中:https://blog.csdn.net/qq_44065088/article/details/109272505在 Producer 协程函数内我们会看到调用 poll 函数等待 1 秒,Consumer 中也会看到调用 co_cond_timedwait 函数等待生产者信号。注意,从协程的角度看,这 些等待看起来都是同步的(synchronous),阻塞的(blocking);但从底层线程的角

2020-10-26 07:15:19 212

原创 linux网络高级编程-协程【腾讯Libco库】

历史:协程这个概念,最近这几年可是相当地流行了。尤其 go 语言问世之后,内置的协 程特性,完全屏蔽了操作系统线程的复杂细节;甚至使 go 开发者“只知有协程,不知 有线程”了。当然 C++, Java 也不甘落后,如果你有关注过 C++ 语言的最新动态,可能 也会注意到近几年不断有人在给 C++ 标准委员会提协程的支持方案;Java 也同样有一 些试验性的解决方案在提出来。一.协程是什么?简而言之 协程是一种轻量级的线程【只有独立的栈空间】, 当然前面也提到了在 linux下 线程 也是一种.

2020-10-25 15:12:42 290

原创 linux网络高级编程-数据包在各层的解析

我们去网上偷了一张图我们用 原始套接字 来 验证一下 这个 图的 真伪【我知道 它是真的】#include <iostream>#include <netinet/in.h>#include <sys/socket.h>#include <netinet/ether.h>#include <unistd.h>#include <string.h>#include <string>#include

2020-10-25 12:22:18 162

原创 linux网络编程-水平触发/边沿触发

我直接画图介绍把#include <iostream>#include <sys/epoll.h>#include <unistd.h>using namespace std;#define MAXLINE 10#define MAX_OPEN 10#define PIPE_READ 0#define PIPE_WRITE 1intmain(int argc, char*argv[]){ pid_t pid; int i;

2020-10-25 11:07:58 194

原创 多路IO转接服务器-epoll【重点】

一.epoll介绍epoll是linux下多路io复用接口select/poll的增强版,它能显著提高程序在大量并发连接中少量活跃的情况下的系统CPU利用率,因为它会复用文件描述符集合来传递结果而不用迫使开发者每次等待事件之前都必须重新准备要要被监听的文件描述符集合,另一点原因就是获取事件的时候,无需遍历整个被监听的的文件描述符集合,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。【什么意思呢:比如 教作业,老师(转接模型), n多个学生(client),当少数学生作业写好了(

2020-10-25 10:46:46 116

原创 多路IO转接服务器-POLL

Poll(原理和select一样)【也和select一样 不用话太多的精力】相比select改进的地方1.最大文件描述符数量可以 > 10242.接受事件和处理事件分开【select是传入传出参数 描述符集合在一起的,需要自己维护一个client数组】3.但如果链接的client太多效率还是很低【也和select一样是用的轮询机制】要逐个遍历才知道 那些client有事件产生struct pollfd { int fd; ...

2020-10-25 09:32:41 121

空空如也

空空如也

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

TA关注的人

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