自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

climbs的专栏

勤于记录 三省吾身

  • 博客(428)
  • 收藏
  • 关注

原创 HBase应用场景和最佳实践

HBase 作为 Apache 基金会的 Hadoop 项目的一部分,将 HDFS 作为文件存储系统,使用 MapReduce 进行分布式的数据批量处理(非实时数据批量处理)、利用Zookeeper提供协同管理服务,为 Hadoop 提供海量数据管理服务,因此,HBase也是在一个服务器集群上运行的。

2023-05-21 22:32:44 2879

转载 图解浏览器的基本工作原理

当有 Service Worker 被注册时,其作用域会被保存,当有导航时,network thread 会在注册过的 Service Worker 的作用域中检查相关域名,如果存在对应的 Service worker,UI thread 会找到一个 renderer process 来处理相关代码,Service Worker 可能会从 cache 中加载数据,从而终止对网络的请求,也可能从网上请求新的数据。很多应用都会采用这样的设计,如果一个工作进程反应迟钝,重启这个进程不会影响应用其它进程的工作。

2023-05-14 20:37:26 260

原创 长链接概念

长链接

2022-07-31 23:47:54 514

原创 架构设计摘录

集群模式(Cassandra,HBase等等)的一个好处就是没有SPOF(SinglePointofFailure),这可以保证服务的高可用,而且,数据在节点上的分布、迁移都是自动完成的,对用户透明。但是,集群中的各个节点之间互相通信,需要复杂的协议来维持数据在各节点的一致性,这种复杂度带来的是各种失败模式(FailureModes),特别是当这种技术还不成熟、没有经过广泛验证的时候,故障是难以预料的。这样做的好处是,在渲染一个用户页面的时候,所有数据可以在同一个库中查询到,大大减少了查询延迟。...

2022-07-18 00:07:58 220

原创 mac charles代理设置

charles debug

2022-06-26 23:22:09 604

原创 Redis应用场景举例

面对越来越多的高并发场景,限流显示的尤为重要。限流 当然,限流有许多种实现的方式,Redis具有很强大的功能,我用Redis实践了三种的实现方式,可以较为简单的实现其方式。Redis不仅仅是可以做限流,还可以做数据统计,附近的人等功能,这些可能会后续写到。第一种:基于Redis的setnx的操作 我们在使用Redis的分布式锁的时候,大家都知道是依靠了setnx的指令,在CAS(Compare and swap)的操作的时候,同时给指定的key设置了过期实践(expire...

2021-10-08 00:04:00 728

原创 redis新特性研究

Redis SetSetkeyto hold the stringvalue. Ifkeyalready holds a value, it is overwritten, regardless of its type. Any previous time to live associated with the key is discarded on successfulSEToperation.OptionsTheSETcommand supports a set of op...

2021-08-29 18:18:17 315

原创 数据压缩技术

行程编码(run-length encoding)行程编码应该算是简单的一种压缩技术了。这种的算法非常明了,比如我有一个字符串“AAAABBBBCCCCDDDD”,如果以最简单的ASCII编码形式保存的话,就需要16个字节,那么如果使用了行程编码呢,编码后将会像是这样,“#A4#B4#C4#D4”,就是12个字节,如果重复char越多效果就越明显了。注意这里我们使用的是ASCII编码的演示,所以“#A4”是三个字节,“#A255”同样是三个字节。压缩后的“#A4#B4#C4#D4”是什么意思呢,在这里“

2021-08-28 23:54:02 476

原创 精简包走天下

上个月(7/25),Facebook 宣布其社交平台取得新的里程碑成就:月活跃用户数量达到 20 亿,从 10 亿到 20 亿,仅过去了 5 年的时间。能与 20 亿人一同踏上这一旅程我们感到非常荣幸。(我们应该也是这 20 亿人中的一份子)业界科技媒体给出了这样的评论,解释平台用户数量快速增长的原因:近几年,Facebook 针对低带宽或者网络环境并不理想的地区,专门开发了精简版的应用,已经从亚洲和其他地区收获了 7.46 亿的新用户数量。在这新增长的 10 亿用户中,印度是 Facebo

2021-08-25 00:57:36 255

原创 了解用户认证服务

LDAPOAUTH2.0OAuth 2.0 的标准是RFC 6749文件。该文件先解释了 OAuth 是什么。OAuth 2.0 规定了四种获得令牌的流程。你可以选择最适合自己的那一种,向第三方应用颁发令牌。下面就是这四种授权方式。授权码(authorization-code) 隐藏式(implicit) 密码式(password): 客户端凭证(client credentials)第一种授权方式:授权码授权码(authorization code..

2021-08-24 00:38:55 230

原创 了解DNS和CDN原理

dns原理先了解一下dig命令dig 命令默认的输出信息比较丰富,大概可以分为 5 个部分。第一部分显示 dig 命令的版本和输入的参数。第二部分显示服务返回的一些技术详情,比较重要的是 status。如果 status 的值为 NOERROR 则说明本次查询成功结束。第三部分中的 “QUESTION SECTION” 显示我们要查询的域名。第四部分的 “ANSWER SECTION” 是查询到的结果。第五部分则是本次查询的一些统计信息,比如用了多长时间,查询了哪个 DNS 服务器,.

2021-08-23 00:37:27 1142

原创 搞定跨域:jsonp和cors

1.跨域问题的由来何谓同源:URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则表示它们同源。浏览器的同源策略,从一个域上加载的脚本不允许访问另外一个域的文档属性,是浏览器上为安全性考虑实施的非常重要的安全策略。举个例子:比如一个恶意网站的页面通过iframe嵌入了银行的登录页面,如果没有同源限制,恶意网页上的javascript脚本就可以在用户登录银行的时候获取用户名和密码。2.跨域的影响范围在浏览器中,<script>、<img>、&lt.

2021-08-22 20:47:09 335

原创 好文收藏-深度学习

string和[]byte的对比何为string?什么是字符串?标准库builtin的解释:type stringstring is the set of all strings of 8-bit bytes, conventionally but not necessarily representing UTF-8-encoded text. A string may be empty, but not nil. Values of string type are immutable..

2021-08-15 15:36:41 75

原创 go性能优化

常规手段1.sync.Pool临时对象池应该是对可读性影响最小且优化效果显著的手段。最典型的就是fasthttp了,它几乎把所有的对象都用sync.Pool维护。但这样的复用不一定全是合理的。比如在fasthttp中,传递上下文相关信息的RequestCtx就是用sync.Pool维护的,这就导致了你不能把它传递给其他的goroutine。如果要在fasthttp中实现类似接受请求->异步处理的逻辑,必须得拷贝一份RequestCtx再传递。这对不熟悉fasthttp原理的使用者来讲,很容

2021-08-15 14:44:38 867

原创 golang lockfree

Lock-free 算法的基础是 CAS (Compareand-Swap) 原子操作。当某个地址的原始值等于某个比较值时,把值改成新值,无论有否修改,返回这个地址的原始值。目前的cpu 支持最多64位的CAS。并且指针 p 必须对齐。注:原子操作指一个cpu时钟周期内就可以完成的操作,不会被其他线程干扰。一般的 CAS 使用方式是:假设有指针 p, 它指向一个 32 位或者64位数,复制p 的内容(*p)到比较量 cmp (原子操作)基于这个比较量计算一个新值 xchg (非原子操作.

2021-08-15 13:08:24 432

原创 golang规则引擎

ASTAST(抽象语法树),是一个非常基础而重要的知识点.书籍参考:https://github.com/chai2010/go-ast-bookGo语言有很多工具, goimports用于package的自动导入或者删除, golint用于检查源码中不符合Go coding style的地方, 比如全名,注释等. 还有其它工具如gorename, guru等工具. 作为工具它们都是使用go语言(查看)开发的, 这些工具都有一个共同点就是: 读取源代码, 分析源代码, 修改或生成新...

2021-08-15 00:28:02 1587

转载 高并发和海量数据下的 9 个 Redis 经典案例剖析

业务背景这次分享主要是围绕 Redis,分享在平时的日常业务开发中遇到的 9 个经典案例,希望通过此次分享可以帮助大家更好的将 Redis 的高级特性应用到日常的业务开发中来。首先介绍一下业务背景:总用户量大概是 5亿左右,月活 5kw,日活近 2kw 。服务端有 1000 多个 Redis 实例,100+ 集群,每个实例的内存控制在 20g 以下。KV 缓存第一个是最基础也是最常用的就是KV功能,我们可以用 Redis 来缓存用户信息、会话信息、商品信息等等。下面这段代码就是通用的缓.

2020-10-17 20:12:00 173

转载 基于Flink和规则引擎的实时风控解决方案

对一个互联网产品来说,典型的风控场景包括:注册风控、登陆风控、交易风控、活动风控等,而风控的最佳效果是防患于未然,所以事前事中和事后三种实现方案中,又以事前预警和事中控制最好。这要求风控系统一定要有实时性。本文就介绍一种实时风控解决方案。1.总体架构风控是业务场景的产物,风控系统直接服务于业务系统,与之相关的还有惩罚系统和分析系统,各系统关系与角色如下:业务系统,通常是APP+后台 或者 web,是互联网业务的载体,风险从业务系统触发; 风控系统,为业务系统提供支持,根据业务系统传

2020-10-16 17:21:45 1006

原创 go调度

多进程、多线程已经提高了系统的并发能力,但是在当今互联网高并发场景下,为每个任务都创建一个线程是不现实的,因为会消耗大量的内存(每个线程的内存占用级别为MB),线程多了之后调度也会消耗大量的CPU。伟大的程序员们有开始想了,如何才能充分利用CPU、内存等资源的情况下,实现更高的并发?既然线程的资源占用、调度在高并发的情况下,依然是比较大的,是否有一种东西,更加轻量?你可能知道:线程分为内核态线程和用户态线程,用户态线程需要绑定内核态线程,CPU并不能感知用户态线程的存在,它只知道它在运行1个线程,这

2020-10-09 14:46:37 555

转载 Go 为什么这么“快”

从概念上讲,并发和并行是不同的, 简单来说看这个图片package mainimport "fmt"import "time"var quit chan intfunc foo(id int) { fmt.Println(id) time.Sleep(time.Second) // 停顿一秒 quit <- 0 // 发消息:我执行完啦!} func main() { count := 1000 quit = make(chan int.

2020-10-09 14:06:19 144

原创 JAVA基础编程2

join线程等待Vector<Thread> threads = new Vector<>(); for (int i = 0; i < 150 ; i++) { Thread thread = new Thread(new Runnable() { @Override public void run() { }); threads.add(th

2020-09-27 18:52:45 112

原创 Java基础教程

1.Intellij IDEA 多module project先创建empty project, add module

2020-09-26 18:35:44 123

原创 Doker使用介绍

docker ps // 查看所有正在运行容器docker restart <容器 ID>docker stop containerId // containerId 是容器的ID docker ps -a // 查看所有容器 $ docker ps -a -q // 查看所有容器ID docker stop $(docker ps -a -q) // stop停止所有容器 docker rm $(docker ps -a -q) // remove删除所有容器安装Ngin.

2020-09-25 15:39:34 227

原创 布隆过滤器

直观的说,bloom算法类似一个hash set,用来判断某个元素(key)是否在某个集合中。和一般的hash set不同的是,这个算法无需存储key的值,对于每个key,只需要k个比特位,每个存储一个标志,用来判断key是否在集合中。算法:1. 首先需要k个hash函数,每个函数可以把key散列成为1个整数2. 初始化时,需要一个长度为n比特的数组,每个比特位初始化为03. 某个key加入集合时,用k个hash函数计算出k个散列值,并把数组中对应的比特位置为14. 判断某个key是否在集合时

2020-09-25 13:37:48 214

转载 什么是乐观锁,什么是悲观锁

一、并发控制当程序中可能出现并发的情况时,就需要通过一定的手段来保证在并发情况下数据的准确性,通过这种手段保证了当前用户和其他用户一起操作时,所得到的结果和他单独操作时的结果是一样的。这种手段就叫做并发控制。并发控制的目的是保证一个用户的工作不会对另一个用户的工作产生不合理的影响。没有做好并发控制,就可能导致脏读、幻读和不可重复读等问题。常说的并发控制,一般都和数据库管理系统(DBMS)有关。在 DBMS 中的并发控制的任务,是确保在多个事务同时存取数据库中同一数据时,不破坏事务的隔离.

2020-09-25 11:20:53 508

原创 MYSQL实现任务分发机制

参考:select for update :https://www.cnblogs.com/liqiu/p/3519649.html一个简单的mysql队列:https://zhuanlan.zhihu.com/p/20293493?refer=alsotang最近公司有个项目,需要多并发完成任务,也就是一个任务控制中心控制多个WORKER的问题,这里的核心点在于如果WORKER_A正在执行1号任务,任务中心不能让WORKER_B重复执行1号任务,即WORKER_A和WORKER_B同时来任务中心..

2020-09-23 12:50:12 460

原创 golang channel详解

channel内部原理数据结构type hchan struct {qcount uint // 所有在队列中数据数量dataqsiz uint // 环形队列大小,可以存放的元素个数buf unsafe.Pointer // 只想环形队列的指针elemsize uint16closed uint32elemtype *_type // element typesendx uint // 生产下标recvx

2020-09-10 17:34:31 463

原创 分布式追踪系统概述及主流开源系统对比

OpenTrace, SkyWalking随着应用容器化和微服务的兴起,借由Docker和Kubernetes等工具,服务的快速开发和部署成为可能,构建微服务应用变得越来越简单。但是随着大型单体应用拆分为微服务,服务之间的依赖和调用变得极为复杂,这些服务可能是不同团队开发的,可能基于不同的语言,微服务之间可能是利用RPC、RESTful API,也可能是通过消息队列实现调用或通讯。如何理清服务依赖调用关系、如何在这样的环境下快速debug、追踪服务处理耗时、查找服务性能瓶颈、合理对服务的容......

2020-09-10 16:40:56 595

原创 技术管理文章

star技术管理那些事(一)管理的进阶技术管理那些事(二)“人剑合一”的团队

2020-07-13 16:07:45 112

原创 golang中sync.Map并发创建、读取问题实战记录

背景:我们有一个用go做的项目,其中用到了zmq4进行通信,一个简单的rpc过程,早期远端是使用一个map去做ip和具体socket的映射。问题大概是这样 1 2 3 4 struct SocketMap { sync.Mutex sockets map[string]*zmq4.Socket } ...

2020-03-13 00:13:38 232

原创 TCP/IP怎么做心跳

问题我面试时经常会问的一个问题是当TCP两端A、B建立了连接后,如果一端拔掉网线或者拔掉电源,那么另一端能够收到通知吗?答案是不会原因TCP的建立连接和断开连接都是通过发送数据实现的,也就是我们常说的三次握手、四次挥手。TCP两端保存了一种数据的状态,就代表这种连接,TCP两端之间的路由设备只是将数据转发到目的地,并不知道这些数据实际代表了什么含义,也并没有在其中保存任何的状态信息,也就...

2020-01-16 23:13:47 596

原创 phpredis 长连接实现原理

1.长连接的概念理解长连接其实就是建立了一次连接 然后中间redis的命令都能一直使用,每次使用都不需要重新建立一个连接,这样可以减少建redis连接时间。redis的长连接的生命周期是一个php-fpm进程的时间。再php-fpm这个进程没有关闭之前,这个长连接都是有效的。直观的查看方式就是连续调用两次$redis->connect();和 $redis->pconnect(); ...

2020-01-08 00:40:09 1715

原创 B-Tree和B+Tree的异同

B树和B+树其实都是平衡搜索树。这里要脑补一下平衡搜索树的概念:这个词划分一下就是平衡+搜索+树。也就是说,他首先是一棵树,其次能搜索,再次他是平衡的。大家耳熟能详的一个概念:二叉平衡搜索树。(详细的大家可以在百度上搜一下定义,或者拿起那本厚实的「算法导论」看看)。#异#但是B树和B+树却有不同的地方。就是这些不同的地方,决定了他们的用处可能不一样。我画了一个不太漂亮的B树的图。我...

2020-01-06 15:58:53 219

原创 go常用命令

1.go官方网站: godoc -http ':8989'2.一般并发的bug 有两种,死锁(block)和 竞争(race)死锁发生时,go run 会直接报错race 发生时,要加race 才会在运行时报warning,go run xxx.go 后面加上 -race 参数3.profile 分析pprof有两个包用来分析程序一个是net/http/pprof另一个是runt...

2020-01-03 00:35:56 214

原创 goroutine 调度原理

go routine 调度一、goroutine 简介goroutine 本质是协程,并行计算的核心。goroutine使用方式非常简单,只需要go关键字即可启动一个协程,并且它是处于异步方式执行,并不需要等他运行完成以后在执行以后的代码二、 go routine 内部原理概念介绍在进行原理之前,先了解关键术语的概念并发一个cpu上面能同时执行多项任务,在短时间内,cpu来...

2019-12-05 23:55:14 687

转载 golang 内存管理 + 垃圾回收

tmcalloc参考链接分配内存策略:全局缓存堆 + 进程私有缓存对于小容量的内存申请,优先尝试进程私有缓存,若私有缓存不足,则向全局缓存申请。对于大容量的内存申请,直接向全局缓存申请。进程私有缓存:单链表数组,默认分配86个大小不同的块,每个块上的数组使用才初始化。全局缓存堆:单链表数组,一共会分配256个不同大小的块,1 page = 4k,链表对应数组每个元素page递增。s...

2019-12-05 23:50:30 265

原创 go slice内存分配

内存结构map和slice类型都是通过make方法和new方法来初始化。使用make初始化时,会同时分配空间,使用new初始化时,不会分配空间,指向的是一个nil。传递一个map变量时,实际上是传递了上面提到的分配hmap结构体的地址,可以理解为传递了引用。通过打印结果也可以反应这个机制。new出来的slice可以赋值(append)操作.首先对于 slice 结构进行一个简单的了解结构...

2019-12-05 16:48:56 2246 1

原创 Goalng内存逃逸

无GC语言是怎么运作的一般来说,类似C/C++语言通过 malloc等方法分配的内存是在heap上的,但在Golang中却不是这样的,即便使用 new,也不一定分配在heap上,这也是我们今天要关注的问题。那么为什么Go会这样呢?其实也很简单,因为Go是有runtime的,实际分配在heap还是stack是由runtime决定的。看到这里可能会很奇怪,为什么有runtime,有GC我们...

2019-12-05 15:42:05 249

原创 快速了解Druid

Druid 是什么  Druid 单词来源于西方古罗马的神话人物,中文常常翻译成德鲁伊。  本问介绍的Druid 是一个分布式的支持实时分析的数据存储系统(Data Store)。美国广告技术公司MetaMarkets 于2011 年创建了Druid 项目,并且于2012 年晚期开源了Druid 项目。Druid 设计之初的想法就是为分析而生,它在处理数据的规模、数据处理的实时性方面,比传统...

2019-12-04 17:37:00 249

转载 如何让快递更"快"?菜鸟自研定时任务调度引擎首次公开

参考:http://elasticjob.io/docs/elastic-job-lite/00-overview/在中国物流快速发展的今天,日均包裹量已经突破1亿,如何确保1亿包裹在合理的时间之内送达收件人,并且能够在收件人反馈之前,及时处理那些没有在合理时间内运输的包裹,从而提高物流整个链路的时效体验,已经成为亟待解决的关键问题。要想解决问题,首先要发现问题!有效、及时地...

2019-11-25 20:43:58 152

空空如也

空空如也

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

TA关注的人

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