上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 24 下一页

2018年2月25日

引用、数组引用与指针引用、内联函数inline、四种类型转换运算符

摘要: 一、引用 (1)、引用是给一个变量起别名 定义引用的一般格式:类型 &引用名 = 变量名; 例如:int a=1; int &b=a;// b是a的别名,因此a和b是同一个单元 注意:定义引用时一定要初始化,指明该引用是谁的别名 在实际应用中,引用一般用作参数传递与返回值 引用不是变量,引用仅仅只是 阅读全文

posted @ 2018-02-25 22:41 AlanTu 阅读(549) 评论(0) 推荐(0) 编辑

const与#define、结构体对齐、函数重载name mangling、new/delete 等

摘要: 一、bool 类型 逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC++中为1个字节。 声明方式:bool result; result=true; 可以当作整数用(true一般为1,false为0) 把其它类型的值转换为布尔值时,非零 阅读全文

posted @ 2018-02-25 22:39 AlanTu 阅读(283) 评论(0) 推荐(0) 编辑

实现一些字符串操作标准库函数、解决一些字符串问题

摘要: 一、实现字符串操作标准库函数 (1)、strcpy、strncpy、memmove、memcpy、memset、strlen、strncat 的实现 C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 阅读全文

posted @ 2018-02-25 22:36 AlanTu 阅读(657) 评论(0) 推荐(0) 编辑

windows下LIB和DLL的区别与使用

摘要: 共有两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。 一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。 阅读全文

posted @ 2018-02-25 22:34 AlanTu 阅读(9735) 评论(1) 推荐(2) 编辑

C++模板类内友元(友元函数,友元类)声明的三种情况

摘要: 根据《C++ Primer》第三版16.4节的叙述,C++类模板友元分为以下几种情况 1.非模板友元类或友元函数。 书上给了一个例子: class Foo{ void bar(); }; template <class T> class QueueItem{ friend class foobar; 阅读全文

posted @ 2018-02-25 22:31 AlanTu 阅读(3647) 评论(0) 推荐(0) 编辑

字符编解码的故事(ASCII,GBK,Unicode,Utf-8区别)

摘要: 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们认为8个开关状态作为原子单位很好,于是他们把这称为"字节"。 再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出更多的状态,状态开始变来变去。他们看到这样是好的,于是它们就这机 阅读全文

posted @ 2018-02-25 22:30 AlanTu 阅读(343) 评论(0) 推荐(0) 编辑

C++中四种类型转换以及const_cast是否能改变常量的问题

摘要: we have four specific casting operators:dynamic_cast, reinterpret_cast, static_cast and const_cast. Their format is to follow the new type enclosed be 阅读全文

posted @ 2018-02-25 22:28 AlanTu 阅读(3245) 评论(0) 推荐(1) 编辑

预处理、编译和运行的区别

摘要: 相信很多人懂这个问题,也很多人没想过,包括我,今天看书想到了就写下来。先看程序(抱歉在linux下没有找到舒服的可以复制terminal的工具,只好截图了,将就着看看) 注释的就先不看了,看那几行没有注释的enum coordinate_type 表示一个枚举(Enumeration)类型。枚举类型 阅读全文

posted @ 2018-02-25 22:23 AlanTu 阅读(2351) 评论(0) 推荐(0) 编辑

C++的引用与const指针的关系以及各种传递方式

摘要: 首先我们知道 const int *p 与 int const *p 是一样的,即 *p 是常量;而 int * const p 跟上面是不一样的,即 p 是常量;我们知道引用只是一个别名,与变量共享存储空间,并且必须在定义的时候初始化,而且不能再成为别的变量的别名,这让我们想到什么呢,貌似跟 in 阅读全文

posted @ 2018-02-25 22:18 AlanTu 阅读(863) 评论(0) 推荐(0) 编辑

比较显式调用构造函数和析构函数

摘要: 1.首先看如下的代码,显式调用析构函数: C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #include <iostream> using namespace std 阅读全文

posted @ 2018-02-25 22:09 AlanTu 阅读(606) 评论(0) 推荐(0) 编辑

Linux 最新SO_REUSEPORT特性

摘要: 1、前言 昨天总结了一下Linux下网络编程“惊群”现象,给出Nginx处理惊群的方法,使用互斥锁。为例发挥多核的优势,目前常见的网络编程模型就是多进程或多线程,根据accpet的位置,分为如下场景: (1)单进程或线程创建socket,并进行listen和accept,接收到连接后创建进程和线程处 阅读全文

posted @ 2018-02-25 15:35 AlanTu 阅读(4420) 评论(0) 推荐(0) 编辑

Linux网络编程“惊群”问题总结

摘要: 1、前言 我从事Linux系统下网络开发将近4年了,经常还是遇到一些问题,只是知其然而不知其所以然,有时候和其他人交流,搞得非常尴尬。如今计算机都是多核了,网络编程框架也逐步丰富多了,我所知道的有多进程、多线程、异步事件驱动常用的三种模型。最经典的模型就是Nginx中所用的Master-Worker 阅读全文

posted @ 2018-02-25 15:31 AlanTu 阅读(703) 评论(0) 推荐(0) 编辑

Linux下connect超时处理

摘要: 1、前言 最近在写一个测试工具,要求快速的高效率的扫描出各个服务器开放了哪些端口。当时想了一下,ping只能检测ip,判断服务器的网络是连通的,而不能判断是否开放了端口。我们知道端口属于网络的传输层,因此需要用ip和端口来探测,这个时候就可以用connect来探测一下,针对TCP协议,connect 阅读全文

posted @ 2018-02-25 15:25 AlanTu 阅读(7072) 评论(0) 推荐(0) 编辑

TCP与UDP在socket编程中的区别

摘要: 一、TCP与UDP的区别 基于连接与无连接 对系统资源的要求(TCP较多,UDP少) UDP程序结构较简单 流模式与数据报模式 TCP保证数据正确性,UDP可能丢包 TCP保证数据顺序,UDP不保证 部分满足以下几点要求时,应该采用UDP 面向数据报方式 网络数据大多为短消息 拥有大量Client 阅读全文

posted @ 2018-02-25 15:22 AlanTu 阅读(289) 评论(0) 推荐(0) 编辑

select、poll、epoll之间的区别

摘要: select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说 阅读全文

posted @ 2018-02-25 15:17 AlanTu 阅读(2114) 评论(0) 推荐(0) 编辑

IO多路复用之epoll

摘要: 1、基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次 阅读全文

posted @ 2018-02-25 15:00 AlanTu 阅读(1017) 评论(0) 推荐(0) 编辑

IO多路复用之poll

摘要: 1、基本知识 poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文 阅读全文

posted @ 2018-02-25 14:56 AlanTu 阅读(328) 评论(0) 推荐(0) 编辑

IO多路复用之select

摘要: 1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TC 阅读全文

posted @ 2018-02-25 14:54 AlanTu 阅读(431) 评论(0) 推荐(0) 编辑

并发无锁队列

摘要: 并发无锁队列学习之一【开篇】 1、前言 队列在计算机中非常重要的一种数据结构,尤其在操作系统中。队列典型的特征是先进先出(FIFO),符合流水线业务流程。在进程间通信、网络通信之间经常采用队列做缓存,缓解数据处理压力。结合自己在工作中遇到的队列问题,总结一下对不同场景下的队列实现。根据操作队列的场景 阅读全文

posted @ 2018-02-25 13:13 AlanTu 阅读(25437) 评论(0) 推荐(1) 编辑

《算法导论》读书笔记(七)

摘要: 《算法导论》读书笔记之第16章 贪心算法—活动选择问题 前言:贪心算法也是用来解决最优化问题,将一个问题分成子问题,在现在子问题最优解的时,选择当前看起来是最优的解,期望通过所做的局部最优选择来产生一个全局最优解。书中先从活动选择问题来引入贪心算法,分别采用动态规划方法和贪心算法进行分析。本篇笔记给 阅读全文

posted @ 2018-02-25 13:05 AlanTu 阅读(407) 评论(0) 推荐(0) 编辑

《算法导论》读书笔记(六)

摘要: 《算法导论》读书笔记之第15章 动态规划—装配线调度 前言:动态规划的概念 动态规划(dynamic programming)是通过组合子问题的解而解决整个问题的。分治算法是指将问题划分为一些独立的子问题,递归的求解各个问题,然后合并子问题的解而得到原问题的解。例如归并排序,快速排序都是采用分治算法 阅读全文

posted @ 2018-02-25 13:02 AlanTu 阅读(302) 评论(0) 推荐(0) 编辑

数组的连续最大子段和

摘要: 问题描述:输入是一个大小为n的整型数组,要求输出数组的任何连续子数组中的最大值。例如:输入的数组为array[10] = {31,-41,59,26,-53,58,97,-93,-23,84};输出最大连续子数组和为array[2...6]:187 算法1:对所有满足0<=i<=j<=n的(i,j) 阅读全文

posted @ 2018-02-25 12:56 AlanTu 阅读(377) 评论(0) 推荐(0) 编辑

《算法导论》读书笔记(五)

摘要: 《算法导论》读书笔记之第12章 二叉查找树 摘要: 本章介绍了二叉查找树的概念及操作。主要内容包括二叉查找树的性质,如何在二叉查找树中查找最大值、最小值和给定的值,如何找出某一个元素的前驱和后继,如何在二叉查找树中进行插入和删除操作。在二叉查找树上执行这些基本操作的时间与树的高度成正比,一棵随机构造 阅读全文

posted @ 2018-02-25 12:55 AlanTu 阅读(384) 评论(0) 推荐(0) 编辑

《算法导论》读书笔记(四)

摘要: 《算法导论》读书笔记之第10章 基本数据结构 摘要 本章介绍了几种基本的数据结构,包括栈、队列、链表以及有根树,讨论了使用指针的简单数据结构来表示动态集合。本章的内容对于学过数据结构的人来说,没有什么难处,简单的总结一下。 1、栈和队列 栈和队列都是动态集合,元素的出入是规定好的。栈规定元素是先进后 阅读全文

posted @ 2018-02-25 12:38 AlanTu 阅读(373) 评论(0) 推荐(0) 编辑

《算法导论》读书笔记(三)

摘要: 《算法导论》读书笔记之第7章 快速排序 本章介绍了快速排序及其算法分析,快速排序采用的是分治算法思想,对包含n个数的输入数组,最坏情况下运行时间为θ(n^2),但是平均性能相当好,期望的运行时间为θ(nlgn)。另外快速排序能够就地排序(我理解是不需要引入额外的辅助空间,每次划分能确定一个元素的具体 阅读全文

posted @ 2018-02-25 12:29 AlanTu 阅读(356) 评论(0) 推荐(0) 编辑

《算法导论》读书笔记(二)

摘要: 《算法导论》读书笔记之第6章 堆排序 本章开始介绍了堆的基本概念,然后引入最大堆和最小堆的概念。全章采用最大堆来介绍堆的操作,两个重要的操作是调整最大堆和创建最大堆,接着着两个操作引进了堆排序,最后介绍了采用堆实现优先级队列。 1、堆 堆给人的感觉是一个二叉树,但是其本质是一种数组对象,因为对堆进行 阅读全文

posted @ 2018-02-25 12:24 AlanTu 阅读(442) 评论(0) 推荐(0) 编辑

《算法导论》读书笔记(一)

摘要: 《算法导论》读书笔记之第1章 算法在计算机中的作用 本章是本书的开篇,介绍了什么是算法,为什么要学习算法,算法在计算机中的地位及作用。 算法(algorithm)简单来说就是定义良好的计算机过程,它取一个或一组值作为输入,并产生出一个或一组值作为输出。即算法就是一系列的计算步骤,用来将输入数据转换成 阅读全文

posted @ 2018-02-25 12:20 AlanTu 阅读(2280) 评论(0) 推荐(0) 编辑

Posix消息队列

摘要: 消息队列可以认为是一个消息链表,某个进程往一个消息队列中写入消息之前,不需要另外某个进程在该队列上等待消息的达到,这一点与管道和FIFO相反。Posix消息队列与System V消息队列的区别如下:1. 对Posix消息队列的读总是返回最高优先级的最早消息,对System V消息队列的读则可以返回任 阅读全文

posted @ 2018-02-25 11:50 AlanTu 阅读(250) 评论(0) 推荐(0) 编辑

管道和FIFO

摘要: 管道(pipe) 管道在Unix及Linux进程间通信是最基础的,很容易理解。管道就像一个自来水管,一端注入水,一端放出水,水只能在一个方向上流动,而不能双向流动。管道是典型的单向通信,即计算机网络中所说的“半双工”。管道又名匿名管道,所以只能用在具有公共祖先的进程之间使用,通常使用在父子进程之间通 阅读全文

posted @ 2018-02-25 11:46 AlanTu 阅读(203) 评论(0) 推荐(0) 编辑

linux内核数据结构之kfifo

摘要: 1、前言 最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的。缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度。例如一个进程A产生数据发给另外一个进程B,进程B需要对进程A传的数据进行处理并写入文件,如果B没有处理完,则A要延迟 阅读全文

posted @ 2018-02-25 11:42 AlanTu 阅读(665) 评论(0) 推荐(0) 编辑

linux内核数据结构之链表

摘要: 1、前言 最近写代码需用到链表结构,正好公共库有关于链表的。第一眼看时,觉得有点新鲜,和我之前见到的链表结构不一样,只有前驱和后继指针,而没有数据域。后来看代码注释发现该代码来自linux内核,在linux源代码下include/Lish.h下。这个链表具备通用性,使用非常方便。只需要在结构定义一个 阅读全文

posted @ 2018-02-25 11:28 AlanTu 阅读(3194) 评论(0) 推荐(0) 编辑

linux下core dump

摘要: 1、前言 一直在从事linux下后台开发,经常与core文件打交道。还记得刚开始从事linux下开发时,程序突然崩溃了,也没有任何日志。我不知所措,同事叫我看看core,我却问什么是core,怎么看。同事鄙视的眼神,我依然在目。后来学会了从core文件中分析原因,通过gdb看出程序挂再哪里,分析前后 阅读全文

posted @ 2018-02-25 11:14 AlanTu 阅读(13042) 评论(0) 推荐(0) 编辑

RCU介绍

摘要: RCU原理: RCU(Read-Copy Update),顾名思义就是读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重 阅读全文

posted @ 2018-02-25 11:11 AlanTu 阅读(2297) 评论(0) 推荐(0) 编辑

采用dlopen、dlsym、dlclose加载动态链接库

摘要: 1、前言 为了使程序方便扩展,具备通用性,可以采用插件形式。采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件。linux提供了加载和处理动态链接库的系统调用,非常方便。本文先从使用上进行总结,涉及到基本的操作方法,关于动态链接库的本质及如何加载进来,需 阅读全文

posted @ 2018-02-25 10:56 AlanTu 阅读(2479) 评论(0) 推荐(0) 编辑

linux获取系统启动时间

摘要: 1、前言 时间对操作系统来说非常重要,从内核级到应用层,时间的表达方式及精度各部相同。linux内核里面用一个名为jiffes的常量来计算时间戳。应用层有time、getdaytime等函数。今天需要在应用程序获取系统的启动时间,百度了一下,通过sysinfo中的uptime可以计算出系统的启动时间 阅读全文

posted @ 2018-02-25 10:20 AlanTu 阅读(2502) 评论(0) 推荐(0) 编辑

Linux获取进程执行时间

摘要: 1、前言 测试一个程序的执行时间,时间包括用户CPU时间、系统CPU时间、时钟时间。之前获取之前时间都是在程序的main函数用time函数实现,这个只能粗略的计算程序的执行时间,不能准确的获取其他时间。在看《APUE》时,书中有关程序时间测试程序,非常正规,提供这三个时间。如是,上网搜了一下,进行总 阅读全文

posted @ 2018-02-25 10:08 AlanTu 阅读(12625) 评论(0) 推荐(0) 编辑

linux下获取硬盘使用情况

摘要: 1、前言 在嵌入式设备中,硬盘空间非常有限,在涉及到经常写日志的进程时候,需要考虑日志的大小和删除,不然很快就硬盘写满,导致日志程序崩溃。为了捕获硬盘写满的异常场景,我们需要在写日志过程中判断硬盘空间的使用情况,根据硬盘的使用情况,就可以判断是否写满了。如果将要写满了,就给出警告。这样就可以避免程序 阅读全文

posted @ 2018-02-25 10:04 AlanTu 阅读(2057) 评论(0) 推荐(0) 编辑

linux下判断文件和目录是否存在

摘要: 1、前言 工作中涉及到文件系统,有时候需要判断文件和目录是否存在。我结合APUE第四章文件和目录,总结一下如何正确判断文件和目录是否存在,方便以后查询。 2、stat系列函数 stat函数用来返回与文件有关的结构信息。stat系列函数有三种情况,分别对应文件名称、文件描述符和符号链接文件。stat结 阅读全文

posted @ 2018-02-25 09:59 AlanTu 阅读(30898) 评论(1) 推荐(0) 编辑

孤儿进程与僵尸进程

摘要: 1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。 2、基本概念 我 阅读全文

posted @ 2018-02-25 09:58 AlanTu 阅读(521) 评论(0) 推荐(0) 编辑

多个文件目录下Makefile的写法

摘要: 1、前言 目前从事于linux下程序开发,涉及到多个文件,多个目录,这时候编译文件的任务量比较大,需要写Makefile。关于Makefile的详细内容可以参考网上流传非常广泛的《跟我一起写Makefile》http://blog.csdn.net/haoel/article/details/288 阅读全文

posted @ 2018-02-25 09:48 AlanTu 阅读(2992) 评论(0) 推荐(0) 编辑

上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 24 下一页

导航