
学习
文章平均质量分 63
lxcodeworld
这个作者很懒,什么都没留下…
展开
-
C++三大特性
1.C++的三大特性为:继承,多态,封装 (1)继承。一个对象直接使用另一个对象的属性和方法。优点:1.减少重复的代码。 2.继承是多态的前提。 3.继承增加了类的耦合性。缺点:1.继承在编译时刻就定义了,无法在运行时刻改变父类继承的实现; 2.父类通常至少定义了子类的部分行为,父类的改变都可能影响子类的行为; 3.如果继承下来的子类不适合解决新问题,父原创 2017-08-31 11:44:34 · 21064 阅读 · 4 评论 -
合并两个有序的单链表
合并两个有序的单链表:1.创建两个有序的单链表;2.创建第三个链表来存放合并后的有序链表;#include using namespace std;struct ListNode{ int value; ListNode* next;};class CreateList{ typedef ListNode Node;public:原创 2017-07-13 08:52:44 · 560 阅读 · 0 评论 -
shell下字符串的截取----cut
cut是以行为单位,对一段数据进行截取。cut的语法格式为: cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file]cut 从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出,如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一.touc原创 2017-07-12 15:11:27 · 623 阅读 · 0 评论 -
不创建临时变量,交换两个变量的值
1. 加减法给出两个变量a =10,b=20;让a = a+b,那么a=30;让b = a - b,那么b=10;让a = a - b,那么a=20;如此,没有创建临时变量就交换了a和b的值。 int i = 10; int j = 20; printf("i=%d j=%d\n", i, j); i = i + j; j = i - j;原创 2017-07-02 18:55:55 · 665 阅读 · 0 评论 -
linux下的crond和crontab用法
第一部分:对crond和crontab的认识crond linux中一个命令可以定期来执行系统任务。定时执行工具,可以在无需人工干预的情况下定时的执行任务。命令有:如果想让cron在开机的时候自动启动,在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start 即可。crontabcrontab位于/usr/bi原创 2017-07-11 17:05:42 · 1305 阅读 · 0 评论 -
eval的作用
1. eval command-line其中command-line是在终端上键入的一条普通命令行。然而当在它前面放上eval时,其结果是shell在执行命令行之前扫描它两次。如:pipe="|"eval ls $pipe wc -lshell第1次扫描命令行时,它替换出pipe的值|,接着eval使它再次扫描命令行,这时shell把|作为管道符号了。如果变量中包含任何需要sh原创 2017-06-21 17:12:23 · 1348 阅读 · 0 评论 -
select服务器
多进程和多线程服务器有什么缺点呢?多进程服务器缺点: 1.内存消耗比较大,每个进程都独立加载完整的应用环境 2.cpu消耗偏高,高并发下,进程之间频繁进行上下文切换,需要大量的内存换页操作 3.很低的io并发处理能力,只适合处理短请求,不适合处理长请求多线程服务器缺点: 1.不方便操作系统的管理原创 2017-06-08 11:30:45 · 627 阅读 · 0 评论 -
运用dup2的tcp socket通信
dup 和 dup2既然有重定向的功能,那么我们之前写的tcp socket通信是不是可以修改一下呢?比如,不用write往socket里面写,而直接用dup2/dup重定向呢?答案是肯定的。代码如下tcp_dup2_server#include #include #include #include #include #include #include原创 2017-06-08 11:11:08 · 2090 阅读 · 0 评论 -
dup和dup2原理
dup 和 dup2 是用来复制一个文件描述符,通常用来重定向进程的stdin(文件描述符0),stdout(文件描述符1), stderr(文件描述符2)。函数原型和参数如下所示:dup只有一个参数,dup2有两个参数。dup()函数 利用函数dup,我们可以复制一个描述符。传给该函数一个既有的描述符,它就会返回一个新的描原创 2017-06-08 11:00:19 · 2609 阅读 · 0 评论 -
Liunx彩色进度条
linux下怎么实现一些颜色或者特殊效果呢?如下:接下来,我用了彩色的进度条来说明问题:#!/bin/bashi=0bar=''myarr=( '-' '\\' '|' '/' )while [ $i -le 100 ]do printf "[\033[36m\033[1m%-100s\033[m]\033[31m[%d%%]\033原创 2017-06-28 23:31:12 · 292 阅读 · 0 评论 -
linux 线程池服务器代码
运行结果如下:运行server浏览器连接:server输出源代码如下:/* Linux 2.6 x86_64 only*/#include #include #include #include #include #include #include #include #include #inc原创 2017-06-03 14:46:20 · 325 阅读 · 0 评论 -
linux进程池
进程池的概念:进程池是由服务器预先创建好的一组子进程,子进程的数量大概在3-10个左右。进程池中的所有子进程都运行着相同的代码,并且有着相同的属性(如优先级)。当接到服务请求后,服务器会通过某种方式从已经存在的子进程中挑选出一个进行服务。方式:1.算法。包括随机算法和轮流算法(Rount—Robin)。2.共享消息队列。进程和所有子进程通过一个共享的工作队列来同步,子进程都睡眠在该原创 2017-06-03 13:26:06 · 561 阅读 · 0 评论 -
守护进程为什么要fork两次?
上一篇博客讲了,fork的作用,那么为什么有时候有些代码会调用两次fork呢?(1)调用一次fork的作用: 第一次fork的作用是让shell认为这条命令已经终止,不用挂在终端输入上,还有就是为了后面的setsid服务,因为调用setsid函数的进程不能是进程组组长,如果不fork出子进程,则此时的父进程是进程组组长,就无法调用setsid。当子进程调用完setsid函数之转载 2017-05-10 16:13:04 · 982 阅读 · 0 评论 -
poll服务器
#include #include #include #include #include #include #include #include #define array_size 1024int startup(const char* _ip, int _port){ int sock = socket(AF_INET, SOCK_STREAM,原创 2017-06-21 17:07:41 · 198 阅读 · 0 评论 -
epoll服务器
#include #include #include #include #include #include #include static void Usage(const char *proc){ printf("Usage:%s[local_ip][local_port]\n", proc);}typedef struct fd_buf{原创 2017-06-21 17:08:53 · 321 阅读 · 0 评论 -
查找单链表倒数第K个节点和以及逆置单链表
#pragma once#include using namespace std;struct ListNode{ int value; ListNode* next;};class List{ typedef ListNode node;public: List() :root(NULL) {} ~List() { no原创 2017-07-14 14:44:53 · 462 阅读 · 0 评论 -
死锁产生的原因
死锁产生的原因: 1. 系统资源不足; 2. 进程运行推进顺序不当; 3. 资源分配不均;死锁产生的四个必要条件: 1. 互斥条件; 2. 请求与保持; 3. 不剥夺; 4. 循环等待;银行家算法和鸵鸟算法是破坏了第4个条件(循环等待),因为银行家算法有了资源列表,资源进原创 2017-09-16 10:51:44 · 533 阅读 · 0 评论 -
数组指针和指针数组
首先,来看一下这两种形式: 1. int *p[10]; 2. int (*p)[10];这两个表达式到底代表什么呢?1. int *p[10]; 首先,式子中有[]和*运算符,那么就要考虑到底是* 的优先级高还是 []的优先级高呢?答案是,*和[]的优先级是一样的,那么就要按照靠右原则。即p是一个拥有10个int*元素的数组。2.原创 2017-09-16 10:30:06 · 467 阅读 · 0 评论 -
如何连续读取多个以空格分开的数字?遇见回车结束?
首先,能用的函数有很多,比如cin.get(), cin.getline(), gets(),getchar(), getline(),但是,经过检验发现都不方便。原因很明显,他们要求的参数不是字符串就是char*,用起来很麻烦。以下是我自己探索到的方法:1.数组法。 int arr[20]; int idx = 0; while(1) { cin >>arr[idx++];原创 2017-08-27 02:40:33 · 3385 阅读 · 0 评论 -
URL中的特殊字符
URL中的特殊字符 有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如 空格的编码值是"%20"。 下表中列出了一些URL特殊符号及编码 :替换为%3A 十六进制值 1. + URL 中+号表示空格 %2B原创 2017-08-14 16:21:09 · 946 阅读 · 0 评论 -
三大web服务器比较
1. lighttpdLighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能。Lighttpd使用fastcgi方式运行php,它会使用转载 2017-07-25 21:28:26 · 5972 阅读 · 0 评论 -
快速排序。冒泡排序递归和非递归的实现
快速排序:#pragma once#include #include using namespace std;void QuickSort_Rec(int arr[], int left, int right){ if(left >= right) { return; } int end = right; int start = left; int key = arr[原创 2017-08-01 16:43:24 · 3076 阅读 · 0 评论 -
HTTP----超文本传输协议
HTTP协议定义了浏览器怎么样向万维网服务器请求万维网文档,以及服务器怎样把文档传输给浏览器。从层次的角度来看,HTTP是面向事务的应用层协议,它是万维网上能够可靠地交换文件的重要基础。HTTP是基于TCP的协议。DNS是基于UDP的协议。用户浏览页面有两种方式: 1. 直接输入页面的URL;2. 点击一个页面的可选部分,浏览器会自动的在因特网上找到所要链接的页原创 2017-07-10 11:32:49 · 998 阅读 · 0 评论 -
【面试题】复杂链表的复制
一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个random指针指向这个链表中的一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。对于这个题,基本会有三个思路:1.这里链表的复制和单链表最大的不同,就是多了一个自由指针(psub),那么最简单的想法就是,遍历单链表,找到psub指向的节点,然后复制,这样做最简单,事件复杂度为O(n的平方);原创 2017-07-18 11:49:51 · 349 阅读 · 0 评论 -
c++中三种传值方式
传值传参这种方法相当于将原来的变量拷贝了一份,然后传递过去。#include using namespace std;//传值传参int Fun1(int a){ a = a + 1; return a;}int main(){ int a = 1; cout<<Fun1(a)<<endl; cout<<a<<endl; return 0; }原创 2017-07-08 00:00:23 · 9787 阅读 · 0 评论 -
判断两个链表是否相交并求交点
链表是否相交分为以下三种情况:1.两个单链表都不带环2.只有一个单链表带环3.两个单链表都带环#pragma once#include #include struct ListNode{ int value; ListNode* next;};class CreateList{ typedef原创 2017-07-16 17:23:25 · 403 阅读 · 0 评论 -
求单链表是否带环,环的长度,环入口点
1.分析单链表是否带环2.带环链表环的长度分析3.求环入口点分析具体代码如下:1.hpp文件#pragma once#include typedef struct ListNode{ int value; ListNode* next;}node,*pnode;pnode createNode(int data){ pn原创 2017-07-15 15:29:18 · 398 阅读 · 0 评论 -
线程安全和可重入函数的关系,区别
•概念重入:即重复调用,函数被不同的流调用,有可能会出现第一次调用还没返回时就再次进入该函数开始下一次调用。可重入:当程序被多个线程反复执行,产生的结果正确。如果一个函数只访问自己的局部变量或参数,称为可重入函数。不可重入:当程序被多个线程反复调用,产生的结果出错。当函数访问一个全局的变量或者参数时,有可能因为重入而造成混乱,像这样的函数称为不可转载 2017-04-27 23:42:08 · 805 阅读 · 0 评论 -
linux 模拟实现my_sleep的两个版本
1.既然要讲sleep,那么大家就有必要了解一下什么是信号。信号:是UNIX进程间通信的一种标准方式。信号的产生:1.键盘快捷键 2.异常 3.操作系统命令和函数 4.闹钟信号的数量:64种,1-31是普通信号,34-64是是时时信号my_sleep版本one(有bug):#include #include #include #i原创 2017-04-27 23:39:32 · 911 阅读 · 0 评论 -
linux进程调度算法
Linux进程调度的目标 1.高效性:高效意味着在相同的时间下要完成更多的任务。调度程序会被频繁的执行,所以调度程序要尽可能的高效; 2.加强交互性能:在系统相当的负载下,也要保证系统的响应时间; 3.保证公平和避免饥渴; 4.SMP调度:调度程序必须支持多处理系统; 5.软实时调度:系统必须有效的调用实时进程,但不保证一定满足其要求;先来看看本机的lin原创 2017-02-19 11:11:03 · 636 阅读 · 0 评论 -
linux task_struct
Linux内核通过一个被称为进程描述符的task_struct结构体来管理进程,task_struct是Linux中的【进程控制块PCB结构】的具体数据结构这个结构体包含了一个进程所需的所有信息。它定义在linux-2.6.38.8/include/linux/sched.h文件中。下面对task_struct这个结构体 进行各个字段的详细介绍1. 调度数据成员转载 2017-02-18 14:49:24 · 479 阅读 · 0 评论 -
linux 第一个小程序 进度条
今天在linux环境下写一个进度条,然后分享三个小知识。#include#includeint main(){ int i = 0; char bar[102]; const char *lable = "-\\|/"; bar[0] = '\0'; while(i <= 100) { printf("[%-101s][%原创 2017-02-16 18:05:02 · 643 阅读 · 0 评论 -
STL vector用法介绍
介绍这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用。通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了。 Vector总览vector是C++标准模板库中的部分内容,它是一个多功能转载 2016-12-03 17:39:49 · 199 阅读 · 0 评论 -
C++中vector使用详细说明
1. 在C++中的详细说明vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。2. 使用vector,必须在你的头文件中包含下面的代码: #include转载 2016-12-03 17:38:39 · 746 阅读 · 0 评论 -
c++多态总结
今天来总结一些c++中,有关多态的知识。 多态:多态可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。 接下来,我写一个简单地函数来说明多态:#includeusing namespace std;int Add(int left, int right){ return left + right;}f原创 2016-11-11 23:30:35 · 363 阅读 · 0 评论 -
c++ 继承 总结
这里为大家总结一下c++ 里面继承的问题#include using namespace std;//1.继承中的权限变化问题/*class A{public: int _pub;protected: int _pro;private: int _pri;};class D:public A //公有继承{public: void FunTest1()原创 2016-11-06 17:11:47 · 583 阅读 · 0 评论 -
c++:this指针总结
1、限定被相似的名称隐藏的成员public class ThisName { public string name = "张三"; public int num = 55; public ThisName() { } public void GetThisName(string name, int num) {原创 2016-10-18 17:03:48 · 605 阅读 · 0 评论 -
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。A说:不是我。 作者注释:(他的意思是说,凶手是B或C或D)B说:是C。C说:是D。D说:C在胡说 作者注释:(他的意思是说凶手是A或B或C)已知3个人说了真话,1个人说的是假话。现在请根据这些信息,写一个程序来确定到底谁是凶手。分析:首先是酱原创 2016-07-22 00:56:21 · 1855 阅读 · 0 评论 -
C语言中,为什么字符串可以赋值给字符指针变量
一、C语言中,为什么字符串可以赋值给字符指针变量char *p,a='5';p=&a; //显然是正确的,p="abcd"; //但为什么也可以这样赋值??问:一直理解不了为什么可以将字串常量赋值给字符指针变量,请各位指点! 答:双引号做了3件事: 1.申请了空间(在常量区),存放了字符转载 2016-07-28 13:19:49 · 7882 阅读 · 0 评论 -
c函数strcpy() ,strcat(),strcmp(), strlen(), strchr() ,strstr() 使用整理
1.strcpy()功能: 字符串复制头文件: string.h返回值类型: char* C语言标准库函数strcpy,把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间。原型声明:char *strcpy(char* dest, const char *src);头文件:#include string.h> 和原创 2016-07-26 10:33:47 · 5052 阅读 · 0 评论