- 博客(36)
- 收藏
- 关注
原创 【C++】使用vector存储百万级数据怎么优化?
描述:vector存储百万级数据如何优化?一百万个int, 100 0000 * 4B = 4 * 10^6 B, 也就是4MB,还没L3 cache大,请问你还想怎么优化?????????????????????????一百万个int, 100 0000 * 4B = 4 * 10^6 B, 也就是4MB,还没L3 cache大,请问你还想怎么优化?????????????????????????一百万个int, 100 0000 * 4B = 4 * 10^6 B, 也就是4MB,还没L3 cac
2021-05-11 15:53:00 2356 1
原创 【C++】dynamic_cast
dynamic_castdynamic_cast:主要用于有继承关系的为什么要用dynamic_cast用法父类->子类 | 子类->父类dynamic_cast:主要用于有继承关系的dynamic_cast是将一个基类对象指针(或引用)转换到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理。dynamic_cast可以用来检查两者是否有继承关系。因此该运算符实际上只接收基于类对象的指针和引用的类转换。为什么要用dynamic_cast用dynami
2021-05-11 11:33:27 323
原创 【Linux系统】进程间通信优缺点及应用场景
进程间通信基础知识管道匿名管道(只存在内存中,不存在文件系统中)命名管道(p类型文件系统形式存在)原理缺点:管道这种通信方式效率低,不适合进程间频繁地交换数据消息队列(消息队列是保存在内核中的消息链表)缺点共享内存共享内存的机制,就是拿出一块虚拟地址空间来,映射到相同的物理内存中信号量例子:信号初始化为 1,就代表着是互斥信号量例子:信号初始化为 0,同步信号量来,可以实现多进程同步的方式信号socket参考资料:https://mp.weixin.qq.com/s?__biz=MzUxODAzNDg4
2021-05-11 10:49:41 994
原创 【C++】临时对象 | 返回值优化 RVO
返回值优化 RVO何时会生成临时对象?以值的方式给函数传参类型转换的时候函数返回一个对象时(不是对象引用)返回值优化 ROV移动语义何时会生成临时对象?以值的方式给函数传参按值传递时,首先将需要传给函数的参数,调用拷贝构造函数创建一个副本,所有在函数里的操作都是针对这个副本,也正是因为这个原因,在函数体力对该副本进行任何操作都不会影响原参数。类型转换的时候例如 myclass = 1000;此处调用拷贝赋值运算符,当myclass拷贝赋值运算符参数类型与右边100不符的时候,会以1000为参数调
2021-05-07 18:00:34 454
原创 【C++11】智能指针 | shared_ptr 陷阱 / 缺点
shared_ptr 陷阱 / 缺点不要把原生指针给多个shared_ptr管理引用计数的存在会对性能/大小产生影响不要把this指针给shared_ptr进行管理引用计数:记的是有多少个智能指针,拥有某个内存的所有权。举个例子:auto sharedPtr = make_shared<Class>();cout << sharedPtr.use_count() 输出为1, 表明对Class这个类的所有权拥有者只有1个。不要把原生指针给多个shared_ptr管理为
2021-05-07 16:40:51 1242
原创 【C++11】智能指针 | shared_ptr和unqieu_ptr所有权转换
shared_ptr和unqieu_ptr相互转换unique_ptr -> shared_ptr (OK)shared_ptr -> unique_ptr (NOT OK)https://www.coder.work/article/12866unique_ptr -> shared_ptr (OK)标题的意思:如何将unique_ptr的所有权,转移给shared_ptr可以轻松的将unique_ptr指针通过移动构造函数,转换为shared_ptr,对对象进行管理,反之不
2021-05-07 11:04:12 2116
原创 【LeetCode】1720. 解码异或后的数组 | 异或的重要概念
https://leetcode-cn.com/problems/decode-xored-array/solution/1720-jie-ma-yi-huo-hou-de-shu-zu-xorde-z-54lk/解题思路^异或:就是看x和y是为不同,不相同为1,相同为0;任何一个数字(y)与0 异或的结果,都是这个数字本身y;最重要的性质:满足交换律 => x ^ y == y ^ x自已 ^ 自己,为0;任何一个数字(y)与0 异或的结果,都是这个数字本身y;0 ^ 1 =>
2021-05-06 09:44:16 242
原创 【LeetCode】198. 打家劫舍 | 动态规划
解题思路关键在于理解递推公式!!看官方题解即可。https://leetcode-cn.com/problems/house-robber/solution/da-jia-jie-she-by-leetcode-solution/代码class Solution {public: int rob(vector<int>& nums) { int n = nums.size(); if (n == 1) { ret
2021-05-05 22:27:19 118
原创 【LeetCode】146. LRU 缓存机制 | map和deque的使用
146. LRU 缓存机制思路:LRU缓存机制注意点:get和put操作都需要更新key的状态。因此使用一个deque,作为队列,先来的key,放在队首,后来的放在对尾。同时注意:get和put操作都需要更新key的状态。把key都放在对尾。使用map去保存key和value呀。class LRUCache {public: deque<int> deq; map<int, int> keyWords; int _count = 0;
2021-04-23 15:04:29 216
原创 【LeetCode】剑指 Offer 55 - II. 平衡二叉树AVL | 简单题 也要认真对待 |
平衡二叉树 | 简单题 也要认真对待 | 自己没什么厉害的, 但其实自己也挺厉害的。题目理解:第一次错误思路第二次思路(自上而下)第三次思路(自下而上)性能https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof/题目理解:如何看是否为平衡二叉树:abs(左子树高度 - 右子树高度) <= 1, true;空, true;第一次错误思路思路:求根节点左右左子树的高度,然后看是否为平衡二叉树:错误的问题:在于只考虑了根节点
2021-04-19 11:49:28 207
原创 【C++11】智能指针 | 重拳出击 -> 实现自己的智能ptr
实现自己的AutoPtrtemplate <typename T>class AutoPtr {public: explicit AutoPtr (T* ptr = nullptr) { std::cout << "set new object, My Class = " << ptr << std::endl; _ptr = ptr; } ~AutoPtr () { std::c
2021-04-14 23:00:43 216
原创 【C++11】泛型编程:函数模板&& 类模板
【C++11】泛型编程:函数模板&& 类模板难点基础知识函数模板类模板难点首先要知道<> 这个尖括号是什么意思?<T1, T2>对应的入参应该是 <typename T1,typename T2>;用类模板定义对象的写法如下:类模板名<真实类型参数表> 对象名(构造函数实际参数表);AutoPtr myclass(new MyClass());如果类模板有无参构造函数,那么也可以使用如下写法:类模板名 <真实类型参
2021-04-12 18:39:48 268
原创 【Parallel Programming】生产者消费者模型 |C++11 condition_variable
这里写目录标题生产者、消费者模型为什么又生产生消费者模型?注意点:优点 & 应用场景C++11 condition_variable4.1.2 使用条件变量构建线程安全队列生产者、消费者模型线程A和B,共享一个固定大小的缓冲区queue/deque,A产生数据放入缓冲区,B从缓冲区中取出数据进行计算。那么这就是一个生产者消费者模型:A是生产者、B是消费者;为什么又生产生消费者模型?通过一个缓冲区,平衡生产者和消费者之间的生产速度和消费速率,主要是避免生产者和消费者,一对一的生产关系,一个等一
2021-04-11 14:38:24 412
原创 【Parallel Programming】C++并发编程学习笔记ing(二)| condition_variable | async | future
C++并发编程学习笔记二4. 同步并发操作4.1 同步的方案4.1.1 等待条件达成4.2 使用期望future等待一次性事件4.2.1 带返回值的后台任务async4.2.2 任务与期望4.2.3 使用promises4.2.4 为期望存储异常4.2.5 多个线程的等待5. 内存模型5.1 内存模型基础6. 基于锁的并发程序结构设计7. 无锁并发数据结构设计8. 并发代码设计9. 高级线程管理10. 面试基础问题线程安全https://editor.csdn.net/md/?articleId=115
2021-04-08 19:11:57 284
原创 【LeetCode】每k个链表翻转 | 困难题依旧重拳出击
https://leetcode-cn.com/problems/reverse-nodes-in-k-group/解题思路对于链表的题目,每次都加个头发!否则你会找不到头。错误思路:123456789, k=4直接把1、5、塞进去0 -> 1 -> 2 -> 3 -> 4 -> 5一次遍历后,1->5第一次遍历8765,因为没有把头节点塞进去,所以1无法指向8,因此调了。正确代码class Solution {public: //
2021-04-08 16:22:40 85
原创 【LeetCode】简单题重拳出击 x 3 | triple kill | unordered_map | unordered_set
1. 两数之和https://leetcode-cn.com/problems/two-sum/解题思路要想清楚,unordered_map, 里面到底存的是什么? <value, index>注意点1:不能同一个值相加,因此m[nums[i]] = i,放在find后面,此时map里面还没有这个值;知识点1: 对于判断map的key是否存在,可以使用find,也可以使用count;代码// 要想清楚,unordered_map, 里面到底存的是什么? <value, ind
2021-04-07 11:01:16 106
原创 【LeetCode】 26. 删除有序数组中的重复项 | 80. 删除有序数组中的重复项 II | 双指针
双指针26. 删除有序数组中的重复项80. 删除有序数组中的重复项 II26. 删除有序数组中的重复项https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/思路:本题可以使用unqiue + erase, 但是目的在于练习双指针。class Solution {public: int removeDuplicates(vector<int>& nums) { // <=
2021-04-06 11:45:44 176
原创 【C++11】std::bind和std::placeholder
std::bind和std::placeholderstd::bind()std::placeholderCode Examplesstd::bind()https://cplusplus.com/reference/functional/bind/examples: double my_divide (double x, double y) {return x/y;} auto fn_five = std::bind (my_divide,10,2); // re
2021-04-05 20:12:51 295
原创 【Parallel Programming】C++并发编程学习笔记ing(一)
第二章:线程管理启动了线程,必须明确始要等待线程结束(加入式),还是让其自主运行(分离式)如果thread对象销毁之前没有决定,程序就会终止,thread析构函数调用std::terminate()2.1.2 等待线程完成等待线程完成,使用std::thread.join()可以确保局部变量在线程完成后,才被销毁。一但使用过join,则不能再join了,只能对其使用joinable(), 对给已加入的线程再次进行操作时,将会导致错误。查看线程是否结束,或者只等待一段时间(超时),则需要使用条
2021-04-05 15:24:25 814
原创 【LeetCode】102. 二叉树的层序遍历 | 层序遍历LevelOrder
/* * 这题考察的就是层序遍历 * 总体思路: * 1. 定义一个队列q,存储每一层的节点,并入队root根节点; * 2. 定义一个二维数组,存储每一层的每一个节点的值 * 3. 只要队列q不为空,则继续遍历二叉树。 * 4. 定义一个vector eachRow,存储每一行的节点值,然后push_back到allRow */ class Solution {public: vector<vector<int>> levelOrder(TreeNode.
2021-04-05 10:07:39 249
原创 【C++】内存分布 | 变量内存分配位置
内存分布 | 变量内存分配位置C++变量(按作用域分类):全局变量静态全局变量:局部变量静态局部变量C++内存分布(按内存空间分布):结论:BSS段(Block Started by Symbol:存放未初始化或者初始化为0的非const全局变量。 运行时确定。DATA区:赋了初值且初值不为0的非const全局变量, 常量, 静态变量,堆中的变量等代码段(TXT):在内存中被映射为只读,编译时确定。总结:因为这些变量分布在不同的内存空间,这正是这些变量生命周期存在差异的原因。C++变量(按作用域分类):
2021-04-04 12:38:38 551 2
原创 【C++11新特性】lambda匿名函数 | mutable关键字隐藏风险
基础知识:[1] https://blog.csdn.net/Zhenzhong_Xu/article/details/115422620?spm=1001.2014.3001.5501mutable关键字先看代码:int main(){ int var = 5; static int base = 3; function<int()> f = [=] () mutable -> int { var++; base++;
2021-04-04 12:04:34 609 1
原创 【LeetCode】1006. 笨阶乘 | 栈的运用
https://leetcode-cn.com/problems/clumsy-factorial/解题思路:遇到乘法的时候,栈顶元素和新的元素相乘,把结果入栈;遇到除法的时候,栈顶元素和新的元素相除,把结果入栈。遇到加法的时候,元素直接入栈;遇到减法的时候,元素取相反数入栈;所有运算处理过后,把栈里面所有元素相加,就是结果。coding思路:* / + - 的处理:使*/± 分别对应0,1,2,3 使用一个变量循环计数,决定每次计算结果;虽然有stakc容器适配器,但仍然可以使用
2021-04-04 00:38:56 83
原创 【C++11新特性】lambda匿名函数
lambda匿名函数lambda表达式定义关键字mutable关键字(可省略):throw表达式 ( 可省略):“-> 返回值类型”(可省略)捕获列表功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入lambda表达式定义定
2021-04-03 23:22:19 266
原创 【C++】 C++安全编码重点规范整理
通用规则C安全编程基础要求变量操作断言操作函数操作循环异常类字符串/数组操作正确使用安全函数整数内存不安全函数文件输入输出敏感信息处理
2021-04-02 10:32:53 1019 2
原创 【LeetCode】回溯:78.子集 | 90.子集2
回溯78. 子集90. 子集278. 子集https://leetcode-cn.com/problems/subsets/class Solution {public: vector<vector<int>> result; void backtrack(vector<int>& nums, vector<int>& path, int start) { result.push_back(path);
2021-04-01 11:38:12 140
原创 【Plan】I have a plan for 2021
I have a planApril : )每天至少一题LC,这是少不了的;每天更新csdn一篇,内容不限;四月份主要投入docker及容器相关,所以希望这个月可以学习很多docker知识并输出很多文章etcd / raft / protobuf / gRPC 写 CSDN持续更新CSDN 设计模式篇章,四月份完成。持续更新CSDN Linux Kernel篇章持续更新Python持续更新Golang每天至少开始一点点。: )...
2021-03-30 22:41:48 175
原创 【SHELL】exec命令
exec作用用处:可以对shell中执行的命令的处理结果,再进行二次、三次、四次处理。find . -name "*.xml" -exec grep -l -E '<componentName>cbb</componentName>|<componentName>bp</componentName>' {} \;find . -name "*.xml" -exec grep -l -E 'ACE-TAOCMC' {} \;linux中的 exec命令,
2021-03-30 22:27:23 1556 1
原创 【SHELL】SHELL重点基础知识
SHELL重点基础知识引号的作用使用变量:SHELL特殊变量及其含义if语句用法bash [[ ]] 双方括号数学计算testdev/null 2>$1localEOFdirname:basename:输入参数处理参考资料引号的作用1.以单引号’ '包围变量的值时:单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景。2.以双引号" "包围变量的值时:输出时会先解析里面的变
2021-03-30 22:14:11 165 1
原创 【LeetCode】190. 颠倒二进制位 easy / bitset / stoul
简单题现在目标25分钟吧;中等题一个小时吧。重点:input: 无符号整型,output: 无符号整型。颠倒:是指首位颠倒,而不是01颠倒stoul(str, nullptr, 2) 第三个参数的作用是指明当前str是什么进制的。如果是00开头,就必须写清楚,否则该函数无法区分是10进制,还是2进制..class Solution {public: uint32_t reverseBits(uint32_t n) { bitset<32>..
2021-03-30 15:10:38 136
原创 【Docker】Docker基础安装部署(CentOS)
Docker基础安装部署查看系统版本号因为使用yum去安装,所以无论什么系统,只要提供了yum源,即可安装。这里并不是非常关心。查看系统中是否安装了docker查看可安装的coker版本执行安装yum install docker*查看安装好的版本查看docker状态冰开启验证docker没有docker镜像至此docker已经拉起了一个容器...
2021-03-29 20:49:28 101
原创 【C++】vector / deque 动态数组
deque 双端动态数组deque定义:deque 知识点:相较于vector的优点/缺点参考资料:https://en.cppreference.com/w/cpp/container/dequedeque定义:vector (动态数组容器):动态数组,用来存放T类型的对象,可以自动增加容量,但只能在序列末尾高效地增加或删除元素。deque (双向队列数组容器) :/dek/是一个长度可变的、可以自动增长的序列,在序列的两端都能高效地增加或删除元素(相对于vector)deque 知识点:
2021-03-29 10:02:56 221
原创 【Linux系统】文件描述符, 文件句柄, open,close函数
文件描述符, 文件句柄, open,close函数文件描述符(file descriptor, fd)句柄相关命令ulimitlimits.conflsof参考资料:文件描述符(file descriptor, fd)文件描述符用来指定已打开的文件,在linux系统中,一切皆文件。包括:普通文件,目录,管理FIFO,SOCKET,终端,设备/dev/xxx等文件描述符是非负整数,打开现存文件或新建文件时,kernel会返回一个文件描述符。内核会维护系统内所有打开的文件及其信息,kernel利用文
2021-03-28 16:01:17 468 1
原创 【LeetCode】61. 旋转链表 medium + 使用列队旋转列表
61. 旋转链表 medium + 使用列队旋转列表总体思路:把所有的链表节点放入队列中,右旋k次,其实就是左旋q.size() - k次, 然后创建链表输出注意:如果右旋超过节点数量,等于仅仅右旋了k%q.size()次,举例:5节点右旋5次,等于没变。优化点:建议放弃queue和stack,分别使用deque和vector去代替这两种容器适配器,毕竟掌握队列和栈的应用和思想更重要。这两种容器适配器无法遍历。无法直接打印里面的数据。/** * Definition for si
2021-03-27 10:57:42 99
原创 2021-03-25
第一篇CSDN本人的LeetCodehttps://leetcode-cn.com/u/xbox4kpsx/GitHub:https://github.com/Xbox4KpsX/ArchitectPathCSDN:https://blog.csdn.net/Zhenzhong_Xu
2021-03-25 23:20:36 84
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人