自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux惊群效应之Nginx解决方案

结论不管还是多进程还是多线程,都存在惊群效应,本篇文章使用多进程分析。在Linux2.6版本之后,已经解决了系统调用Accept的惊群效应(前提是没有使用select、poll、epoll等事件机制)。目前Linux已经部分解决了epoll的惊群效应(epoll在fork之前),Linux2.6是没有解决的。epoll在fork之后创建仍然存在惊群效应,Nginx使用自己实现的互斥锁解...

2018-04-14 19:55:36 1221

转载 经典论文翻译导读之《Finding a needle in Haystack: Facebook’s photo storage》

【译者预读】面对海量小文件的存储和检索,Google发表了GFS,淘宝开源了TFS,而Facebook又是如何应对千亿级别的图片存储、每秒百万级别的图片查询?Facebook与同样提供了海量图片服务的淘宝,解决方案有何异同?本篇文章,为您揭晓。本篇论文的原文可谓通俗易懂、行云流水、结构清晰、图文并茂……正如作者所说的——“替换Facebook的图片存储系统就像高速公路上给汽车换轮子,我们无法去追求完

2017-05-23 21:59:19 3288 2

原创 分布式文件存储Seaweedfs源码剖析

1、前言 基于源码版本号 0.67,【Seaweedfs以前旧版叫Weedfs】Seaweedfs 是一个非常优秀的由 golang 开发的分布式存储开源项目, 虽然在我刚开始关注的时候它在 github.com 上面只有 star 50+, 但是我觉得这个项目是一个几千 star 量级的优秀开源项目。现在git上已经有将近4000个star了。Seaweedfs 的设计原理是基于 Faceboo

2017-02-26 22:04:25 4505

转载 分布式队列编程---优化篇

一、前言“分布式队列编程”是一个系列文,之前我们已经发布了《分布式队列编程—基础篇》,主要剖析了分布式队列编程模型的需求来源、定义、结构以及其变 化多样性;根据作者在新美大实际工作经验,给出了队列式编程在分布式环境下的一些具体应用。本文将重点阐述工程师运用分布式队列编程构架的时候,在生产 者、分布式队列以及消费者这三个环节的注意点以及优化建议。确定采用分布式队列编程模型之后,主体架构就算完成了,但工

2016-12-29 16:22:29 781

转载 分布式队列编程---基础篇

一、简介作为一种基础的抽象数据结构,队列被广泛应用在各类编程中。大数据时代对跨进程、跨机器的通讯提出了更高的要求,和以往相比,分布式队列编程的运用几乎已无处不在。但是,这种常见的基础性的事物往往容易被忽视,使用者往往会忽视两点:使用分布式队列的时候,没有意识到它是队列。 有具体需求的时候,忘记了分布式队列的存在。文章首先从最基础的需求出发,详细剖析分布式队列编程模型的需求来源、定义、结构以及其变化

2016-12-29 15:29:10 780

原创 Sublime Text3 + Golang搭建开发环境

一、安装git 因为golang是通过git来管理远程包的,所以我们首先要安装git,下载地址:http://www.git-scm.com/download/ git安装比较简单,直接下一步即可(在Windows Explorer integration选项中将“Git Bash here”和“Git GUI here”打对勾),需要了解具体安装的可以看http://www.jb51.net/

2016-12-29 13:13:49 1102

原创 初探Go语言网络库的基础实现

Go语言的出现,是一门语言把网络编程这件事情给做“正确”了,当然,除了Go语言以外,还有很多语言也把这件事情做”正确”了。我一直坚持着这样的理念——要做”正确”的事情,而不是”高性能”的事情;很多时候,我们在做系统设计、技术选型的时候,都被“高性能”这三个字给绑架了,当然不是说性能不重要,你懂的目前很多高性能的基础网络服务器都是采用的C语言开发的,比如:Nginx、Redis、memcached等,

2016-12-28 17:20:00 1817

转载 区块链技术是什么鬼

最近区块链比较火,区块链是什么鬼,怎么以前没听过,不过说个东西你一定听过-比特币,以前区块链用在比特币上,一直到最近半年,区块链已经渐渐开始有了一些其他应用,特别是在金融领域。那么什么是区块链呢?他和比特币有什么联系呢?我今天整理了之前各家所言,大体上也就明白区块链是什么玩意了。区块链在比特币的应用比特币点对点网络将所有的交易历史都储存在“区块链”(blockchain)中。区块链在持续延长,而且新

2016-11-25 14:06:59 2565

原创 Git使用指南

一、Git是什么?Git是目前世界上最先进的分布式版本控制系统二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳

2016-10-12 18:22:26 704

原创 滴滴校招面经(已拿offer)

之前因为做CVTE笔记把滴滴的笔试错过了,之后18号又给了依次笔试的机会,也顺利通过笔试进入了面试。前两面是视频面,后两面本应该是北京现场面,但是考虑到18号之后的那一批只有我一个非北京地区的,就给我安排了视频面。滴滴一面:1、快排,手撸code2、中序遍历二叉树 手撸code3、内存对齐问题 手撸code4、C程序内存布局5、大数据 40G 字符串 找出重复的两个字符串6、分布式服务器7、cook

2016-10-09 13:45:04 19735 1

原创 CVTE校招面经(已拿offer)

招实习生的时候做了CVTE的笔试题,网页卡了,把网页刷新了一下,所以两道编程题就全没了,手贱了。。。于是乎,只提交了个选择题,笔试就挂了。校招笔试还好没有出状况,顺利的过了笔试。然后在桃园酒店面试。面试前一天因为在沙发上睡了一觉,竟然发烧了,唉,第二天去面试的时候好头晕,一直晕晕乎乎的,不过还好3面都过了。CVTE一面: 1、说一下最值得说的比赛或者项目,我给他说了蓝桥杯和QQ聊天系统,然后就直接

2016-09-14 10:31:11 23093 1

原创 windows下Apache+MySQL+PHP安装和Zend配置

1、软件下载地址PHP地址为:http://windows.php.net/download/ Apache地址为:http://www.apachelounge.com/download/ Mysql地址为:http://dev.mysql.com/downloads/mysql/2、下载说明2.1、PHP下载一般选择的是线程安全版,关于线程安全版与非线程安全版的区别可 自行上网查阅相关资料

2016-09-09 21:54:15 4154

原创 TCP粘包分析与解决

1、什么是TCP粘包TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾2、什么时候考虑粘包问题a、如果利用tcp每次发送数据,就与对方建立连接,然后双方发送完一段数据后,就关闭连接,这样就不会出现粘包问题(短链接)关闭连接主要要双方都发送close连接(参考tcp关闭协议)。如:A需要发送一段字符串给B,那么A与B建立连接,然后发送双方都默

2016-09-04 12:15:31 845

原创 HTTP长连接和短链接

1、什么是长连接、短连接在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的 Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。 但从 HTTP/1.1起,默认使用长连接,用以保

2016-09-03 22:07:28 4406

原创 TCP三次握手和四次挥手以及缺陷(详细)

建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:1、TCP连接建立——三次握手几个概念: 【1】seq:序号,占4个字节,范围[0,4284967296],由于TCP是面向字节流的,在一个1个TCP连接中传送字节流中国的每一个字节都按照顺序编号,此外序号是循环使用的 【2】ACK: 仅当ACK=1时确认字段才有效,当ACK=0时确认字段无效,并且TCP规定,在连接建

2016-08-25 22:30:59 18768 5

转载 Linux高性能服务器架构

1. 概述:任何一行都有自己的军规, 我想这篇著名的文章就是游戏服务器程序员的军规. 也许你认为游戏服务器程序员日常并不涉及这样底层的实现, 而只是去完成策划提出的需求, 我觉得也有道理, 毕竟这些是我们的工作, 下面的译文就不太适合你. 但是对于想改进现有系统, 在服务器方面给予更好的技术支持, 那么你在开始工作之前必须了解一些禁忌, 并且给出了一些解决方向上的真知灼见. 把它发在这里, 供随时复

2016-08-17 16:14:00 3295

原创 三种快排及四种优化方式

1、快速排序的基本思想: 快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。2、快速排序的三个步骤: (1)选择基准:在待排序列中,按照某种方式挑出一个元素,作为 “基准”(pivot) (2)分割操作:以该基准在序列中的实际位置,把序列分成两个子序列。此时,在基准左边的元

2016-08-10 20:46:31 38367 10

原创 Fibonacci数列优化以及应用

斐波那契数列是一个非常美丽、和谐的数列,也是一个黄金分割数列。符合黄金分割比0.618。有人说它起源于一对繁殖力惊人、基因非常优秀的兔子,也有人说远古时期的鹦鹉就知道这个规律。 每一个学理工科的学生都知道斐波那契数列,斐波那契数列由如下递推关系式定义: F(0)=0, F(1)=1, n>1时,F(n)=F(n-1)+F(n-2)。下面简单地分析一下常见的Fibonacci数列求解算法 1、递

2016-08-09 21:47:46 1169

转载 Linux IO复用区别与epoll详解

一、select、poll、epoll之间的区别总结[整理]   select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/

2016-08-09 10:42:51 2180

原创 Linux五种IO模型

1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。 例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步:异

2016-08-09 09:44:57 572

转载 字符串哈希函数

链表查找的时间效率为O(N),二分法为log2N,B+ Tree为log2N,但Hash链表查找的时间效率为O(1)。 设计高效算法往往需要使用Hash链表,常数级的查找速度是任何别的算法无法比拟的,Hash链表的构造和冲突的不同实现方法对效率当然有一定的影响,然而Hash函数是Hash链表最核心的部分,本文尝试分析一些经典软件中使用到的字符串Hash函数在执行效率、离散性、空间利用率等方面的性

2016-08-08 22:11:59 1355

原创 KMP算法

字符串匹配是计算机的基本任务之一。举例来说,有一个字符串”BBC ABCDAB ABCDABCDABDE”,我想知道,里面是否包含另一个字符串”ABCDABD”?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上有很多解释,但读起来都很费劲。直到读到Jake

2016-08-08 21:52:40 467

原创 refind实现Win10 + Kali2.0 双引导

如何在UEFI+GPT下使用refind实现Win10 + Kali2.0 双引导?一、Win10和Kali2.0的安装:1.Win10安装以及激活:关于Win10的安装我就不再这里赘述,激活工具呢,kms之类的也有很多。2.Kali2.0安装:a.这个是kali2.0官网的下载地址:https://www.kali.org/downloads/,我下载的是64位的完整版。b.然后我使用了Ultr

2016-07-21 11:25:56 2666 2

原创 模拟扑克牌的洗牌发牌

在内存中模拟出一副牌,然后模拟洗牌,发牌等动作 流程:构建一副牌保存到一个数组中–>洗牌–>创建玩家–>向玩家发牌–>输出每个玩家的牌#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <malloc.h>//一副牌的数量 #define CARD_COUNT 54 //定义扑

2016-06-19 21:57:41 4501

原创 线性表

1. 线性表综述: 线性表是具有相同特性数据元素的一个有限序列 该序列中所包含元素的个数叫做线性表的长度 当一个线性表有序时,成为有序表,属于逻辑结构 线性表的逻辑特征: 对于至少含有一个元素的线性表来说 除起始元素没有前驱元素外,其他元素都有一个唯一前驱 除终端元素没有后继元素外,其他元素都有一个唯一后继 在线性表中,每个元素最多只有一个前驱和后继元素 线性表存储结构:

2016-06-18 11:08:55 1743

转载 N皇后的两个最高效的解法

1. 问题描述 N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击)2. 回溯法求解N皇后 回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。在现实中,有很多问题往往需要我们把其所有可能穷举出来,然后从中找出满足某种要求的可能或最优

2016-06-03 23:09:54 9836

原创 N皇后问题

1. 问题描述: N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击) 本人使用的是回溯法,另外还有高效的解法见转载的博客2. Code#include <iostream>#define N 20using namespace std;bool arr[N][N] = {0}; int count = 0;

2016-06-03 22:49:57 645

原创 DFS之拼接长棍

1. 题意概述 n根长度不同的小棍,拼成若干根长棍,要这么长棍的长度相等,并且小棍刚好都用完,问能拼成的长棍的最短长度是多少?#include <iostream>#include <algorithm>#include <cstring> using namespace std;const int maxn = 100;int arr[maxn]; bool used[maxn]; i

2016-06-03 22:11:40 798

原创 搜索算法(Search)

1. 概述: 搜索算法是利用计算机的性能优势来有目的的枚举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。在问题求解过程中,人们所面临的大多数现实问题往往没有确定性的算法,需要通过搜索算法来解决。 搜索问题一般只需要考虑两个基本问题: 1、使用合适的状态空间来表示问题。 2、测试该状态空间中目标状态是否会出现一个问题的基本信息由4部分组成 1、初始状态集合—–>定义了问题

2016-06-03 21:53:10 2819

原创 哈希表(HashTable)

1. 哈希表综述: 哈希表(Hash Table)也叫散列表,是根据关键码值直接访问 就是一个把关键码映射到表中的一个位置来访问记录的过程 这个映射函数叫做哈希函数,用hash()表示,存放记录的数组叫做哈希表(一个数组) 哈希表是一种高效的数据结构,主要体现在数据的查找上,几乎可以看成常数时间 例如:对于排序算法,最低时间复杂度为O(nlogn),但是对于一些特殊情况可以更快,现有N个

2016-06-03 21:42:50 612

原创 并查集(UnionSet)

1. 前述: 在一些有N个元素的集合应用问题中,通常是在开始时让每个元素构成一个单元素的集合,然后按照一定顺序将属于同一组的元素所在的集合合并,期间要反复查找一个元素在哪个集合中,这类题目看似并不复杂,但是数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受,即使空间勉强通过,时间复杂度也极高,只能采取一种特殊的数据结构——->并查集2. 并查集初始化: 一般用树形结构来

2016-06-03 21:27:51 1927

原创 百度2016实习生面经(三面)

五一在外面玩的时候收到百度发来的下周六上午10点面试的通知,那是一个兴奋啊。唉,导致了五一玩的那叫一个纠结呀。一边玩一边想着面试的事,真叫痛并快乐着。嘿嘿。终于体会到了心在曹营身在汉的感觉。五一过后,便返回学校了。返回学校之后,便是疯狂的刷题,复习以前的知识。数据结构、操作系统、计算机网络、linux、C++等。唉,复习的想吐了,都有想撕书的冲动了。终于,这艰难的几天过去了,周六来了。好激动啊。因为

2016-06-01 22:32:06 6679 1

原创 String类赋值运算符函数

题目:如下类型CMyString的声明,请为该类添加赋值运算符函数class CMyString{public: CMyString(char* pdata = NULL); CMyString(const CMyString& str); //赋值函数 CMyString& operator=(const CMyString& str); ~CMyStr

2016-06-01 22:22:54 1127

原创 C++内存分布 虚表 虚指针(非常重要)

C++内存分布 虚表 虚指针: class Base { public: int m_base; }; class DerivedA: public Base { public: int m_derivedA; }; class DerivedB: public Base { public: int m_derivedB; }; class D

2016-05-15 21:03:47 12465 1

原创 C++虚函数表解析

虚函数表: C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不

2016-05-15 20:40:51 381

原创 排列组合(两种方法)

排列组合是组合数学的基础,从n个不同元素中任取m个,约定1<m≤n,按任意一种次序排成一列,称为排列,其排列种数记为(Arrange)A(n,m)。从n个不同元素中任取m个(约定1<m<n)成一组,称为一个组合,其组合种数记为C(n,m)。计算A(n,m)与C(n,m)只要简单进行乘运算即可,要具体展现出排列的每一列与组合的每一组,决非轻而易举。 注意: 1、 排列A有序 A(n,m) =

2016-05-15 20:31:29 1398

转载 大数据之一般解决方法

处理海量数据问题,就是: 1、分而治之/hash映射 + hash统计 + 堆/快速/归并排序 2、Bloom filter/Bitmap 3、Trie树/数据库/倒排索引 4、外排序 5、分布式处理之hadoop/mapreduce接下来的部分,便针对这5种方法模式结合对应的海量数据处理面试题分别具体阐述。密匙一、分而治之/hash映射 + hash统计 + 堆/快速/归并排序1、海量日

2016-05-02 21:44:49 632 1

原创 C++大数问题

1. 大数相加 1、从结尾开始每位相加 2、两个整数长度不相等(肯定有一个已经加完了,再把没有加完的加上去) 3、最高位有进位,要再进一位 4、结果字符串逆序2. 大数相乘 - 分析 12*34=? 乘数:12 被乘数:34 1、先把乘数列出来,第i行列左起第i位数,列N次(N为乘数的位数) 第二行起每次右移一位(1) (1) (2) (2)2、写入被乘数,按先列后行的

2016-05-02 21:00:50 2800 3

原创 二维数组中的查找

问题描述: 在一个二维数组中,每一行都是按照从左向右递增的顺序排序,每一列都是按照从上到下递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断该数组中是否有该整数 题目分析: 在分析这个问题的时候,很多人都会把二维数组画成矩形,然后从数组中选取一个数字,分3中情况来分析查找过程。(1)当数组中选取的数字刚好和要查找的数字相等时,就结束查找过程。(2)如果选取的数字小于要查

2016-05-02 20:57:40 518

原创 Ubuntu下挂载Windows分区

1. 手工挂载 1)首先你得知道Linux下对硬盘分区的称呼。 sudo fdisk -lDisk /dev/sda: 160.0 GB, 160041885696 bytes 255 heads, 63 sectors/track, 19457 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifi

2016-05-02 15:06:58 2135 1

C局用程控机项目

一个完整的局用程控机系统。各个功能均已实现

2015-09-07

空空如也

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

TA关注的人

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