Blogs
awk sed处理文件操作
awk、sed对处理文件和写shell脚本时非常有益,日常工作中也会经常用到,很有必要掌握。 awk awk '条件{命令}' filename 假设一个待处理的文件test 或
read more
Elasticsearch入门
前段时间负责的一个群组相关的项目上线了,功能包含群组名称模糊检索和基于地理位置做同城、附近群检索的需求。这正是Elasticsearch大显身手的机会,接到项目
read more
Elasticsearch分布式存储的写流程
ES作为一个分布式存储组件,它的写流程是什么样子的?为什么说它是近实时搜索?什么会影响它的写性能?我们有必要了解。 ES文档的写流程 写的动作包含新建文档、更新文档
read more
Elasticsearch分布式检索的两阶段流程
在说明ES分布式检索流程前,我们先看下内部组件的概念架构: Elasticsearch概念架构 ES分布式检索的两阶段 如果是对单个文档进行CURD操作,通常从路由计
read more
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
read more
Go channel底层实现
channel是Go定义的一个数据类型,用于goroutine之间的通信且是并发安全,正是Go所提倡的利用通信来共享内存。 Go在语言层面支持这种数据通信,提供非
read more
Go defer 调试复杂函数
随着函数变得复杂,需要处理的错误也变多,维护清理逻辑变得越来越困难。而Go语言独有的 defer 机制可以让事情变得简单。 defer的用法 当defer语句被执行时,跟在de
read more
Go sync.Map 源码实现
以下源码是Go 1.11版本,源码v1.11 github 简单实现 Map本身不是并发安全,如果设计一个简单的并发安全map,我们可以定一个结构体,map+读写锁 type syncMap struct{ lock sync.RWMutex m map[interface{}]interface{}
read more
Go unsafe 包
只要阅读Go的源码,就不会错过代码里众多的unsafe.Pointer等,这个不安全的指针是个啥? unsafe.Pointer unsafe.Pointer 可以指向任意类型的指针,这有点类似于C里的void*。它能
read more
Go Web 服务器 http.Handler 接口
Go做web服务器,只需要寥寥几行代码即可实现。前边已经写过web服务器几个基本步骤,可以参考webserver工作原理。 socket()->bind()->listen()->accept() 在http包种,go提供了一个函数 //
read more
Go 利用 buffer channel 做一个资源池
Go可以利用buffer channel做一个资源池,channel中元素是资源类型,比如实现io.Closer的资源。 资源池要有哪几个功能? 创建一个池 从池中取一
read more
Go 实现单机请求限流
我们服务器对外提供接口时,通常有一些自身限制比如存储或者中间件等性能,或者是担心调用方无脑并发,我们一般要做限流措施。 通常我们限制qps,比如约定调用方,10s
read more
Go 实现群聊天室- goroutine 和 channel 应用
经典的多线程程序群聊聊天室,利用goroutine和channel来实现。 实现这段程序,对理解go的goroutine和channel也非常有帮助。 服务端代码:
read more
Go 并发设计思路--非阻塞缓存
Go开发中经常遇到并发设计的场景,伴随着一个绕不过的问题就是并发安全。 并发安全设计几种方式 提前加载好 利用锁 把对共享变量的读写收敛到一个goroutine里,利用
read more
Go 理解并发的一个经典例子
通过这个案例,我们一步步理解并发的一些知识点: channel作为多个goroutine的通信媒介 select的用法 组等待,waitgroup的用法 限制并发度 广播
read more
Go 限制并发、限速
Go的并发使用起来非常容易,随意就起个goroutine。但是日常开发中,考虑到机器CPU、内存、文件描述符、网络以及下游中间件性能等等的影响,通常不会无脑使用
read more
grpc 介绍和 Go 示例
grpc介绍 rpc:远程过程调用。对比本地的函数调用,远程是节点A调用节点B上的服务,比如http等协议的调用。现在流行很多种rpc框架,百度的brpc,谷歌的
read more
I/O 多路复用之 epoll
背景 前文总结了IO复用中select的相关知识 ,其有着性能上的缺点。Linux内核在2.6中支持的epoll在大量fd场景下有着更优秀的性能。 例如Redis在使
read more
I/O 多路复用之 select
I/O多路复用的概念,我们已经再耳熟能详不过了,比如接触很多的nginx、Redis,均利用了I/O多路复用。那么I/O多路复用到底是什么?内核提供了多种方法,
read more
inode使用率过高
突然收到报警,有台机器提示inode使用率过高。一开始只注意到监控项名字有disk字眼,以为还是磁盘空间预警,跑机器上执行下 df -h,发现还很充足。原来报警监控项
read more
Java GC垃圾收集
概述 GC的三个问题: 哪些内存需要回收 什么时候回收 如何回收 Java 是自动垃圾回收的语言,所回收的内存区域指堆和方法区,主要面向占用大部分内存的堆区。类如线程栈这种,执行
read more
Java NIO理解
理解好Java NIO前提要熟悉IO模型,IO复用(以epoll为例)、非阻塞IO的基础知识。java.nio抽象出来一些类或接口,底层实际是对epoll等系统调
read more
Java synchronized实现原理
synchronized是Java中的关键字,提供了一种对共享资源互斥访问的并发控制,也可以作为线程同步的一个工具。这里我们看下synchronized背后的实
read more
Java ThreadLocal原理
为什么要有ThreadLocal 多线程利用锁来解决共享变量的问题,那如果每个线程都有自己的一份变量,就不涉及到线程安全的事情了。 当然这个变量不是方法里线程栈上的
read more
Java YoungGC的一次排查优化
问题发现 线上报警发生频繁young gc 初步排查 频繁ygc很快就结束了,持续几十秒。没有dump日志或者统计信息可看。 初步排查,是最近刚上线一个功能,10点整有外部
read more
Java 在线调试利器 Arthas
Arthas 简介 为什么要用它,能做什么 开发测试中经常遇到需要调试的时候,比如代码走到某个调用方法时这里的参数是什么值,方法出参是什么值?代码是否走了某个方法?优化接口耗时
read more
Java8 总结笔记
Java8 给出了很多新特性,让Java编程更丝滑。如引入Stream流处理、Lambda表达式、默认方法、Optional处理等等。这里做个应用总结。 stream 构建stream
read more
Java常见面试题解析
1. 内存区域划分 程序计数器PC 和操作系统的PC类似,Java虚拟机也需要,都是指执行下一条的命令。每个线程私有的。 虚拟机栈 也可以称作线程栈,每个线程私有的。在每个
read more
Java条件变量之阻塞队列实现
条件变量概念 条件变量,不需要代码层面盲目轮询一个条件,线程可以等待直到有其他线程唤醒。 条件变量使用 条件变量的使用,通常是基于一个互斥锁,并在while循环条件中
read more
Java集合容器一览
说到Java容器集合,忍不住要对比下Go。 Java要掌握的语法和API更多,相比来说Go要更简洁。但另一个角度看,Java提供了非常丰富的类和API,这点Go就
read more
JUC 并发组件CompletableFuture
优势 不会阻塞当前线程,如主线程后续逻辑; 异常处理 多个异步任务的编排 函数式编程、链式处理等 基本原理 CompletableFuture 同样实现了之前的 Future ,此外新增加了接口 CompletionSta
read more
Kafka server的线程模型与网络模型
Kafka 的标签高吞吐、高并发、高可扩展等等,为什么它有这么好的性能,我们看看它的server 线程模型和网络模型。 Kafka 性能为什么这么好 Kafka 有着高吞吐、高并发的特性,是什么支
read more
Kafka 深入理解
问题一:消费者自动提交的机制,是有单独的自动提交线程么? 实际不是的,自动提交还是隐藏在每一次的poll方法里,还是一个线程。 auto.commit.interv
read more
Kafka安装和常用命令使用介绍
kafka 安装 安装快速入门 -> 官方文档 安装步骤 下载kafka 这里使用了二进制包版本 v3.1.0 - kafka_2.13-3.1.0.tgz。下载后直接解压可用: $ tar -xzvf kafka_2.13-3.1.0.tgz $ cd kafka_2.13-3.1.0 启动zo
read more
Kafka常见面试题汇总
Kafka常见考题 1.Apache Kafka是什么? 这是一道很常见的题目,看似很无聊,其实考核的知识点很多。 首先,它考验的是,你对Kafka的定位认知是否准确。Apache K
read more
Kafka生产消费参数调优
在性能要求较高的场景下,合理设置 Kafka 参数是提升吞吐量、降低延迟和保证稳定性的关键。Kafka 参数众多。下面总结了消费者、生产者值得关注的那些参数和优化建议。 消费者
read more
Kafka集群管理&生产消费流程
Kafka 集群如何进行管理?管理包含元数据存储,topic创建、broker、生产者、消费者的变更等: 元数据的存储和流转 broker加入、宕机,Kafka 怎么知道,并且
read more
LBS位置服务 距离计算的几种方式
背景 互联网兴起,出现了很多基于地理位置服务的产品,如地图、外卖、陌陌等等,都会提供查找附近的人、餐厅等功能。 『附近的』这个就是基于位置服务,比如查找用户附近的门
read more
Linux内核之进程管理
导读 进程,是操作系统中一个非常基础,非常关键的抽象概念,它位于现代操作系统的核心位置,它是把运行的程序和所需的资源抽象出来的一个概念。 线程,内核又是如何管理的?
read more
Linux常用运维命令
进程、线程 查找某个进程 $ ps aux --forest | grep 进程关键字 $ ps aux | grep pid $ lsof -p pid 查看进程下的线程 $ top -H -p pid 文件 查看该文件被哪些进程使用 比如查看某个日志文件被哪些进程使用,业务应
read more
Linux虚拟内存机制-进程地址空间
最近钻研CSAPP,看到虚拟内存章节,反复的看了很多相关的书和材料,感慨内容很多、细节很多。写下自己的心得笔记。 物理寻址 内存,可以把它看做一个连续n字节的大数组
read more
LNMP 架构源码包搭建
LNMP源码包搭建,交代下各版本 Linux CentOS-6.5-x86_64-bin-DVD1 NGINX 版本1.8.0 下载地址:http://nginx.org/en/download.html MySQL 版本5.0.56 PHP 版本5.6.
read more
MQ延时消息的设计思路
我们在日常网购,下单未支付的时候通常都会有15-30分钟左右的有效期,如果超时不支付,系统会自动取消这笔订单。 那么问题来了:这个到期自动取消的动作是怎样触发的呢
read more
MySQL InnoDB 加锁规则与案例分析
InnoDB中处理并发写问题是采用对索引进行加锁,可重复读隔离级别默认是Next-Key Lock(Record Lock + Gap Lock,左开右闭) 关于加锁的理解和应用,《
read more
MySQL InnoDB 幻读问题
幻读是什么?InnoDB 怎么解决的幻读?next-key locking 有哪些注意的地方? 一个例子 T1 时刻,child 表里有2条数据,一个id=90,一个id=102 Time Session A Session B
read more
MySQL MVCC机制与Undo Log
MySQL的多版本并发控制(MVCC)是如何实现多版本的,真是冗余了一个完整的快照么?这个值得学习了解。 如果了解了的话,简单说,MVCC是利用了ReadView
read more
MySQL order by 执行流程和索引优化
日常开发中,经常遇到排序的场景,比如列表页按创建时间分页排序等。那 order by 在MySQL中的执行流程是什么样的呢? 准备 CREATE TABLE `t` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` varchar(16) NOT NULL, `age` int(11) NOT NULL, `addr` varchar(128) DEFAULT NULL,
read more
MySQL 主从同步和binlog应用
MySQL 主从/主备 架构的数据同步机制是什么样的?binlog 记录的内容是什么?Redis等组件怎么使得数据和MySQL保证最终一致性? 二进制日志(binary log)
read more
mysqldump 备份数据库
这里使用mysqldump备份成sql文件,非binlog形式,日常开发可能会应用到。 备份数据库 $ mysqldump -h192.168.1.100 -uuser -p123 --databases name > /tmp/databasedump.sql 备份数据库下的一个表–>sq
read more
nginx+Hugo 搭建博客
Hugo 安装 Hugo 是一款 Go 语言开发的静态网站的框架,非常适合搭建博客。 Hugo 的安装非常简单,官网有一个简洁的 quick start。 安装教程 可以安装 Go 环境,然后下载源码编译安装;也可以
read more
nginx处理惊群问题源码分析
所谓惊群问题(thundering herd problem)是说多个进程共享一个fd的监听事件,当IO就绪后多个进程都被唤醒,但只有一个进程处理,其他进程白白被唤醒而浪
read more
nginx的线程模型与网络模型
众所周知了,nginx一般用来当作HTTP服务器、反向代理、负载均衡器,其有着强悍的性能。 PHP服务早期还是LAMP架构,后来apache被nginx替代,变成
read more
PHP 多维数组排序 array_multisort应用
array_multisort排序效果类似于sql中的order by,尤其后边有多个列名的时候(先以第一个列排序,顺序相同再按第二列顺序)。这个函数尤其在多维数
read more
PHP 多进程处理任务
PHP多进程一般应用在PHP_CLI命令行中执行php脚本,不要在web访问时使用。 模块安装 php查看是否安装了多进程模块 # pcntl是process contr
read more
PHP 添加扩展模块
PHP安装后,再想增加模块(如操作mysql、memcache等php扩展)怎么操作?操作类似,以添加mysqli模块为例。 环境前提: Linux 假设PHP安装目录 /us
read more
php-fpm进程模型与进程池隔离优化
本文主要想记录优化线上502问题,包括采用进程池隔离的手段。借这个事,我们把php-fpm的线程模型梳理下,PHP开发的同学,这是必须要掌握的。 php-fpm 进程模型 php
read more
PHP基于APC的单机缓存
APC cache APC (Alternative PHP Cache),PHP缓存,手册里翻译:它的目标是为缓存和优化PHP中间代码提供一个免费,开放,健壮的框架。 了解PHP架构知道,Z
read more
PHP是如何实现弱类型的
C的结构体和联合体 C语言的结构(struct):包含多个成员,可能有多种数据类型,并且需要分配几种类型占用空间之和的空间。 联合(union):支持多种类型,供使
read more
PlantUML 程序画图: 时序图、活动图
PlantUML是一个多功能组件,可以利用编码快速、直接地创建图表,而不必拖拽图来画 各有优劣。 Sequence 序列图 官方教程 demo案例 代码 ' 教程:https://plant
read more
Python 多线程使用
前边介绍了Python的多进程操作,这里记下多线程操作。 创建一个线程 使用threading模块,把函数传入并创建Thread实例,再调用start()开始执行 import
read more
Python 多进程使用
最近有个Python项目要搞,之前学习的都忘差不多了,利用点空余时间把Python再捡一捡。 多进程处理还是记录个笔记,以免后边忘了翻看。 因为Python的多线程
read more
Redis的线程模型与网络模型
为什么总听说Redis是单线程,还性能这么强? 答案通常是Redis基于内存,且采用Reactor事件驱动模型,且数据结构的精心设计。 在Redis4.0,作者增加
read more
sed修改替换多文件内容
sed操作单文件已经写过了,但多个文件的修改替换在工作中经常使用,这里独立写个。 修改当前目录下所有文件(包括子目录下的文件),将文本中出现的 aaa替换为 bbb $ find .
read more
Spring 原理入门
IOC-对象池 IOC 控制反转,Bean 对象由 Spring 来托管(生命周期),这些对象所在的位置暂且称为 Bean 的对象池(Map)。Bean 对象的创建除了实例化,还经历了哪些步骤最终
read more
SpringBoot bean的常用扩展点
了解Spring这些扩展点,有助于我们编写更优雅的代码。扩展点的具体应用实践,我们可以多看优秀的源码借鉴思路。 扩展点顺序 【1】BeanFactoryPostPr
read more
SpringBoot 如何开发一个starter组件
引言 在SpringBoot生态系统中,starter组件是一种非常重要的机制,它简化了依赖管理和自动配置的过程。这里介绍如何开发自己的SpringBoot-st
read more
tcpdump抓包http应用
tcpdump常用参数列表 sudo tcpdump -i eth1 -s0 -v -n -l -A host 124.64.123.235 and port 80 -i 表示哪个网卡的包 -s xxx 截取报文字节数 xxx=0表示全部 -v 详细输出,还有 -vv -vvv -n 不解析域名,直接显示IP,意味
read more
Unix 五种 I/O 模型
I/O模型是网络编程中必须要掌握的,也是计算机系统的重要内容之一,涉及通信的系统软件都会围绕文件描述符、I/O模型等知识展开。理解I/O模型是我们程序员的基本功
read more
Unix 进程间通信 IPC
Unix进程间通信IPC Unix进程间通信,通常有以下几种方式: 1)管道 pipe 2)命名管道 named pipe 3)消息队列 4)信号量 5)共享内存 6)Unix域套接字 7)网络sock
read more
UTF8、Unicode 字符编码原理
Unicode 计算机生于美帝,彼时字符也只有一个ASCII字符集:美国标码。使用7bit来表示128个字符:包含英文字母的大小写、 数字、各种标点符号和设备控制符。对于早期的
read more
Web Server 工作原理
Web开发一个永远绕不开的问题,Web Server工作原理。 从比较原始的TCP/IP服务器,到Apache、NGINX等等的出现,这些Web服务器的核心工作原理
read more
传输层TCP三次握手四次挥手-tcpdump抓包ftp应用
通过tcpdump抓包ftp应用(port 21),我们来了解下传输层TCP的三次握手和四次挥手,数据包是什么样的。 准备工作 机器上未安装tcpdump的,先安装下
read more
分布式共识之Raft算法
Raft算法属于Multi-Paxos算法,但是做了一些简化和限制,比如增加了日志必须是连续的,只支持领导者、跟随者和候选人三种状态,在理解和算法实现上都相对容
read more
分布式协调服务之 Zookeeper介绍
Zookeeper是apache 开源项目,官方站点 Zookeeper介绍 ZooKeeper is a high-performance coordination service for distributed applications. It exposes common services - such as naming, configuration management, synchronization, and group services。 如果有过分布式程序开发经验
read more
分布式服务之限流算法
服务限流,顾名思义是对请求过来的流量做限制,当流量超过服务负载能力的一种保护服务的措施。 常见的限流算法,固定窗口、滑动窗口、漏桶和令牌桶算法,以下分别做简要介绍
read more
分布式缓存的一致性Hash
网站的伸缩性架构 – 分布式缓存的一致性Hash 一致性哈希 分布式缓存系统,k=>v缓存数据时经过一层路由算法,一般对key进行哈希运算,这个值和当前分布式缓存
read more
图的最短路径 Dijkstra 算法
图如果不带权重,计算最短路径用BFS,队列的数据结构就够了,如果带权重(负权不能使用dijkstra)的话可以使用优先队列的数据结构。放邻接点的时候,哪个权重小
read more
图的遍历:广度优先 BFS 和深度优先 DFS
图的两种遍历方式 如题,图的广度优先和深度优先遍历。和二叉树的广度优先遍历类似都利用队列先进先出的特点,不同点在于,二叉树的BFS不需要记录节点是否遍历过,但图会
read more
处理文件的交差并集合
日常工作中,经常会有文件处理。要玩的转命令,记得熟,速度快。 如题,指定列去重就是一个频繁遇到的问题。脑子里一直深深烙着 sort | uniq 这种用法,直到前两天处理一个2700
read more
微服务治理框架Dubbo入门
Dubbo 概念 Dubbo 是一款微服务开发框架,它帮助解决微服务开发中的通信问题,同时为构建企业级微服务提供服务治理能力。 从一句话定义中,我们知道 Dubbo 的角色就是微服务治理框架,解决
read more
快速入门一个分布式组件
经验分享 要快速入门一个组件或者技术怎么比较高效,凭自己这些年的经验,有以下一些心得或者建议:(以一个分布式组件为例) 先清楚它生来是要解决什么问题的 出现的背景是什
read more
文件共享传输的几种方式
开发时经常遇到以下场景: 本地机器上的文件上传到服务器上 服务器上的文件下载到本地机器上 服务器A的文件拷贝到服务器B上 以下几种方式是在工作中经常用到的: python
read more
最优解问题:0-1背包
问题 问题描述 一个可放总重量为 W 的背包和 N 个物品。每个物品,有重量 w 和价值 v 两个属性,那么第 i 个物品的重量为 w[i],价值为 v[i]。现在用这个背包装物品,问最多
read more
正则表达式-零宽向前、向后匹配
正则中向前匹配和向后匹配非常强大好用。 这里的向前意思是文本的右边,向后是文本的左边(正则引擎匹配按照左->右)。 向前和向后匹配是非获取匹配,即匹配结果不包
read more
浅析单点登录SSO 实现原理
背景 一家公司有多个产品线,就可能要有多个子域名,下面以baidu域名为例,a.baidu.com, b.baidu.com。 com 是顶级域名,baidu 是一个二级域名
read more
笔记 Go context 包使用
context包在Go并发编程代码中经常可见,而在我学习Go的两本书中《Go圣经》《Go实战》都没有看到这个包的介绍,才知道是Go1.7版本中才将其放入到标准库
read more
笔记 Go 作用域和生命周期
作用域和生命周期,往往被混为一谈,当然是两个概念。 概念 作用域 作用域是声明在程序文本中出现的区域,是一个编译时属性。 变量的生命周期 变量的生命周期是程序执行期间被程
read more
笔记 Go 常用的时间日期转化
日常开发中时间转化经常用到。Go中设计的时间类型是Time,参考src/time/time.go 当前时间 获取当前时间,返回Time类型 a := time.Now() fmt.Println(a, a.Unix(), a.UnixNano()) 当前Unix 时
read more
网络层IP数据包解析-tcpdump抓包ping应用
准备工作 client_ip : 111.198.231.243 server_ip : 115.159.105.52 ping命令 一个常见的工具Ping。 ping是利用ICMP,ICMP 依靠IP来完成它的任务,是IP的附属协议。 ICMP协议 ICMP封装在IP
read more
股票、债券、基金、期货概念和区别
股票 从企业的角度 股票是上市公司为筹集资金发行给各个股东作为持股凭证的一种有价证券。 参考股票的历史 荷兰商船。 从投资者的角度 股票投资是投资者购买上市公司发行的股票,
read more
计算机怎么表示有符号数和浮点数
有符号数就是我们说的带有正负号的数;浮点数即是小数,区别于定点数。 虽然我们日常编程中经常和他们打交道,但很难说我们对它理解的有多好,计算机内部是怎么表示的负数、
read more
设计模式:单例模式与线程安全
模式说明 单例模式,顾名思义,JVM全局下某Class只有一个实例对象。 使用场景 一个全局使用的类避免频繁地创建与销毁,节省系统资源。 理解重点 构造函数私有 统一访问入
read more
设计模式:策略+工厂+模板方法 混合使用
模式说明 策略工厂: 策略模式+工厂模式 工厂模式用来生成策略 模板方法 模板方法里组装策略方法 使用场景 策略模式 自然要求是 完成一件事情,其间有不同的业务场景区分。 工厂模式
read more
设计模式:装饰器模式应用
模式说明 装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为
read more
设计模式:责任链、观察者模式在Spring下的应用
模式说明 责任链模式: 本本上的定义,责任链模式避免了请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到
read more