自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

码到功成

技术人生

  • 博客(61)
  • 资源 (9)
  • 问答 (1)
  • 收藏
  • 关注

原创 常用负载均衡策略分析

背景一般生产环境单机所能承受的QPS压力为2w左右,过大的压力会导致服务器爆炸。即便是单机能够撑住2w QPS,一般也不会这么做,生产环境一般会预留50%的冗余能力,防止QPS因为某个热门的活动而爆炸。当QPS超过单机所能承受的压力时,自然而然会想到引入分布式集群。那么,某一个请求会被哪台服务器处理呢,这是随机的,还是说按照一定的规则处理的?这就是负载均衡算法所要干的事。负载均衡器...

2018-05-06 16:39:10 1706 1

原创 Java并发执行任务的几种方式

背景在编写业务代码时经常遇到并发执行多个任务的需求,因为串行执行太慢,会影响业务代码性能。特别对于直接面向普通用户的业务来说用户体验至关重要,保证用户体验重要的一点是要“快”。业务代码中经常需要调用其它业务接口或者同时从多个数据源取数据再处理等,这种情况下势必要走网络请求,网络消耗必不可少,最好的情况是毫秒级别,一般情况下是几十毫秒级别,甚至几百毫秒,TimeoutException恐怕大家并...

2018-05-06 08:33:59 13111 2

原创 Java字符编码—Unicode与UTF-8的区别

Unicode字符集Unicode,是计算机科学领域里的一项业界标准。为每种语言中的每个字符设定了统一并且唯一的整数值,把这个数值称为码点(Code Point)。但是它并不规定计算机如何存储和传输这个数值(以多少个字节存储,是定长还是变长,Unicode没有字节长度的概念)。Unicode 定义了一个码点空间包含1,114,112个码点,范围从0到0x10FFFF,也就是说,它仅仅是一个字...

2019-07-19 08:59:16 1045

原创 elasticsearch节点角色

在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题。 默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,即双重角色。由两个属性控制:node.master和node.data,默认情况下这两个属性的值都是true: * node.master:表示节点是否具有成为主节点的资格,值为true...

2018-05-08 23:38:43 3285

原创 ElasticSearch核心概念

核心概念Cluster,服务节点集合,集群名称必须唯一,默认为”elasticsearch”。Node, 单服务节点,通过名称标识,默认为UUID,节点通过集群名加入集群中。Index,把一个或多个分片的分组在一起的逻辑空间,默认分为5个主分片和一个replica分片,全部小写。Type,索引的逻辑分区,在Index里可定义多个Type。Document,被索引的基本单元,JSON格...

2018-05-08 23:34:10 277

翻译 JAVA类加载器原理

ClassLoader用于在运行时加载class文件。可以从文件系统、网络及其他源加载 Java有三个默认的ClassLoader,分别是:Bootstrap、Extension、System or Application类加载器。每一种类加载器都有预定义的加载路径,见下图。Java的类加载器遵循三原则: 1. 委派模型:当前ClassLoader优先把类加载请求委派给父ClassLoader加

2017-10-11 19:20:51 453

原创 solr集群搭建

solrcloud介绍SolrCloud(solr 云)是Solr提供的分布式搜索方案,支持大规模、容错、支持分布式索引和检索。它是基于solr和zookeeper的分布式搜索方案,使用zookeeper作为配置管理中心。版本说明本文根据业务场景,并没有使用最的版本,相关版本:solr-4.6.1、zookeeper-3.4.6。搭建说明下载

2017-08-12 15:54:05 401

原创 Tinyhttpd源码解析

简介Tinyhttpd是一轻量级的web服务器,它由美国学生J. David Blackstone于1999年在学习网络课程时编写。源码不到500行,非常适合学习Web编程和Linux/Unix编程接口。分析Tinyhttpd执行流程如下图:主线程完成socket的创建、绑定、端口监听、创建子线程处理每一个请求。代码如下:int main(void){ int

2015-11-28 21:06:59 727

原创 nginx自定义字符串

ngx_str_t是nginx自定义的字符串格式,其定义在ngx_string.h中,如下:typedef struct { size_t len; //字符串长度,不含'\0' u_char *data; //真正字符串} ngx_str_t;它本质上就是一个结构体,nginx中广泛使用这种格式字符串。 优点:减少对字符串长度的计算次数,nginx作为web服

2015-11-14 19:27:33 3809

转载 线程安全单例模式几种优雅的实现

线程安全的单例模式实现有几种思路,个人认为第2种方案最优雅: 1. 饿汉式 2. 列表内容 3. 借助内部类 4. 普通加锁解决 5. 双重检测,但要注意写法如果单体模式继续扩展为N元单体模式,那就是对象池模式了 饿汉式单例public class Singleton { private final static Singleton INSTANCE = new Sing

2015-10-11 23:32:55 724

原创 行编辑器

题目你知道行编辑器吗?不知道也没关系,现在我会告诉你: 1.如果你收到一个’#’,那么你应该删掉一个你已经收到的字符,不包括’#’; 2.如果你收到一个’@’,那么你应该把你收到的一整行都删掉。 (‘#’和‘@’都为不可见字符。) 你明白了吗?现在轮到你去解决这个问题啦! 输入 第一行是一个整数T,代表有T组数据。 每组数据的开始时一个字符串,字符串长度小于100,每个字符一定是(‘a

2015-10-01 11:45:38 1078

原创 最长回文串

题目回文串是指给定一个字符串,字符串的第一个字符等于最后一个字符,第n个字符等于倒数第n个字符,比如”a”, “aa”, “aba”, “abba”都是回文串。现在给定一个字符串,返回其中最长的回文子串,如果有多个一样长的子字符串,则返回第一个。 测试样例1:输入是”a”, 程序输出”a”; 测试样例2:输入是”abc”, 程序输出”a”; 测试样例3:输入是” 121abcbad”, 程序输

2015-10-01 10:28:08 2895

原创 二叉树的两个节点之间最远的距离

题目:求二叉树的两个节点之间最远的距离。package java_exam;/** * 题目:求二叉树的两个节点之间最远的距离。 * @author ShaoCheng * @version 1.0 2015-9-28 *//* * 计算一个二叉树的最大距离有两个情况: * 情况A: 路径经过左子树的最深节点,通过根节点,再到右子树的最深节点。 * 情况B: 路径不穿过根节点,而

2015-09-28 17:07:15 3413

原创 最长连续子数组和为0

题目找出最长的连续子数组,其和为0。分析穷举法:两次扫描数组把所有的和为0的子数组长度均找出,然后再选择最大的。时间复杂O(n2)O(n^2)。改进:给定一个数组如,1, 2, 3, 4, -1, -2, -4, -3, 1, 1,1,1,1,求出其累加和数组1,3,6,10,9,7,3,0,1,2,3,4,5。顺序扫描数组,遇到0记录其索引值index,那么长度为index-0+1。如果遇到非0,

2015-09-26 16:23:51 2081

原创 完全二叉树插入

题目:给一颗完全二叉树,要求插入一个节点后,依然是完全二叉树。 分析:利用完全二叉树的性质,找到要插入的位置,先判断左子树的最右结点与右子树的最右结点高度,如果相等,只需要插入到左子树即可,否则插入右子树。实现:/**题目:给完全二叉树插入一个节点,插完后保证还是完全二叉树 * @author ShaoCheng * @version 1.0 2015-9-24 */class TreeNo

2015-09-26 00:03:14 7186 8

原创 正整数分解质因子

输入正整数n,分解正整数n的质因子,并输出。 分析: 对n进行分解质因数,应先找到一个最小的质数k,是一个逐步分解的过程。因为我们知道任何n=2k1∗3k2∗5k3∗7k4...n=2^{k_1}*3^{k_2}*5^{k_3}*7^{k_4}...都可以分解成如下形式。 代码如下:递归实现循环实现import java.util.ArrayList;import java.util.

2015-09-22 23:40:50 1450

原创 硬币组合问题

题目假设我们有8种不同面值的硬币{1,2,5,10,20,50,100,200},用这些硬币组合够成一个给定的数值n。例如n=200,那么一种可能的组合方式为 200 = 3 * 1 + 1*2 + 1*5 + 2*20 + 1 * 50 + 1 * 100. 问总过有多少种可能的组合方式?原题 转载分析这道题目是非常经典的动态规划算法题。给定一个数值sum,假设我们有m种不同类型的硬币v1,v2,

2015-09-19 16:57:28 1696

原创 猴子分桃子问题

题目题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

2015-09-19 12:12:45 742 3

转载 【转】Google如何管理20亿行代码

《Wired》今天一篇文章谈到Google的代码量已达到20亿行,并简单介绍了Google是如何管理这些代码的。这20亿行代码,涉及搜索、Gmail、文档、地图、YouTube、Google+等绝大多数Google提供的服务,存储在“一个”代码仓库中,两万五千名Google工程师都可以访问——这可能是世界上最大的单一代码库。只有几个例外:涉及机要信息的代码,如PageRank算法,或者相对独立的项目

2015-09-19 11:55:42 590

原创 计数排序

原理通过统计各个元素出现次数,以决定元素的位置。应用场景适合元素值不大,且重复较多的情况。计数排序的精髓在于通过统计次数进行排序,相比于比较排序算法,性能更佳。当适用场景有限,比如对公司员工按年龄排序等。性能时间复杂度仅O(n),空间复杂度O(n)。代码 /* 非常巧妙的实现 */ public static void countSort(int a[]){ if(a

2015-09-17 23:47:59 475

原创 统计字符串权重

题目:假设,字母’a’代表值为1(即value(a)==1), ‘b’为2,…,’z’为26;如果出现连续相同字符,如aaaa…(连续k个a),这k个a的总权值会变成k*k*value(),如BB和bbbb的权值都是4*4*2=32;分析:顺序扫描一次就可以统计出来,时间复杂度O(n), 额外空间复杂度O(1),注意处理大数及边界。第一行输入一个整数T(T<=1000),表示有T组数据。 接下来每

2015-04-19 21:59:47 2740

原创 机器人的运动范围

题目:地上有一个m行n列的方格。一个机器人从坐标(0,0)的格子开始移动,它每次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7=18。但它不能进入方格(35,38),因为3+5+3+8=19。请问机器人能够到达多少格子?分析:回溯算法经典入门例子。/* 机器人运动范围 */#include <i

2015-04-16 20:01:46 946

原创 求滑动窗口最大值

题目:给定一组序列和滑动窗口大小,找出滑动窗口中的最大值。例如,给定序列2,3,4,2,10,8,12和窗口大小3,滑动窗口最大值为 4,4,10,10,12.分析:暴力法:输入序列数为n,窗口大小为k。依次扫描滑动窗口求出其最大值,显然这种算法的时间在最坏的情况下时间复杂度为O(n*k).如何把时间复杂度降到O(n),这就需每次要找出窗口中最大值的时间复杂度为O(1)。这种方法请参考剑指off

2015-04-13 11:34:17 1287

转载 今天是微软40岁生日,图说微软的初创故事

今天是微软的40岁生日。1975年4月4日,19岁的比尔·盖茨(Bill Gates)和22岁的保罗·艾伦(Paul Allen)在新墨西哥州阿尔伯克基市(Albuquerque)注册了一个合伙公司,取名Micro-Soft。这个名字是Allen想出来的,就是microcomputer和software的合成。盖茨后来说不知道当时怎么想的,非要有个难看的连字符还有大写的S。

2015-04-08 21:58:02 1032

转载 我的程序员人生路——雷军(3)

不少人想白手起家、空手套狼,在今天的商业社会里这是非常不现实的一件事情。我特别想问:你为什么不能先做能力及资源上的积累后再创业呢?如果你觉得机会难得,为什么不去试图说服更多人给资源后再创业呢?    我参与创办过了金山软件、卓越网,作为天使投资人投资了不少成功的创业项目,看起来很拉风。但其实上我也有过非常惨痛的失败。创业不是件容易的事情,一定要想清楚,做好充分的准备后再出发。    有的人

2015-04-07 15:38:12 919

转载 我的程序员人生路——雷军(2)

《我十年的程序员生涯》系列之二:我写BITLOK的这七年    1989年8月,大二暑假,我和王全国合作写了我的第一个正式作品BITLOK 加密软件,主要用来保护软件的知识产权,防止盗版的。当时,他毕业留校了,在校办的一家电脑销售公司工作,我们就是利用晚上和周末时间在他们公司的电脑上完成的产品研发。1991年我写了BITLOK第二个版本,1996年我在休假的时候写了BITLOK 3.0。后来B

2015-04-07 15:23:00 1117

转载 我的程序人生路——雷军

最近,和UCWEB同事讨论,怎么才能把我们的UCWEB做到极致。我说,“手机上的平台非常多,如果想做好,需要足够多、足够优秀的程序员。优秀的程序员如何定义呢?首先必须热爱写程序,其次必须是一个完美主义者。只有这样的人,才能把事情做得极致。”    说着说着,我怀念起我过去写程序的日子,从1987年到1996年,那是一段阳光灿烂的日子。几年前我无意中从网上找到了1996年在金山西点BBS上写几篇

2015-04-07 15:18:13 2647 1

原创 二分查找算法(折半查找算法)

原理:二分查找算法也是一种分治算法,每次将规模变成一半。性能:它的本质是进行的二叉搜索树查找,所以最坏情况是时间复杂度即树高O(n) (最坏情况的查找次数logn+1向下取整)。缺点:只能查找有序表循环实现int binarySearch(int a[], int key, int n){ int p, r, mid; p = 0; r = n-1; w

2015-03-31 21:24:41 646

原创 最大子数组问题

题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的最大子数组和的最大值。思路:暴力法:n个元素的子数组(不为空)个数为n+(n-1)+...1 = 2*(n+1)*n/2个。时间复杂度至少为O(n^2)。动态规划法:如果已知a[0..j]的最大子数组,那么a[0..j+1]的最大子数组要么是a[0..j+1]的最大子数组,要么是a[i..

2015-03-20 21:11:13 664

原创 插入排序

思路:将待排序的关键字插入到已经排好序(只有一个元素也称排好序)的记录中性能:稳定排序算法,时间复杂度O(n^2),空间复杂度O(1)(就是指辅助空间),有大量数据移动,越有序越好性能越好(逆序性能最差),适合少量数据排序。void insert_sort(int a[], int n){ int j, key; for(int i = 1; i < n; i++){ key =

2015-03-20 10:28:57 403

原创 指针和引用的区别

非空区别:不能使用指向空值的引用。一个引用必须指向某些对象。合法性区别:使用引用前不需要测试它的合法性。相反,指针应该总是被测试,防止其为空。可修改性:指针可以被重新赋值指向新的对象;引用在初始化后不能改变指向的对象,但是对象的内容可以改变。

2015-03-18 16:39:50 436

原创 内联函数和宏的区别

内联函数是函数,它是在编译时被嵌入到目标代码中,从而减少函数调用开销。它是函数,它会作参数类型检查和自动类型转型(同普通函数)。宏并不是函数,它在编译前(预处理阶段)进行简单的字符串替换。

2015-03-18 16:27:38 541

原创 经典位运算

位运算能节约内存和使用程序性能更好:用位运算实现两个 整型数的交换void exchange(int a, int b){ a ^= b; b ^= a; a ^= b;}用位运算实现取两个整数的(a+b)/2的向下取整值(或求均值)int average(int a, int b){ return (a&b) + ((a^b)>>1);}判断一个整数是否是2^N次

2015-03-17 22:26:44 613

原创 快速排序算法

思路:快速排序算法使用分治思想。算法导论上快速排序算法实现思路很清晰,现实现如下:分解:数组A[p..r]被划分为两个(可能为空)子数组A[p..q-1]和A[q+1..r],使得A[p..r]中的每一个元素都小于A[q],而A[q]也小于等于A[q+1..r]中的每一个元素。其中,计算下标q也是划分过程的一部分。解决:通过递归调用快速排序,对子数组A[p..q-1]和A[q+1..r]进

2015-03-16 11:13:02 511

原创 归并排序算法

思路:把待排序序列分成相同大小的两个部分,依次对这两部分进行归并排序,完毕之后再按照顺序进行合并。具体思路请参考算法导论,以下实现按算法导论中思路来写的。性能:稳定的排序算法,时间复杂度最差、平均、最好都是O(nlogn),空间复杂度为O(n)。#include using namespace std;void mergeSort(int a[], int p, int r);vo

2015-03-16 10:02:15 458

原创 找top 10信息

本文章内容来源于《程序员面试宝典》。题目:有1千万条短信,以文本文件的形式保存,一行一条,有重复。请用5分钟时间,找出重复出现最多的前10条。解析:某些面试者想用数据库的办法来实现:首先将文本导入数据库,再利用select语句某些方法得出前10条短信。但实际上用数据库是满足不了5分钟解决这个条件的。这是因为1千万条短信即使1秒钟录入1万条(这已经算是很快的数据录入了)5分钟才300

2015-03-14 22:45:27 868

原创 heap与stack的差

本文内容来源于《程序员面试宝典》第三版。在进行C/C++编程时,经常将操作的内存分以下几个类别:栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈。堆区(heap):一般由程序员分配和释放(malloc-free, new-delete),若程序不员不释放,程序结束时可能由操作系统释放,也可以造成内存泄露。注意:它与数据结构

2015-03-14 20:16:43 1053

原创 只遍历一次单链表找出中间节点的算法

要求:只遍历一次单链表找出中间节点的算法思路:设立两个指针,比如p0和p1, p0=p1=head。p0每次移动两个位置,p1每次移动一个位置,即p0=p0->next->next, p1=p1->next。当p0到达最后一个结点时,p1的位置便是中间节点位置。void searchmid(Node *head, Node *mid){ Node *p0, *p1; p1 = h

2015-03-13 21:41:23 1818

原创 单链表操作

这篇文章的目的只是为了自己复习单链表而写,里面的代码没有经过实际测试。只是好让自己保持思路。删除链表节点/* 单链表删除节点 */Node *del(Node *head, int num){ Node *p1, *p2; p1 = head; //先找到要删除的节点,再去判断其位置 while(num != p1->data || p1->next != NULL){

2015-03-13 21:27:02 477

原创 Vmware使用时Unrecoverable Memory Allocation Failure

在Vmware10中安装的是Ubuntu。使用时,某一天出现如下问题:Unrecoverable Memory Allocation Failure之后是ubuntu起不来,一直出现这样的问题。笔者的解决办法是,进入Ubuntu的Recovery模式,对文件系统进行了检测,然后就可以正常使用了。

2015-01-06 16:33:06 5329

吴军的数学之美

随着数学的发展和人类文明的进步,数学美的概念会有所发展,分类也不相同,但它的基本内容是相对稳定的,这就是:对称美、简洁美、统一美和奇异美。

2018-05-29

redis设计与实现

本书全面而完整地讲解了Redis的内部机制与实现方式,对Redis的大多数单机功能以及所有多机功能的实现原理进行了介绍,展示了这些功能的核心数据结构以及关键的算法思想,图示丰富,描述清晰,并给出大量参考信息。通过阅读本书,读者可以快速、有效地了解Redis的内部构造以及运作机制,更好、更高效地使用Redis。

2018-05-29

C语言常用排序方法, 动画演示

排序方法, 用动画的形式的,给您演示了排序的原理

2011-08-11

C-C++语言趣味程序设计编程百例精解(1)

C-C++语言趣味程序设计编程百例精解(1), 让你越学越有趣

2011-07-29

华为C语言规范(想进华为的进)

华为的编程规范,你值得拥有, 有了好的编程规范才能写出好的程序

2011-07-29

Google_C++编程风格指南(推荐)

Google_C++编程风格指南(推荐), 网络搜索巨擘的编程规范

2011-07-29

C语言ISO标准库函数源码

C语言ISO标准库函数源码, 这是世界的标准, 你值得拥有

2011-07-29

优化C语言代码(程序员必读)

每个C程序员必知的代码优化技巧, 要想写出很好代码, 你您少不了这个

2011-07-29

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

TA关注的人

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