自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

susershine的专栏

市井小虾

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

转载 VS 2010 快捷键大全

vs2010 快捷键大全VS2010版快捷键Ctrl+E,D ----格式化全部代码 Ctrl+E,F ----格式化选中的代码 CTRL + SHIFT + B生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL + SHIFT + O打开项目 CTRL + SHIFT + C显示类视图窗口 F4 显示属性窗口 SHIF

2014-07-24 15:54:17 549

转载 Linux 目录

Linux /dev目录详解    在linux下,/dev目录是很重要的,各种设备都在下面。下面简单总结一下:  dev是设备(device)的英文缩写。/dev这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序,这一点和windows,dos操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常

2014-03-11 11:21:46 721

转载 Linux 必学的60个命令

Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统。不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个。这里笔者把比较重要和使用频率最多的命令,

2014-03-11 11:04:43 952

原创 外壳模式(shell)

《系统程序员成长计划》这本书中提到了外壳模式的概念。所谓的外壳模式的作用就是:不需要修改原来的应用程序,而控制它的输入和输出(即用户界面),同时应用程序也不知道外壳的存在。当然这样理解会比较麻烦,我们就举个简单的例子,比如已经存在一个应用程序,我们想给该应用程序增添一个新的用户界面,这里有两种选择:1. 根据该应用程序的内部实现重新编写一个用户界面,但是如果原来的应用程序的用户界面和内部实现没有很

2013-12-22 17:54:33 964

转载 编写你的第一个垃圾收集器

原文链接: Bob Nystrom   翻译: 伯乐在线 - deathmonkey译文链接: http://blog.jobbole.com/53376/每当我倍感压力以及有很多事情要做的时候,我总是有这样一种反常的反应,那就是希望做一些其他的事情来摆脱这种状况。通常情况下,这些事情都是些我能够编写并实现的独立的小程序。一天早上,我几乎要被一堆事情给整疯了——我得写我

2013-12-22 12:47:46 688

原创 linux内存模型

最近在看李先静老师的《系统程序员成长计划》的书,李老师也在他的博客中写了有关内容:http://blog.csdn.net/absurd。当然这里所说的linux内存模型也是李老师博客中提到。这里自己再写出来,不是说自己写的比李老师好,而是为了增加自己的理解,习惯性的将东西写出来。在说linux中内存模型之前,我们先了解几个数据存放的概念:1.  .bss段BSS(Block

2013-12-21 22:28:37 873

原创 字节对齐

为什么要写有关字节对齐的东西呢?字节对齐应该是最基础的问题了,我原以为对字节对齐比较了解了。但是最近遇到了字节对齐的麻烦事。说麻烦其实也不麻烦,总而言之是自己对字节对齐没有理解透彻。所以就查查了字节对齐的具体定义和使用,发现自己对字节对齐的了解是很肤浅的。那么为什么要字节对齐呢?因为各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些构架

2013-12-21 21:54:26 597

原创 线程局部存储TLS

进程和线程实现并发,它们各自都有优缺点。进程是因为具有独立的进程地址空间,所以在创建进程和销毁进程时需要额外的开销,但是由于进程间的数据是独立的,因此一般情况下当一个进程出现意外死去的时候,是不会影响到其它线程的。但是线程和父线程共享全局变量,它只具有独立的堆栈空间和寄存器,虽然在创建线程和销毁线程时需要的开销比进程小很多,但是一般情况下当一个线程意外死去的时候,会导致整个主线程的崩溃。但是TLS

2013-12-20 14:08:48 754

原创 exit,_exit,return 的区别

exit和_exit 两个函数有一定的区别,在某些情况下是不能混用的。首先先看下exit在glibc-2.16.0中是什么定义的?voidexit (int status){ __run_exit_handlers (status, &__exit_funcs, true);}它是通过调用一个叫做__run_exit_handlers的函数实现的。那么__run_exit_handl

2013-12-18 23:21:08 2364

原创 共享内存mmap()和CreateFileMapping()

共享内存是进程间的一种通信机制,而且它的作用不止于此。它的主要作用包括:提高I/O效率,匿名内存映射,内存共享进程通信。两个不同进程共享内存的意思是,同一快物理内存映射到该两个进程的进程地址空间。使用共享内存可以通过mmap()返回的指针直接操作文件中的内容,省去了read,write以及lseek等文件读写的操作,提高了I/O效率。并且共享内存是一中效率较高的进程间的通信机制,因为当通信建立时,

2013-12-18 22:42:52 5357

转载 GCC 命令详解

GNU CC(简称为Gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。Gcc不仅功能强大,而且可以编译如C、C++、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语言,而且Gcc又是一个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译

2013-12-16 16:20:49 9012

原创 嵌套锁与读写锁

互斥锁(mutex)是实现线程或进程同步与互斥的一种通信机制。它在不同平台下具有不同的实现形式。我们先介绍下linux和windows下的互斥锁的实现。

2013-12-16 14:57:44 5369

转载 ubuntu基本命令整理

sudo:如何设定/改变/启用 root 使用者的密码:sudo passwd root当你使用完毕后屏蔽 root 帐号 使用:    sudo passwd -l root这个将锁住 root 帐号. 如何在终端机模式下切换到 root 身份:  sudo -s -H在线安装程序:sudo apt-get install g++pt-get最常用参数:update 

2013-12-12 16:35:09 758

原创 C语言编写无类型的快速排序和归并排序

C语言编写无类型的快速排序和归并排序

2013-12-12 11:25:40 875

原创 Linux下的静态库,共享库的创建和使用

编译程序一般要经过:预处理,编译,汇编和链接这几个步骤。在我们写程序的时候,会存在一些公共的代码。如果为每个程序都要重写这些代码,那么势必会造成太多的麻烦。我们可以将这么公共代码生成库文件,在编译程序的链接步骤中,可以静态地或者动态地将这些公共代码与我们的程序链接,这样就避免了重写这些代码的麻烦了。库文件可以分为静态库和共享库;其使用方式可以分为静态链接和动态链接两种类别。静态库: 在Linu

2013-12-10 17:53:12 902 2

转载 makefile的详细介绍

概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写m

2013-12-09 22:36:38 548

转载 vimtutor

文章来源: gvim7.0中自带的官方版本================================================================================      欢     迎     阅     读   《 V I M  教  程 》   ——     版本 1.5      ==========================

2013-12-01 20:22:07 525

原创 C++学习之模板

之前写过有关C++模板的内容,但是现在回头再看看书本,发现之前写的东西太肤浅了。考虑的问题太不全面了。因此在这里重写下有关C++模板的知识总结。为什么C++要引入模板这个概念呢?C++的发明者Bjarne Stroustrup曾这样说过:“这是为了支持类型安全、类容器的有效性和算法的通用性。”简单的来说,模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现真正

2013-11-30 17:42:52 854

原创 C++学习之多态

多态是C++中的三大特性之一。这里所说的多态指的是动态多态。具体地说,通过一个指向基类的指针调用虚成员函数的时候,运行时系统将能够根据指针所指向的实际对象调用恰当的成员函数实现。举个简单的例子:class A{ public: virtual void print() { cout<<”this is A::print()!”<<endl;}};class B:publi

2013-11-29 20:48:44 549

原创 结构体和类中的内存布局

通常我们访问结构体或类的成员变量,使用的是比较普通的方法。如定义一个structstruct A{ char a; int b; double c; void (*func) (A *);};那么我们访问结构体中的成员有两种方法:1)(结构体对象名) . (成员变量名);2) (结构体指针) -> (成员变量名)。由于任何变量都在内存中对应一个地址,我们是不是可以通过指针地

2013-11-29 10:24:55 1363 1

原创 C++学习之初步

本人学习C++有段时间了,但是对C++还是有些部分不是很了解。因此专门找了本讲解C++的书籍,边看边总结,希望能增加对C++的理解。该书的名字是《C++面向对象程序设计》,作者李晋江,刘培强。选择该书的原因是:它是一本面向教学的书籍,里面的知识讲解都很清晰明了。本人打算先增加下对C++的理解,再去拜读下那些权威名著。第一部分:C++语言初步1.    命名空间1). C++中的命名空间

2013-11-28 16:59:46 579

原创 二叉树遍历的递归和非递归实现

一、二叉树的先序遍历:首先访问跟节点,再依次访问它的左子树和右子树。递归方法:void preorder(node *root){ if(NULL == root) return ; visit(root); preorder(root->leftchild); preorder(root->rightchild);} 其非递归算法,利用C++STL中的sta

2013-11-24 23:45:14 580

原创 几个简单的字符串和数组计算方法

1.        给定一个递增数组和一个数字S,在数组中找到两个数使得它们之和正好是S。思路:设定该数组的首尾的下标begin和end,当begin#include using namespace std;int arr[100];int main(){ int n =0,i; cin>>n; int begin = 0; int end =

2013-11-24 21:17:45 977

转载 编程技术面试的五大要点

扎实的基础知识、高质量的代码、清晰的思路、优化代码的能力、优秀的综合能力是编程技术面试的五大要点。找工作一直是一个热门话题。要想找到心仪的工作,难免需要经过多轮面试。编程面试是程序员面试过程中最为重要的一个环节。如果能在编程面试的环节充分展示自己的能力,那么拿到中意的Offer就是水到渠成的事情。我先后在欧特克、微软和思科等公司任软件工程师,多次接受他人的面试,同时也面试过很多人。

2013-11-24 15:22:35 516

原创 位运算实现加减法

首先实现加运算,实现加运算自然就可以实现减运算了。位运算是对二进制进行的操作,两个二进制数相加,如果同位都是1,则产生进位。如果同位都不是1,则不产生进位。1).不考虑进位的情况,两个二进制数相加就是求异或的操作。即对于5+9等价于00101 + 01001;两者异或结果为01100(异或结果);2).考虑进位如何操作,同上述情况一样,5+9会在末尾位产生进位,那么我们对两者求与操作,

2013-11-23 16:35:19 3753

原创 BFS

BFS是广度优先搜索算法,是图的一种搜索算法,当然也可以用作其它的地方。BFS是一种盲目搜索算法,其目的是系统的展开并检查途中的节点。而且如果图是非加权的(各个边的长度相等),那么它找到的第一个解是距离根节点的边数目一定最少。但如果图是加权图,那么边数目最少并不代表路径最少,因此找到的解不一定是最佳解。而且BFS的空间复杂度是:O(V+E);时间复杂度是O(V+E);其中V是图中的节点数,V是图的

2013-11-23 11:17:03 745

原创 字符串四则运算求值

假定给定一个四则运算字符串:8+7*2 –9/3;那么该表达式的值为19. 但是如何用C/C++程序上实现计算一个字符串表达式呢?一个常用的做法是将表达式的字符串转换为后缀表达式,即:1)表达式8+2,转换为后缀表达式是8 2+;2)表达式8 +3*4,转换为后缀表达式是834*+;然后通过栈的操作可以求得它们的结果:以2)例为例:压入8,                    

2013-11-21 15:06:15 1362

原创 大端模式和小端模式

大端模式和小端模式是两个相对的概念。网络字节顺序使用的是大端模式,一般的电脑主机中的字节顺序使用的是小端模式,一些大型的IBM主机除外。从概念上讲:大端模式:高字节存放在低地址,低字节存放在高地址小端模式:高字节存放在高地址,低字节存放在低地址举个例子:一个数据0x12 34 56 78(代表的是一个16进制数据,16进制的两位表示一个字节),那么它在小端模式中的存储方式

2013-11-20 22:21:47 732

原创 进程间通信(二)

三、信号信号时linux中进程间的一种重要的通信方式。信号是在软件层次上对中断的一种模拟,也叫做软中断。信号是linux进程间通信机制中唯一的异步通信机制。信号通信机制包括信号的发送,信号的响应,信号的安装,信号集与信号集操作函数,以及信号的阻塞和未决。Linux中总共包括了64中信号,前32种信号是不可靠的信号(非实时信号:不支持排队);后32种是可靠地信号(即有效的解决了信号丢失的问题,且

2013-11-20 14:13:59 778

原创 有序的合并两个有序链表

输入两个递增链表,合并这两个链表中的元素,并保证合并后的链表中的节点仍然是递增排序的。首先定义一个节点的结构体:struct node{ int n_val; node *next; };其次实现递增单链表的输入:即输入一系列递增的数字,并使它们形成一个链表。知道遇到”-1“,停止输入。void create_list(node * &rhead){

2013-11-20 11:35:48 745

原创 进程间的通信(一)

进程间有很多的通信方式,包括:管道(pipe),命名管道(named pipe),信号(signal),消息(message)队列,共享内存,内存映射(mapped memory),信号量以及套接口(socket)。下面就逐一的介绍着几种通信方式。一、 管道管道是一种半双工的通信方式,用于具有亲缘关系的进程进行单方向的通信。linux用pipe函数创建一个管道,其函数原型为:#incl

2013-11-20 09:40:33 936

原创 const、 volatile 和mutable

const, volatile 和 mutable是C/C++中的三种类型限制付。三者具有不同的优点,不同的用途。下面就三者在不同方面的应用进行一个总结。一、const:在最初的C语言中const用来修饰变量和指针以及函数参数,但在C++中const的用途进一步被拓展。const更确切的解释应该是read only。1const 修饰变量:一般有两种写法:const type

2013-11-19 23:13:08 1108

原创 重载、隐藏、覆盖

一、       重载重载包括函数的重载和运算符的重载。函数重载是指在同一个作用域中,相同函数名字,不同参数或参数个数不同的函数可以实现重载。二、隐藏隐藏包括变量和函数的隐藏。函数的隐藏是指在不同作用域中,函数被下一级作用域中的同名函数隐藏,可以不具备相同的函数参数或参数个数。因为调用成员函数式要经过以下3步:1、  编译器查找函数名2、  从同名候选者中选择最佳匹配函数3

2013-11-19 23:08:09 724

原创 常见字符串问题总结(三)

常见字符串问题总结(二)字符串问题中经常会有删除某一字符串的某一个字符,可以是不同方式的删除,比如将指定的字符删除,删除字符中的空格(包括字符串的头和尾)。本文就列举了部分有关字符串删除的问题。1.  删除字符串中的空格,要求将字符串前面和后面的所有空格都删除,对字符串中间,如果出现多个连续的空格,只保留一个空格。#include #include using namespac

2013-11-16 18:02:26 640

原创 字符串常见问题总结(二)

寻找一个字符串中最长的公共子串思路:1.求出该字符串的所有后缀子串2.对这些后缀子串进行排序3.比较相邻的后缀子串,求出它们最大的公共子串的长度 /*实现如何求取字符串的所有后缀子串。可以定义一个指针数组,使每个指针分别指向字符串不同的位置。实现代码如下。*/#include #include #include using namespace std;ch

2013-11-15 20:35:58 521

原创 字符串常见问题总结(一)

字符串处理中的常见问题总结(一)C语言中字符串处理方面的问题非常普遍,常见问题如:查找,替换,复制,移动,插入,删除,排序,单词统计,字符串类型与其他类型(整形,实型,长整形)之间的相互转换等。一、           字符串的查找C语言库函数中有很多有关的函数,如:int strcpm(char * src, char*dest); int strncpm(char*,char*);

2013-11-15 15:51:55 851

原创 常用库函数的实现

常用库函数的实现:1.      strcmp() 实现不使用库函数,编写int strcmp(char *source, char * dest)若相等返回0,不等返回-1.int Mystrcmp_simple(char * src, char*dest){ assert(src!=NULL && dest!=NULL); while(*(src++) ==

2013-11-14 14:43:35 500

原创 可变参数函数

可变参数函数可变参数函数的参数是可变的,例如printf(char* formt, va_list args)和 vfprintf(FILE* fp, char *format, va_list args)等。实现可变参数函数要在头文件中包含,其中包含了四个操作可变参数的函数。void va_start(va_list ap, argN); // 初始化va_list 类型的参数apvo

2013-11-13 19:37:07 999

空空如也

空空如也

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

TA关注的人

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