
笔记
文章平均质量分 73
Polymer to C++
重视细节,但不要沉迷于细节
展开
-
Makefile、CMake
(变量名)$@$@$^$<原创 2023-06-04 23:36:33 · 559 阅读 · 0 评论 -
设计模式:创建型设计模式、结构型设计模式
设计原则之间有概念重复的部分,侧重点又有所不同;因此在开发时,应参考设计原则进行代码结构设计。原创 2023-04-30 15:29:28 · 1018 阅读 · 0 评论 -
海量数据去重的Hash与BloomFilter,bitmap,分布式一致性hash
布隆过滤器是由位图和k个hash函数构成的有时,我们不需要通过key查找特定的value,只是想确定某个key是否存在,又或是为了节省内存,可以使用布隆过滤器。原创 2023-04-09 16:34:36 · 537 阅读 · 0 评论 -
【gdb配置】打印stl容器,.gdbinit文件
原生gdb通过p打印C++容器,打印出的内容往往难以理解,通过以下的脚本可以实现常用容器的打印。如果不想每次启动gdb都要手动输入读取脚本,可以将上面stl_views_1.0.3.gdb的内容直接拷贝到.gdbinit文件中,具体操作可以看后面的第二大点同样的,可以通过pmap,pset,plist…等等来打印STL容器的内容,方便调试。原创 2023-01-14 16:24:35 · 1582 阅读 · 0 评论 -
Nginx反向代理
正向代理是位于客户端和原始服务器之间的服务器,为了能够从原始服务器获取请求的内容,客户端需要将请求发送给代理服务器,然后再由代理服务器将请求转发给原始服务器,原始服务器接收到代理服务器的请求并处理,然后将处理好的数据转发给代理服务器,之后再由代理服务器转发给客户端,完成整个请求过程。客户端给服务器发送请求,连接服务器,用户不知道服务器地址,只有反向代理服务器的地址是公开的;web服务器收到请求后进行处理,将结果发送给反向代理服务器,反向代理服务器将拿到的结果转发给客户端。总的来说,正向代理是为用户服务的。原创 2023-01-14 14:15:50 · 125 阅读 · 0 评论 -
高效的NoSql数据库——Redis
Redis是一个高性能的Key-Value数据库,它默认将数据存储在内存中,实现数据的高效存取,通常作为缓存使用。原创 2022-09-24 18:35:48 · 449 阅读 · 0 评论 -
【Linux】进程(二)Linux进程地址空间、写时拷贝
目录原创 2021-11-19 23:45:34 · 865 阅读 · 0 评论 -
【Linux】线程池与原语操作
目录原创 2021-08-09 17:30:47 · 240 阅读 · 0 评论 -
【C++】为什么一般建议将基类的析构函数设置为虚函数
目录原创 2021-07-30 16:10:31 · 182 阅读 · 0 评论 -
【C++】什么是菱形继承?菱形继承存在的问题?什么是虚拟继承?
目录原创 2021-07-29 22:11:37 · 281 阅读 · 0 评论 -
【Linux】进程(一)Linux下的进程与线程
什么是LWP?LWP与pthread_create创建的线程之间的关系轻量级进程ID与进程ID之间的区别原创 2021-07-28 17:58:33 · 471 阅读 · 0 评论 -
【Linux】主线程退出对子线程的影响
今天在看一些关于线程方面的文章时,觉得这篇文章讲得很不错,对于初学者对于线程的理解很有帮助,一方面想自己保存起来,另一方面希望更多人能看到。原文出处:简单了解C语言中主线程退出对子线程的影响对于程序来说,如果主进程在子进程还未结束时就已经退出,那么Linux内核会将子进程的父进程ID改为1(也就是init进程),当子进程结束后会由init进程来回收该子进程。那如果是把进程换成线程的话,会怎么样呢?假设主线程在子线程结束前就已经退出,子线程会发生什么?在一些论坛上看到许多人说子线程也会跟着退出,其实这是转载 2021-07-26 15:17:00 · 3812 阅读 · 3 评论 -
在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。
描述在地下室里放着n种颜色的手套,手套分左右手,但是每种颜色的左右手手套个数不一定相同。A先生现在要出门,所以他要去地下室选手套。但是昏暗的灯光让他无法分辨手套的颜色,只能分辨出左右手。所以他会多拿一些手套,然后选出一双颜色相同的左右手手套。现在的问题是,他至少要拿多少只手套(左手加右手),才能保证一定能选出一双颜色相同的手套。给定颜色种数n(1≤n≤13),同时给定两个长度为n的数组left,right,分别代表每种颜色左右手手套的数量。数据保证左右的手套总数均不超过26,且一定存在至少一种合法方案。原创 2021-07-21 23:23:01 · 439 阅读 · 0 评论 -
【面试题】如何描述线程不安全现象?
==假设场景假设有一个CPU,两个线程:一个线程A,一个线程B;线程A和线程B都想对全局变量 i 进行++操作2.假设线程A先运行,但是线程A将 i 的值读到寄存器之后,就被线程切换了。(线程A的程序计数器和上下文信息分别保存了下一条要执行的汇编指令和寄存器中已经保存的内容)3....原创 2021-07-17 08:58:10 · 172 阅读 · 0 评论 -
【Linux】文件描述符的理解、重定向原理
目录1. 文件描述符的本质2. 重定向原理1. 文件描述符的本质我们知道,当一个程序在运行时,会挂起一个task_struct结构体,保存着描述该进程的信息,包括2. 重定向原理原创 2021-07-10 21:58:00 · 550 阅读 · 0 评论 -
【Linux】gcc/g++的使用(下)gdb调试
注意:在发布调试版本和release版本时,编译选项(优化级别、链接库等)应尽可能保持一致。l(list) 行号。enable 断点号。原创 2021-06-21 21:33:07 · 880 阅读 · 0 评论 -
【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 · 255 阅读 · 0 评论 -
【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 · 223 阅读 · 0 评论 -
【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 · 423 阅读 · 0 评论 -
【C++入门】引用详解
目录1.引用概念2.引用特性3.常引用4.使用场景4.1 引用做函数参数4.2 引用做函数返回值5.传值、传引用的效率比较6.值和引用作为返回值类型的性能比较7.引用和指针的区别1.引用概念引用不是新定义一个变量,而是给已存在的变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共同使用同一块内存空间。例如,你小时候家里人叫你的小名“二宝”,上学了同学们叫你的绰号“菠萝头”,“二宝”和“菠萝头”都是你的别名。用法:类型& 引用变量名(对象名) = 引用实体void Test原创 2021-06-13 15:05:42 · 178 阅读 · 0 评论 -
【数据结构】(三)栈和队列
目录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 · 270 阅读 · 0 评论 -
【C语言知识点总结】你要的都在图里
原创 2021-06-03 14:37:05 · 240 阅读 · 0 评论 -
【数据结构】(二)顺序表、链表结构的实现与对应操作详解
//顺序表的动态存储typedef struct SeqList{ SLDataType* array;//指向动态开辟的数组 size_t size;//有效数据个数 size_t capacity;//容量空间的大小}原创 2021-06-03 14:25:18 · 917 阅读 · 1 评论 -
【数据结构】(一)数据结构入门:数据结构、算法,时间复杂度和空间复杂度
目录1.什么是数据结构?2.时间复杂度和空间复杂度2.1 时间复杂度2.1.1定义2.1.2 大O的渐进表示法2.2 空间复杂度1.什么是数据结构?数据结构(Data Structure) 是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。提到数据结构,就不得不提到算法,不论是在学习还是工作过程中,数据结构与算法可以说占据了半壁江山,可谓是重中之重,因此学好是很有必要的。算法(Algorithm): 就是定义良好的计算过程,其取一个或一组的值为输入,并产生出一个或一组值原创 2021-06-01 15:47:00 · 375 阅读 · 0 评论 -
动态内存函数介绍: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 · 579 阅读 · 2 评论 -
结构体的内存对齐现象
本篇主要介绍如何计算结构体的大小,这涉及到一个特别热门的考点:结构体内存对齐。为什么存在内存对齐?大部分的参考资料都是这么说的:1. 平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2. 性能原因: 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。 原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。总体来说:结构体的内存对齐是拿空间来换取时间的做法。下面先来了解原创 2021-04-22 14:52:51 · 314 阅读 · 2 评论 -
什么是大小端模式?如何判断当前机器是大端还是小端?
数据存储之大小端众所周知,一个变量的创建是要在内存中开辟空间的,而开辟空间的大小是由变量的类型来决定的;例如:1byte的char类型,4byte的int类型,8byte的longlong类型等。而数据在内存中的存储有着两种不同的存储模式(即大端模式与小端模式);1.定义大端(存储)模式,是指数据的低位保存在內存的高地址中,而数据的高位,保存在内存的低地址中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。2.什么是数据的高位与低位?由定义出发,即以数据原创 2021-04-18 13:56:04 · 592 阅读 · 0 评论 -
My first blog
首先,初来乍到,如对本文有任何建议或不当之处,欢迎指正。本人是西南某985高分子科学与工程本科大三在读,虽然学校算不上顶级,但这个专业在国内甚至亚洲绝对是能排得上名次的,这也算是对我高中的努力的一个交待。但是,随着学习的深入和对这个专业的了解越来越深,我发现或许我对它好像并不是很有兴趣。但我并没有对我当初的选择而感到后悔,人做出的选择往往都是当时最好的,你的选择会受到你的眼界限制。而错过了转专业机会的我选择通过自己的努力零基础转行计算机。**一.短期目标**先把基础学好,语言,数据结构算法,计算机原创 2021-04-01 14:30:36 · 150 阅读 · 0 评论