12 2020 档案
摘要:1. 默认字符集由latin1变为utf8mb4 在8.0版本之前,默认字符集为latin1,utf8指向的是utf8mb3,8.0版本默认字符集为utf8mb4,utf8默认指向的也是utf8mb4。 注:在Percona Server 8.0.15版本上测试,utf8仍然指向的是utf8mb3,
阅读全文
摘要:怎样防伪装攻击 防伪装攻击:即防止接口被其他人调用,此阶段可以理解为比如已经登录了,然后在请求其他接口的时候,通过Token授权机制来判断当前请求是否有效 Token是客户端访问服务端的凭证。 Token授权机制 用户用密码登录或者验证码登录成功后,服务器返回token(通常UUID)给客户端,并将
阅读全文
摘要:Innodb中如何解决 可重复读(RR) 中产生幻读的情况 锁模型 LBCC (Lock Based Concurrency Control) 读之前加个锁,但这样可能会导致性能问题 => 读的时候加锁导致其他事务都不能读写了,性能低下 MVCC(Multi Version Concurrency
阅读全文
摘要:在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL
阅读全文
摘要:show status like '%Handler_read%'; + + + | Variable_name | Value | + + + | Handler_read_first | 0 | | Handler_read_key | 0 | | Handler_read_last | 0 |
阅读全文
摘要:为什么用分布式锁? 系统 A 是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会给用户下单。 由于系统有一定的并发,所以会预先将商品的库存保存在 Redis 中,用户下单的时候会更新 Redis 的库存。 此时系统架构如下:
阅读全文
摘要:更新语句的整体流程 连接数据库 清空当前表对应的所有缓存 分析器分析词法和语法 优化器决定使用什么索引 执行器负责具体执行 重要的日志模块:redo log MySQL的WAL技术 全称是Write-Ahead Logging InnoDB 引擎特有的日志 先写日志,再写磁盘 详解如下: 1、当有一
阅读全文
摘要:随着业务越来越复杂,应用服务都会朝着分布式、集群方向部署,而分布式CAP原则告诉我们, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得 兼。 很多场景中,需要使用分布式事务、分布式锁等技术来保证数据最终一致性。
阅读全文
摘要:什么是WebRTC WebRTC是一个由Google发起的实时通讯解决方案,其中包含视频音频采集,编解码,数据传输,音视频展示等功能,我们可以通过技术快速地构建出一个音视频通讯应用。 虽然其名为WebRTC,但是实际上它不光支持Web之间的音视频通讯,还支持Android以及IOS端,此外由于该项目
阅读全文
摘要:要想让任何WebRTC服务正常的工作,你需要如下几条后端服务器:1. 信令服务器:对于联接浏览器之前的对话来说,最重要的就是某种中介器—一个了解通话双方端点的服务器。这就是信令服务器,负责协商会话,而且可能是最接近WebRTC服务器的东西了。通常,这个服务器也会穿过会话发送相关数据。信令服务器可以实
阅读全文
摘要:基本原理 Docker利用Linux中的核心分离机制,例如Cgroups,以及Linux的核心Namespace(名字空间)来创建独立的容器。一句话概括起来Docker就是利用Namespace做资源隔离,用Cgroup做资源限制,利用Union FS做容器文件系统的轻量级虚拟化技术。Docker容
阅读全文
摘要:ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 事务的(ACID)特性是由关系数据库管理系统(RDBMS,数据库系统)
阅读全文
摘要:Slice 切片即动态数组,可以动态扩容改变数组的容量. golang 的 slice 底层结构如下所示,它是一个结构体,里面包含了指向数组的地址,并通过 len、cap 保存数组的元素数、容量: type slice struct { array unsafe.Pointer // 指向数组的指针
阅读全文
摘要:Golang的读写锁的实现 结构体 type RWMutex struct { w Mutex // held if there are pending writers writerSem uint32 // 用于writer等待读完成排队的信号量 readerSem uint32 // 用于rea
阅读全文
摘要:互动直播与单向直播虽然都是“直播”,都属于音视频技术领域,但在行业发展上却有着很大的不同。互动是双向的,在专业上属于视频通信技术领域,而目前传统的直播属于流媒体传输技术领域。是不是从现有的成熟的CDN技术,可以很快做出一套完整的互动直播方案呢?答案是否定的。
阅读全文
摘要:将 value 强制转换为已知类型 我们可以通过 ValueOf 拿到了内存中实际的值,从原理上来说,只要通过强制类型转换,就可以将他转换为我们需要的类型了 转换为基本类型 Value 类型绑定了以下几种基本类型的转换方法: func (v Value) Bool() bool func (v Va
阅读全文
摘要:1、golang中反射最常见的使用场景是做对象的序列化(serialization,有时候也叫Marshal & Unmarshal) 例如,Go语言标准库的encoding/json、encoding/xml、encoding/gob、encoding/binary等包就大量依赖于反射功能来实现。
阅读全文
摘要:1.golang默认都是采用值传递,即拷贝传递 2.有些值天生就是指针,如slice、map、channel、function、pointer,即指针传递
阅读全文
摘要:下载文件时暂停后可以继续接着下载,在线看视频时可以随意拖动进度条,这些都是断点续传所实现的应用。http1.1支持Range属性从而实现断点续传,客户端在暂停时记录了已经下载的文件范围,当继续下载时就向服务器发送文件剩余的范围Range,服务器则根据客户端请求的范围Range返回相应文件的部分数据,
阅读全文
摘要:底层实现:数组+链表 常规寻址是对数组长度求余,如果冲突,使用链表。
阅读全文
摘要:1.手动终止 调用 runtime.Goexit() 来手动终止协程 goroutine作为Golang并发的核心,我们不仅要关注它们的创建和管理,当然还要关注如何合理的退出这些协程,不(合理)退出不然可能会造成阻塞、panic、程序行为异常、数据结果不正确等问题。 2.1 使用for-range退
阅读全文
摘要:1.channel+sync 2 ⽆缓冲channel和任务发送/执⾏分离来限制(协程池)
阅读全文
摘要:channel主要用于解决go程的同步问题以及协程之间数据共享问题。 goroutine运行在相同的地址空间,因此访问共享内存必须做好同步。goroutine奉行通过通信来共享内存,而不是共享内存来通信。
阅读全文