自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

杨龙飞的博客

让一个人迷茫的原因只有一个 ——那就是本该拼博的年纪,却想得太多,做的太少!

  • 博客(109)
  • 收藏
  • 关注

原创 RabbitMQ的应用场景以及基本原理介绍

1.背景RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现。2.应用场景2.1异步处理场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2.并行的方式 (1)串行方式:将注册信息写入数据库后,发送注册邮件,再发送注册短信,以上三个任务全部完成后才返回给客户端。 这有一个问题是,邮件,短信并不是必须的,它只是一个

2017-02-09 23:30:02 186913 49

原创 内存映射文件原理探索

首先说说这篇文章要解决什么问题? 1.虚拟内存与内存映射文件的区别与联系. 2.内存映射文件的原理. 3.内存映射文件的效率. 4.传统IO和内存映射效率对比.虚拟内存与内存映射文件的区别与联系 二者的联系虚拟内存和内存映射文件都是将一部分内容加载到,另一部分放在磁盘上的一种机制,二者都是应用程序动态性的基础,由于二者的虚拟性,对于用户都是透明的. 虚拟内存其实就是硬盘的一部分,是计算

2016-11-27 17:10:09 18187 9

原创 数据库"范式"

1.为什么要学习数据库”范式”?当我们独立去完成一个自己的小项目的时候,肯定要去设计”合适”的数据模型即逻辑架构,那么,我们怎么知道自己设计的数据模型是最”合适”的呢?肯定得有一个标准去衡量自己设计的数据模型,看到这里,大家知道为什么要学习范式了.2.”范式”能解决什么问题?刚才说过,学习范式是为了去设计一个”合适的”数据模型,那么,一个”合适”的数据模型,它能解决什么问题呢? 1

2016-07-05 16:55:55 3673

原创 C++ 的四种类型转换

背景C语言中强制类型转换可以随意转换我们想要的类型,格式如下(类型)变量名,那么为什么C++还要引入新的4种类型转换呢? 1.新的类型转换控制符可以很好的控制类型转换的过程,允许控制各种类型不同的转换. 2.C++的类型转换控制服能告诉程序员或读者我们这个转换的目的是什么. static_cast< T * > (content): 静态转换(编译器处理)它主要用于C++中内置的基本数据类型之间

2017-02-13 11:34:16 983

原创 哈希表

什么是哈希表1.哈希表又称为散列表,是根据关键码值(Key value)而直接进行访问的数据结构,也就是说,它通过把关键码值映射到表中的一个位置来访问记录,以加快查找速度,这个映射函数叫做散列函数,存放记录的数组叫做散列表。  记录的存储位置=f(关键字) f是散列函数 这里的对应关系f称为散列函数,又称为哈希(Hash函数), 采用散列技术将记录存储在一块连续的存储空间,这块连续的存储空间称

2017-02-10 21:07:12 712

原创 new和malloc区别

1. 区别new的功能是在堆区新建了一个对象,并返回该对象的指针,所谓的【新建对象】的意思就是,将调用该类的构造函数,因为如果不构造的话,就不能称之为一个对象。malloc只是机械的分配了一块内存,如果用malloc在堆区创建一个对象的话,是不会调用构造函数的,严格来说malloc不能算是新建了一个对象,只能说是分配了一块与该类对象大小相同的内存而已,然后强行把它解释为【这是一个对象】,按这个逻

2017-02-10 14:54:00 751

原创 C++指针和引用的区别

1.指针与引用区别指针是一块内存的地址值,访问变量是间接访问,引用是一块内存的别名,访问变量是直接访问.引用是一个变量的别名,本身不单独分配自己内存空间,而指针有自己的内存空间. 引用使用时无须解引用(*),指针需要解引用.引用只能在定义时被初始化一次,之后不可变;指针可变. 引用不能为空,指针可以为空. “sizeof 引用”得到的是所引用的变量(对象)的大小,而”sizeof 指针

2017-02-10 11:58:26 964

原创 浅谈TCP/IP四种计时器、慢启动、拥塞避免、快速重传、快速恢复

持续计时器假设一种场景:A给B发送数据,如果B告诉A自己的缓冲区已满,于是A停止发送数据,等待一段时间后,B的缓冲区出现了富余,于是给A发送报文告诉rwnd大小为400,但是这个报文不幸丢失了,于是就出现A等待B的通知,B等待A发送数据的死锁状态,为了处理这种问题,TCP引入了持续计时器,当A收到B的零窗口通知时,就启用该计时器,时间到则发送一个字节的探测报文,对方会在此时回应自身的接收窗口大小,如

2017-02-09 09:27:02 2252

原创 TCP四次挥手中,主动关闭方最后为什么要等待2MSL之后才能关闭连接?

和TCP三次同步握手不一样的是,TCP关闭连接用四次挥手来实现,即A—–>B Fin,B—->A ACK, B—–>A Fin,A—-B ACK A—-B Fin, B—->A ACK,A属于主动关闭方,收到B的ACK之后,A到B的方向连接关闭,即half shutdown,这时不能再发送数据了. 这种状态下B还是可以单向发送数据的,B的数据发送完毕,也可以做关闭动作了, B——>A Fin

2017-02-08 20:16:00 6057

原创 常见排序算法总结

前言本文将介绍常见的9种排序算法,围绕下面几个问题讨论每一种排序算法:这个算法的思想是什么?这个算法的稳定性怎样?时间复杂度是多少?在什么情况下,算法出现最好情况or最坏情况?这个算法的具体实现?以下排序算法都以从小到大排序 1.冒泡排序(交换排序)1.1算法思想:排序每次对相邻的两个元素比较,如果它们的相对排列次序与所希望的不符,便交换它们的次序,这样,各元素就会像水中冒气泡一样通过交换

2017-02-08 12:46:38 482

原创 C++对象模型

1.C++对象模型概述 有两个概念可以解释C++对象模型 1.语言中直接支持面向对象程序设计的部分 包括了构造函数、析构函数、多态、虚函数等等. 2.对于各种支持的底层实现机制 对象模型研究的是对象在存储上的空间与时间上的优化,并对C++面向对象技术加以支持,如以虚指针、虚表机制支持多态机制. 2.理解虚函数表2.1多态与虚表C++中虚函数

2017-02-05 11:19:48 970

原创 线程局部变量__thread关键字

__thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比.__thread变量每一个线程有一份独立实体,各个线程的值互不干扰,可以用来修饰那些带有全局性且值可以变,但是又不值的用全局变量保护的变量. __thread使用规则:只能修饰POD类型(类似整型指针的标量,不带自定义的构造、拷贝、赋值、析构的类型,二进制内容可以任意复制memset,memcpy,且内容可以复原),不能修饰

2017-01-03 15:34:18 1333

原创 Redis学习笔记(三)---对象

Redis 对象简介Redis是一种key/value型数据库.Redis并没有直接使用前面提到的简单动态字符串、双端链表、字典、压缩列表、整数集合.而是基于这些数据结构创建一个对象系统,这个系统包括字符串对象、列表对象、哈希对象、集合对象和有序对象这个五种对象.每种对象都用到了至少一种我们前面所介绍的数据结构.对象类型Redis共有五种对象的类型,分别是: 类型常量 对象的名称 REDI

2016-12-22 15:32:12 653

原创 Redis学习笔记(二)----跳跃表

Skip List 介绍Skip List是一种随机化的数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间)。基本上,跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表(因此得名)。所有操作都以对数随机化的时间进行。Skip List可以很好解决有序链表查找特定值的困难。Skip List的定义

2016-12-22 09:37:20 497

原创 Redis学习笔记(一)----简单动态字符串

一.SDS定义SDS的定义: struct sdshdr{ //记录buf数组中已使用字节的数量,等于SDS中所保存字符串的长度 int len;   //记录buf数组中未使用字节的数量. int free; char buf[]; 字节数组. }二.SDS与C字符串的区别1.常数复杂度获取字符串的长度C字符串并不记录自身的长度信息,所以为了

2016-12-21 11:58:55 508

原创 基于netty的消息队列StormMQ简介

StormMQ一. 简介StormMQ是一个支持消息发布-订阅的消息中间件,采用java语言开发,netty网络框架.Kryo序列化框架为网络传输数据序列化,protostruff序列化框架作为数据持久化的序列化。保证消息的可靠投递和消费.二.架构设计二.功能简介1.支持消息者集群.消费者A是一个集群,订阅了topicA,broker收到topicA的某条消息后,只投递给消费者A集群中的一台机器.

2016-12-14 11:04:37 2849

原创 Kryo序列化和ProroStruff序列化性能比较

JavaBean类package SeriazleCompare;/** * Created by yang on 16-12-13. */public class Student { private String name; private int age; private int time; private String xupt; public St

2016-12-13 18:11:50 1541

原创 8086汇编0号中断处理程序

1.中断的基本概念中断是指在计算机执行期间,CPU收到某个信号(来自软件或硬件),暂时保存正在执行的程序的上下文,转而去执行相应的中断处理程序. 2.8086CPU内部有内部有下面的情况发生时,将产生相应的中断信息.除法错误,比如div指令产生的除法溢出 中断码:0单步执行;             中断码: 1执行into指令

2016-12-06 20:44:59 6346

原创 汇编语言实现在80*25彩色字符模式下显示字符串

记得大一刚接触c语言的时候,用c语言打印出了彩色的字符串,但感觉很神奇,转眼间,已经成为大三狗了,哈哈^^. 好了,不说废话了,今天,就来看看怎样用汇编语言打印彩色的字符串. 80*25彩色字符模式在内存地址空间中,B8000H~BFFFFH共32KB的空间,为80*25彩色字符模式的显示缓冲区,向这个地址空间写数据,写入的内容将立即出现在显示器上.在80*25彩色字符模式下,显示器可以显示25

2016-12-02 10:11:19 6557

原创 最佳线程数和QPS以及RT

最近学习性能优化方面的东西,所以,总结一下:名词解释QPS:系统每秒处理的请求数(query per second)RT:系统的响应时间,一个请求的响应时间,也可以是一段时间的平均值.最佳线程数:刚好消耗完服务器瓶颈资源的临界线程数. QPS和RT的关系对于单线程:QPS = 1000/RT 对于多线程:QPS = 1000*线程数/RT性能的两个点:吞吐量和延迟,通俗的解释就是QPS和R

2016-11-26 09:03:36 1895

原创 基于netty的消息队列设计(一)

一.什么是消息队列消息队列技术是分布式应用间信息交换的一种技术,消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走,通过消息队列,应用程序可以独立地执行,而不需要知道彼此的位置……….当然,上面所说,是比较抽象的,简单点来说,消息队列,就是一个消息的转发器,联系应用间关系的枢纽. 二.何时需要消息队列上面简单了解了消息队列,那么,我们什么时候会用到消息队列,用它能给我们的程序带来什么

2016-11-08 22:49:57 6512

原创 ubuntu 14.04下安装protobuf2.6.1

1.下载protobuf点击下载protobuf2.6.1解压安装 tar -zxvf protobuf-2.6.1.tar.gzsudo apt-get install build-essentialcd protobuf-2.6.1/./configuremakemake checksudo make install 3.检查是否安装成功protoc –version 安装成功会

2016-10-27 16:40:39 10356 3

原创 System.getProperty("line.separator") 是什么意思?

在Java中存在一些转义字符,比如"\n"为换行符,但是也有一些JDK自带的一些操作符比如 : System.getProperty("line.separator")这也是换行符,功能和"\n"是一致的,但是此种写法屏蔽了 Windows和Linux的区别 ,更保险一些.

2016-10-27 15:58:11 1467

原创 C++设计模式之----单例模式

前言 单例模式,故名思义,其意图是保证一个类只有一个实例,并提供一个访问它的全局访问点,该实例被所有的程序模块共享.在很多地方要用到这种设计模式,如系统的日志输出,操作系统的窗口,一个pc连一个键盘等. 单例模式有许多实现方法. 1.懒汉模式  第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例, 需要加锁,因为可能会有多个线程进入判断实例是否存在的if语句,从而它是非线程安

2016-09-27 21:02:55 313

原创 如何查出某个宏定义在哪个头文件内?

yang@yang:~$ sudo find /usr/include/ -name *.h | xargs grep 'ORIG_EAX' /usr/include/reg.h:# define ORIG_EAX 11/usr/include/x86_64-linux-gnu/asm/ptrace-abi.h:#define ORIG_EAX 11

2016-09-23 15:13:42 3423

原创 C++ 四种类型转换的关键字及其特点

前言C++的四种强制类型转换,所以C++不是类型安全的. 关键字分别是:static_cast,dynamic_cast,const_cast,reinterpret_cast 新类型的强制转换可以提供更好的控制强制转换过程,孕育控制各种不同类的强制转换,C++风格是static_cast(content).C++风格的强制转换其它的好处是,它们能清晰的表明它们要干什么,程序员只要扫一眼这样的

2016-09-22 08:19:57 1699 1

原创 Java NIO 学习总结

一.Java NIO 核心组成部分:Channels Buffers Selectors 所有的IO在NIO中都从一个Channel开始,Channel有点像流,数据可以从Channel读取到Buffer中,也可以从Buffer写到Channel中. Channel和Buffer有几种类型: FileChannel. 从文件中读写数据DatagramChannel 能通过U

2016-09-19 16:26:11 872 2

原创 面试题1----把字符串转换成整数

题目要求:写一个函数StrToInt实现将字符串转换为整数的功能。 需要考虑的点字符串为空串或空指针.字符串含有非0到9的字符.特别注意字符串转换到int值,要考虑溢出的问题,正整数的最大值是0x7FFFFFFF,负数的最小值是0x80000000. 代码如下:#include<iostream>#include<string.h>#include<limits>bool strToI

2016-09-19 12:37:55 2911 1

原创 NAT 原理与NAT穿越

NAT的简介和原理简介NAT即Network Address Translation,它可以让那些使用私有地址的内部网络连接到Internet或其它IP网络上.NAT路由在将内部网络的数据包发送到公用网络时,在IP包的报头把私有地址转换成合法的IP地址.原理:当内部网络中的一台主机想传输数据到外部网络时,它先将数据包传输到NAT路由器上,路由器检查数据包的报头,获取该数据包

2016-07-22 15:46:25 15487 1

原创 浅谈AVL树,红黑树,B树,B+树原理及应用

背景:这几天在看《高性能Mysql》,在看到创建高性能的索引,书上说mysql的存储引擎InnoDB采用的索引类型是B+Tree,那么,大家有没有产生这样一个疑问,对于数据索引,为什么要使用B+Tree这种数据结构,和其它树相比,它能体现的优点在哪里? 看完这篇文章你就会了解到这些数据结构的原理以及它们各自的应用场景. 二叉查找树简介二叉查找树也称为有序二叉查找树,满足二叉查

2016-07-18 09:36:32 29849 5

原创 轻松理解MYSQL MVCC 实现机制

1. MVCC简介1.1 什么是MVCCMVCC是一种多版本并发控制机制。 1.2 MVCC是为了解决什么问题?大多数的MYSQL事务型存储引擎,如,InnoDB,Falcon以及PBXT都不使用一种简单的行锁机制.事实上,他们都和MVCC–多版本并发控制来一起使用.大家都应该知道,锁机制可以控制并发操作,但是其系统开销较大,而MVCC可以在大多数情况下代替行级锁,使用MVCC,能降低其系统开

2016-07-14 18:46:13 96863 85

原创 Java 线程池---ExecutorService

1.线程池 1.1什么情况下使用线程池单个任务处理的时间比较短.将需处理的任务的数量大.1.2使用线程池的好处减少在创建和销毁线程上所花的时间以及系统资源的开销.如果不使用线程池,有可能造成系统创建大量线程而导致消耗系统内存以及”过度切换”; 2.ExecutorService和Executors2.1简介ExecutorService是一个接口,继承了Executor,public i

2016-07-11 19:18:01 1746

原创 Java线程---锁机制:synchronized、Lock、Condition

1.synchronized—对象加锁synchronized方法包括两种,一是标注了synchronized关键字的方法,一种是synchronized代码块.而不论是同步代码块还是同步方法都具有了原子性和可见性.1.1 原子性原子性指的是一个时刻,只能有一个线程执行一段同步代码或一个同步方法,这个同步代码段或这个同步方法会通过一个monitor object保护. 作用:防止多个线程在更新共享

2016-07-11 15:29:47 1073

原创 String、StringBuffer与StringBulider之间区别

java中String、StringBuffer、StringBulider是经常要用到的字符串类,那么它们之间到底有什么不同?以及它们的应用场景? String字符串常量String 简介String 类是不可变类,所以String本身的值是不能改变的,任何对String的操作都会引起新的String对象的产生.去看看String类的具体实现你就会发现,用来保存字符串的数组用final修饰: 下

2016-07-10 14:33:58 833

原创 C++连接数据库

连接数据库的几个API1. MYSQL *mysql_init(MYSQL *mysql); MYSQL *mysql_init(NULL); 为mysql_real_connect()分配或初始化一个MYSQL对象,若mysql 为NULL,函数为其分配,初始化并返回一个新对象. 否则对象被初始化并返回该对象的地址. 返回值:一个被初始化了的MYSQL *handle,若内存不足返回NU

2016-05-31 23:35:23 2095

原创 会场安排问题

一.贪心算法1问题描述假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场.设计一个有效的贪心算法进行安排(这个问题实际上是著名的图着色问题,若将每一个活动作为图的一个顶点,不相容活动间用边相连,使相邻顶点着有不同颜色的最小着色数,相应于要找的最小会场数) .算法思想把所有活动的开始时间和结束时间按从小到大的顺序排列,依次遍历,当遇到开始时间时,count++,当遇到结束时间时,count–

2016-05-04 21:56:21 1034

原创 select模型实现分析

今天和小伙伴一起看select源码,感觉收获还是挺大的,网上这方面的资料还是挺少的,很少有分析select的具体实现是怎样实现的,所以,我把它整理一下,希望可以帮到想看看select具体是怎样实现的小伙伴,ok,不说废话了. 函数原型: int select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,s

2016-04-13 21:54:50 576

原创 C++11并发API总结

C++11 多线程相关的头文件C++ 新标准中引入了四个头文件来支持多线程编程,他们分别是,,和. :该头文件主要声明了两个类,std::atomic和std::atomic_flag,另外还声明了一套C分格的原子类型和与C兼容的原操作的函数. :该头文件主要声明了std::thread类,另外std::this_thread命名空间也在该头文件中. :该头文件主要申明了与互斥量(mu

2016-04-03 21:40:02 2753

原创 1160 蛇形矩阵

题目描述 Description 小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和. 算法思想:设为n*n的矩阵,我们设置四个边界,up,down,left,right.最中心的数的下标为n/2,n/2;初始时,我们设置边界right=do

2016-03-31 17:38:18 646

原创 最长递增子序列求解

算法难,难于上青天!!!!! 搞懂一个算法不容易,还是写篇博客为以后复习做好准备!!!! 动态规划算法O(n^2)设A[i]表示序列中第i个数,dp[i]表示从0到i这一段中以i结尾的最长上升子序列的长度,初始化dp[i]=1;(i=0,1,2…(len(A)-1).则有动态方程为: dp[i]=max{dp[i],dp[j]+1}(j=0,1,2,….i-1,且A[j] < A[i]);

2016-03-30 16:29:38 617 1

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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