自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 WebView使用方法

WebView可用于再程序中嵌入一个浏览器,完成加载和显示网页的任务先在视图中添加WebView控件<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" xmlns:android="http://schemas.android.com/apk/res/...

2020-03-06 22:41:20 254

原创 统计逆序对

//统计逆序对 int InversePairsCore(int arr[],int copy[],int start,int end) { if(start == end) { copy[start] = arr[start]; return 0; } int length = (end-start)/2;

2017-09-06 18:52:22 326

原创 最小的k个数

int Patition(int data[],int length,int start,int end) { if(data == NULL|| length<=0 || start<0 || end>=length) throw new exception(“invalid parameters”); int index = start; swa

2017-09-06 18:50:52 192

原创 数组中次数超过一半的数字

bool g_bInputInvalid = false; bool CheckInvalidArray(int numbers[],int length) { g_bInputInvalid = false; if(numbers == NULL && length <=0) g_bInputInvalid = true; return g_bI

2017-09-06 18:48:24 170

原创 自符串的全排列

void Permutation(char* pStr,char* pBegin) { if(*pBegin == ‘\0’) cout<

2017-09-06 18:47:29 223

原创 将一个二叉搜索树转换成双向链表

void ConvertNode(BtNode* pNode,BtNode** pLastNodeInList) { if(pNode == NULL) return;BtNode* pCurrent = pNode;if(pCurrent->m_pleft != NULL) ConvertNode(pCurrent->m_pleft,pLastNodeInL

2017-09-06 18:46:37 178

原创 复杂链表的复制

struct ComplexListNode { int m_val; ComplexListNode* m_pNext; ComplexListNode* m_pSibling; }; void CloneNodes(ComplexListNode* pHead) { ComplexListNode* pNode = pHead; whil

2017-09-06 18:45:57 135

原创 二叉树中和为某一值的路径

//二叉树中和为某一值的路径 void FindPath(BtNode* pRoot,int expectedSum,vector& path,int currentSum) { currentSum += pRoot->m_val; path.push_back(pRoot->m_val);//如果是叶节点,并且路径上的点和等于输入的值//打印这条路径bool isLe

2017-09-06 18:45:13 117

原创 二叉搜索树的后序遍历序列

//二叉搜索树的后序遍历序列 bool VerifySquencrOFBST(int sequence[],int n) { if(sequence == NULL || n<=0) return false; int root = sequence[n-1];//左子树值都小于根节点int i=0;for(;i<n-1;++i){ if(se

2017-09-06 18:44:25 126

原创 从上到下打印二叉树

//从上到下打印二叉树 void PrintRromTopToBottom(BtNode* ptr) { if(!ptr) return ; deque

2017-09-06 18:43:34 211

原创 栈的压入弹出序列

//栈的压入弹出序列bool IsPopOrder(const int* pPush,const int* pPop,int n){ bool res = false; if(pPush != NULL && pPop != NULL && n > 0) {  const int *pNextPush = pPush;  const int *pNextPop = pP

2017-09-06 18:41:51 148

原创 包含min函数的栈

template<typename T>class StackWithMin{public: void push(const T& value) { m_data.push(value); if(m_min.size()==0||m_min.top()<value) m_min.push(value); e

2017-08-16 16:15:09 126

原创 顺时针打印矩阵

例如矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16输出:1 2 3 4 8 12 16 15 14 13 5 9 6 7 11 10 //顺时针打印矩阵void PrintMatrixInCirclie(

2017-08-16 16:12:38 149

原创 单链表

//链表删除结点void DeleteNode(ListNode** pListHead,ListNode* pToBeDeleted){ if(pListHead == NULL|| pToBeDeleted == NULL) return; //不是尾 if(pToBeDeleted->m_pnext != NULL) { Li

2017-08-14 08:46:33 132

原创 第十一题 数值的整数次方

例如:2^8可以理解为两个2^4相乘,而2^4是两个2^2相乘,2^2是两个2相乘,所以一共只计算了三次,用递归的方法比较高效。bool Equal(double num1,double num2){ if((num1-num2 > -0.00001) && (num1-num2 < 0.00001)) return true; else retur

2017-08-04 17:11:21 223

转载 工厂模式

引出工厂模式的设计问题 1.为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。 2.还有一种情况就是在父类中并不知道具体要实例化哪一个具体的子类。以上两个问题也就引出了工厂模式的两个最重要的功能: 定义创建对象的接口,封装了对

2017-08-03 22:51:36 159

原创 观察者模式

class Listener{public: Listener(string name):_name(name){}; virtual void handleMessage(int msgid) = 0; string _name;};class Listener1:public Listener{public: Listener1(string name):

2017-08-03 15:24:30 138

原创 智能指针学习

智能指针 智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类, 用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内 存泄露。智能指针就是模拟指针动作的类。所有的智能指针都会重载 -> 和 * 操作符。智能指针还有许多其他功能,比较有用的是自动销 毁。这主要是利用栈对象的有限作用域以及临时对象(有限作用域实

2017-08-02 23:20:01 154

原创 libevent学习笔记

先大概整理一下,再慢慢看libevent: 事件驱动(event-driven),高性能; 轻量级,专注于网络,不如 ACE 那么臃肿庞大; 源代码相当精炼、易读; 跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os; 支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue

2017-08-02 16:28:04 228

原创 第十题 求一个数中二进制有多少个 一

题目:数入一个整数,输出这个数中二进制的一的个数每次判断最右边的数是否为一,然后右移一位的方法不可取,因为负数经过多次右移之后会变成0xFFFF FFFF,程序就会变成死循环,用一个比较好的方法,用输入的数和这个数减一的值做与运算,会将这个数最右边的一变为零,更新这个数,很快就能求出这个数中有多少个一。int Number0f1(int n){ int coun

2017-08-02 13:58:25 166

原创 第九题 斐波那契数列

题目一:输入n,求出斐波那契数列的第n项的。 题目二:一只青蛙,一次可以跳上一级台阶,也可以跳上2级台阶,求青蛙跳上n级台阶有多少种跳法。 总数:f(n) = f(n-1) + f(n-2) 。根据f(0)和f(1)求出f(2),再根据f(1)和f(2)算出f(3),以此类推就可以算出第n项了。时间复杂度O(n)。int Fibio(int n){ int ar[2] = {0,1};

2017-08-02 13:39:05 366

转载 nginx如何解决惊群现象

简单说来,多线程/多进程(Linux下线程进程也没多大区别)等待同一个socket事件,当这个事件发生时,这些线程/进程被同时唤醒,就是惊群。可以想见,效率很低下,许多进程被内核重新调度唤醒,同时去响应这一个事件,当然只有一个进程能处理事件成功,其他的进程在处理该事件失败后重新休眠(也有其他选择)。这种性能浪费现象就是惊群。惊群通常发生在server 上,当父进程绑定一个端口监听socket,然后f

2017-07-29 20:32:03 242

转载 epoll详解

ET模式实现分析 1.1 ET和LT的实现区别 注:上图的poll不要理解成和select相似那个poll,这是通过epoll_ctl调用的。 下面简要分析一下epoll的工作过程: (1) epoll_wait调用ep_poll,当rdlist为空(无就绪fd)时挂起当前进程,知道rdlist不空时进程才被唤醒。 (2) 文件fd状态改变(buffer由不可读变为可读或由不可写变为可

2017-07-29 18:11:45 409

转载 socket系统调用

从别人那里看,一边翻源码。总结的socket的系统调用,主要是参考大神的Socket系统调用对应的内核函数为: asmlinkage long sys_socket(int family, int type, int protocol) {  int retval;  struct socket *sock;  /* 根据协议族、套口类型、传输层协议创建套口 *

2017-07-29 16:38:27 827

原创 第八题 旋转数组中的最小数字

题目:把一个数字最开始的若干个元素搬移到末尾,称之为数组的旋转。输入一个递增排序数组的一个旋转,输出最小元素。例如输入{3,4,5,1,2}求出最小数字。利用二分查找的思想,用一个指针指向开头,另一个指针指向末尾,然后找到中间位置,如果中间位置的值大于开头元素的值,则说明旋转的部分在中间位置的后面,则从后面的位置中使用同样的方法寻找,如果中间的值小于末尾的值,说明最小值应该是中间值或中间值的前面。

2017-07-24 17:24:02 178

原创 第七题 用两个栈实现队列

题目:用两个栈实现队列,队列的声明如下,用两个函数appendTail和deleteHead实现尾插和头删:template<typename T>class CQueue{public: CQueue(); ~CQueue(); void appendTail(const T& node); T deleteHead();private: stack

2017-07-24 14:46:51 188

原创 二叉树

题目:输入某二叉树的前序遍历和中序遍历结果,请重建二叉树。假设输入的前序遍历和中序遍历都没有重复数字,例如{1,2,4,7,3,5,6,8}和{4,7,2,1,5,3,8,6},返回根节点,二叉树定义如下:struct BtNode{ int m_val; BtNode* m_pleft; BtNode* m_pright;};首先根据前序遍历的第一个节点找到根结点,然后

2017-07-23 11:14:58 141

原创 第五题 从尾到头打印单链表

输入一个链表的头结点,从尾到头打印每一个节点 struct Listnode { int m_key; Listnode* m_pnext; };很容易想到用到栈去实现,遍历一遍链表,并入栈,再栈顶逐步获取栈顶元素打印并出栈就好了void ReversePrintList_stack(const Listnode *pHead){ if(pHead == NULL

2017-07-23 09:29:50 175

转载 多线程下如何实现生产者消费者模型

生产者消费者问题就是一个著名的线程同步问题,该问题描述如下:有一个生产者 在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并 发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者将它生产的产品放 入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,显然生产者和消费者 之间必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者 向一个已经

2017-07-20 21:59:17 1102

原创 第四题 替换空格

题目: 请实现一个函数,把字符串中的每个空格替换成”%20”,例如输入”we are happy”,则输出”we%20are%20happy”。可以使用这样的方法: 先遍历一遍字符串,求出字符串中空格的个数,由此,可以计算出替换之后的字符串的总长度,然后标记出字符串的末尾p1和替换之后的末尾p2。再逐步往前移动p1,p2,同时将p1数据复制到p2的位置中,如果p1指向了一个空格,则将p1往前移动

2017-07-20 17:41:31 154

原创 第三题 二维数组中的查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增的顺序排列。请完成这样一个函数,输入一个二维数组和一个整数,判断是否有该整数。例如下面的例子:找到返回true,没找到返回false1    2    8    92    4    9    124    7    10   136    8    11   15bool FindValue(int *a

2017-07-20 16:06:05 178

原创 系统调用过程

系统调用:  每个系统调用都通过lib库体现。每一个系统调用在lib库中一般是一个宏syscallX(),X是具体某个调用的数字参数。 有的系统调用更复杂,因为它们有可变 的参数列表,但它们仍用一样的入口指针。  当syscall()被调用后,并没有任何的系统代码被执行,直到syscall()调用了int  0x80  ,中断0x80 把调用(控制)传给核心入口地址中的_s

2017-07-20 14:31:16 255

原创 fork系统调用过程

又是查找资料,又是看源码,折腾了大半天,终于把fork的过程弄完了,但是后面的跟踪状态还不太懂,等具体后面弄清楚了,再加上。内核是2.6.11版本的。fork()系统调用:我们运行一个系统调用时,系统将调用宏指令_syscall0 #define _syscall0(type,name) \ type name(void) \ { \ register long

2017-07-19 18:25:23 971

原创 第二题 单例模式

单例模式

2017-07-18 21:13:27 175

原创 第一题 赋值运算符的重载

要注意的问题: 防止自赋值,是否有内存泄漏,返回值的类型以及参数类型#include <iostream>using namespace std;class CMystring{public: CMystring(char *pData = NULL) { if(pData == NULL) { m_pData = n

2017-07-18 21:11:36 257

空空如也

空空如也

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

TA关注的人

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