自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 问答 (2)
  • 收藏
  • 关注

原创 Redis系列(一):Redis架构演进

Redis的架构是逐步演进的,从最初的单实例,到目前集群模式,我们可以看下整个演进过程,主从复制单个Redis实例的能力有限,在Redis的大多数使用场景下,都是读请求多于写请求,因此通过增加实例作为只读的从节点,不仅可以扩展Redis处理读请求的能力,还能做到数据冗余。通过SLAVEOF,Redis可以指定一个实例为slave,同步另一个实例(master)的数据。同步过程如下,SYNC...

2019-10-06 22:11:11 238

原创 缓存 Cache-Aside Pattern

缓存模式,把数据从源数据加载到缓存中,可以改善服务的性能,同时尽量确保缓存与源数据的一致性。背景为了提高服务性能,我们通常用缓存来保存一些热点数据。但是,数据一致性是个挑战,要保证缓存与源数据完全一致是不现实的,因此服务需要一个策略来保证缓存中的数据尽可能与源数据保持一致,同时正确处理缓存中过期的数据。解决方案现在有很多成熟的缓存解决方案,他们提供直读(read-through)、直写(w...

2019-10-05 23:55:05 328

原创 熔断 Circuit Breaker Pattern

在实际环境中,当下游服务或者存储出现错误,而且需要大量时间来恢复时,服务如何正确处理这些错误决定了服务本身的健壮性和稳定性,而熔断模式则是解决方法之一。背景在分布式系统中,一个服务会与多个下游服务打交道,当它访问下游时,很可能因为网络问题(连接过慢、连接超时)、下游服务负载过高或者暂时不可用,导致访问失败。这些问题通常持续时间很多,所以服务为了保证自己对外接口的稳定性,一般会采取一些错误处理措...

2019-10-05 17:07:14 300

原创 NSQ系列(三):nsqlookupd原理和实现

nsqlookupd的角色类似于注册中心,管理着nsqd -> Topic -> Channel的拓扑信息,提供Client查询Topic和Channel的信息。nsqlookupd主要提供两种接口:TCP接口,用于nsqd广播信息;另外就是HTTP接口,让Client可以服务发现或者admin可以进行管理操作。启动方式和nsqd类似,func (p *program) Start...

2019-10-04 23:36:55 1290

原创 NSQ系列(二):nsqd原理和实现

在前一篇文章,我们大概了解了NSQ的集群架构和交互流程,这里我们将结合代码详细了解下nsqd的一些特性是如何实现的(为了避免篇幅过长,贴的代码会删除一部分)。数据结构先看下数据结构的设计,NSQDnsq的数据结构定义如下,type NSQD struct { // 64bit atomic vars need to be first for proper alignment on 32...

2019-10-04 16:46:03 1626

原创 NSQ系列(一):概述和架构

关于NSQNSQ是Go开发的,比较轻量的一款MQ。公司很多项目使用了NSQ作为消息队列,也借此了解下NSQ。先说下NSQ的几个特性,分布式部署,没有单点问题支持水平扩容消息优先存储在内存(超过限制后可以保持在磁盘)Consumer可以动态发现Producer架构集群两个主要角色:nsqd和nsqlookupd。nsqdnsqd负责提供集群的主要功能,一个nsqd实例同时处理...

2019-10-03 21:42:16 837

原创 Go可变参数遇到的坑

可变参数Go语言支持可变参数,给函数传参带来了很大的便利,简化了slice类型参数传入。代码示例,func main(){ printFunc("name", "age") printFunc([]string{"name", "age"}...)}func printFunc(args ...string){ fmt.Printf("args=%v, type=%T\n", ar...

2019-10-03 19:28:41 481

原创 Effective Go

Switchtype switch通过type switch可以来动态发现interface的类型。下面的type switch使用类型断言,关于switch以及类型判断,可以借鉴下下面的代码。var t interface{}t = functionOfSomeType()switch t := t.(type) {default: fmt.Printf("unexp...

2018-11-12 01:05:05 382

原创 Golang占位符大全

golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。# 定义示例类型和变量type Human struct { Name string}var people = Human{Name:"zhangsan"}普通占位符占位符 说明 举例 ...

2018-11-12 00:09:57 1411

原创 go Map实战

map是最常见的数据结构之一。不同哈希表的实现也提供了不同特性,但是总体来说它们都提供快速查询、添加和删除等功能。Go 提供了一个内置的map,基于哈希表来实现。声明和初始化go里面的map定义如下,map[KeyType]ValueTypeKeyType可以是任何可以进行比较的数据类型,ValueType则可以是任何数据类型,包括map。下面定义了一个KeyType为strin...

2018-11-07 01:06:46 155

原创 通过rand把数组顺序随机打乱

这周需求涉及到要把一个数组的内部顺序打乱,参考了下网上的资料,其实很简单,就是把数组元素随机交换下就OK了,下面附上go实现的代码,func Random(arr []string) { if len(arr) <= 0 { return } rand.Seed(time.Now().Unix()) for i := len(arr) - 1; i >= 0; i--...

2018-11-04 00:09:09 1789

原创 golang中Defer、Panic、Recover的用法

因为golang没有try……catch的用法,但是可以通过defer + recover来实现,但是要先明确defer与return之间的执行顺序。defer先看defer的定义(参考tour go)。defer关键字可以推迟它所修饰的语句的执行,知道被它包围的代码执行完成后,才执行,一般用于执行一些清理工作(资源释放、关闭连接等等)来简化代码。可以看下面一段代码,代码打开两个文件并...

2018-10-24 01:21:31 567 1

原创 Python通过MySQLdb特殊字符转义

    最近维护代码发现存在部分数据存储失败的情况,项目是通过拼装sql语句,利用MySQLdb execute来进行数据的插入。增加日志后发现存在插入失败的情况多为value中存在单引号时,到时候整个sql语法存在问题,需要对单引号进行一下转义。    MySQLdb提供了转义工具,MySQLdb.escape_string()来对字符串进行处理,然后就可以避免问题...

2018-10-06 17:19:13 1499

原创 Go的method和interface

        在学习Go语言的过程中,基本的语法以及slice和map等等虽然略有不同,但是稍微适应下,还是比较好上手,这里针对几个特别的地方总结下。第一篇就是Go的方法和接口。方法        Go语言不存在类的概念,所以方法与函数的区别就是方法存在接收者。接受者在 func 关键字和 方法名之间,下面就是两个例子。type Vertex struct { X, Y floa...

2018-08-14 00:22:03 168

原创 sql连接时的on和where注意事项

    我们经常会通过连接来对组合多个表的信息进行查询,常用的left join,right join, inner join,full join等等。刚刚在使用连接查询数据时,踩了个坑,这里进行总结下。    先说下踩的坑这个case吧,表A左连接表B,表A存储所有的关键词的pv信息,字段:keyword_id(关键词id), keyword_value(关键词字面量), keyword_pv(...

2018-04-15 17:46:06 489

原创 LeetCode-Power of Two-Java

题目:Given an integer, write a function to determine if it is a power of two.判断整数n是否是2的次幂,比较简洁的解法就是,利用位运算,如果是2的次幂,那么转为2进制后,只会有一个1,代码:public boolean isPowerOfTwo(int n) { if(n <= 0)

2018-01-09 00:57:59 159

原创 LeetCode-Add Two Numbers-Java

LeetCode题目:add two numbers。题目介绍:You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single d

2018-01-08 23:03:43 157

原创 Leetcode-Rank Scores

LeeCode上的database题目,Rank Scores。# Write your MySQL query statement belowset @rankNum=0;select Scores.Score, rank_t.Rank from Scores left join ( select score_t.Score, (@rankNum:=@rankNum+1) A

2018-01-08 20:43:36 203

原创 MySQL timestamp只能有一列被设为CURRENT_TIMESTAMP

创建数据库表时,遇到问题:错误代码: 1293Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause    在MySQL 5.6.5版本之前,是只能有一列能够在初始化的时候或者被更新的时候自动设置为CURRE

2018-01-08 20:01:44 2517

原创 LeetCode-Roman to Integer-scala

刚刚接触scala语言,所以写的不符合函数式编程风格,拿简单的题目来熟悉下语言。这道题目很简单,只要知道罗马数字是怎么计数的就好。def romanToInt(s: String): Int = { val numList = new Array[Int](s.length); var i = 0 while(i < s.length){ numList(i

2017-12-18 00:41:33 196

原创 Cookie的跨域共享

cookie的跨域共享

2017-10-23 23:54:53 421

原创 shell中根据日期进行循环

在写shell脚本时,我们经常会有需求,对某一个日期时间范围内进行循环处理,可以通过设置起止日期,在起止日期范围内进行循环,```dateStart="2016-11-16"dateEnd="2017-03-07"date_s=`date -d "${dateStart}" +%s`date_e=`date -d "${dateEnd}" +%s`w

2017-08-13 21:17:53 3477

原创 Surrounded Regions

Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'.A region is captured by flipping all 'O's into 'X's in that surrounded region.For example,X X X XX O O X

2016-05-10 21:05:06 225

原创 Count of Smaller Numbers After Self

首先吐槽下CSDN,写完,发表,直接没了,辛苦写的东西就这么不见了……You are given an integer array nums and you have to return a new counts array. Thecounts array has the property where counts[i] is the number of smaller elem

2016-05-03 20:34:12 209

原创 Count of Smaller Numbers After Self

You are given an integer array nums and you have to return a new counts array. The counts array has the property where counts[i] is the number of smaller elements to the right of nums[i].Exa

2016-05-03 20:02:47 220

原创 平衡二叉树Java语言实现

作为二叉查找树的升级版,平衡二叉树(AVL-Tree)可以有效保障树的深度,防止因为插入操作的顺序和删除操作等导致二叉查找树左右过于不均衡,下面的代码也是书上的源码代码,稍微改动和增加了些。内部节点AvlNode: /** * Node of AVLTree * @author LQC * * @param element extends Comparable */

2016-05-01 16:07:20 278

原创 关于<T extends Comparable<? super T>>的理解

最近在Collections代码的时候,看到sort方法的参数限定。下面是JDK中的源码, public static > void sort(List list) { list.sort(null); }能调用sort方法进行排序,list中的元素必须是实现了Comparable接口的类或者其子类,通过>来进行限定。自己一开始没有理解这个限定的意思,查阅了一

2016-04-30 17:46:02 1113 1

原创 Same Tree

题目:Given two binary trees, write a function to check if they are equal or not.Two binary trees are considered equal if they are structurally identical and the nodes have the same value.比较两

2016-03-01 22:11:43 207

空空如也

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

TA关注的人

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