自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

转载 内存池的实现

C/C++下内存管理是让几乎每一个程序员头疼的问题,分配足够的内存、追踪内存的分配、在不需要的时候释放内存——这个任务相当复杂。而直接使用系统调用malloc/free、new/delete进行内存分配和释放,有以下弊端:调用malloc/new,系统需要根据“最先匹配”、“最优匹配”或其他算法在内存空闲块表中查找一块空闲内存,调用free/delete,系统可能需要合并空闲内存块,这些会

2015-11-23 10:51:49 323

转载 splay

类别:二叉排序树空间效率:O(n)时间效率:O(log n)内完成插入、查找、删除操作创造者:Daniel Sleator和Robert Tarjan优点:每次查询会调整树的结构,使被查询频率高的条目更靠近树根。注:所有图片来自wiki。http://blog.csdn.net/cyberzhg/article/details/8058208Tree

2015-11-21 23:29:16 296

转载 //线段树模板

先摆模板。。。//线段树模板struct line{int left,right;//左端点、右端点int n;//记录这条线段出现了多少次,默认为0};struct line a[100];int sum;//建立void build(int s,int t,int n){int mid=(s+t)/2;a[n].left=s;a[n].r

2015-11-21 23:27:56 270

转载 常见数据结构和常见算法

1、常见数据结构线性:数组,链表,队列,堆栈,块状数组(数组+链表),hash表,双端队列,位图(bitmap)树:堆(大顶堆、小顶堆),trie树(字母树or字典树),后缀树,后缀树组,二叉排序/查找树,B+/B-,AVL树,Treap,红黑树,splay树,线段树,树状数组图:图其它:并查集2、常见算法(1)       基本思想:枚举,

2015-11-20 23:02:01 291

转载 树状数组

1、概述树状数组(binary indexed tree),是一种设计新颖的数组结构,它能够高效地获取数组中连续n个数的和。概括说,树状数组通常用于解决以下问题:数组{a}中的元素可能不断地被修改,怎样才能快速地获取连续几个数的和?2、树状数组基本操作传统数组(共n个元素)的元素修改和连续元素求和的复杂度分别为O(1)和O(n)。树状数组通过将线性结构转换成伪树状结

2015-11-20 22:59:07 198

转载 线段树

1、概述线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,它基本能保证每个操作的复杂度为O(lgN)。2、线段树基本操作线段树的基本操作主要包括构造线段树,区间查询和区间修改。(1)    线段树构造首先介绍构造线段树的方法:让根节点表示区间[0,N-1],即所有N个数所组成的一个区间,然后,

2015-11-20 22:57:58 240

转载 一致性hash

转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179    一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正

2015-11-20 20:29:41 247

原创 volatile

为了保证速度,处理器和内存不直接通信,而是通过将系统内存的数据读到缓存l1,l2等,然后再进行读写,如果变量是volatile的,那么在生成汇编代码时候会多产生一句lock开头的指令,x86处理器对lock开头的汇编是这样处理的,将缓存内直接写入内存,其它处理器的缓存了本变量都会失效,下次重新在内存读取。注意缓存读取是64个字节一起读取,所以有追加字节一说代码(编译器)-字节码(jvm)-汇编

2015-11-20 20:29:10 195

原创 java多线程编程

并发编程的目的是为了让程序运行的更快,但是要保证更快的执行要面对很多问题:对io设备的竞争,上下文切换,死锁,软件硬件资源限制的问题 目前流行的CPU在同一时间内只能运行一个线程,超线程的处理器(包括多核处理器)可以同一时间运行多个线程,linux将多核处理器当作多个单独CPU来识别的。每个进程都会分到CPU的时间片来运行,当某个进程(线程是轻量级进程,他们是可以并行运行的,并且共享地使用他们

2015-11-18 19:59:14 241

原创 非标准的散列容器(未完成)

c++标准在现有版本中没有散列容器,以后肯定会有。所以现有的散列容器都是非标准的这些非标准散列容器非常容易获得,他们甚至有事实上的标准名字:hash_set、hash_multiset、hash_map、hash_multimap,但是因为没有经过标准化,所以现有各种实现的接口、效率和内部数据结构各有不同,但是由非标准散列容器编写出具有相当移植特性的代码还是有可能的。现有的几种散列容器的实

2015-11-18 19:49:05 311

转载 ssl

背景介绍     最近在看《密码学与网络安全》相关的书籍,这篇文章主要详细介绍一下著名的网络安全协议SSL。  在开始SSl介绍之前,先给大家介绍几个密码学的概念和相关的知识。  1、密码学的相关概念密码学(cryptography):目的是通过将信息编码使其不可读,从而达到安全性。明文(plain text):发送人、接受人和任何访问消息的人都能理解的消息。密文(

2015-11-16 11:05:58 549

原创 中间件-消息中间件

jms是java ee 的消息规范,其实现是hornetq和activemq等,小型系统直接使用jms是可以的但是大型系统不太适用。消息中间件主要保证消息的顺序保证,扩展性,可靠性和消息发送的一致性1、一致性,指的是动作和消息的一致性消息模型对消息接收的影响:jms queue模型,p to pjms topic 模型 ,所有接受者能收到所有生产者,pub、sub模型2、

2015-11-13 17:34:19 257

原创 中间件-数据访问层

单机情况下数据库在不同语言,不同平台都有各自数据库访问组件,各种类似odbc、jdbc的封装以及orm的处理都已经相当成熟。数据库压力越来越大,处理方法是优化应用,减少压力。二是对数据库进行读写分离,加入搜索引擎和缓存等,进而采用拆分的方法垂直拆分(业务逻辑拆分)单机acid受影响,要么放弃事物,要么引入分布式事物join操作受影响,因为在两个库中了靠外键进行约束的场景会收到影

2015-11-13 17:01:47 1966

原创 中间件-服务框架

中间件不是最上层的应用也不是最底层的支撑,是解决特定问题域的一系列组件,是应用和应用之间的桥梁,解决特定场景问题的组件,让开发人员专注与自己的开发。三类中间件:远程过程调用和对象访问中间件:主要解决分布式环境下应用的相互访问问题,是应用服务化的基础消息中间件:解决应用中间的消息传递、解耦、异步问题数据访问中间件:访问数据库的共性问题的组件分布式系统中的java中间件支持搜索,缓

2015-11-13 11:14:43 857

转载 future模式

DK-Future 模式和实现最近的项目用到了多线程,发现java.util.concurrent.Future蛮好用的。像平时,写多线程一般使用Thread/Runnable,直接扔给线程池执行就好了。但是遇到了一些需要获取线程执行结果的情况,就需要使用Callable。对于使用Callable的task,ExecutorService执行后会返回一个Future对象来传递执行结果。

2015-11-13 10:29:55 273

原创 大型网站架构演进过程

大型网站:访问量大,数据量大,业务系统的复杂度也是考量范围,www.alexa.com 可以查询不同网站的访问量演进过程:1、java+单机构建网站lamp,MVC框架,jsp,spring,struts,hibernate,html,css,JavaScript,python等,采用开源server做容器,直接使用jsp、servlet或者一些开源框架构建我们的应用,选择一个数据

2015-11-12 20:08:16 379

转载 protocol buffers

该系列Blog的内容主体主要源自于Protocol Buffer的官方文档,而代码示例则抽取于当前正在开发的一个公司内部项目的Demo。这样做的目的主要在于不仅可以保持Google文档的良好风格和系统性,同时再结合一些比较实用和通用的用例,这样就更加便于公司内部的培训,以及和广大网友的技术交流。需要说明的是,Blog的内容并非line by line的翻译,其中包含一些经验性总结,与此同时,对于一

2015-11-12 13:17:05 191

转载 socket使用TCP协议时,send、recv函数解析以及TCP连接关闭

Tcp协议本身是可靠的,并不等于应用程序用tcp发送数据就一定是可靠的.不管是否阻塞,send发送的大小,并不代表对端recv到多少的数据.在阻塞模式下, send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送的大小要大,那么send函数立即返回,同时向网络中发送数据;否则,send向网络发送缓存中不能容纳的

2015-11-11 12:13:55 777

转载 fcntl

功能描述:根据文件描述词来操作文件的特性。用法:int fcntl(int fd, int cmd);int fcntl(int fd, int cmd, long arg);int fcntl(int fd, int cmd, struct flock *lock);参数:fd:文件描述词。cmd:操作命令。arg:供命令使用的参数。lock:同上

2015-11-09 19:18:04 216

转载 select,poll,epoll

select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用

2015-11-09 11:49:02 231

转载 linux poll机制

poll的是一种查询的方式,英文解释 :民意调查poll提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。函数原型:  #include   int poll(struct pollfd fd[], nfds_t nfds, int timeout);参数:fds为指向待查询的设备文件数组;nfds描述第

2015-11-09 11:34:01 862

转载 gdb

本文介绍Linux下GDB调试器常用的基本命令。测试均在Ubuntu12.10下完成。先看看GDB调试的效果图:对应的源代码:[cpp] view plaincopyprint?//插入排序,GDB调试测试代码  #include     int x[10],//存放输入数据        

2015-11-09 10:22:43 203

原创 linux文件与目录管理

cd :change directory。当前目录。。上层目录(每个目录都有这两个文件,主目录也有,但是主目录的。。和。是一样的)-前一个工作目录~账号的住文件夹~账号:特定账号的主文件夹pwd:显示当前所在目录-p显示当前目录,不采用连接目录的方式mkdir:新建目录-p递归创建,如mkdir t1/t2/t3不会创建成功,但是用-p参数就能创建成功-m设

2015-11-07 19:18:56 193

原创 linux文件权限

linux最优秀的地方就是多用户、多任务环境。为了让各个用户有保密的文件数据,文件的权限管理变得很重要。文件身份:owner,group,others,文件权限:read,write,executels -al adwrxwrxwrx 4 root root 1990 a第一组十位字母是文件类型与权限第一位d:目录,文件夹,-:文件,l:链接文件,b:文件里面有可供储存的接

2015-11-07 16:18:34 413

原创 inline函数解析

inline函数的优势:比宏优秀,像函数一样使用但是没有函数调用那么大的开销编译器的最优化机制有能力对不含函数调用的代码进行语境最优化inline的缺点:目标码膨胀,内存空间消耗增加,还容易造成虚内存机制的额外换页行为,增加开销,降低缓冲命中率,造成效率损失,但是反之而言,如果inline函数很小,产生的目标码比函数调用产生的目标码还小,那么无疑会增加效率注意:inline是申

2015-11-06 14:51:11 358

原创 Add Binary

Given two binary strings, return their sum (also a binary string).For example,a = "11"b = "1"Return "100".//add Binaryclass Solution {public:    string addBinary(string a, stri

2015-11-03 22:09:29 177

转载 happens_before

happens-before俗解学习Java并发,到后面总会接触到happens-before偏序关系。初接触玩意儿简直就是不知所云,下面是经过一段时间折腾后个人对此的一点浅薄理解,希望对初接触的人有帮助。如有不正确之处,欢迎指正。synchronized、大部分锁,众所周知的一个功能就是使多个线程互斥/串行的(共享锁允许多个线程同时访问,如读锁)访问临界区,但他们的第二个功能

2015-11-03 10:33:38 258

转载 linux互斥锁操作

在线程实际运行过程中,我们经常需要多个线程保持同步。这时可以用互斥锁来完成任务;互斥锁的使用过程中,主要有pthread_mutex_init,pthread_mutex_destory,pthread_mutex_lock,pthread_mutex_unlock这几个函数以完成锁的初始化,锁的销毁,上锁和释放锁操作。一,锁的创建    锁可以被动态或静态创建,可以用

2015-11-03 10:10:13 305

转载 public private 和protected 继承

public private 和protected 继承 在C++中继承主要有三种关系:public、protected和private。这三种继承关系中public继承是最为常用的一种继承关系,private继承是最少见的继承关系。1. public从语义角度上来说,public继承是一种接口继承,根据面向对象中的关系而言就是,派生类可以代替基类完成基类接口所声明的行为,也就

2015-11-01 16:01:38 217

转载 智能指针

scoped_ptr解析《超越C++标准库-Boost库导论》头文件: "boost/scoped_ptr.hpp"boost::scoped_ptr 用于确保动态分配的对象能够被正确地删除。scoped_ptr有着与std::auto_ptr类似的特性,而最大的区别在于它不能转让所有权,然而auto_ptr却可以。事实上,scoped_ptr永远不能被复制或被赋值!scoped_

2015-11-01 15:57:16 250

转载 面向对象对象之间的关系

对象之间的关系:依赖(需要某种服务),关联(对象间有某种对应关系),聚合,组合,继承...依赖:对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系。 依赖一般情况下是以下几种情况之一:a、ClassA中某个方法的参数类型是ClassB;  这种情况成为耦合;b、ClassA中某个方法的参数类型是ClassB的一个属性

2015-11-01 10:56:27 1048

转载 const函数

第一种情况:const对象调用非const成员函数view plaincopy to clipboardprint?class A { public: A(int N = 0); void Fun(); private: int n; }; A::A(int N):n(N) { } void A::Fun() { cout } 

2015-10-31 21:45:34 246

转载 函数调用

C/C++函数调用过程分析这里以一个简单的C语言代码为例,来分析函数调用过程代码: 1 #include 2 3 int func(int param1 ,int param2,int param3) 4 { 5 int var1 = param1; 6 int var2 = param2; 7 int v

2015-10-31 21:29:36 359

转载 深入理解C++中的mutable关键字

mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。  在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。  我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面

2015-10-31 21:09:30 182

原创 内存管理

内存空间的分配编程阶段,不考虑内存连续分配的问题,而是将源程序建立在程序员定义的命名空间里,编译后转成目标文件,地址是逻辑地址,连接将一组目标文件装载成一个完整的程序,地址还是逻辑地址,装载进进程后变为物理地址,地址重定位有动态和静态(运行前由装配程序完成)的覆盖(进程公用一段内存空间)和交换技术(内外存交换)

2015-10-31 17:32:35 176

原创 同步与互斥

在多道程序系统中,由于进程并发,资源共享与进程协作,使得进程间可能产生两种形式的制约:1、间接相互制约:源于资源共享,如果进程ab共享一种资源,如果a请求资源时发现进程b正在访问这种资源,那么进程a就进入阻塞队列,当进程b释放资源,进程a被唤醒到就绪状态2、直接相互制约:源于进程协作,如果进程a通过单项缓冲向进程b提供数据,当缓冲为空进程b得不到数据而进入阻塞队列,一旦a进程的数据进入缓冲

2015-10-31 16:41:33 698

原创 亲戚

c++是静态数据类型语言,类型检查发生在编译期,因此编译器必须在知道每个数据的类型python是动态数据类型语言,在程序运行时检查数据类型。数据类型的意义,告诉我们数据的意义及可以进行的操作内置数据类型:算数类型和空类型算数类型包括字符型,整型,布尔型,浮点型,空类型仅用于一些特殊场合如函数的不返回任何值时使用空类型作为函数的返回值类型。变量初始化:double p = 1

2015-10-30 10:40:55 229

转载 分离式编译

最近的工作中需要用到类模板。声明模板类放在头文件里,然后犯了个错误把 类的成员函数定义按照惯例放在了一个CPP文件里。编译虽然过了,但是链接也会出问题。这里开始找找原因,原来类模板不支持分离编译。C++编译过程分几步。第一 预编译 这一步可以粗略的认为只做了一件事情,那就是“宏展开”,也就是对那些#***的命令的一种展开,例如define MAX 1000就是建立起MAX和

2015-10-27 17:33:01 372

原创 文件重定向

反复从键盘键入销售记录是很乏味的,大多数操作系统都支持文件重定向,这种机制允许我们将标准输入和标准输出与命名文件关联起来:# exeoutfileexe是可执行文件,上述命名会从infile的文件里面读取记录,并且将结果输出到一个命名为outfile的文件里面,两个文件都要在当前目录。

2015-10-27 16:41:21 193

原创 effective stl学习笔记

术语:高内聚低耦合功能独立,接口清晰,结构体定义规范,效率高,可扩展性可移植性可兼容性可维护性优良标准序列蓉蓉器

2015-10-25 13:56:06 396

空空如也

空空如也

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

TA关注的人

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