自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

RaKiRaKiRa的博客

Shoot Low, Aim High!

  • 博客(87)
  • 收藏
  • 关注

原创 复制状态机(State Machine Replication)

State Machine Replication这篇博文主要是对wiki上的复制状态机的翻译,也是为了让自己更熟悉相关概念。 复制状态机在分布式领域是一个常用且重要的技术,通过复制服务副本,并和副本一起来协调客户端的交互,来实现容错服务。这个方法同样提供了一个框架,来理解和设计复制管理协议。当然,一切的技术的源头都是业务,针对业务需求来实现相关技术是最高效、最聪明的方法。因此学习技术之前,多...

2019-10-22 19:57:48 692

原创 malloc的底层实现(ptmalloc)

前言本文主要介绍了ptmalloc对于内存分配的管理。结合网上的一些文章和个人的理解,对ptmalloc的实现原理做一些总结。内存布局介绍ptmalloc之前,我们先了解一下内存布局,以x86的32位系统为例:从上图可以看到,栈至顶向下扩展,堆至底向上扩展, mmap 映射区域至顶向下扩展。 mmap 映射区域和堆相对扩展,直至耗尽虚拟地址空间中的剩余区域,这种结构便于 C 运行时库使用...

2019-09-26 23:11:11 765 1

原创 Reactor --《面向模式的软件架构》

作用Reactor是一种事件处理模式,事件驱动应用程序使用Reactor架构来同步地等待一个或多个指示事件的发生,然后分离并分派一个或多个服务请求给事件处理程序中合适的钩子(回调)方法。通过这种方式将事件分离分派机制与服务程序中与指示相关的具体处理机制分开。结构Reactor由5个部分组成。句柄:指用于识别网络连接或文件打开的事件源,由操作系统提供,在linux中一般指文件描述符。同...

2019-09-17 19:10:10 406

原创 Linux内核:内存管理(2)——内存管理

内核把物理页(4kb)作为内存管理的基本单位。每个页放置在页框中,内核记录页框的状态信息保存在page页描述符中,page放置在mem_map数组中。每个page长度为32字节,故mem_map占RAM不到1%(32/4k = 1/128).由于有些页位于内存中特定的物理地址上,不能进行一些特定的任务(DMA只能对前16MB寻址,32位计算机只能访问部分内存等)。内核将特定性质的页划分成区(zo...

2019-07-24 19:42:51 318

原创 Linux内核:内存管理(1)——内存寻址

内存控制单元(MMU)由分段单元和分页单元组成。分段单元:将逻辑地址转换成一个线性(虚拟)地址,给一个进程分配不同的线性地址空间。分页单元:将线性(虚拟)地址转化成一个物理地址,把同一线性地址空间映射到不同的物理空间。其中,逻辑地址由一个段和偏移量组成;线性地址是一个uint32_t,可以表达4G的地址;物理地址用于内存寻址。1分段单元:逻辑地址—>线性地址给一个进程分配不同...

2019-07-22 17:29:22 397

原创 阻塞connect与accept返回时机与syn攻击

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190722132458582.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JhS2lSYUtpUmE=,size_16,color_FFFFFF,t...

2019-07-22 13:25:10 311

转载 Linux errno详解

1. 错误码 / errnoLinux中系统调用的错误都存储于 errno中,errno由操作系统维护,存储就近发生的错误,即下一次的错误码会覆盖掉上一次的错误。PS: 只有当系统调用或者调用lib函数时出错,才会置位errno!查看系统中所有的errno所代表的含义,可以采用如下的代码:/* Function: obtain the errno string* char *stre...

2019-07-14 21:49:20 459

原创 C++ 简易线程池实现

//threadpool.h#ifndef THREADPOOL_H#define THREADPOOL_H#include <pthread.h>#include <deque>#include <vector>class ThreadPool{ typedef void (*Task)();public: ThreadPool(int...

2019-07-10 14:17:40 166

转载 十七道海量数据处理面试题与Bit-map详解

十七道海量数据处理面试题与Bit-map详解 第一部分、十五道海量数据处理面试题1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? &nbsp...

2019-07-09 21:12:22 160

原创 bind、function的使用

#include <iostream>#include <functional>using namespace std;class Temp {public: typedef function<void(int)> callback; void setcallback(callback cb) { cb_ = std::move(cb); ...

2019-07-09 21:09:00 122

原创 三种单例与线程安全单例模式详解

//懒汉式 1 class CSingleton { private: //构造 拷贝 赋值均是私有或关闭 CSingleton(); static pthread_t mutex_; public: CSingleton(const Singleton&)=delete; CSingleton...

2019-07-07 15:28:23 247

原创 智能指针的实现(构造,析构,赋值,移动,析构)与测试

智能指针代码:// 引用计数器类 用于存储指向同一对象的指针数template<typename T>class Counter{private: // 数据成员 T* ptr; // 对象指针 int cnt; // 引用计数器 // 友元类声明 template<typename T> friend class SmartPt...

2019-07-07 15:00:28 1370

原创 服务器开发学习 -- 异步双缓冲日志系统

源码链接:https://github.com/RaKiRaKiRa/Cyclone通过 git clone https://github.com/RaKiRaKiRa/Cyclone.git可直接下载,有详细的注释异步双缓冲日志系统 ,由AppendFile( base/FileUtil.h, base/FileUtil.cc ), LogFile ( base/LogFile.h, b...

2019-07-05 20:46:28 941

原创 要把博客拾起来了,颓废了好几个月

从零开始刷LeetCode,开始看书!

2019-02-28 16:44:05 201

原创 各种碎片知识点

负载均衡之加权轮询算法负载均衡的那些算法们

2018-11-30 13:52:31 378

原创 【深度探索C++对象模型】(3)DATA语意学

假设有代码class X{ };class Y : public virtual X { };class Z : public virtual X { };class A : public Y, public Z { };sizeof(X()); //1sizeof(Y()); //8或4sizeof(Z()); //8或4sizeof(A()); //12或8X、Y、Z、A内...

2018-11-26 21:51:12 155

转载 谈一谈网络编程学习经验(06-08更新)

谈一谈网络编程学习经验 陈硕 giantchen@gmail.com blog.csdn.net/Solstice 2011-06-06 PDF 版下载:https://github.com/downloads/chenshuo/documents/LearningNetworkProgramming.pdf本文谈一谈我在学习网络编程方面的一些个人经验...

2018-11-25 21:30:11 291

原创 【深度探索C++对象模型】(2.5)bitwise和memberwise

在看《深入探索C++对象模型》这本书的时候,我看见了bitwise senimatics和memberwise senimatics,看的时候还不清楚这两个是什么意思,书本上直接使用的是英文,所以我的直译就是位逐次语意和成员逐次语意,经过一番百度后才发现原来就是简单的浅拷贝和深拷贝的区别。有四种情况表示class不展示出bitwise copy semantics:当class中含有一个声明...

2018-11-25 15:22:01 347

原创 markdown中首行缩进、输出空格的方法

1英文字符大小的空白&amp;ensp;或&amp;#8194;中文字符大小的空白&amp;emsp;或&amp;#8195;不断行的空白格&amp;nbsp;或&amp;#160;2把输入法由半角改为全角。 两次空格之后就能够有两个汉字的缩进。但需要来回调整,很麻烦。。。。...

2018-11-24 21:09:01 610

原创 APUE知识点记录 【三】标准I/O库

通过文件I/O读写文件时,每次操作都会执行相关系统调用。这样处理的好处是直接读写实际文件,坏处是频繁的系统调用会增加系统开销,标准I/O可以看成是在文件I/O的基础上封装了缓冲机制。先读写缓冲区,必要时再访问实际文件,从而减少了系统调用的次数。int fflush(FILE *fp);//如若fp是NULL,则次函数将导致所有输出流被冲洗。1. 流与FILE对象标准I/O库的所有操作都是围...

2018-11-23 20:50:42 242

原创 【深度探索C++对象模型】(2)构造函数语意学

1.Default Constructor的构造操作默认构造函数是在编译器需要的时候构建出来的,被合成的默认构造函数只执行编译器所需的动作。被合成的默认构造函数中只有base class subobjects以及member class objects会被初始化,而其他nonstatic data member(如整数、指针、数组)都不会初始化,因为他们是满足程序需要的。有四种情况会使得编译器...

2018-11-21 20:44:42 222

原创 【深度探索C++对象模型】(1)关于对象

哎 再开新坑,希望19年能把开的这几个坑都填上。class : 类class object : 类对象1.1 C++对象模型简单来说,C++对象模型的实例的组成包括下面几个部分:Nonstatic data members与**virtual pointer(vptr)**储存在class object内Static data members、Static functions mem...

2018-11-19 13:42:54 184

原创 125. Valid Palindrome

题意:给一个字符串,只判断数字和字母,且不区分大小写,其他忽略,判断是否回文。思路:ps:这是我们今年复试上机题,我写的程序这里能跑过,复试的时候没给我满分。。。残念。bool isPalindrome(string s) { if (s.empty()) return true; string a = ""; for_each(s.begin(), s.end(), [&amp...

2018-11-06 20:46:20 126

原创 124. Binary Tree Maximum Path Sum

题意:给一颗二叉树,寻找一个路径,满足路径上的节点值的和最大。这个路径可以是任意起点和任意终点。思路:后序递归,在每个节点处将其左右节点作为路径结尾且和大于0的左右子路径连接,判断新路径的和是否是最大。然后返回以该节点为结尾的最大路径。int fuc(TreeNode* root, int &amp;res) { if (!root) return 0; int l = max(f...

2018-11-06 20:32:01 108

原创 122 .Best Time to Buy and Sell Stock II

题意:有一组数组,第i个数表示第i天的股票价格,可以买卖任意次,问最多可以赚多少钱。思路:避免跌的情况即可。int maxProfit(vector&lt;int&gt;&amp; prices) { int sz = prices.size(), res = 0; for (int i = 1; i &lt; sz; ++i) { if (prices[i] &gt; pric...

2018-11-05 18:17:54 159

原创 121. Best Time to Buy and Sell Stock

题意:给一组数组,第i个数表示第i天某物品的价格,问若在某一天买入某一天卖出,则最多可以赚多少钱。思路:easy题。。。在第i天卖出最多可以赚当天价格减去之前价格的最小值,从左向右遍历数组,用一个数记录最小值,一个数记录最多可以赚的钱。int maxProfit(vector&lt;int&gt;&amp; prices) { if (prices.empty()) return 0...

2018-11-05 17:54:56 134

原创 118. Pascal's Triangle

题意:杨辉三角形,没啥好说的思路:以前数据结构书上讲过一种用队列求杨辉三角形的方法,我给忘了。。。用了类似dp的方法,应该是比用队列要好些的。vector&lt;vector&lt;int&gt;&gt; generate(int numRows) { if (!numRows) return vector&lt;vector&lt;int&gt;&gt;(); list&lt;...

2018-11-05 17:39:55 109

原创 116. Populating Next Right Pointers in Each Node

题意:将一颗二叉树的节点使用每个节点中的next指针将每行从左向右连接起来。思路:层次遍历每次加入链表同时加入对应的行号,若前一节点与当前节点行号不同则前一节点指向NULL。struct Node { TreeLinkNode *TLN; int L; Node(TreeLinkNode *T, int i) :TLN(T), L(i) {};};void connect(Tr...

2018-11-02 19:07:25 137

原创 108. Convert Sorted Array to Binary Search Tree

题意:生成二叉平衡树。思路:递归struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};TreeNode* sortedArrayToBST(vector&lt;int&gt;&amp; nums, int ...

2018-11-02 17:22:15 135

原创 104. Maximum Depth of Binary Tree

题意:求树的最大深度代码:void dfs(TreeNode* p, int &amp;d,int i) { if (i &gt; d) d = i; if (p-&gt;left) dfs(p-&gt;left, d, i + 1); if (p-&gt;right) dfs(p-&gt;right, d, i + 1);}int maxDepth(TreeNode...

2018-10-29 20:15:57 119

原创 103. Binary Tree Zigzag Level Order Traversal

题意:层次遍历树,一行从左向右,一行从右向左。思路:和之前普通层次遍历相仿,但将每层存于vector改为list,因为list倒序遍历较快。用一个flag控制每行的方向。struct Node { TreeNode *TN; int L; Node(TreeNode *t, int i) :TN(t), L(i) {};};vector&lt;vector&lt;int&gt...

2018-10-29 19:23:20 106

原创 102. Binary Tree Level Order Traversal

题意:树的层次遍历,基础数据结构题。代码struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};struct Node { TreeNode *TN; int L; Node(TreeNode *t, ...

2018-10-29 19:00:25 89

原创 101 Symmetric Tree

题意:判断一颗二叉树是否对称代码:bool comp(TreeNode* l, TreeNode* r) { if (l == NULL&amp;&amp;r == NULL) return true; if (l == NULL||r == NULL) return false; if (l-&gt;val != r-&gt;val) return false; ret...

2018-10-26 21:17:07 168

原创 98. Validate Binary Search Tree

题意:判断一个数是否是二叉搜索树。思路:二叉排序树的任意一个节点的左节点比其小,右节点比其大,那么中序遍历会得到一个有序数组。利用非递归遍历,每次的数都应该比上次的大,否则就不是BST。bool isValidBST(TreeNode* root) { if (!root) return true; if (!(root-&gt;right || root-&gt;left)) ...

2018-10-26 19:56:13 110

原创 94. Binary Tree Inorder Traversal(+树的遍历非递归)

题意:非递归中序遍历。树的先序遍历vector&amp;lt;int&amp;gt; preorderTraversal(TreeNode* root) { stack&amp;lt;TreeNode*&amp;gt; s; vector&amp;lt;int&amp;gt; res; TreeNode *p = root; while (p || !s.empty()) { while (p) { s.push(p);...

2018-10-25 21:12:05 145

原创 91. Decode Ways

题意:给一个由数字组成的非空字符串,1对应A,2对应B,… ,26对应Z,问这个字符串可以转换成多少种编码。思路:动态规划与跳台阶题的思想类似,但是对于跳一阶和跳两阶加了条件。dp[i]表示s[0]~s[i-1]的可编码个数。若s[i-1]属于1~9,dp[i]+=dp[i-1]所s[i-2] s[i-1]属于1~26,dp[i]+=dp[i-2]int numDecodings(s...

2018-10-25 20:40:29 103

原创 88. Merge Sorted Array

题意:给两个已排序数组,合成一个已排序数组。简单题 没什么好说的代码:void merge(vector&lt;int&gt;&amp; nums1, int m, vector&lt;int&gt;&amp; nums2, int n) { nums1.resize(m + n); int i = m - 1, j = n - 1, k = m + n - 1; while (k)...

2018-10-24 12:57:45 107

原创 55. Largest Rectangle in Histogram

题意给一个包含n个非负数的数组,表示n个宽度为1的直方柱,求可以用长方形圈出来的最大面积。思路1:以上图为例,我们用一个res表示目前得到的最大面积,首先第一次扫描数组,获得最矮直方体1,res=1*6。然后若获得比这个面积大的面积,肯定是要剔除该高度为1的直方柱。故求1左面和1右面,递归。int func(vector&lt;int&gt;&amp; heights, int lef...

2018-10-24 10:05:32 117

原创 (未完成)STL学习笔记(3)序列式容器 (Sequence Containers)

1. vectorvector与数组array十分相似,但array是静态空间,而vector是动态空间,可以通过内部机制自行扩充空间,具有很好的灵活性。其实现的关键在于对大小的控制和重新配置时的数据移动效率。vector的型别定义如下:template &amp;amp;amp;amp;amp;lt;class T, class Alloc = alloc&amp;amp;amp;amp;amp;gt;class vector{// ...public: ...

2018-10-22 19:06:12 193

原创 79. Word Search

题意:在一个二维数组中是否可以匹配到一个字符串,这个字符串在二维数组中可以拐弯,但必须连续。思路:深搜+回溯遍历数组,若数组中元素等于字符串第一个字符进入深搜。深搜中有一个参数k,表示已经匹配的字符数,若k==word.size(),则表示字符串完全匹配成功。有一个二维数组参数flag,flag[i][j]表示i j位置是否已经被划入匹配范围,若flag[i][j]=0,则表示已匹配,后...

2018-10-21 22:23:58 101

空空如也

空空如也

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

TA关注的人

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