自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(636)
  • 资源 (9)
  • 收藏
  • 关注

转载 组合模式

意图:       将对象组合成树形结构以表示‘部分-整体’的层次结构,所以有时候又叫做部分-整体模式。组合模式使得用户对单个对象和组合对象的使用具有一致性。,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 适用性:       当你发现需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合...

2018-05-14 19:52:21 122

转载 c++ 职责链模式

c++ 职责链模式(Chain of Responsibility) 职 责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处 理它为止。其思想很简单,考虑员工要求加薪。公司的管理者一共有三级,总经理、总监、经理,如果一个员工要求加薪,应该向主管的经理申请,如果加薪的数量 在经理的职权内,那么经理可以直接批...

2018-05-14 16:44:31 343

转载 【C++】状态模式

状态模式也是设计模式的一种,这种设计模式思想不复杂,就是实现起来的代码有点复杂。主要出现在类传递参数上,尤其是C++这种不能直接类间互相调用都语言,实现状态模式更难,当然,一切设计模式都是为了更简短的主函数。状态模式是当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类,主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同的一系列类当...

2018-05-14 15:56:25 259

转载 c++ 迭代器模式(iterator)

提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍 历的时候,就应该考虑用迭代器模式。同时需要对聚集有多种方式遍历时,可以考虑用迭代器模式。为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪 一项等统一接口。迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让...

2018-05-13 22:05:00 921

转载 unique_ptr的一个简单实现

//default deleter for unique_ptr template<typename T> struct DefaultDeleter { void operator()(T *p) { if (p) { delete p; ...

2018-05-12 16:53:45 1300

转载 C++静态库与动态库

这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二...

2018-05-10 13:51:50 92

转载 工作中常用的Linux命令:ipcrm命令

ipcrm1. 命令功能  通过指定ID删除删除IPC资源,同时将与IPC对象关联的数据一并删除,只有超级用户或IPC资源创建者能够删除2. 使用方法  ipcrm -M shmkey    移除用shmkey创建的共享内存段  ipcrm -m shmid    移除用shmid标识的共享内存段  ipcrm -S semkey    移除用semkey创建的信号量  ipcrm -s semi...

2018-05-08 10:59:16 361

转载 linux ipcs命令详解

进程间通信概述进程间通信有如下的目的:1、数据传输,一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M之间;2、共享数据,多个进程想要操作共享数据,一个进程对数据的修改,其他进程应该立刻看到;3、通知事件,一个进程需要向另一个或一组进程发送消息,通知它们发生了某件事情;4、资源共享,多个进程之间共享同样的资源。为了做到这一点,需要内核提供锁和同步机制;5、进程控制,有些进程希望完...

2018-05-08 10:58:10 27505

转载 linux free命令详解

free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。如果加上 -h 选项,输出的结果会友好很多:有时我们需要持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数:free -h -s 3上面的命令每隔 3 秒输出一次内存的使用情况,直到你按下 ctrl + c。(Ubuntu 16.04 中默认的 free 版本有 bug,使用 -s 选项时报错,所...

2018-05-07 17:09:49 592

转载 Linux SWAP 深度解读

swap、swappiness及kswapd原理,swap分区优先级的妙用。真可谓一文在手,SWAP从此不再忧愁。敬请笑纳。概述本文讨论的 swap基于Linux4.4内核代码 。Linux内存管理是一套非常复杂的系统,而swap只是其中一个很小的处理逻辑。希望本文能让读者了解Linux对swap的使用大概是什么样子。阅读完本文,应该可以帮你解决以下问题:1、 swap到底是干嘛的?2、 swap...

2018-05-07 16:49:29 33059 3

转载 linux 操作系统中buffer 和 cache 的作用

Buffer 和 cache (它们都是占用内存)。Buffer: 系统分配但未被使用的buffer 数量。  Buffer 缓冲区:  是块设备的读写缓冲区,buffer 是I/O 缓存,用于内存和硬盘(或其他 I/O设备)之间的数据交换的速度而设计的。 分析:1、通常在写一个非常大的文件,文件会被分成一个个的小 block块-->一直往内存上写-->然后再写入磁盘,,  这个文件非...

2018-05-07 16:22:27 1040

转载 硬盘的那些事(主分区、扩展分区、逻辑分区、活动分区、系统分区、启动分区、引导扇区、MBR等

主分区,扩展分区,逻辑分区,活动分区,系统分区,启动分区。。。。。。。。。主引导扇区,MBR,bootloader。。。。。。。。。。各种概念,你都清楚什么意思吗?花了一天的时间终于研究清楚了,网上好多帖子的解释都是错的,或者没有深入到本质,都是什么C盘啊,D盘啊,都被windows洗脑了。浪费了好好长时间。主分区:实际上在早期的硬盘分区中并没有主分区、扩展分区和逻辑分区的概念,每个分区的类型都是...

2018-05-07 10:22:33 927

转载 linux c++ 服务器端开发面试必看书籍

由于很多朋友希望加入到Linux c++服务器端开发的队伍中,本人就结合自己的面试经历并整理了自己阅读的相关书籍,同大家分享,一起进步。人个认为以下是进入这个方向的必看书籍,各系列难度由浅入深的排序。题外话: 推荐一个 github 上的 开源书籍,有各种语言版本的,建议看 英文版 ,当然也有 中文版 非常之棒!!一、算法基础系列数据结构基础(C语言版)》朱仲涛 译《剑指Offer》《编程之美》《...

2018-05-07 10:18:13 955

转载 C++ 高性能服务器网络框架设计细节

前言这篇文章我们将介绍服务器的开发,并从多个方面探究如何开发一款高性能高并发的服务器程序。需要注意的是一般大型服务器,其复杂程度在于其业务,而不是在于其代码工程的基本框架。大型服务器一般有多个服务组成,可能会支持CDN,或者支持所谓的“分布式”等,这篇文章不会介绍这些东西,因为不管结构多么复杂的服务器,都是由单个服务器组成的。所以这篇文章的侧重点是讨论单个服务程序的结构,而且这里的结构指的也是单个...

2018-05-07 10:03:19 903

转载 Linux之lsof命令

lsof命令简介:lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以,lsof的功能很强大。一般root用户才能执行lsof命令,普通用户可以看见/usr/sbin/lsof命令,但是普通用户执行会显示“permission denied”。因此通过lsof工具能...

2018-04-27 16:38:50 2832

转载 C语言include预处理命令与多文件编译

#include预处理命令几乎使我们在第一次接触C的时候就会碰到的预处理命令,可我现在还不怎么清楚,这次争取一次搞懂。一、#include预处理指令的基本使用预处理指令可以将别处的源代码内容插入到现在的位置,可以标识出某一段程序代码只有在特定条件下才会被编译。#include预处理指令告诉预处理器,将指定头文件的内容插入到预处理器指令的相应位置。指定插入头文件有两种方式:1 #include &l...

2018-04-27 10:56:17 2320

转载 深入理解C语言内存管理

之前在学Java的时候对于Java虚拟机中的内存分布有一定的了解,但是最近在看一些C,发现居然自己对于C语言的内存分配了解的太少。问题不能拖,我这就来学习一下吧,争取一次搞定。 在任何程序设计环境及语言中,内存管理都十分重要。内存管理的基本概念分析C语言内存的分布先从Linux下可执行的C程序入手。现在有一个简单的C源程序hello.c#include <stdio.h&g...

2018-04-27 10:45:00 272

转载 Linux lsof命令详解和使用示例(总结的比较详细)

lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件,所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打...

2018-04-27 10:27:47 939

转载 top命令详解

top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。语法top(选项)选项-b:以批处理模式操作;-c:显示完整的治命令;-d:屏幕刷新间隔时间;-I:忽略失效过程;-s:保密模式;-S:累积模式;-i<时间>:设置间隔时间;-u<用户名>:指定用户名;-p&...

2018-04-26 15:41:31 159

转载 ps命令详解

ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。语法ps(选项)选项-a:显示所有终端机下执行的程序,除了阶段作业领导者之外。a:显示现行终端机下的所有程序,包...

2018-04-26 11:40:57 675

转载 pstree命令

pstree命令以树状图的方式展现进程之间的派生关系,显示效果比较直观。语法pstree(选项)选项-a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示;-c:不使用精简标示法;-G:使用VT100终端机的列绘图字符;-h:列出树状图时,特别标明现在执行的程序;-H<程序识别码>:此参数的效果和指定"-h"参数类似,但特别标明指定的程序;-l:采用长列格式显示树状图...

2018-04-26 11:36:39 267

转载 vmstat命令详解

vmstat命令的含义为显示虚拟内存状态(“Viryual Memor Statics”),但是它可以报告关于进程、内存、I/O等系统整体运行状态。语法vmstat(选项)(参数)选项-a:显示活动内页;-f:显示启动后创建的进程总数;-m:显示slab信息;-n:头信息仅显示一次;-s:以表格方式显示事件计数器和内存状态;-d:报告磁盘状态;-p:显示指定的硬盘分区状态;-S:输出...

2018-04-26 10:03:15 170

转载 Active UNIX domain Sockets--------由netstat想到的

UNIX Domain Socket IPCsocket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应...

2018-04-26 09:56:52 2311

转载 Linux netstat命令详解

说明:netstat命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行netstat后,其输出结果为Active Internet connections (w/o servers)Proto Recv-Q Send-Q Local ...

2018-04-26 09:49:35 177

转载 Linux内核内存管理算法Buddy和Slab

有了前两节的学习相信读者已经知道CPU所有的操作都是建立在虚拟地址上处理(这里的虚拟地址分为内核态虚拟地址和用户态虚拟地址),CPU看到的内存管理都是对page的管理,接下来我们看一下用来管理page的经典算法--Buddy。Buddy分配算法假设这是一段连续的页框,阴影部分表示已经被使用的页框,现在需要申请一个连续的5个页框。这个时候,在这段内存上不能找到连续的5个空闲的页框,就会去另一段内存上...

2018-04-25 16:17:17 2265 1

转载 CPU是如何访问内存的?

内存管理可以说是一个比较难学的模块,之所以比较难学。一是内存管理涉及到硬件的实现原理和软件的复杂算法,二是网上关于内存管理的解释有太多错误的解释。希望可以做个内存管理的系列,从硬件实现到底层内存分配算法,再从内核分配算法到应用程序内存划分,一直到内存和硬盘如何交互等,彻底理解内存管理的整个脉络框架。本节主要讲解硬件原理和分页管理。CPU通过MMU访问内存我们先来看一张图:从图中可以清晰地看出,CP...

2018-04-25 16:16:20 12674 4

转载 物理地址和虚拟地址的分布

CPU拿到内存后就可以向其它人(kernel的其它模块、内核线程、用户空间进程、等等)提供服务,主要包括:以虚拟地址(VA)的形式,为应用程序提供远大于物理内存的虚拟地址空间(Virtual Address Space)每个进程都有独立的虚拟地址空间,不会相互影响,进而可提供非常好的内存保护(memory protection)提供内存映射(Memory Mapping)机制,以便把物理内存、I/...

2018-04-25 16:15:51 2163

转载 Linux用户态进程的内存管理

相信大家都知道对用户态的内存消耗对象是进程,应用开发者面对的所有代码操作最后的落脚点都是进程,这也是说为什么内存和进程两个知识点的重要性,理解了内存和进程两大法宝,对所有软件开发的理解都会有了全局观(关于进程的知识以后再整理和大家分享)。下面闲话少说,开始本篇的内容——进程的内存消耗和泄漏进程的虚拟地址空间VMA(Virtual Memory Area)在linux操作系统中,每个进程都通过一个t...

2018-04-25 16:13:56 1192

转载 浅析Linux操作系统工作的基础

简介: 本文根据 Linux™ 系统工作基础的分析,对存储程序计算机、堆栈(函数调用堆栈)机制和中断机制进行概述。文中将为您提供操作系统(内核)如何工作的细节,进一步从宏观概述结合关键点进行微观(CS:EIP、EBP/ESP等的变化)分析。 一、存储程序计算机                                                                      ...

2018-04-25 16:04:04 214

转载 浅析Linux计算机进程地址空间与内核装载ELF

简介: 本文基于Linux™系统对进程创建与加载进行分析,文中实现了Linux库函数fork、exec,剖析内核态执行过程,并进一步展示进程创建过程中进程控制块字段变化信息及ELF文件加载过程。 一、初识Linux进程                                                                                           ...

2018-04-25 15:59:56 270

转载 浅析Linux计算机工作机制

简介: 本文将对 Linux™ 系统计算机的工作机制进行简单概述。文中将为您提供单任务系统如何工作的细节,然后将进一步展示汇编指令在CPU的运行过程,以及由单任务向多任务处理的扩展。♦ gcc用法参考(*表示文件名)– gcc –E –o *.cpp *.c 生成预处理文件– gcc –x cpp-output –S –o *.s *.cpp• gcc –S –o *.s *.c 编译成...

2018-04-25 15:31:37 285

转载 ELF格式与bss段

ELF(Executable Linkable Format)是Linux系统下的一种可执行可链接文件的格式,是COFF格式的变种。在Linux系统中包括了可重定位文件(.o文件),可执行文件(/bin/bash文件),共享目标文件(.so)和核心转储文件(core dump)。ELF文件头(ELF Header):位于ELF文件的头部,包含了描述整个文件的基本属性。代码段(.text):用于存放...

2018-04-25 11:44:45 619

转载 Linux上的TIME_WAIT和tcp_fin_timeout

当Linux服务器的TIME_WAIT过多时,通常会想到去修改参数降低TIME_WAIT时长,以减少TIME_WAIT数量,但Linux并没有提供这样的接口,除非重新编译内核。Linux默认的TIME_WAIT时长一般是60秒,定义在内核的include/net/tcp.h文件中:#define TCP_TIMEWAIT_LEN (60*HZ)/* how long to wait to dest...

2018-04-25 11:43:52 4975

转载 LINUX下目标文件的BSS段、数据段、代码段

操作系统:ubuntu 13.04工具:gcc, objdump, readelf参考:《程序员自我修养》代码编译后的机器指令经常被放在代码段里,代码段名为".text";已初始化的全局变量和已初始化的局部静态变量经常放在数据段里,数据段名为".data";未初始化的全局变量和未初始化局部静态变量一般放在“.bss”段里,.bss在文件中不占据空间。字符串常量一般放在“.rodata”段里。通过代...

2018-04-25 11:36:27 565

转载 归并排序的C++实现

归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1;否则将...

2018-04-23 21:38:13 137

转载 阅读 Linux 内核源码——共享内存

介绍我看的是linux-4.2.3的源码。参考了《边干边学——Linux内核指导》(鬼畜的书名)第16章内容,他们用的是2.6.15的内核源码。现在linux中可以使用共享内存的方式有两种POSIX的shm_open()在/dev/shm/下打开一个文件,用mmap()映射到进程自己的内存地址System V的shmget()得到一个共享内存对象的id,用shmat()映射到进程自己的内存地址PO...

2018-04-23 20:13:55 465

转载 linux 共享内存与nginx共享内存

共享内存的实现分为两个步骤:一、 创建共享内存,使用shmget函数。二、 映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数。创建共享内存int shmget(key_t key ,int size,int shmflg)key标识共享内存的键值:0/IPC_PRIVATE。当key的取值为IPC_PRIVATE,则函数shmget将创建一块新的共享内存;如果key的取...

2018-04-23 20:07:22 599

转载 【vim】简介与基本配置

正文vim是一款非常强大的文字编辑软件,是各种类UNIX系统标配的文本编辑工具。相信此文的读者对它应该不会陌生,在这里就不做介绍了。回到顶部1.为什么要使用vim在认识vim之前,我用过好多IDE:Visual Studio, Eclipse, C++ Builder,Source Insight, SlickEdit, Qt Creator等等,但我觉得这些东西都有这样那样的不足(Qt Crea...

2018-04-23 16:33:30 237

转载 【vim】模式与模式切换

正文  很多初学者启动vim后,不知道怎么输入字符:按了半天字母,结果屏幕还是空的。vim和记事本或WORD不一样,不是一打开后就可以输入文字,此时它处于正常模式。vim一共有4个模式:正常模式 (Normal-mode) 插入模式 (Insert-mode)命令模式 (Command-mode)可视模式 (Visual-mode) 注意:方向键(上下左右那几个)可以在vim屏幕里跳来跳去。现在知...

2018-04-23 16:31:07 2520

转载 详谈C++中数组作为函数参数

一、一个例子引发的思考  运行以下代码,请问输出是什么?例子来源于《剑指Offer》,我对书上例子做了修改,让其可以运行。#include<iostream>using namespace std;int GetSize(int data[]) { return sizeof(data);}int main() { int data1[] = {1,2,3,4...

2018-04-23 15:35:56 31396 3

微服务设计(中文完整版)

过去十年中,分布式系统的粒度变得越来越细,包含大量代码的单块应用逐渐转变为自包含的微服务。但开发微服务系统也有一些让人头疼的问题。本书通过大量的例子,全面讨论了系统架构师和管理员在构建、管理和演化微服务架构时必须考虑的问题,并给出了实用的建议。

2018-05-30

重构:改善既有代码的设计

本书清晰揭示了重构的过程,解释了重构的原理和践方式,并给出了何时以及何地应该开始挖掘代码以求改善。书中给出了70多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。本书提出的重构准则将帮助你一次一小步地修改你的代码,从而减少了开发过程中的风险。

2018-05-24

effective c++(第3版)

《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)》内容简介:有人说C++程序员可以分为两类,读过Effective C++的和没读过的。世界项级C++大师scott Meyers成名之作的第三版的确当得起这样的评价。

2018-05-24

MYSQL必知必会

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

2018-05-22

第一本Docker书带书签目录(完整版)

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

2018-05-22

go语言圣经

Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。

2018-05-22

[精通正则表达式(第三版)].(美)佛瑞德.扫描版

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

2018-05-22

The_AWK_Programming_Language中文

AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识。

2018-05-22

sed与awk(第二版)

Awk、sed与grep,俗称Linux下的三剑客,它们之间有很多相似点,但是同样也各有各的特色,相似的地方是它们都可以匹配文本,其中sed和awk还可以用于文本编辑,而grep则不具备这个功用。

2018-05-22

空空如也

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

TA关注的人

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