自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

转载 由 -128 引发的思考

  对于 8 位的有符号数而言,它的范围在 -128~127。该数的范围若在-127~127,那还好理解,但关键该数还可取值 -128。那 -128 是怎么来的呢?-128 的来源说法一  有人就说了,8 位的有符号数除了表示 -127~127,还剩下一个二进制数“1000 0000B”没有用,这太浪费了,所以用来表示 -128。这种说法很明显是站不住脚的。原因主要有两个...

2015-12-20 19:55:00 224

转载 Java 与 C++ 不一样的地方(持续更新中...)

  本文仅以记录 Java 与 C++ 不同之处,以备随时查询。Java 程序运行机制  Java 是一门编译解释型的语言,即它在运行的过程中既需要编译也需要解释。如下图表示的是 Java 程序运行机制:    上图中,*.java 是用 Java 程序设计语言编写的源程序,通过 javac 命令编译成 *.class 文件,在操作系统之上是由 Java 虚拟机来运行以...

2015-12-20 17:35:00 222

转载 Linux 下源码安装大杂烩

  本文仅以记录平常源码安装部分软件是需注意的关键点。  有时为了方便,如在 Ubuntu 系统中,采用 sudo apt-get install soft-version 来安装某一版本的软件显得更为便捷和少出错。Python 升级  关于 Python 源码安装教程很多,如博文linux下python开发环境之一——安装python。  在 CentOS 6.5,Py...

2015-11-24 22:49:00 227

转载 Linux 开发环境搭建

  本文多参考自网上资料,在此多谢这些资料的作者的辛勤劳动!  另外,本文所用 Linux 版本为 CentOS 7.1。终端配置安装及配置 Zsh  在默认情况下,Linux 下的终端是 bash,但其跟 zsh 相比起来还是有点差距。博文使用 zsh 的九个理由就讲了九个使用 zsh 的理由。  安装 zsh,直接利用 yum 即可:sudo yum in...

2015-11-17 17:19:00 166

转载 Linux 中环境变量设置

  本文主要整理自以下博文:  .bash_profile和.bashrc的什么区别及启动过程  linux环境变量设置方法总结(PATH/LD_LIBRARY_PATH).bash_profile 和 .bashrc 区别相关文件介绍  /etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从 /etc/profile....

2015-11-16 17:34:00 90

转载 补码的作用

  之前学习原码、反码和补码,只知道它们是怎么计算的,却并不清楚为什么要引入这些概念。看了博文计算机中数的表示才明白具体原因。  引入补码这些概念是为了实现减法,即将减法转化为加法,因为计算机中并不支持减法器。  引入补码有两大优势:  1. 统一加法和减法运算;  2. 符号位也参与运算。  这对简化和复用计算机电路设计能带来大大好处。转载于:https://w...

2015-10-05 17:08:00 117

转载 GDB 资料汇总

  很全的关于 GDB 调试的指导:  GDB中应该知道的几个调试方法  用 GDB 调试程序  100个gdb调试小技巧  CGDB中文手册  Beej's Quick Guide to GDB转载于:https://www.cnblogs.com/xiehongfeng100/p/4855809.html...

2015-10-05 15:35:00 94

转载 段错误

  前些日子深信服面试,面试官问到了如何调试段错误,一时还真不知道如何回答。虽然偶尔会遇到段错误,但都是程序运行提示段错误后回去修改代码,而没有深入去了解。段错误是什么?  参考维基百科,段错误的一个比较完整的定义如下:In computing, a segmentation fault (often shortened to segfault) or access vi...

2015-10-05 11:15:00 101

转载 如何实现一个malloc(转)

  本文转自博文如何实现一个malloc。就如作者本人所说,该博文大量参考了A malloc Tutorial,所以对照着阅读这两篇文章更能加深理解。  任何一个用过或学过C的人对malloc都不会陌生。大家都知道malloc可以分配一段连续的内存空间,并且在不再使用时可以通过free释放掉。但是,许多程序员对malloc背后的事情并不熟悉,许多人甚至把malloc当做操作系统...

2015-10-03 13:55:00 538

转载 浮点数的大小比较为什么不能用等号?

  前些天参加深信服面试,面试官问了这样一个问题:浮点数的大小比较为什么不能用等号?那时就没回答好,因为自己一直把“浮点数大小比较不能够用等号”当做默认事实而没有去深究其背后原理。本文将试着解释这个事实。小数在计算机中的表示  计算机中是如何存储和表达数字的?对于整数,情况比较简单,直接按照数学中的进制转换方法处理即可,即连续除以2取余。这并不是难点,真正的难点在于小数是如何转换...

2015-10-01 16:54:00 262

转载 C/C++ Volatile关键词深度剖析(转)

  本文转载自博文C/C++ Volatile关键词深度剖析。背景  前几天,发了一条如下的微博 (关于C/C++ Volatile关键词的使用建议):    此微博,引发了朋友们的大量讨论:赞同者有之;批评者有之;当然,更多的朋友,是希望我能更详细的解读C/C++ Volatile关键词,来佐证我的微博观点。而这,正是我写这篇博文的初衷:本文,将详细分析C/C++ Vo...

2015-10-01 11:17:00 107

转载 信号量

几个关键名词原子操作  原子操作:一个或多个指令的序列,对外是不可分的,即没有其他进程可以看到其中间状态或者中断此操作。互斥与同步  互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。  同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经...

2015-09-27 16:19:00 128

转载 二分查找有序数组

  昨天百度面试,问了这样一道题:  对于一个有序字符串数组,用二分法查找某一字符串是否存在于该字符串数组中。函数原型为:bool BinarySearch(const vector<string>& array, const string& target)  注意这里的有序指的是字典序,如字符串数组 a, ab, ac, bc, cd, ...

2015-09-24 11:23:00 193

转载 libevent之event_base

  event_base是libevent的事务处理框架,负责事件注册、删除等,属于Reactor模式中的Reactor。event_base结构体  event_base结构体定义于<event_internal.h>中: 1 struct event_base { 2 /** Function pointers and other data...

2015-09-22 11:45:00 114

转载 libevent之eventop

  在之前博文libevent之Reactor模式中,我们知道Reactor模式中一个重要的组件就是事件多路分发机制(event demultiplexer)。而在libevent中,对事件多路分发机制的支持依赖于操作系统支持的多路复用机制(select、poll、epoll等)。eventop  libevent定义了一个顶层的结构体eventop(event option),...

2015-09-21 00:14:00 112

转载 libevent之event

  就如libevent官网上所写的“libevent - an event notification library”,libevent就是一个基于事件通知机制的库,可以看出event是整个库的核心。event就是Reactor框架中的事件处理程序组件(event_handler),它提供了函数接口,供Reactor在事件发生时调用,以执行相应的事件处理,通常它会绑定一个有效的句柄。...

2015-09-19 15:28:00 112

转载 libevent之Reactor模式

  通过前边的一篇博文轻量级网络库libevent初探,我们知道libevent实际上是封装了不同操作系统下的/dev/poll、kqueue、event ports、select、poll和epoll事件机制,从而给我们提供一个统一的接口。  libevent采用了Reactor I/O 设计模式,而Reactor是基于同步I/O机制的,所以libevent实际是一个基于同步I/O...

2015-09-18 23:29:00 167

转载 虚函数杂记

  在之前的一篇博文C++中的虚函数表是什么时期建立的?,我们知道虚函数表在编译期间就生成了,但是它被放置在可执行文件的什么地方呢?虚函数表放置位置  为了解决这个问题,我们先来看下C++对象模型。  在C++对象模型中,nonstatic data members被配置于每一个class object中,static data members则被存放在个别的class ob...

2015-09-15 00:22:00 102

转载 (C++)string类杂记

  本文特记录C++中string类(注意string是一个类)的一些值得注意的地方。string类的实例是以‘\0'结束的吗?  这个问题有时还真容易混淆,因为我们可能会将 C++ 语言中的string类的实例跟 C 语言的字符串相混淆。在 C 语言中,字符串是以’\0'结束的字符数组。但C++还提供了string类,跟 C 语言字符串是完全不一样的东西,但却容易相互混淆。...

2015-09-12 23:28:00 94

转载 理解inode

  inode是Linux操作系统中的一种数据结构,它包含了与文件系统中各个文件相关的一些重要信息。在Linux中创建文件系统时,同时将会创建大量的 inode 。通常,文件系统磁盘空间中大约百分之一空间分配给了inode表。  在展开inode前,我们先简单看下虚拟文件系统(Virtual File System, VFS)。虚拟文件系统(VFS)  Linux 有着极其丰...

2015-09-11 22:23:00 73

转载 霍夫曼编码

  最近还接触到了一些关于霍夫曼编码的题目,如下一题:  某段文本中各个字母出现的频率分别是{a:4,b:3,o:12,h:7,i:10},使用哈夫曼编码,则哪种是可能的编码:( )  Aa(000)b(001)h(01)i(10)o(11)  Ba(0000)b(0001)h(001)o(01)i(1)  Ca(000)b...

2015-09-09 21:19:00 259

转载 类型转换

  本文整理自博文【C++专题】static_cast, dynamic_cast, const_cast探讨和c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast。  在C/C++中,类型转换可分为隐式类型转换和显示类型转换。隐式类型转换  隐式类型转换分为以下几种情况:  1)算术转换(Arit...

2015-09-09 16:43:00 75

转载 如何判断你的机器是大端还是小端的?

大端小端概念  小端就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。  大端就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。  举一个例子,比如数字0x12 34 56 78在内存中的表示形式为:  A. 大端模式:  低地址 -----------------> 高地址  0x12 | 0x34 | 0x56 | 0x78...

2015-09-05 17:59:00 134

转载 生产者消费者模式(转)

  本文转载自博文系列架构设计:生产者/消费者模式。文中对原文格式进行了稍加整理。概述  今天打算来介绍一下“生产者/消费者模式”,这玩意儿在很多开发领域都能派上用场。由于该模式很重要,打算分几个帖子来介绍。今天这个帖子先来扫盲一把。如果你对这个模式已经比较了解,请跳过本扫盲帖,直接看下一个帖子(关于该模式的具体应用)。  看到这里,可能有同学心中犯嘀咕了:在四人帮(GOF)的...

2015-09-04 22:32:00 70

转载 读写锁机制

  在以前的一篇博文Linux多线程编程初探中,只提到了用于线程同步的互斥锁、条件变量,而没有提及读写锁(read-write lock)。  本文主要整理自以下文章:  读写锁(read-write lock)机制-----多线程同步问题的解决  请用普通的互斥锁编程实现一个读写锁读写锁  读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只...

2015-09-04 18:21:00 125

转载 C++中的单例模式

  最近遇到几道类似的笔试题:  1.请实现一个单例模式的类,要求线程安全。  2.用C++设计一个不能被继承的类。  3.如何定义一个只能在堆上(栈上)生成对象的类?  这些题目本质上都跟单例模式相关。单例模式  单例模式就是保证一个类只有一个实例,并提供一个访问它的全局访问点。首先,需要保证一个类只有一个实例;在类中,要构造一个实例,就必须调用类的构造函...

2015-09-04 14:34:00 62

转载 网络知识点大杂烩

  本文是个大杂烩,集中记述个人平时学习或遇到的关于网络的知识点。SYN Flood  我们先来看一下TCP/IP三次握手的过程:    1)Host A 发送一个TCPSYNchronize 包到 Host B  2)Host B 收到 Host A的SYN  3)Host B 发送一个SYNchronize-ACKnowledgement  4)Host A ...

2015-08-29 00:06:00 97

转载 网络I/O中的同步、异步、阻塞和非阻塞概念

  在学习网络编程过程中,经常会把这几个概念搞混淆。同步I/O与异步I/O区别  我们先来看一下操作I/O时涉及的对象和步骤(这里我们以read为例):    这里会涉及到两个系统对象,一个是调用这个I/O的应用进程(或线程),另一个就是系统内核。当一个read操作发生时,它会经历两个阶段:1)等待数据就绪(可读);2)将数据从内核拷贝到应用进程中 。这两个阶段很重要,因为...

2015-08-27 14:44:00 96

转载 Linux下进程通信之管道

  每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。如下图所示。    目前进程通信的方式有:管道FI...

2015-08-25 14:54:00 62

转载 关于指针的另一些问题

  之前多多少少已经整理或写过了一些跟指针有关的博文:  C++指针和引用  C++智能指针及其简单实现  函数指针和回调函数  指针和数组解析  指针的类型与指针所指向的类型但对指针还是感觉一知半懂,所以再补充些相关知识。指针作为函数参数  先看一个小例子1: 1 #include <stdio.h> 2 #include &l...

2015-08-16 12:12:00 83

转载 指针的类型与指针所指向的类型

  指针的类型和指针所指向的类型很明显是不一样的东西,但好多情况下却容易忽视它们的区别。指针的类型是指针自身的类型,而指针所指向的类型是指针指向的数据(内存)的类型。指针的类型  从语法上来看,我们只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。如:1 int *ptr; //指针的类型是 int*2 char *ptr; ...

2015-08-15 20:28:00 563

转载 变量的声明与定义

  请看下边小程序:1 int i;   // 定义性声明(defining declaration)或定义(definition)2 extern int j;   // 引用性声明(referencing declaration)3 int *k = nullptr; // 定义性声明(defining declaration)...

2015-08-15 19:48:00 54

转载 strcpy实现

常见strcpy实现    一个常见的strcpy实现如下: 1 char *my_strcpy(char *dst, const char *src) 2 { 3 if (dst == nullptr || src == nullptr) // 写成!dst或dst == 0都不推荐 4 return nullptr; 5 ...

2015-08-13 13:42:00 69

转载 C++多重继承与虚拟继承

  本文只是粗浅讨论一下C++中的多重继承和虚拟继承。多重继承中的构造函数和析构函数调用次序  我们先来看一下简单的例子: 1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 private: 7 char idA; 8 9 public:...

2015-08-06 17:26:00 65

转载 C++ inline函数

  在一个程序中,函数调用需要一定的时间和空间(保护现场)的开销。当我们频繁调用小函数时,所造成的函数调用开销就相对(调用复杂函数)就比较大了,所以我们需要像C语言的宏定义函数一样(预编译时会有宏展开),将这些小函数代码(在编译时)复制到调用者中,以减少函数调用开销。为了做到这一步,我们需要在函数前加一个关键字inline,告诉编译器该函数为内联函数,需要特殊处理。不过,不同编译器对内联...

2015-08-06 00:17:00 106

转载 vector的简易实现

  vector的简易实现整理自《数据结构与算法分析–C++描述(第3版)》3.4节“向量的实现”。详细可参考《STL源码分析》4.2节。  具体实现代码如下: 1 #ifndef VECTOR_H 2 #define VECTOR_H 3 4 #include <iostream> 5 using namespace std; ...

2015-08-05 23:48:00 77

转载 类成员函数后边加const

  本文主要整理自stackoverflow上的一个对问题Meaning of “const” last in a C++ method declaration?的回答。测试1  对于下边的程序,关键字const的作用在哪里? 1 #include <iostream> 2 3 class MyClass 4 { 5 private: 6...

2015-08-05 23:43:00 90

转载 拷贝构造函数与赋值运算符重载函数要点

拷贝构造函数一个小例子  最近在《剑指Offer》上看到了一道题(程序如下),要求我们分析编译运行的结果,并提供3个选项: A. 编译错误; B. 编译成功,运行时程序崩溃;C. 编译运行正常,输出10。 1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 pri...

2015-08-04 10:29:00 115

转载 轻量级网络库libevent概况

  Libevent is a library for writing fast portable nonblocking IO.  libevent是一个为编写快速可移植的非阻塞IO程序而设计的。libevent组件  libevent包括了以下组件:  1.evutil  Generic functionality to abstract out the dif...

2015-07-31 20:54:00 99

转载 轻量级网络库libevent初探

  本文是关于libevent库第一篇博文,主要由例子来说明如何利用该库。后续博文再深入研究该库原理。libevent库简介  就如libevent官网上所写的“libevent - an event notification library”,libevent就是一个基于事件通知机制的库,支持/dev/poll、kqueue、event ports、select、poll和ep...

2015-07-31 15:24:00 122

空空如也

空空如也

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

TA关注的人

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