—要配置好一个网络环境,使计算机顺利可以顺利Internet,那么计算机里一定要有IP、netmask、network、broadcast、getway、DNS IP等网络参数才行。 其中 IP、network、netmask、broadcast、gateway、都可以在/etc/sysconfig/netmask-scrips/ifcfg-eth[0-n]这个文件中定义。 DNS服务器的地址则可以在/etc/resolv.conf文件中定义。 那么如果有很多台电脑都需要配置一个网络环境,每台电脑都需要手动如上述配置是否会累死人呢? 我觉得大概不会吧。但是吧,很多很多就不一定了,毕竟懒人推动世界。不胡扯了,开始正文。 DHCP(Dynamic Host Configuration Protocol)服务器配置。 服务器主要的作用,就是实现自动地将网络参数正确的分配给网络中的每台计算机 ,让客户端的计算机可以在开机时就立即自动分配好网络的参数值,这些参数可以是如上网络参数。 DHCP协议的工作方式 其实, 继续阅读 >>


胡锦雲 18/12/11 02:03:10
十大经典排序算法(动图演示) 0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。 线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。  0.2 算法复杂度 0.3 相关概念 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。  1、冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素, 继续阅读 >>


胡锦雲 18/11/25 20:53:41
标签: 数据结构算法 题目 A: 5×5 迷宫 输入 输入的数据仅有一组,为一个五行五列的矩阵。矩阵的每一行在一行以空格 为分隔符的输入中表示。 例如,若输入为: 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 ,则表示输入为矩阵: [ 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0] 。 该矩阵表示一个 5×5 的迷宫, 0 表示“可行走的路”, 1 则表示“墙壁”,该 迷宫中只可以横向或竖向行走,不能斜向行走。 输出 按顺序在每行以二元组形式输出从迷宫的左上角到右下角的最短路径。 每个 输出的二元组后换行一次。 迷宫的左上角的二元组表示为: (0, 0)。 样例输入 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 样例输出 (0, 0) (1, 0) (2, 0) (2, 1) (2, 2) (2, 3) (2, 4) (3, 4) (4, 4) 继续阅读 >>


胡锦雲 18/10/23 17:10:49
框架: BFS: #include<cstdio>#include<cstring> #include<queue> #include<algorithm> using namespace std; const int maxn=100; bool vst[maxn][maxn]; // 访问标记 int dir[4][2]={0,1,0,-1,1,0,-1,0}; // 方向向量 struct State // BFS 队列中的状态数据结构 { int x,y; // 坐标位置 int Step_Counter; // 搜索步数统计器 }; State a[maxn]; bool CheckState(State s) // 约束条件检验 { if(!vst[s.x][s.y] && ...) // 满足条件 return 1; else // 约束条件冲突 return 0; } void bfs(State st) { que 继续阅读 >>


胡锦雲 18/10/09 19:03:19
—我们都知道计算一个复杂的算数表达式要遵从一定的约定(ps:先乘除后加减有括号先算括号等),而要编写一个程序来计算算数表达式就得你去自己规定运算顺序喽~ 在这里将算数表达式转化为后缀表达式然后再进行运算是一个我认为比较便捷的方法。 先简单地解释一下后缀表达式: 转化为后缀表达式的方法为: 1.从左到右依次读取算式的一个字符 2.如果读到括号,则跳过,到下一个字符 3.如果读到的是数字,则直接输出到一个结果字符串的末尾(这个字符串就是最后要的后缀表达式) 4.如果读到的是运算符,则要将此运算符入栈 (1)若栈空,则直接入栈; (2)若栈不空,则要判断栈顶运算符的优先级 <1>若栈顶运算符的优先级低于要入栈的运算符,直接入栈 <2>若栈顶运算符的优先级高于要入栈的运算符,要将栈顶运算符位置的高优先级的运算符出栈,出栈的运算符输出到结果字符串的末尾,直到栈顶运算符优先级低于要入栈的运算符为止。(实际就是要保证栈中的运算符优先级从栈顶到栈底是依次从高到低的) 5.依次按照上述方式读取, 继续阅读 >>


胡锦雲 18/10/06 17:12:23
展信顺利:    嗨,过完充实的暑假的你,是时候该给自己2018的暑假一个交代啦.    首先是,一个多月前觉得过完这个暑假肯定会瘦的自己,被打脸了..真的胖了,嗯很伤心.    8月30日还是夏天,夏天没有过去,这个季节很没眼色,不懂见好就收. 总是这样,平日里大口大口的吐槽,大段大段的感慨,真真正正要再回味一番滑落到笔下时,反倒是寥寥只剩下几个字.    我是个不怎么喜欢回忆过去的人,总喜欢凶猛地一头扎向未来,不论何时审视过去的自己,总有一种奇怪的耻辱感,总觉得过去的自己幼稚而又矫情.所以总不喜欢回忆滤镜.好在这段记忆跟我关系还不错,还在8月的末尾赖着不走呢.    从开头讲,就是天天要早起,挺困难的,不过习惯了成了生物钟就不算最困难的事了,这里必须要提一下我的好舍友们,毕竟空调是我的再生父母!! 每天能有舒适的不焦躁的睡觉环境(除了声音有点大),那是非常棒了!倒是小组的空调中间总是不怎么给力,在最热的那几天,只有一台空调,这么多人,确实心 继续阅读 >>


胡锦雲 18/09/02 16:49:39
setbuf 程序输出有两种方式:一种是即时处理方式,另一种是先暂存起来,然后再大块写入的方式,前者往往造成较高的系统负担。因此,c语言实现通常都允许程序员进行实际的写操作之前控制产生的输出数据量。 这种控制能力一般是通过库函数setbuf实现的。如果buf是一个大小适当的字符数组,那么: setbuf(stdout,buf); 语句将通知输入/输出库,所有写入到stdout的输出都应该使用buf作为输出缓冲区,直到buf缓冲区被填满或者程序员直接调用fflush(注:对于由写操作打开的文件,调用fflush将导致输出缓冲区的内容被实际地写入该文件),buf缓冲区中的内容才实际写入到stdout中。缓冲区的大小由系统头文件< stdio.h >中的BUFSIZ定义。 函数声明 void setbuf(FILE *stream, char *buffer) 参数 stream–这是指向FILE对象的指针,该FILE对象标识了一个打开的流 buffer– 继续阅读 >>


胡锦雲 18/09/02 14:39:43
—起先是对Makefile这个东东并不感冒,觉得很麻烦啊,好像也没什么用啊.直到真正写了个对于自己来讲算大型的项目,才真正知道了Makefile的好处. 起初的缘分来源于觉得需要编译运行时,需要写一长串东西很麻烦,就在Makefile文件里写了个编译运行的shell命令,(这个操作被学长们称作很骚…) 只需make一下,一步搞定~ 后来还是要了解一下为什么可以这么做,原来 make只是一个根据指定的Shell命令进行构建的工具. 只要 你规定好: 构建哪个文件,它依赖哪些源文件,当那些文件有变动时,如何重新构建它. 当只要任何某个文件有变化时,需要重新构建的项目,都可以使用make构建. 代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)。Make是最常用的构建工具. 注意需要讲清楚依赖和调用 想要真正写出完整的Makefile文件,首先得了解Makefile文件构建规则 规则如下 <tar 继续阅读 >>


胡锦雲 18/09/01 18:38:10
为什么要用epoll,用了epoll还用不用多线程或者多进程了? 高性能的网络服务器需要同时并发处理大量的客户端,而采用那种对于每个连接使用一个分开的线程或进程的方法效率不高. 因为在处理大量的客户端的时候,资源的使用以及进程上下切换会影响服务器的性能. 那么有一个可代替的方法就是在单一的线程中使用非阻塞的I/O. epoll与多线程与多进程是互不冲突的.使用了epoll并不是说就不能用多线程,可以另开一个线程在分支上工作以节省时间. 那么epoll有哪些相关的函数呢 epoll_createor epoll_create1:用来创建epoll实例 epoll_ctl:用来增加或移除被epoll所监听的文件描述符 epoll_wait:用来等待发生在监听描述符上的事件,它会一直阻塞直到事件发生. 这里要特别强调一个参数EPOLLONESHOT,如果要保证套接字同一时段只被一个线程处理,必须加上。 解决方案:给accept()后的套接字加上参数EPOLLONESHOT,线程结 继续阅读 >>


胡锦雲 18/08/20 08:23:21
最开始的学习疑问,网络编程上的这些乱七八糟的名词这些都是用来干什么的? 地址:为了使网络上的计算机通过唯一标识进行相互间通信 端口:解决多个程序要同时访问网络 IP协议:确定到达目的地的路由 UDP协议:向应用程序提供一种面向无连接的服务 TCP协议:提供一种面向连接的,可靠的数据传输服务 套接字是什么 在两个程序进行通讯连接的一个端点.是连接应用程序和网络驱动程序的桥梁. 网络应用程序通过socket进行数据的发送与接收过程: socket在应用程序中创建,通过绑定与网络驱动建立关系.此后,应用程序送给socket的数据,由socket交给网络驱动程序向网络上发送出去.计算机从网络上收到与该socket绑定IP地址和端口号相关的数据之后,由网络驱动交给socket,应用程序便可以从该socket中提取接收到的数据. 假设第二个程序被加入的网络的Host B中,那么由Host A传来的信息如何能被正确的传给程序B而不是传给新加入的程序呢?这是因为每一个基于TCP/IP网络通讯 继续阅读 >>


胡锦雲 18/08/15 09:17:48