Tag: cache
PHP基于APC的单机缓存
APC cache APC (Alternative PHP Cache),PHP缓存,手册里翻译:它的目标是为缓存和优化PHP中间代码提供一个免费,开放,健壮的框架。 了解PHP架构知道,Z
Redis的线程模型与网络模型
为什么总听说Redis是单线程,还性能这么强? 答案通常是Redis基于内存,且采用Reactor事件驱动模型,且数据结构的精心设计。 在Redis4.0,作者增加
Redis知识汇总
数据结构和应用场景 String 类型的应用场景:缓存对象、常规计数、分布式锁、共享 session 信息等。 使用自定义字符串结构体,方便O(1)知道长度、拼接字符串不会造成缓冲区溢出、不仅
Tag: elasticsearch
Elasticsearch入门
前段时间负责的一个群组相关的项目上线了,功能包含群组名称模糊检索和基于地理位置做同城、附近群检索的需求。这正是Elasticsearch大显身手的机会,接到项目
Elasticsearch分布式存储的写流程
ES作为一个分布式存储组件,它的写流程是什么样子的?为什么说它是近实时搜索?什么会影响它的写性能?我们有必要了解。 ES文档的写流程 写的动作包含新建文档、更新文档
Elasticsearch分布式检索的两阶段流程
在说明ES分布式检索流程前,我们先看下内部组件的概念架构: Elasticsearch概念架构 ES分布式检索的两阶段 如果是对单个文档进行CURD操作,通常从路由计
ELK 搭建
ELK 介绍 ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash、Kibana。 Elasticsearch 是一个搜索和分析引擎。 Logstash 是服务器端数据处理管
LBS位置服务 距离计算的几种方式
背景 互联网兴起,出现了很多基于地理位置服务的产品,如地图、外卖、陌陌等等,都会提供查找附近的人、餐厅等功能。 『附近的』这个就是基于位置服务,比如查找用户附近的门
Tag: go
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、内存、文件描述符、网络以及下游中间件性能等等的影响,通常不会无脑使用
grpc 介绍和 Go 示例
grpc介绍 rpc:远程过程调用。对比本地的函数调用,远程是节点A调用节点B上的服务,比如http等协议的调用。现在流行很多种rpc框架,百度的brpc,谷歌的
LRU算法
LRU介绍 LRU(Least Recently Used)最近最少使用算法,通常在缓存策略中使用。操作系统在内存管理中,对页的置换有应用这一算法。 通常缓存空间有限,因此当空间满的
笔记 Go context 包使用
context包在Go并发编程代码中经常可见,而在我学习Go的两本书中《Go圣经》《Go实战》都没有看到这个包的介绍,才知道是Go1.7版本中才将其放入到标准库
笔记 Go 作用域和生命周期
作用域和生命周期,往往被混为一谈,当然是两个概念。 概念 作用域 作用域是声明在程序文本中出现的区域,是一个编译时属性。 变量的生命周期 变量的生命周期是程序执行期间被程
笔记 Go 常用的时间日期转化
日常开发中时间转化经常用到。Go中设计的时间类型是Time,参考src/time/time.go 当前时间 获取当前时间,返回Time类型 a := time.Now() fmt.Println(a, a.Unix(), a.UnixNano()) 当前Unix 时
Tag: io模型
I/O 多路复用之 epoll
背景 前文总结了IO复用中select的相关知识 ,其有着性能上的缺点。Linux内核在2.6中支持的epoll在大量fd场景下有着更优秀的性能。 例如Redis在使
I/O 多路复用之 select
I/O多路复用的概念,我们已经再耳熟能详不过了,比如接触很多的nginx、Redis,均利用了I/O多路复用。那么I/O多路复用到底是什么?内核提供了多种方法,
Java NIO理解
理解好Java NIO前提要熟悉IO模型,IO复用(以epoll为例)、非阻塞IO的基础知识。java.nio抽象出来一些类或接口,底层实际是对epoll等系统调
Kafka server的线程模型与网络模型
Kafka 的标签高吞吐、高并发、高可扩展等等,为什么它有这么好的性能,我们看看它的server 线程模型和网络模型。 Kafka 性能为什么这么好 Kafka 有着高吞吐、高并发的特性,是什么支
nginx的线程模型与网络模型
众所周知了,nginx一般用来当作HTTP服务器、反向代理、负载均衡器,其有着强悍的性能。 PHP服务早期还是LAMP架构,后来apache被nginx替代,变成
Reactor模式
服务器基础 三种fd 认识三个fd listenfd connfd clientfd 服务器监听连接请求 accept 返回connfd,后续和客户端的通信fd 客户端进行connect连接请求的 clientfd 基本服务器模型 单线程阻塞 int listenfd;
Redis的线程模型与网络模型
为什么总听说Redis是单线程,还性能这么强? 答案通常是Redis基于内存,且采用Reactor事件驱动模型,且数据结构的精心设计。 在Redis4.0,作者增加
Unix 五种 I/O 模型
I/O模型是网络编程中必须要掌握的,也是计算机系统的重要内容之一,涉及通信的系统软件都会围绕文件描述符、I/O模型等知识展开。理解I/O模型是我们程序员的基本功
Tag: java
Java GC垃圾收集
概述 GC的三个问题: 哪些内存需要回收 什么时候回收 如何回收 Java 是自动垃圾回收的语言,所回收的内存区域指堆和方法区,主要面向占用大部分内存的堆区。类如线程栈这种,执行
Java NIO理解
理解好Java NIO前提要熟悉IO模型,IO复用(以epoll为例)、非阻塞IO的基础知识。java.nio抽象出来一些类或接口,底层实际是对epoll等系统调
Java synchronized实现原理
synchronized是Java中的关键字,提供了一种对共享资源互斥访问的并发控制,也可以作为线程同步的一个工具。这里我们看下synchronized背后的实
Java ThreadLocal原理
为什么要有ThreadLocal 多线程利用锁来解决共享变量的问题,那如果每个线程都有自己的一份变量,就不涉及到线程安全的事情了。 当然这个变量不是方法里线程栈上的
Java YoungGC的一次排查优化
问题发现 线上报警发生频繁young gc 初步排查 频繁ygc很快就结束了,持续几十秒。没有dump日志或者统计信息可看。 初步排查,是最近刚上线一个功能,10点整有外部
Java 在线调试利器 Arthas
Arthas 简介 为什么要用它,能做什么 开发测试中经常遇到需要调试的时候,比如代码走到某个调用方法时这里的参数是什么值,方法出参是什么值?代码是否走了某个方法?优化接口耗时
Java8 总结笔记
Java8 给出了很多新特性,让Java编程更丝滑。如引入Stream流处理、Lambda表达式、默认方法、Optional处理等等。这里做个应用总结。 stream 构建stream
Java常见面试题解析
1. 内存区域划分 程序计数器PC 和操作系统的PC类似,Java虚拟机也需要,都是指执行下一条的命令。每个线程私有的。 虚拟机栈 也可以称作线程栈,每个线程私有的。在每个
Java日期处理
引言 在各种语言编程中,日期和时间的处理都是一个常见的需求。Java中还特殊一点,在Java8 前后提供了不同的日期和时间 API,它们在设计和使用上有很大的差异。本
Java条件变量之阻塞队列实现
条件变量概念 条件变量,不需要代码层面盲目轮询一个条件,线程可以等待直到有其他线程唤醒。 条件变量使用 条件变量的使用,通常是基于一个互斥锁,并在while循环条件中
Java线程池
线程池的实现原理用一句话理解:维持多个线程和一个阻塞队列。队列里的放的是待执行任务,线程从队列里循环获取任务并执行。
Java集合容器一览
说到Java容器集合,忍不住要对比下Go。 Java要掌握的语法和API更多,相比来说Go要更简洁。但另一个角度看,Java提供了非常丰富的类和API,这点Go就
JUC 常用并发组件
这里列举几个常用的并发组件:
- Semaphore
- CountDownLatch
- CyclicBarrier
- SynchronousQueue
JUC 并发组件CompletableFuture
优势 不会阻塞当前线程,如主线程后续逻辑; 异常处理 多个异步任务的编排 函数式编程、链式处理等 基本原理 CompletableFuture 同样实现了之前的 Future ,此外新增加了接口 CompletionSta
LRU算法
LRU介绍 LRU(Least Recently Used)最近最少使用算法,通常在缓存策略中使用。操作系统在内存管理中,对页的置换有应用这一算法。 通常缓存空间有限,因此当空间满的
Reactor模式
服务器基础 三种fd 认识三个fd listenfd connfd clientfd 服务器监听连接请求 accept 返回connfd,后续和客户端的通信fd 客户端进行connect连接请求的 clientfd 基本服务器模型 单线程阻塞 int listenfd;
Spring 原理入门
IOC-对象池 IOC 控制反转,Bean 对象由 Spring 来托管(生命周期),这些对象所在的位置暂且称为 Bean 的对象池(Map)。Bean 对象的创建除了实例化,还经历了哪些步骤最终
SpringBoot bean的常用扩展点
了解Spring这些扩展点,有助于我们编写更优雅的代码。扩展点的具体应用实践,我们可以多看优秀的源码借鉴思路。 扩展点顺序 【1】BeanFactoryPostPr
SpringBoot 如何开发一个starter组件
引言 在SpringBoot生态系统中,starter组件是一种非常重要的机制,它简化了依赖管理和自动配置的过程。这里介绍如何开发自己的SpringBoot-st
设计模式:单例模式与线程安全
模式说明 单例模式,顾名思义,JVM全局下某Class只有一个实例对象。 使用场景 一个全局使用的类避免频繁地创建与销毁,节省系统资源。 理解重点 构造函数私有 统一访问入
设计模式:策略+工厂+模板方法 混合使用
模式说明 策略工厂: 策略模式+工厂模式 工厂模式用来生成策略 模板方法 模板方法里组装策略方法 使用场景 策略模式 自然要求是 完成一件事情,其间有不同的业务场景区分。 工厂模式
设计模式:装饰器模式应用
模式说明 装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为
设计模式:责任链、观察者模式在Spring下的应用
模式说明 责任链模式: 本本上的定义,责任链模式避免了请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到
Tag: kafka
Kafka server的线程模型与网络模型
Kafka 的标签高吞吐、高并发、高可扩展等等,为什么它有这么好的性能,我们看看它的server 线程模型和网络模型。 Kafka 性能为什么这么好 Kafka 有着高吞吐、高并发的特性,是什么支
Kafka 深入理解
问题一:消费者自动提交的机制,是有单独的自动提交线程么? 实际不是的,自动提交还是隐藏在每一次的poll方法里,还是一个线程。 auto.commit.interv
Kafka入门介绍
Kafka是什么 Kafka最初是LinkedIn公司开发的一个内部基础设施系统,后开源到Apache软件,至今也已经活跃多年,被广泛的用于消息流式处理的场景。K
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
Kafka常见面试题汇总
Kafka常见考题 1.Apache Kafka是什么? 这是一道很常见的题目,看似很无聊,其实考核的知识点很多。 首先,它考验的是,你对Kafka的定位认知是否准确。Apache K
Kafka生产消费参数调优
在性能要求较高的场景下,合理设置 Kafka 参数是提升吞吐量、降低延迟和保证稳定性的关键。Kafka 参数众多。下面总结了消费者、生产者值得关注的那些参数和优化建议。 消费者
Kafka集群管理&生产消费流程
Kafka 集群如何进行管理?管理包含元数据存储,topic创建、broker、生产者、消费者的变更等: 元数据的存储和流转 broker加入、宕机,Kafka 怎么知道,并且
Tag: lbs
LBS位置服务 距离计算的几种方式
背景 互联网兴起,出现了很多基于地理位置服务的产品,如地图、外卖、陌陌等等,都会提供查找附近的人、餐厅等功能。 『附近的』这个就是基于位置服务,比如查找用户附近的门
Tag: mq
Kafka server的线程模型与网络模型
Kafka 的标签高吞吐、高并发、高可扩展等等,为什么它有这么好的性能,我们看看它的server 线程模型和网络模型。 Kafka 性能为什么这么好 Kafka 有着高吞吐、高并发的特性,是什么支
Kafka 深入理解
问题一:消费者自动提交的机制,是有单独的自动提交线程么? 实际不是的,自动提交还是隐藏在每一次的poll方法里,还是一个线程。 auto.commit.interv
Kafka入门介绍
Kafka是什么 Kafka最初是LinkedIn公司开发的一个内部基础设施系统,后开源到Apache软件,至今也已经活跃多年,被广泛的用于消息流式处理的场景。K
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
Kafka常见面试题汇总
Kafka常见考题 1.Apache Kafka是什么? 这是一道很常见的题目,看似很无聊,其实考核的知识点很多。 首先,它考验的是,你对Kafka的定位认知是否准确。Apache K
Kafka生产消费参数调优
在性能要求较高的场景下,合理设置 Kafka 参数是提升吞吐量、降低延迟和保证稳定性的关键。Kafka 参数众多。下面总结了消费者、生产者值得关注的那些参数和优化建议。 消费者
Kafka集群管理&生产消费流程
Kafka 集群如何进行管理?管理包含元数据存储,topic创建、broker、生产者、消费者的变更等: 元数据的存储和流转 broker加入、宕机,Kafka 怎么知道,并且
MQ延时消息的设计思路
我们在日常网购,下单未支付的时候通常都会有15-30分钟左右的有效期,如果超时不支付,系统会自动取消这笔订单。 那么问题来了:这个到期自动取消的动作是怎样触发的呢
Tag: mysql
MySQL InnoDB 加锁规则与案例分析
InnoDB中处理并发写问题是采用对索引进行加锁,可重复读隔离级别默认是Next-Key Lock(Record Lock + Gap Lock,左开右闭) 关于加锁的理解和应用,《
MySQL InnoDB 幻读问题
幻读是什么?InnoDB 怎么解决的幻读?next-key locking 有哪些注意的地方? 一个例子 T1 时刻,child 表里有2条数据,一个id=90,一个id=102 Time Session A Session B
MySQL MVCC机制与Undo Log
MySQL的多版本并发控制(MVCC)是如何实现多版本的,真是冗余了一个完整的快照么?这个值得学习了解。 如果了解了的话,简单说,MVCC是利用了ReadView
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,
MySQL 主从同步和binlog应用
MySQL 主从/主备 架构的数据同步机制是什么样的?binlog 记录的内容是什么?Redis等组件怎么使得数据和MySQL保证最终一致性? 二进制日志(binary log)
mysqldump 备份数据库
这里使用mysqldump备份成sql文件,非binlog形式,日常开发可能会应用到。 备份数据库 $ mysqldump -h192.168.1.100 -uuser -p123 --databases name > /tmp/databasedump.sql 备份数据库下的一个表–>sq
MySQL知识汇总
1.一条SQL查询语句是如何执行的 MySQL的逻辑架构图 大体来说,MySQL可以分为Server层和存储引擎层两部分。 连接器 连接器负责跟客户端建立连接、获取权限
Tag: nginx
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.
nginx+Hugo 搭建博客
Hugo 安装 Hugo 是一款 Go 语言开发的静态网站的框架,非常适合搭建博客。 Hugo 的安装非常简单,官网有一个简洁的 quick start。 安装教程 可以安装 Go 环境,然后下载源码编译安装;也可以
nginx处理惊群问题源码分析
所谓惊群问题(thundering herd problem)是说多个进程共享一个fd的监听事件,当IO就绪后多个进程都被唤醒,但只有一个进程处理,其他进程白白被唤醒而浪
nginx的线程模型与网络模型
众所周知了,nginx一般用来当作HTTP服务器、反向代理、负载均衡器,其有着强悍的性能。 PHP服务早期还是LAMP架构,后来apache被nginx替代,变成
Tag: php
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.
PHP 多维数组排序 array_multisort应用
array_multisort排序效果类似于sql中的order by,尤其后边有多个列名的时候(先以第一个列排序,顺序相同再按第二列顺序)。这个函数尤其在多维数
PHP 多进程处理任务
PHP多进程一般应用在PHP_CLI命令行中执行php脚本,不要在web访问时使用。 模块安装 php查看是否安装了多进程模块 # pcntl是process contr
PHP 添加扩展模块
PHP安装后,再想增加模块(如操作mysql、memcache等php扩展)怎么操作?操作类似,以添加mysqli模块为例。 环境前提: Linux 假设PHP安装目录 /us
php-fpm进程模型与进程池隔离优化
本文主要想记录优化线上502问题,包括采用进程池隔离的手段。借这个事,我们把php-fpm的线程模型梳理下,PHP开发的同学,这是必须要掌握的。 php-fpm 进程模型 php
PHP基于APC的单机缓存
APC cache APC (Alternative PHP Cache),PHP缓存,手册里翻译:它的目标是为缓存和优化PHP中间代码提供一个免费,开放,健壮的框架。 了解PHP架构知道,Z
PHP是如何实现弱类型的
C的结构体和联合体 C语言的结构(struct):包含多个成员,可能有多种数据类型,并且需要分配几种类型占用空间之和的空间。 联合(union):支持多种类型,供使
Tag: python
Python 多线程使用
前边介绍了Python的多进程操作,这里记下多线程操作。 创建一个线程 使用threading模块,把函数传入并创建Thread实例,再调用start()开始执行 import
Python 多进程使用
最近有个Python项目要搞,之前学习的都忘差不多了,利用点空余时间把Python再捡一捡。 多进程处理还是记录个笔记,以免后边忘了翻看。 因为Python的多线程
Tag: redis
LBS位置服务 距离计算的几种方式
背景 互联网兴起,出现了很多基于地理位置服务的产品,如地图、外卖、陌陌等等,都会提供查找附近的人、餐厅等功能。 『附近的』这个就是基于位置服务,比如查找用户附近的门
Redis的线程模型与网络模型
为什么总听说Redis是单线程,还性能这么强? 答案通常是Redis基于内存,且采用Reactor事件驱动模型,且数据结构的精心设计。 在Redis4.0,作者增加
Redis知识汇总
数据结构和应用场景 String 类型的应用场景:缓存对象、常规计数、分布式锁、共享 session 信息等。 使用自定义字符串结构体,方便O(1)知道长度、拼接字符串不会造成缓冲区溢出、不仅
Tag: rpc
grpc 介绍和 Go 示例
grpc介绍 rpc:远程过程调用。对比本地的函数调用,远程是节点A调用节点B上的服务,比如http等协议的调用。现在流行很多种rpc框架,百度的brpc,谷歌的
微服务治理框架Dubbo入门
Dubbo 概念 Dubbo 是一款微服务开发框架,它帮助解决微服务开发中的通信问题,同时为构建企业级微服务提供服务治理能力。 从一句话定义中,我们知道 Dubbo 的角色就是微服务治理框架,解决
Tag: shell
awk sed处理文件操作
awk、sed对处理文件和写shell脚本时非常有益,日常工作中也会经常用到,很有必要掌握。 awk awk '条件{命令}' filename 假设一个待处理的文件test 或
Linux常用运维命令
进程、线程 查找某个进程 $ ps aux --forest | grep 进程关键字 $ ps aux | grep pid $ lsof -p pid 查看进程下的线程 $ top -H -p pid 文件 查看该文件被哪些进程使用 比如查看某个日志文件被哪些进程使用,业务应
sed修改替换多文件内容
sed操作单文件已经写过了,但多个文件的修改替换在工作中经常使用,这里独立写个。 修改当前目录下所有文件(包括子目录下的文件),将文本中出现的 aaa替换为 bbb $ find .
shell编程
在Linux环境运行的系统,日常开发中我们要经常使用shell,除了常用的命令还要掌握shell编程。 构建基本脚本 创建shell脚本文件 shell文件的第一行指
处理文件的交差并集合
日常工作中,经常会有文件处理。要玩的转命令,记得熟,速度快。 如题,指定列去重就是一个频繁遇到的问题。脑子里一直深深烙着 sort | uniq 这种用法,直到前两天处理一个2700
文件共享传输的几种方式
开发时经常遇到以下场景: 本地机器上的文件上传到服务器上 服务器上的文件下载到本地机器上 服务器A的文件拷贝到服务器B上 以下几种方式是在工作中经常用到的: python
Tag: spring
SpringBoot 如何开发一个starter组件
引言 在SpringBoot生态系统中,starter组件是一种非常重要的机制,它简化了依赖管理和自动配置的过程。这里介绍如何开发自己的SpringBoot-st
Tag: 云原生
Docker
Docker 发展背景 伴随着容器化技术的发展以及微服务的流行,Docker横空出世,其本身除了对容器技术(LXC)做了应用封装外,更为重要的是,它引入了容器镜像等一整套管理
Tag: 分布式
分布式共识之Raft算法
Raft算法属于Multi-Paxos算法,但是做了一些简化和限制,比如增加了日志必须是连续的,只支持领导者、跟随者和候选人三种状态,在理解和算法实现上都相对容
分布式协调服务之 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。 如果有过分布式程序开发经验
分布式服务之限流算法
服务限流,顾名思义是对请求过来的流量做限制,当流量超过服务负载能力的一种保护服务的措施。 常见的限流算法,固定窗口、滑动窗口、漏桶和令牌桶算法,以下分别做简要介绍
分布式缓存的一致性Hash
网站的伸缩性架构 – 分布式缓存的一致性Hash 一致性哈希 分布式缓存系统,k=>v缓存数据时经过一层路由算法,一般对key进行哈希运算,这个值和当前分布式缓存
微服务治理框架Dubbo入门
Dubbo 概念 Dubbo 是一款微服务开发框架,它帮助解决微服务开发中的通信问题,同时为构建企业级微服务提供服务治理能力。 从一句话定义中,我们知道 Dubbo 的角色就是微服务治理框架,解决
负载均衡
伸缩性架构 – 负载均衡 高伸缩性是大型网站技术架构的一个重要因素。 伸缩性是什么?简单说就是当流量增大时,向集群中添加机器(横向扩容)就可以分散开流量,各个机器提供着
Tag: 基础
Reactor模式
服务器基础 三种fd 认识三个fd listenfd connfd clientfd 服务器监听连接请求 accept 返回connfd,后续和客户端的通信fd 客户端进行connect连接请求的 clientfd 基本服务器模型 单线程阻塞 int listenfd;
UTF8、Unicode 字符编码原理
Unicode 计算机生于美帝,彼时字符也只有一个ASCII字符集:美国标码。使用7bit来表示128个字符:包含英文字母的大小写、 数字、各种标点符号和设备控制符。对于早期的
大端序小端序
大端序 小端序 不同机器厂商实现不同,导致字节序列在内存中呈现的形式也不同。内存中是以字节为单位存储,地址空间为 0 - 2^n-1。那么问题来了,对于一个多字节序列的变
正则表达式-零宽向前、向后匹配
正则中向前匹配和向后匹配非常强大好用。 这里的向前意思是文本的右边,向后是文本的左边(正则引擎匹配按照左->右)。 向前和向后匹配是非获取匹配,即匹配结果不包
理解零拷贝
Kafka、Netty、NGINX这些流行的大量涉及IO操作的开源组件都有应用零拷贝的技术,来提升性能。一定好奇零拷贝是什么意思? read API的流程 假设这样一个场景
磁盘
I/O操作、文件系统当然是计算机中非常重要的概念,想更深刻的理解这些概念,我认为很有必要了解支撑其实现的硬件,就来说一说磁盘。 磁盘现在已经是当前计算机组成不可或
计算机加法器原理
了解加法器原理之前,先介绍下继电器和门电路。 继电器 继电器我们并不陌生,在高中物理我们都学习过它。原理就是电和磁,利用电磁铁控制开关。 继电器的一个很大用处在于可以
计算机怎么表示有符号数和浮点数
有符号数就是我们说的带有正负号的数;浮点数即是小数,区别于定点数。 虽然我们日常编程中经常和他们打交道,但很难说我们对它理解的有多好,计算机内部是怎么表示的负数、
Tag: 工具
Git 操作手册
clone git clone 代码库地址 分支查看 切换 # 1. 查看远程分支 $ git branch -r # 2. 查看本地分支 $ git branch # 3. 查看远程和本地分支。带*的表示正在所处分支 $ git branch -a # 4. 建立一个分支(是在当前分支H
Linux常用运维命令
进程、线程 查找某个进程 $ ps aux --forest | grep 进程关键字 $ ps aux | grep pid $ lsof -p pid 查看进程下的线程 $ top -H -p pid 文件 查看该文件被哪些进程使用 比如查看某个日志文件被哪些进程使用,业务应
PlantUML 程序画图: 时序图、活动图
PlantUML是一个多功能组件,可以利用编码快速、直接地创建图表,而不必拖拽图来画 各有优劣。 Sequence 序列图 官方教程 demo案例 代码 ' 教程:https://plant
vi 操作手册
光标移动 上下左右 hjkl 行里快速左移,移到左边单词首字母:b (begin) 行里快速右移,移到右边单词尾字母:e (end) 翻到下一页 ctrl+f (front) 翻到上一页 ctrl+b (bac
传输层TCP三次握手四次挥手-tcpdump抓包ftp应用
通过tcpdump抓包ftp应用(port 21),我们来了解下传输层TCP的三次握手和四次挥手,数据包是什么样的。 准备工作 机器上未安装tcpdump的,先安装下
文件共享传输的几种方式
开发时经常遇到以下场景: 本地机器上的文件上传到服务器上 服务器上的文件下载到本地机器上 服务器A的文件拷贝到服务器B上 以下几种方式是在工作中经常用到的: python
新机开发配置汇总
新机配置持续更新
网络层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
Tag: 操作系统
I/O 多路复用之 epoll
背景 前文总结了IO复用中select的相关知识 ,其有着性能上的缺点。Linux内核在2.6中支持的epoll在大量fd场景下有着更优秀的性能。 例如Redis在使
I/O 多路复用之 select
I/O多路复用的概念,我们已经再耳熟能详不过了,比如接触很多的nginx、Redis,均利用了I/O多路复用。那么I/O多路复用到底是什么?内核提供了多种方法,
inode使用率过高
突然收到报警,有台机器提示inode使用率过高。一开始只注意到监控项名字有disk字眼,以为还是磁盘空间预警,跑机器上执行下 df -h,发现还很充足。原来报警监控项
Linux内核之进程管理
导读 进程,是操作系统中一个非常基础,非常关键的抽象概念,它位于现代操作系统的核心位置,它是把运行的程序和所需的资源抽象出来的一个概念。 线程,内核又是如何管理的?
Linux虚拟内存机制-进程地址空间
最近钻研CSAPP,看到虚拟内存章节,反复的看了很多相关的书和材料,感慨内容很多、细节很多。写下自己的心得笔记。 物理寻址 内存,可以把它看做一个连续n字节的大数组
Unix 五种 I/O 模型
I/O模型是网络编程中必须要掌握的,也是计算机系统的重要内容之一,涉及通信的系统软件都会围绕文件描述符、I/O模型等知识展开。理解I/O模型是我们程序员的基本功
Unix 进程间通信 IPC
Unix进程间通信IPC Unix进程间通信,通常有以下几种方式: 1)管道 pipe 2)命名管道 named pipe 3)消息队列 4)信号量 5)共享内存 6)Unix域套接字 7)网络sock
Web Server 工作原理
Web开发一个永远绕不开的问题,Web Server工作原理。 从比较原始的TCP/IP服务器,到Apache、NGINX等等的出现,这些Web服务器的核心工作原理
文件描述符
我们经常说到IO,什么是IO? IO即是输入输出,它是在主存和外部设备(磁盘、终端、网络)之间复制数据的过程。输入Input,是对内存来说,即是从外部设备到主存;
线程同步与锁
线程为什么要同步? 一个简单的例子 i++; 虽然高级语言中是一个简单的自增表达式,但是对于计算机底层而言,还是多条指令运行的。 指令运行一般如下: 从内存中拿到 i 变量值,放到
Tag: 数据库
Elasticsearch入门
前段时间负责的一个群组相关的项目上线了,功能包含群组名称模糊检索和基于地理位置做同城、附近群检索的需求。这正是Elasticsearch大显身手的机会,接到项目
Elasticsearch分布式存储的写流程
ES作为一个分布式存储组件,它的写流程是什么样子的?为什么说它是近实时搜索?什么会影响它的写性能?我们有必要了解。 ES文档的写流程 写的动作包含新建文档、更新文档
Elasticsearch分布式检索的两阶段流程
在说明ES分布式检索流程前,我们先看下内部组件的概念架构: Elasticsearch概念架构 ES分布式检索的两阶段 如果是对单个文档进行CURD操作,通常从路由计
LBS位置服务 距离计算的几种方式
背景 互联网兴起,出现了很多基于地理位置服务的产品,如地图、外卖、陌陌等等,都会提供查找附近的人、餐厅等功能。 『附近的』这个就是基于位置服务,比如查找用户附近的门
MySQL InnoDB 加锁规则与案例分析
InnoDB中处理并发写问题是采用对索引进行加锁,可重复读隔离级别默认是Next-Key Lock(Record Lock + Gap Lock,左开右闭) 关于加锁的理解和应用,《
MySQL InnoDB 幻读问题
幻读是什么?InnoDB 怎么解决的幻读?next-key locking 有哪些注意的地方? 一个例子 T1 时刻,child 表里有2条数据,一个id=90,一个id=102 Time Session A Session B
MySQL MVCC机制与Undo Log
MySQL的多版本并发控制(MVCC)是如何实现多版本的,真是冗余了一个完整的快照么?这个值得学习了解。 如果了解了的话,简单说,MVCC是利用了ReadView
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,
MySQL 主从同步和binlog应用
MySQL 主从/主备 架构的数据同步机制是什么样的?binlog 记录的内容是什么?Redis等组件怎么使得数据和MySQL保证最终一致性? 二进制日志(binary log)
mysqldump 备份数据库
这里使用mysqldump备份成sql文件,非binlog形式,日常开发可能会应用到。 备份数据库 $ mysqldump -h192.168.1.100 -uuser -p123 --databases name > /tmp/databasedump.sql 备份数据库下的一个表–>sq
MySQL知识汇总
1.一条SQL查询语句是如何执行的 MySQL的逻辑架构图 大体来说,MySQL可以分为Server层和存储引擎层两部分。 连接器 连接器负责跟客户端建立连接、获取权限
Tag: 算法
KMP算法
算法介绍 KMP字符串匹配算法。 移动位数 = 已匹配的字符数 – 对应的部分匹配值 《部分匹配表》怎么得出 两个概念:”前缀”和”后缀”: “前缀”指除了最后一个字符以外,一个
LRU算法
LRU介绍 LRU(Least Recently Used)最近最少使用算法,通常在缓存策略中使用。操作系统在内存管理中,对页的置换有应用这一算法。 通常缓存空间有限,因此当空间满的
回溯算法之排列组合
回溯算法特点 回溯算法是一种暴力穷举算法 穷举的过程是遍历一颗多叉树的过程 回溯算法的框架和多叉树遍历相似 回溯算法框架 List<Value> result; void backtrace(路径, 选择列表) { if (
图的最短路径 Dijkstra 算法
图如果不带权重,计算最短路径用BFS,队列的数据结构就够了,如果带权重(负权不能使用dijkstra)的话可以使用优先队列的数据结构。放邻接点的时候,哪个权重小
图的遍历:广度优先 BFS 和深度优先 DFS
图的两种遍历方式 如题,图的广度优先和深度优先遍历。和二叉树的广度优先遍历类似都利用队列先进先出的特点,不同点在于,二叉树的BFS不需要记录节点是否遍历过,但图会
常见算法题目
链表 链表典型问题参考 逆序遍历链表 简单一个递归,先递归再取值 public static void reverseTraverse(Node node) { if (node == null) { return ; } reverseTraverse(node.next); System.out.println(node.value); } 删除倒数第N个节点 和逆序遍历链表一个思路。递归处理,就是反转了,i+
最优解问题:0-1背包
问题 问题描述 一个可放总重量为 W 的背包和 N 个物品。每个物品,有重量 w 和价值 v 两个属性,那么第 i 个物品的重量为 w[i],价值为 v[i]。现在用这个背包装物品,问最多
最优解问题:找零钱
问题 问题描述 给定 n 种不同面值的硬币,有一个总金额 k,计算出最少需要几枚硬币凑出这个金额k ?每种硬币的个数不限。如果没有任何一种硬币组合能组成总金额时,返回 -1。
Tag: 线程模型
Kafka server的线程模型与网络模型
Kafka 的标签高吞吐、高并发、高可扩展等等,为什么它有这么好的性能,我们看看它的server 线程模型和网络模型。 Kafka 性能为什么这么好 Kafka 有着高吞吐、高并发的特性,是什么支
nginx的线程模型与网络模型
众所周知了,nginx一般用来当作HTTP服务器、反向代理、负载均衡器,其有着强悍的性能。 PHP服务早期还是LAMP架构,后来apache被nginx替代,变成
php-fpm进程模型与进程池隔离优化
本文主要想记录优化线上502问题,包括采用进程池隔离的手段。借这个事,我们把php-fpm的线程模型梳理下,PHP开发的同学,这是必须要掌握的。 php-fpm 进程模型 php
Redis的线程模型与网络模型
为什么总听说Redis是单线程,还性能这么强? 答案通常是Redis基于内存,且采用Reactor事件驱动模型,且数据结构的精心设计。 在Redis4.0,作者增加
Tag: 网络
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,意味
传输层TCP三次握手四次挥手-tcpdump抓包ftp应用
通过tcpdump抓包ftp应用(port 21),我们来了解下传输层TCP的三次握手和四次挥手,数据包是什么样的。 准备工作 机器上未安装tcpdump的,先安装下
网络层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
Tag: 设计模式
设计模式:单例模式与线程安全
模式说明 单例模式,顾名思义,JVM全局下某Class只有一个实例对象。 使用场景 一个全局使用的类避免频繁地创建与销毁,节省系统资源。 理解重点 构造函数私有 统一访问入
设计模式:策略+工厂+模板方法 混合使用
模式说明 策略工厂: 策略模式+工厂模式 工厂模式用来生成策略 模板方法 模板方法里组装策略方法 使用场景 策略模式 自然要求是 完成一件事情,其间有不同的业务场景区分。 工厂模式
设计模式:装饰器模式应用
模式说明 装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为
设计模式:责任链、观察者模式在Spring下的应用
模式说明 责任链模式: 本本上的定义,责任链模式避免了请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到
Tag: 软素质
快速入门一个分布式组件
经验分享 要快速入门一个组件或者技术怎么比较高效,凭自己这些年的经验,有以下一些心得或者建议:(以一个分布式组件为例) 先清楚它生来是要解决什么问题的 出现的背景是什
晋升原则
三条晋升的核心原则: 主动原则 第一条原则是主动原则,主动做事的人,比等着别人安排的人更容易晋升。所以你应该定期或者不定期地主动找主管沟通,交流关于工作任务的想法和
良好的工作习惯
良好的工作习惯都有哪些?工作很多年都并没有总结的很好,最近浏览到知乎上有个博主的总结,很有感触,摘下来自勉。 做事 【1】一定要清楚自己工作的核心内容 逻辑清晰 体现价
Tag: 金融
股票、债券、基金、期货概念和区别
股票 从企业的角度 股票是上市公司为筹集资金发行给各个股东作为持股凭证的一种有价证券。 参考股票的历史 荷兰商船。 从投资者的角度 股票投资是投资者购买上市公司发行的股票,
金融概念
M2 货币 反应货币供应量 普遍定义 M0 = 流通中的现金 M1 = M0 + 商业银行活期存款,称为狭义货币供应量,又称狭义货币。 M2 = M1 + 商业银行定期存款,称为广义货币供应量,又称广义货