- 博客(26)
- 收藏
- 关注
原创 linux制造iso镜像和镜像挂载
linuix下使用mkisofs命令进行制作iso镜像,在之前要先安装genisoimage主要命令:mkisofs -J -R -o test.iso ./test.xx-J -joliet 生成joliet格式的文件joliet是用于Windows环境下使用的光盘-R -rock 生成Rock Rigde目录格式信息Rock Ridge用于Unix/Linux环境...
2019-03-03 16:10:32 446
原创 python中基本语法学习记录(一)
一:python中append与extend的区别:list.append(object) 向列表中添加一个对象object。不能整合list.extend(sequence)把一个序列seq的内容加到列表中。 二:pdb调试单步调试:python -m pdb xxxx.py多步调试:import pdbpdb.set_trace() 三:superv...
2019-02-23 18:02:31 249
原创 各种排序的深入和对不同数据的处理的性能分析(二)
延续上一篇博客,上一篇讲了排序算法O(n2)的算法和优化,还有针对什么情况下的数据什么排序更有效的问题的详解,今天来谈谈看O(nlogn)的排序的实现和优化,以及对应的数据情况分析。第一:归并排序:归并排序的算法思路就是:分而治之,先划分成小数组,然后再两两合并,最后合并成一个最终的数组。下面个代码实现:void megre(int a[],int first,int mid,i...
2018-12-13 22:32:06 223
原创 对setsocketopt()的解析
今天在看怎么禁用TCP中的negle算法,学习到了setsockopt函数。下面分享一下setsockopt函数的调用和参数详解:int Err=setsockopt(int sockfd,int level,int optname,const void* optval,socklen_t optlen);第一个参数就是套接字名sockfd;第二个参数是使用的协议,有以下三种:SO...
2018-12-11 21:11:47 994
原创 socket网络编程,基础函数的使用和需要注意的地方
先写一个不管是网络编程还是其他编程都很有用的小技巧:包裹函数:int Socket(int domain,int type,int protool){ int sockfd; if((sockfd=socket(domain,type,protool))<0){ perror("socket error!"); exit(1); }}...
2018-12-09 22:42:21 279
原创 DNS原理及过程
DNS域名系统,给域名系统DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为IP地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名”呢?这是因为在这种因特网的命名系统中使用了许多的“域(domain)”,因此就出现了“域名”这个名词。“域名系统”明确地指明这种系统是应用在因特网中。域名到IP地址的解析过程的要点如下:当某一个应用...
2018-12-09 19:43:46 232
原创 在浏览器中输入一个网址后的全过程
这是一个笔试面试基本上常考的一个题,主要他涵盖的知识点非常非常的广,针对里面的知识点也可以进行深入。首先,写一下全过程的简写:1.在客户端浏览器中输入URL。2.发送到DNS(域名服务器)获得域名对应的web服务器的IP地址。3.客户端浏览器与web服务器建立tcp连接.4.客户端浏览器向对应IP地址的WEB服务器发送相应的http或https请求。5.WEB服务器响应请求...
2018-12-08 11:07:11 2374
原创 二叉搜索树的删除和插入操作
最近在复习红黑树,红黑树实现的代码实在是过多,插入又要左旋右旋,又要变颜色什么的,这里我先对二叉搜索树的操作进行回忆和整理,然后在是avl,再到红黑树。对于二叉搜索树,构建一颗二叉搜索树和查找二叉搜索树中的某个值都是十分简单的操作,在这里主要写一下二叉搜索树的删除和插入操作,当然这其中的操作,肯定是二叉搜索树的删除操作显得更加复杂一点:删除remove:对于删除操作,主要就是主要一下几...
2018-12-05 00:21:05 340
原创 各种排序的深入和对不同数据的处理的性能分析(一)
先说O(n2)的排序:冒泡排序:冒泡排序就是最简单的一个排序,而且基本上在工程上也没有人用了,思想就是全部遍历一遍,然后每一个元素都往前冒泡。下面上代码,对于冒泡,我做了两个优化,一个是双向冒泡,一个是标志位,如果一趟冒泡下来没有发生交换,则整体有序:void buffersort(int a[], int n) { for (int i = 0; i < n; i++)...
2018-11-29 20:30:06 178
原创 对蓄水池算法的解析和应用
今天写一个10万个数据的消息队列,对里面的数据输入和输出感觉并没有达到完全随机的地步,这让我想起了我之前学习过的蓄水池算法,然后就自己手撸了一个感觉比较满意的随机池。蓄水池算法:所谓的蓄水池算法,其实很简单:先给一个概念一个很大的文件,我要随机取其中的某一行,先选第一行,然后第二行以1/2的几率决定要不要替换第一行,第三行以1/3的几率要不要替换,直到最后一行,然后每一行的几率都是一样的。...
2018-11-25 01:38:49 449
原创 对使用消息队列进行进程间通信的一些笔记
首先,你得先定义一个消息队列的缓存结构,然后消息队列里我觉得最重要的函数是以下几个:第一:创建和打开消息队列:msg_id=msgget(消息队列的名字,IPC_CREAT|0666);第二:把消息添加到消息队列里面去:msgsnd(msg_id,&消息缓存,sizeof(要放数据的字节大小),0);第三:把消息从消息队列中取出来一个:msgrcv(msg_id...
2018-11-24 23:59:49 258
原创 字符串的匹配(KMP和sunday算法详解)
之前一直用的kmp来做字符串的匹配题目,直到今日才知道还有sunday这种高效又简单的算法,虽然不能百分之一万的保证准确性,我也没有看sunday算法的相关证明,不过学习了之后确实觉得巧妙,今天我就好好写写这两种算法。第一 经典的kmp:kmp的核心就是求next数组,而求next数组,主要就是以下几步:每一个next[i]的值都代表着i前面的字符的最大回文长度。因此,我们设next[0...
2018-11-19 20:07:17 1266
原创 针对交换操作——考虑写一个不抛异常的swap函数。
近日在研究share ptr的源码,第一遍看的时候对于里面的swap函数不以为然,反复再三之后才知到其中奥妙,于是,在这里,我来谈谈swap函数的理解,为接下来的share ptr的源码分析做铺垫。swap是异常安全编程的脊柱,以及用来处理自我赋值可能性的一个常用机制。首先,咱们来看看典型的swap实现:namespace std{ template<typename ...
2018-11-12 21:57:56 201
原创 智能指针的引入——定义一个行为像指针的类(point like class)
定义一个行为像指针的类(point like class)在C++智能指针share_ptr之所以能够比较智能的进行资源的动态分配和回收,一个非常非常重要的概念就是引入了引用计数。智能指针不仅仅是一个裸指针,而是一个行为像指针的类。所谓的引用计数的工作原理,有以下四点:当我们创建一个对象时,只有一个对象共享状态,所以我们把当前对象的引用计数置为一。拷贝构造函数不分配新的计数器,而是...
2018-11-12 17:07:30 383
原创 多数投票算法
多数投票算法是一种用O(1)的空间复杂度,来求出数组中众数的算法:其实这个算法十分好理解,最直观的说,我们要再数组中找到大于n/k的数,首先我们要明白一件事,举个例子,k=2,这时候,整个数组中比n/2还要多的数只有可能是一个,而k=3时,数组中比n/3还要多的数最多也只能有两个,同理可得,当为k的时候,数组中出现这种元素的个数最多只有可能有k-1个。所以,到这里,我们可以设k-1个候选人...
2018-11-11 00:48:01 3240 1
原创 二叉树的Zigzag遍历
是什么是Zigzag遍历,简单点说就是层序遍历的升级版,首先,我们要设置一个LefttoRight的bool变量,通过一个bool变量来控制当前层是从左往右压还是从右往左压。当然,在这里我还对之前的层序遍历进行了进一步的更新:vector<vector<int>> ZigzaglevelOrder(TreeNode* root){ vector<ve...
2018-11-07 11:30:18 1017
原创 二叉树的遍历(递归和非递归的实现)
一.二叉树的遍历(先序,中序,后序)的递归实现实现二叉树的递归其实很简单,只要理解了二叉树的递归系统压栈是怎么压的,所谓的先序,中序,后序遍历的区别其实就是打印的时机的问腿而已了。系统会把每一个节点压栈三次,打印第一次就是先序遍历,打印第二次就是中序遍历,打印第三次就是后序遍历。下面上代码:void proder(TreeNode* root){if(root==nullpt...
2018-10-16 22:16:45 177
原创 对于TIME_WAIT持续两个MSL的作用
作用:1.可靠的关闭tcp的连接。比如网络拥塞,如果主动关闭方最后一个ACK没有被接收方收到的话,在此时因为持续了两个MSL而尚未关闭的TIME_WAIT就会把这些尾巴问题给处理掉,比如说,重新启动TIME_WAIT,然后重新发送给一次ACK。2.防止由于没有持续TIME_WAIT的时间导致新的TCP连接建立起来,延迟的FIN重传包会干扰新的连接。...
2018-10-09 17:11:35 2005
原创 详解TCP的拥塞控制
今天我想要来谈谈tcp的拥塞控制一.拥塞控制的方法1.慢开始2.拥塞避免3.快重传和快恢复二.慢开始慢开始的思路是这样的,当发送端一开始发送数据的时候,并不知道当前的网路状况是个什么样子的,这时候倘若要是一下子传输较大的数据字节,就有可能出现拥塞的情况,因此,慢开始将cwnd(拥塞窗口)的值置为一,然后设置一个ssthresh值(慢开始门限)。当第一个数据字节被成功传输了之...
2018-10-08 13:12:46 207
原创 ARP协议详解
一.什么是物理地址首先我们先了解物理地址,即mac地址,从层次上看,在数据链路层,和物理层中,我们所用的都是都是物理地址,然后在数据链路层之上,网路层甚至是应用层中,我们所使用的就是IP地址,IP地址其实就是个逻辑地址嘛,也是通过软件实现的。二.ARP协议现在,我们知道了物理地址就主机的底层地址,然后我们思考一个问题,我们平常都是知道了对方的IP地址,也就是目的IP地址,那现在我们怎么...
2018-10-04 19:57:24 523
原创 tcp可靠性详解
tcp的可靠性:1.应用数据被分割成tcp认为最合适的数据块,由tcp传递ip的信息单位称为报文段或段。2.当tcp发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段,如果不能及时收到确认,将重发这个报文段。(tcp的超时重传问题)。3.当tcp收到发自tcp连接另一端的数据时,它将发送一个确认,不过这个确认不是立即发送的,通常要推迟个几分之一秒。(tcp的粘包问题)4.t...
2018-10-03 15:49:45 217
原创 IP协议详解(一)
深入剖析IPv4和IPv6深入剖析IP协议,大部分时间就是深入剖析IP头部协议,随着现在的IPv6马上的普及,我们今天就来详细分析一下IPv4和IPv6的头部。IPv41.版本号:占四位,就是IP协议的版本,通信双方的IP协议必须要达到一致,IPv4的版本就是4.2.首部长度:占四位,因为长度为四比特,所以首部长度的最大值为1111,15,又因为首部长度代表的单位长度为32个字...
2018-10-01 23:33:58 53392 1
原创 对于\n冲刷缓冲区,对Linux中fork()函数的理解
首先今天写了两道感觉一模一样的fork题目,都是输出_的,结果一个题目输出8个_,一个题目输出6个_,我看了许久,才发现一点点的不同,于是去Linux系统下自己编译了两个cpp文件,果然,现在贴上图: 第一个文件,输出的是hello!world people! hello!world people! ,第二个文件,输出的是hello!world people! world people! ...
2018-09-29 22:41:03 382
原创 linux中vim编辑器的强大的查找替换功能
一.vim编辑器的介绍在linux当中,vi编辑器对文件可以算是无所不能的了,当然对于vi的命令行中,最最最简单的命令比如: w写入,new新建,q退出,d number删除行数等等,这些最扎实的基本功我想大家都懂并且牢记于心,今天我们就来好好的讨论一下vim编辑器的查找替换功能。二.为什么要用查找替换首先,我举个例子,先弄一个简单的文本,如下图:这是我随便打的一个txt文...
2018-09-22 00:27:08 5523
原创 C陷阱与缺陷中的一点点对于多余的逗号的自己的理解
c语言允许初始化列表中出现多余的逗号,例如:int days[]={ 31, 28, 31,}为什么这种特性是有用的呢?我开始也是被这个问题卡住了,想了半天不知所以然,不得已来了一手百度,看过几个比较好的帖子,我恍然大悟,答案基本上都是一句话: 这样对自动化程序设计的初始化列表有着极大的方便,你们看看这样是不是一头雾水,来来来,我详细分析一下:首先我们把这个列表展开一下:...
2018-09-19 17:23:56 502
原创 Python中迭代器,循环和列表解析,还有迭代的高级处理(一)
首先我们谈谈简单的迭代器方法:_next_()Python中的迭代协议:有_next_方法的对象会前进到下一个结果,而在一系列结果的末尾,则会引发StopIteration。在Python中,任何这类对象都被默认为是可迭代的。任何这类对象也能以for循环或者其他的迭代工具遍历,因为所有的迭代工具内部工作起来都是在每次迭代中调用_next_,并且捕获StopIteration异常来确定什么时候停止。...
2018-04-27 09:21:45 436
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人