自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 字符串翻转

反转字符串:翻转一个字符串的顺序,单词内部顺序不变,输入 I am a boy   输出 boy a am I我是真的很健忘了,字符串翻转说是很好写的,但是在写的过程中进行了多次修改才得出正确结果,只知道想法远远比不上真正动手去写一遍。这题目是老套路了,刷题过程中要是见过的话,印象会比较深,两次翻转,先对字符串整体翻转一遍,然后对字符串中的每个单词都翻转一遍例如 I am a boy翻转一遍之后是...

2018-03-15 20:28:38 263

原创 初来乍到

从博客园搬来的,不知道为什么博客园偶尔会出现人机验证图片刷不出来的情况,无能为力只好搬家,在这里继续小白之路搬来的好多文章代码前面都有行号,很影响复制的心情,我会调整把这些代码的行号去掉,感觉会是个很耗时的工作......要不要写个脚本弄,纠结搬来的博客中又出现不少缩进出现了问题,这个要是全都调整要不少时间,我会慢慢调整还有啊!!!居然文章和文章串了!!这个太坑了,另一片文章的一半直接

2018-02-06 20:36:28 164

原创 [Git] git log命令

这是git的新系列,不常用的命令和其参数比较容易记不住,干脆将常用的记录下来,日后查查方便也是好的,一篇文章一个git命令,长短根据命令有所不同。git log命令主要用于查看提交历史,同时根据添加的参数不同也会有不同的用法 git log直接使用git log,使用效果如下图所示,会把提交历史按照如下图的格式展示出来,这是在使用git中必不可少的一条命令这个命令会根据提交

2018-02-06 20:03:20 384

原创 反应堆模式(reactor)

在提到高性能服务器编程的时候肯定有听过reactor模式,如果只是简单的写一个服务器和客户端建立连接的程序来熟悉一下使用socket函数编程,一般这种情况都是同步方式实现的,服务器阻塞等待客户端的连接,期间服务器不能做其他事情。是不是有更好的实现方式,让服务器可以提高效率,这就是反应堆模式要做的。同步方式之前也说了,同步方式是在阻塞等待,会浪费大量的服务器资源,效率不高,如果还不是多线

2018-02-06 20:03:17 2760

原创 设计模式-前摄器模式(Proactor)

本周要进行boost asio库的学习,在学习之前发现最好需要先了解一下前摄器模式,这样对asio库的理解很有帮助,故写下此文我之前写的随笔XShell的模拟实现中的链接方式可以说是同步的(服务器阻塞等待链接),这样当有服务器端在等待链接的时候就浪费了大量的资源,我们可以让服务器异步等待客户端的链接,服务器在等待链接的同时可以做别的事情,等到客户端链接请求到来的时候,调用一个回调执行链接,这就

2018-02-06 20:03:14 676

原创 [C++11] lambda表达式

ISO C++ 11 标准的一大亮点是引入Lambda表达式。基本语法如下:[capture list] (parameter list) ->return type { function body }简单的讲一下各个部分的作用[capture list]捕获列表,捕获到函数体中,使得函数体可以访问(parameter list)参数列表,用来表示lambda表达式的参数列表->r

2018-02-06 20:03:11 156

原创 了解编译和链接

在步入工作岗位之后,重新对编程是个什么过程进行了了解简单的来说,我们平常所写的代码经过编译和链接之后生成可执行文件,下面就编译和链接两个过程分别讨论编译阶段编译阶段需要的素材就是你的源文件,把源文件经过一系列神奇的编译操作变成目标文件就是我们的目的,也就是linux系统下使用gcc -o得到的目标文件预处理简单来说就是宏的展开和头文件的包含,把#include的东西全都复制进去,把文件变

2018-02-06 20:03:08 137

原创 模拟XShell的小项目

不知道大家有没有用过XShell这款工具,这款工具通过windows可以远程操作处于开机状态的linux操作系统,也就是说把你的电脑和一台服务器连入网络,你通过输入服务器所在的IP地址建立一个会话就可以远端操作linux的服务器了,十分方便。这次这个模拟XShell的小项目就是类似的功能 执行流程:windows客户端输入命令,通过网络传输到linux服务器端上,linux服务器端

2018-02-06 20:03:06 416

原创 死锁

死锁的定义:如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的时间,那么该组进程是死锁的。产生死锁的必要条件:(产生死锁必须同时具备下面四个必要条件)互斥条件:简单的说就是进程抢夺的资源必须是临界资源,一段时间内,该资源只能同时被一个进程所占有请求和保持条件:当一个进程持有了一个(或者更多)资源,申请另外的资源的时候发现申请的资源被其他进程所持有,当前进程阻塞,但不会

2018-02-06 20:03:03 355

原创 可重入和线程安全

线程安全这个词对我来说已经不是很陌生的了,但是遇到一个叫做可重入函数的词,它给我的感觉和线程安全是这么的相近,但既然拿出来了,肯定是有区别的,下面就说说他们之间的区别和联系。要先解释这两个词语才行。线程安全:似乎是在牛客网刷题的时候看到一个正确的选项说的是,线程安全问题都是由全局变量及静态变量引起的。可重入函数:按我现在的理解就是,因为不同的执行流执行同一个函数,导致函数的执行顺序和预

2018-02-06 20:03:00 152 1

原创 进程间通信(五)—信号

我会用几篇博客总结一下在Linux中进程之间通信的几种方法,我会把这个开头的摘要部分在这个系列的每篇博客中都打出来进程之间通信的方式管道消息队列信号信号量共享存储区套接字(socket)进程间通信(四)—共享存储区传送门:http://www.cnblogs.com/lenomirei/p/5651995.html进程间通信(三)—信号量传送门:http://www.cnblo

2018-02-06 20:02:57 207

原创 进程间通信(四)—共享内存

我会用几篇博客总结一下在Linux中进程之间通信的几种方法,我会把这个开头的摘要部分在这个系列的每篇博客中都打出来进程之间通信的方式管道消息队列信号信号量共享存储区套接字(socket)进程间通信(五)—信号传送门:http://www.cnblogs.com/lenomirei/p/5656449.html进程间通信(三)—信号量传送门:http://www.cnblogs.

2018-02-06 20:02:54 283

原创 进程间通信(三)—信号量

我会用几篇博客总结一下在Linux中进程之间通信的几种方法,我会把这个开头的摘要部分在这个系列的每篇博客中都打出来进程之间通信的方式管道消息队列信号信号量共享存储区套接字(socket)进程间通信(五)—信号传送门:http://www.cnblogs.com/lenomirei/p/5656449.html进程间通信(四)—共享存储区传送门:http://www.cnblog

2018-02-06 20:02:51 269

原创 进程间通信(二)—消息队列

我会用几篇博客总结一下在Linux中进程之间通信的几种方法,我会把这个开头的摘要部分在这个系列的每篇博客中都打出来进程之间通信的方式管道消息队列信号信号量共享存储区套接字(socket)进程间通信(一)—管道传送门:http://www.cnblogs.com/lenomirei/p/5636339.html进程间通信(三)—信号量传送门:http://www.cnblogs.

2018-02-06 20:02:49 202

原创 进程间通信(一)—管道

我会用几篇博客总结一下在Linux中进程之间通信的几种方法,我会把这个开头的摘要部分在这个系列的每篇博客中都打出来进程之间通信的方式管道消息队列信号信号量共享存储区套接字(socket)进程间通信(二)—消息队列传送门:http://www.cnblogs.com/lenomirei/p/5642575.html进程间通信(三)—信号量传送门:http://www.cnblog

2018-02-06 20:02:46 237

原创 模拟Linux的shell

在学习了Linux的进程控制之后,学习了fork函数和exec函数族,通过这些个函数可以简单的实现一份shell,就是实现一份命令行解释器,当然是简单版的,实现功能如下能执行普通的命令如ls ,ps ,top等可以实现目录的跳转cd命令能执行命令并加上参数如ls-l能执行打开man手册能识别管道符还不能实现正则表达式,要实现这个我当前的代码根本不能用,要重头开始改写。。。下面贴代码

2018-02-06 20:02:43 200

原创 return和exit函数的区别

在上Linux课的时候,老师提到一句,调用vfork产生的子进程就是为了使用exec族函数来执行其他的代码逻辑。在子进程退出的时候有两种方式,exit和exec族函数,不能使用return,为什么不能用return呢,为什么只有vfork会不让用return呢?于是我就写了这样的代码#include

2018-02-06 20:02:41 173

原创 父子进程执行流(题目解析)

在牛客网上刷题的时候看见这么一道题#include #include

2018-02-06 20:02:38 450

原创 函数栈帧(用汇编来剖析)

好久没写博客了,学校开始实习,找了一个极破的地方,站公交将近两个小时,一天来回就要死了,说是实习,就是变着样的培训,一点实习的意思都没有,辣鸡。这次讲解一下C++函数调用,学了这么久C语言,肯定听说过栈(数据结构啊,地址空间的栈啊之类的),函数调用就和栈密切相关。因为地址空间内的栈是从高地址向低地址生长的,也就是说压栈顺序靠后的反而地址比较低,栈底的地址高于栈顶的地址,下面贴上一段测试代码

2018-02-06 20:02:35 184

原创 atexit函数和两种特殊文件权限位

atexit函数atexit函数的原型如下 void atexit(void (*func)(void)) 它是一个参数为返回值和参数均为空的函数指针的函数,含义是当前进程结束之前执行参数函数指针所指向的函数,使用的时候要在main中注册,一次可以注册很多函数,函数的执行顺序与注册的先后有关,关系恰好相反,第一个注册的函数反而是最后一个执行。下面是执行实例。 #include#inc

2018-02-06 20:02:32 114

原创 Linux内核实现中断和中断处理(二)

第一部分移步传送门召唤!!:http://www.cnblogs.com/lenomirei/p/5562086.html上回说了Linux内核实现中断会把中断分为两部分进行处理,上回讲了上部分,这回讲下部分的设计思路下半部的实现机制软中断tasklet:是通过软中断实现的,但和软中断有所不同工作队列讲上面几个实现机制之前先讲一个古老的方法,现在版本的内核虽然已经不再食

2018-02-06 20:02:30 324

原创 进程调度算法Linux进程调度算法

这次介绍一下操作系统的进程调度算法操作系统的调度分为三种:1.远程调度(创建新进程);2.中程调度(交换功能的一部分);3.短程调度(下次执行哪个进程)这次讲述的就是短程调度,可以简单的看作咱们平时所说的进程调度啦当发生下面几种情况的时候会调用短程调度器,然后就看下次执行那个进程啦时钟中断I/O中断操作系统调用信号(如信号量) 进程调度算法:

2018-02-06 20:02:27 3797 1

原创 Linux内核实现中断和中断处理(一)

Linux实现中断处理内核是怎么知道应用程序要调用系统调用的呢?或者说应用程序怎么通知系统内核自己需要执行一个系统调用,这是通过软中断实现的,通过引发一个异常来促使系统切换到内核态去执行异常处理程序PS:什么时候会从用户态切换到内核态呢?1.中断;2.陷阱;3.系统调用中断分为两种,硬中断和软中断;在许多处理器体系结构处理异常和处理中断的方式类似,为了助于理解,可以把异常想

2018-02-06 20:02:24 1361

原创 linux下进度条的编写和实现

实现了一个简单的进度条,主要技术啥的算不上,但有几个需要注意的点首先是回车符,回车符可不是\n,我们可以把\n看成是两个动作的合体,分别是,回车和换行,都有自己对应的符号,这利用回车符一直在同一个位置输出造成动态的假象因为没有用到\n和换行,但是C语言的printf是行缓冲输出,什么意思呢?就是说不满一行不输出,就是靠\n输出的,没有\n只好强制把缓冲中的数据输出出来,这就要用到函数ffl

2018-02-06 20:02:21 215

原创 centos安装youcompleteme

哈哈,我又回来了,简单的重新装了一边虚拟机,又把vim配置了一遍,这回有信心把youcomplete的安装方法贴出来了,先给个权威的链接,然后给出具体步骤,保证没问题可以安装成功http://www.centoscn.com/image-text/install/2016/0424/7115.html什么是youcompleteme?就是一个强大的自动补全插件,安装此插件之后配置一下vim

2018-02-06 20:02:16 175

原创 centos解决The path "" is not a valid path to the 3.2.0-4-amd64 kernel headers.问题

我的机子炸了,然后我就得重新装我的虚拟机,再然后我就想去弄好我的共享文件夹安装vmtools,安装的时候出现了一个问题,我忘记以前是怎么解决的,又困扰了我好久 Searching for a valid kernel header path...The path "" is not a valid path to the 3.2.0-4-amd64 kernel headers.W

2018-02-06 20:02:14 169

原创 我对不起我的电脑

我作死的把一个注册表项删掉了,是WOW开头的一开始以为还是战舰世界的注册表,还删除失败了,后来才发觉是系统的注册表,然后机子就打不开了,我之前做还原点的时候失败了,现在格式化了整个电脑,啥都不剩了,正在恢复现场,得等一天时间才能写博客了

2018-02-06 20:02:11 203

原创 菜鸟学配置vim

看啥都不会的菜鸟怎么进行vim配置如果你想让你的vim和VS差不多你一定需要这个网址http://www.open-open.com/lib/view/open1429884437588.html在开始使用Linux之后,一定不可避免的使用vim编辑器,一开始使用的时候vim可能不太友好(一定不咋友好)然后我就去了解了,如何使它变得友好,什么意思呢?就是说,我是个编C++的,但是我

2018-02-06 20:02:09 160

原创 Linux进程优先级和nice值

在学习了linux的完全公平调度算法(CFS)后,记录下学习轨迹这篇文章主要讲述,完全公平调度算法的工作方式,和一些调度知识我们可以通过ps -l看到当前正在运行的进程的详细信息其中F:表示进程旗标,标识进程所拥有的权限,当我切换到root的时候为4表示拥有root权限,为1仅有fork()权限R:表示进程当前的状态UID:拥有该进程用户的用户IDR:当前正在运行(

2018-02-06 20:02:06 7737 3

原创 多态实现之虚函数

多态的实现分为静态多态和动态多态,静态多态主要靠函数重载,动态多态主要靠虚函数当类中声明了虚函数之后,该类的内存映像会获得一个虚表指针,叫做_vfptr指向该类的虚表,下面的我测试使用的类图(有的没必要的东西没有写)这里恰好还是一个菱形继承,但是就像我之前说的虚继承和虚表关系不大,所以单继承也是可以测试的其中高亮的部分就是虚表指针,用内存窗口就可以看到虚表中存放的东西了,每一个多态

2018-02-06 20:02:03 289

原创 面试基础(一)-字符串函数

最新更新strncpy strstr函数学过C语言都知道的几个str函数,同学面试腾讯的时候也问到了strlen的递归实现,我也给出来~strlen的实现 1 #include 2 #include 3 using namespace std; 4 5 6 int my_strlen(const char * str) 7 { 8 a

2018-02-06 20:02:00 129

原创 Linux的find命令实例详解和mtime ctime atime

这次解释一下三个Linux文件显示的三个时间,然后展示一下find命令的各个功能在linux操作系统中,每个文件都有很多的时间参数,其中有三个比较主要,分别是ctime,atime,mtimemodification time(mtime):   当修改文件的内容数据的时候,就会更新这个时间,而更改权限或者属性,mtime不会改变,这就是和ctime的区别status

2018-02-06 20:01:58 322

原创 堆(Heap)的实现

这次实现了堆,这个堆不是指系统堆栈的堆,是一种数据结构,见下图堆的本质就是一个数组(上图中,红色的是值,黑色的是下标)简单的来说就是把一个数组看成是二叉树,就像上图大堆和小堆分别是指根节点比孩子节点的值大或者是小,看了上图之后就可以发现,父亲节点和孩子节点之间下表的关系,parnet=(child-1)/2利用这个关系就可以实现堆了,堆的基本方法有构造,析构,插入,删除,像大堆小堆这样特殊的堆肯定...

2018-02-06 20:01:55 212

原创 二叉树的前序中序后序遍历(当然是非递归的!)

二叉树的三种遍历方式一直都是为人津津乐道的面试题,考察一个人对递归的理解让他写个三种遍历方式是最简单的考察方式了,那么考察一个人对递归的理解更加深层次的方式就是让他用循环模拟递归(就是把递归代码转换成非递归),一般想要实现这样的东西是需要栈的,或许说使用栈的结构更加贴合函数栈的压入和弹出,更加好理解递归的三种遍历方式分别为,前序遍历,中序遍历,后序遍历,在考虑完了递归的写法之后,非递归的写法更

2018-02-06 20:01:52 122

原创 菱形继承问题(钻石问题)

我看到网上有很多人都在说虚继承和虚表的关系,我一直很郁闷,虚继承和虚表没有什么太大的关系,虚表是当有虚函数出现的时候才会有的,光是使用虚继承是不会有虚表的!当然也就不会有虚表指针!!从我后面的截图可以看到使用虚继承对象的内存构造中并没有出现虚表指针!跟虚继承有关的是一个虚基类表(vbptr),这个表在调试的监视窗口是看不见的,但有了虚继承之后使用sizeof可以明显看出,类型所占内存的大小扩大了4

2018-02-06 20:01:50 185

原创 文件夹遍历文件列表

实在不知道该怎么起标题了,类似遍历一个文件夹然后获得该文件夹下的文件列表,可以随意切换文件目录,是个不是特别大的东西,本来是用在我们小组写的简易ftp服务器上的一个给客户端显示的一个小插件一样的东西?总之单拿出来应该没啥含量,调用了windows的一些API头文件包的有些多了,有的没用,是之前自己的音乐播放器里面的带的东西。。。 1 #include 2 #include

2018-02-06 20:01:47 191

原创 哈夫曼树的实现

本来用之前也过的堆直接实现比较好,这里我直接重新写一了函数融入进去了 1 #pragma once 2 #include 3 #include 4 #include 5 #includestring> 6 using namespace std; 7 8 templateclass T> 9 struct HuffmanNode 10

2018-02-06 20:01:44 125

原创 面试基础(二)-mem函数

常考的函数有下面三个,memset,memcpy,memmove,一定要记住三个函数的函数原型,熟记返回值类型和参数类型,当然也不能忘记参数检查 memset 1 #include 2 #include 3 using namespace std; 4 5 void *my_memset(void *s, int ch, size_t n) 6 {

2018-02-06 20:01:41 95

原创 二叉搜索树的实现

这次贴上二叉搜索树的实现,搜索插入删除我都实现了递归和非递归两种版本(递归函数后面有_R标识) 1 #pragma once 2 #include 3 using namespace std; 4 5 6 templateclass K,class V> 7 struct BSTNode 8 { 9 K _key; 10

2018-02-06 20:01:38 155

原创 STL的迭代器和类型萃取

今天就可以把STL库中迭代器的实现,和类型萃取好好整理一下了迭代器的设计思维是STL的关键所在,在STL的实际运用和泛型思维,迭代器都扮演着十分重要的角色,STL力求把数据容器和算法的概念分开来,于是就有了STL的两大部分,容器(container)和泛型算法(algorithms),泛型算法有很多参数都是迭代器。举一个栗子!泛型算法find()的实现!1 templateclas

2018-02-06 20:01:36 356

空空如也

空空如也

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

TA关注的人

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