关闭

C++单例模式

#include using namespace std; class CSinglention { public: static CSinglention* Getsinlention() //通过类方法调用类指针变量 { if (_inputsinglention == NULL) _inputsinglent...
阅读(29) 评论(0)

布隆过滤器与位图

布隆过滤器——一种快速检测元素是否存在的数据结构 位图(典型的k v模型)——用来判断一个整数是否出现在集合中,或者查找出现次数最多或最少的元素//布隆过滤器的原理: 我们知道字符串哈希算法,就是把字符串转换为相对应的key值,然后存在于位图中,但是,这也可能存在冲突的情况(多个字符串映射到同一个位置)布隆过滤器就是采用 同时进行多个不同哈希算法进行映射假设我们用五个不同字符串哈希算法 , 那...
阅读(71) 评论(0)

哈希算法相关解析

1、散列法(哈希算法)//原理: 一种高效的存储方式,是利用空间换取时间的快速查找算法 通过哈希函数将关键码映射到不同的位置,已达到快速查找的功能假如关键码有40个,哈希表的位置有50个,通过哈希函数将这40个数以一定的规律映射到表中,在你查找的时候直接调用函数就可以找到,但是,因为这个哈希函数是自己定义的,就可能会存在将两个关键码映射到同一块地址上,就会出现哈希冲突,要是关键码的个数大于哈希表的值...
阅读(141) 评论(0)

Linux网络编程(二)TCP协议通信

一、通讯流程: 1、服务器调用socket()、bind()、listen()、完成初始化后,调用accept()阻塞式等待客户端连接,此时处于监听状态 2、客户端调用socket()初始化,调用connect()函数发出SYN请求并阻塞式等待服务器应答。 3、服务器应答一个SYN+ACK段,客户端收到之后从connect()返回,同时应答一个ACK段,服务器收到后从accept()返回(三...
阅读(122) 评论(0)

Linux网络编程(三)多路IO转接服务器

一、select 采用的是集合的方式,将关心的事件放置集合队列(最多监听1024个)中,轮询访问(每次都会检测所有的句柄)拿到一个已就绪的就会返回,(内核态到用户态的切换来拿事件),内部再使用位运算,将可读,可写,异常三个事件分开来, 1、select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯的改变进程打开的文件描述符个数,并不能改变select监听的文件个数。 2...
阅读(72) 评论(0)

Linux网络编程(一)socket模型创建

Socket、本身有“插座”的意思,在Linux环境下,用于表示进程间的网络通信的特殊文件类型,本质为内核借助缓冲区形成的伪文件。既然是文件,我们就可以使用文件描述符引用套接字,与管道类似,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作保持一致,不过与管道还是有区别的,管道主要应用于本地进程间的通信,而套接字多应用于网络进程间的数据传输。在TCP/IP协议层中,我们...
阅读(123) 评论(0)

计算机网络总结

1、TCP/IP 模型2、TCP/IP各层的协议和接口ARP的存在层是有争议性的,书上有说,它在网络层进行封装(在IP报头之后)一般在数据链路层进行广播寻求MAC地址时,才会触发它3、各层基本概念//物理层: 该层为上层提供了一个传输数据的可靠的物理媒体,物理层确保了原始数据在各种物理媒体上传输//数据链路层 数据链路层在不可靠的物理介质中提供可靠的传输。 在物理层提供的服务基础上向上级提供...
阅读(224) 评论(1)

二叉树面试题总汇

1、前序遍历(递归与非递归)//前序遍历:先访问根节点,再左子树,再右子树 void PrevOrder(Node* root) { if (root == NULL) return ; cout <value <Lchild); PrevOrder(root->Rchild); } //前...
阅读(97) 评论(0)

二叉树的层序遍历与一个数阶乘中0的个数

#pragma once #include #include #include #include #include using namespace std; /*################################################# 层序遍历:先遍历左子树,再遍历右子树 先遍历...
阅读(84) 评论(0)

检查出栈数据的合法性和求一个数二进制中1的个数

#pragma once #include #include #include using namespace std; /*################################################## 定义两个栈,stack1存放数据 ,Stack2辅助存放数据 存数据出栈时,如果要弹出的数据刚好等于栈顶数字,直接弹出...
阅读(82) 评论(0)

实现一个栈Stack,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)

思路: push: 利用两个栈,第一个栈顺序存放元素,第二个栈当为空时,先存入一个元素,再次存入时,如果要存放的元素比第二个栈顶的元素大,则不存入,小于或等于的时候存入,就能保证第二栈顶都是第一个栈中最小的元素 pop: 应该判断第一个栈顶的元素与第二个栈顶的元素是否相等,不等,则只删除栈一的元素,相等的时候,栈1与栈2 都删除,防止错删元素#pragma once #include<iostrea...
阅读(156) 评论(0)

两个栈实现队列+两个队列实现栈+替换空格

#pragma once #include /*#############################################队列,先进先出,一个栈往里面放入数据,当删除数据的时候,如果栈2中有数据,直接弹出删除 如果没有,就从栈1弹出数据放到栈2中,在删除,期间还有判断栈1是否为空 ############################################...
阅读(49) 评论(0)

动态内存管理与智能指针

C、 C++中编译内存分配://一个 C、 C++程序编译时内存分为 4大存储区:栈区、堆区、数据段、程序代码段。 代码段: 又称为常量区,储存常量和编译之后的代码指令 数据段: 又称为静态区,存放全局变量和static 修饰的变量 堆区: 即动态内存分配。程序在运行的时候用 malloc 或 new 申请任意大小的内存,程序员自己负责在何时用 free 或 delete 释放...
阅读(79) 评论(0)

合并两个有序的链表和计算1+2+3+4....

//合并两个有序链表,使合并后依然有序 PNode MergeList(PNode pHead1, PNode pHead2) //递归实现 { if (pHead1 == NULL) return pHead2; else if (pHead2 == NULL) return pHead1; PNode newhead = NULL;...
阅读(71) 评论(0)

链表面试题总汇

1.比较顺序表和链表的优缺点,说说它们分别在什么场景下使用? 1.首先我们从2种结构的结构上来进行分析: (1)对于顺序表。不论是静态的还是动态的,他们都是连续的存储空间,在读取上时间效率比较快,可以通过地址之间的运算来进行访问,但是在插入和删除操作会出现比较麻烦的负载操作,尾插时比较方便。 (2)对于链表,因为他是链式存储。在我们需要的时候才在堆上开辟空间...
阅读(68) 评论(0)

各类算法实现(sort)

#ifndef __INSERTSORT_H__ #define __INSERTSORT_H__ #include "QuickSort.h" #include /* ####################################################################################### 插入排序(Insertion Sor...
阅读(61) 评论(0)

模拟实现简单Mystring

#pragma once #include #include #include using namespace std; class MyString { //############################################################ //传统写...
阅读(64) 评论(0)

C/C++有关子数组和与长度问题

1、给定一个数组,当然其中有很多子数组,在所有子数组的组合中,找到连续累加和最大的那个,返回累加和解题思路:一般思维就是找到所有的子数组,并比较所有子数组长度和,时间复杂度 O(N^2) n*(n-1)*(n-2).... 另一种方法就是客观思考,求累加和最大的,则子数组的第一个位置应该是正数,我们定义两个变量,用cur表示依次累加数组的值,利用ros储存cur中最大值,每当cur累加的值小于0...
阅读(78) 评论(0)

Linux-----线程互斥量与死活锁

一、为什么需要互斥量 大部分情况下,线程使用的数据都是局部变量,变量的地址在线程栈的地址空间内,这种情况下,变量归属于单个线程,其他线程无法获取到这种变量,如果所有的变量都如此,将会省去无数麻烦,但实际情况是,很多变量都是线程共享的,这样的变量称为共享变量,可以通过数据的共享,完成多个线程之间的交互。 但多个线程并发的操作共享变量,会带来一系列问题 eg:在不加修饰的情况下,利用两个线程对cou...
阅读(169) 评论(0)

Linux---system v__信号量

system v 信号量 又被称为system v信号量集,它的本质是是一种数据操作锁(相当于资源计数器),用来同步、协调多个进程之间的数据交换,而自身不具备数据交换功能,信号量是由于同步与互斥的高级管理而提出来的,它支持两种原子性操作,wait(p)与signal(v),其作用是原子性的增加或减少信号量的值 ,主要的作⽤是维护资源的互斥或多进程的同步访问。一、为什么要使用信号量? 是为了防止多个...
阅读(127) 评论(0)
64条 共4页1 2 3 4 下一页 尾页
    个人资料
    • 访问:11975次
    • 积分:744
    • 等级:
    • 排名:千里之外
    • 原创:62篇
    • 转载:1篇
    • 译文:0篇
    • 评论:7条
    最新评论