• HomePage
  • Tags
  • About
  • Posts

Posts

知识笔记 分享 折腾

awk sed处理文件操作

awk、sed对处理文件和写shell脚本时非常有益,日常工作中也会经常用到,很有必要掌握。 awk awk '条件{命令}' filename 假设一个待处理的文件test 或

Docker

Docker 发展背景 伴随着容器化技术的发展以及微服务的流行,Docker横空出世,其本身除了对容器技术(LXC)做了应用封装外,更为重要的是,它引入了容器镜像等一整套管理

Elasticsearch入门

前段时间负责的一个群组相关的项目上线了,功能包含群组名称模糊检索和基于地理位置做同城、附近群检索的需求。这正是Elasticsearch大显身手的机会,接到项目

Elasticsearch分布式存储的写流程

ES作为一个分布式存储组件,它的写流程是什么样子的?为什么说它是近实时搜索?什么会影响它的写性能?我们有必要了解。 ES文档的写流程 写的动作包含新建文档、更新文档

Elasticsearch分布式检索的两阶段流程

在说明ES分布式检索流程前,我们先看下内部组件的概念架构: Elasticsearch概念架构 ES分布式检索的两阶段 如果是对单个文档进行CURD操作,通常从路由计

ELK 搭建

ELK 介绍 ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash、Kibana。 Elasticsearch 是一个搜索和分析引擎。 Logstash 是服务器端数据处理管

Git 操作手册

clone git clone 代码库地址 分支查看 切换 # 1. 查看远程分支 $ git branch -r # 2. 查看本地分支 $ git branch # 3. 查看远程和本地分支。带*的表示正在所处分支 $ git branch -a # 4. 建立一个分支(是在当前分支H

Go bytes.Buffer 介绍

bytes.Buffer 一个我们经常使用的变长的byte buffer,它提供了对byte的读写操作。 类型组成 type Buffer struct { buf []byte // contents are the bytes buf[off : len(buf)] off int // read at &buf[off], write at &buf[len(buf)] lastRead readOp // last read operation, so that Unread* can work correctly. } buf

Go channel底层实现

channel是Go定义的一个数据类型,用于goroutine之间的通信且是并发安全,正是Go所提倡的利用通信来共享内存。 Go在语言层面支持这种数据通信,提供非

Go defer 调试复杂函数

随着函数变得复杂,需要处理的错误也变多,维护清理逻辑变得越来越困难。而Go语言独有的 defer 机制可以让事情变得简单。 defer的用法 当defer语句被执行时,跟在de

Go GPM 模型

线程与goroutine goroutine属于用户态线程;传统线程是属于内核态线程,由操作系统调度。 下面主要从内存占用,上下文切换两个角度描述: 线程 线程是操作系

Go sync.Map 源码实现

以下源码是Go 1.11版本,源码v1.11 github 简单实现 Map本身不是并发安全,如果设计一个简单的并发安全map,我们可以定一个结构体,map+读写锁 type syncMap struct{ lock sync.RWMutex m map[interface{}]interface{}

Go unsafe 包

只要阅读Go的源码,就不会错过代码里众多的unsafe.Pointer等,这个不安全的指针是个啥? unsafe.Pointer unsafe.Pointer 可以指向任意类型的指针,这有点类似于C里的void*。它能

Go Web 服务器 http.Handler 接口

Go做web服务器,只需要寥寥几行代码即可实现。前边已经写过web服务器几个基本步骤,可以参考webserver工作原理。 socket()->bind()->listen()->accept() 在http包种,go提供了一个函数 //

Go 利用 buffer channel 做一个资源池

Go可以利用buffer channel做一个资源池,channel中元素是资源类型,比如实现io.Closer的资源。 资源池要有哪几个功能? 创建一个池 从池中取一

Go 实现单机请求限流

我们服务器对外提供接口时,通常有一些自身限制比如存储或者中间件等性能,或者是担心调用方无脑并发,我们一般要做限流措施。 通常我们限制qps,比如约定调用方,10s

Go 实现群聊天室- goroutine 和 channel 应用

经典的多线程程序群聊聊天室,利用goroutine和channel来实现。 实现这段程序,对理解go的goroutine和channel也非常有帮助。 服务端代码:

Go 并发设计思路--非阻塞缓存

Go开发中经常遇到并发设计的场景,伴随着一个绕不过的问题就是并发安全。 并发安全设计几种方式 提前加载好 利用锁 把对共享变量的读写收敛到一个goroutine里,利用

Go 理解并发的一个经典例子

通过这个案例,我们一步步理解并发的一些知识点: channel作为多个goroutine的通信媒介 select的用法 组等待,waitgroup的用法 限制并发度 广播

Go 限制并发、限速

Go的并发使用起来非常容易,随意就起个goroutine。但是日常开发中,考虑到机器CPU、内存、文件描述符、网络以及下游中间件性能等等的影响,通常不会无脑使用
  • ««
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
  • »»
© 苏打Blog 2017 - 2025 京ICP备18005017号-1