- 博客(53)
- 资源 (1)
- 收藏
- 关注
原创 剑指offer-剑指offer——栈的压入弹出顺序 (两种不错的的解法)
//剑指offer——栈的压入弹出顺序//输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。//假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,//序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。//(注意:这两个序列的长度是相等的)//方法一:使用一个hash表记录
2017-09-19 00:20:53
906
转载 读写锁的几种实现方式-互斥量,信号量,条件变量
对于某个临界资源的访问,读操作和写操作是要区别对待的。读操作可以多个线程同时进行,写操作必须互斥进行。读写锁:当已经被加了读锁时,其他的读模式锁请求仍然可以访问,但是写模式锁不能访问;当写模式锁加锁时,其他的请求都不能访问。本文尝试用四种方法来完成读写锁的操作,都包含有写模式和读模式各自所要做的事情。1、直接使用POSIX提供的读写锁2、用条件变量实现读写锁3、用互斥量
2017-09-18 00:56:28
4108
原创 网易互娱游戏研发工程师笔试
//第二题 流量统计问题,二分查找区间#include #include #include #include using namespace std;int main(){ int n,m; cin >> n; vector time(n); vector flow(n); string a, b, c, d; int k; for (int i = 0; i<n; i
2017-09-17 08:53:52
4598
原创 01背包问题——经典DP问题,优化与未优化
#include #include #include using namespace std;int main(){ int n,m; vector w(n),v(n); for (int i=0;i<n;i++) cin>>w[i]>>v[i]; //v为容量数组,W为价值数组,m为总容量 //优化的01背包问题,使用一维数组
2017-09-12 10:41:26
1173
原创 有序数组转成平衡二叉树,平衡二叉树转成双端链表
#include #include using namespace std;//二叉树的树结构struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(char t) :val(t), left(0), right(0){};};//有序数组转成平衡二叉树//也是一个递归的过程,每次都把数组分
2017-09-11 16:46:39
882
原创 剑指offer-16.反转链表
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNode* pHead) { //注意初始判断是不是nul
2017-09-11 16:01:51
310
原创 Leetcode——146. LRU Cache 一个优雅的LRU的C++实现
//使用hash_map和list实现的LRU。 实现了get和put操作//get 得到对用的value,并且前移。//put 如果不存在,加入,此时可能会挤掉尾元素。存在:移动到队列首。//改进点在于如果发生缺页需要重新加入,这时候可以添加一个//hash_map存储key-value,并改写一下put函数即可。class LRUCache {public: LRUCache
2017-09-11 10:51:19
7002
2
转载 NGINX原理 之 SLAB分配机制
1 引言 众所周知,操作系统使用伙伴系统管理内存,不仅会造成大量的内存碎片,同时处理效率也较低下。SLAB是一种内存管理机制,其拥有较高的处理效率,同时也有效的避免内存碎片的产生,其核心思想是预分配。其按照SIZE对内存进行分类管理的,当申请一块大小为SIZE的内存时,分配器就从SIZE集合中分配一个内存块(BLOCK)出去,当释放一个大小为SIZE的内存时,则将该内存块放回到原有集合,而不
2017-09-08 10:40:15
508
原创 Leetcode——208. Implement Trie (Prefix Tree) C++语言实现Tire
//slower than recursive versionclass Trie {private: static constexpr int R = 26; struct Node { bool is_word = false; Node *next = nullptr; };public: //~Trie(); How t
2017-09-06 16:25:10
565
原创 leetocd---207. Course Schedule
There are a total of n courses you have to take, labeled from 0 to n - 1.Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as
2017-09-06 15:38:50
247
原创 Leetcode-236. Lowest Common Ancestor of a Binary Tree 最小公共祖先
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two node
2017-09-05 16:44:49
301
原创 二叉树的前序遍历非递归形式
//二叉树的遍历,所谓的前中后,其实就是根节点相对于左右节点的//访问时间,前就是根左右,中就是左根右,后就是左右根//递归形式的前序遍历void PreSearch(TreeNode* head){ if (head){ cout val; PreSearch(head->left); PreSearch(head->right); }}//非递归形式的前序遍历,用v
2017-09-05 10:11:07
510
原创 快速排序的非递归算法实现
//快速排序算法的非递归实现,这种方法应该说是尾递归//的非递归快速排序算法,它只把>1的右区间放入栈中,//减少了出栈入栈的次数。templatevoid NoQuickSort(vector& a, int s, int t){ vector> p(a.size()); p[0] = { s, t }; int k = 1, i = 0, j = 0; while (k ||
2017-09-04 20:18:00
795
原创 两个栈实现队列,两个队列实现栈
#include #include #include using namespace std;//使用两个栈实现队列,实现了push,pop,front操作//其中栈s2是辅助栈,push直接在s1中插入//pop从s2中出栈,如果s2是空的,将s1倒进s2,然后再出栈,这样减少了倒栈次数,比较高效。//front就是s2的top,跟pop类似。template class My
2017-08-30 17:16:37
263
转载 TCMalloc : Thread-Caching Malloc高性能的内存分配器(C/C++) 英文原版
TCMalloc : Thread-Caching MallocSanjay Ghemawat, Paul Menage MotivationTCMalloc is faster than the glibc 2.3 malloc (available as a separate library called ptmalloc2) and other mallocs that
2017-08-30 10:56:41
426
原创 Kolakoski序列——搜狐笔试
//Kolakoski序列是一个仅由1和2组成的无限数列,是一种通过“自描述”来定义的数列。//他的前几项为1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,2,//如果相同数字是一组,则每一组的个数为1,2,2,1,1,2,1,2,2,1,2,2,1,1//a(n)等于第n组数的长度,因此是自描述的。目前没有递推公式,只能用自描述方式给出//这道题是Kola
2017-08-30 09:28:31
622
原创 C++编程输入数组的处理——不给数组长度,直接给一行数组
正常情况下,我们要从键盘读一个数组,一般会先告诉你一个数组大小size,然后可以创建相应的数组a[size](注:C++11允许变量作为数组长度)或者建立vector(size). 然后就可以用一个size次的循环正好把size个数组元素存进去。但是如果不给数组长度怎么办?直接扔给你一个行数组元素,怎么把他们存到对应整数数组中呢?intmain(){ i
2017-08-28 10:27:56
25680
转载 RIP协议&&OSPF协议详解——基于TCP/IP详解卷书籍
动态选路、RIP协议&&OSPF协议详解概念当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路。路由器之间必须采用选路协议进行通信,这样的选路协议有很多种。路由器上有一个进程称为路由守护程序( routing daemon),它运行选路协议,并与其相邻的一些路由器进行通信。路由守护程序根据它从相邻路由器接收到的信息,更新内核中的路由表路
2017-08-18 20:57:31
2730
转载 一个Linux下C线程池的实现
1.线程池基本原理 在传统服务器结构中, 常是 有一个总的 监听线程监听有没有新的用户连接服务器, 每当有一个新的 用户进入, 服务器就开启一个新的线程用户处理这 个用户的数据包。这个线程只服务于这个用户 , 当 用户与服务器端关闭连接以后, 服务器端销毁这个线程。然而频繁地开辟与销毁线程极大地占用了系统的资源。而且在大量用户的情况下, 系统为了开辟和销毁线程将浪费大量的时间和资源。线程池提
2017-08-18 20:51:44
231
转载 linux进程状态浅析
众所周知,现在的分时操作系统能够在一个CPU上运行多个程序,让这些程序表面上看起来是在同时运行的。linux就是这样的一个操作系统。在linux系统中,每个被运行的程序实例对应一个或多个进程。linux内核需要对这些进程进行管理,以使它们在系统中“同时”运行。linux内核对进程的这种管理分两个方面:进程状态管理,和进程调度。本文主要介绍进程状态管理,进程调度见《linux进程调度浅析》。
2017-08-18 17:23:40
253
转载 Tcp服务端一直sleep,客户端不断发送数据产生的问题
问题:“一个tcp服务端和一个tcp客户端,客户端和服务端建立连接后,服务端一直sleep,然后客户端一直发送数据会是什么现象”。回答这个问题前我们先想一想tcp的特征和tcp发送数据的大体过程:首先,tcp是有链接的可靠传输协议,所谓可靠也就是说保证客户端发送的数据服务端都能够收到,并且是按序收到。那么对于上面的问题就不可能存在数据的丢弃。那么客户端一直发送数据越来越多怎
2017-08-18 10:37:27
689
转载 线程的概念和多线程模型
线程的基本概念引入进程的目的,是为了使多道程序并发执行,以提高资源利用率和系统吞吐量;而引入线程,则是为了减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能。线程最直接的理解就是“轻量级进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资
2017-08-17 23:26:12
260
转载 MMU和TLB
MMU和TLB记得那家芯片公司给我电话面试的时候,别的都还好,可是他问我什么是MMU,我只能干瞪眼。今天在看《Linux内核源码(陈莉君)》的时候,无意中看到第二章内存地址这一节,学习如下:在任何一台计算机上,都存在一个程序能产生的内存地址的集合。当程序执行这样一条指令时:MOVE REG,ADDR它把地址为ADDR(假设为10000)的内存单元的内容复制到REG中,地址A
2017-08-16 11:31:24
492
原创 Linux下如何用/proc命令查找进程状态信息——当前目录,内存占用,描述符等
参加阿里的面试,问到一个问题,如何在Linux下使用命令行查询进程的状态信息,比如进程的当前目录,进程的内存占用等情况。当时的第一反应是使用top命令能够得到所有的进程信息。但是面试官好像不是很满意,因此我回去之后查阅了相关的资料,发现可能他想问的/proc目录,我这里整理一下:我自己写了一个简单的程序,就是一个while死循环。如下所示:#include #include int
2017-08-15 16:51:05
32829
2
原创 Libevent源码剖析——事件event
Libevent 是基于事件驱动(event-driven)的,从名字也可以看到 event 是整个库的核心。event 就是 Reactor 框架中的事件处理程序组件;它提供了函数接口,供 Reactor 在事件发生时调用,以执行相应的事件处理,通常它会绑定一个有效的句柄。首先给出 event 结构体的声明,它位于 event.h 文件中,我直接给出带注释的代码://一个event管理三种事件,
2017-08-02 23:57:11
278
原创 Libevent源码剖析基础篇——双向链表队列TAILQ
工作的主要内容是tcp/ip,平台是FreeBSD,而且在内核态开发,所以很多情况下会涉及内核的一些数据结构和宏,比如说mbuf和TAILQ等。 TAILQ是FreeBSD/linux内核对双向队列操作的一种抽象,抽象程度不亚于C++,能实现操作队列需要的各种操作:插入元素,删除元素,遍历队列等。这个队列的优点是插入元素很快。 这里先回顾一下队列的特点(来自维基百科 http://zh.wik
2017-08-02 21:25:19
3371
1
原创 Libevent源码剖析一——引子
引子:八月开始找工作的日子了,作为985高校二流计算机学院某渣硕,回顾下自己的硕士生活,基本都在写论文中度过了,由于各种原因不想再继续搞论文,一心决定找工作。硕士期间项目做得也不是很多,因此想找一些开源项目进行学习,提高自己的编程能力。Libevent是第一个开始看的开源项目,这里我参考了优快云大牛张亮的博客,http://blog.youkuaiyun.com/sparkliang/article/c
2017-08-02 17:28:28
246
原创 完美洗牌算法
题目有个长度为2n的数组{a1,a2,a3,…,an,b1,b2,b3,…,bn},希望排序后{a1,b1,a2,b2,….,an,bn},请考虑有无时间复杂度o(n),空间复杂度0(1)的解法。来源2013年UC的校招笔试题思路一第①步、确定b1的位置,即让b1跟它前面的a2,a3,a4交换:a1,b1,a2,a3,a4,b2,b3,b4第②步、接着确定b2
2017-08-02 00:08:11
15198
1
原创 Leetcode—174. Dungeon Game 倒序DP
问题描述:The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dungeon. The dungeon consists of M x N rooms laid out in a 2D grid. Our valiant knight (K) was
2017-07-25 21:05:53
428
原创 Leetcode—200.Number of Islands
问题描述:Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. Y
2017-07-25 15:57:06
277
原创 Leetcode—221.Maximal Square 最大正方形
Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.For example, given the following matrix:1 0 1 0 01 0 1 1 11 1 1 1 1
2017-07-25 01:26:34
1911
5
原创 Leetcode—139. Word Break
问题描述:Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine if s can be segmented into a space-separated sequence of one or more dictionary wo
2017-07-23 09:45:22
235
原创 Leetcode—154. Find Minimum in Rotated Sorted Array II
问题描述:Follow up for "Find Minimum in Rotated Sorted Array":What if duplicates are allowed?Would this affect the run-time complexity? How and why?Suppose an array sorted in ascending o
2017-07-22 08:54:23
212
原创 leetcode—153. Find Minimum in Rotated Sorted Array 在翻转数组寻找最小值
问题描述:Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).Find the minimum element.You may a
2017-07-22 08:43:02
271
原创 Leetcode—152. Maximum Product Subarray 最小乘积子串
问题描述:Find the contiguous subarray within an array (containing at least one number) which has the largest product.For example, given the array [2,3,-2,4],the contiguous subarray [2,3] has t
2017-07-21 20:50:35
342
转载 类对象切割对虚函数调用的影响
背景现在有CFish和CAnimal两个类,并且CFish类继承于CAnimal类,它们都有breath这样的接口,只是表现形式不同,所以用虚函数来定义,类关系如下图所示;图一 类图关系其代码实现如下://基类class CAnimal{public: CAnimal() { //构造函数 cout "CAnimal
2017-07-19 09:59:56
279
转载 csdn如何转载别人的文章
转载于:http://blog.youkuaiyun.com/jiangping_zhu/article/details/18044109作者:包心菜加糯米饭1、找到要转载的文章,用chrome浏览器打开,右键选择审查元素2、在chrome中下方的框里找到对应的内容,html脚本中找到对应的节点,选中节点,网页上被选中内容会被高亮显示,然后右键菜单选中 Copy as HTML
2017-07-19 09:52:08
329
转载 从内存布局看C++虚继承的实现原理
原创作品,转载请标明:http://blog.youkuaiyun.com/xiejingfa/article/details/48028491准备工作1、VS2012使用命令行选项查看对象的内存布局微软的Visual Studio提供给用户显示C++对象在内存中的布局的选项:/d1reportSingleClassLayout。使用方法很简单,直接在[工具(T)]选项下找到“Visu
2017-07-19 09:36:48
2120
1
原创 Quicksort 快速排序—注意点以及代码实现(笔试手写代码)
Quicksort排序是一种不稳定的平均时间复杂度O(nlogn)的比较排序。 但是快速排序是十几排序应用中最好的选择。因为他O(nlogn)隐含的常数因子非常小。 原址排序:不需要额外的空间,在原空间进行排序。 不稳定排序:是因为Partition过程中会把key值相等的元素打乱顺序。 最坏情况:两个子递归的元素划分严重不平衡,比如一个是n-1,一个1.此时时间复杂度为O(n^2
2017-07-19 09:01:29
1271
原创 Leetcode——639.Decode Ways II
题目描述:A message containing letters from A-Z is being encoded to numbers using the following mapping way:'A' -> 1'B' -> 2...'Z' -> 26Beyond that, now the encoded string can also contai
2017-07-11 18:58:00
1093
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人