<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[eriHanami的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/eriHanami</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; eriHanami]]></copyright><item><title><![CDATA[【匿名通信】在Linux环境下编译运行tor源码]]></title><link>https://blog.csdn.net/eriHanami/article/details/83010081</link><guid>https://blog.csdn.net/eriHanami/article/details/83010081</guid><author>eriHanami</author><pubDate>Thu, 11 Oct 2018 11:33:13 +0800</pubDate><description><![CDATA[参考原文 在Linux环境下编译运行tor源码]]></description><category></category></item><item><title><![CDATA[牛客网 《剑指Offer》编程 30.连续子数组最大和]]></title><link>https://blog.csdn.net/eriHanami/article/details/82959694</link><guid>https://blog.csdn.net/eriHanami/article/details/82959694</guid><author>eriHanami</author><pubDate>Sun, 07 Oct 2018 21:17:49 +0800</pubDate><description><![CDATA[题目描述

HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢？例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组，返回它的最大连续子序...]]></description><category></category></item><item><title><![CDATA[牛客网《剑指Offer》编程 29. 最小的k个元素 （使用堆）]]></title><link>https://blog.csdn.net/eriHanami/article/details/82954654</link><guid>https://blog.csdn.net/eriHanami/article/details/82954654</guid><author>eriHanami</author><pubDate>Sun, 07 Oct 2018 14:58:46 +0800</pubDate><description><![CDATA[题目描述

输入n个整数，找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字，则最小的4个数字是1,2,3,4,。

解题思路

本题可以构建一个size为k的最大堆进行求解。

遍历数组。

当堆中元素总量小于k的时候，将当前元素放入堆；

当堆中元素总量等于k的时候，将当前元素与堆顶的元素比较。如果比最大的元素大，淘汰当前元素；如果比对顶元素小，对顶元素出堆，并将当前元素插...]]></description><category></category></item><item><title><![CDATA[《程序员的自我修养》第三章 目标文件里有什么]]></title><link>https://blog.csdn.net/eriHanami/article/details/82844165</link><guid>https://blog.csdn.net/eriHanami/article/details/82844165</guid><author>eriHanami</author><pubDate>Sun, 07 Oct 2018 12:54:04 +0800</pubDate><description><![CDATA[在PC端的可执行文件，主要是linux下的ELF（Executable Linkable Format）文件和windows下的PE文件。

一般c语言执行代码都保存在.text段上，已经初始化的全局变量或者局部静态变量保存在.data段上。未初始化的全局变量和局部静态变量保存在.bss段上。.rodata代码段存放的是只读数据。

ELF结构：头文件（ELF文件的描述信息），段表（描述了每个段的...]]></description><category></category></item><item><title><![CDATA[牛客网《剑指Offer》 编程 29.最小的k个数（使用c++提供的set或者multiset）]]></title><link>https://blog.csdn.net/eriHanami/article/details/82954510</link><guid>https://blog.csdn.net/eriHanami/article/details/82954510</guid><author>eriHanami</author><pubDate>Sat, 06 Oct 2018 22:17:19 +0800</pubDate><description><![CDATA[题目描述

输入n个整数，找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字，则最小的4个数字是1,2,3,4,。

解题思路

此次使用不改变原数组的方法。使用c++STL中的set或者multiset来实现。这两个模板底层的实现都是红黑树。即平衡的二叉搜索树。以下是对set和multiset的简单介绍：

STL
			说明
		set&amp;lt;T&amp;gt;
			按照从小到大...]]></description><category></category></item><item><title><![CDATA[《Linux程序设计》第四章 （临时文件、用户信息、主机信息、日志、资源和限制）]]></title><link>https://blog.csdn.net/eriHanami/article/details/82942892</link><guid>https://blog.csdn.net/eriHanami/article/details/82942892</guid><author>eriHanami</author><pubDate>Sat, 06 Oct 2018 19:52:07 +0800</pubDate><description><![CDATA[1.临时文件

程序有的时候会使用一些中间文件存储某些中间计算结果，最后在将这些文件删掉。这样的文件成为临时文件。
	tmpnam函数可以生成一个唯一的临时文件名。函数原型如下：
	#include &amp;lt;stdio.h&amp;gt;
	char* tmpnam(char *s)；//返回一个唯一的文件名。
	FILE* tmpfile(void);//该函数指向唯一的临时文件，以读写的方式打开。当对...]]></description><category></category></item><item><title><![CDATA[牛客网《剑指Offer》编程 29.最小的k个数 （解法1，需要改变原数组）]]></title><link>https://blog.csdn.net/eriHanami/article/details/82945873</link><guid>https://blog.csdn.net/eriHanami/article/details/82945873</guid><author>eriHanami</author><pubDate>Fri, 05 Oct 2018 18:06:31 +0800</pubDate><description><![CDATA[题目描述

输入n个整数，找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字，则最小的4个数字是1,2,3,4,。

解题思路

由于快速排序每次能够把一个数放置在正确的位置上。因此，我们可以使用快速排序的Partition函数，对数组进行排序，直到第k个数被放在数组中第k个位置上为止。此时第k个数的左边都是比它小的数，右边都是比它大的数。最后输出前k个数就可以了。

使用快速...]]></description><category></category></item><item><title><![CDATA[牛客网《剑指Offer》编程 28.数组中出现的超过一半的数字]]></title><link>https://blog.csdn.net/eriHanami/article/details/82835173</link><guid>https://blog.csdn.net/eriHanami/article/details/82835173</guid><author>eriHanami</author><pubDate>Fri, 05 Oct 2018 16:05:54 +0800</pubDate><description><![CDATA[题目描述

数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次，超过数组长度的一半，因此输出2。如果不存在则输出0。

解题思路(1)

用map统计每一个数的频率，当频率超过一半+1的时候停止统计，该数即为超过一半的数字。

代码实现(1)


int MoreThanHalfNum_Sol...]]></description><category></category></item><item><title><![CDATA[《Linux程序设计》第四章（程序参数、环境变量、时间和日期）]]></title><link>https://blog.csdn.net/eriHanami/article/details/82937661</link><guid>https://blog.csdn.net/eriHanami/article/details/82937661</guid><author>eriHanami</author><pubDate>Fri, 05 Oct 2018 11:00:42 +0800</pubDate><description><![CDATA[1.程序参数：C语言编写的linux或者unix程序的入口是main函数。该函数声明如下：
int main(int argc,char* argv[])；其中argc代表参数个数，argv是一个字符串数组。参数个数包括程序名自身，argv数组的
第一个元素是argv[0]。命令行参数在向程序传递信息方面很有用。可以使用短横线（-）开头的命令行参数来设置标志或者开关。
有的时候还会使用+来表示和-...]]></description><category></category></item><item><title><![CDATA[《Linux程序设计》第三章 （错误处理）]]></title><link>https://blog.csdn.net/eriHanami/article/details/82935878</link><guid>https://blog.csdn.net/eriHanami/article/details/82935878</guid><author>eriHanami</author><pubDate>Thu, 04 Oct 2018 10:58:58 +0800</pubDate><description><![CDATA[函数在失败的时候，会设置errno变量的值来指明失败的原因。程序必须在报告错之后立刻检查errno变量，不然会被覆盖掉。

1.strerror函数把错误代码映射为一个字符串，该字符串对发生的错误类型进行说明。函数原型如下：
	#include &amp;lt;string.h&amp;gt;
	char *strerror(int errnum)；
	2.perror函数把errno变量中报告的当前错误映射到一...]]></description><category></category></item><item><title><![CDATA[《Linux程序设计》第三章（标准IO库、格式化输入输出、文件和目录的维护、扫描目录）]]></title><link>https://blog.csdn.net/eriHanami/article/details/82929125</link><guid>https://blog.csdn.net/eriHanami/article/details/82929125</guid><author>eriHanami</author><pubDate>Thu, 04 Oct 2018 10:06:28 +0800</pubDate><description><![CDATA[标准IO库

在启动程序时，有三个文件流是自动打开的，分别是stdin，stdout，stderr。
	1. fopen函数：用于文件和终端的输入和输出。函数原型如下：
	
	
#include &amp;lt;stdio.h&amp;gt;
FILE *fopen(const char* filename,const char *mode);
	
	mode 有几种形式。需要注意的是，filename和mode...]]></description><category></category></item><item><title><![CDATA[《Linux程序设计》第三章 （系统调用）]]></title><link>https://blog.csdn.net/eriHanami/article/details/82924320</link><guid>https://blog.csdn.net/eriHanami/article/details/82924320</guid><author>eriHanami</author><pubDate>Tue, 02 Oct 2018 22:41:21 +0800</pubDate><description><![CDATA[许多Linux的shell都允许用户接入自己家的目录，使用cd ~ usr(usr是用户名)命令即可。但是标准库函数不能够理解shell中的~符号。所以必须在自己的程序中使用文件名。

Linux中比较重要的三个设备文件：/dev/console：系统控制台；/dev/tty：控制终端；/dev/null：空设备。

为了向用户提供统一的接口，设备驱动封装了所有与硬件相关的特性。硬件的特有功能通常...]]></description><category></category></item><item><title><![CDATA[《Linux程序设计》第二章]]></title><link>https://blog.csdn.net/eriHanami/article/details/82873843</link><guid>https://blog.csdn.net/eriHanami/article/details/82873843</guid><author>eriHanami</author><pubDate>Mon, 01 Oct 2018 16:35:40 +0800</pubDate><description><![CDATA[ 

shell是操作系统与用户间的接口程序。

1.管道和重定向

重定向输出：


ls -l &amp;gt; lsoutput.txt#将ls的输出输出到lsoutput.txt文件中
ps &amp;gt;&amp;gt; lsoutput.txt#将ps的输出追加到lsoutput.txt文件后面
kill -HUP 1234 &amp;gt;killout.txt 2&amp;gt;killerr.txt #将进程的标准输...]]></description><category></category></item><item><title><![CDATA[【FreeNOS学习笔记】FreeNOS安装手册]]></title><link>https://blog.csdn.net/eriHanami/article/details/82894612</link><guid>https://blog.csdn.net/eriHanami/article/details/82894612</guid><author>eriHanami</author><pubDate>Sat, 29 Sep 2018 11:57:30 +0800</pubDate><description><![CDATA[笔者操作系统为Ubuntu16.04，按照官网给的教程结合在网上找到的大家一起踩过的坑，总结出如下安装手册。基本思路是在Ubuntu16.04上安装虚拟机qemu，在虚拟机上跑FreeNOS。

参考博客为：

FreeNOS初探索
	FreeNOS学习，在Ubuntu16.04的64位计算机上编译32位汇编文件，在SConstruct中添加编译选项
	FreeNOS学习笔记
官网安装手册为：官网...]]></description><category></category></item><item><title><![CDATA[ubuntu 按键上下左右出现ABCD的解决方法]]></title><link>https://blog.csdn.net/eriHanami/article/details/82890192</link><guid>https://blog.csdn.net/eriHanami/article/details/82890192</guid><author>eriHanami</author><pubDate>Fri, 28 Sep 2018 21:17:12 +0800</pubDate><description><![CDATA[错误问题：vi上下左右键显示为ABCD的问题

解决方法： 

只要依次执行以下两个命令即可完美解决Ubuntu下vi编辑器方向键变字母的问题。

　　一.执行命令 sudo apt-get remove vim-common

　　二.执行命令 sudo apt-get install vim

原博文地址：https://blog.csdn.net/yf210yf/article/detail...]]></description><category></category></item><item><title><![CDATA[《Linux程序设计》第一章]]></title><link>https://blog.csdn.net/eriHanami/article/details/82873206</link><guid>https://blog.csdn.net/eriHanami/article/details/82873206</guid><author>eriHanami</author><pubDate>Thu, 27 Sep 2018 21:10:18 +0800</pubDate><description><![CDATA[1.库函数

库是一组预先编译好的函数集合。标准库文件存储在/lib或者/usr/lib目录中。.a的是静态库，.so是共享库。使用某个静态库的某个函数，只需要包含该静态库的头文件。静态库也成为归档文件，ar工具可以创建任何文件的归档文件。


ar crv libfoo.a free.o bill.o //将编译过的free.o和bill.o归档成为libfoo.a文件

静态库的缺点是，当用户...]]></description><category></category></item><item><title><![CDATA[《程序员的自我修养》第二章 链接 装载与库]]></title><link>https://blog.csdn.net/eriHanami/article/details/82832830</link><guid>https://blog.csdn.net/eriHanami/article/details/82832830</guid><author>eriHanami</author><pubDate>Mon, 24 Sep 2018 22:22:11 +0800</pubDate><description><![CDATA[gcc hello.c 执行时其实分成了四个步骤：预处理，编译，汇编，链接。

1. 预处理（预编译）

现在有程序hello.c，预处理生成.i文件。linux中预处理.c文件生成.i文件的指令如下：（两条中的任何一条都可以）


$gcc -E hello.c -o hello.i
$cpp hello.c &amp;gt; hello.i

预处理主要处理以#开头的预编译指令。

处理#includ...]]></description><category></category></item><item><title><![CDATA[【Linux基础知识】Ubuntu 16.04 更换源]]></title><link>https://blog.csdn.net/eriHanami/article/details/82832506</link><guid>https://blog.csdn.net/eriHanami/article/details/82832506</guid><author>eriHanami</author><pubDate>Mon, 24 Sep 2018 21:44:21 +0800</pubDate><description><![CDATA[原博客见https://www.cnblogs.com/dtiove/p/5917263.html

一：问题概述

      ubuntu，我们在使用apt新装软件的时候，会使用官方的网站去下载软件，但是会因为国内的转接点太多，而导致下载的速度非常慢 ，我们可以通过换成一些中间的节点来进行下载，比如阿里源，中科大源，清华源等等，这样的网站，他们会定时和官方的源进行同步和更新，而我们直接同步他们...]]></description><category></category></item><item><title><![CDATA[牛客网《剑指Offer》编程 26.二叉搜索树与双向链表]]></title><link>https://blog.csdn.net/eriHanami/article/details/82830648</link><guid>https://blog.csdn.net/eriHanami/article/details/82830648</guid><author>eriHanami</author><pubDate>Mon, 24 Sep 2018 17:26:13 +0800</pubDate><description><![CDATA[题目描述

输入一棵二叉搜索树，将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点，只能调整树中结点指针的指向。

解题思路

二叉搜索树的特点是按照中序遍历的话，结果就会是一个从小到大排序的数组。

所以使用一个指针指向刚遍历过的节点，另一个指针指向当前节点。

采用递归遍历的方式。

如果当前节点不为空节点，则将当前节点的左节点指向刚遍历过的节点；

如果刚遍历过的节点不为空，则...]]></description><category></category></item><item><title><![CDATA[牛客网《剑指Offer》 编程 25.复杂链表的复制 （最优解法）]]></title><link>https://blog.csdn.net/eriHanami/article/details/82827542</link><guid>https://blog.csdn.net/eriHanami/article/details/82827542</guid><author>eriHanami</author><pubDate>Mon, 24 Sep 2018 10:38:16 +0800</pubDate><description><![CDATA[题目描述

输入一个复杂链表（每个节点中有节点值，以及两个指针，一个指向下一个节点，另一个特殊指针指向任意一个节点），返回结果为复制后复杂链表的head。（注意，输出结果中请不要返回参数中的节点引用，否则判题程序会直接返回空）

解题思路

这次使用时间复杂度为O(n)，空间复杂度为O(1)的算法。

首先，在原链表的每个节点后面复制相应的链表节点，即复制next域。



然后，复制random...]]></description><category></category></item></channel></rss>