3 m0_37962600

尚未进行身份认证

暂无相关简介

等级
TA的排名 4w+

设计模式-----工厂和抽象工厂

一、简单概念简单工厂:工厂类中,根据条件决定一个接口由哪个具体产品类来实现;工厂方法:创建多个工厂类。各个工厂类中,都对应一个获得接口A实例的方法,用户决定使用哪个工厂;抽象工厂:对工厂方法进行扩展。各个工厂类中,再增加一个获得接口B实例的方法;注:多个工厂类都继承自同一个接口;二、工厂方法模式1、概述工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是那一...

2018-08-13 17:17:49

不能实现为虚函数的函数以及原因

(1)只有类的成员函数才能说明为虚函数。(虚函数的目的是为了实现多态,多态和集成有关,所以声明一个非成员函数没有任何意义)(2)静态成员函数不能是虚函数。(静态成员函数对于每一个类只有一份代码,所有的对象共享这份代码,它不归某个对象所有,所以没有动态绑定的必要性,不能被继承,只属于该类);(3)内联函数不能是虚函数。(内联函数在程序编译的时候展开,在函数调用处进行替换,虚函数是进行动态绑定...

2018-08-11 15:34:49

深入理解C++中的多态

一、多态的分类1.静多态:在编译期间就可以确定函数的调用地址,并产生代码。也就是说地址是早早绑定的;其往往是通过函数重载和模板来实现;2.动多态:函数调用的地址不能在编译期间确定,必须在运行时才确定;其主要是通过虚函数来实现;二、动多态1、什么是动多态?简而言之就是用父类型的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数;2、动多态的实现虚函数主要实现了...

2018-08-11 15:22:35

重载、重写(覆盖)、重定义(同名隐藏)的区别

重载:指在同一作用域中允许有多个同名函数,而这些函数的参数列表不同,包括参数个数不同,类型不同,次序不同,返回值相同与否并不影响是否重载;重写和重定义则有点像,区别就是在写重写的函数是否是虚函数,只有重写了虚函数才能算作是体现了C++的多态性,否则即为重定义;综上,他们的区别如下:...

2018-08-11 14:13:59

超详细的八大排序算法的各项比较以及各自的特点

一、八大排序算法的总体比较二、算法各自的特点(具体实现见后面博客)1.快排(1)算法思想选择一个基准元素,将比基准元素小的元素放在其前面,比基准元素大的元素放在其后面,然后在将小于基准值元素的子数列和大于基准元素的子数列按原来的方法排序,直到整个序列有序;(2)优缺点优点:极快数据移动少;缺点:不稳定;(3)效率分析此排序算法的效率在序列越乱的时候,效率越高...

2018-08-09 23:01:56

八种排序算法(四)----- 堆排序

堆排过程:先将待排序的数视为完全二叉树(按层次遍历顺序进行编号,从0开始)完全二叉树的最后一个非叶子节点,也就是最后一个节点的父结点。最后一个节点的索引为数组长度len-1,那么最后一个非叶子节点的索引应该是为(len-1)/2.也就是从索引为2的节点开始,如果其子节点的值大于其本身的值,则把他和较大子节点进行交换,即将索引2处节点和索引5处元素交换。交换后的结果如图:建堆...

2018-08-09 22:43:39

八种排序算法(三)---------冒泡排序、选择排序、插入排序、希尔排序、交换排序

一、冒泡排序具体过程:d代码实现:void bubble_sort(int* arr,int len){ if(arr == NULL || len < 0) return ; bool flag = true; for(int i=0;i<len-1 && flag;i++) { fl...

2018-08-09 19:54:28

详解缺页中断-----缺页中断处理(内核、用户)

一、什么是缺页中断?进程线性地址空间里的页面不必常驻内存,在执行一条指令时,如果发现他要访问的页没有在内存中(即存在位为0),那么停止该指令的执行,并产生一个页不存在的异常,对应的故障处理程序可通过从外存加载该页的方法来排除故障,之后,原先引起的异常的指令就可以继续执行,而不再产生异常。二、页面调度算法将新页面调入内存时,如果内存中所有的物理页都已经分配出去,就按照某种策略来废弃整个页...

2018-08-06 18:21:42

fork()部分可能会问到的问题总结(持续更新)

pcb是什么,有什么作用?Pcb是进程管理和控制的最重要的数据结构,每个进程均有一个PCB,其中包含:进程标识符; 处理机的信息(通用寄存器,指令计数器,用户的栈指针); 进程调度信息(进程状态,进程优先级,事件); 进程控制信息(程序的数据的地址,进程同步和通信机制);系统是通过pcb来管理所有的进程;内存的分页管理,页表是什么?在程序中我们使用的是逻辑地址还是物理地址?引入...

2018-08-04 10:00:58

fork()的底层实现

 fork之后父进程与子进程的区别进程ID不同;(父进程的返回值是子进程的ID) 子进程中tms_utime  tms_stime  tms_cutime和tms_ustime的值设为0; 子进程不继承父进程设置的文件锁(子进程继承了父进程中的所有互斥锁、读写锁和条件变量(包括他们的状态),在多线程中,另做处理); 子进程的未处理闹钟会被清除; 子进程的未处理信号集设置为空集;子进...

2018-08-04 09:48:35

select poll epoll的区别及epoll的底层实现

Select  poll每次循环调用时,都需要将描述符和事件拷贝到内核空间;epoll只需要拷贝一次;这种情况在对于描述符数量不大的情况下还可以,但是当描述符的数量达到十几万甚至上百万的时候,他们的效率就会急速降低,因为每一次轮询都需要将这些所有的socket描述符从用户态拷贝到内核态,会造成大量的浪费和资源开销;      2.Select  poll每次返回后,需要遍历所有描述符才能找到...

2018-08-04 09:41:31

深入了解MySQL存储引擎-------InnoDB

如果想看自己的数据库默认使用的那个存储引擎,可以通过使用命令SHOWVARIABLESLIKE'storage_engine';一、InnoDB存储引擎1.InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID)事务的ACID属性:即原子性、一致性、隔离性、持久性                          a.原子性:原子性也就是说这组语句要么全部执行,要么全部不执行,如...

2018-07-12 09:54:29

浅谈MVC设计模式

    最近在整理自己所写的项目时,其中有一个项目利用了MVC设计模式,当时做项目的时候只是简单会使用这个设计模式。今天突然想研究研究它,所以结合网上的一些资料,将MVC设计模式做一个简单的总结概括。    MVC设计模式最大的特点:        可以实现模型的复用:一方面,模型只返回处理结果,并不用关心这些结果如何展现。我们可以提供不同的视图来展现这些        数据;另外一方面,对于同一...

2018-05-30 11:51:05

深入理解Hashtable

一、基本知识Hashtable它是一个散列表,它存储的内容是键值对映射。Hashtale继承于Dictionary,实现了Map、Cloneable、Java.io.Serializable接口。Hashtable的函数是同步的,这意味着它是线程安全的。它的key、value都不可以为null。此外,Hashtable中的映射不是有序的。二、优势所在将数据存储在数组中,并通过数组下标搜索会出现两个...

2018-05-19 18:37:52

条件变量与互斥锁的使用

一、条件变量1.说明    条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待条件变量的条件成立而挂起;另一个线程使“条件成立”(给出条件成立信号)2.创建和注销条件变量有静态动态两种创建方式,静态方式使用PTHREAD_COND_INITIALIZER常量:pthread_cond_t cond = PTHREAD_COND_INITIALIZER动态方式调用p...

2018-05-10 16:09:43

C++11标准新特性

学习了!原文章链接:https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/index.html新特性的目的右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move Sementics) 和精确传递 (Perfect For...

2018-05-02 20:43:27

八种排序算法(二)-----归并排序

一、算法思想首先将初始序列的n个记录看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2向上取整个长度为2(n为奇数时,最后一个序列的长度为1)的有序子序列。在此基础上,再对长度为2的有序子序列进行两两归并,得到若干个长度为4的有序子序列。以此类推,知道得到一个长度为n的有序序列为止。二、算法实现1.递归实现#include<stdio.h>#in...

2018-05-02 20:00:56

八种排序算法(一)------快速排序

算法思想找一个基准值,本题中基准值为数组中最右的元素,再定义两个指针begin(指向首元素)、end(指向尾元素);begin从前往后走找比基准值大的元素,找到后停下;end从后往前走找比基准值小的元素,找到后也停下;然后,交换arry[begin]和arry[end],依次循环操作;当begin与end相遇,将arry[begin]或arry[end]与基准值交换代码实现(递...

2018-05-02 14:16:48

浅谈IP分片的大小及其原因

一、IP分片的定义    IP分片是网络上传输IP报文的一种技术手段。IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组,这一过程称为分片。二、进行IP分片的原因    数据链路层具有最大传输单元MTU这个特性,它限制了数据帧的最大长度。通常要传输的IP报文的大小超过最大传输单位MTU时就会产生IP分片情况,IP分片经常发生在网络环境当中。    例如:在以太网环境当中...

2018-04-22 19:31:22

C++中static的作用

C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。   一、面向过程设计中的static   1、静态全局变量   在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:     #include <iostre...

2018-04-22 13:21:18

查看更多

勋章 我的勋章
    暂无奖章