自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(107)
  • 资源 (1)
  • 收藏
  • 关注

原创 进程通信--总结

关于进程通信,我整理了一下自己所总结的几篇文章以供以后复习查阅。进程通信的一些基本概念:进程通信概念和进程通信方式进程通信的几种方式:信号量:信号量(生产者和消费者模型) 和 信号量(进程通信)共享内存: 共享内存(进程通信)消息队列: 进程通信之消息队列管道:进程通信之管道(PIPE)

2017-05-20 17:37:56 1083

原创 Python踩坑笔记

Python现在是一门非常流行的语言,可用于后台开发,也可以用来写一些脚本快速实现,验证功能,现在很火的机器学习,数据分析等等也热衷于使用python,因此,学习python的用途还是很广泛的。一般来说,很多人在学python这种脚本语言之前都应该学习过C/C++/Java等语言,因此上手python是一件比较简单的事情,我也是这样,科班出生,主要使用的C++/C语言,虽然没学过python,但是给

2017-11-15 22:01:47 575

原创 关于2Sum,3Sum的题解

这几天在刷题,遇到几道有趣的概率题,需要设计算法,编程实现,整理一下: 给定N张扑克牌和一个随机函数,设计一个洗牌算法 如何等概率地从n个数中随机抽出m个数? 给定一个能够生成0,1两个数的等概率随机数生成器”,如何生成⼀个产生0,1,2,3的等概率随机数生成器? 和上题类似,如何用rand7生成rand9? 有一枚硬币,以p的概率产生正面,以1-p的概率产生

2017-08-27 18:18:10 581

转载 几道有趣的概率题

这几天在刷题,遇到几道有趣的概率题,需要设计算法,编程实现,整理一下: 给定N张扑克牌和一个随机函数,设计一个洗牌算法void fun(vectorint>& v)

2017-08-19 10:14:35 2246

转载 linux下端口扫描的实现(TCP connect、TCP SYN、TCP FIN、UDP四种方式)

一、TCP常用的端口扫描方式有以下三种:1.connect扫描我们知道,常见的TCP的socket实现过程为更本质的连接和结束的过程是如下这个样子的:从上面两个图我们可以看出来目标主机的一个端口如果是监听状态(LISTENING或者LINSTEN),那么当我connect目标主机时就能成功,否则说明端口是关闭的。优点:  编程简单,是需要

2017-08-16 17:01:39 7269

原创 Linux指令ps,top

主要整理下一些Linux下自己平时很少用到但是应该了解的命令,目前整理了以下命令: ps top artop每天一个linux命令(44):top命令pspsarar命令ld

2017-08-16 16:59:42 515

原创 回调函数,函数指针

如何获取到类中函数指针//A类与B类的定义class A{public: void Test() { cout << "A::Test()" << endl; }};class B : public A{public: void Test() { cout << "B::Test()" << endl; }

2017-08-15 20:38:08 377

原创 C++四种类型转换

const_cast主要用于删除变量的const属性,便于赋值const int a = 2;int* p = const_cast<int*>(&a );*p = 3;reinterpret_cast仅仅是重新解释类型,没有二进制的转化,主要用于:指针,整数之间的互相转化在指针类型(尤其是函数指针)之间进行转换int *ip;char *pc = reinterpret_cast<ch

2017-08-15 19:49:15 344

转载 Qt删除layout的控件

基于某些原因,我们可能希望往一个布局内动态删除和添加新的元素,添加我们都能很清楚得看到addWidget这个接口.删除的话官方也有示例: QLayoutItem *child; while(child=this->ui->centralWidget->layout()->takeAt(0)) { delete child; }

2017-08-07 10:21:19 7955 1

原创 hash原理

通过hash函数将数据映射为索引(下标),便于查找,在hash冲突做得好且数据较少的情况下可达到O(1)。 常用的hash函数有除留余数法,线性探测,二次探测,开链法,在大部分情况下基本就是用开链法:hash的负载因子:元素个数/hash表长度 一般控制在0.7 -0. 8如何提高hash查找的效率设置好的hash函数,冲突尽量少空间换时间,增大表长STL使用素数表hash桶挂

2017-07-18 22:34:08 438

原创 单链表含环的各种面试题

判断链表是否带环?若带环求环的长度?若带环求环的入口点?用快慢指针求是否带环?快慢指针相遇则带环设相遇点为meet,求环长度,只需要设置p指针指向meet,设置count,循环的时候++count,直到p指向meet得出环长度如下图:

2017-07-17 20:56:10 353

原创 只能生成栈上对象,堆上对象,不能继承,单例模式

1.设计一个类不能被继承 2.设计一个类只能在堆上创建对象。 3.设计一个类只能在栈上创建对象 4.单例模式之所以把这4道题放在一起,是因为他们有着相似之处。 在C++中,类的对象建立分为两种,一种是静态建立,如A a; 另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直

2017-07-16 17:18:50 617

原创 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字

实现1+2+3…+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字class Test{public: Test() { x++; sum += x; } static int GetSum() { return sum; }private: static int x; st

2017-07-16 14:50:26 622

原创 gcc中(-I -l -L)参数的意义

关于编译连接的常识helloworld背后发生了什么?(CSAPP笔记2)gcc -o hello hello.c -I/home/hello/include -L/home/hello/lib -lworld//有时候还需设置环境变量 LD_LIBRARY_PATH前面的编译选项,一般来说大家都熟悉,关键是后面几个,我们逐一解释: -I/home/hello/include我们知道

2017-07-15 11:13:30 1074

转载 shell字符串匹配

一、简介      Bash Shell提供了很多字符串和文件处理的命令。如awk、expr、grep、sed等命令,还有文件的排序、合并和分割等一系列的操作命令。grep、sed和awk内容比较多故单独列出,本文只涉及字符串的处理和部分文本处理命令。二、字符串处理1、expr命令expr引出通用求值表达式,可以实现算术操作、比较操作、字符串操作和逻辑操作等

2017-07-04 19:47:24 54641

原创 TCP小型服务器(poll)

我们之前写过多线程,多进程,select机制的TCP服务器,作为IO复用的另一种机制poll,我们也有必要去学习一下,下面就是基于poll机制的服务器。makefile.PHONY:allall:client serverclient:client.c gcc -o $@ $^server:server.c gcc -o $@ $^server/***************

2017-07-03 21:17:37 561

原创 sed,awk工具学习

sed工具 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法 常用选项: -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才

2017-07-02 22:02:51 469

原创 正则表达式以及grep,cut等命令学习

所谓正则表达式,简单来说就是一种处理(复杂)字符串的方法,它以行为单位,通过添加一些特殊符号来达到增删查改字符串的目的。正则表达式可分为以下三个内容:比如我们要匹配以123开头中间有3个x字符的字符串:其中^表示开头,也就是位置限定符,.* 表示没有字符,任意一个字符或者任意 多个字符,其中.表示字符类,而 * 表示数量限定符。下面我们来详细讲一讲这三者。关于标准正则和扩展正则表达式的区别:其实它们

2017-07-02 17:42:13 696

原创 小型tcp服务器--select

在前面的博客中,我用多线程,多进程编写了一个小型服务器,之所以会使用多进程/多线程是因为服务器往往需要服务多个客户端,提高并发性和效率是十分重要的,然而缺点是系统开销较大,系统需要创建多个进程/线程。然而,现实生活中,一个程序,或者一个网络服务器的真正的性能瓶颈往往在IO,事实上,网络IO进行读写数据之时,往往因为就绪条件不满足而出于等待的状态,这大大就降低了我们性能。对于网络IO,可分为两步:

2017-06-29 21:18:25 456

原创 shell脚本编程实例--进度条,求和&平均值,斐波那契,改变字符串大小顺序

利用求1+2+3+…+100的和,要求打印出1+2+3+…+100=5050我想了两种方法:字符串拼接依次打印两种思路代码如下://依次打印sum=0for ((i=1; i<=100; i++))do if [ $i -eq 100 ];then echo -n "$i=" break fi echo -n "$i+"

2017-06-28 21:33:17 913 1

原创 shell脚本运行的原理(source命令等)

Shell英文意思是外壳, 用户可以通过Shell和操作系统交互,通俗的讲Shell就是一个解释器,当我们输入命令Shell就解释执行,Shell有很多版本,我们一般使用的都是bash,在Linux输入一条命令可以查看当前正在使用的Shell:echo $SHELL屏幕会出现:/bin/bashShell有两种方式:因此,我们主要来学习Shell脚本编程。在理解Shell脚本运行的原理之前,我们必须

2017-06-28 16:29:36 9295

原创 TCP协议报文格式和三次握手,四次挥手

源端口和目的端口: 用来表示发送主机的进程和接收主机的进程,实现TCP复用和分用序号: TCP是面向字节流的,TCP连接中的每个字节都按序编号,序号字段又叫报文段序号,指的是当前报文段的第一个字节的序号,比如一报文段的序号字段为301,数据有100字节,则序号为301,下一个报文段应该从401开始,序号为401确认号:期望收到下一个报文段的第一个字节序号,比如A发送一个报文段序号为501,数据长度为

2017-06-27 22:09:12 1573

原创 UDP协议以及与TCP区别

UDP和TCP协议都属于传输层协议,负责完成网络中端到端之间的通信,其中UDP协议相对比较简单,但是有些琐碎的点还是值得总结的,另外一个UDP/TCP的区别也算是一个高频考点了,因此,本文主要会总结下UDP协议的注意点,以及和TCP的区别,而TCP内容涉及太多了,会另外再开一篇博客总结的。谈协议,我们直接先看UDP报文是怎么样的,根据图来学习理解UDP。UDP的首部一共是8个字节,分别是源端口,目的

2017-06-27 20:24:51 526

原创 了解网络通信中的端口

熟悉TCP/UDP协议的同学可能都知道端口这一词,无论是TCP还是UDP报文都有源端口和目的端口字段,为什么会需要这些字段呢?这是因为,对于网络之间的通信,本质而言就是应用进程之间的通信,而IP协议只提供主机与主机之间的通信,可是一个主机有那么多进程,如何区别是哪个进程通信呢?端口就起着标识的作用。通过IP:port这一对套接字就能保证不同主机上进程之间的通信,我们后面所学的套接字编程就要使用到端口

2017-06-27 19:49:59 1876 1

原创 基于tcp的小型服务器(多线程多进程)

在深入理解计算机系统第11章中,讲到一个echo服务器,基于tcp字节流的小型服务器,利用socket套接字接口,完成了一个简易的服务器。具体细节可参考网络编程(编写一个小型服务器)–csapp11章。不过这个小型服务器有一个难以接受的缺点在于:它是单进程的服务器,也就是它只能服务一个客户,我们先不去讨论这个功能强弱,我们知道在现实生活中,一个网站,一个服务器必须要能够服务多个用户,如果只能服务一个

2017-06-27 16:41:05 847

原创 CRC校验

网上关于CRC校验的文章已经有不少了,但是我总觉得有些繁琐,其实对于大部分人只需要了解CRC是做什么的,原理是什么即可。因此,我想用尽量简短的篇幅来向大家介绍CRC。关于CRC,我只介绍以下几点:用来做什么的基本的原理给出实例来帮助大家理解,毕竟光讲一堆原理太抽象。CRC是用来做什么的?最常见的用途就是差错检测。一般在计算机网络的书籍都会讲述CRC,其实说白了就是现实的网络十分复杂,从一个主

2017-06-26 21:09:48 1159

原创 shell脚本中倒引号,$(), eval的区别

在Shell脚本中,当我们vim test.sh输入以下文本:echo dateecho `date`

2017-06-26 16:53:42 621

原创 网络编程(编写一个小型服务器)--csapp11章

网络应用随处可见,表现的形式也各不相同,有趣的是,在不同的表现形式之下都是基于相同的编程模型,依赖于相同的编程接口,因此学习网络还是比较保值的,因为这么多基础设备还在运行着,基本机制也在短时间内很难改变。网络编程的知识很多,包括进程,线程,信号等等,同时需要读者了解TCP/IP协议,本文假定读者已经了解熟悉这些相关知识,如果没有可能需要学习APUE,计算机网络这些基础知识了。本文的最终目标就是编写一

2017-06-26 15:41:15 1020

原创 理解unix 系统I/O --csapp读书笔记

昨天,面百度,其中有一个问题是:open的返回值是什么?从你调用open函数到Linux下出现了一个文件,这中间发生了什么?第二个问题,当时就懵逼了,后来仔细想想,发现自己其实看过,其实讲文件描述符相关~为此,自己又重新看了APUE第二章,同时对应看了CSAPP第10章,因此做一个总结~IO是什么?i/o是input,output的缩写,也就是输入输出的意思。在计算机中,I/O就是在主存和外部设备(

2017-06-24 22:02:12 897 2

原创 理解重定向之dup,dup2

Linux下当使用 ls > file 命令,可以将原本输出在屏幕上的文字重定向到file文件中(如果没有file文件则创建之)我们可以利用dup,dup2函数也实现一下重定向。它们的接口如下:#include <unistd.h>int dup(int oldfd);int dup2(int oldfd, int newfd);dup(fd)是对fd进行一份拷贝,将当前最小未被使用的文件描述符

2017-06-22 17:35:47 1091

原创 计算机网络基础知识和体系结构

现代社会,网络已经和水,电一样成为我们的不可或缺的日常需求了,可以说网络无处不在。作为一名用户,只需要学会如何使用网络即可,而作为一名计算机专业的学生,一名程序员有必要去深入了解其中原理。因此,本章主要会介绍一些计算机网络的基本定义,网络的体系结构等,旨在学习计算机网络的基本概念,为接下来的网络编程打下良好的基础。之前在大二在学过计算机网络,但是时间太久了很多已经都忘了,因此这篇博客也是对我自己知识

2017-06-17 21:53:46 15568

原创 gdb调试多线程多进程程序

gdb的简介和功能:gdb是GNU开发的一个在Unix,Linux上使用的C/C++和汇编语言程序的调试工具,它主要帮助用户在调试程序时完成以下工作:启动程序,按照用户要求影响程序的运行设置断点,在指定位置停止当程序停止,检查它出现什么问题动态改变程序的执行环境,可以先纠正一个错误,然后再纠正其他错误使用gdb为了发挥gdb的功能,需要在编译源程序时加上-g选项,这样才能够在目标代码加入调

2017-06-15 22:47:00 746

原创 多线程编程2--线程的同步和互斥

当多个线程共享相同的内存时,需要确保每个线程看到一致的数据视图。 如果每个线程内部的变量其他线程都不会访问到,那么就不存在一致性问题; 如果变量是只读的,那么多个线程同时访问它也不存在不一致性问题; 但是,一旦一个变量是可写,当一个线程对它进行修改的时候,其他有可能对它进行读取或者写入操作从而导致数据不一致的问题。此时就需要同步机制来保证。APUE上给出一个例子:由于递增操作不是原

2017-06-14 22:51:12 556

原创 多线程编程1 --线程创建,退出,等待,分离

线程的基本概念线程是在进程内部运行的一个执行分支,它是运行在进程的地址空间中。和进程之间的独立性不同,线程之间更强调共享性,它共享进程的地址空间,比如数据段,代码段,堆。。。以及文件描述符表。因此,无论是线程的创建,终止,切换的代价都要比进程小很多,线程之间可以直接通信而不需要向进程通信那么麻烦(共享内存,消息队列,信号量等机制),当然有优点就有缺点,由于线程强调共享性,一个进程内的所有线程是互相影

2017-06-11 23:26:08 1209

原创 反转字符串

反转字符串s = "123456"打印出654321这里面有2种想法:改变字符串s = “654321”,直接打印逆序打印字符串,不改变字符串这里我都简单实现了一下:void reverse_c(char* str) //c语言实现{ if (*str == '\0') return; reverse_c(str+1); putchar(*str);

2017-06-10 17:19:20 344

转载 CopyOnWrite(COW)的优缺点

http://blog.jobbole.com/104707/

2017-06-04 23:26:15 1220

原创 常用的C++11特性(面试易考)

大二的时候看过《C++Primer》,了解过C++11,因此就在简历上写上了解C++11,结果就是频频被问到有关C++11。。。发现自己答的并不算太好~因此,简单总结一下,我在找实习的过程被问到的C++11特性。1. nullptr注意在C++中NULL仅仅是define NULL 0的一个宏定义,因此,有时候会产生歧义比如f(char*)和f(int),参数传NULL的话到底该调用哪个?事实上,在

2017-06-02 23:15:45 10573

原创 逆时针填充正方形(递归 循环)

如果所示,逆时针填充正方形,从1,2,3…到16,输入一个正方形的大小,填充。 比如输入4,正方形如上图,如果输入5,则是1,2,3…到25。这道题,可以按照如图所示的方法,先构造最外一圈的数,123一组,456一组,789一组,101112一组,只需要注意到下标的变化,数字的更新即可。对于里面矩阵可以采用递归的写法。void FillTheRectangle_1(vector<vector<in

2017-05-25 17:12:15 876

原创 利用可变参数模拟实现简易printf

printf一般是这么使用的, printf (“Characters: %c %c \n”, ‘a’, 65); 它是可变参数,遇到%s,%c,%d就格式化输出 因为我们重点是了解学习可变参数,因此,我们简化一下,遇到c,s,d就格式化输出 当然也许你会说那么想输出c字符咋办?其实不难,只要扫描的时候向printf学习用%c输出,c直接输出,只不过我们重点不在这个扫描字符串分析,

2017-05-24 21:22:37 333

原创 C++中文件读取处理(按行或者单词)

前段时间参加蓝桥杯,遇到一些题目,题目本身不难,按照常规思路写代码即可,但是我忘了如何读取文件了。。。面对一堆数据楞是写不出。还有几天是蓝桥杯的决赛,所以为了避免踩同样的坑,我打算通过实例复习下文件读写。文件读写需要引fstream,如果对fstream不了解的话,可以查一查官方的文档cplusplus这个网站。一般常用的函数就是open,close,getline…具体的函数不会了直接查一下,学会

2017-05-22 17:46:14 14504

const的一些操作

const的一些操作

2016-03-04

空空如也

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

TA关注的人

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