自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LintCode 最长回文子串(Manacher算法)

http://www.lintcode.com/zh-cn/problem/longest-palindromic-substring/ 问题描述: 给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串。 样例 给出字符串 “abcdzdcab”,它的最长回文子串为 “cdzdc”。最开始想到的解决办法是暴力法,但是会导致复

2017-10-06 22:04:16 805

原创 Libpcap库编程指南--保存数据包

#include "pcap.h"#include <cstdlib>/* 回调函数原型 */void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);int main(int argc, char **argv){ pcap_if_t *alldevs;

2017-09-13 15:30:36 960

原创 Libpcap库编程指南--分析数据包

现在,我们可以捕捉并过滤网络流量了,那就让我们学以致用,来做一个简单使用的程序吧。 在本讲中,我们将会利用上一讲的一些代码,来建立一个更实用的程序。 本程序的主要目标是展示如何解析所捕获的数据包的协议首部。这个程序可以称为UDPdump,打印一些网络上传输的UDP数据的信息。我们选择分析和现实UDP协议而不是TCP等其它协议,是因为它比其它的协议更简单,作为一个入门程序范例,是很不错的选择。让我们

2017-09-13 15:21:05 876

原创 Libpcap库编程指南--过滤数据包

WinPcap和Libpcap的最强大的特性之一,是拥有过滤数据包的引擎。 它提供了有效的方法去获取网络中的某些数据包,这也是WinPcap捕获机制中的一个组成部分。 用来过滤数据包的函数是 pcap_compile() 和 pcap_setfilter() 。 pcap_compile() 它将一个高层的布尔过滤表达式编译成一个能够被过滤引擎所解释的低层的字节码。有关布尔过滤表达式的语法可以参见

2017-09-13 14:58:03 6184

原创 Libpcap库编程指南--网卡数据包捕获

本讲的范例程序所实现的功能和效果和上一讲的非常相似 (打开适配器并捕获数据包), 但本讲将用 pcap_next() 函数代替上一讲的 pcap_loop()函数。 pcap_loop()函数是基于回调的原理来进行数据捕获,这是一种精妙的方法,并且在某些场合中,它是一种很好的选择。 然而,处理回调有时候并不实用 – 它会增加程序的复杂度,特别是在拥有多线程的C++程序中。可以通过直接调用pcap_

2017-09-13 14:48:43 1548

原创 Libpcap库编程指南--网卡高级信息获取

事实上,Libpcap提供了其他更高级的信息。 特别需要指出的是, 由 pcap_findalldevs() 返回的每一个 pcap_if 结构体,都包含一个 pcap_addr 结构体,这个结构体由如下元素组成: 一个地址列表 一个掩码列表 (each of which corresponds to an entry in the addresses list). 一个广播地址列表 (eac

2017-09-13 14:31:27 895

原创 Libpcap库编程指南--网卡信息获取

用Libpcap 进行编程的第一步往往是获取网卡设备列表,以下是官方示例代码。 代码示例:#include <cstdio>#include "pcap.h"int main(){ pcap_if_t *alldevs; pcap_if_t *d; int i=0; char errbuf[PCAP_ERRBUF_SIZE]; /* 获取本地机器设备列表

2017-09-13 14:18:39 553

原创 LintCode permutations(全排列)

题目地址:http://www.lintcode.com/zh-cn/problem/permutations/ 题解:不考虑重复的全排列,实质是对一棵树的深度优先搜索。class Solution {public: /** * @param nums: A list of integers. * @return: A list of permutations.

2017-09-12 15:19:07 2565

翻译 Libpcap库编程指南--数据包捕获

简介Libpcap是一个运行在类UNIX系统下的网络数据包捕获函数库,可以捕获网卡上的数据,也可以发送数据包,相应的Windows版本为WinPcap。

2017-09-11 12:18:38 3934

原创 有趣的Scheme:lat? 函数的实现

最近在读一本叫《The Little Schemer》的小册子,是Scheme语言的入门书。之前在看SICP的时候有用到过Scheme,但是对这个Lisp方言的理解并没有那么深刻,现在把它读一读,对这个函数式语言的理解应该会加深些吧。 我把这个系列的博客命名为 “有趣的Scheme”,因为函数式语言真的是太有魅力了,代码很美,逻辑严谨,设计超前等等优点 这是本书留给读者的第一个问题:设计一个la

2017-09-10 23:14:32 938

原创 LintCode Longest Common Subsequence(最长公共子序列长度,动态规划入门题)

题目Link:http://www.lintcode.com/en/problem/longest-common-subsequence/递推公式: #include <iostream>#include <cstring>using namespace std;class Solution {public: /** * @param A, B: Two strings.

2017-09-10 15:25:53 1717

原创 最短路径条数问题(退化Dijkstra,BFS)

#include <iostream>#include <queue>#include <cstring>using namespace std;const int N = 16;int Calc(const int G[N][N]){ int step[N]; //记录 每个节点从起点开始几步能走到 int stepNumber[N]; //记录 到每个节点的最短路有几

2017-09-09 16:33:18 3477

原创 Lintcode 拓扑排序

题目网址: http://www.lintcode.com/zh-cn/problem/topological-sorting/#/** * Definition for Directed graph. * struct DirectedGraphNode { * int label; * vector<DirectedGraphNode *> neighbors; *

2017-09-08 00:01:21 2071

原创 LintCode 带环链表(快慢指针法)

题目地址: http://www.lintcode.com/zh-cn/problem/linked-list-cycle//** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * t

2017-08-31 11:53:31 1144

原创 Lintcode 逆波兰表达式求值

求逆波兰表达式的值。在逆波兰表达法中,其有效的运算符号包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰计数表达。您在真实的面试中是否遇到过这个题? Yes 样例 [“2”, “1”, “+”, “3”, ““] -> ((2 + 1) 3) -> 9 [“4”, “13”, “5”, “/”, “+”] -> (4 + (13 / 5)) -> 6简单的退栈和入栈的

2017-08-23 11:46:00 1510

原创 Lintcode 有效的括号序列

给定一个字符串所表示的括号序列,包含以下字符: ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, 判定是否是有效的括号序列。您在真实的面试中是否遇到过这个题? Yes 样例 括号必须依照 “()” 顺序表示, “()[]{}” 是有效的括号,但 “([)]”则是无效的括号。题目很简单,用栈就OK了。 但是为了不让代码很丑而且让这个程序有一定扩展性,所以代码写多了些。class

2017-08-21 16:04:51 1118

原创 Lintcode 用栈实现队列

巨水题,思路:一个栈缓存,一个栈当队列class MyQueue {public: stack<int> stack1; stack<int> stack2; MyQueue() { // do intialization if necessary } void push(int element) { // write your

2017-08-21 13:41:28 230

原创 Lintcode 二叉树的中序遍历(递归+非递归)

给出一棵二叉树,返回其中序遍历您在真实的面试中是否遇到过这个题? Yes 样例 给出二叉树 {1,#,2,3},1 \ 2 / 3 返回 [1,3,2].递归+非递归:/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode

2017-08-20 15:15:21 281

原创 Lintcode 二叉树的锯齿形层次遍历

给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历)您在真实的面试中是否遇到过这个题? Yes 样例 给出一棵二叉树 {3,9,20,#,#,15,7},3 / \ 9 20 / \ 15 7 按照从下往上的层次遍历为:[ [15,7], [9,20], [3] ]思路:在题

2017-08-18 15:53:41 1027

原创 Lintcode 二叉树的层次遍历 II

给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历)您在真实的面试中是否遇到过这个题? Yes 样例 给出一棵二叉树 {3,9,20,#,#,15,7},3/ \ 9 20 / \ 15 7 按照从下往上的层次遍历为:[ [15,7], [9,20], [3] ]只需要稍微修改 二叉

2017-08-18 15:25:17 1046

原创 Lintcode 二叉树的层次遍历

给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)您在真实的面试中是否遇到过这个题? Yes 样例 给一棵二叉树 {3,9,20,#,#,15,7} :3 / \ 9 20 / \ 15 7 返回他的分层遍历结果:[ [3], [9,20], [15,7] ]code:class Solution{public: vector< v

2017-08-18 15:06:21 276

转载 C++ 类的空间大小计算基本方法

在类中,如果什么都没有,则类占用1个字节,一旦类中有其他的占用空间成员,则这1个字节就不在计算之内,如一个类只有一个int则占用4字节而不是5字节。 如果只有成员函数,则还是只占用1个字节,因为类函数不占用空间 虚函数因为存在一个虚函数表,需要4个字节,数据成员对象如果为指针则为4字节,注意有字节对齐,如果为13字节,则进位到16字节空间。 sizeof的本质是得到某个类型的大小,确切的来说就

2017-07-27 10:14:36 6539

原创 《UNIX网络编程》wait和waitpid函数

之前的内容里我们用wait来处理已经终止的子进程,waitpid的功能和wait类似,但也有区别。 wait和waitpid的函数模型:pid_t wait(int *statloc);pid_t waitpid(pid_t pid, int *statloc, int options);返回值:若成功则返回进程的ID, 出错则返回0或者-1相同点函数wait和waitpid均返回两个值,已经终

2017-07-26 22:24:41 484

原创 《UNIX网络编程》多线程TCP C/S服务器正常启动和正常结束过程剖析

一、启动过程1、服务器启动后,它调用socket、bind、listen、accept, 并阻塞accept调用(我们还没有启动客户) 2、客户启动并调用socket和connect,后者引起TCP三路握手过程。当三路握手完成后,客户中的connect和服务器中的的accept均返回,连接建立。二、结束过程1、服务器子进程终止,关闭所有打开的描述符,客户打开的套接字由内核关闭。这导致客户TCP发送

2017-07-24 19:50:49 488

转载 HTTP 错误代码总结

HTTP 错误代码总结HTTP 错误代码将从远程服务器返回以响应请求。我们最为熟悉的可能是 HTTP404,只要服务器在 URI 中找不到指定的页面/文档,便会返回该代码。代码消息描述HTTP400错误请求由于语法无效,服务器可能无法处理该请求。HTTP401

2017-07-22 14:30:49 2850

原创 《UNIX网络编程》中的unp.h文件和config.h文件

《UNIX网络编程》一书中大量使用了作者自己编写的包裹函数,这些函数的声明统统写在了 unp.h 头文件中,现在将这个头文件写在博文里,方便以后查看。注意:unp.h 和 config.h的生成, 可以上本书官网 http://www.unpbook.com/下载源代码,根据README中的使用方法生成 ,除了这两个头文件外还需要相关静库文件的支持。笔者系统环境为Ubuntu 17.04 amd64

2017-07-21 10:47:18 3763

原创 《Unix网络编程》 多进程并发服务器基本模型

多进程并发服务器的基本原理是:对于每一个客户的访问请求,都fork一个子进程来处理这个请求。程序轮廓:pid_t pid;int listenfd, connfd;listenfd = Socket(...);Bind(listenfd, LISTENQ);while(1){ connfd = Accept(listenfd, ...); if( (pid = fork

2017-07-18 13:52:30 410

原创 《Unix网络编程》Unix/Linux中exec系函数辨析

Unix/Linux中exec系函数辨析

2017-07-18 12:35:43 259

原创 C++vector容器大小增长规律的总结

问:“vector大小是如何增长的?” 答:“自动增长的” 问:“增长规律是怎么?” 答: 。。。。。。 那么, 今天就来探究一下vector容器的大小增长规律:vector中得到大小的的函数有以下几个 方法 作用 size() 返回容器的大小 empty() 判断容器是否为空 max_size() 返回容器最大的可以存储的元素 capacity()

2017-07-17 16:20:48 4722 3

原创 C++仿函数详解

仿函数,简单来说,使用一个类来实现一个函数,通过运算符重载,使得这个类有函数的对应功能。 举个简单仿函数实现的例子:#include <iostream>#include <algorithm>using namespace std;template<typename T>class testFunctor_dis{ public: void operator()(const

2017-07-16 13:36:41 431

原创 C++中的typeid关键字

typeid是C++中RTTI(Run-TimeType Information, 运行时类型识别)机制的组成部分,其目的是根据传入已有的参数,来判断参数的数据类型。对于基本数据类型的用法与运行结果(g++ 6.3.0):#include <iostream>#include <typeinfo>using namespace std;int main(){ int a = 0;

2017-07-16 11:16:15 341

原创 Django中URL正则表达式匹配

Django框架中的URL分发采用正则表达式匹配来进行,以下是正则表达式的基本规则:1官方演示代码:from django.conf.urls import urlfrom . import viewsurlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4}

2017-07-04 21:13:27 16238

原创 C++11中的左引用和auto类型说明符

左引用:左引用是C++11中的新特性,创建一个“引用型变量”(有点像创建指针) 使用方法示例:int a = 1;int &b = a;这里b引用了a 错误用法示例 :int &a = 1; //引用类型的初始值必须是一个对象int &b; //引用类型必须要初始化auto类型说明符:C++新标准引入了auto类型说明符,用它能让编译器代替我们分析表达式所属的类型。 使用方法示例:

2017-07-02 12:12:19 3069

原创 Python中的装饰器

装饰器,是Python中较为独特的语法糖之一。以下是官方文档定义:A function returning another function, usually applied as a function transformation using the @wrapper syntax. Common examples for decorators are classmethod() and stat

2017-06-30 20:29:03 294

原创 C 语言中函数可变参数列表

现在有个问题:设计一个函数,能接受多个int数据类型参数,求其平均值这就要用到C语言中参数列表了,需要头文件 stdarg.h 的支持/***计算指定数量的值的平均值*/#include <stdio.h>#include <stdarg.h>float average(int n_values, ...);int main(){ printf("%f", average(1, 2,

2017-06-30 16:48:16 300

原创 C语言中,"int* a, b, c;" 是正确写法吗?

有以下的C语言代码int* a, b, c;int *a, *b, *c;int *a, b, c;其中哪些语句是等价的? 哪些语句又是指针的正确写法?对于这些问题,相信一开始学习指针的同学都有些迷惑,现在来剖析一下它们吧 很多人喜欢用第一种写法定义指针 int*, char*…理解为int型指针、char型指针这样理解不错,但是写法却是不规范的 int * a, b, c; 的实际含义

2017-06-30 11:36:30 13672 2

转载 Python 编码规范 BY Google

以下代码中 Yes 表示推荐,No 表示不推荐。分号不要在行尾加分号, 也不要用分号将两条命令放在同一行。行长度每行不超过80个字符以下情况除外:长的导入模块语句注释里的URL不要使用反斜杠连接行。Python会将 圆括号, 中括号和花括号中的行隐式的连接起来 , 你可以利用这个特点. 如果需要, 你可以在表达式外围增

2017-06-03 17:47:04 451

转载 Emacs 快速入门指南

Emacs 快速指南.(查看版权声明请至本文末尾)【注意:位于【】之间的内容是译注,比如本行,下同。】Emacs 键盘命令通常包含 CONTROL 键(有时候以 CTRL 或 CTL 来标示)和 META 键(有时候用 EDIT 或 ALT 来标示)。为了避免每次都要写出全名,我们 约定使用下述缩写:C- 表示当输入字符 时按住 CONTROL 键。 因此 C-f 就表

2017-02-17 23:55:10 748

原创 SICP 建立二叉查找(排序)树

二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值; (3)左、右子树也分别为二叉排序树; 在scheme和其他lisp家族语言中,二叉树常用list(列表)的嵌套来表示二叉树。 二叉树有三个节点,用scheme代码表示:(define (ent

2017-01-29 22:55:37 487

原创 SICP 2.59 集合的合并union_set

现在有两个集合set1 和 set2, 需要将这两个集合合并成一个集合。 思路很简单: 顺序查找set1中的元素set2是否包含,是,则找下一个,否,加入到set2。 最后返回set2scheme 实现:(define (union_set set1 set2) (if (null? set1) set2 (union_set (cdr set1) (a

2017-01-26 15:46:25 376

空空如也

空空如也

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

TA关注的人

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