自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

淡红星空的专栏

道之所在,虽千万人,吾独往矣

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

转载 C语言中volatile关键字的作用

一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的

2013-11-26 00:24:16 1089

原创 【一手笔经】趋势科技2014校招笔试

2013-11-02 22:10:32 1955

原创 【一手面经】奇虎360 2014校园招聘面试 一二面

面试时间:2013-10-29 下午4:45 到 晚上7点半面试地点:360大厦,酒仙桥路6号院2号楼面试职位:服务器端研发工程师面试形式:一对一,聊天+写代码面试题目:1.C和C++● 堆和栈的区别● new和malloc的区别free和delete如何知道应该释放多少内存● 写个类A,声明类A指针指向NULL,调用类A的方法会有什么后果,编译通过

2013-11-02 02:29:37 5099

原创 【深入浅出TCP/IP】TCP中的四种计时器

TCP共使用以下四种计时器,即重传计时器、坚持计时器、保活计时器和时间等待计时器。这几个计时器的主要特点如下:重传计时器当TCP发送报文段时,就创建该特定报文段的重传计时器。可能发生两种情况:1.    若在计时器截止时间到之前收到了对此特定报文段的确认,则撤销此计时器。2.    若在收到了对此特定报文段的确认之前计时器截止期到,则重传此报文段,并将计时器复位。

2013-10-24 14:43:41 1967

转载 【笔面大全】随机数的相关面试题

当前面试中各大名企经常出现各种各样的概率类面试题。究其原因,我觉得是概率型面试题可以综合考查面试者的思维能力、应变能力、数学能力。在这里对各种类型的概率型题目进行了收集和总结,希望在自我总结的同时对大家有所帮助。1、给你一个数组,设计一个既高效又公平的方法随机打乱这个数组(此题和洗牌算法的思想一致)方法比较简单,基本思想是每次随机取一个数,然后把它交换到最后的位置。然后

2013-10-13 02:35:37 2240

转载 IO - 同步,异步,阻塞,非阻塞

同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不

2013-10-13 02:22:29 930

转载 C++静态构造函数的实现

在C#中,类的静态构造函数用于在使用类之前进行相关的初始化工作;比如,初始化静态成员或执行特定操作。CLR 在第一次创建该类对象或调用该类静态方法时自动调用静态构造函数。同时,CLR保证静态构造函数的线程安全性(准确地说是,只会调用一次,不存在多线程问题)。下面是MSDN对C++静态构造函数特点的描述:1.静态构造函数既没有访问修饰符,也没有参数2.在创建第一个实例或引用任

2013-10-13 01:53:43 6130 1

转载 十道海量数据处理面试题与十个方法大总结

第一部分、十道海量数据处理面试题  1、海量日志数据,提取出某日访问百度次数最多的那个IP。  此题,在我之前的一篇文章算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。  再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多

2013-10-12 17:47:10 1027

原创 最大子矩阵和问题

给定一个长度为n的一维的数组matrix[n],让求其最大matrix[i] + matrix[i+1] + ... + matrix[j] = sum问题? 简单算法:穷举法先预处理map[n]表示从matrix[0]->matrix[n]的和for(int i = 0 to n)   for(int j = i+1 to n)   {          int

2013-10-12 17:29:00 1480

转载 【面试】奇虎360笔试解答

2,你用过360的软件吗?有什么建议和评价?3。如何设计安全软件,才能符合用户需要。首先:保证软件自身的安全,存在极少的易被攻击的漏洞。其次:保证本软件运行时各项指标正常然后:界面友好,易操作。最后:关键是权衡好安全性与易用性的关系。因为:不恰当的安全性会损害易用性,不适当的易用性会损害安全性。4。如何评测杀毒软件闲时占用资源,跟工作时占用资

2013-10-12 16:56:26 1665

转载 linux下简单源代码包(.tar.gz)的制作

本文以“hello world”程序为例,简单说明linux下源代码包(.tar.gz)的制作。当然,本身把hello world制作成源代码包是没什么意义的。在此,谨以说明源代码包的制作过程。首先,确保你的系统装有以下GNU软件:AutomakeAutoconfm4perllibtool1.新建一目录,将你的源代码放在此目录下,以下的操作均在此目录里进行。   

2013-10-12 16:41:41 2879 1

原创 【机试】华为2014校招机试:多线程循环打印十次ABC

题目:有三个线程分别打印A、B、C,请用多线程编程实现,在屏幕上循环打印10次ABCABC…此乃多线程笔面试常考题目之一,下面提供Java和Linux C两种解法一、Java方法1:使用wait()、notify()控制打印次序public class Test { public static Object a = new Object(); p

2013-10-11 12:09:20 2697

转载 【笔面大全】young氏矩阵

http://www.jobcoding.com/array/matrix/young-tableau-problem/如果一个矩阵每一行每一列都严格单调递增,我们称该矩阵为杨氏矩阵(Young Tableau)。对于杨氏矩阵(a[m][ n]),通常会涉及两个问题:(1) 怎样在杨氏矩阵中查找某个元素X?(2) 怎样在杨氏矩阵找第k大的数?2. 解决方

2013-09-24 09:12:20 1210

转载 【笔面大全】卡特兰数 Catalan

卡特兰数的递推公式是F(n)=∑(k=1…n){F(k-1)*F(n-k)}=∑(k=0…n-1){F(k)*F(n-k-1)}一般性公式为F(n)=C(2n,n)/(n+1)可以描述的问题有1、n个元素的二叉查找树有多少种。2、n*n棋盘从左下角走到右上角而不穿过主对角线的走法。3、2n个人排队买票问题,票价50,n个人拿50元,n个人拿100元,售票处无零钱,能顺利

2013-09-20 00:50:12 1361

转载 进程地址空间

1,内核除了管理本身的内存外,还必须管理用户空间中进程的内存我们称这个内存为进程地址空间,也就是系统中每个用户空间进程所看到的内存进程地址空间由进程可寻址的虚拟内存组成,而且更为重要的特点是内核允许进程使用这种虚拟内存中的地址。平坦:地址空间范围是一个独立的连续区间段式:这些地址空间并非连续的,而是被分段的通常情况下,每个进程都有唯一的这种平坦地址空间2,一

2013-09-19 21:46:05 1101

转载 逆序数

归并排序及序列逆序数归并排序(MERGE SORT)是又一类不同的排序方法,合并的含义就是将两个或两个以上的有序数据序列合并成一个新的有序数据序列,因此它又叫归并算法。它的基本思想就是假设数组A有N个元素,那么可以看成数组A是又N个有序的子序列组成,每个子序列的长度为1,然后再两两合并,得到了一个 N/2   个长度为2或1的有序子序列,再两两合并,如此重复,值得得到一个长

2013-09-19 19:42:03 2703

转载 Wireshark的过滤规则

WireShark 过滤语法1. 过滤IP,如来源IP或者目标IP等于某个IP例子:ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107或者ip.addr eq 192.168.1.107 // 都能显示来源IP和目标IP2. 过滤端口例子:tcp.port eq 80 // 不管端口是来源的还是目标的都显

2013-09-17 10:31:53 1082

转载 关于Tcp封包

关于Tcp封包很多朋友已经对此作了不少研究,也花费不少心血编写了实现代码和blog文档。当然也充斥着一些各式的评论,自己看了一下,总结一些心得。首先我们学习一下这些朋友的心得,他们是:http://blog.csdn.net/stamhe/article/details/4569530http://www.cppblog.com/tx7do/archive/2011/05/04/1

2013-09-13 15:11:33 1174

转载 UPnP协议编程实践(二)

备发现过程简介设备发现过程简介UPnP协议的设备发现过程使用简单服务发现协议SSDP(Simple Service Discovery Protocol),此协议为网络客户提供一种无需任何配置、管理和维护网络上设备服务的机制。此协议采用基于通知和发现路由的多播发现方式实现。协议客户端在保留的多播地址239.255.255.250发现服务,同时每个设备服务也在此地址上监听服务发现请求。如果服

2013-09-13 13:42:57 1489

转载 关于TCP带外数据(OOB,Out Of Bound)

定义带 外 数据 想 像一下在银行人们排起队待等处置他们的帐单。在这个步队中每个人最后会都移到面前由出纳员行进服务。在现想像一下一个走入银行,超出个整步队,然后用枪抵 住出纳员。这个就可以看作为带 外 数据 。这个盗强超出个整步队,是因为这把枪给了他凌驾于世人的权利。出纳员也集会中注意力于这个盗强身上,因为他晓得后以 的势形是很紧迫的。应相的,一个连接的流式套口接上的带 外

2013-09-13 11:39:38 8006 1

转载 linux下遍历目录树方法总结

前几天需要实现对整个目录树的遍历,查阅了相关的一些资料。开始找到的原始的方法是使用readdir()与lstat()函数实现递归遍历,后来发现linux对于目录遍历这种最常用的操作已经提供了很完善的接口:ftw()与nftw()。下面就这两种方法具体说明一下。1、手动实现递归1.1 stat()函数族stat函数族包括:stat,fstat以及lstat函数,都是向用户返回

2013-08-17 04:24:44 1438

转载 select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET

select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型,原型:          #include           #include           int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval *t

2013-08-10 19:03:15 4215

转载 pthread_create 参数传递指针问题

linux 下常用的创建多线程函数pthread_create(pthread_t * thread , pthread_attr_t * attr , void *(*start_routine)(void*) , void *args);其中第一个参数用来保存线程信息,第二个参数指新线程的运行属性,可以设置为NULL,第三个参数为自定义的线程函数,第四个参数就是线程函数需要用到的参数,一般如果

2013-08-10 18:48:07 1690

转载 socket编程:SO_REUSEADDR例解

网友vmstat多次提出了这个问题:SO_REUSEADDR有什么用处和怎么使用。而且很多网友在编写网络程序时也会遇到这个问题。所以特意写了这么一篇文章,希望能够解答一些人的疑难。     其实这个问题在Richard Stevens的《Unix网络编程指南》卷一里有很详细的解答(中文版P166-168页)。这里我只是写几个基本的例子来验证这个问题。     首先声明一个问题:

2013-08-10 18:47:19 1030

原创 【深入剖析Linux内核】Linux内核之旅--(三)同步

1、概述同步问题是操作系统中的经典问题,它伴随着并发处理而自诞生。现代体系结构中常见的并发处理情况可以分为如下三种情况:(1)多个线程在单处理器上执行——多线程编程(2)多个线程在多处理器上执行——并行计算(3)多个线程在分布的多个处理上执行——分布式计算相应的编程也分成三种情况:共享变量编程、分布式(基于消息)编程和并行编程。1.1、并发程序设计的本质并发程序通常

2013-08-10 18:47:04 1321

转载 Socket/TCP粘包、多包和少包, 断包

为什么TCP 会粘包   前几天,调试mina的TCP通信, 第一个协议包解析正常,第二个数据包不完整。为什么会这样吗,我们用mina这样通信框架,还会出现这种问题? 带者问题,我们先分析一下问题。  提到通信, 我们面临都通信协议,数据协议的选择。 通信协议我们可选择TCP/UDP:TCP(transport control protocol,传输控制协议)是面向连接

2013-08-10 18:46:34 1505

原创 【深入剖析Linux内核】Linux内核之旅——(二)内核抢占与中断返回

1、上下文一般来说,CPU在任何时刻都处于以下三种情况之一:(1)运行于用户空间,执行用户进程;(2)运行于内核空间,处于进程上下文;(3)运行于内核空间,处于中断上下文。应用程序通过系统调用陷入内核,此时处于进程上下文。现代几乎所有的CPU体系结构都支持中断。当外部设备产生中断,向CPU发送一个异步信号,CPU调用相应的中断处理程序来处理该中断,此时CPU处于中断上下文。

2013-08-09 17:42:16 1027

转载 linux中的链表

//include/linux/list.h struct list_head {                         struct list_head *next, *prev;   }; #define LIST_HEAD_INIT(name) { &(name), &(name) }#define LIST_HEAD(name) struct list

2013-08-09 17:40:15 890

原创 Linux内核之旅——(一)中断

一直认为,理解中断是理解内核的开始。中断已经远远超过仅仅为外围设备服务的范畴,它是现代体系结构的重要组成部分。1、基本输入输出方式现代体系结构的基本输入输出方式有三种:(1)程序查询:CPU周期性询问外部设备是否准备就绪。该方式的明显的缺点就是浪费CPU资源,效率低下。但是,不要轻易的就认为该方式是一种不好的方式(漂亮的女人不一定好,不漂亮的女人通常很可爱),通常效率低下是由于

2013-08-09 17:37:36 1818

转载 【深入剖析Linux协议栈】socket connect 发起连接请求

1、sys_connect 对于客户端来说,当创建了一个套接字后,就可以连接它了。                 case SYS_CONNECT:                         err = sys_connect(a0, (struct sockaddr __user *)a1, a[2]);                         break;[

2013-08-09 17:27:29 2178

转载 Linux网络协议栈 -- socket accept接收连接

一、tcp 栈的三次握手简述 进一步的分析,都是以 tcp 协议为例,因为 udp要相对简单得多,分析完 tcp,udp的基本已经被覆盖了。  这里主要是分析 socket,但是因为它将与 tcp/udp传输层交互,所以不可避免地接触到这一层面的代码,这里只是摘取其主要流程的一些代码片段,以更好地分析 accept的实现过程。  当套接字进入 LISTEN后,意味着服务器端

2013-08-09 17:26:17 1306 1

转载 Linux网络协议栈 -- socket listen监听

一、sys_listen对面向连接的协议,在调用 bind(2)后,进一步调用 listen(2),让套接字进入监听状态: int listen(int sockfd, int backlog); backlog 表示新建连接请求时,最大的未处理的积压请求数。  这里说到让套接字进入某种状态,也就是说,涉及到套接字的状态变迁,前面 create 和bind 时,也遇到过

2013-08-09 17:24:52 1609

转载 Linux网络协议栈 -- socket bind 地址绑定

1、bind()当创建了一个 Socket 套接字后,对于服务器来说,接下来的工作,就是调用 bind(2)为服务器指明本地址、协议端口号,常常可以看到这样的代码: strut sockaddr_in sin;  sin.sin_family = AF_INET; sin.sin_addr.s_addr = xxx; sin.sin_port = xxx; bind

2013-08-09 17:23:37 1569

转载 Linux网络协议栈 -- socket创建(3)

五、初始化 sk 分配完成 sk 后,另一个重要的功能就是初始化它,sk 的成员相当复杂,其主要的初始化工作是在函数 sock_init_data()中完成的: void sock_init_data(struct socket *sock, struct sock *sk) {         /*  初始化其三个队列 */         skb_que

2013-08-09 17:22:54 1300

转载 Linux网络协议栈 -- socket创建(2)

三、af_inet 协议簇的协议封装  接下来,函数调用之前已经注的 inet_family_ops的函数指针 create,也就是inet_create()函数,前面,可以说一个通用的 socket 已经创建好了,这里要完成与协议本身相关的一些创建 socket 的工作。这一部份的工作比较复杂,还是先来看看 af_inet.c 中的模块初  始化时候,做了哪些与此相关的工作。  

2013-08-09 17:20:50 985

转载 Linux网络协议栈 -- socket创建(1)

原文地址:http://blog.csdn.net/zhaqiwen/article/details/7725430内核版本:2.6.12 一、系统总入口Linux 内核为所有的与 socket 有关的操作的 API,提供了一个统一的系统调用入口,其代码在net/socket.c中: asmlinkage long sys_socketcall(int call, un

2013-08-09 17:19:11 1208

原创 socket编程函数详解

摘要:listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程。在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接。listen函数在一般在调用bind之后-调用accept之前调用,它的函数原型是:#includesys/socket.h>int listen(int sockfd, in

2013-08-09 17:10:38 1934

转载 服务器编程之fork并行模式

服务器编程之fork并行模式摘要:网络编程本身并不复杂或多么困难,复杂或困难的是在不稳定的网络中做到稳定的服务器与通信,此时并行技术是实现的稳定的服务器的技术之一,当然也不是服务器端使用的技术。fork是POSIX系统中产生新进程的唯一方法,可以实现进程并行编程模式。在介绍服务器编程的fork模式之前,我们首先来说说fork自身的问题,对于深知fork的读者可以跳过本段

2013-08-09 17:01:47 1342

转载 Linux网络协议栈(四)——链路层(2)

原文地址:http://www.cnblogs.com/hustcat/archive/2009/09/26/1574411.html2、协议相关2.1、第3层协议的管理在Linux内核中,有两种不同目的的3层协议:(1)    ptype_all管理的协议主要用于分析目的,它接收所有到达第3层协议的数据包。(2)    ptype_base管理正常的3层协议,仅接收具有正

2013-08-09 16:47:33 1290

转载 Linux网络协议栈(四)——链路层(1)

1、接收帧当网络适配器接收到数据帧时,就会触发一个中断,中断处理程序执行一些需要及时处理的任务,然后在下半部进行其它可以延迟的处理。中断处理程序主要进行以下一些操作:(1)    分配sk_buff数据结构,并将接收到的数据帧从网络适配器I/O端口拷贝到sk_buff缓冲区中;(2)    从数据帧中提取出一些信息,并设置sk_buff相应的参数,这些参数将被上层的网络协议使用,例如s

2013-08-09 16:46:09 1245

空空如也

空空如也

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

TA关注的人

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