2020年5月22日

go基础第一篇:defer、select、range

摘要: defer defer用于延迟函数的调用,每次defer都会把一个函数压入栈中,函数返回前再把延迟函数取出并执行。 题目1: func main() { test1() } func test1() { var aInt = 1 defer fmt.Println(aInt) aInt = 2 re 阅读全文

posted @ 2020-05-22 18:16 koushr 阅读(451) 评论(0) 推荐(0)

2020年3月22日

kafka基本概念

摘要: 1、主题 Kafka将一组消息抽象归纳为一个主题(topic),也就是说,一个主题就是对消息的一个分类。生产者将消息发送到特定主题,消费者订阅主题或主题的某些分区进行消费。 2、消息 消息是Kafka通信的基本单位,由一个固定长度的消息头和一个可变长度的消息体构成。每一条消息称为Record。 3、 阅读全文

posted @ 2020-03-22 13:33 koushr 阅读(369) 评论(0) 推荐(0)

2019年11月26日

grpc第四篇:grpc-go、grpc-java桩代码生成及服务端、客户端开发

摘要: 假设有一个proto文件,内容同https://github.com/grpc/grpc-go/blob/master/examples/helloworld/helloworld/helloworld.proto,如何生成golang或者java的桩代码? 生成golang桩代码: 1、安装pro 阅读全文

posted @ 2019-11-26 20:55 koushr 阅读(383) 评论(0) 推荐(0)

kafka副本同步机制

摘要: kafka的复制机制,既不是单纯的同步复制,也不是单纯的异步复制。同步复制要求所有的follower都复制完,这条消息才会被commit,这种复制方式对吞吐率影响较大。异步复制,数据只要被leader写入log就认为已经commit,这种情况下,如果follower都还没有复制完,leader突然宕 阅读全文

posted @ 2019-11-26 18:44 koushr 阅读(274) 评论(0) 推荐(0)

2019年8月29日

grpc第一篇:What is gRPC

摘要: 本文将介绍gRPC和protocol buffers。gRPC可以利用protocol buffers作为其接口定义语言(Interface Definition Language,IDL)和信息交换格式。 预览 在gRPC中,一个客户端应用可以直接调用不同机器上的服务端应用的方法,就好像调用本地方 阅读全文

posted @ 2019-08-29 11:39 koushr 阅读(223) 评论(0) 推荐(0)

2019年7月3日

事务

摘要: ACID A是atomicity,原子性,事务内的操作要么全部完成,要么全部失败。通过undo log实现。 C是consistency,一致性。一致性是通过什么保证的? I是isolation,隔离性,多事务之间互不干扰。通过MVCC+锁实现。 D是durability,持久性,事务提交后,数据不 阅读全文

posted @ 2019-07-03 19:45 koushr 阅读(725) 评论(0) 推荐(0)

2019年6月18日

分布式锁

摘要: 分布式锁的使用场景是什么呢? 之前红包需求的时候,有一个场景要用到分布式锁。同一个openid,最多只能抢到一个子红包。 1、先判断这个openid在不在该红包对应的已抢openid hash中 String hget(String key, String field); 2、如果在,就返回。如果不 阅读全文

posted @ 2019-06-18 23:14 koushr 阅读(728) 评论(0) 推荐(0)

2019年6月2日

kafka服务端

摘要: kafka服务端的节点称为broker,一个kafka集群有多个broker。每个topic都可以有多个分区,每个分区都可以有多个副本。broker数、分区数、副本数随时可以扩容,这是典型的分布式多副本冗余机制。 通过zookeeper从各broker中选出一个作为controller,contro 阅读全文

posted @ 2019-06-02 18:51 koushr 阅读(4529) 评论(0) 推荐(0)

2018年8月15日

linux基础第二篇:TCP SOCKET的状态

摘要: 建立TCP连接的三次握手: 1、client向处于LISTEN状态的server发送SYN后,变为SYN_SENT状态。 2、server收到SYN后,变为SYN_RECV状态,并向client返回SYN_ACK。 3、client收到SYN_ACK后,变为ESTABLISHED状态,并向serve 阅读全文

posted @ 2018-08-15 20:31 koushr 阅读(4903) 评论(0) 推荐(0)

2018年7月19日

linux基础第一篇:ss、lsof、watch命令使用

摘要: ss ss命令和netstat命令的作用一样,参数也差不多,比netstat快。 ss是Socket Statistics的缩写,意思是套接字统计。 lsof lsof -i:8080 watch watch -n 1 'free -h' 每隔1s执行一次命令 echo $? 会打印上一个命令的执行 阅读全文

posted @ 2018-07-19 09:13 koushr 阅读(580) 评论(0) 推荐(0)

2018年6月15日

lua基础第一篇:and、or运算

摘要: lua中的and和or,虽说是逻辑运算符,但他们返回的不是布尔值,而是操作数本身: a and b:如果a为false或nil,会返回a,否则返回b。 a or b:如果a为非nil且非false,会返回a,否则返回b。 阅读全文

posted @ 2018-06-15 18:44 koushr 阅读(206) 评论(0) 推荐(0)

2018年6月7日

case when使用

摘要: case when可以用在select后面,也可以用在order后面,也可以用在update后面。 case when语法: case when condition1 then result1 when condition2 then result2 when conditionn then res 阅读全文

posted @ 2018-06-07 21:03 koushr 阅读(647) 评论(0) 推荐(0)

sql笔试题

摘要: 题目一、表t_score,数据如下 name subject score 张三 语文 81 张三 数学 75 李四 语文 76 李四 数学 90 王五 语文 81 王五 数学 100 王五 英语 90 对应ddl及dml语句如下: CREATE TABLE `t_score` ( `id` int 阅读全文

posted @ 2018-06-07 16:54 koushr 阅读(202) 评论(0) 推荐(0)

2017年12月17日

case when语法以及与group by的配合使用

摘要: 一:case when语法: case when有两种语法: 语法1: case 某字段 when 值1 then 伪值1 when 值2 then 伪值2 ...... else 伪值n end 注意,when之间没有任何标点符号,且最后要以end结尾,否则会报语法错误。 如有一种常见情况是,数据 阅读全文

posted @ 2017-12-17 17:58 koushr 阅读(7015) 评论(0) 推荐(0)

2017年10月28日

kafka消费者组、消费者

摘要: 一个消费者组可能有一个或者多个消费者。一个消费者组可以订阅一个或者多个主题。 主题的某一个分区只能被消费者组的某一个消费者消费,不能被同一个消费者组的多个消费者消费。一个消费者组的一个消费者可以消费一个主题的多个分区。 那么分区和消费者之间是如何对应的呢? 假设消费者组cg1(group.id=cg 阅读全文

posted @ 2017-10-28 18:40 koushr 阅读(1156) 评论(0) 推荐(0)

单链表和双链表

摘要: 单链表英文是singly-linked list,双链表英文是doubly-linked list。 单链表的头结点、尾节点有数据吗? 双链表的头节点、尾节点有数据吗? 其实自己搞混了一个概念,头结点和头指针的概念。 阅读全文

posted @ 2017-10-28 18:30 koushr 阅读(291) 评论(0) 推荐(0)

2017年9月7日

随机id算法

摘要: 雪花算法 https://github.com/bwmarrin/snowflake 返回一个64位整数。 阅读全文

posted @ 2017-09-07 01:29 koushr 阅读(1661) 评论(0) 推荐(0)

2017年9月4日

sql语句中开窗函数的使用

摘要: postgresql和8.0版本之后的mysql,均支持开窗函数。 开窗函数主要分为两类: 一、排序函数: row_number() over(partition by xxx order by yyy) partition by xxx 表示按照xxx字段分区(分区就是分组的意思),如果没有par 阅读全文

posted @ 2017-09-04 00:11 koushr 阅读(3344) 评论(0) 推荐(1)

2017年8月6日

mysql一些概念

摘要: buffer pool,缓存池,Innodb引擎缓存数据和索引的内存区域,默认128M。可在mysql命令行客户端执行show variables like 'innodb_buffer_pool_size' 查看。如果可用内存很大,如GB级,那么可以创建多个buffer pool(设置innodb 阅读全文

posted @ 2017-08-06 18:35 koushr 阅读(225) 评论(0) 推荐(0)

2017年7月23日

redis基础第一篇:一些遗漏命令

摘要: pipeline 如果想连续执行多个redis命令,且后面的命令不依赖于前面命令的结果,则可以把这些命令用pipeline包起来,从而只向redis服务器发起一次情求,在响应中获取所有命令的执行结果,这样可以节省请求响应的往返时间RTT,在应用服务器和redis服务器非局域网时效果尤其显著。 pip 阅读全文

posted @ 2017-07-23 02:11 koushr 阅读(1169) 评论(0) 推荐(0)

2017年6月11日

rpc核心

摘要: 被面试官问过这样一个问题:“假如要你实现一个rpc框架,客户端和服务端你要考虑哪些东西?” rpc框架负责屏蔽底层的传输方式(tcp或者udp)、序列化方式(xml/json/二进制)和通信细节,服务调用者可以像调用本地接口一样调用远程服务,而不需要关心底层通信细节和调用过程。 rpc的组件一般有服 阅读全文

posted @ 2017-06-11 16:16 koushr 阅读(251) 评论(0) 推荐(0)

2017年5月24日

RPC简介

摘要: RPC(Remote Process Call Protocol),远程过程调用协议,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。 RPC采用客户机/服务器模式,请求程序就是一个客户机,而服 阅读全文

posted @ 2017-05-24 14:26 koushr 阅读(563) 评论(0) 推荐(0)

2017年5月14日

分布式一些概念

摘要: 分布式系统定义: 分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。 分布式系统一些典型的问题: 通信异常: 分布式系统需要在各个节点之间进行网络通信,因此每次网络通信都会伴随着网络不可用的风险,比如说光纤被挖断了。另外,即使分布式系统各节点之间的 阅读全文

posted @ 2017-05-14 00:50 koushr 阅读(394) 评论(0) 推荐(0)

2017年4月28日

树、二叉树、二叉搜索树、平衡二叉树、B树、B+树、红黑树

摘要: 一、树 Tree 树是n个结点的有限集。n=0时称为空树。在任意一棵非空树中:①有且仅有一个根结点;②当n>1时,其余结点可分为m个互不相交的有限集,其中每一个集合本身又是一棵树,称为根的子树。 结点的分类 结点拥有的子结点的个数称为结点的度。度为0的结点称为叶结点。度不为0的结点称为分支结点。树的 阅读全文

posted @ 2017-04-28 11:12 koushr 阅读(712) 评论(0) 推荐(0)

2016年10月23日

git第二篇:CI/CD

摘要: 我们可以利用gitlab自带的CI/CD来让代码在提交后自动编译部署。 按以下步骤实施即可: 1、在项目根目录中新建.gitlab-ci.yml文件,内容示例如下: stages: - build - package - deploy go-build: image: golang:1.23.1-b 阅读全文

posted @ 2016-10-23 18:49 koushr 阅读(4011) 评论(0) 推荐(0)

2016年10月16日

nginx基础第三篇:长连接的设置

摘要: 考虑一个最常见的场景,client->nginx->upstream 1、client与nginx建立长连接,nginx需要如何配置? nginx默认与client保持长连接。 https://nginx.org/en/docs/http/ngx_http_core_module.html#keep 阅读全文

posted @ 2016-10-16 15:13 koushr 阅读(367) 评论(0) 推荐(0)

2016年4月11日

tcp第二篇:四次挥手

摘要: 客户端和服务端都可能主动关闭连接。 第一步:主动方向被动方发送FIN,关闭主动方到被动方的数据传输,主动方进入FIN_WAIT_1状态。 第二步:被动方向主动方发送ACK,被动方进入CLOSE_WAIT状态,主动方进入FIN_WAIT_2状态。 第三步:被动方向主动方发送FIN,关闭被动方到主动方的 阅读全文

posted @ 2016-04-11 19:34 koushr 阅读(372) 评论(0) 推荐(0)

2016年3月16日

nginx基础第三篇:location配置

摘要: 配置location root、alias nginx指定文件路径有root和alias两种方式,这两种方式的区别在于nginx如何解释location后面的uri。root的处理结果是root路径+location路径,alias的处理结果是使用alias路径替换location路径。root可用 阅读全文

posted @ 2016-03-16 20:00 koushr 阅读(1063) 评论(0) 推荐(0)

nginx第二篇:在日志中打印请求体和响应

摘要: nginx默认是不在access.log中打印请求体的,需要自定义配置。使用nginx自带的request_body变量即可,这样经proxy_pass转发的请求,就能在日志中打印出请求体了。但是中文会被转义,可以使用log_escape_non_ascii取消转义。但是请求体中的双引号会被转义成\ 阅读全文

posted @ 2016-03-16 15:38 koushr 阅读(607) 评论(0) 推荐(0)

2016年3月14日

零拷贝

摘要: 应用程序在访问磁盘文件时,会先利用DMA(全称是Direct Memory Access,中文翻译为直接存储器访问)技术把文件内容读取到内核缓冲区,然后再把内容从内核缓冲区copy到用户缓冲区中。如果程序要输出,则会先把用户缓冲区的内容copy到内核的socket缓冲区中,再利用DMA输出。以下是原 阅读全文

posted @ 2016-03-14 17:57 koushr 阅读(1836) 评论(0) 推荐(0)

2015年8月7日

布隆过滤器

摘要: 参考https://juejin.im/post/5de1e37c5188256e8e43adfc 什么是布隆过滤器? 布隆过滤器本质上是一个很长的位数组和一系列哈希函数。位数组元素一开始全是0。往布隆过滤器里放元素时,假如有n个哈希函数,则先用这n个哈希函数处理元素,得到n个数字,然后把数组对应索 阅读全文

posted @ 2015-08-07 19:27 koushr 阅读(288) 评论(0) 推荐(0)

nginx第一篇:各种坑

摘要: 1、在nginx配置跨域 关于跨域的讲解,阮一峰写的很好https://www.ruanyifeng.com/blog/2016/04/cors.html 在浏览器页面访问,跨域时,在控制台会有提示,如 Access to XMLHttpRequest at 'https://backend_dom 阅读全文

posted @ 2015-08-07 15:26 koushr 阅读(742) 评论(0) 推荐(0)

2015年7月25日

git第一篇:常用命令

摘要: 设置用户名和邮箱: git config --global user.name "koushr" git config --global user.email "xxx@qq.com" 创建ssh key: ssh-keygen -t ed25519 -C "xxx@qq.com" -t是配置加密算 阅读全文

posted @ 2015-07-25 15:28 koushr 阅读(355) 评论(0) 推荐(0)

导航