自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++类成员变量默认值

C++类成员变量的默认初始化

2022-08-19 00:24:12 2884 1

原创 GitHub不再支持密码验证

报错如下:Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.安装gitsud

2022-03-24 19:35:05 898 1

原创 perf生成火焰图教程

perf是performance的简写,Perf是Linux kernel中的系统性能优化工具,perf基本原理的话是在CPU的PMU register中Get/Set performance counters来获得诸如instructions executed,cache-missed suffered,branches mispredicted等信息。git clone https://github.com/brendangregg/FlameGraph.gitperf record -F 99

2022-03-24 19:33:30 1331

原创 VScode远程连接调试

下载VScode,官网:https://code.visualstudio.com/。安装“Remote - SSH”插件,配置免密登录。一、配置免密登录Windows下生成密钥对:ssh-keygen 之后一路回车,默认不设密码,默认目录为 ~/.ssh部署公钥至Linux,并赋权限将id_rsa.pub公钥上传至服务器端~/.ssh目录。cd ~/.sshcat id_rsa.pub >> authorized_keyssudo chmod 600 authorize.

2022-03-24 19:32:56 2261

原创 C++使用sort排序导致的coredump

一、Strict Weak Ordering(严格弱顺序)Strict Weak Ordering是C++ STL中各种算法都用到的一个概念。Strict:s < s 要必须返回false;Weak:s < t 和 t < s都返回false时,就说明s == t;Ordering:s < t为true 并且 t < z为true,则s < z也必须为true。二、std::sort导致core对于std::sort(),当容器里面元素的个数大于_S_th

2022-03-24 19:23:37 1939

原创 切换yum源

cd /etc/yum.repos.dll #查看下当前的.repowget 新的repomv 当前的.repo 当前的.repo.bakmv 新的repo 当前的.repoyum clean allyum makecacheyum update

2022-02-15 14:11:15 406

原创 高级I/O函数

一、pipe函数pipe函数创建一个管道,实现进程间通信。#include <unistd.h>int pipe(int fd[2]);返回0成功,-1失败并设置errno。fd[0]只能用于读,fd[1]只能用于写。二、dup函数dup2函数#include <unistd.h>int dup(int oldfd);int dup2(int oldfd, int newfd);dup函数创建一个新的文件描述符,该新文件描述符和原有文件描述符oldfd指向相同

2021-08-20 16:03:59 93

原创 以太网帧格式 IP数据报格式 TCP数据报格式 MTU MSS

一、以太网帧格式下图摘自《TCP IP详解卷1:协议(第2版)》第3.2.2节以太网帧格式。以太网帧有最小和最大尺寸。最小的帧是64字节,要求数据区(有效载荷)长度(无标签)最小为48字节。当有效载荷较小时,填充字节(值为0)被添加到有效载荷尾部,以确保达到最小长度。传统以太网的最大帧长度是1518字节(包括4字节CRC和14字节头部)。选择这个值出于一种折中:如果一个帧中包括一个错误(接收到不正确的CRC校验),只需重发1.5kB以修复该问题。另一方面,MTU大小限制为1500字节。为了发送一个更

2021-08-18 17:32:56 9886 2

原创 C++网络编程(select、poll、epoll)

一、select多路IO转接int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);void FD_ZERO(fd_set *set); //清空文件描述符集合void FD_SET(int fd, fd_set *set); //将待监听的文件描述符添加到监听集合中void FD_CLR(int fd, fd_set *set); //将文

2021-08-16 15:43:41 1295 1

原创 网络模型与TCP/IP协议

一、OSI网络模型OSI(Open System Interconnect),即开放式系统互联。1.1 应用层OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。1.2表示层表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。

2021-08-16 15:18:49 172 1

原创 结构体struct与联合体union的区别

struct的成员各自有自己的内存空间,各自使用互不干涉,一个struct变量的总长度不小于所有成员的长度之和,由于遵循内存对齐原则总长度可能会变大。union各成员共用一块内存空间,并且同时只有一个成员可以得到这块内存的使用权(对该内存的读写),各变量共用一个内存首地址。因而,联合体比结构体更节约内存。一个union变量的总长度至少能容纳最大的成员变量,而且要满足是所有成员变量类型大小的整数倍。一、对比struct和union占用内存大小#include<stdio.h>struct

2021-08-16 15:05:14 389

原创 快速排序详解

一、快速排序递归算法思想在数组中选一个基准数,通常为数组第一个元素。选取左右边界的两个位置为哨兵。左边的哨兵不断向右移动找比基准大的,右边的哨兵不断向左移动找比基准小的。如果找到了就交换两个元素的位置,直到左右两哨兵位置一致,然后将哨兵最后一致时位置的元素与基准元素进行交换。此时在基准元素左边的都比基准元素小,在基准元素右边的都比基准元素大。再依次递归基准元素的左边区域和右边区域,最后全部有序。二、快速排序迭代算法思想比递归算法多了一个空间用来存储未有序的区域位置,可以用栈、队列或其它合

2021-08-16 15:02:49 118

原创 C++虚函数表

如果类中有虚函数,那么在类的内存中首4-8字节(取决于系统寻址范围32位的地址为4字节)会存放一个指针指向该类共有的虚函数表,虚函数表是一个指针数组,里面存放该类所有的虚函数指针(即函数指针、函数地址)。#include <iostream>class A{public: A(){} virtual void show() { std::cout << "123" << std::endl; } virtual ~A() { std::cout

2021-08-16 15:00:10 98

原创 TIME_WAIT状态

一、TIME_WAIT何时会出现首先调用close()发起主动关闭的一方在发送最后一个ACK之后会进入TIME_WAIT状态。这里看TCP三次握手与四次挥手中的TCP状态变迁图,说的比较详细。二、TIME_WAIT的作用确保对方收到自己发送的最后一个ACK(因为对方发送了FIN),如果对方没有收到自己发送的ACK必定会重新发送FIN,这样保证4次断开的完整性。因为MSL是最大报文生存时间,如果在1个MSL时间内自己发送的ACK对方没有收到那就注定收不到了,而且对方肯定还会发送FIN,那么一个F

2021-08-16 14:57:55 161

原创 Redis学习笔记

一、Redis简介redis以内存作为数据存储介质,读写数据的效率极高。redis跟memcache不同的是,储存在redis中的数据是持久化的,断电或重启,数据也不会丢失。redis的存储分为内存存储、磁盘存储和log文件。redis可以从磁盘重新将数据加载到内存中,也可以通过配置文件对其进行配置,因此,redis才能实现持久化。redis支持主从模式,可以配置集群,更利于支撑大型的项目。众多语言都支持redis,因为redis交换数据快,在服务器中常用来存储一些需要频繁调取的数据,节省内存开

2021-08-14 14:42:59 174

原创 MySQL学习笔记

一、 MySQL索引1.1 MySQL索引数据结构索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。MySQL索引的数据结构是B+树,MongoDB索引的数据结构是B-树。1.1.1 B-树特点:多路,非二叉树;每个节点既保存索引,又保存数据;搜索时相当于二分查找。1.1.2 B+树特点:

2021-08-14 14:42:47 355

原创 Effecctive C++学习笔记

一、explicit阻止类执行隐式类型转换,可被显示类型转换。eg:class A有构造函数explicit A(int a),有函数void doSomething(A aObject)。可以doSomething(A(0))为显示类型转换,但是不可以doSomething(0)为引式类型转换。二、拷贝构造与拷贝赋值运算符有class A、A a,A b(a)调用拷贝构造,A b = a调用拷贝构造,A b;b = a调用拷贝赋值运算符,没有新对象被定义就不会调用构造函数。三、类的常量定义

2021-08-14 14:42:30 128

原创 linux中main函数参数、getopt处理命令行参数

main函数参数简介int main(int argc, char *argv[])argc:参数的个数,最少为一个,也就是下面示例中"./opt_parse_demo"执行程序的命令。argv:指针数组首地址,至少放了一个指针argv[0],argv[0]指针指向的字符就是"./opt_parse_demo"。命令行参数解析函数getopt()##include <unistd.h>int getopt(int argc, char * const argv[], const ch

2021-08-13 17:32:07 285

原创 C++可变参数函数

举例#include <stdarg.h>#include <string>using namespace std;void va_add(int cnt, ...){ va_list ap; va_start(ap, cnt); int sum = 0; for (int i = 0; i < cnt; ++i) sum += va_arg(ap, int); va_end(ap); printf("%d\n", sum);}int main

2021-08-13 17:11:26 1594

原创 Makefile文件简介

先介绍一个简单通用编译静态lib或可执行文件的Makefile。###### c++编译静态lib或可执行文件通用Makefile ######## 一般不需要修改的编译选项配置 ###c编译器CC = gcc#c++编译器CXX = g++#c编译选项CFLAGS = -g -O0 -Wall#c++编译选项CXXFLAGS = -g -O0 -fno-strict-aliasing -Wno-write-strings -frtti -fexceptions -Wall -DDEB

2021-08-13 17:09:50 228

原创 C++多线程

一、多线程简介C++11 新标准中引入了四个头文件来支持多线程编程,他们分别是<atomic> ,<thread>,<mutex>,<condition_variable>和<future>。<atomic> :该头文主要声明了两个类, std::atomic 和 std::atomic_flag,另外还声明了一套 C 风格的原子类型和与 C 兼容的原子操作的函数。<thread>:该头文件主要声明了 std::th

2021-08-13 17:01:44 8370 3

原创 vector的find

由于刚学STL不久,在使用的时候发现vector没有find函数,所以在写一些判断的时候就需要用到泛型find。本来想写成这样的:if (vec.find(1) != vec.end()) ......但是由于vector没有实现find函数,所以报错了,然后改成了这样:if (find(vec.begin(), vec.end(), 1) != vec.end()) ......主要是记录一下,加深印象。...

2021-08-13 16:33:52 12722

原创 const修饰符在C++中的作用

一、const基本使用const int a = 100;a的值不能被改变,a是一个常量。int a = 3;const int* p = &a;指针指向的地址能改变,但不可以修改指向的值。例如*p = 10会报错,但是再定义一个int b = 100,然后p =&b是可以的。int a = 3;int* const p = &a;指针指向的地址不能改变,但可以修改指向的值。例如*p = 10是可以的,但是再定义一个int b = 100,然后p =&am

2021-08-13 16:31:58 139

原创 求n个数中m个数的所有组合C++代码

今天帮贴吧吧友解决一个组合的问题,本来是求固定个数的n个数其中m个数的所有组合,后来说要改成非固定的,想了很久没想出来怎么做,哈哈,能力有限,还有很大的提升空间。然后就上网搜了一下相关的代码,果然有前辈的代码可以参考,找了一篇比较容易看懂的,看懂之后觉得原来的代码写的有点繁琐,就稍作了修改,总体思路没有改变,还是采用逐层递归的方法,只是简化了下代码,改了下风格。代码如下:#include <iostream>#include <vector>using namespace

2021-08-13 16:28:08 619

转载 TCP三次握手与四次挥手

一、三次握手(建立连接)使用 connect() 建立连接时,客户端和服务器端会相互发送三个数据包,如下图所示:客户端调用 socket() 函数创建套接字后,因为没有建立连接,所以套接字处于CLOSED状态;服务器端调用 listen() 函数后,套接字进入LISTEN状态,开始监听客户端请求。这个时候,客户端开始发起请求:当客户端调用 connect() 函数后,TCP协议会组建一个数据包,并设置 SYN 标志位(TCP数据报结构),表示该数据包是用来建立同步连接的。同时生成一个随机数字 1

2021-08-13 16:24:30 150

原创 SOCK_STREAM与SOCK_DGRAM套接字

一、流格式套接字(SOCK_STREAM)流格式套接字(Stream Sockets)也叫“面向连接的套接字”,在代码中使用 SOCK_STREAM 表示。SOCK_STREAM 是一种可靠的、双向的通信数据流,数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送。流格式套接字有自己的纠错机制,在此我们就不讨论了。SOCK_STREAM 有以下几个特征:数据在传输过程中不会消失;数据是按照顺序传输的;数据的发送和接收不是同步的(有的教程也称“不存在数据边界”)。可以将 S

2021-08-13 15:45:58 3834 1

原创 C++基础排序算法(代码)

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-08-13 15:35:21 42

原创 switch范围判断、switch区间判断

大家都知道switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型。很多情况下需要用到case区间判断,比如0-3的,大家可能回写成这样:case 0:case 1:case 2:case 3: func(); break;今天发现还有这种写法,用起来还是很有优势的,用的...

2021-07-29 14:52:00 5970

原创 Docker

一、Docker是什么?Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。二、Docker能做什...

2021-04-03 10:24:04 57

原创 实现发布订阅的三种方式

一、RedisRedis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。redis 127.0.0.1:6379> SUBSCRIBE runoobChatReading messages... (press Ctrl-C to quit)1) "subscribe" #...

2021-04-02 11:44:14 1918

原创 实现分布式锁的三种方式

一、Redis分布式锁二、ZooKeeper分布式锁三、基于数据库实现排他锁3.1 方案1使用INSERT INTO method_lock (method_name, desc) VALUES ('methodName', 'methodName')获取锁,对method_name做了唯一性约束,这里如果有多个请求同时提交到数据库的话,数据库会保证只有一个操作可以成功。3...

2021-04-01 18:07:16 57

原创 ZooKeeper

一、ZooKeeper是什么?官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。ZooKeeper 是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、...

2021-04-01 17:15:06 122

原创 RabbitMQ

一、RabbitMQ能为你做些什么?消息系统允许软件、应用相互连接和扩展.这些应用可以相互链接起来组成一个更大的应用,或者将用户设备和数据进行连接.消息系统通过将消息的发送和接收分离来实现应用程序的异步和解偶.或许你正在考虑进行数据投递,非阻塞操作或推送通知。或许你想要实现发布/订阅,异步处理,或者工作队列。所有这些都可以通过消息系统实现。RabbitMQ是一个消息代理 - 一个消息系统的媒...

2021-03-31 16:21:39 57

原创 记一次内存不足导致程序core问题

最近测试服经常出现因为内存不足导致程序被Kill,看core也看不出什么问题。只是一次BUG修补记录,具体问题仍需根据实际场景具体分析。一、如何定位到是因为内存不足才被Kill使用dmesg命令查看内核日志,类似有Out of memory: Kill process,基本上可以确定是内存不足了。Out of memory 问题,这通常是因为某时刻应用程序大量请求内存导致系统内存不足...

2021-03-13 10:58:06 661

原创 VSCode修改默认终端

打开设置搜索[shell:windows]修改或者增加配置行:"terminal.integrated.shell.windows": "D:\\Git\\bin\\bash.exe"注意前提是装了Git,如果装了其它的终端工具,也可以修改成其它的。不能选"D:\\Git\\git-bash.exe",这个会单独打开一个界面。配置完之后打开终端就是打开配...

2021-03-12 14:21:36 368

原创 Git报错“no branch, rebasing master”

本次出现这个错误是因为本地提交了commit但是未push成功,所以使用git pull --rebase,由于远程仓库和本地的commit有冲突,Git无法自动解决冲突时,会切换到一个匿名分支,然后使用git branch发现报错“no branch, rebasing master”。解决办法:在当前匿名分支下,解决完冲突,然后使用命令git rebase --continue,可以将代码...

2021-03-10 11:25:26 6711

原创 XShell、WinSCP通过跳转服进入远程服务器配置

一、XShell配置以A服务器为跳转服,再用ssh命令连接B服务器,如何配置XShell直接进入B服务器。先正常配置A服务器再点击登录脚本配置,将ssh跳转命令如下配置即可二、WinSCP配置下面是WinSCP通过跳转机传输文件的配置WinSCP有可能长时间不操作容易断开连接需要重新登录就很烦,这里可以设置发空的心跳包:...

2021-03-01 16:52:21 654

原创 变量、函数、存储过程

一、变量1.1全局变量mysql全局变量,全局变量影响服务器整体操作,当服务启动时,它将所有全局变量初始化为默认值。要想更改全局变量,必须具有super权限。其作用域为server的整个生命周期。-- 显示所有的全局变量show global variables;-- 设置全局变量的值的两种方式set global sql_warnings=ON; -- global...

2021-02-26 18:31:45 38

原创 lua函数互相调用、递归调用

在定义局部递归函数( rec ursive local function )时,由于原来的方法不适用,所以有一点是极易出错的。考虑如下的代码:local fact = function (n) if n == 0 then return 1 else return n * fact(n-1) --有问题 endend当Lua 语言编译...

2021-02-20 18:24:08 1022

原创 skynet原理解析

一、消息队列上图摘自Actor模型解析,每个Actor都有一个专用的MailBox来接收消息,这也是Actor实现异步的基础。当一个Actor实例向另外一个Actor发消息的时候,并非直接调用Actor的方法,而是把消息传递到对应的MailBox里,就好像邮递员,并不是把邮件直接送到收信人手里,而是放进每家的邮箱,这样邮递员就可以快速的进行下一项工作。所以在Actor系统里,Actor...

2021-02-20 16:07:51 507

空空如也

空空如也

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

TA关注的人

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