自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 归并排序算法

归并排序

2022-03-22 19:29:37 314

原创 对常见锁的总结

锁的分类最一般的情形:如果在一个双核的机器上有两个线程(线程A和线程B),它们分别运行在Core0和Core1上。假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正被线程B所持有,那么线程A就会被阻塞,Core0会在此时进行上下文切换(Context Switch)将线程A置于等待队列中,此时Core0就可以运行其它的任务而不必进行等待。1、互斥锁(mutex)同一时间只能有一个线程对共享资源进行加锁,在A线程加锁未释放的情况下,B线程再试图加锁会导致B线程

2021-07-07 23:19:46 258

翻译 将字符串句子按单词逆序

问题描述:实现一个链表class MyLinkedList {public: // 定义链表节点结构体 struct LinkedNode { int val; LinkedNode* next; LinkedNode(int val) :val(val), next(nullptr) {} }; // 初始化链表 MyLinkedList() { _dummyHead = new LinkedNode(0); // 这里定义的头结点 是一个虚拟头结点,而不是真正的链表头结点

2020-09-18 14:33:48 218

翻译 前缀树(字典树、单词查找树、trie树)的实现

问题描述:有序链表转二叉搜索树 //有序链表转二叉搜索树 TreeNode* createBST(ListNode*head, ListNode* tail) { if (head == tail) { return nullptr; } ListNode* slow = head; ListNode* fast = head; while (fast != tail && fast->next != tail) { slow = s

2020-09-17 16:55:29 124

翻译 判断一个二叉树是否是镜像二叉树

问题描述:判断一个二叉树是否是镜像二叉树 bool Symmetric(TreeNode* leftchild, TreeNode* rightchild) { if (leftchild == nullptr && rightchild==nullptr) { return true; } if ((leftchild == nullptr&& rightchild != nullptr) ||(leftchild!=nullptr&&

2020-09-17 16:49:55 468

原创 两个栈实现队列

问题描述:使用两个栈实现队列class CQueue {private: stack<int> stack_1; stack<int> stack_2;public: CQueue() { } void appendTail(int value) { stack_1.push(value); } int deleteHead() { if (!stack_2.empty()){ int val = stack_2.top(); stac

2020-09-17 16:41:09 64

原创 算法:整数拆分问题(面试题)

问题描述:给定一个整数n和一个整数k, 对该整数进行拆分,拆分成两个数,使得两数之和等于n,两数之查等于k,对拆分后的两个数再进行拆分,直到不能再拆分为止,求所有拆分后的数的个数。分析:假设一次拆分后的数为x,y,则满足下面的公式x+y=n;x-y=k;也可以理解为一个二叉树结构//递归实现的代码int leafcout(int n, int k){ if (n <= k + 1 || (n + k) % 2 != 0) { return 1; } int x = (n +

2020-09-17 15:53:09 294

原创 vector中存放指针变量问题

vector中存放指针变量,当vector销毁,或者调用erase操作时是否会释放指针变量内部分配的内存?class test {public: test(){} ~test(){ cout << "xigou" << endl; }};void fun(){ vector<test*> ttt; test* t = new test(); ttt.push_back(t); ttt.clear();}结果并没有执行test的析构函数,

2020-08-23 20:36:32 662

原创 字节对齐和#pragma pack

#pragma pack这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式。#pragma pack (n) :C编译器将按照n个字节对齐。#pragma pack () :取消自定义字节对齐方式。#pragma pack (push,1) :是指把原来对齐方式设置压栈,并设新的对齐方式设置为一个字节对齐#pragma pack(pop) :恢复对齐状态字节对齐方式:1、字节内每个变量分别对齐,(每个变量基于结构体起始地址的偏移量为该变

2020-08-22 10:20:59 199

原创 经典算法:快速排序算法

快速排序的c++代码实现:void QuickSort(int left, int right, vector<int>& datas){ if (left >= right) {//递归出口 return; } int i, j, base; i = left; j = right; base = datas[left]; while (i < j) { while(i < j&&datas[j] >= base)

2020-07-28 10:15:20 163

翻译 关于reactor和proctor

网络程序设计中有两种主流的设计模式:Reactor和Proactor。两者的区别,用知乎上的一个神回答解释:如何深刻理解reactor和proactor?reactor:能收了你跟俺说一声。proactor: 你给我收十个字节,收好了跟俺说一声。Linux下高性能的网络库中大多使用的Reactor 模式去实现,Boost Asio在Linux下用epoll和select去模拟proactor模式,影响了它的效率和实现复杂度。为什么Boost.Asio使用Proactor模式呢?借用知乎上陈聪的回

2020-07-22 17:49:55 331

翻译 qps和tps

QPS: 应用系统每秒钟最大能接受的用户访问量。每秒钟处理完请求的次数,注意这里是处理完,具体是指发出请求到服务器处理完成功返回结果。可以理解在server中有个counter,每处理一个请求加1,1秒后counter=QPS。 TPS: 每秒钟最大能处理的请求数。每秒钟处理完的事务次数,一个应用系统1s能完成多少事务处理,一个事务在分布式处理中,可能会对应多个请求,对于衡量单个接口服务的处理能力,用QPS比较合理。...

2020-07-19 22:53:04 144

原创 进程

进程由PCB、 数据段、 代码段构成进程的状态运行态: 占有cpu,并在cpu上运行就绪态: 已经具备运行条件,但没有空闲cpu,而暂时不能运行阻塞态: 因等待某一事件暂时不能运行,不占用cpu创建态: 正在被创建,操作系统为进程分配资源,初始化PCB终止态: 进程正从系统中撤销,操作系统回收资源,撤销PCB...

2020-07-11 16:07:57 115

原创 数据结构和算法-按关键字记忆和学习

关键字:1、hash和索引常规hash算法simhash(局部敏感hash,海明距离)计算文本串相似度:余弦夹角,欧式距离。。 。2、树二叉树相关:二叉搜索树,平衡二叉树、哈夫曼树、红黑树 、2-3树、2-3-4树、B-树、B+树 、B*树搜索相关:trie树(前缀树) 、后缀树、双数组trie树删除线代表已经经过学习记忆,持续更新中。。。...

2020-07-01 20:44:07 186

翻译 计算机硬件--回忆

随机存取存储器(Random Access Memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。当电源关闭时RAM不能保留数据。如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)。RAM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM不会自动消失,可以长时间断电保存。只读存储器(Read Only Memory,ROM)

2020-06-03 16:54:02 147

翻译 协程

yield 让步、放弃 coroutine 协程协程(用户态线程)拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置。协程的优点:(1)无需线程上下文切换的开销,协程避免了无意义的调度,由此可以提高性能(但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程.

2020-06-02 21:35:30 191 1

原创 工作中使用的mysql杂项

案例一将a表中的指定字段插入b表中: insert into b (id,name,address) select id,name, "北京" from a案例二将a表中的name字段按连接符连接后写入b表,(a表中多行数据合并成b表中的一行数据)insert into b(id, name,address) (SELECT id,(select GROUP_CONCAT(name SEPARATOR '|') as tmp_type FROM a WHERE id in(1,2,3))FR

2020-05-25 20:33:55 112

原创 python 机器学习库安装

注意:首先安装之前确保卸载了nump、scipy、sklearn三个库按以下顺序安装:1、pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple scipy安装scipy时会自动安装numpy,如果没有需手动安装numpy2、pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple sklearn用 -i 参数指定安装源路径...

2020-05-23 10:18:07 396

原创 centos下c++开发环境配置

yum -y groupinstall development

2020-05-12 17:26:48 493

翻译 线程与进程

进程是操作系统分配资源的基本单位,线程是cpu调度的最小单位线程多线程中join方法:把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。多线程中detach方法:当使用detach()函数时,主调线程继续运行,被调线程驻留后台运行,主调线程无法再取得该被调线程的控制权。当主...

2020-05-08 12:43:21 135

原创 xshell登录linux缓慢问题

执行: systemctl restart systemd-logind

2020-04-29 10:55:56 200

翻译 c++ 多线程锁(c++11)

互斥锁Mutex属于sleep-waiting类型的锁。例如在一个双核的机器上有两个线程(线程A和线程B),它们分别运行在Core0和Core1上。假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正被线程B所持有,那么线程A就会被阻塞,Core0会在此时进行上下文切换(Context Switch)将线程A置于等待队列中,此时Core0就可以运行其它的...

2020-04-28 16:18:41 636

翻译 什么是RAII?

RAII是Resource Acquisition Is Initialization(wiki上面翻译成 “资源获取就是初始化”)的简称,是C++语言的一种管理资源、避免泄漏的惯用法。利用的就是C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,最后在对象析构的时候,释放构造时获取的资源。链接:https...

2020-04-28 15:29:05 524

翻译 c++类型转换

隐式类型转换隐式类型转换一般分为两种:1、内置数据类型混合类型的算术运算表达式中不同类型的赋值操作时函数参数传值时2、自定义数据类型。要想禁止此种隐式类型转换,可以使用C++关键字explicit显式类型转换四种强制类型转换操作符:static_cast、const_cast、dynamic_cast、reinterpret_caststatic_cast1、主要用于内置数据...

2020-04-25 15:42:59 94

翻译 c++ 智能指针

说明C++里面的四个智能指针: auto_ptr, unique_ptr,shared_ptr, weak_ptr 其中后三个是C++11支持,并且第一个已经被C++11弃用。auto_ptrC++98的方案,C++11已经抛弃,采用所有权模式。auto_ptr<string> p1 (new string ("auto_ptr")); auto_ptr<string&...

2020-04-24 15:01:46 195

原创 c/c++文件操作总结

计算机在物理内存上面存放的都是二进制,所以文本文件和二进制文件的主要区别是在逻辑上的而不是物理上的。而从文件的编码方式来看,文件可以分为文本文件和二进制文件。文本文件是基于字符编码的文件,常见的有ASCII、Unicode等,二进制文件是基于值编码的文件,可以看成是变长编码,你可以根据自己的需要,决定多少个比特代表一个值。从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。(...

2020-04-21 18:45:27 196

原创 记工作中遇到的问题以及解决技巧

1、类的静态成员变量必须在类外进行初始化。2、在写单例的时候时常因为私有化了构造函数和析构函数,但没有函数体定义而导致出错3、c++ 11 atomic自动变量使用{} 进行初始化...

2020-04-21 16:54:46 168

原创 线程状态与cpu

Java线程具有五中基本状态新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;...

2020-04-14 18:45:36 337

转载 算法复杂度中的O(logN)底数是什么?

算法中log级别的时间复杂度都是由于使用了分治思想,这个底数直接由分治的复杂度决定。如果采用二分法,那么就会以2为底数,三分法就会以3为底数,其他亦然。不过无论底数是什么,log级别的渐进意义是一样的。也就是说该算法的时间复杂度的增长与处理数据多少的增长的关系是一样的。我们先考虑O(logx(n))和O(logy(n)),x!=y,我们是在考虑n趋于无穷的情况。求当n趋于无穷大时log...

2020-03-31 17:46:06 1774 1

原创 linux 下jmeter做压力测试

jmeter -n -t ./splitserver.jmx -l result.jtl -e -o ./report参数说明:-n : 非GUI 模式执行JMeter-t : 执行测试文件所在的位置及文件名-r : 远程将所有agent启动用在分布式测试场景下,不是分布式测试只是单点就不需要-r-l : 指定生成测试结果的保存文件, jtl 文件格式-e : 测试结束后,生成测试...

2020-03-10 15:50:36 138

原创 linux环境变量配置

方法1:对系统内的所有用户都生效vim打开/etc/profile文件,用export指令添加环境变量添加完成后新的环境变量不会立即生效,除非你调用source /etc/profile 该文件才会生效,否则只能在下次重进此用户时才能生效。方法2:对单一用户生效在用户主目录”~”下的隐藏文件 “.bash_profile”中添加自己想要的环境变量。添加完成后新的环境变量不会立...

2020-03-10 15:18:39 119

原创 linux 内核参数

sysctl命令可以查看和 动态地修改内核的运行参数,可用的内核参数在目录“/proc/sys”中。sysctl命令对内核参数的修改仅在当前生效,重启系统后参数丢失。如果希望参数永久生效可以修改配置文件/etc/sysctl.conf,修改后使用sysctl -p生效...

2020-03-10 10:38:06 107

原创 c++ 关键字

c++ explicit跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)explicit可以防止隐式转换的发生,explicit关键字只对有一个参数的类构造函数有效, 如果类构造函数参数大于或等于两个时, 是不会产生隐式转换的, 所以explicit关键字也就无效了例如:一个类A的构造函数A(int i)就是,既可以用来作...

2019-12-19 15:15:54 224

转载 多线程锁

1、互斥锁:Mutex属于sleep-waiting类型的锁。例如在一个双核的机器上有两个线程(线程A和线程B),它们分别运行在Core0和Core1上。假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正被线程B所持有,那么线程A就会被阻塞,Core0会在此时进行上下文切换(Context Switch)将线程A置于等待队列中,此时Core0就可以运行其...

2019-12-09 20:25:18 100

原创 linux命令

1、网络IO查看:iftop nload nethogs bmon tcptrack vnstat ifstat2、查看磁盘IO:iostat iotop vmstat top

2019-10-11 18:41:47 98

转载 git core.autocrlf配置说明

格式化格式化是许多开发人员在协作时,特别是在跨平台情况下,遇到的令人头疼的细小问题。 由于编辑器的不同或者Windows程序员在跨平台项目中的文件行尾加入了回车换行符, 一些细微的空格变化会不经意地进入大家合作的工作或提交的补丁中。不用怕,Git的一些配置选项会帮助你解决这些问题。core.autocrlf假如你正在Windows上写程序,又或者你正在和其他人合作,他们在Windows...

2019-07-18 17:15:47 150

原创 _CRT_SECURE_NO_WARNINGS

在vs中编译fopen 、sprintf等函数时提示 类似:Warning 1 warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online...

2019-07-03 11:22:44 233

原创 gdb 界面形式调试代码

gdb可以支持用图形界面交互的方式来调试代码:在调试之前使用:gdb -tui a.out 加入-tui参数进入gbd环境后可以使用ctl+x+a的方式切换tui模式或者取消tui模式使用命令:layout src列出源码使用快捷键 ctl+x+o(或者focus next )命令来切换活动窗口,在非cdm窗口时可以使用ctl+p/n 来替换上下键来显示最近使用的命令在src窗...

2019-06-27 18:11:50 901

原创 修改centos系统时间

1、查看当前的系统时间:[root@bogon vagrant]# dateTue Jun 25 12:12:23 UTC 20192、查看当前时区[vagrant@bogon ~]$ timedatectl status Local time: Tue 2019-06-25 20:29:47 CST Universal time: Tue 2019-06-2...

2019-06-25 20:36:23 55371 3

原创 linux /dev/null 2>&1

/dev/null :代表空设备文件>  :代表重定向到哪里,例如:echo "123" > /home/123.txt1  :表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"2  :表示stderr标准错误&  :表示等同于的意思,2>&1,表示2的输出重定向等同于11 > /dev/null 2>&1 语句含义:

2017-09-15 16:08:16 159

空空如也

空空如也

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

TA关注的人

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