- 博客(202)
- 收藏
- 关注
转载 由 -128 引发的思考
对于 8 位的有符号数而言,它的范围在 -128~127。该数的范围若在-127~127,那还好理解,但关键该数还可取值 -128。那 -128 是怎么来的呢?-128 的来源说法一 有人就说了,8 位的有符号数除了表示 -127~127,还剩下一个二进制数“1000 0000B”没有用,这太浪费了,所以用来表示 -128。这种说法很明显是站不住脚的。原因主要有两个...
2015-12-20 19:55:00
277
转载 Java 与 C++ 不一样的地方(持续更新中...)
本文仅以记录 Java 与 C++ 不同之处,以备随时查询。Java 程序运行机制 Java 是一门编译解释型的语言,即它在运行的过程中既需要编译也需要解释。如下图表示的是 Java 程序运行机制: 上图中,*.java 是用 Java 程序设计语言编写的源程序,通过 javac 命令编译成 *.class 文件,在操作系统之上是由 Java 虚拟机来运行以...
2015-12-20 17:35:00
275
转载 Linux 下源码安装大杂烩
本文仅以记录平常源码安装部分软件是需注意的关键点。 有时为了方便,如在 Ubuntu 系统中,采用 sudo apt-get install soft-version 来安装某一版本的软件显得更为便捷和少出错。Python 升级 关于 Python 源码安装教程很多,如博文linux下python开发环境之一——安装python。 在 CentOS 6.5,Py...
2015-11-24 22:49:00
282
转载 Linux 开发环境搭建
本文多参考自网上资料,在此多谢这些资料的作者的辛勤劳动! 另外,本文所用 Linux 版本为 CentOS 7.1。终端配置安装及配置 Zsh 在默认情况下,Linux 下的终端是 bash,但其跟 zsh 相比起来还是有点差距。博文使用 zsh 的九个理由就讲了九个使用 zsh 的理由。 安装 zsh,直接利用 yum 即可:sudo yum in...
2015-11-17 17:19:00
205
转载 Linux 中环境变量设置
本文主要整理自以下博文: .bash_profile和.bashrc的什么区别及启动过程 linux环境变量设置方法总结(PATH/LD_LIBRARY_PATH).bash_profile 和 .bashrc 区别相关文件介绍 /etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从 /etc/profile....
2015-11-16 17:34:00
121
转载 补码的作用
之前学习原码、反码和补码,只知道它们是怎么计算的,却并不清楚为什么要引入这些概念。看了博文计算机中数的表示才明白具体原因。 引入补码这些概念是为了实现减法,即将减法转化为加法,因为计算机中并不支持减法器。 引入补码有两大优势: 1. 统一加法和减法运算; 2. 符号位也参与运算。 这对简化和复用计算机电路设计能带来大大好处。转载于:https://w...
2015-10-05 17:08:00
146
转载 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
123
转载 段错误
前些日子深信服面试,面试官问到了如何调试段错误,一时还真不知道如何回答。虽然偶尔会遇到段错误,但都是程序运行提示段错误后回去修改代码,而没有深入去了解。段错误是什么? 参考维基百科,段错误的一个比较完整的定义如下:In computing, a segmentation fault (often shortened to segfault) or access vi...
2015-10-05 11:15:00
120
转载 如何实现一个malloc(转)
本文转自博文如何实现一个malloc。就如作者本人所说,该博文大量参考了A malloc Tutorial,所以对照着阅读这两篇文章更能加深理解。 任何一个用过或学过C的人对malloc都不会陌生。大家都知道malloc可以分配一段连续的内存空间,并且在不再使用时可以通过free释放掉。但是,许多程序员对malloc背后的事情并不熟悉,许多人甚至把malloc当做操作系统...
2015-10-03 13:55:00
584
转载 浮点数的大小比较为什么不能用等号?
前些天参加深信服面试,面试官问了这样一个问题:浮点数的大小比较为什么不能用等号?那时就没回答好,因为自己一直把“浮点数大小比较不能够用等号”当做默认事实而没有去深究其背后原理。本文将试着解释这个事实。小数在计算机中的表示 计算机中是如何存储和表达数字的?对于整数,情况比较简单,直接按照数学中的进制转换方法处理即可,即连续除以2取余。这并不是难点,真正的难点在于小数是如何转换...
2015-10-01 16:54:00
308
转载 C/C++ Volatile关键词深度剖析(转)
本文转载自博文C/C++ Volatile关键词深度剖析。背景 前几天,发了一条如下的微博 (关于C/C++ Volatile关键词的使用建议): 此微博,引发了朋友们的大量讨论:赞同者有之;批评者有之;当然,更多的朋友,是希望我能更详细的解读C/C++ Volatile关键词,来佐证我的微博观点。而这,正是我写这篇博文的初衷:本文,将详细分析C/C++ Vo...
2015-10-01 11:17:00
137
转载 信号量
几个关键名词原子操作 原子操作:一个或多个指令的序列,对外是不可分的,即没有其他进程可以看到其中间状态或者中断此操作。互斥与同步 互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。 同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经...
2015-09-27 16:19:00
163
转载 二分查找有序数组
昨天百度面试,问了这样一道题: 对于一个有序字符串数组,用二分法查找某一字符串是否存在于该字符串数组中。函数原型为:bool BinarySearch(const vector<string>& array, const string& target) 注意这里的有序指的是字典序,如字符串数组 a, ab, ac, bc, cd, ...
2015-09-24 11:23:00
217
转载 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
153
转载 libevent之eventop
在之前博文libevent之Reactor模式中,我们知道Reactor模式中一个重要的组件就是事件多路分发机制(event demultiplexer)。而在libevent中,对事件多路分发机制的支持依赖于操作系统支持的多路复用机制(select、poll、epoll等)。eventop libevent定义了一个顶层的结构体eventop(event option),...
2015-09-21 00:14:00
142
转载 libevent之event
就如libevent官网上所写的“libevent - an event notification library”,libevent就是一个基于事件通知机制的库,可以看出event是整个库的核心。event就是Reactor框架中的事件处理程序组件(event_handler),它提供了函数接口,供Reactor在事件发生时调用,以执行相应的事件处理,通常它会绑定一个有效的句柄。...
2015-09-19 15:28:00
152
转载 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
205
转载 虚函数杂记
在之前的一篇博文C++中的虚函数表是什么时期建立的?,我们知道虚函数表在编译期间就生成了,但是它被放置在可执行文件的什么地方呢?虚函数表放置位置 为了解决这个问题,我们先来看下C++对象模型。 在C++对象模型中,nonstatic data members被配置于每一个class object中,static data members则被存放在个别的class ob...
2015-09-15 00:22:00
125
转载 (C++)string类杂记
本文特记录C++中string类(注意string是一个类)的一些值得注意的地方。string类的实例是以‘\0'结束的吗? 这个问题有时还真容易混淆,因为我们可能会将 C++ 语言中的string类的实例跟 C 语言的字符串相混淆。在 C 语言中,字符串是以’\0'结束的字符数组。但C++还提供了string类,跟 C 语言字符串是完全不一样的东西,但却容易相互混淆。...
2015-09-12 23:28:00
115
转载 理解inode
inode是Linux操作系统中的一种数据结构,它包含了与文件系统中各个文件相关的一些重要信息。在Linux中创建文件系统时,同时将会创建大量的 inode 。通常,文件系统磁盘空间中大约百分之一空间分配给了inode表。 在展开inode前,我们先简单看下虚拟文件系统(Virtual File System, VFS)。虚拟文件系统(VFS) Linux 有着极其丰...
2015-09-11 22:23:00
120
转载 霍夫曼编码
最近还接触到了一些关于霍夫曼编码的题目,如下一题: 某段文本中各个字母出现的频率分别是{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
285
转载 类型转换
本文整理自博文【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
99
转载 如何判断你的机器是大端还是小端的?
大端小端概念 小端就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。 大端就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。 举一个例子,比如数字0x12 34 56 78在内存中的表示形式为: A. 大端模式: 低地址 -----------------> 高地址 0x12 | 0x34 | 0x56 | 0x78...
2015-09-05 17:59:00
173
转载 生产者消费者模式(转)
本文转载自博文系列架构设计:生产者/消费者模式。文中对原文格式进行了稍加整理。概述 今天打算来介绍一下“生产者/消费者模式”,这玩意儿在很多开发领域都能派上用场。由于该模式很重要,打算分几个帖子来介绍。今天这个帖子先来扫盲一把。如果你对这个模式已经比较了解,请跳过本扫盲帖,直接看下一个帖子(关于该模式的具体应用)。 看到这里,可能有同学心中犯嘀咕了:在四人帮(GOF)的...
2015-09-04 22:32:00
83
转载 读写锁机制
在以前的一篇博文Linux多线程编程初探中,只提到了用于线程同步的互斥锁、条件变量,而没有提及读写锁(read-write lock)。 本文主要整理自以下文章: 读写锁(read-write lock)机制-----多线程同步问题的解决 请用普通的互斥锁编程实现一个读写锁读写锁 读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只...
2015-09-04 18:21:00
153
转载 C++中的单例模式
最近遇到几道类似的笔试题: 1.请实现一个单例模式的类,要求线程安全。 2.用C++设计一个不能被继承的类。 3.如何定义一个只能在堆上(栈上)生成对象的类? 这些题目本质上都跟单例模式相关。单例模式 单例模式就是保证一个类只有一个实例,并提供一个访问它的全局访问点。首先,需要保证一个类只有一个实例;在类中,要构造一个实例,就必须调用类的构造函...
2015-09-04 14:34:00
72
转载 网络知识点大杂烩
本文是个大杂烩,集中记述个人平时学习或遇到的关于网络的知识点。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
123
转载 网络I/O中的同步、异步、阻塞和非阻塞概念
在学习网络编程过程中,经常会把这几个概念搞混淆。同步I/O与异步I/O区别 我们先来看一下操作I/O时涉及的对象和步骤(这里我们以read为例): 这里会涉及到两个系统对象,一个是调用这个I/O的应用进程(或线程),另一个就是系统内核。当一个read操作发生时,它会经历两个阶段:1)等待数据就绪(可读);2)将数据从内核拷贝到应用进程中 。这两个阶段很重要,因为...
2015-08-27 14:44:00
119
转载 Linux下进程通信之管道
每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。如下图所示。 目前进程通信的方式有:管道FI...
2015-08-25 14:54:00
88
转载 关于指针的另一些问题
之前多多少少已经整理或写过了一些跟指针有关的博文: C++指针和引用 C++智能指针及其简单实现 函数指针和回调函数 指针和数组解析 指针的类型与指针所指向的类型但对指针还是感觉一知半懂,所以再补充些相关知识。指针作为函数参数 先看一个小例子1: 1 #include <stdio.h> 2 #include &l...
2015-08-16 12:12:00
97
转载 指针的类型与指针所指向的类型
指针的类型和指针所指向的类型很明显是不一样的东西,但好多情况下却容易忽视它们的区别。指针的类型是指针自身的类型,而指针所指向的类型是指针指向的数据(内存)的类型。指针的类型 从语法上来看,我们只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。如:1 int *ptr; //指针的类型是 int*2 char *ptr; ...
2015-08-15 20:28:00
637
转载 变量的声明与定义
请看下边小程序:1 int i; // 定义性声明(defining declaration)或定义(definition)2 extern int j; // 引用性声明(referencing declaration)3 int *k = nullptr; // 定义性声明(defining declaration)...
2015-08-15 19:48:00
65
转载 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
80
转载 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
78
转载 C++ inline函数
在一个程序中,函数调用需要一定的时间和空间(保护现场)的开销。当我们频繁调用小函数时,所造成的函数调用开销就相对(调用复杂函数)就比较大了,所以我们需要像C语言的宏定义函数一样(预编译时会有宏展开),将这些小函数代码(在编译时)复制到调用者中,以减少函数调用开销。为了做到这一步,我们需要在函数前加一个关键字inline,告诉编译器该函数为内联函数,需要特殊处理。不过,不同编译器对内联...
2015-08-06 00:17:00
129
转载 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
106
转载 类成员函数后边加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
111
转载 拷贝构造函数与赋值运算符重载函数要点
拷贝构造函数一个小例子 最近在《剑指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
138
转载 轻量级网络库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
114
转载 轻量级网络库libevent初探
本文是关于libevent库第一篇博文,主要由例子来说明如何利用该库。后续博文再深入研究该库原理。libevent库简介 就如libevent官网上所写的“libevent - an event notification library”,libevent就是一个基于事件通知机制的库,支持/dev/poll、kqueue、event ports、select、poll和ep...
2015-07-31 15:24:00
156
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人