自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

风清扬

大风起兮云飞扬

原创 多线程/多协程快速排序

多线程/多协程快速排序文章目录多线程/多协程快速排序快速排序代码实现优化建议快速排序原理略,百度很多代码实现package mainimport ( "fmt" "sync" "time")//分割算法1func partition1(arr []int, low, high int) int { t := arr[low] for low < high { ...

2020-02-13 17:17:03 44

原创 剑指Offer----矩阵中的路径(递归回溯法)

时间限制:1秒 空间限制:32768K 热度指数:134786 算法知识视频讲解题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X...

2019-02-26 14:18:05 125

原创 剑指offer----数字在排序数组中出现的次数

时间限制:1秒 空间限制:32768K 热度指数:187371本题知识点: 数组 算法知识视频讲解题目描述统计一个数字在排序数组中出现的次数。 AC code  二分法差找class Solution {public: int GetNumberOfK(vector<int> data ,int k) { if(data.size...

2019-02-26 13:32:35 69

原创 剑指offer----把数组排成最小的数

题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323class Solution {public: string PrintMinNumber(vector<int> numbers) { if(numbers.size(...

2019-02-26 13:19:36 69

原创 算法----大数相乘

题目描述有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。输入描述:空格分隔的两个字符串,代表输入的两个大整数输出描述:输入的乘积,用字符串表示示例1输入复制72106547548473106236 982161082972751393输出复制70820244829634538040848656...

2019-02-25 21:15:05 80

原创 C/C++代码:递归遍历当前文件夹下的文件和子文件夹

#include <iostream>#include <io.h>#include <string>using namespace std;void listFiles(const char * dir,int tab);int main(){ string dir; cout << "Enter a directory (e...

2018-09-01 14:06:33 2956

原创 腾讯面试题----对字符串中单词出现次数排序总结

#include<iostream>#include<algorithm>#include<map>#include<string>#include<vector>#include<functional>using namespace std;void SortWord(char *str){ if (st...

2018-05-11 17:08:00 297

原创 算法----连续子数组的最大和

题目描述一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3输入描述:输入为两行。 第一行一个整数n(1 <= n <= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。输出描述:所有连续子数组中和最大的值。示例1输入3 -1 2 1输出3AC代码#include&...

2018-05-08 15:38:43 284

原创 算法----网易笔试牛牛找工作

时间限制:2秒空间限制:65536K为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。 输入描述:每个输入包含一个测试用例。每个测试用例的第一行包含两个正整数,分别表示工...

2018-05-08 15:34:01 157

原创 剑指offer----逆转链表(递归+非递归方式)

/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*///递归版本class Solution1 {public: ListNode* ReverseList(ListNode* pHead) { if(pHead...

2018-05-04 22:26:24 130

原创 剑指offer----合并两个升序链表

/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*///非递归写法class Solution1 {public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2){ ...

2018-05-04 22:18:35 110

原创 互斥锁、读写锁、自旋锁、条件变量的特点总结

读写锁特点: 1)多个读者可以同时进行读2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者) 互斥锁特点:一次只能一个线程拥有互斥锁,其他线程只有等待互斥锁是在抢锁失败的情况下主动放弃CPU进入睡眠状态直到锁的状态改变时再唤醒,而操作系统负责线程调度,为了实现锁的状态发生改变时唤醒阻塞的线程或者进程,需要把锁交给操作系...

2018-05-02 18:17:42 1274

原创 对同步和互斥的理解

相交进程之间的关系主要有两种,同步与互斥。互斥:是指散布在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行这个程序片段,只能等到该进程运行完这个程序片段后才可以运行。同步:是指散布在不同进程之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。总结:        互斥:是指某一资源同时只允许一个访问者对其进行访问...

2018-05-02 17:00:51 928

转载 LINUX----惊群效应

什么是惊群效应?惊群现象(thundering herd)就是当多个进程和线程在同时阻塞地等待同一个事件,如果这个事件发生,会唤醒所有的进程,但是最终只可能有一个进程/线程对该事件进行处理,其他进程/线程会在失败后重新休眠,这种性能浪费就是惊群。惊群效应的危害?(1)、系统对用户进程/线程频繁地做无效的调度,上下文切换系统性能大打折扣。(2)、为了确保只有一个线程得到资源,用户必须对资源操作进行加...

2018-05-01 21:56:37 278

原创 剑指OFFER----跳台阶变形

#include<iostream> #include<cstring> #include<cstdio> using namespace std;long long _cuopai[100];long long func(int x){ if (_cuopai[x]) return _cuopai[x]; if (x == 1) retu...

2018-05-01 16:58:52 98

原创 剑指OFFER----把二叉树打印成多行

题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }}...

2018-04-30 13:47:42 56

原创 剑指offer----字符串的排列

class Solution {public: vector<string> Permutation(string str) { vector<string> v; if(str.size() == 0)return v; Per(v,str,0); sort(v.begin(),v.end());...

2018-04-23 19:28:28 87

原创 剑指offer----顺时针打印矩阵数组

class Solution {public: vector<int> printMatrix(vector<vector<int> > matrix) { int row = matrix.size();//规定下边界 int col = matrix[0].size();//规定右边界 ...

2018-04-23 17:05:59 90

原创 Leetcode----minmum-depth-of-binary-tree

//minmum-depth-of-binary-tree//递归深度优先class Solution {public: int run(TreeNode *root) { if(root == NULL)return 0; int l = run(root->left); int r = run(root->right)...

2018-04-23 12:29:00 61

原创 TOPK问题----代码实现打印数据中前K大的数

/*问题: 随机产生100000个整数,范围是【0,1000】,快速统计出值最大的前10个?*/#include<iostream>#include<vector>#include<queue>#include<ctime>#include<functional>using namespace std;class To...

2018-04-20 23:23:35 200

转载 GDB查看内存、函数栈、寄存器

gdb查看指定地址的内存地址的值:examine 简写 x-----使用$gdb> help x 来查看使用方式     $x/ (n,f,u为可选参数)n: 需要显示的内存单元个数,也就是从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的u定义f:显示格式               x(hex) 按十六进制格式显示变量。               d(decimal) 按...

2018-04-14 22:45:39 2054

转载 linux服务器出现大量TIME_WAIT的解决方法

转载自:http://www.2cto.com/os/201411/355811.html近期服务器出现大量time_wait的TCP连接造成服务器连接数过多而最终导致tomcat假死状态。连接服务器查看连接数的时候提示如下。[html] view plain copy[root@test apache-tomcat-7.0.53]# netstat -n | awk '/^tcp/ {++S[$...

2018-04-14 22:17:00 631

原创 C++11----std::bind/std::placeholder

而 std::bind 则是用来绑定函数调用的参数的,它解决的需求是我们有时候可能并不一定能够一次性获得调用某个函数的全部参数,通过这个函数,我们可以将部分调用参数提前绑定到函数身上成为一个新的对象,然后在参数齐全后,完成调用。例如:#include<functional>#include<iostream>int foo(int a, int b) { return...

2018-04-13 11:38:07 840

原创 C++11----函数对象包装器std::function

C++11 std::function 是一种通用、多态的函数封装,它的实例可以对任何可以调用的目标实体进行存储、复制和调用操作,它也是对 C++中现有的可调用实体的一种类型安全的包裹(相对来说,函数指针的调用不是类型安全的),换句话说,就是函数的容器。当我们有了函数的容器之后便能够更加方便的将函数、函数指针作为对象进行处理。例如:#include <functional>#incl...

2018-04-13 11:17:12 760

原创 C++11----引用包装器std::ref

模板在编译的时候默认情况是不会识别传递过来的参数是一个引用:如下:#include<iostream>template<typename T>void fun(T num){ num += 100;}int main(){ int a = 0; int &ra(a); std::cout << "不使用引用包装器" << ...

2018-04-13 11:01:24 237

原创 C++11----Lambda表达式

C++11----lambda表达式Lambda 表达式是 C++11 中最重要的新特性之一,而 Lambda 表达式,实际上就是提供了一个类似匿名函数的特性,而匿名函数则是在需要一个函数,但是又不想费力去命名一个函数的情况下去使用的。这样的场景其实有很多很多,所以匿名函数几乎是现代编程语言的标配。Lambda 表达式的基本语法如下:[捕获列表](参数列表) mutable(可选) 异常属性 -&...

2018-04-12 22:58:10 60

原创 C++11----智能指针

C++11智能指针和引用计数你有什么办法解决资源泄露(内存泄露)?引入智能指针:原理: 首先它是一个指针,对裸指针(带*号的指针)用面向对象的类进行封装,所以能指向内存资源;然后它区别于一般的指针,它是智能的,而所谓的智能是指它:1.能够自动的帮你释放内存2.还能够知道什么时候释放内存才是安全的。C++中智能指针的实现主要依赖于两个技术概念:RAII技术1. 析构函数:对象被销毁时会被调用的一个函...

2018-04-12 11:56:13 72

原创 C++11---- std::condition_variable

<condition_variable>是C++标准程序库中的一个头文件,定义了C++11标准中的一些用于并发编程时表示条件变量的类与方法等,与pthread的实现语义完全一致。使用条件变量做并发控制时,某一时刻阻塞在一个条件变量上的各个线程应该在调用wait操作时指明同一个互斥锁,此时该条件变量与该互斥锁绑定;否则程序的行为未定义。条件变量必须与互斥锁配合使用,其理由是程序需要判定某...

2018-04-11 22:43:24 119

原创 linux命令之ldd命令用于打印程序或者库文件所依赖的共享库列表

ldd命令编程开发ldd命令用于打印程序或者库文件所依赖的共享库列表。语法ldd(选项)(参数)选项--version:打印指令版本号;-v:详细信息模式,打印所有相关信息;-u:打印未使用的直接依赖;-d:执行重定位和报告任何丢失的对象;-r:执行数据对象和函数的重定位,并且报告任何丢失的对象和函数;--help:显示帮助信息。参数文件:指定可执行程序或者文库。其他介绍首先ldd不是一...

2018-04-11 21:40:19 234

原创 C++11----lock_guard和unique_lock

我们在操作系统的相关知识中已经了解过了有关并发技术的基本知识,mutex 就是其中的核心之一。C++11引入了 mutex 相关的类,其所有相关的函数都放在 <mutex> 头文件中。std::mutex 是 C++11 中最基本的 mutex 类,通过实例化 std::mutex 可以创建互斥量,而通过其成员函数 lock() 可以仅此能上锁,unlock() 可以进行解锁。但是在在...

2018-04-11 20:53:14 430

原创 简述C++中RAII

1.什么是RAII 技术?(参见百度百科相关条目)      RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。   RAII 的一般做法是这样的:在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。借此,我们实际上...

2018-04-11 20:46:46 63

原创 C++11----多线程之std::future, std::promise

std::future,是一个类模板,它存储着一个未来的值。那问题来了,未来的值是什么鬼?实际上一个std::future对象里存储着一个在未来会被赋值的变量,这个变量可以通过std::future提供的成员函数std::future::get()来得到。如果在这个变量被赋值之前就有别的线程试图通过std::future::get()获取这个变量,那么这个线程将会被阻塞到这个变量可以获取为止。st...

2018-04-11 20:35:16 156

原创 线程安全----互斥锁和原子变量的效率比较

多线程访问共享资源的时候需要对线程进行互斥同步操作,在C++中可以选择原子变量和C++11中的mutex互斥量对象来进行互斥操作,该文章简单对两种同步操作进行一个效率的比较。工具:VS2017环境:WINDOW7  8核CPU首先选择mutex代码如下:#include <iostream>#include <thread>#include<mutex>u...

2018-04-11 17:47:54 1873 1

原创 C++11----语言级线程库<thread>

std::thread 用于创建一个执行的线程实例,所以它是一切并发编程的基础,使用时需要包含头文件#include&amp;lt;thread&amp;gt;,它提供了很多基本的线程操作,例如get_id()来获取所创建线程的线程 ID,例如使用 join() 通知主线程等待其他线程退出,detach脱离主线程。例如:#include &amp;lt;iostream&amp;gt;#include &amp;lt;thread&amp;g...

2018-04-11 17:24:36 115

原创 linux命令之nm显示二进制目标文件的符号表

nm命令编程开发nm命令被用于显示二进制目标文件的符号表。语法nm(选项)(参数)选项-A:每个符号前显示文件名;-D:显示动态符号;-g:仅显示外部符号;-r:反序显示符号表。参数目标文件:二进制目标文件,通常是库文件和可执行文件。...

2018-03-29 15:16:15 1198

原创 GDB调试多线程、多进程

用GDB调试多进程程序如果一个进程通过fork系统调用创建了子进程,gdb会继续调试原来的进程,子进程则正常运行。那么该如何调试子进程呢?单独调试子进程:  子进程从本质上说也是一个进程,因此我们可以用通用的gdb调试方法来调试他。   举例来说如果要调试一个服务器中的某一个子进程,我们可以先运行服务器,然后找到目标子进程的PID,再将其附加(attach)到gdb调试器上,具体操作为:$ps -...

2018-03-29 15:11:08 149

原创 Linux下如何检测内存泄漏

Linux检测程序内存泄漏1.安装valgrind:  这是一款开源的程序内存检测工具,mtrace为内存分配函数(malloc, realloc, memalign,free)安装hook函数。这些hook函数记录内存的申请和释放的trace信息。Valgrind详解:Valgrind包括以下一些工具:1.Memcheck:这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够给发现...

2018-03-28 16:16:07 3493

转载 Linux 如何查看一个进程的堆栈

有两种方法:第一种:$pstack   进程ID 或者  $gstack   进程ID第二种:先执行程序,然后 $gdb attach进程ID,再执行$thread    apply all bt 第三种:strace -f -p pid  该方法和pstack类似第四中:gcore pid ,输出core文件,gdb cmd corefile两种方法都可以列出进程所有的线程的当前的调用栈。不过,...

2018-03-26 19:03:59 281

原创 面试题:strcpy考虑内存重叠

面试时遇到些strcpy()函数,本来挺简单的,但是面试官的一番描述让我有些不知道怎么下手我当时觉得考虑内存重叠问题就可以了,但是他说的不是我理解的那样,然后就一直卡在那了,不过面试官很有耐心,我自己都开始嫌弃自己的理解能力了。不过面试官还是耐心的给我解释具体的情况。。唉,很可惜,还是自己学得不够,要深刻反思。接下来实现考虑内存重叠的strcpy的函数注意事项:1. 判断输入参数的合法性。2. 要...

2018-03-20 12:14:19 1116

原创 vector扩容面试题总结

vector底层数据结构是一个动态数组。       默认构造的方式是0, 之后插入按照1 2  4  8  16 二倍扩容。注(GCC是二倍扩容,VS13是1.5倍扩容。原因可以考虑内存碎片和伙伴系统,内存的浪费)。扩容后是一片新的内存,需要把旧内存空间中的所有元素都拷贝进新内存空间中去,之后再在新内存空间中的原数据的后面继续进行插入构造新元素,并且同时释放旧内存空间,并且,由于vector 空...

2018-03-12 10:59:06 2701

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