自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(216)
  • 资源 (4)
  • 收藏
  • 关注

原创 CAP理论的理解

这个CAP理论有几个版本,其中对于A和P的定义非常之模糊。导致我对于可用性和分区容忍性的区别一直没有把握好。直到我读了很多文章,并进行下面的总结的时候,我都不确定我的理解是否合理。我最终接受的说法是,Seth Gilbert和Nancy Lynch的定义。主要来自于它们的两篇文章(1)Brewer's  Conjecture  and  the  Feasibility  of

2017-04-16 21:52:35 809

原创 数据库学习的3个维度

如果一个人说其工作内容是有关数据库的,他的工作可能与你理解的不一样,因为有关数据库的工作可能有以下3种。1.普通用户和应用程序他们要求对数据进行访问和修改。使用语言:一切编程语言,但是最终都会转化为SQL语句2.数据库管理员(database administrator,DBA)负责建立数据库的结构或模式的一个人或一组人,有时也需要进行故障排除、索引构建等任务使用语言:DD

2017-01-15 15:55:13 854

原创 磁盘系统基本概念以及磁盘的顺序读写与随机读写

本文总结自(1)《数据库系统实现》(2)知乎:https://www.zhihu.com/question/482547801.基本概念2.细节3.顺序读写和随机读写1.基本概念(1)磁盘组合盘片=2盘面主轴磁道柱面扇区间隙块:对于理解数据库系统特别重要的是磁盘被划分为磁盘块(或就称为块,或者像操作系统称为页),每块的大小

2017-01-13 10:08:38 23860 1

原创 目前流行的存储系统

这里对于一些我所知道的存储系统做一个总结,会不定期更新。这里讨论的系统通常是面对用户的,所以不会去细分存储是块存储、文件存储、对象存储,讨论的都是可以直接面向业务的存储系统。1.文件系统(1)GFS(2)HDFS2.K-V系统/表格系统/NoSQL(1)Memcached(2)Redis(3)MongoDB(4)Dynamo(5)Cassandra(6)

2016-11-26 12:02:08 763

原创 分布式之CAP定理

总结自:1.CAP Theorem:Revisited2.网络编程(七):CAP原理推导和应用先说定义吧一致性(Consistency):对于某次读取返回的内容是该信息的最新版本。可用性(Availability):一个正常工作的节点,对于client的请求会在合理的时间内返回一个合理的响应,这个响应不应该是错误也不应该是请求超时。分区容忍性(Partition T

2016-10-19 17:10:53 452

原创 用C++实现单例模式

1.C++11借助std::call_once和std::once_flag#includetemplateclass Singleton{public:Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;static T& instance

2016-08-28 11:25:10 624

原创 C/C++输入输出

1.scanf和printf的优缺点A。缺点(1)对于不同类型的使用繁琐、不统一(2)不能够指定大小,存在缓冲区溢出风险(3)不可扩展,不容易针对用户自定义类型设计printf的类型缩写B。优点(1)打印多个值相当于一次函数调用,具备线程安全性。(2)容易控制格式2.iostream的优缺点A。缺点(1)格式化输出繁琐,且格式不具备外部可配置性

2016-08-11 17:53:30 343

原创 排序算法的稳定性

今天专门来讲一下排序算法的稳定性。1.稳定性的含义这个稳定性的意思就是说,在排序过程中,具有相同数值的对象的相对顺序被不被打乱。如果可以保证不被打乱就是稳定的,如果不能保证就是不稳定的。2.稳定性的作用因为有可能一个值又多重属性,我们需要对其各个属性分别排序。如果在对某一种属性排序的过程中能够保持稳定性的话,对其他属性的处理就很有帮助。3.具体算法的稳定性稳定:插入

2016-08-02 15:20:42 729

原创 Paxos协议学习---3.Paxos Made Simple

先读Parliament再读simple确实,要好很多。下面是阅读笔记Paxos made simpleP21.为什么不是采用一个acceptor就好?答:因为那个节点可能失败。2.为什么任意qrm的人通过了一个值,就能确定一个值?答:因为任意qrm至少有一个相同的人,如果我们能确保一个acceptor只能最多接受一个值,就能确保任意qrm确认的值都是同

2016-08-01 12:11:09 445

原创 Paxos协议学习---2.由3大条件证明一致性

Paxos是分布式的一致性协议,最重要的部分当然是这个一致性的证明。在朴素Paxos协议中给出了3大条件,只要达到了这3大条件可以证明,如果Paxos协议达成了一次成功的表决,那么这个表决具有一致性。需要说明的是,这3大条件并不保证进行性,也就是说并不保证一定会达成成功的表决。但是可以保证的是,如果达成了一个成功表决,那么这个表决具有一致性。1.基本术语(1)ballo

2016-07-28 22:28:04 1292

原创 Paxos协议学习---1.总纲

分布式的一致性算法。这个算法始于两篇论文《The Part-time Parliament》《Paxos Made Simple》这篇文章主要源于阅读《The Part-time Parliament》其中主要的内容就是1.神会协议 The Single-Decree Synod2.议会协议 The Multi-Decree Parliament其中神会协议用来确定一个值,

2016-07-27 16:06:42 475

原创 LeetCode---6.RestEasy

1.题目思路1. 292. Nim Game关键词:求余思路:这个根据两个人可以报的数,枚举所有情况发现。不管第一个人报什么,第二个人总能报到4.那么如果能被4整除,第二个人可确保赢。如果不能被4整除,第一个人将其余数报了,这样第一个人相当于能整除情况得第一个人,可确保赢。2. 371. Sum of Two Integers关键词:移位思路:分别计

2016-07-27 10:46:27 370

原创 理解KMP算法

KMP算法用于字符串的匹配。1.KMP的原理通常我们采用的方法是暴力匹配。时间复杂度为O(N*M)这里面可能有很多冗余操作。假设是在text字符串里面寻找pattern字符串。假设N为text长度,M为pattern长度。设N = 20, M = 8我们从text和pattern的第一位开始比较,比较了5位,然后发现第6位不同。如果是暴力解法,就会从text的第

2016-07-21 23:15:11 321

原创 基于比较的排序算法的最优下界---NlogN

这个最优下界的意思就是说,这种算法最好的情况也至少需要这么多步骤才能排出来。进行非严格的推导。N个数,一共有N!种排列。比较i、j两个元素,最多能够确定多少种情况呢?是N!/2,仔细想想快速排序,如果选到了一个号元素可以减少一半,如果不是一个好元素,并不能减少这么多。所以这样推出来的是最优下界。那么我们设经过了k次比较,最后筛选出符合条件的唯一一种情况。(N!) / (2^

2016-07-21 15:31:52 3078 1

原创 LeetCode---5.MathEasy

1.题目思路1. 7.Reverse Integer关键词:整数每位的获取思路:①取得符号,如果是负数转为正数方便处理。②一次取得每一位,恰好就再拼接就正好reverse了③特别注意溢出问题,因为这里的输入时int,所以用一个long来盛放,最后进行判断也可以。但是不用更大的数据类型时应该这样。if(result > INT_MAX / 10 || (resul

2016-07-21 11:56:47 363

原创 LeetCode---4.ListEasy

1.题目思路1. 19.Remove Nth Node From End of List关键词:双指针思路:注意题中条件已经说了,考虑的是n是valid,也就是说1实际上题目的答案在给出的时候,如果n>实际长度,应该得出等于n取size的结果。但是测试用例里面都没有大于实际长度的取值。(1)先遍历一次,计算链表实际长度,然后计算正向距离,然后再走到欲删除的节点进行删除

2016-07-20 09:28:26 342

原创 数据库的索引

索引这个东西很抽象,今天就来探究一下,它究竟是用来干什么的?它的原理又是什么?索引的英文是index,在MySQL里面建立索引的关键字是key索引是对字段建立的,可以是一个字段,可以是多个字段对多个字段建立索引的时候,在第一个字段相同时才按第二个字段来排序,并以此类推。假如我们要对name, country, age这3个字段建立一个索引,语句为key(name, country,

2016-07-18 21:52:28 448

原创 LeetCode---3.TreeEasy

1.题目思路1. 100.Same Tree关键词:值、结构思路:(1)采用递归。递归时先要搞清楚结束条件,本例有三个结束条件①两者都为NULL(值、结构相同)②一者为NULL,一者不为NULL(结构不同)③结构相同,val不同(值不同)(2)采用迭代这种可以使用递归的结构,要保证用迭代也能完全遍历地话,需要使用stack其他没什么特别的。2.

2016-07-17 20:36:35 257

原创 LeetCode---2.StringEasy

1.题目思路1. 6.ZigZag Conversion关键词:构造规律思路:这个主要就是认识到,中间层是row-2,比如总的7行,中间就是5行。所以一个完整的循环是2*row-2个元素,然后分为第一,最后,中间来计算。需要记住的一点是,模块化不是代码的模块化而是逻辑的模块化。中间层(下标为1到row-1)的计算,维护两个指针,每次就添加并移动小的那个。

2016-07-15 20:36:03 450

原创 数据库设计之问卷模块的设计2

2016/07/13更新整个实习已经告一段落了,其实整个问卷模块的数据库设计,在6月初基本上已经最终敲定并实现出来了。本次的总结分为两个部分。一、对之前提出的几个遗留问题,解决了的做一个说明二、最终总结一下,问卷模块的核心:问卷、试题、选项几个实体之间的关系如何表示,如实记录之中的心路历程,以及遇到过的一些坑。一。之前遗留问题1.结果试题标签

2016-07-14 01:16:37 8594 1

原创 LeetCode---1.ArrayEasy

1.题目思路1. 1.Two Sum关键词:hashMap思路:采用哈希表,将值作为key,将下标作为value,这样可以使用值的一些运算后在加去作为key查询。2. 26.Remove Duplicates from Sorted Array关键词:下标移动思路:采用一个下标,然后遍历数组,每出现一个不同的,就移动计数下标,并且存入。STL:本题,

2016-07-13 21:35:10 492

原创 LeetCode刷题总结

其实,刷这个题就是保持一个编程的状态,这个帖子是用来记录、总结自身通过leetcode刷题的感悟、技巧、方法的。1.ArrayEasy

2016-07-13 21:20:15 995

原创 STL中的Sort

下面是对于STL中的sort进行一个小结,包含insert_sortbubble_sortquick_sortheap_sortmerge_sort几种1.stl_sort这个是STL算法里面的标准sort,因为关联容器如果用红黑树实现本身已经排好序,如果用哈希表实现排序会破坏其结构。在stl_sort实现中需要随机访问迭代器,所以不能用于list。而sta

2016-07-10 16:35:29 656

原创 STL中的RB-tree

set和map的底层结构都是红黑树,它们最后基本只是对红黑树接口的简单调用。这里就主要来说一说红黑树。1.红黑树的定义红黑树首先是一棵二叉搜索树(BST),二叉的意思是每个节点最多有两个儿子,搜索的意思是根节点大于左儿子,小于右儿子。在此基础上还要满足以下5个条件:(1)只有红色和黑色2种节点(2)根节点为黑色(3)父子节点不能同时为红色(4)任意节点,到达其叶子节

2016-07-07 09:54:54 1201

原创 Tair源码阅读1---ConfigServer

ConfigServer里面涉及到的几个最重要的对象是,configServer,dataServer,table,group1.对象介绍(1)table,对照表key通过hash之后,再取模可以得到value存放在哪个桶。这个桶是放在哪个dataServer的信息,可以由一个表来表示。这个表就是对照表。(2)configServer,配置服务器功能主要有,①读取配置信息以

2016-07-02 17:18:44 1960

原创 阿里中间件三大存储系统

直接上名字:Tair、TDDL、TFS它们都是分布式存储系统,下面来说说异同。1.Tair存储类型:K-V,缓存语言:C++2.TFS存储类型:非结构化存储文件系统,NoSQL3.TDDL存储类型:RDBMS结构化数据库存储分布式存储系统的一些考虑1.服务路由2.负载均衡3.容错机制4.平滑扩容5.存储机制

2016-06-29 16:44:17 2079

原创 C++中的trivial、standard layout、POD

在学习STL的时候,会反复出现trivial和POD这样的术语,这几个概念如果要特别仔细地区分,只能说是蛋疼。但是结合其在STL里面的用意,为了性能优化,不那么学究地去考究其意义还是相对好理解的。trivial是从其拷贝控制函数是否是系统合成的来说明的standard layout是从其内部布局是否类似于C中的struct来说明的POD(Plain Old Data)这里的Old就

2016-06-29 11:39:27 1585

原创 STL中的Vector

看了一下vector的实现,感觉C++的内存管理,确实是需要非常认真对待的。为了追求效率,自身就需要仔细万分,总结了3,4点感觉尤其如此。1.vector的底层实现这个倒是很简单,vector就是一段动态分配内存的数组,加上冗余空间,所以用三个指针(迭代器)就能表示出来,底层的数据结构。分别是迭代器:start、finish、end_of_storage其中,finish-st

2016-06-27 23:59:57 296

原创 数据库查询语句拾遗

先上一个总览select①字段名、可以使用集合函数②from + left join + on ③where ④group by + having⑤order by⑥limit(1)集合函数就是常见的MAX MIN COUNT SUM AVG GROUP_CONCAT它们经常和group by搭配使用(2)where①普通条件=  !=    =

2016-06-21 16:32:06 348

原创 C语言拾遗

对一些C语言的知识进行总结,重点是最后关于字符数组、字符指针、字符串的讨论。1.变量的初始化简单说就是,静态变量初始化为0,自动变量不初始化。什么是不初始化呢?就是说,可能是任意值。注意:(1)对于非指针变量,当你声明了一个变量时,你就获得了掌控权,系统保证了除非你自己实现,否则这个变量不会用作它用。所以虽然这个变量里面的值是任意的,但是你可以随意修改这个值而不会有其他影响

2016-06-21 10:21:12 304

原创 STL中的Iterator

话不多说,就是总结几个问题1.什么是迭代器(1)迭代器可以看做一种智能指针,他会重载*和->运算符。(2)但是它并不一定具备指针的所有运算符:p++,p--,p+n,p-n,p[n],p1-p2,p1有可能它只提供一部分,比如:p++,p--,p1!=p2(3)STL强数据容器与算法分开,而迭代器又作为胶着剂将其撮合在一起。2.为什么每一种容器都要开发其专属迭代器(1)

2016-06-19 21:30:05 1083

转载 编程的智慧

这几天,陆陆续续写了一些代码,在写代码的过程中,确实感觉要写好代码需要一些技巧以及好的习惯。又去读了一下,王垠的《编程的智慧》,并总结了提纲。原文地址为:http://www.yinwang.org/blog-cn/2015/11/21/programming-philosophy1.反复推敲代码2.写优雅的代码(1)盒子特征(2)树状特征3.写模块化的代码(1)避

2016-06-18 11:31:20 282

原创 STL中的Allocator

最近在看STL,写一点博客。关于一些细节可能就不放上来了,就写一些我自己的心得。1.为什么要用AllocatorC++容器的设计思路是,对存放到里面的东西是拷贝一份放进去。而且里面的空间都是动态分配的。所以在构建容器的时候,需要必要的①内存分配②构造对象。2.new operator、operator new、placement new

2016-06-13 15:32:44 1239

原创 Java中的hashMap

首先上个图key经过hash函数作用后得到一个槽(buckets或slots)的索引(index),槽中保存着我们想要获取的值本文讨论给出的部分源码,来源于Oracle JDK 1.7.0_71本文主要讲述hashMap的三个问题1.Object的hashCode方法和equals方法?2.hashMap如何设计好的方法,使得冲突尽可能少?3.h

2016-06-13 10:37:52 296

原创 Java的JDK和JRE

就是说说这两个的区别,最主要的难点就是说,JDK下面也有一个JRE为什么需要这个JRE1.JRE下面有什么?JRE下面主要就是①JVM和②一些类库,比如BOOTSTRAP加载器需要加载的一些系统核心类库。直接上图2.JDK下面有什么?①JRE②JAVA开发程序,比如将Java代码编译为.class文件的javac程序,以及一些调试工具比如什么jconsole什么的。

2016-06-05 10:50:10 304

原创 Java类加载与反射

今天又看了李刚的《疯狂Java讲义》里面关于类加载机制与反射的知识。以前一直不知道,反射的原理,其实现在感觉还是比较自然的。1.类加载的三大步骤(1)加载将类的class文件读入内存,并为之创建一个java.lang.Class对象。(2)连接把类的二进制数据合并到jre中①验证:检验加载的类是否有正确的内部结构②准备:为类变量分配内存,并默认初始化③解析:将类

2016-06-03 23:04:50 313

原创 C++学习之多态的实现

多态又分为静态多态和动态多态。静态多态其实就是函数重载,动态多态就是一般我们所说的多态。多态作为面向对象的三大特征之一,需要另外两大特征:封装、继承的支持。本文主要讲讲,我看了一点《深度探索C++模型》总结多态是怎样实现的。1.C++内存布局C++对象主要可以有如下几种成员:(1)数据成员①static数据成员②nonstatic数据成员(2)函数成员①st

2016-05-30 22:56:00 595

原创 数据库表关联小结

1.inner、left、right join的区别?这里暂时不讨论这几种join的原理,与效率上的区别。只考虑同样的查询语句,会不会导致不同的查询结果。这3种关联的区别是,当两个表有不关联的字段存在时,得出的结果才会有差别。比如a、b两个表,关联关系为a.b_id = b.id如果a中的每个a.b_id在b中都有对应的,并且,b中的b.id在a中都有对应的。那么从查询结果

2016-05-24 14:43:52 1099

原创 数据库设计之问卷模块的设计1

这两个星期在设计一个问卷调查的数据库,现在做一番总结。平时作为用户,感觉很简单的一个模块,现在参与设计,虽然感觉还有无数不完善的地方,但是设计的时候,还是考虑了很多很多。问卷模块的设计最主要的几个实体就是:问卷、试题、选项、试题类型问卷与试题是多对多的关系,采用关联表将问卷与试题看做一个整体,称为卷题,卷题与选项是一对多关系,所以采用选项持有一个问卷id和试题id试

2016-05-22 23:33:34 13450 1

原创 Java多线程volatile和synchronized

看了慕课网的视频,并发编程网的文章,疯狂Java的教科书。现在就来说说,这两个关键字。1.synchronized (Object obj)synchronized关键字,最令人疑惑的莫过于它后面的一个任意对象的参数了。同步代码块就同步代码块嘛,只要进入同步代码块就实现同步不就可以了吗?其实不是的。在C++并发编程之中,我们就已经知道了,如果你加锁,是有一个锁对象,以及一个

2016-05-22 11:11:55 301

Leetcode-cpp 2015.5更新

这是leetcode,一个开源项目,可以用于求职找工作,里面的算法尽量背诵,愿大家学到东西啦。

2015-07-04

802.11n A Survival Guide.pdf

这是大神Mattew Gast的802.11权威指南的续作,非常的经典,值得想了解802.11技术的人一读。

2014-12-03

Pointers in C

一本详细介绍C指针的书籍。完全是介绍C的指针的。有需要的朋友欢迎下载。

2014-07-24

OPNET网络仿真

网络仿真 OPNET 本书第1章针对暂时没使用过OPNET的读者,侧重于对Modeler仿真环境和工具的纲 要性介绍。通过一个简单的例子说明如何建立网络模块,包括定义拓扑,设定业务流量, 收集统计量,分析仿真结果;

2014-03-01

空空如也

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

TA关注的人

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