自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux-C/C++开发环境常用软件安装

安装/升级 LLVM(包含clang)安装/升级 GCC安装/升级CMake安装/升级 Python升级Linux内核安装/升级 OpenSSL

2024-06-30 22:07:01 128

原创 Linux系统运行时参数命令(性能监控、测试)(3)网络IO性能监控

nc是NetCat的简称,在网络调试工具中享有“瑞士军刀”的美誉,此命令功能丰富、短小精悍、简单实用,被设计为一款易用的网络工具,可通过TCP/LJDP传输数据。tcpdump是网络状况分析和跟踪工具,是可以用来抓包的实用命令,使用前需要对TCP/IP有所了解,因为过滤使用的信息都是TCP/IP格式。netstat和ss的输出是类似的,都展示了套接字状态、接收队列、发送队列、本地ip和端口、远端ip和端口、进程PID和进程名称等。和ssh的区别:端口区别,telnet是23,ssh是22;

2023-07-09 18:15:40 2336 1

原创 Linux系统运行时参数命令(性能监控、测试)(2)虚拟内存和物理内存、内存性能监控、文件IO性能监控

每个进程创建加载的时候,会被分配一个大小为4G(32位下)的“连续”的虚拟地址空间,这个空间不是真实的物理空间,仅仅是每个进程“认为”自己拥有4G的内存,而实际上,它用了多少空间,操作系统就划出多少空间给它;swap分区通常被称为交换分区,是一块特殊的磁盘空间,当实际内存不够用时,操作系统会从内存中取出一部分暂时不用的数据,放在交换分区中,从而为当前正在运行的程序腾出足够的内存空间。在Linux的缓存IO机制中,数据先从磁盘复制到内核空间的缓冲区,然后从内核空间缓冲区复制到应用程序的地址空间(用户空间)

2023-07-07 21:11:14 498

原创 Linux系统运行时参数命令(性能监控、测试)(1)监控工具、CPU上下文切换、CPU性能监控

所谓的上下文切换,就是把上一个任务的寄存器和计数器信息保存下来,然后加载新任务的寄存器和计数器信息,最后跳转到新任务的位置开始执行新任务。根据任务的不同,CPU的上下文切换就可以分为几个不同的场景:进程上下文切换、线程上下文切换、中断上下文切换。

2023-06-11 02:12:24 1660

原创 Makefile、CMake

(变量名)$@$@$^$<

2023-06-04 23:36:33 527

原创 C++异步操作,std::future,std::aysncm,std::promise,std::packaged_task,std::bind

std::packaged_task的作用是提供一个不同线程之间的数据同步机制,它可以存储一个函数操作,并将其返回值传递给对应的future,而这个future在另一个线程中也可以安全的访问这个值。std::promise提供了不同线程之间的数据同步方式,可存储一个某种类型的值,并将其传递给对应的future,即使这个future不在同一个线程中也能访问到这个值。

2023-05-12 22:22:50 748

原创 设计模式:创建型设计模式、结构型设计模式

设计原则之间有概念重复的部分,侧重点又有所不同;因此在开发时,应参考设计原则进行代码结构设计。

2023-04-30 15:29:28 973

原创 海量数据去重的Hash与BloomFilter,bitmap,分布式一致性hash

布隆过滤器是由位图和k个hash函数构成的有时,我们不需要通过key查找特定的value,只是想确定某个key是否存在,又或是为了节省内存,可以使用布隆过滤器。

2023-04-09 16:34:36 478

原创 【gdb配置】打印stl容器,.gdbinit文件

原生gdb通过p打印C++容器,打印出的内容往往难以理解,通过以下的脚本可以实现常用容器的打印。如果不想每次启动gdb都要手动输入读取脚本,可以将上面stl_views_1.0.3.gdb的内容直接拷贝到.gdbinit文件中,具体操作可以看后面的第二大点同样的,可以通过pmap,pset,plist…等等来打印STL容器的内容,方便调试。

2023-01-14 16:24:35 1369

原创 Nginx反向代理

正向代理是位于客户端和原始服务器之间的服务器,为了能够从原始服务器获取请求的内容,客户端需要将请求发送给代理服务器,然后再由代理服务器将请求转发给原始服务器,原始服务器接收到代理服务器的请求并处理,然后将处理好的数据转发给代理服务器,之后再由代理服务器转发给客户端,完成整个请求过程。客户端给服务器发送请求,连接服务器,用户不知道服务器地址,只有反向代理服务器的地址是公开的;web服务器收到请求后进行处理,将结果发送给反向代理服务器,反向代理服务器将拿到的结果转发给客户端。总的来说,正向代理是为用户服务的。

2023-01-14 14:15:50 92

原创 高效的NoSql数据库——Redis

Redis是一个高性能的Key-Value数据库,它默认将数据存储在内存中,实现数据的高效存取,通常作为缓存使用。

2022-09-24 18:35:48 374

原创 【Linux】进程(二)Linux进程地址空间、写时拷贝

目录

2021-11-19 23:45:34 811

原创 【C++】二叉树前序、中序、后序遍历(非递归写法)

1. 前序遍历非递归写法遍历规则:左 + 右 + 根class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int> ret; if(root == nullptr) return ret; TreeNode* cur = root; stack<TreeNode*&gt

2021-08-12 10:17:10 298

原创 【Linux】线程池与原语操作

目录

2021-08-09 17:30:47 208

原创 【C++】为什么一般建议将基类的析构函数设置为虚函数

目录

2021-07-30 16:10:31 144

原创 【C++】什么是菱形继承?菱形继承存在的问题?什么是虚拟继承?

目录

2021-07-29 22:11:37 233

原创 【Linux】进程(一)Linux下的进程与线程

什么是LWP?LWP与pthread_create创建的线程之间的关系轻量级进程ID与进程ID之间的区别

2021-07-28 17:58:33 435

转载 【Linux】主线程退出对子线程的影响

今天在看一些关于线程方面的文章时,觉得这篇文章讲得很不错,对于初学者对于线程的理解很有帮助,一方面想自己保存起来,另一方面希望更多人能看到。原文出处:简单了解C语言中主线程退出对子线程的影响对于程序来说,如果主进程在子进程还未结束时就已经退出,那么Linux内核会将子进程的父进程ID改为1(也就是init进程),当子进程结束后会由init进程来回收该子进程。那如果是把进程换成线程的话,会怎么样呢?假设主线程在子线程结束前就已经退出,子线程会发生什么?在一些论坛上看到许多人说子线程也会跟着退出,其实这是

2021-07-26 15:17:00 3427 3

原创 在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。

描述在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿一些手套,然后选出一双颜色相同的左右手手套。现在的问题是,他至少要拿多少只手套(左手加右手),才能保证一定能选出一双颜色相同的手套。给定颜色种数n(1≤n≤13),同时给定两个长度为n的数组left,right,分别代表每种颜色左右手手套的数量。数据保证左右的手套总数均不超过26,且一定存在至少一种合法方案。

2021-07-21 23:23:01 405

原创 【面试题】如何描述线程不安全现象?

==假设场景假设有一个CPU,两个线程:一个线程A,一个线程B;线程A和线程B都想对全局变量 i 进行++操作2.假设线程A先运行,但是线程A将 i 的值读到寄存器之后,就被线程切换了。(线程A的程序计数器和上下文信息分别保存了下一条要执行的汇编指令和寄存器中已经保存的内容)3....

2021-07-17 08:58:10 145

原创 【Linux】文件描述符的理解、重定向原理

目录1. 文件描述符的本质2. 重定向原理1. 文件描述符的本质我们知道,当一个程序在运行时,会挂起一个task_struct结构体,保存着描述该进程的信息,包括2. 重定向原理

2021-07-10 21:58:00 493

原创 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)

剑指Offer:表示数值的字符串 LeetCode链接bool isNumber(string s){ int begin = 0; bool abool = false; while (s[begin] == ' ') { begin++; } if (s[begin] == '+' || s[begin] == '-') begin++; while (isdigit(s[begin])) { begin++; abool = true; } if (s[b

2021-06-30 00:35:21 245

原创 【C++入门】malloc、new与free、delete的区别

目录

2021-06-25 17:50:15 700

原创 const与static的区别

对于C/C++来说,就是只读的意思,只在声明中使用,意即其所修饰的对象为常量((immutable)),它不能被修改,并存放在常量区。一般有两个作用,规定作用域和存储方式(静态存储)。对于局部变量,static规定其为静态存储方式每次调用的初始值为上一次调用后的值,调用结束后存储空间不释放;对于全局变量,如果以文件划分作用域的话,此变量只在当前文件可见,对于static函数也是如此。static修饰的变量如果没有初始化,则默认为0.

2021-06-25 00:56:34 15800

原创 【Linux】gcc/g++的使用(下)gdb调试

注意:在发布调试版本和release版本时,编译选项(优化级别、链接库等)应尽可能保持一致。l(list) 行号。enable 断点号。

2021-06-21 21:33:07 828

原创 【Linux】编译器gcc/g++的使用(上)程序编译的过程

目录1. gcc编译程序的四个过程1.1 预处理(进行宏替换)1.2 编译(生成汇编)1.3 汇编(生成机器可识别代码)1.4 链接(生成可执行文件或库文件 )2. 动态链接与静态链接(函数库)3. gcc选项1. gcc编译程序的四个过程格式 gcc [选项] 要编译的文件 [选项] [目标文件]1.1 预处理(进行宏替换)预处理功能主要包括宏定义,文件包含,条件编译,去注释等。预处理指令是以#号开头的代码行。实例: gcc –E test.c –o test.i选项“-E”,该选项的作

2021-06-21 19:18:15 219

原创 【C语言数据结构】(四)树、二叉树、堆的结构及模拟实现

目录1.树的概念及结构1.1 概念1.2 结构1.3 树的表示2.二叉树概念及结构2.1 概念2.2 结构3.二叉树顺序结构及实现4.二叉树顺序结构及实现1.树的概念及结构1.1 概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成的一个具有层次关系的集合。它之所以被称为树是因为它看起来像一颗倒着的树,即根朝上而叶朝下。特点:有一个特殊的结点,称为根节点,根结点没有前驱结点除根结点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、…Tm,其中每一个集合Ti(1&

2021-06-21 09:57:24 186

原创 【C++入门】类的默认成员函数

目录1.类的6个默认成员函数2.构造函数3.析构函数4.拷贝构造函数5.赋值操作符重载6.默认拷贝函数与赋值运算符重载的问题7.const成员函数8.取地址及const取地址操作符重载1.类的6个默认成员函数如果一个类中什么成员都没有,则成为空类。空类中真的什么都没有吗?答案是否定的,任何一个类在定义时我们什么都不写的情况下,都会自动生成下面6个默认成员函数。class Date{};2.构造函数对于Date类,可以通过SetDate公有方法给对象设置内容,但如果每次创建对象都调用该方法来初始

2021-06-16 14:17:40 366

原创 【C++入门】引用详解

目录1.引用概念2.引用特性3.常引用4.使用场景4.1 引用做函数参数4.2 引用做函数返回值5.传值、传引用的效率比较6.值和引用作为返回值类型的性能比较7.引用和指针的区别1.引用概念引用不是新定义一个变量,而是给已存在的变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共同使用同一块内存空间。例如,你小时候家里人叫你的小名“二宝”,上学了同学们叫你的绰号“菠萝头”,“二宝”和“菠萝头”都是你的别名。用法:类型& 引用变量名(对象名) = 引用实体void Test

2021-06-13 15:05:42 155

原创 【数据结构】(三)栈和队列

目录1.栈1.1 栈的概念及结构1.1.1 概念1.1.2 结构1.2 栈的实现2.队列2.1 队列的概念及结构2.2 队列的实现1.栈1.1 栈的概念及结构1.1.1 概念栈 是一种特殊的线性表,其只允许在固定的一段进行元素的插入和删除操作。**进行数据插入和删除的一端称为栈顶,另一端称为栈底。**栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作称为进栈/压栈/入栈,压入的数据在栈顶。出栈:栈的删除操作叫做出栈,出数据也在栈顶。

2021-06-05 20:30:45 243

原创 【C语言知识点总结】你要的都在图里

2021-06-03 14:37:05 216

原创 【数据结构】(二)顺序表、链表结构的实现与对应操作详解

//顺序表的动态存储typedef struct SeqList{ SLDataType* array;//指向动态开辟的数组 size_t size;//有效数据个数 size_t capacity;//容量空间的大小}

2021-06-03 14:25:18 852 1

原创 【数据结构】(一)数据结构入门:数据结构、算法,时间复杂度和空间复杂度

目录1.什么是数据结构?2.时间复杂度和空间复杂度2.1 时间复杂度2.1.1定义2.1.2 大O的渐进表示法2.2 空间复杂度1.什么是数据结构?数据结构(Data Structure) 是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。提到数据结构,就不得不提到算法,不论是在学习还是工作过程中,数据结构与算法可以说占据了半壁江山,可谓是重中之重,因此学好是很有必要的。算法(Algorithm): 就是定义良好的计算过程,其取一个或一组的值为输入,并产生出一个或一组值

2021-06-01 15:47:00 346

原创 动态内存函数介绍:malloc、calloc、realloc、alloca

一.为什么存在动态内存分配?我们已知的开辟空间的方式有:int c=10;//申请一个四个字节的空间char arr[10]={0};//申请十个字节的空间以上申请内存的特点是:1.申请出的内存大小是固定的2.在变量或数组声明时,所占用的内存空间是固定的,不能由具体的应用灵活调整大小有时候,程序所需要的内存空间是无法确定的,需要在程序运行过程中才能得知,这时候,就要借助动态内存分配。二.动态内存函数介绍1.malloc和freemalloc函数原型:void* malloc(size

2021-05-25 20:56:55 473 2

原创 找单身狗(找只出现一次的数字)

题目:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。编写一个函数找出这两个只出现一次的数字1.基本思路考虑用异或的方法来实现,找出一个只出现过一次的数字的问题处理方法就是找一个数字把里面所有的数字都异或一遍,利用异或两次等于没异或的特点来处理。那么如果有两个数字都只出现了一次,那么如此得到的应该是两个数异或的结果。(这是因为任何数和自己的异或结果都为0,任何数与0的异或结果都为这个数本身;又因为异或运算满足交换律和结合律,故得以上结论);理解了这点,剩下的就变得easy很多。首先这个结

2021-04-25 14:14:12 232

原创 结构体的内存对齐现象

本篇主要介绍如何计算结构体的大小,这涉及到一个特别热门的考点:结构体内存对齐。为什么存在内存对齐?大部分的参考资料都是这么说的:1. 平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2. 性能原因: 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。 原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。总体来说:结构体的内存对齐是拿空间来换取时间的做法。下面先来了解

2021-04-22 14:52:51 288 2

原创 什么是大小端模式?如何判断当前机器是大端还是小端?

数据存储之大小端众所周知,一个变量的创建是要在内存中开辟空间的,而开辟空间的大小是由变量的类型来决定的;例如:1byte的char类型,4byte的int类型,8byte的longlong类型等。而数据在内存中的存储有着两种不同的存储模式(即大端模式与小端模式);1.定义大端(存储)模式,是指数据的低位保存在內存的高地址中,而数据的高位,保存在内存的低地址中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。2.什么是数据的高位与低位?由定义出发,即以数据

2021-04-18 13:56:04 565

原创 My first blog

首先,初来乍到,如对本文有任何建议或不当之处,欢迎指正。本人是西南某985高分子科学与工程本科大三在读,虽然学校算不上顶级,但这个专业在国内甚至亚洲绝对是能排得上名次的,这也算是对我高中的努力的一个交待。但是,随着学习的深入和对这个专业的了解越来越深,我发现或许我对它好像并不是很有兴趣。但我并没有对我当初的选择而感到后悔,人做出的选择往往都是当时最好的,你的选择会受到你的眼界限制。而错过了转专业机会的我选择通过自己的努力零基础转行计算机。**一.短期目标**先把基础学好,语言,数据结构算法,计算机

2021-04-01 14:30:36 132

空空如也

空空如也

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

TA关注的人

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