自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(362)
  • 资源 (6)
  • 论坛 (1)
  • 收藏
  • 关注

原创 各种常用的排序算法实现对数组的排序——整理总结(代码实现)

冒泡排序、插入排序、折半排序(二分插入排序)、快速排序、选择排序、归并排序、希尔排序、堆排序

2017-07-13 11:14:09 497

原创 链表

链表(画图写相应的代码)(初始化、显示、插入(头插、中间插、尾插)、删除、逆序)定义结点类型、定义头指针、初始化链表、创建链表1.      不带表头的单链表//初始化void init_link(Link*head){    *head = NULL;}//显示void display_link(Linkhead){Link temp = head

2016-07-27 16:34:40 333

原创 指针与数组(二)——字符串认知

字符串就是首字符的地址字符串 字符串比较函数strcmp、strncmp 字符串拷贝函数strcpy、strncpy 字符串函数 字符串长度函数strlen 字符串连接函数strcat、strncat 字符串清空函数memset、bzero用C语言实现各字符串函数

2016-07-18 23:36:28 409

原创 libevent源码剖析-最小堆实现定时器

Libevent 源码下载可以去官网 githubLibevent使用堆来管理Timer事件,其key值就是事件的超时时间,源代码位于文件minheap-internal.h中。所有的数据结构书中都有关于堆的详细介绍,向堆中插入、删除元素时间复杂度都是O(lgN),N为堆中元素的个数,而获取最小key值(小根堆)的复杂度为O(1)。堆是一个完全二叉树,基本存储方式是一个数组。看函数名都挺好懂的,只是下面这个结构体变量命名比较坑....typedef struct min_heap...

2020-05-17 10:50:04 132

原创 探索单例模式

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地创建与销毁。何时使用:当您想控制实例数目,节省系统资源的时候。如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。关键代码:构造函数是私有的。应用实例:一个班级只有一个班主任。Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同...

2020-05-04 09:43:04 80

原创 c++11新特性之右值引用

C++11 增加了一个新的类型,称为右值引用(R-value reference),标记为 T &&。在介绍右值引用类型之前先要了解什么是左值和右值。左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。一个区分左值与右值的便捷方法是:看能不能对表达式取地址,如果能,则为左值,否则为右值 。所有的具名变量或对象都是左值,而右值不具名。...

2020-05-03 10:43:34 173

原创 布隆过滤器(Bloom Filter)- 避免缓存穿透和海量数据处理之利器

缓存处理流程这种模式处理缓存通常都是先从数据库缓存查询,如果缓存没有命中则从数据库中进行查找。这里面会发生的三种情况如下:①缓存命中:当查询的时候发现缓存存在,那么直接从缓存中提取。②缓存失效:当缓存没有数据的时候,则从database里面读取源数据,再加入到cache里面去。③缓存更新:当有新的写操作去修改database里面的数据时,需要在写操作完成之...

2020-05-02 11:54:50 546

原创 snprintf_s使用时注意问题

最近在项目中看到不知名的某位人士调用snprintf_s 这个函数,然后尝试调用这个接口时出现了崩溃,可能接口不常用,竟然没人发现,尝试找出其中原因。问题描述:这段代码运行到delete 时会导致崩溃。函数描述:int _snprintf_s( char *buffer, size_t sizeOfBuffer, // 打算用于存储的缓冲区的宽度...

2020-05-01 10:32:52 970

转载 通用轻量级二进制格式协议解析器

在通信协议中,经常碰到使用私有协议的场景,报文内容是肉眼无法直接看明白的二进制格式。由于协议的私有性质,即使大名鼎鼎的 Wireshark,要解析其内容,也无能为力。面对这种情况,开发人员通常有两个办法:第一,对照报文内容和协议规范进行人工分析(假设内容没有经过加密、压缩);第二,编程实现协议报文的解析(源于程序员的懒惰 ^_^)。很明显,第二条道路是主流。目前比较常见的实现方式是开发对应...

2019-01-10 14:52:44 454

原创 一致性hash之负载均衡

目前现在的负载均衡主要采用取模的方式,如果有一个机器故障了,或者我想再添加一台机器怎么处理?现查到了一致性hash算法。自己看了一下资料:先说一下大概思想,一致性Hash主要是在分布式算法中用的比较多。1.我们现在常用的是线性hash,这样万一有一个机器坏掉了,就容易造成数据丢失。如果换成环形hash,一定范围内的hash映射的是环形的下一个节点,就不会对其它机器的数据造成太大影响。2...

2019-01-03 15:46:49 336

转载 分布式算法(一致性Hash算法)

一、分布式算法    在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted )等。其中哈希算法是最为常用的算法.  典型的应用场景是: 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均分发到每...

2018-12-27 15:44:55 201

转载 UML类图关系(C++)

♀ 双向关联(Association)CAssociation1和CAssociation2可以互相调用对方的公共成员函数和成员变量。代码触析:[cpp] view plain copyclass CAssociation1  {  private:      CAssociation2* m_pAssociation2;  };    class CAssociation2  {  privat...

2018-03-12 14:40:28 888

转载 C语言实现面向对象的思想(实现封装、继承和多态)

由于C语言是面向过程的语言,在处理比较大的项目时,结构上会显得有些松散。管理起来不免力不从心。其实在使用C语言写程序的过程中,也可以引入一些面象对象的思想。下面我们主要来谈谈如何用C语言把这些思想表达出来:1. 封装这个最简单了,C语言中虽然没有类,但有struct。这可是个好东西。我们可以在一个struct中存入数据和函数指针,以此来模拟类行为。[cpp] vie

2017-09-17 22:25:55 672

原创 c++简单线程池实现

线程池,简单来说就是有一堆已经创建好的线程(最大数目一定),初始时他们都处于空闲状态,当有新的任务进来,从线程池中取出一个空闲的线程处理任务,然后当任务处理完成之后,该线程被重新放回到线程池中,供其他的任务使用,当线程池中的线程都在处理任务时,就没有空闲线程供使用,此时,若有新的任务产生,只能等待线程池中有线程结束任务空闲才能执行,下面是线程池的工作原理图:我们为什么要使用线程池呢

2017-09-13 21:36:27 518

原创 C++继承中的成员访问控制

由基类到派生类的过程中,在派生类里如何访问基类成员,以及派生类对象如何访问基类成员,是根据派生类在从基类派生时是以什么方式进行的派生:public、protect或者private。下面说一下在这三种派生方式下成员函数和成员变量的访问和修改权限。派生类是指直接派生类!【代码1】123456789

2017-09-10 14:34:57 494

转载 浅谈如何提高服务器并发处理能力

目录 (一)什么是服务器并发处理能力(二)有什么方法衡量服务器并发处理能力1.吞吐率2.压力测试(三)怎么提高服务器的并发处理能力1,提高CPU并发计算能力(1)多进程&多线程(2)减少进程切换,使用线程,考虑进程绑定CPU(3)减少使用不必要的锁,考虑无锁编程(4)考虑进程优先级(5)关注系统负载(6)关注CPU使用

2017-08-29 21:13:33 4473

转载 多进程与多线程

关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。 经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好。根据实际情况来判断,哪个更

2017-08-16 13:45:43 352

转载 LINUX内核面试题摘选

LINUX内核面试题摘选1) Linux中主要有哪几种内核锁?答:Linux的同步机制从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随Linux从单处理器到对称多处理器的过渡;伴随着从非抢占内核到抢占内核的过度。Linux的锁机制越来越有效,也越来越复杂。linux的内核锁主要是自旋锁和信号量。

2017-08-16 10:47:00 883

转载 数转化为二叉树

普通树转换为二叉树的方法是:①树中所有相同双亲结点的兄弟节点之间加一条连线②对树中不是双亲结点第一个孩子的结点,只保留新添加的该结点与左兄弟结点之间的连线,删去该结点与双亲结点之间的连线③整理所有保留和添加的的连线,使每个结点的第一个孩子结点连线位于左孩子指针位置,使每个结点的右兄弟结点连线位于右孩子指针位置:整个转换过程如下图从左到右所示

2017-08-16 10:01:22 1371

原创 有关析构函数和构造函数的几点说明

有关析构函数和构造函数的几点说明:构造函数和析构函数都不能被继承(构造函数和析构函数是用来处理对象的创建和析构的,它们只知道对在它们的特殊层次的对象做什么。所以,在整个层次中的所有的构造函数和析构函数都必须被调用而不能被继承。)构造函数可以重载,析构函数不可以重载(构造函数可以有参数,析构函数没有参数。)构造函数不可以是虚函数,析构函数可以是虚函数(1.  构造函数为什么不能为

2017-08-16 09:56:22 459

原创 实现生产组和消费者的机制,利用共享内存实现文件的打开和读写操作,PV操作。

/*sem_com.h*/#include#include#include#include#includeunion semun{ int val; struct semid_ds *buf; unsigned short *array;};/*信号量初始化(赋值)函数*/int init_sem(int sem_id,int init_valu

2017-08-15 15:32:34 1006

原创 采用管道函数创建有名管道,使用select函数替代使用poll函数实验多路复用

创建两个有名管道,获取3个文件描述符(2个管道,1个标准输入),然后初始化读文件描述符,select监视文件描述符 的文件读写,管道1输出到屏幕上,管道2输出到屏幕上,标准输入‘Q’来进行判读是否退出。/*pipe_select.c*/#include#include#include#include#include#include#include#def

2017-08-15 15:23:51 873

原创 文件锁以及多路复用方式解决多个用户对一个文件的操作

一、文件锁用于多个用户共同使用或操作同一个文件。有读锁的时候可以再加读锁,不能再加写锁。有写锁的时候,不能加任何锁,加读锁时,该描述符必须是读打开,加写锁时,该描述符必须是写打开,且只在进程间有用。  使用flock(锁定文件或解除锁定)函数  头文件 #include  定义函数 int flock(int fd,int operation);  函数说明 flo

2017-08-10 20:11:12 702

原创 内存分配、野指针、指针、数组相关

内存分配方式有哪些?什么是内存泄漏?什么是野指针?如何避免野指针?什么时候将引用作为返回值?引用与指针的区别?数组与指针的区别?函数指针与指针函数的区别?数组指针与指针数组的区别?指针常量与常量指针的区别?函数模板与模板函数的区别?类模板与模板类的区别?重载overload、覆盖overwrite、隐藏override的区别

2017-08-09 15:31:38 607

原创 关键字的作用及区别汇总

static关键字static关键字具有隐藏式、记忆、延长生命周期的作用。在C语言中,static既可以修饰变量,也可以修饰函数。1)        修饰的变量保存在静态数据区,静态变量默认初始化为0,只初始化一次。2)        修饰局部变量,延长变量的生命周期,直到程序运行结束,下一次运行依据是上一次的运行结果,体现其记忆功能。3)        修饰全局变量,只在本文

2017-08-08 16:58:51 415

转载 c++设计一个不能被继承的类

摘要:使用友元、私有构造函数、虚继承等方式可以使一个类不能被继承,可是为什么必须是虚继承?背后的原理又是什么?用C++实现一个不能被继承的类(例1) 1 #include 2 using namespace std; 3 4 template 5 class Base{ 6 friend T; 7 private: 8 Base

2017-08-02 11:14:27 275

原创 信号量与互斥锁之间的区别

1. 互斥量用于线程的互斥,信号量用于线程的同步。 这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。 互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。 同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。

2017-07-26 10:46:41 695

原创 C++11 STL中的容器

C++11 STL中的容器==================================================一、顺序容器:vector:可变大小数组;deque:双端队列;list:双向链表;forward_list:单向链表;array:固定大小数组;string:与vector相似的容器,但专门用于保存字符。

2017-07-26 09:44:34 229

原创 C++面试题总结1

http://blog.csdn.net/jingxuewang110/article/details/6736142  内容摘要:1.static有什么用途?(请至少说明两种)    1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。    2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它

2017-07-20 13:13:02 253

转载 C++中SendMessage与PostMessage的区别

概述Send有发送的意思,而Post具有投寄的意思。 联想一下现实生活中我们写信(很久很久以前。。。。)来记就很简单了: Send:  相当于邮寄员,他会将快件亲手交给收件人,并且需要收件人签字,他才闪人。而在消息机制中,就是说,系统(邮寄员)会将收到的消息(邮局分发)直接发送到某个窗口的窗口过程(收件人),并且需要该窗口作出处理(收件人签字)才返回。 这东东就是Sen

2017-07-13 10:12:01 7227

原创 重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。方法一:/** * Definition for binary tree * struct TreeNode { * int val; *

2017-07-12 17:19:59 189

转载 变量(auto、static、extern、register)及其生存周期

1C+ +中变量的存储类型分为如下几种类型:auto——函数内部的局部变量(auto可省略不写)。static——静态存储分配,又分为内部和外部静态。extern——全局变量(用于外部变量说明)。register——变量存储在硬件寄存器中。(1)自动变量①在函数内部定义的局部变量即为自动变量,用于说明自动变量的关键字auto可以省略。②在函数

2017-07-10 11:12:23 318

原创 面向对象的相关描述

以下关于面向对象的描述错误的是:正确答案: C   面向对象的基本特性是封装,继承和多态构造函数不可以是虚函数,析构函数可以是虚函数子类重新定义父类虚函数的方法叫做重载多态是为了接口重用,封装和继承是为了代码重用解析:对于C++中经常出现的函数名称相同但是参数列表或者返回值不同的函数,主要存在三种情况:1.

2017-07-08 20:20:15 166

转载 输入一个链表,从尾到头打印链表每个节点的值。

输入一个链表,从尾到头打印链表每个节点的值。

2017-07-07 15:48:25 295

原创 替换空格

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

2017-07-07 15:31:28 191

原创 二维数组中的查找

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

2017-07-07 14:54:14 202

转载 一个关于fork()的面试题

前两天有人问了个关于Unix的fork()系统调用的面试题,这个题正好是我大约十年前找工作时某公司问我的一个题,我觉得比较有趣,写篇文章与大家分享一下。这个题是这样的:题目:请问下面的程序一共输出多少个“-”?1234567891011121314

2017-07-07 14:33:23 1279

原创 C语言的未定义行为

下列 C 代码中,不属于未定义行为的有___正确答案: Cint i=0;i=(i++);char *p=”hello”;p[1]=’E’;char *p=”hello”;char ch=*p++;int i=0;printf(“%d%d\n”,i++,i--);都是未定义行为都不是未定义行为答案解析:

2017-07-07 12:33:59 278

转载 NorFlash和NandFlash区别

Flash编程原理都是只能将1写为0,而不能将0写成1.所以在Flash编程之前,必须将对应的块擦除,而擦除的过程就是将所有位都写为1的过程,块内的所有字节变为0xFF.因此可以说,编程是将相应位写0的过程,而擦除是将相应位写1的过程,两者的执行过程完全相反.(1)闪存芯片读写的基本单位不同       应用程序对NorFlash芯片操作以“字”为基本单位.为了方便对大容量NorFlash

2017-07-07 09:24:54 234

原创 函数模板与类模板

下面有关函数模板和类模板的说法正确的有?A.函数模板的实例化是由编译程序在处理函数调用时自动完成的B.类模板的实例化必须由程序员在程序中显式地指定C.函数模板针对仅参数类型不同的函数D.类模板针对仅数据成员和成员函数类型不同的类答案:ABCD解析:  模板(Template)是一种强大的C++软件复用特性,通常有两种形式:

2017-07-06 20:06:01 193

C++实现一致性hash算法

一致性hash应用于负载均衡算法,本实现由C++语言开发。  一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义: 1、平衡性(Balance)2、单调性(Monotonicity) 3、分散性(Spread)4、负载(Load)

2019-01-03

软件设计师大量视频百度云链接

软件设计师大量视频百度云链接,下载后如果链接失效,评论回复一下,我重新发,谢谢

2017-04-21

软考软件设计师复习资料

软考 软件设计师 资料: 软件设计师全真模拟试题 软件设计师考试考点分析与真题详解(计算机与软件工程知识篇)操作系统资料 软件设计师考试辅导 (考点精讲例题分析强化训练)冶金工业出版社 软件设计师教程

2017-04-21

ubantu下安装mysql

ubantu安装mysql并测试

2017-03-14

虚拟机下安装ubantu、网络配置、安装搜狗输入法以及eclipse

虚拟机下安装ubantu、网络配置、安装搜狗输入法以及eclipse

2017-03-14

支持向量机导论

没有学过机器语言,不用担心,本文章可以让你很快理解SVM支持向量机。

2017-03-02

zm1_1zm的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

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

TA关注的人 TA的粉丝

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