自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (5)
  • 收藏
  • 关注

原创 服务端接口计算qps,latency

https://github.com/chenshuo/muduo/blob/master/examples/sudoku/stat.h// This is not a standalone headerclass SudokuStat : muduo::noncopyable{ public: SudokuStat(const ThreadPool& pool...

2019-08-31 22:14:17 1316

原创 Sudoku

一、数独求解服务简介为了服务器可以乱序返回,方便服务器并发处理。服务器可以用线程池,不用算完再做排序了。每一个请求都带有一个id压测数据在recipes/sudok/test1做成库还是服务:(1)服务是跨进程边界,带来一些格外开销,跨机器(2)服务可以跨语言,只要网络协议明确都能实现客户协议,不需要提供多个版本语言的sudoku求解(3)各个团队自己维护,无依赖...

2019-08-31 16:07:11 915

原创 2.两数相加

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution { public: L...

2019-08-30 21:13:55 75

原创 进程和线程

1.Linux能同时启动多少个线程?对于32-bit Linux,一个进程的地址空间是4G,基于用户态能访问3G左右,而一个线程的默认栈(stack)大小是10M,心算可知,一个进程最多能同时启动300个线程左右。查看linux是多少bit的操作系统?1.uname -a 2.getconf LONG_BIT查看线程默认栈大小? ulimit -s2.多线程能提高并发度么?(1...

2019-08-29 12:28:05 118

原创 347.出现频次最多的top k个数

class Compare {public: Compare(int key, int frequest) { _key = key; _frequest = frequest; } int _key; int _frequest;};bool operator < (const Compare& a, co...

2019-08-28 18:12:54 230

原创 快速排序代码实现

#include <iostream>#include <vector>using namespace std;int partition(vector<int>* arr, int low, int high) { int small = low-1; for (; low < high; ++low) { i...

2019-08-28 13:48:07 157

原创 信号(六)

一、sigqueue函数(1)功能:新的发送信号系统调用,主要是针对实时信号提出的支持信号带有参数,与函数sigaction()配合使用。(2)原型:int sigqueue(pid_t pid, int sig, const union sigval value);(3)参数:sigqueue的第一个参数是指定接收信号的进程id,第二个参数确定即将发送的信号,第三个参数是一个联合数...

2019-08-27 17:03:08 522

原创 信号(五)

一、sigaction(1)包含头文件<signal.h>(2)功能:sigaction函数用于改变进程接收到特定信号后的行为。原型:int sigaction(int signum,const struct sigaction *act,const struct sigaction *old);参数:该函数的第一个参数为信号的值,可以为除SIGKILL及SIGS...

2019-08-27 11:49:34 117

原创 信号(四)

一、信号在内核中的表示执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending)。进程可以选择阻塞(Block)某个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达的动作。注意,阻塞和忽略是不同的,只要信号被阻塞就不会递达,而忽略是在递达之后可选的一种处理动作。信号在内核中的表示可以看作是这样的: bl...

2019-08-27 00:00:13 159

原创 信号(三)

一、更多信号发送函数(1)alarm SIGALRM(2)setitimer SIGALRM SIGVTALRM SIGPROF(3)abort SIGABRT间接递归 handler->SIGALRM->handlerkill -ALRM `ps aux | grep alarm | grep -v grep | awk '{ print $2}'`#inc...

2019-08-26 23:02:12 112

原创 平衡二叉树

一、概述 对于一棵二分搜索树,如果我们的数据是顺序添加到二分搜索树中,它就会退化成一个链表。我们如何解决这个问题呢,我们需要在现有的二分搜索树的基础上添加一些机制,使得我们二分搜索树能维持平衡二叉树这样的一个性质,而AVL就是一种最为经典的平衡二叉树。什么样的树才是平衡二叉树呢?满二叉数:除了叶子节点,其余节点都有左右子树,所以是一棵平衡二叉树而最大堆中所说的完全二叉...

2019-08-25 21:56:41 95

原创 迭代器的设计原则和Iterator Traits的作用与设计

一、迭代器设计原则迭代器是容器与算法处理的桥梁category分类,类别difference_type两个迭代器之间的距离的类型,容器最大能放多少元素,超过differene_type会有问题。迭代器的设计原则需要5中type,5种type叫做迭代器iterator associated types关联2.为什么设计iterator_traits算法向迭代器提问,迭代器...

2019-08-25 21:12:39 269

原创 124. 二叉树中的最大路径和

https://leetcode-cn.com/problems/binary-tree-maximum-path-sum//** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * ...

2019-08-25 16:58:30 202 1

原创 c++标准库算法

一、c++标准库算法,是什么东西(1)算法需要知道当前处于什么容器,可以帮助算法找到当前最有效率的动作。算法问迭代器问题。(2)算法形式第二版本,Cmp是一个criteria准则,比如排大小,是一个functors(3)算法与容器没有关联,通过iterator管理,各自闭门造车、二、各种容器的iterator_categoryrandom是可以跳跃的,连续空间可以跳跃r...

2019-08-25 13:13:39 1042

原创 仿函数functors

一、仿函数仿函数一个class里面重载小括号(),function core operator。仿函数创建的对象是函数对象,是一个对象,像一个函数,function object。仿函数只为算法服务。map的实现中,<key,data>组成一个pair,获得key使用select1st函数二、仿函数只为算法服务三、仿函数functors的可适配(adap...

2019-08-25 13:00:48 146

原创 static使用

一、static定义三个complex对象,c1,c2,c3,三个对象中的非静态成员(non-static data members)分别有三份,其余的静态数据成员,非静态成员函数(通过this pointer区分不同的对象),静态成员成函数只有一份。什么时候要使用静态函数?静态函数没有this pointer,静态函数只能处理静态数据静态数据要在类外面初始化/定义(变量获得内存)...

2019-08-25 00:36:42 130

原创 单例设计模式共享数据分析、解决,call_once

一、设计模式大概谈“设计模式”:代码的一些写法,与常规的写法不太一样,程序灵活,维护起来很方便,但是别人接管、阅读代码很痛苦。用“设计模式”理念写出来的代码很晦涩。<< head first>>老外应付特别大的项目时候,把项目开发经验、模块划分经验,总结成设计模式。(现有开发需求,后有理论总结和整理)设计模式拿到中国来,不太一样,拿着一个程序(项目)往设计模...

2019-08-24 21:50:28 214

原创 gdb入门(上)

一、什么是gdb什么是gdb:gdb是GNU debugger的缩写,是编程调试工具。二、gdb功能加上-g选项方便我们gdb调试,如果不加-g选项不能将源文件代码显示出来(1)启动程序,可以按照用户自定义的要求随心所欲的运行程序。(2)可让被调试的程序在用户所指定的调试的断点处停住 (断点可以是条件表达式)。(3)当程序停住时,可以检查此时程序中所发生的事。(4)动态...

2019-08-24 14:07:19 596 1

原创 信号(二)

一、信号分类(1)可靠信号(2)不可靠信号(3)实时信号(4)非实时信号二、不可靠信号linux信号机制基本上是从unix系统中继承过来的。早期unix系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,它的主要问题是:(1)进程每次处理信号后,就将对信号的响应设置为默认动作。在某些情况下,将导致对信号的错误处理;因此,用户如果不希望这样的操作,那么就要在信号处...

2019-08-23 19:57:05 109

原创 105. 从前序与中序遍历序列构造二叉树

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */c...

2019-08-23 15:48:29 88

原创 信号(一)

一、中断(1)中断是系统对于异步事件的响应(中断出现以前,计算机对异步事件的处理是有限的,通常是通过查询来处理的。看书,烧水)(2)中断信号,中断源,现场信息,中断处理程序,中断向量表例子:闹钟:10分钟,相当于中断信号,中断源,保护现场(相当于保存看到那一页书),中断处理程序(关上煤气灶),恢复现场(从刚才保存的那一页继续看)中断源产生中断信号->cpu判断中断源是否屏...

2019-08-23 11:33:57 137

原创 TCP协议

一.TCP四次挥手A:B啊,我不想玩了。B:哦,你不想玩了啊,我知道了。这个时候,还只是A不想玩了,也即A不会再发送数据,但是B能不能在ACK的时候,直接关闭呢?当然不可以了,很有可能A是发完了最后的数据就准备不玩了,但是B还没做完自己的事情,还是可以发送数据的,所以称为半关闭的状态。这个时候A可以选择不再接收数据了,也可以选择最后再接收一段数据,等待B也主动关闭。B:A啊,好...

2019-08-22 18:09:39 277

原创 141. 环形链表

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution { ...

2019-08-22 11:35:01 80

原创 weak_ptr概述,weak_ptr常用操作、尺寸

一、weak_ptr概述:weak_ptr辅助shared_ptr进行工作weak“弱",反义词”强“强值得就是shared_ptr,弱指的就是weak_ptr;weak_ptr:也是类模板,也是个智能指针。这个智能指针指向一个由shared_ptr管理的对象,但是weak_ptr不控制指向对象的生存期。换句话来说,将weak_ptr绑定到shared_ptr上并不会改变share...

2019-08-21 16:18:31 618 2

原创 shared_ptr使用场景、陷阱、性能分析,使用建议

1.std::shared_ptr使用场景#include <iostream>#include <memory>using namespace std;shared_ptr<int> create0(int value) { return make_shared<int>(value); // 返回一个shared_p...

2019-08-20 20:35:56 9658

转载 迭代器失效

1.序列式容器迭代器失效1.1对于序列式容器:vector,queue等,序列式容器就是数组式容器,删除当前的iterator会使得后边所有元素的iterator都失效。这是因为其使用了连续分配的内存,阐述一个元素导致后面所有的元素都会向前移动一个位置,所以不能使用erase(iter++)的方式。但是erase方法可以返回下一个有效的iterator// 正确for (iter ...

2019-08-20 12:21:12 222

原创 STL源码剖析-map

1.容器rb_treeRed-Black tree(红黑树)是平衡二元搜寻树(balanced binary search tree)中常被使用的一种平衡二元搜寻树的特点:排列规则有利于search和insert,并保持适度平衡-无任何节点过深rb_tree提供遍历操作以及iterators按正常规则(++ite)遍历,便能获得排序状态(sorted)我们不应该使用rb_tree的...

2019-08-20 00:34:22 660 2

原创 STL源码剖析-vector

1.vector扩容 (1)每次扩容是原来capacity的2倍,申请内容,将原内容copy到新内存.这些操作会影响到程序运行的效率,所以reserve()操作(提前分配一定量的内存)来避免不必要的重新分配是很有必要的(2)每次扩容都有元素的大量拷贝工作,...

2019-08-19 23:45:46 188

原创 RTTI、dynamic_cast、typeid、虚函数表

一、RTTIRTTI(Run-Time Type Identification),通过运行时类型信息,程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。Human* phuman = new Man;Human &a = *phuman; // *phuman表示指针phuman所指向的对象RTTI我们可以把这个程序看成是一种系统提供给我们的一种能...

2019-08-18 14:35:58 393

原创 类型转换static_cast,dynamic_cast,const_cast,reinterpret_cast等

一、隐式类型转换系统自动进行,不需要程序开发人员介入。int m = 3 +45.6; //把小数部分截掉,也属于隐式类型转换的一种行为。doublen =3 +45.6;二、显示类型转换(强制类型转换)int k = 5 % 3.2; // 语法错int k = 5 %(int)3.2; // OK,C语言风格的强制类型转换int k = 5 % int(3.2);...

2019-08-17 13:31:53 501

原创 谈谈const

一、const member functions(const成员函数)例子:const String str("hello world"); str.print(); 如果当初设计String::print()时未指明const,那么上行便是经由const object调用non-const member function,会出错。此非吾人所...

2019-08-17 09:29:25 139

原创 动态规划(二)

一、integer break二、perfect squares思路:dp[n]表示以n为和的最少平方的和的个数(所求)。dp 数组所有下标已经为完全平方数的数(如1,4,9...)置为 1,加一层 j 遍历找到当前 i 下长度最小的组合。动态方程的意思是:对于每个 i ,比 i 小一个完全平方数的那些数中最小的个数+1就是所求,也就是 dp [ i ...

2019-08-15 19:54:05 126

原创 动态规划(一)

一.斐波纳挈数列1.1递归斐波纳挈递归解法时间复杂度O(2^n),测试方法可以计算10,20,40.看计算时间从图中可以看出获得我们的递归树,存在大量重复计算#include <iostream>using namespace std;int num = 0;int fib(int n) { ++num; if(n == 0)...

2019-08-15 15:23:18 150

转载 动态规划—最长公共子序列LCS及模板

一,问题描述给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。比如字符串1:BDCABA;字符串2:ABCBDAB。这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA二,算法求解这是一个动态规划的题目。对于可用动态规划求解的问题,一般有两个特征:①最优子结构;②重叠子问题动态规划:将原问题拆解成若干个子问题...

2019-08-15 11:13:43 344

转载 Nginx 学习书单整理

大家好,我是陶辉,之前在华为、阿里、腾讯、思科等公司工作过,现在是杭州智链达公司的联合创始人兼 CTO。我从 09 年开始接触 Nginx,至今已经有 10 年了,对 Nginx 有一些自己独特的见解,分享自己学习 Nginx 的经历与经验,及梳理重难点等等。以下是“Nginx 到底该怎么学?”的主题纲要。作为工程师的我们,为什么要学 Nginx?第一点:Nginx 对整个架构的帮助是...

2019-08-14 14:17:43 455

转载 nginx源码分析-内存池

Nginx的内存池实现得很精巧,代码也很简洁。总的来说,所有的内存池基本都一个宗旨:申请大块内存,避免“细水长流”。一、创建一个内存池nginx内存池主要有下面两个结构来维护,他们分别维护了内存池的头部和数据部。此处数据部就是供用户分配小块内存的地方。//该结构用来维护内存池的数据块,供用户分配之用。typedef struct { u_char ...

2019-08-14 14:02:52 174

原创 nginx热升级实现

热升级是什么?nginx在不停止服务时候,执行新的可执行文件生成进程,接收client请求nginx热升级流程 (1)将旧Nginx文件换成新Nginx文件(注意备份) ...

2019-08-10 21:55:27 758

原创 进程(七)

一.什么是守护进程(1)守护进程是在后台运行不受控端控制的进程,通常情况下守护进程在系统启动时自动运行(2)守护进程的名称通常以d结尾,比如sshd、xinetd、crond等二.创建守护进程步骤(1)调用fork(),创建新进程,它会是将来的守护进程(2)在父进程中调用exit,保证子进程不是进程组组长(3)调用setsid创建新的会话期(4)将当前目录改为根目录...

2019-08-10 16:16:37 175

原创 进程(六)

一.SIGCHLD(1)当子进程退出的时候,内核会向父进程发送SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止)(2)子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程,它只保留最小的一些内核数据结构,以便父进程查询子进程的退出状态。(3)父进程查询子进程的退出状态可以用wait/waitpid函数二.wait(1)头文件<sy...

2019-08-10 14:46:14 783

原创 进程(五)

1.exec替换进程映象(1)在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。(2)当我们创建了一个进程之后,通常将子进程替换成新的进程映象,这可以用exec系列的函数来进行。当然,exec系列的函数也可以将当前进程替换掉。(3)执行ls -l命令,并且不会打印Exiting main ...#in...

2019-08-08 19:36:12 175

1.6 Golang在阿里巴巴调度系统Sigma中的实践.pdf

1.6 Golang在阿里巴巴调度系统Sigma中的实践。

2020-04-19

栈和队列.rar

栈队列,两个栈实现队列,两个队列实现栈,栈和队列的一些简单应用

2016-01-14

深度优先搜索

哈理工几道深度优先搜索例题,泉水下山

2015-08-15

排序树 变成双向链表

排序树 变成双向链表排序树

2014-09-14

排序树 双向 循环链表

排序树 双向 循环链表

2014-08-31

空空如也

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

TA关注的人

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