自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 资源 (1)
  • 收藏
  • 关注

原创 Go并发(1)

Go从语言本身支持并发,而不是由某个库或者模块来实现并发,可谓天生丽质。goroutine从根本上与线程不同,goroutine更加轻量化。   看下面这个常见的网络模型:package mainimport ( "fmt" "net")func manageClient(conn net.Conn) { conn.Write([]byte("Hi!")) conn.Close(

2015-10-16 15:12:33 876

原创 SQL必知必会Note(1-10)

第1章 了解SQL【数据库】保存有组织的数据的容器(通常是一个文件或一组文件)。【表】某种特定类型数据的结构化清单,存储在表中的数据是同一种类型的数据或清单。   在相同数据库中不能两次使用相同的表名,但在不同的数据库中却可以使用相同的表名。【模式】关于数据库和表的布局及特性的信息。【列】表中的一个字段。所有表都是由一个或多个列组成的。表由列组成。列存储表中某部分的信息。   理解列的最好办法

2015-10-15 16:30:53 937

原创 计算机程序的构造和解释笔录(2-1):构造数据抽象

现在到了数学抽象中最关键的一步:让我们忘记这些符号所表示的对象。(数学家)不应该在这里止步,有许多操作可以应用于这些符号,而根本不必考虑它们到底代表这什么。                (Hermann Weyl 思维的数学方式)  我们可以通过 define 做过程抽象,将过程看作一类计算演化的一个模式,同时高阶过程能够提升语言的威力。  而在解决复杂问题,处理和模拟复杂现象的时候,常需要构

2015-09-06 16:13:19 877

原创 C++泛型 && Java泛型实现机制

C++泛型   C++泛型跟虚函数的运行时多态机制不同,泛型支持的静态多态,当类型信息可得的时候,利用编译期多态能够获得最大的效率和灵活性。当具体的类型信息不可得,就必须诉诸运行期多态了,即虚函数支持的动态多态。  对于C++泛型,每个实际类型都已被指明的泛型都会有独立的编码产生,也就是说list<int>和list<string>生成的是不同的代码,编译程序会在此时确保类型安全性。由于知道对象确

2015-08-28 22:24:16 3124

原创 乐观锁与悲观锁

为了得到最大的性能,一般数据库都有并发机制,既然是并发,不可避免的将带来数据访问的冲突。为了解决这个问题,大多数数据库采取了并发控制。乐观锁和悲观锁是并发控制常用的技术手段。下面来看看吧。  乐观锁,顾名思义,就是保持一种乐观精神,它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。在提交数据更新之前,每个事务会先检查在该事务读取数据后,有没有其他事

2015-08-26 15:45:52 1673 1

原创 线性回归与梯度下降

回归分析是一种统计学上分析数据的方法,目的在于了解两个或多个变数间是否相关、相关方向与强度,并建立数学模型以便观察特定变数来预测研究者感兴趣的变数。更具体的来说,回归分析可以帮助人们了解在只有一个自变量变化时因变量的变化量。 回归分析是建立因变数Y与自变数X之间关系的模型,可以有一个自变量X,也可以超过一个自变量(X1, X2 … Xi)。  回归分析目的在于找出一条最能够代表所有观测资料的函数(

2015-08-17 21:16:18 1996

原创 计算机程序的构造和解释笔录(1):构造过程抽象

Q: SICP是讲软件工程么?   A:部分,但并非全部。主要是模块化和黑盒抽象,计算机中两大主要基本思想。SICP关心的是:“当系统复杂度爆炸时(或者在此之前),我们如何通过有效的方法和手段去控制系统的复杂度?”    Q: SICP是讲编译原理么?   A: 部分,另外,如同书名说描述的那样,SICP中的“编译”都是“解释”,这种解释的行为,无外乎就是用一种机器的计算行为去模拟另一种机器

2015-08-13 20:50:10 1066

原创 相似图片搜索

前几天在伯乐网上看到有转载相似图片搜索的文章,其实它的方法很简单,就是一篇图片,先做灰度化,resize,01化处理,在判断。出于专业敏感,我想是不是可以利用视频或者图像编码中的DCT变换,利用少量的空间存储大部分的有效信息,然后再比较,网上搜了搜,果然有这样的算法:phash  phash算法有很多种,这里介绍一种基于DCT的phash算法。  图片指纹生成方法:   图片灰度化   图片缩放

2015-08-09 16:44:09 924

原创 Quorum/NRW机制

Quorom 机制,是一种分布式系统中常用的,用来保证数据冗余和最终一致性的投票算法,其主要数学思想来源于鸽巢原理。  什么是鸽巢原理?   其中一种简单的表述法为:   若有n个笼子和n+1只鸽子,所有的鸽子都被关在鸽笼里,那么至少有一个笼子有至少2只鸽子。   另一种为:   若有n个笼子和kn+1只鸽子,所有的鸽子都被关在鸽笼里,那么至少有一个笼子有至少k+1只鸽子。   恩,很熟悉

2015-08-08 21:52:17 2100

原创 两阶段提交协议

集中式与分布式事务的另一个重要的不同点在于它们各自所需关注的错误的属性上。在集中式系统中,错误都是要么不错要么全错(all-or-nothing),也就是说要么系统正常工作事务正常处理,要么系统出错不会有任何事务完成。但是在分布式系统中,可能出现部分失败(partial failures)的情况,某些节点正常工作但是其他一些节点出错了。  这种局部失败的情况正是造成分布式系统中很多难解的问题的根源。

2015-08-07 22:20:52 821

原创 Nginx(2):工作机制

我们知道进程和线程会消耗内存和其它系统资源,同时他们需要进行上下文切换。大多数现代服务器可以同时处理成千上百的进程或线程,但是当内存耗尽时,性能将下降,同时,在高IO负载时,将会出现频繁的上下文切换。   处理网络的常规方法是为每个连接创建一个进程或者线程,这种方式容易实现,但是扩展困难。  那么Nginx是怎么做的呢?How Does NGINX Work?  nginx 在启动后,会有一个 m

2015-08-05 14:30:57 888

原创 再论贝叶斯公式

在之前的文章( 贝叶斯方法及其应用(1))中我们谈到了贝叶斯公式,也提到了后验概率 = 先验概率*标准相似度。  那么对于贝叶斯公式P(A│B)=P(A∩B)/P(B) =P(A)(P(B|A))/P(B) ,之前提到如果”可能性函数”P(B|A)/P(B)>1,意味着”先验概率”被增强,事件A的发生的可能性变大;如果”可能性函数”=1,意味着B事件无助于判断事件A的可能性;如果”可能性函数”<1,

2015-08-05 13:36:02 1055

原创 Bloom Filter(布隆过滤器)

布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制矢量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。   如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希表,Hash tab

2015-08-03 21:17:57 1234

原创 Linux进程调度机制(1)

进程调度负责决定哪个进程投入运行,何时运行以及运行多长时间。  进程调度:非抢占式和抢占式   Linux这么酷的系统当然是抢占式的喽。  进程在被抢占之前可以运行的时间是预先设定好的,叫做时间片。有效管理时间片能使调度程序从系统全局角度作出调度决定,避免个别进程独占系统资源。I/O消耗型/处理器消耗型   I/O消耗型:进程的大部分时间用来提交I/O请求或是等待I/O请求,这样的进程经常处于可

2015-08-03 17:08:38 3438

原创 阻塞睡眠实现机制

在看阻塞睡眠实现机制前,我们来看一下内核中广泛用到的等待队列。 Linux内核的等待队列为双循环链表结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。它有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t)。等待队列头和等待队列项中都包含一个list_head(双链表)。通过这样一个双链表把等待进程链接起来。 下面来看两者数据结构

2015-08-02 21:56:41 1435

原创 数据库系统0T1(0):基础概念

数据库,简单来说可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。   数据库存储的基本对象是数据,数据可以是数字、文字、图片、音频、视频等等。数据库的基本特征   数据按一定的数据模型组织、描述和储存   可为各种用户共享   冗余度较小   数据独立性较高,与应用程序互不依赖   易扩展类型   关系数据库:MySQL、SQL Se

2015-07-31 22:29:28 1190

原创 谈谈闭包

闭包是函数和引用环境组成的整体。   闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。  那么为什么要把引用环境与函数组合起来呢?   这主要是因为在支持嵌套作用域的语言中,有时不能简单直接地确定函数的引用环境。  让我来看Python代码的例子:def add1():  def add(x):    return x+1  return addadd1In

2015-07-30 22:20:38 775

原创 设计模式(5): 命令模式

命令(Command)模式:又称Action模式或者Transaction模式。它属于对象的行为模式。   命令模式把一个请求或者操作封装到一个对象中,于是这些命令可以被:   重复多次   取消   取消后又再重做  命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开(解耦)。命令模式使请求本身成为一个对象,这个对象和其他对象一样可以被存储和传递。  命令模式涉及到五个

2015-07-28 17:15:13 666

原创 网页资源下载器

一个简单的python程序,用于下载pdf/txt/ppt等网页资源下载。import urllib import urllib2 import re import socket#######################You may change here###############baseurl = '##########' #请自行添加下载网页地址format = '(pdf

2015-07-28 15:14:42 1131

原创 STL源码剖析(4):容器(list)

相较于vector的连续线性空间,list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。  list 内部为双向链表,内部元素互相以link串接起来,每个元素都知道其前一个元素以及下一个元素的位置。template <class T>struct _

2015-07-27 11:47:21 707

原创 一致哈希

一致哈希是一种特殊的哈希算法。在使用一致哈希算法后,哈希表槽位数(大小)的改变平均只需要对K/n个关键字重新映射,其中K是关键字的数量,n是槽位数量。然而在传统的哈希表中,添加或删除一个槽位的几乎需要对所有关键字进行重新映射。  一致哈希由MIT的Karger及其合作者提出,现在这一思想已经扩展到其它领域。在这篇1997年发表的学术论文中介绍了“一致哈希”如何应用于用户易变的分布式Web服务中。哈希

2015-07-26 15:36:43 720

原创 大型网站技术架构笔录(2):模式

大型网站架构模式 既然是模式,就是经验之道,可重用的东西。1)分层 想想7层或4层网络模型,每层负责相对单一的功能,上下层调用。 网站一般分为三个层次:应用层、服务层和数据层。具体实现,还可以继续细化分层。 应用层:具体业务、视图展示,网站首页,搜索结果等 服务层:为应用层提供服务支持,如购物车,用户管理 数据层:提供数据存储访问,如数据库、缓存、文件 分层独立性,保持接口不变,合理规

2015-07-25 22:00:29 741

原创 大型网站技术架构笔录(1):演化

一)大型网站软件系统特点: 1)高并发、大流量:想想每年双十一 2)高可用:7*24小时不间断服务 3)海量数据:存储管理海量数据 4)用户分布广泛,网络情况复杂 5)安全环境恶劣:黑客,黑客,黑客 6)需求快速变更,发布频繁:快速适应市场,满足用户需求 7)渐进式发展:大型网站都是从小网站开始的二)大型网站架构演化过程 1)初始阶段网站架构:应用程序、数据库、文件等所有资源都集中在

2015-07-25 21:56:12 853

原创 设计模式(4): 观察者模式

观察者模式(有时又被称为发布/订阅模式)是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。     1)观察者模式描述了如何建立对象与对象之间的依赖关系,如何构造满足这种需求的系统。   2)其关键对象是观察目标和观察者,一个目标可以有任意数目的与之相依赖

2015-07-25 17:11:10 616

原创 白话同步异步、阻塞非阻塞机制

如果你想了解同步异步、阻塞非阻塞的基本概念,可以看下面,欲了解具体实现,请自行google^^,若有错误,请指出。来看生活中的例子:   比如你在天猫超市买了东西,短信通知说快递很快到了,这时候你有两个选择:   1)下楼等着快递员(同步)   2)在家等着快递员送货上门(异步)  如果你下楼等着,然并卵,这时快递员并没有到,这时候,你又有两个选择:   1)深情地望着路口,等着快递员的出现

2015-07-22 14:56:29 619

原创 生产者消费者模式(1)

生产者消费者问题(Producer-consumer problem)是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。什

2015-07-18 21:26:22 1988

原创 TCP详解(3):重传、流量控制、拥塞控制……

数据传输  在TCP的数据传送状态,很多重要的机制保证了TCP的可靠性和强壮性。它们包括:使用序号,对收到的TCP报文段进行排序以及检测重复的数据;使用校验和来检测报文段的错误;使用确认和计时器来检测和纠正丢包或延时。   在TCP的连接创建状态,两个主机的TCP层间要交换初始序号(ISN:initial sequence number)。这些序号用于标识字节流中的数据,并且还是对应用层的数据字节

2015-07-18 10:46:13 23271 2

原创 LwIP协议栈(2):网络接口

在LwIP中,物理网络硬件接口结构保存在一个全局链表中,它们通过结构体中的 next 指针连接。struct netif { /// pointer to next in linked list */ struct netif *next; /// IP address configuration in network byte order */ ip_addr_t ip_addr;

2015-07-16 20:43:41 2015

原创 TCP详解(2):三次握手与四次挥手

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接,就好像你给别人打电话,必须等线路接通了、对方拿起话筒建立了连接才能相互通话。   一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:

2015-07-16 14:26:27 2271

原创 LwIP协议栈(1):简介与pbuf

概述   Lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。   LwIP是Light Weight (轻型)IP协议,有无操作系统的支持都可以运行。LwIP实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用,它只需十几KB的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在低端的嵌入式系统中使用。[1]

2015-07-15 23:03:43 5578

原创 TCP详解(1):简介与数据包

简介:   传输控制协议(英语:Transmission Control Protocol, TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。         在因特网协议族(Internet protocol suite)

2015-07-15 14:45:19 3410

原创 POJ 3320: Jessicas Reading Problem

Jessica’s Reading Problem ( POJ No.3320)   为了准备考试, Jessica 开始读一本很厚的课本。要想通过考试,必须把课本中所有的知识点都掌握。这本书总共有 P 页,第 i 页恰好有一个知识点 ai(每个知识点都有一个整数编号)。全书中同一个知识点可能会被多次提到,所以她希望通过阅读其中连续的一些页把所有的知识点都覆盖到。给定每页写到的知识点,请求出要阅读

2015-07-14 15:43:15 900

原创 图算法(3):Floyd-Warshall算法

Floyd-Warshall算法(英语:Floyd-Warshall algorithm),中文亦称弗洛伊德算法,是解决任意两点间的最短路径的一种算法,即全源最短路径问题(All-Pairs Shortest Paths Problem),可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。 Floyd-Warshall算法的时间复杂度为O(N^3)[3],空间复杂度为O(N

2015-07-12 21:13:49 1290

原创 图算法(2):Bellman-Ford算法

Bellman-Ford算法是由理查德•贝尔曼(Richard Bellman) 和 莱斯特•福特 创立的,求解单源最短路径问题的一种算法。有时候这种算法也被称为 Moore-Bellman-Ford 算法,因为 Edward F. Moore 也为这个算法的发展做出了贡献。它的原理是对图进行V-1次松弛操作,得到所有可能的最短路径。其优于迪科斯彻算法的方面是边的权值可以为负数、实现简单,缺点是时间

2015-07-12 16:07:42 1463

原创 图算法(1):Dijkstra's algorithm

Dijkstra’s algorithm使用了广度优先搜索解决非负权图的单源最短路径问题,算法最终得到一个最短路径树。该算法常用于路由算法或者作为其他图算法的一个子模块。举例来说,如果图中的顶点表示城市,而边上的权重表示著城市间开车行经的距离,该算法可以用来找到两个城市之间的最短路径。       其基本原理是:每次新扩展一个距离最短的点,更新与其相邻的点的距离。当所有边权都为正时,由于不会存在一

2015-07-12 15:10:31 4848

原创 拓扑排序

在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(Topological sorting)。   1)每个顶点出现且只出现一次;   2)若A在序列中排在B的前面,则在图中不存在从B到A的路径。 也可以定义为:拓扑排序是对有向无环图的顶点的一种排序,它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面。  什么地方会用到拓扑排序呢?比

2015-07-11 23:10:28 644

原创 设计模式(3): 单例模式

单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。   思考如何保证一个类

2015-07-06 17:48:01 453

原创 设计模式(2): 生成器模式

生成器模式(英:Builder Pattern)是一种设计模式,又名:建造模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。   前面一篇文章提到的抽象工厂模式与生成器相似,因为它也可以创建复杂对象。主要的区别是生成器模式着重于一步步构造一个复杂对象。而抽象工厂模式着重于多个系列的产品对象(简单的或是复杂的)。生

2015-07-06 16:31:43 610

原创 设计模式(1): 工厂模式

工厂模式属于创建型设计模式(Creational Patterns),实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。”   创建一个对象常常需要复杂的过程,所以不适合包含在一个复合对象中。创建对象可能会导致

2015-07-06 15:45:08 758

原创 设计模式(0): 简介及SOLID原则

在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。   设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类或对象来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设

2015-07-06 15:36:01 1200

web资源下载器

一个简单德python脚本,可支持pdf/txt/ppt等网页资源的下载

2015-07-28

空空如也

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

TA关注的人

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