- 博客(32)
- 收藏
- 关注
原创 多线程
一:进程可以简单的理解为一个可以独立运行的程序单位。它是线程的集合,进程就是有一个或多个线程构成的,每一个线程都是进程中的一条执行路径。二:多线程就很容易理解:多线程就是指一个进程中同时有多个执行路径(线程)正在执行。三:为什么要是用多线程? 1.在一个程序中,有很多的操作是非常耗时的,如数据库读写操作,IO操作等,如果使用单线程,那么程序就必须等待这些操作执行完成之后才能执行其他操...
2018-08-15 10:51:09 140
原创 文件系统----软硬链接
ls -l 或者ll查看文件,可以看到如下图所示:ls -l 进程读取了存储在磁盘上的文件信息,然后显示出来除了这个方式还有一个查看文件信息的方法是stat命令我们可以关注inode的信息,一个文件只有一个inode号。这就必须了解我们的文件系统简单的文件系统可以看成 超级块+i节点表+数据区超级块存放文件的系统本身的信息----i节点表存放文件属性如文件大小,所有者,最近修改时间等---数据区存...
2018-07-05 20:38:28 426
原创 剑指offer:正则表达式匹配
请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配如果模式中的字符是'.',那么就可以匹配字符串的任意一个字符,如果模式的字符不是'.',而是字...
2018-06-07 20:36:55 160
原创 链表的相关面试题
1.判断单链表是否带环?若带环,求环的长度?求环的入口点?1)链表是否带环,我们需要用快(走两步)慢(走一步)指针,如果慢的和快的相等则链表带环bool ListCycl(Node* pHead){ if (pHead == NULL) { return fase; } Node* fast = pHead; Node* slow = pHead; while (fast) {...
2018-05-17 11:16:15 144
原创 ping命令
ping命令我们经常用 [ping +ip地址 ]于检查侧网络的通断,但是除了这个还有好多用法我们可以在Windows下通过 ping Enter 查看其用法
2018-05-04 16:34:45 220
原创 求朋友圈的个数---并查集
问题:1、已知,有n个人和m对好友关系(存于一个集合r中)2、如果两个人是直接的或者间接的好友,(那么他们的朋友圈可以合并)则以下为例:int a[][2] = { { 1, 2 }, { 2, 3 }, { 4, 5 } };1)有5个人开辟6个整型数组,并初始化为-12)合并同一个朋友圈的人{1,2}的领导人是1,{2,3}的领导人是2,要将同一个朋友圈的人都合并到领导人下3.遍历数组,则遍历...
2018-05-04 14:57:43 929
原创 海量数据处理的总结
一.给一个超过100G大小的log file,log中存着IP地址,设计算法找到出现次数最多的IP地址1.切分文件:因为ip地址是32位的(ipv4)的字符串,当100G放不下,我们要对其进行切分,切分成1000个小文件,再对每个文件编号。2.计算文件的位置:将每个文件ip,映射到哈希表中,但是要注意到一点是,利用哈希函数将ip转化成整数,用函数表示:pos=hash(ip)%1000;3.统计每...
2018-05-04 11:29:23 176
原创 孤儿进程和僵尸进程
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程即1号进程收养,并由init进程进行管理。僵尸进城:如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息。这种进程称之为僵死进程。我们通过代码实现并且查看着两个进程孤儿进程:#include<stdio.h> #include<stdlib....
2018-05-03 17:02:09 190
原创 判断出栈的合法性
元素出栈,入栈的合法性。如:入栈序列(12345)出栈为(54321)则合法。出栈为(45231)不合法#include<iostream>#include<stack>#include<assert.h>using namespace std;//1.定义一个栈。 //2.当栈为空时或栈顶元素不等于Out[]中的元素时,将In中元素入栈 //3....
2018-04-17 20:25:31 1467
原创 静态库,动态库
静态库这样就好了动态库为什么windows 的动态库和linux的动态库不能相互使用根本原因:格式不一样,解析规则不一样动态库和静态库的重要区别静:编译时就和可执行文件编译到一起 动:运行时才去加载多个进程用同一个动态库。动态库相比于静态库的优势能够节省空间。不管有多少进程我都可以共享同一块物理内存的动态库...
2018-04-11 16:44:35 120
原创 基于TCP实现的多用户服务器
1.我们用多进程来实现多用户的通信多进程版本——让子进程的子进程即孙子进程,(子进程如果不等父进程会成为僵尸进程)#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<string.h>#include<sys/socket.h>#include<net...
2018-04-06 10:35:12 916
原创 基于UDP和TCP实现CS
1.我们应该先了解UDP和TCP协议首先UDP和TCP是基于传输层的协议我们需要了解UDP和TCP的特性TCP协议的特性:(1) 面向连接的服务;(2) 可靠的数据传输服务;(3) 面向字节流。UDP协议的特性:(1) 无连接服务;(2) 不可靠的数据传输;(3) 面向数据报;以下是流行因特网应用层及其应用层协议和支撑的运输协议:应用应用层协议支撑的运输层协议电子邮件SMTPTCP远程终端访问Te...
2018-04-01 20:06:32 507
原创 PCB--task_struct
要说task_stuct,必须要说进程控制块 PCB (Process Control Block),PCB是作为进程是否存在的标志。(如果有心得PCB产生就说明有进程产生)进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。linux操作系统下的PCB是task_structtask_struct是linux内核的一种数据结构,它会被装载到 RAM(内存)里并包含着进程信息。...
2018-02-25 11:58:39 246
原创 变色的进度条
//strip.c#include<stdio.h>#include"color.h"#include<unistd.h>#define M 100int main(){ char ch='#'; char str[M]={0}; int i=0; char symbol[4]={'|','/','-','\\'}; for(i=0;i<...
2018-02-25 10:02:20 322
原创 Linux中重要目录及重要命令
Linux下的重要目录/proc, /sys, /SElinux, /bin, /usr/lib, /usr/local, /var, /tmp (1)/proc:特殊文件目录。这个目录采用一种特殊的文件格式(proc格式,内核支持这种格式。其中包括了全部虚拟文件。它们并不是保存在磁盘中,也不占用磁盘空间,当查看它们时,实际上看到的是内存里的信息,这些文件有助于我们了解系统内部信息)。 (2)/
2017-11-12 18:23:05 1669
原创 linux 权限探索
1。进入目录需要哪些权限 r–read的权限 w–write的权限 x–修改可执行权限 通过这一系列的操作可以看出只有拥有x权限才可以cd 到目录下面 2 在目录中执行增删查…(cd, touch, ls, rm, mv) 只有我们拥有x w 我们才可以切换到该目录下进行touch,当我们拥有x r 时我们才可以切换到该目录下进行ls 操作,没有x 便不可以执行 rm 和 m
2017-11-08 09:40:23 224
原创 智能指针
要说智能指针我们应该先了解一下RAII RAII(Resource Acquisition Is Initialization),也成为“资源获取就是初始化”,是C++语言的一种管理资源、避免泄漏的惯用法。C++标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。简单的说,RAII 的做法是使用一个对象,在其构造时获取资源,在对象生命期控制对资源的访问使之始终保持有效,最后在对
2017-09-24 15:25:03 216
原创 vector和list的使用
vector和list的区别 1.在存储中 vector是连续存储的;list中的对象不一定是连续存储的。 2.list如果要随机访问某个元素需要遍历list,没有效率。vector重载了[ ]可以直接访问。 3.在list中插入元素,尤其是在首尾插入元素,效率很高,只需要改变元素的指针,但是vector要随机插入或删除数据需要前移或者后移,内存块的拷贝,另外,当该数组后的内存空间不够时,需要
2017-09-22 15:15:43 575
原创 模板不支持分离编译???
分离编译是什么? 所谓分离编译是指将函数的声明和定义分开放在.h和.cpp的文件中。这本开就是很正常的写法,但是当我们遇到模板时却不能这么做。这是为什么所以我们需要探索一下 。//template.h#include<iostream>using namespace std;template<class T>class MC{public: void fun();};//te
2017-08-18 11:47:57 261
原创 多态和多态对象模型
1 单继承的多态,以以下代码为例class A{public: virtual void f1() { cout<<"A::f1"<<endl; } virtual void f2() { cout<<"A::f2"<<endl; } void f3() { cout<<"A::f3"
2017-07-30 16:59:25 206
原创 菱形继承
在探索菱形继承遇到的问题及其总结 先说什么是菱形继承如图(这只是一种) #include<iostream>using namespace std;class A{public: int _a;};class B: public A{public: int _b;};class C: public A{public: int _c;};class
2017-07-23 16:03:31 201
原创 引用计数写时拷贝
拷贝可以概括性的分为以下几类 1 s1和s2分别有它们自己的值,我们需要将s1的对应的空间释放掉然后赋给其s2的值 2 s1和s2分别有它们自己的值,但是s1还有其他别名,我们需要引入计数,为了防止其在析构时程序崩溃(多次释放同一块内存空间)。如图 3 s1和s2对应同一块内存空间,那么我们就不需要赋值了。String& operator==(const string s){
2017-07-12 10:07:09 171
原创 C/C++动态内存管理
语言的动态内存管理 1.C语言使用malloc/calloc/realloc/free进行动态内存管理,它们都是在堆上开辟void test(){ int *p1=(int*)malloc(sizeof(int)*4); free(p1); int *p2=(int*)calloc(4,sizeof(int)); int *p3=(int*)realloc(p2,sizeof(i
2017-07-11 14:53:52 251
原创 拷贝构造的N种情况
1.C++对传参合传返回值时构造的优化处理的总结。 在c++中,传参和传返回值时,如果是引用类型,则不用调用拷贝构造函数,直接返回别名。当语句为一个表达式时,编译器会选择优化,将构造函数与拷贝构造合并。在C++中,调用几次构造函数和拷贝构造函数,就会相应的调用几次析构函数。只有当一个对象已经存在时,d=f()才调用赋值运算符重载,如果对象不存在,则调用的是构造函数。2.再完成下面的题目。 T
2017-07-10 21:48:09 268
原创 单链表基础篇
1.比较顺序表和链表的优缺点,说说它们分别在什么场景下使用? 1). 顺序表支持随机访问,单链表不支持随机访问。 2). 顺序表插入/删除数据效率很低,时间复杂度为O(N)(除尾插尾删),单链表插入/删除效率更高,时间复杂度为O(1)。 3). 顺序表的CPU高速缓存效率更高,单链表CPU高速缓存效率低。 2.从尾到头打印单链表//递归法void PrintList(ListNode*
2017-07-10 18:23:57 215
原创 默认成员函数+运算符重载
1.面向对象程序设计 概念:(Object Oriented Programming,缩写:OOP)是一种程序设计范型,同时也是一种程序开发的方法。 对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。 2.面向对象的三大特性: 封装、继承、多态 3 4.三种访问限定符 1. public成员可从类外部直接访问,private/p
2017-07-10 17:51:03 284
原创 cpp入门基础知识
1命名空间域是随标准C++而引入的。它相当于一个更加灵活的文件域(全局域),可以用花括号把文件的一部分括起来,并以关键字namespace开头给它起一个名字:namespace name1{ int a = 0;}namespace name2{ int a = 1;} name1::a = 3 name2::a = 4;2
2017-07-10 16:40:57 974
原创 函数的调用过程(栈帧)
我们知道每一次函数调用都是一个过程。我们发现其实main函数在__tmainCRTStartup 函数中调用的,而__tmainCRTStartup 函数是在 mainCRTStartup 被调用的。这个过程我们通长称之为:函数的调用过程。这个过程要为函数开辟栈空间,用于本次函数的调用中临时变量的保存、现场保护。这块栈空间我们称之为函数栈帧。 而栈帧的
2017-04-21 22:45:59 234
原创 数组中sizeof与strlen的区别
sizeof与strlen的区别捋完之后快要疯了sizeof是计算所占字节数strlen是从所要求的位置开始遇到/0停止的长度
2017-04-03 19:00:30 361
原创 冒泡排序
代码实现#includevoid bubble_rank(int arr[],int sz){ int i=0,j=0; for(i=0;i { for(j=0;j { if(arr[j]>arr[j+1]) { int temp=0; temp=arr[j]; arr[j]=arr[j+1];
2017-04-03 13:17:16 198
原创 学习c中运算符的简单总结
今天学习了操作符感觉计算机语言也像其他语言一样,挺有意思的,分享一下心得吧!操作符可分为算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符。1算术操作符 + - * / %1)除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。2)对于/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除
2017-03-26 10:07:02 303
原创 我的第一篇博客
我是李月裳,是西安工业大学15级通信专业的学生! 在今天之前,我对c是的要求只是不挂科就行,对自己以后从事什么样的工作丝毫没有概念。听完我们专业的学姐说之后,我觉得自己学了的是个假的c,可以说是皮毛中的皮毛,同时我也知道了c的重要性。如果就这样度过我余下的大学生活,估计会“老大徒伤悲”。我想学习c语言,这是我的决心! 我到底会怎样学习编程,我只能说我会尽
2017-03-19 09:20:46 194
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人