自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (9)
  • 问答 (2)
  • 收藏
  • 关注

原创 MYSQL:连接管理

一个处于空闲状态的连接被服务端主动断开后,这个客户端并不会马上知道,等到客户端在发起下一个请求的时候,才会收到这样的报错“ERROR 2013 (HY000): Lost connection to MySQL server during query”。MySQL 服务支持的最大连接数由 max_connections 参数控制,比如我的 MySQL 服务默认是 151 个,超过这个值,系统就会拒绝接下来的连接请求,并报错提示“Too many connections”。

2022-10-10 11:29:46 780 1

原创 LRU: C++代码实现

【代码】LRU: C++代码实现。

2022-09-05 19:47:15 405 2

原创 c语言函数指针实现函数重载

代码】c语言函数指针实现函数重载。

2022-08-16 10:17:44 661

原创 rawsocket-IP_HDRINCL

原始套接字可以访问ICMP和ICMP等协议包,可以读写内核不处理的IP数据包。可以创建自定义的IP数据包首部。一句话,使用原始套接字可以编写基于IP协议的通讯程序。1.创建原始套接字具体格式如下:int sockfd;sockfd = socktet(AF_INET, SOCK_RAW, IPPROTO_ICMP);第一个参数:协议族 AF_INET 代表TCP/IP协议第二个参数:SOCKET类型第三个参数:协议类型注意:@如果指定协议为0时,原始套接字可以接收内核传递给原始套接字的任何IP数据包,且只有

2022-07-07 19:22:45 452

原创 arp无应答?详解Linux网络中arp

1、arp请求2、工作过程:3、目前遇到场景: lvs 双主同步多活ifconfig ens33:0 192.168.75.100/24 up那么客户端发出请求:curl 192.168.75.100,那么客户端怎么知道 lvs1和lvs2 上挂载的虚ip 192.168.75.100 呢?就算通了,怎么知道是和lvs1通信呢,还是和lvs2通信呢?先看怎么和ip:192.168.75.100进行通信的...

2022-07-06 18:28:37 4041 1

原创 linux:创建虚拟网卡(macvlan)

Linux添加虚拟网卡的多种方法有时候,一台服务器需要设置多个ip,但又不想添加多块网卡,那就需要设置虚拟网卡.这里介绍几种方式在linux服务器上添加虚拟网卡.

2022-06-30 14:50:12 6724

原创 C++中防止多次包含头文件:#pragma once和 #ifndef的区别

目的:为了避免同一个文件被include多次同一个文件被include多次的危害:(1)防止重复定义的错误;(2)如果这个头文件变化,那么所有include这个文件的源文件都需要重新编译,即使没有去使用里面的任何内容避免措施:(1)头文件加#pragma once(2)头文件加#ifndef 宏名 #define 宏名 #endif两者区别:(1)#ifndef和#pragma oncr都发生在预处理阶段,#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多

2022-05-24 17:30:02 2885

原创 muduo源码剖析:AtomicIntegerT原子技术

//DOTO: 该类是对 整数的 原子操作注:使用原子操作时,编译选项要加 -march= cpu-type(cpu-type可以直接填写 native 自动获取本机系统的CPU类型)

2022-05-21 17:23:59 109

转载 无锁队列的实现(陈皓)

在开始说无锁队列之前,我们需要知道一个很重要的技术就是CAS操作——Compare & Set,或是 Compare & Swap,现在几乎所有的CPU指令都支持CAS的原子操作,X86下对应的是 CMPXCHG 汇编指令。有了这个原子操作,我们就可以用其来实现各种无锁(lock free)的数据结构。这个操作用C语言来描述就是下面这个样子:(代码来自Wikipedia的Compare And Swap词条)意思就是说,看一看内存*reg里的值是不是oldval,如果是的话,则对其赋值ne

2022-05-21 15:41:34 725

转载 vector<bool>的特殊性

起因是这样的,昨天在查C++11的range base for loop相关的东西的时候,看到说vector< bool >是一个proxy iterator,非常的特殊,于是就好奇的研究了一下。首先vector< bool> 并不是一个通常意义上的vector容器,这个源自于历史遗留问题。早在C++98的时候,就有vector< bool>这个类型了,但是因为当时为了考虑到节省空间的想法,所以vector< bool>里面不是一个Byte一个Byte储存

2022-05-20 20:51:43 6057

原创 QT添加windows静态库

qt中添加windows vs 生成的静态库,需要注意:qt使用的编译器版本要和vs版本,操作系统位数要对应。例如:用 vs2015 x86生成的了release 和debug两种静态库相应的QT也要配置vs2015 32 编译器。把之前vs 生成的静态库的头文件和库准备好打开qt 中打卡 工程 .pro文件 右键选择 添加库选择外部库这样我们release和debug版的静态库都添加近工程了。如果之前已经生成过编译后的文件夹再次生成时可能遇到error LNK2019:

2022-05-15 10:55:56 1955

转载 QString和char*的相互转换

一、QString 转换为 char *将 QString 转 char *,需要用到 QByteArray 类,QByteArray 类的说明详见 Qt 帮助文档。  因为 char * 最后都有一个’\0’作为结束符,而采用 QString::toLatin1() 时会在字符串后面加上’\0’。方法如下:QString str;char* ch;QByteArray ba = str.toLatin1(); // mustch=ba.data();1234  这样就完成了 Q

2022-05-14 21:51:44 13917

原创 QString转wchar_t*

方法1:file = filename.toStdWString();const wchar_t* str1 = file.c_str();Returns a std::wstring object with the data contained in this QString. The std::wstring is encoded in utf16 on platforms where wchar_t is 2 bytes wide (e.g. windows) and in ucs4 on pl

2022-05-14 21:39:37 1072

原创 C++:管理虚方法:override和final

前言虚方法实现的动态多态给我们的程序 带来了很多便利和操作的空间。但是其 也 带来的一些编程陷阱。override假设 一个 派生类 想覆盖重写 一个 基类的虚函数,如果程序员因为粗心导致其函数特征标不同的话,导致的的是 派生类 隐藏重名的基类虚函数,而不是覆盖。class A{public: virtual void show(char);};class B:public A{ virtual int show(std::string);};如上图所示,我们

2022-05-13 12:23:32 274

原创 C++对象模型探索:什么情况下必须需要默认构造函数

当你使用静态分配的数组,而数组元素类型是某个类的对象时,就要调用默认的构造函数,比如下面的代码。Object buffer[10]; // call default constructor当你使用动态分配的数组,而数组元素类型是某个类的对象时,就要调用默认的构造函数,比如下面的代码,如果Object没有默认的构造函数,是无法通过编译的,因为new操作符要调用Object类的无参构造函数类初始化每个数组元素。Object* buffer = new Object[10];当你使用标准库的容..

2022-05-12 23:58:05 2771

原创 C++:虚继承中对象模型分析

前言我们知道 在多继承中,特别是 菱形继承中,会有两个问题:内存的浪费。二义性。所以 引进了虚继承来 解决问题,虚继承和虚函数的原理很类似。 虚继承有 vbptr(虚基类指针) 指向 vbtable(虚基类表)。 那底层到底如何实现,我们 从 类的对象模型来分析。对象模型分析工具: vs 开发工具命令: cl /d1reportSingleClassLayout[className] XXX.cpp测试类我们来看 类Bb 和 Cc 是怎样的布局:Cc 同理,我们就不演示了。

2022-05-12 23:12:11 954

原创 不使用第三个变量,交换两个变量的值

1. 加减法int a = 2;int b = 3;a = a + b; // a=5;b = a - b; // b=2;a = a - b; // a=3;2. 异或位运算 ^异或: 1 ^ 1 =0 , 1 ^ 0 =1 , 0 ^ 0 =0。异或特性: a ^ b ^ a = bint a = 2;int b = 3;a = a ^ b; // a=1;b = a ^ b; // b=3;a = a ^ b; // a=1;...

2022-05-12 00:31:11 76

原创 浅谈分布式的优势

什么是分布式分布式结构就是将一个完整的系统,按照业务功能,拆分成一个个独立的子系统,在分布式结构中,每个子系统就被称为“服务”。这些子系统能够独立运行在web容器中,它们之间通过RPC(远程过程调用)方式通信。举个例子,假设需要开发一个在线商城。按照微服务的思想,我们需要按照功能模块拆分成多个独立的服务,如:用户服务、产品服务、订单服务、后台管理服务、数据分析服务等等。这一个个服务都是一个个独立的项目,可以独立运行。如果服务之间有依赖关系,那么通过RPC方式调用。分布式的好处:系统之间的耦合度大大

2022-05-11 23:53:40 1689

原创 static_cast 剖析

前言语法 :static_cast< 想要的类型> (原数据), 是C++中的关键字-------在C++中,我们经常用到 隐式的类型 转换,比如 char->int , int ->double, 类层次结构中基类 和 派生类之间指针或引用的转换。-------编译器隐式执行的任何类型转换都可以由 static_cast显式完成。-------需要注意的是, 我们要 确保 目标数据类型 是 我们想要的类型,因为static_cast 不做 运行时的类型检查。-----

2022-05-11 23:41:09 6634

原创 进程的内存空间划分(详解)

从低地址 到 高地址:一共 4G 运行内存。.

2022-05-11 00:29:37 3768 4

原创 leetcode: 二进制中1的个数

描述:编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。思想:我们只需要判断最低位是否是 1即可,然后 右移 一位。( 此算法 只能解决正数,负数会陷入死循环。)class Solution{public: int hammingWeight(uint32_t n) { int count = 0; while (n) { i

2022-05-10 22:03:32 149

原创 leetcode:减绳子/整数拆分

题目描述整数拆分:给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。减绳子给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入:

2022-05-10 21:29:22 230

原创 const_cast-详解一篇就够了

前言是C++中的关键字,用于类型转换,cons_cast 有两个功能:加上const,去掉const。 在开发中,我们往往用到 后者。 只能用于指针和引用!!。-去掉const:type * variable =const_cast< typename* > (expression)加上const:const type * variable =const_cast< typename > (expression去掉const用于4种场景,常量指针(const in

2022-05-09 17:26:54 3515 3

转载 Ubuntu找不到网络适配器(右上角无图标)

第一种1.打开终端,运行命令:sudo service network-manager stopsudo gedit /var/lib/NetworkManager/NetworkManager.state2.更改打开的文件里的内容:将 NetworkingEnabled=false 改为 NetworkingEnabled=true3.保存退出后,在终端运行命令:sudo service network-manager start原文连接第二种解决步骤:1、编辑/etc/Networ

2022-05-08 21:34:10 2696 2

原创 Reactor模型(高并发必备)

前言一般我们做服务器,常常是基于线程架构的也就是thread-based architecture这种模式可以用下图来描述:这种方式适合初中级程序员优点在于结构清晰,逻辑明了,可读性强但是缺点也是非常明显的:每个客户端的请求,都需要一个线程来处理如果有一万个用户,就需要一万个线程来处理有十万个用户,就需要开十万个线程暂且不说十万个,单单一万个线程,仅仅是切换这些线程基本CPU就废了处了这个问题,还有另外一个问题,就是无法控制算力

2022-05-08 00:11:08 922

原创 leetcode:机器人的运动范围

题意:地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2:输入:m = 3

2022-05-07 12:28:12 79

原创 leetcode:矩阵中的路径

题意:给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。示例 1:输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D

2022-05-06 19:02:15 216

原创 Ubuntu磁盘扩容(简单亲测有效)

1. 查看当前磁盘使用情况df -h观察 /dev/sda5, 容量20G只剩 1余G。2. 关闭虚拟机,点击虚拟机,右键——设置——点击硬盘- 拓展这里我想将磁盘 20G-> 拓展到 30G。但是此时我们的分区和文件 并没有扩容(意思就是磁盘拓展了,但是拓展的磁盘空间我们还没使用)。此时就需要安装一个分区管理工具 gparted 。3. 安装与使用 gparted安装sudo apt-get install gparted运行 和使用sudo gparted我

2022-05-05 19:22:22 20912 10

原创 递归实现重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。class Solution{public: TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) { int len_pre = preorder.size(); int len_in = inorder.size

2022-05-02 23:45:19 547

原创 C++面试常考点:字符串常量

引言C++ 字符串常量存储在 静态数据区(静态数据区还存储着 全局数据和静态数据)。所以可以将字符串常量又叫 无名的静态变量。因为字符串常量很少改动的特性,将其存储在静态数据去其实也很好的提高了访问效率。字符串常量以 const char* 的方式存储在 静态数据区。指针和数组当几个字指针赋值给 相同的字符串常量时,实际上会指向相同的的内存地址。但是用相同的字符串常量初始化 数组的话,内存地址又各不相同。void test(){ char* str1="123"; char*

2022-05-01 20:09:26 749

原创 leetcode:二维数组的查找

题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。

2022-05-01 18:50:19 96

转载 32位系统和64位系统的基本数据类型的大小

(一)32位系统和64位有什么区别?1、64bit CPU拥有更大的寻址能力,最大支持到16GB内存,而32bit只支持4G内存;2、64位CPU一次可提取64位数据,比32位提高了一倍,理论上性能会提升1倍。但这是建立在64bit操作系统和64bit软件的基础之上。什么是64位处理器(CPU,Central Processing Unit)?电脑内部实行的是二进制运算,处理器一次处理数据的能力也是2的倍数。8位处理器、16位处理器、32位处理器和64位处理器,其计数都是2的倍数。一次处理的数据越大

2022-04-30 17:47:17 1721 3

原创 gn4.9中__gnu_cxx::__pool_alloc详解和std::allocator的比较

#include<iostream>#include<ext\pool_allocator.h>using namespace std;template<class Alloc>void cookie_test(Alloc alloc,size_t n){ typename Alloc::value_type *p1,*p2,*p3; cout<<"n="<<n<<endl; cout<<"

2022-04-29 11:09:32 698 2

原创 windows窗口底层实现(代码)

#include <windows.h>// 窗口过程// CALLBACK 等同于WINAPILRESULT CALLBACK WindowProc( HWND hwnd, // 消息所属的窗口句柄 UINT uMsg, //具体消息名称 WM_XXXX WPARAM wParam, // 键盘消息 LPARAM lParpm) // 鼠标消息{ switch (uMsg) { case WM_CLOSE:// 点击关闭按钮,会触发该消息 {

2022-04-27 21:19:09 485

原创 C++11:thread详细总结

线程之间是相互运行的,不是说谁先创建,就先一直执行谁。要看CPU的调度机制。线程入口函数可以使用仿函数(函数对象,函数符)。我们创建线程的数量受CPU的影响,如果超出CPU核心数所能搭载线程数的最大值,则会有许多转换操作,导致CPU性能下降。C++11 thread提供了一个公有静态函数得到此电脑能搭载的线程的最大值。[详解]((135条消息) 多线程线程数设置多少合适_OrderDong的博客-CSDN博客_线程池线程数量设置多少最好)cout << thread::har..

2022-04-22 11:30:12 8553

原创 错误分析:非静态成员引用必须与特定对象相对

引言我们首先要知道一点,类的静态成员只能访问 静态成员变量。发生这个错误一般有两种情况。第一种:静态成员访问方式出错在函数中对于静态成员,我们有下面的访问方式ClassName::MemberName但是如果我们直接用这种方式访问非静态成员的时候,就会报标题错误。第二种:在静态函数内调用非静态函数因为类的普通成员函数不能作为回调函数,所以我们经常将类中的回调函数设置为 静态成员函数。但是在静态成员函数中调用非静态成员函数也会报标题错误,对于这种场景,我们有两种解决方法:将调用的非静

2022-03-07 12:11:15 10058 1

原创 真正干货!!25条 SQL 语句性能优化,建议收藏!

1对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOTNULL,或者使用一个特殊的值,如0,-1作为默 认值。3应尽量避免在 where 子句中使用!=或<>操作符,MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。4

2021-06-06 21:03:50 796 6

原创 C++:带你搞定数组的疑难杂症--缓冲区溢出;数组越界;为什们打印内容能超出数组长度?

文章目录前言Ⅰ- 输入超出内容存入数组没有前言先给大家看看一段测试: char s[10]; cin>>s; cout<<"strlen(s):"<<strlen(s)<<endl; cout<<"sizeof(s):"<<sizeof(s)<<endl; cout<<s[12]<<endl; cout<<s;输入:0123456789.

2021-06-01 20:26:39 3714 3

原创 C++:一篇文章,带你玩转 函数模板以及重载解析,函数还可以这样玩?

⚪⚪函数重载不是很了解的同学可以看看:点这里文章目录前言Ⅰ- 初识Ⅱ - decltype关键字瞅瞅decltype的两把刷子前言场景:编写一个函数,返回两个数相加的值。假设是两个 int类型的数,我们需要声明原型:int add(int a,int b);假设是两个 double类型的数,我们需要声明原型:double add(double a,double b);分析:虽然用到了函数重载,但是用的是同样的技术,这样的代码就很冗杂,。不仅浪费我们的时间,并且容易出错。所以大佬们就为C+.

2021-05-30 22:30:17 334 8

原创 C++:函数重载(你不知道的细节)

----------------------别让现实太饿,吃了梦想文章目录前言Ⅰ- 初识Ⅱ- 函数特征标Ⅲ - 调用和原型匹配前言在不同的场景下,我们经常希望使用同一个函数名完成相同的任务,但是使用不同的参数列表。(例如:一个add函数完成两个int变量的相加,另一个add函数完成两个double变量的相加)Ⅰ- 初识我们通过一个实例来完成前言提到的例子:int add(int a,int b){ return a+b;}double add(double a,double b){

2021-05-24 19:05:29 301 10

企业级软件模块设计模板

企业级软件模块设计模板

2022-10-30

网络模块测试用例标准模板

网络模块测试用例标准模板

2022-10-25

高并发实时IM项目介绍

高并发实时IM项目介绍

2022-09-25

python调用c语言动态库(2)

python调用c语言动态库(2)

2022-07-20

python调用c语言动态库案例

python调用c语言动态库案例

2022-07-20

custom send ip

custom send ip

2022-07-15

RawSocket在链路层的收发,arp,多线程指定网守发示例

RawSocket在链路层的收发,arp,多线程指定网守发示例

2022-07-14

通过原始套接字使用arp协议通过对方ip地址获取mac地址

通过原始套接字使用arp协议通过对方ip地址获取mac地址

2022-07-05

rawsocket.....

rawsocket.....

2022-06-27

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

TA关注的人

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