自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(141)
  • 收藏
  • 关注

原创 Restful API 请注意 HTTP 动词描述操作的幂等性

幂等性是一个老生常谈的话题,但是往往容易被大家忽略面试时当问到 POST 请求和 GET 请求有什么区别的时候,很多人往往可以巴拉巴拉说一大堆,但是往往容易忘记了在 Restful API 中 GET是幂等的而 POST 不是而这被大家忽略的一点往往会造成一些很大的影响比如我们的一个提交订单的API,如果我们不做幂等性检查,就可以导致数据库同时生成两份订单,而这在线上是一个十分致命的问题...

2020-01-01 23:56:39 476

原创 centos8 安装 flink 并测试 wordcount

开发环境和所需软件centos 8javaflink安装 flink我们选择安装的是 flink 目前的最新版本 1.9 版本 , 安装前请保证 java 已经正常安装检查 java 是否安装[vagrant@3b5a73745ce45650 ~]$ java -versionopenjdk version "1.8.0_232"OpenJDK Runtime Envir...

2019-12-26 00:46:28 931

原创 centos8 安装 kafka 并使用 supervisor 守护 kafka 进程

首先我们需要的软件机环境如下centos 8javakafkasupervisor首先我们需要先下载 java ,因为 kafka 运行需要 jdk 环境,其次我们需要下载 kafka 的二进制包,最后安装supervisor 守护 kafka 的进程安装的主要命令依次如下cd ~yum install javawget http://mirrors.tuna.tsing...

2019-12-25 00:34:40 2777

原创 go 封装 ActiveMq,并实现 topic 和 queue 的生产和消费

go 封装 ActiveMq,并实现 topic 和 queue 的生产和消费需要了解的基础知识总所周知 activemq 有两种消息传递类型分别为queue Point-to-Point,点对点通信模型,即一个生产者对应一个消费者topic publish-and- subscribe,发布订阅模型,一个生产者可根据订阅向多个消费者推送数据go 连接 activemq 的...

2019-12-15 02:25:56 1375 1

原创 centos7 yum 安装最新版本 docker

安装docker的过程使用命令 uname -a 检查 linux 内核版本是否大于 3.8[vagrant@centos7 ~]$ uname -aLinux centos7 3.10.0-957.12.2.el7.x86_64 #1 SMP Tue May 14 21:24:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux更新 yum 源...

2019-11-21 00:15:50 1999

原创 使用 Vagrant 打包并运行本地开发环境

使用工具Virtualbox免费开源的虚拟机软件,使用它可以快速生成虚拟机Vagrant基于Ruby的工具,用于创建和部署虚拟化开发环境Git使用Git for Windows 来作命令行工具...

2019-08-18 23:55:05 946

原创 centos7 安装 kafka 2.3.0 并配置集群

安装 java 11 sudo yum -y install java-11-openjdk*https://download.oracle.com/otn/java/jdk/8u221-b11/230deb18db3e4014bb8e3e8324f81b43/jdk-8u221-linux-arm64-vfp-hflt.tar.gz?AuthParam=1565633728_5599ff...

2019-08-14 01:15:08 1183

原创 使用 Vagrant 和 Virtualbox 快速搭建服务器集群

使用工具Virtualbox免费开源的虚拟机软件,使用它可以快速生成虚拟机Vagrant基于Ruby的工具,用于创建和部署虚拟化开发环境Git使用Git for Windows 来作命令行工具Centos服务器集群基于centos,需要在 vagrant 官网下载centos 的 box搭建步骤创建 Vagrantfile鼠标右键点击桌面,选择 git bash 进...

2019-08-11 23:51:33 705

原创 比 json 快 10 倍的的msgpack

json 和 msgpack 都是非常优秀的序列化格式,下面我们将简单的对比一下两者的性能使用语言 python 2.7序列化数据类型:大小为 30 m 左右的 dict测试过程,先伪造 20w 个元素的 dict然后将 dict 序列化存入文本,读取文本数据进行反序列化msgpack序列化 耗时 0.196000099182反序列化 耗时 0.092999935...

2019-07-12 21:16:57 770

原创 浅谈CAP理论

CAP 则是分布式系统的三要素 ,分别是一致性 Consistency可用性 Availability分区容错性 Partition toleranceABC一个简单的分布式系统架构如上图,serve端 一共由B,C组成,client端为 A下面我们来简单谈一下什么是CAP?一致性 Consistency可以理解为如果我写了一个值就一定可以读到这个值,不管是从分...

2019-01-16 19:22:10 256

原创 Innodb 自适应哈希索引的优缺点

名称自适应哈希索引适合使用场景适合使用 = 和 IN 操作符的等值查询不合适场景不适合使用 like 和 % 的范围查询和高并发的joins优点提高了Innodb的内存使用率和一些情况下二级索引的查询效率缺点占用Innodb的内存缓存,使用了 lacth 锁保护内存中的hash结构mysql 术语列表中对自适应哈希索引的解释AHI 自适应哈...

2019-01-16 18:10:20 4100

原创 标准SQL事务隔离级别与Mysql事务隔离级别的区别与实现

标准SQL的事务隔离级别事务隔离级别脏读不可重复读幻读读未提交(read-uncommitted)是是是不可重复读(read-committed)否是是可重复读(repeatable-read)否否是串行化(serializable)否否否Mysql 的事务隔离级别事务隔离级别脏读不可重复读幻读...

2019-01-15 18:52:12 376

原创 Go 语言实现堆排序与快速排序

go 语言实现堆排序package mainimport ( "fmt")func buildHeap(arr []int) { length := len(arr) for i := (length / 2) - 1; i >= 0;

2019-01-11 18:57:00 476

原创 Mysql 实现主从强一致性和高可用性

在一些对数据有强一致性要求的应用中,数据库宕机导致数据丢失是我们一定要避免的情况。所以保证数据的一致性对我们而言非常重要。如何做到主从的强一致性呢?在单机数据库中为了保证事务更新操作不会丢失会使用 WAL 日志优先(Write-Ahead-Logging)技术WAL 的实现其实非常简单,即事务提交时,保证将事务产生的日志先刷到磁盘上,若事务跟新失败,则通过日志可以回滚同理...

2019-01-04 18:20:22 9287 9

原创 浅谈 Mysql 事务 由 ACID 到 MVCC

在 Mysql 的并发控制中我们常常需要使用到 锁 和 MVCC,那么这两者的使用场景有什么区别呢,为什么有了锁还要引入 MVCC 呢?下面我将为大家娓娓道来这两者使用上的区别Mysql 的锁由 共享锁(读锁) 和 排它锁(写锁) 组成按粒度也可以分为表锁和行锁加锁和解锁遵循 2PL 即 两阶段锁原则2PL就是将加锁/解锁分为两个完全不相交的阶段。加锁阶段:只加锁,不放锁。解锁阶段:只放...

2019-01-02 19:58:24 603

原创 ACID 和 CAP 一致性的区别

ACID 代表数据库的四个基本要素,分别是原子性 Atomicity一致性 Consistency隔离性 Isolation持久性 DurabilityCAP 则是分布式系统的三要素 ,分别是一致性 Consistency可用性 Availability区分容错性 Partition tolerance数据库 ACID 的一致性,我们又称之为内部一致性...

2019-01-02 13:39:54 2557

原创 二叉树非递归遍历

<?phpClass BTNode // 节点类{ public $data; public $lChild; public $rChild; public function __construct($data = null) { $this->data = $data;...

2018-12-06 16:45:42 184

原创 Go 的面试基础算法(一)

查找数据库字段中重复的数据 SELECT grade FROM user GROUP BY grade HAVING COUNT(*)>1;

2018-12-06 16:45:20 1517

原创 leetcode 经典面试题之链表 (2. 两数相加)

两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 单位 数字。如果,我们将这两个数起来相加起来,则会返回出一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)

2018-12-06 16:45:09 418

原创 leetcode 经典面试题之链表(19. 删除链表的倒数第N个节点)

删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。func removeNthFr

2018-12-06 16:44:43 165

原创 Go websocket 聊天室的详细实现和详细分析

package mainimport ( "encoding/json" "fmt" "net/http" "github.com/gorilla/websocket" "github.co

2018-10-25 18:00:58 9056 5

原创 Go websocket 做消息推送(视频弹幕的简单实现原理)

server.gopackage mainimport ( "github.com/gorilla/websocket" "net/http" "socket/impl" "time")var ( upGrader

2018-10-24 18:27:30 1968 2

原创 Go 关闭 channel 的 close 方法

在 Go 中我们所以 close() 来关闭一个 channel官方的注释如下The close built-in function closes a channel, which must be either bidirectional or send-only.It should be executed only by the sender,never the receiver, ...

2018-10-23 17:58:41 7234 1

原创 Go 缓冲 channel 和 非缓冲 channel 的区别

在Go中我们make一个channel有两种方式,分别是有缓冲的和没缓冲的缓冲channel 即 buffer channel 创建方式为 make(chan TYPE,SIZE)如 make(chan int,3) 就是创建一个int类型,缓冲大小为3的 channel非缓冲channel 即 unbuffer channel 创建方式为 make(chan TYPE)如 ...

2018-10-23 13:35:44 10003 2

原创 Go 如何让函数只能被调用一次

某些时候我们会有让函数只能被调用一次的需求完成这个功能可以使用 Go 的 sync.Once 方法package mainimport ( "fmt" "sync")type SayHello struct { once sync.Once}func (sayHello *SayHello) print() { sayHello.once.Do(func() { ...

2018-10-22 18:42:08 4616

原创 Go 数据的类型及默认值

Go语言将数据类型分为四类:基础类型、复合类型、引用类型和接口类型基础类型整形有符号整形 int8 int16 int32 int64 默认值 0无符号整形 uint8 uint16 uint32 uint64 默认值 0特殊整形 int uint byte rune uintptr 默认值 0浮点型浮点型数 float32 float64 默认值 0...

2018-10-18 16:28:04 10158 1

原创 Go 的 rune byte 和 string

rune 、 byte 和 string 都是 Go 的内置类型bytebyte是uint8的别名,在所有方面都等同于uint8按惯例,它用于区分字节值和8位无符号整数值。runerune是int32的别名,在所有方面都等同于int32按惯例,它用于区分字符值和整数值。stringstring是所有8位字节字符串的集合,通常但不一定代表UTF-8编码的文本...

2018-10-12 17:23:45 1281

原创 beego API开发入门教程

下载 beego下载 beego 前,需要做好如下准备安装好 golang 语言在系统变量中配置 GOPATH、GOBIN安装好 git下载 beego 安装包 go get github.com/astaxie/beego下载 bee 工具 go get github.com/beego/bee使用 git 进入$GOPATH/src使用命令 bee version...

2018-10-09 14:44:56 10970 6

原创 Go 指针声明后赋值,出现 panic: runtime error: invalid memory address or nil pointer dereference

在 golang 中如果我们定义一个指针并像普通变量那样给他赋值,例如下方的代码package mainimport "fmt"func main() { var i *int *i = 1 fmt.Printf("%p %v", &i, *&

2018-10-08 14:57:42 109141 3

原创 Go struct 类型的 map 结构体成员不能修改的问题

错误示例刚刚上手,我们都会习惯性的向下面这样赋值 ,示例如下package mainimport "fmt"type person struct { name string age int sex string}func main() { //建立结构体map s := make(map[int]person) //给map赋值 s[1] = pe...

2018-09-21 17:42:30 10023

原创 Laravel 使用 RabbitMQ 消息队列消费邮件

Laravel 使用 RabbitMQ 消息队列消费邮件准备工作 (这里默认你的 RabbitMQ 和 Laravel 已经安装完毕)安装 php-amqplib 在项目目录下运行composer require php-amqplib/php-amqplib封装 RabbitMQ 的基本操作<?phpnamespace App\Components;u...

2018-09-19 21:13:08 2280 2

原创 php 单点登录中 AES加密

单点登录在中的用户密码采用AES 128加密,加密模式为CBC填充模式为:PKCS5Padding(当待加密内容的不足分组长度时以最后一下字节填充)密码为16个字节,长于16个字节取前16个字节,不足时补充空字符向量IV同密码,固定为16个字节,加密后输出为全16进制字符,字符集为UTF-8明文:abc ,密码:347c6161e79f4b6a8873202dd5fe7e...

2018-09-10 17:56:11 474 1

原创 基于 Gin 的会议室预约 API 设计 (二)

会议室预约功能模块大概可以分为三大部分预约模块黑名单模块日志模块预约模块请求占用时间表,验证请求时间是否被占用,没有则进行第2步,有则返回失败创建预约,并将请求写入操作日志向占用时间表插入数据假设用户选中 2018-08-30 08:00~09:00 的时间在一号会议室开会在创建订单的时候我会先从占用时间表 used_time 查找 一号会议...

2018-08-30 16:57:20 471 1

原创 mysql 验证出 bug 的经历

本人之前做了一个简单的会议预约系统逻辑非常的简单建立用户占用时间表 used_time和会议预约表 meeting_books规定会议时间以半小时为单位,最长不得超过两个小时用户每预定一个时间我就会向占用时间表里插入时间比如预定 08:00~09:00 我就会向占用时间表插入 08:00 和08:3008:00 和08:30 代表的是时间段的含义,是08:00~08:30和 08:...

2018-08-29 11:43:49 350

原创 php 堆排序

<?phpfunction heapSort(&$arr){ $length = count($arr); buildHeap($arr); $heapSize = $length - 1; for ($i = $heapSize; $i >= 0; $i--) { list($arr[0], $arr[$heapSize]...

2018-08-24 18:30:43 161

原创 Redis 常用类型和操作之 string

string 类型SET 赋值 127.0.0.1:6379> SET bar 1OK设置 string类型的键 bar 且赋值为 1GET 取值127.0.0.1:6379> GET bar"1"INCR 递增数字127.0.0.1:6379> INCR num(integer) 1127.0.0.1:6379&amp

2018-08-17 17:30:26 123

原创 Mysql 生成亿级测试数据

mysql> call proc1;Query OK, 0 rows affected (4 min 47.15 sec)mysql> select count('id') from card;+-------------+| count('id') |+-------------+| 10000000 |+-------------+1 row in set ...

2018-07-31 16:41:37 1817 2

原创 基于 Gin 的会议室预约 API 设计 (一)

基于 Lumen 的会议室预约 API 设计基本功能设计设计分为手机mobile端和电脑pc端在会议室张贴二维码,手机扫描二维码即可加入手机预定页面手机端只能进行会议室的预约和查看个人预约情况电脑端即可以预约,也可以登陆管理员账号,管理预约请求只能在整点和半点进行预约,每次会议最小时间为半小时,最大为两小时数据库设计一个建立四张表(这里不建立用户表,大家根据需求可...

2018-07-18 16:23:58 899 1

原创 vim 命令使用小结

90,170s/empty/isset/g vim把90到170行的empty全部换成isset104,114 copy 114 vim把104到114行间的内容拷贝到114行下面

2018-07-13 09:49:50 237

原创 mysql 面试基础操作

今天刚刚面试了陌陌

2018-06-13 23:59:02 246

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除