- 博客(16)
- 收藏
- 关注
原创 OC控件--UITableView
设计思想:通过代理的方法对它进行回调设置UITableView有两种风格:UITableViewStylePlain 默认平铺的风格UITableViewStyleGrouped 默认分组的风格在初始化控件的时候可以设置,如下:UITableView *tableview=[[UITableView alloc]initWithFrame:self.view.fra...
2019-07-16 16:01:05 315
原创 ET和LT的区别
概念ET(边沿触发)和LT(电平触发)是 epoll对文件描述符的两种操作。LT的工作模式:当文件描述符上的事件就绪后,如果事务没有处理完成或者没有处理,那么下一次epoll会提醒应用程序。ET的工作模式:当文件描述符上的事件就绪后,如果事务没有处理完成或者没有处理,那么下一次epoll则不会提醒应用程序,这就要求我们的应用程序在收到一次提醒后,必须将当下的数据处理完成。内核实现...
2019-01-30 19:37:06 8281 12
原创 二分查找与二分排序(直接插入排序的优化)
二分查找二分查找我们又叫它为折半查找法,二分查找的条件是查找对象必须是顺序表,并且表必须有序,我们以数组为例,模拟一下查找的过程:假设这是我们要查找的数组,查找的数据为78我们需要三个标志left,right,mid分别记录数组的左端,右端,和中间位置,然后我们将要查找的数据与mid(mid为lefi与right的中间位置)所指向的数据进行比较,会出现三种情况,如果查找数据大于mi...
2019-01-08 12:07:19 654
原创 I/O复用(三)——epoll
在说epoll 之前,我们先来吐槽一下poll和select,这两个,每次调用都要重复传入文件描述符集或者事件集,而且返回的是所有的文件描述符还需要我们去轮询查找哪一个就绪,很累机器啊,所以我们的epoll就千呼万唤始出来了,相比于poll和epoll在这一方面的缺陷,epoll要优秀很多啊。epoll的实现是依靠一组函数来实现,它吧用户关心的文件描述符上的事件放在内核里的一个事件表中,就省去...
2018-12-13 21:09:38 213 1
原创 I/O复用(二)——poll
之前我们介绍select 的时候,我们已经说过了I/O复用的相关概念,话不多说,今天我们就直接来看I/O复用的另一个系统调用:poll。poll系统调用和select相似,也是在指定的时间内轮询一定量的文件描述符,以测试其中是否有就绪事件。原型如下:(1)fd参数是一个polled结构体类型的数组,原型如下: event成员告知poll监听哪些事件,也就是用户感兴趣的事件,是一...
2018-12-13 18:05:48 181
原创 I/O复用(一)——Select
为什么要有I/O复用 从多进程多线程到进程池线程池,尽管我们处理事件的效率越来越高,但是却有一个问题,一直都没有解决,那就是,当服务器分配了一个线程或进程为某一个客户端服务时,该进程/线程就相当于与这个客户端绑定了,除非客户端断开连接,否则不管有没有请求事件,这个线程/进程都只能为这个客户端处理事件,我们知道,系统允许我们创建的线程/进程是有限的,这样其实会造成资源的浪费,所以...
2018-12-13 16:16:39 214
原创 进程池与线程池
在Linux的下,当我们启动HTTP服务后,其实系统就为我们提供了一个线程池,我们的请求服务也是由线程池里面的线程来处理的。我们先来看一下HTTP启动后我的系统给我分配的线程:查看httpq启动后所有的进程使用的命令:ps -ef | grep httpd可以看到由根创建出了八个线程为我们服务,这是http启动后自己创建的,那么我们要如何来模拟设计线程池呢,我们继续往下看。设计...
2018-12-13 11:58:39 336
原创 HTTP通信
HTTP的通信可以分为两部分:HTTP请求和HTTP应答.HTTP通信过程默认使用的是TCP协议,TCP连接从建立到关闭的过程中,客户端(浏览器)仅给服务器发送了一个HTTP请求,而服务器则会给客户端返回一个HTTP应答。我们主要分析一下HTTP请求报文段和HTTP应答报文段的内容。HTTP请求这是HTTP的请求内容:第一部分请求行请求行,格式:“请求方式+”“”+ URL +...
2018-12-07 18:29:21 1276
原创 HTTP与HTTPS的区别
概念 HTTP:超文本传输协议,用户浏览网页时在浏览器地址栏中输入的URL(统一资源定位符)前面都是以“http://”开始的。HTTP定义了信息如何被格式化,如何被传输,以及在各种命令下服务器和浏览器所采取的响应。但是HTTP协议以明文方式发送内容,并不提供任何方式的数据加密,如果攻击者截取了网页浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议...
2018-11-27 23:28:17 136
原创 shell项目简报
shell项目简报一 项目目的shell作为命令语言,shell项目的目的在于交互式地解释和执行用户输入的命令。二 项目需求分析项目主要分为两大部分:第一部分: 命令的获取分析命令解析器功能在于接受并解析用户输入的命令,运行方式为死循环模式,直至用户输入exit之后退出。运行过程主要由四步实现。1.参考于linux运行界面,输出提示符。2.接受用户输入的命令。3...
2018-11-13 20:14:37 292
原创 进程与线程之间的区别
我们在讨论进程与线程的区别之前,首先我们要清楚进程与线程的概念。 什么是进程?进程是并发执行程序在执行过程中资源分配和管理的基本单位(资源分配的最小单位),是指令+数据+资源的一个集合。进程可以理解为程序的一次实例化,应用程序一旦执行,就是一个进程。每个进程都有自己独立的地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段。什么是线程?线程是进...
2018-10-28 17:18:45 322
原创 字符串匹配BF算法
BF算法又称暴风算法,是相较于KMP的笨办法,假设母串s长度为m,子串p长度为n,那么该算法在最坏的情况下的时间复杂度为O(m*n),相较于KMP算法的O(m+n),在时间复杂度上稍逊一筹,但是与KMP算法相比,BF的算法思想更容易理解,程序编写也更为容易。其算法思想是用两个标志i,j分别记录两个字符串的下标,我们用i表示母串s的下标,j表示子串J的下标,然后从母串的第一个字符与子串...
2018-09-29 09:50:58 3771
原创 C++替代宏的功能实现的方法
在C++中,对于替代宏的功能实现,我们通常见到的有三种方法:1.常量用const来替代实现类似于#define A 10,是在程序的预编译期将所有的A用常量10替换掉,如果我们不想使用宏,就可以用const int A=10替换之前的用法,这一步将会在程序编译过程中将所有的A置为常量10,以此达到我们想要的目的。2.有参宏函数用inline(内联函数)来替换实现宏其实是在预编译时期进行了代...
2018-09-05 09:12:59 3675
原创 僵尸进程的处理办法
僵尸进程(僵死进程)是指一个进程主体结束,但是该进程的PCB依旧存在的情况或者在多进程编程中,父进程未结束但是子进程已经结束父进程没有对子进程进行回收。 僵尸进程存在的意义在于进程结束后,进程的退出状态需要保存到PCB结构中,方便父进程获取子进程的退出状态。进程真正结束的标志:1、进程主体退出。2、父进程获取子进程的退出状态之后,子进程的PCB释放。那么我们为什么要处理掉僵尸进程呢,这是因...
2018-08-09 19:33:02 489
原创 浅析静态库和动态库的区别及linux下二者的生成和使用
从编程的角度来讲,库文件通常被分为静态库文件和动态库文件,其目的在于将部分代码封装在一起编译后供自己或他人调用,好处在于编译后的库文件看不到源代码,可保密,同时不会因为不小心修改了函数而出问题,便于维护。但是二者之间存在一定的差异。 1.静态库: 静态库在Windows操作系统中是.lib文件,在Linux下是.a文件,相当于中间(.o)文件的集合,是在程序链接时使用,讲静态库中的...
2018-08-03 13:14:17 1111
原创 将float型数据转化成int型
在将float型数据转化成int数据前,首先我们要了解float型数据在内存中的存储方式,float类型在内存中占4个字节32个比特位,如下: 0 00000000 000000000000000000000001.符号位 其中最左边的为符号位,0为正,1为负。2.指数 接下来一共8位,也用二进制来表示,系统默认偏移量计算值为127,也就是说,如果你的指数是4,那么内存...
2018-07-22 15:41:57 26801 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人