Giter Club home page Giter Club logo

chenyahui.github.io's Introduction

Hi there 👋

chenyahui.github.io's People

Contributors

chenyahui avatar

Watchers

 avatar  avatar  avatar

Forkers

xuanskyer zpy807

chenyahui.github.io's Issues

自动生成数据库文档小工具的诞生 | 编程沉思录

https://www.cyhone.com/articles/db-doc-generator/

最近我用 Golang 开发了一个可以将数据库每张表的各个列信息转化成文档的小工具。开发的缘由是因为写后端时,经常需要为数据库写说明文档,对于稍微有些规模的项目来说,就动辄几十张上百张数据表,开发人员在文档中不断的写各个列的列名、类型、描述实在是无聊、枯燥和苦不堪言。所以就有了这个小工具的诞生。 项目地址在 这里

WebSocket订单推送稳定性优化方案

http://cyhone.com/2019/08/17/optimization-of-websocket-push-system/

微信云支付Android 智能POS使用WebSocket实现了用户订单的实时推送。即,顾客在扫描了门店的付款码,客户端会随即进行语音播报和打印等动作。 客户端利用WebSocket与后端维持长连接,当后端收到该门店订单时,即将成功态的订单通过对应的连接中。 然而,商户网络环境的多样性会导致WebSocket链路出现各种异常,从而引发漏单问题。 我们根据实际的场景,对此订单推送系统在稳定性上进行了

WebSocket订单推送稳定性优化方案

http://cyhone.com/articles/optimization-of-websocket-push-system/

微信云支付Android 智能POS使用WebSocket实现了用户订单的实时推送。即,顾客在扫描了门店的付款码,客户端会随即进行语音播报和打印等动作。 客户端利用WebSocket与后端维持长连接,当后端收到该门店订单时,即将成功态的订单通过对应的连接中。 然而,商户网络环境的多样性会导致WebSocket链路出现各种异常,从而引发漏单问题。 我们根据实际的场景,对此订单推送系统在稳定性上进行了

WebSocket 订单推送稳定性优化方案 | 编程沉思录

https://www.cyhone.com/articles/optimization-of-websocket-push-system/

微信云支付 Android 智能 POS 使用 WebSocket 实现了用户订单的实时推送。即,顾客在扫描了门店的付款码,客户端会随即进行语音播报和打印等动作。 客户端利用 WebSocket 与后端维持长连接,当后端收到该门店订单时,即将成功态的订单通过对应的连接中。 然而,商户网络环境的多样性会导致 WebSocket 链路出现各种异常,从而引发漏单问题。 我们根据实际的场景,对此订单推送系

Golang 官方限流器 time/rate 使用介绍 | 编程沉思录

https://www.cyhone.com/articles/usage-of-golang-rate/#more

本主题为系列文章,分上下两篇。本文主要介绍 time/rate 的具体使用方法,另外一篇文章 《Golang 限流器 time/rate 实现剖析》 则着重介绍其内部实现原理。 限流器是后台服务中的非常重要的组件,可以用来限制请求速率,保护服务,以免服务过载。 限流器的实现方法有很多种,例如滑动窗口法、Token Bucket、Leaky Bucket 等。 其实 Golang 标准库中就自带

uber-go 漏桶限流器使用与原理分析 | 编程沉思录

https://www.cyhone.com/articles/analysis-of-uber-go-ratelimit/

uber 在 Github 上开源了一套用于服务限流的 go 语言库 ratelimit, 该组件基于 Leaky Bucket(漏桶) 实现。 我在之前写过 《Golang 限流器 time/rate 实现剖析》,讲了 Golang 标准库中提供的基于 Token Bucket 实现限流组件的 time/rate 原理,同时也讲了限流的一些背景。 相比于 TokenBucket,只要桶内还有剩余

libco 的定时器实现——时间轮 | 编程沉思录

https://www.cyhone.com/articles/time-wheel-in-libco/#more

定时器是网络框架中非常重要的组成部分,往往可以利用定时器做一些超时事件的判断或者定时清理任务等。 定时器有许多经典高效的实现。例如,libevent 采用了小根堆实现定时器,redis 则结合自己场景直接使用了简单粗暴的双向链表。 时间轮也是一个非常经典的定时器实现,Linux 2.6 内核之前就采用了多级时间轮作为其低精度定时器的实现。而在微信的协程库 libco 中,也用了单级时间轮来处理其内

ClassViewer的介绍及实现 | 沉思录

http://cyhone.com/2018/01/01/classviewer/#more

ClassViewer是我最近开发的一个用于展示jvm class字节码的小工具。它是一个单纯的静态网页,完全使用浏览器端的Javascript开发。之所以开发这款工具,是因为我在开发ToyJVM的时候,需要常常校验class文件某一部分的字节码, 所以如果一款工具能够很方便的显示class文件各个部分的信息和字节码,对于ToyJVM的开发将会是一个非常大的帮助。 在开始写代码之前调研了一些类似的

第一篇博客 | cyhone

http://cyhone.com/2015/09/16/hello-world/

为什么会想到建立一个博客:在此博客之前,我其实也用过新浪博客、CSDN、博客园,作为个人博客的载体,但对每个博客都并不是特别的满意。原因大概有下面几条: 没有美观友好的支持代码。 广告多。 管理复杂,但可控性差。 目前该博客是使用hexo+Next主题+Github进行搭建。事实上,当开始接触使用hexo时,我觉得满足了我对博客的诸多要求。我对它的为程序员而生、高度可定制性非常喜欢。而且,如有

微信 libco 协程库源码分析 | 编程沉思录

https://www.cyhone.com/articles/analysis-of-libco/

libco 是微信后台开发和使用的协程库,同时也是极少数的直接将 C/C++ 协程运用到如此大规模的生产环境中的案例。 在 《云风 coroutine 协程库源码分析》 中,介绍了有栈协程的实现原理。相比 coroutine,libco 在性能上号称可以调度千万级协程。 从使用上来说,不仅提供了一套类 pthread 的协程通信机制,同时可以零改造地将三方库的阻塞 IO 调用协程异步化。 本文将从

结合 Guava 源码解读布隆过滤器 | 编程沉思录

https://www.cyhone.com/articles/introduction-of-bloomfilter/

介绍 BloomFilter(布隆过滤器)是一种可以高效地判断元素是否在某个集合中的算法。 在很多日常场景中,都大量存在着布隆过滤器的应用。例如:检查单词是否拼写正确、网络爬虫的 URL 去重、黑名单检验,微博中昵称不能重复的检测等。 在工业界中,Google 著名的分布式数据库 BigTable 也用了布隆过滤器来查找不存在的行或列,以减少磁盘查找的 IO 次数;Google Chrome

云风 coroutine 协程库源码分析 | 编程沉思录

https://www.cyhone.com/articles/analysis-of-cloudwu-coroutine/

随着 Golang 的兴起,协程尤其是有栈协程 (stackful coroutine) 越来越受到程序员的关注。协程几乎成了程序员的一套必备技能。 云风实现了一套 C 语言的协程库,整体背景可以参考其 博客。 这个协程库非常轻量级,一共也才 200 多行代码,使用上更贴近于 lua 的写法(众所周知,云风是知名的 lua 粉)。整体基于 ucontext 和共享栈模型实现了有栈协程,代码质量毋庸

解读BloomFilter算法 | 沉思录

http://cyhone.com/2017/02/07/Introduce-to-BloomFilter/

介绍BloomFilter(布隆过滤器)是一种可以高效地判断元素是否在某个集合中的算法。 在很多日常场景中,都大量存在着布隆过滤器的应用。例如:检查单词是否拼写正确、网络爬虫的URL去重、黑名单检验,微博中昵称不能重复的检测。在工业界中,Google著名的分布式数据库BigTable也用了布隆过滤器来查找不存在的行或列,以减少磁盘查找的IO次数;Google Chrome浏览器使用BloomFil

关于本站 | 编程沉思录

https://www.cyhone.com/about/

本博客主要是记录自己思考和总结的一些东西,包括不限于源码分析、读书总结以及技术方案等方面。 所有文章都会坚持原创,尽可能保持高质量,也会尽量做到文章清晰,避免自说自话。此外文章转载需要经过本人授权。 文章不免出错,为了保证正确性,同时也让文章表达的更加清楚,会经常对文章进行修改和调整。 只会在周末或者休息时间写文章,同时要最大限度保证文章质量。所以,发博客的时间和频率非常随机不固定,尽量会保持在一

C++ 智能指针的正确使用方式 | 编程沉思录

https://www.cyhone.com/articles/right-way-to-use-cpp-smart-pointer/

C++11 中推出了三种智能指针,unique_ptr、shared_ptr 和 weak_ptr,同时也将 auto_ptr 置为废弃 (deprecated)。 但是在实际的使用过程中,很多人都会有这样的问题: 不知道三种智能指针的具体使用场景 无脑只使用 shared_ptr 认为应该禁用 raw pointer(裸指针,即 Widget * 这种形式),全部使用智能指针 本文将从这几方

Redis 事件循环器 (AE) 实现剖析 | 编程沉思录

https://www.cyhone.com/articles/analysis-of-redis-ae/

Redis 作为一个单线程高性能的内存缓存 Server 而被人熟知。作为一个典型的 Reactor 式网络应用,Redis 能够达到如此高的性能,必然要依靠足够可靠的事件循环库。 Redis 内置了一个高性能事件循环器,叫做 AE。其定义和实现可以在 ae*.h/cpp 这些文件中找到。 AE 本身就是 Redis 的一部分,所以整体设计原则就是够用就行。也正因为这个背景,AE 的代码才可以简短

muduo 源码剖析 | 编程沉思录

https://www.cyhone.com/articles/analysis-of-muduo/

muduo是 陈硕 大神个人开发的 C++ 的 TCP 网络编程库。muduo 基于 Reactor 模式实现。Reactor 模式也是目前大多数 Linux 端高性能网络编程框架和网络应用所选择的主要架构,例如内存数据库 Redis 和 Java 的 Netty 库等。 陈硕的《Linux 多线程服务器端编程》一书对 muduo 整个架构进行了非常详尽的介绍和分析,可以说是学习 muduo 源码

WebSocket订单推送稳定性优化方案 | cyhone

http://cyhone.com/2019/08/17/optimization-of-websocket-push-system/

微信云支付Android 智能POS使用WebSocket实现了用户订单的实时推送。即,顾客在扫描了门店的付款码,客户端会随即进行语音播报和打印等动作。 客户端利用WebSocket与后端维持长连接,当后端收到该门店订单时,即将成功态的订单通过对应的连接中。 然而,商户网络环境的多样性会导致WebSocket链路出现各种异常,从而引发漏单问题。 我们根据实际的场景,对此订单推送系统在稳定性上进行了

Golang 限流器 time/rate 实现剖析 | 编程沉思录

https://www.cyhone.com/articles/analisys-of-golang-rate/

限流器是微服务中必不缺少的一环,可以起到保护下游服务,防止服务过载等作用。上一篇文章 《Golang 限流器 time/rate 使用介绍》 简单介绍了 time/rate 的使用方法,本文则着重分析下其实现原理。建议在正式阅读本文之前,先阅读下上一篇文章。 上一篇文章讲到,time/rate 是基于 Token Bucket(令牌桶) 算法实现的限流。本文将会基于源码,深入剖析下 Golang

第一篇博客

http://cyhone.com/2015/09/16/hello%20world/?123

为什么会想到建立一个博客:在此博客之前,我其实也用过新浪博客、CSDN、博客园,作为个人博客的载体,但对每个博客都并不是特别的满意。原因大概有下面几条: 没有美观友好的支持代码。 广告多。 管理复杂,但可控性差。 目前该博客是使用hexo+Next主题+Github进行搭建。事实上,当开始接触使用hexo时,我觉得满足了我对博客的诸多要求。我对它的为程序员而生、高度可定制性非常喜欢。而且,如有

WebSocket订单推送稳定性优化方案 | cyhone

http://cyhone.com/2019/08/17/optimization-of-websocket-push-system/#more

微信云支付Android 智能POS使用WebSocket实现了用户订单的实时推送。即,顾客在扫描了门店的付款码,客户端会随即进行语音播报和打印等动作。 客户端利用WebSocket与后端维持长连接,当后端收到该门店订单时,即将成功态的订单通过对应的连接中。 然而,商户网络环境的多样性会导致WebSocket链路出现各种异常,从而引发漏单问题。 我们根据实际的场景,对此订单推送系统在稳定性上进行了

Elastic-Filebeat 实现原理剖析 | 编程沉思录

https://www.cyhone.com/articles/analysis-of-filebeat/

Filebeat 是使用 Golang 实现的轻量型日志采集器,也是 Elasticsearch stack 里面的一员。本质上是一个 agent,可以安装在各个节点上,根据配置读取对应位置的日志,并上报到相应的地方去。 Filebeat 的可靠性很强,可以保证日志 At least once 的上报,同时也考虑了日志搜集中的各类问题,例如日志断点续读、文件名更改、日志 Truncated 等。

客户端秒级时间同步方案 | cyhone

http://cyhone.com/2018/10/25/client-time-calibration/#more

在客户端开发中,往往会有一些功能对时间要求比较严格,客户端需要获取到当前最准确的时间。但由于客户端环境多种多样,我们无法保证直接在客户端设备上获取到的时间是最准确的时间。对于某些问题设备来说,设备时间与比当前实际的时间差了几个小时,甚至几天的情况都存在。倘若某功能依赖于当前时间,而客户端所提供的时间不准,就往往会给客户造成一些困扰。 那么,客户端如果能够获取到当前最准确的时间呢?

客户端秒级时间同步方案 | cyhone

http://cyhone.com/2018/10/25/client-time-calibration/#more

在客户端开发中,往往会有一些功能对时间要求比较严格,客户端需要获取到当前最准确的时间。但由于客户端环境多种多样,我们无法保证直接在客户端设备上获取到的时间是最准确的时间。对于某些问题设备来说,设备时间与比当前实际的时间差了几个小时,甚至几天的情况都存在。倘若某功能依赖于当前时间,而客户端所提供的时间不准,就往往会给客户造成一些困扰。 那么,客户端如何能够获取到当前最准确的时间呢?

Elasticsearch 学习:入门篇 | 编程沉思录

https://www.cyhone.com/articles/introduction-of-elasticsearch/#valine-comments

Elasticsearch 是一个分布式搜索引擎,底层基于 Lucene 实现。Elasticsearch 屏蔽了 Lucene 的底层细节,提供了分布式特性,同时对外提供了 Restful API。Elasticsearch 以其易用性迅速赢得了许多用户,被用在网站搜索、日志分析等诸多方面。由于 ES 强大的横向扩展能力,甚至很多人也会直接把 ES 当做 NoSQL 来用。 本文主要记录了 ES

第一篇博客 | 编程沉思录

https://www.cyhone.com/articles/hello-world/

为什么会想到建立一个博客: 在此博客之前,我其实也用过新浪博客、CSDN、博客园,作为个人博客的载体,但对每个博客都并不是特别的满意。原因大概有下面几条: 没有美观友好的支持代码。 广告多。 管理复杂,但可控性差。 目前该博客是使用 hexo+Next 主题 + Github 进行搭建。 事实上,当开始接触使用 hexo 时,我觉得满足了我对博客的诸多要求。我对它的为程序员而生、高度可定制性

ClassViewer 的介绍及实现 | 编程沉思录

https://www.cyhone.com/articles/classviewer/

ClassViewer是我最近开发的一个用于展示 jvm class 字节码的小工具。它是一个单纯的静态网页,完全使用浏览器端的 Javascript 开发。之所以开发这款工具,是因为我在开发 ToyJVM 的时候,需要常常校验 class 文件某一部分的字节码, 所以如果一款工具能够很方便的显示 class 文件各个部分的信息和字节码,对于 ToyJVM 的开发将会是一个非常大的帮助。 在开始写

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.