MySQL 入门(4):锁
摘要在这篇文章中,我将从上一篇的一个小例子开始,跟你介绍一下InnoDB中的行锁。在这里,会涉及到一个概念:两阶段加锁协议。之后,我会介绍行锁中的S锁和X锁,以及这两种锁的作用。但是我们会发现仅仅有行锁是不能解决幻读问题的,于是我会用例子的方式跟你介绍各种间隙锁。最后,我会聊一聊粒度更大的表级锁和库
MySQL 入门(3):事务隔离
摘要在这一篇内容中,我将从事务是什么开始,聊一聊事务的必要性。然后,介绍一下在InnoDB中,四种不同级别的事务隔离,能解决什么问题,以及会带来什么问题。最后,我会介绍一下InnoDB解决高并发事务的方式:多版本并发控制。1什么是事务说到事务,一个最典型的例子就是银行转账:假设A和B的余额都是100
MySQL 入门(2):索引
摘要在这篇文章中,我会先介绍一下什么是索引,索引有什么作用。之后会介绍一下索引的数据结构是什么样的,有什么优点,又会带来什么样的问题。在分析完数据结构后,我们可以根据这个数据结构,研究索引的用法,以及如何设计更高效的缓存。最后,我会对上一篇的内容进行补充,介绍changebuffer的作用以及分析c
MySQL 入门(1):查询和更新的内部实现
摘要在MySQL中,简单的CURD是很容易上手的。但是,理解CURD的背后发生了什么,却是一件特别困难的事情。在这一篇的内容中,我将简单介绍一下MySQL的架构是什么样的,分别有什么样的功能。然后再简单介绍一下在我们执行简单的查询和更新指令的时候,背后到底发生了什么。1MySQL结构在这一小节中,我
Golang Web入门(4):如何设计API
摘要在之前的几篇文章中,我们从如何实现最简单的HTTP服务器,到如何对路由进行改进,到如何增加中间件。总的来讲,我们已经把Web服务器相关的内容大概梳理了一遍了。在这一篇文章中,我们将从最简单的一个main函数开始,慢慢重构,来研究如何把API设计的更加规范和具有扩展性。1构建一个Web应用我们从最
Golang Web入门(3):如何优雅的设计中间件
摘要在上一篇文章中,我们已经可以实现一个性能较高,且支持RESTful风格的路由了。但是,在Web应用的开发中,我们还需要一些可以被扩展的功能。因此,在设计框架的过程中,应该留出可以扩展的空间,比如:日志记录、故障恢复等功能,如果我们把这些业务逻辑全都塞进Controller/Handler中,会显
Golang Web入门(2):如何实现一个RESTful风格的路由
摘要在上一篇文章中,我们聊了聊在Golang中怎么实现一个Http服务器。但是在最后我们可以发现,固然DefaultServeMux可以做路由分发的功能,但是他的功能同样是不完善的。由DefaultServeMux做路由分发,是不能实现RESTful风格的API的,我们没有办法定义请求所需的方法,也
Golang Web入门(1):自顶向下理解Http服务器
摘要由于Golang优秀的并发处理,很多公司使用Golang编写微服务。对于Golang来说,只需要短短几行代码就可以实现一个简单的Http服务器。加上Golang的协程,这个服务器可以拥有极高的性能。然而,正是因为代码过于简单,我们才应该去研究他的底层实现,做到会用,也知道为什么这么用。在本文中,
Golang入门(4):并发
摘要并发程序指同时进行多个任务的程序,随着硬件的发展,并发程序变得越来越重要。Web服务器会一次处理成千上万的请求,这也是并发的必要性之一。Golang的并发控制比起Java来说,简单了不少。在Golang中,没有多线程这一说法,只有协程,而新建一个协程,仅仅只需要使用go关键字。而且,与Java不
Golang入门(3):一天学完GO的进阶语法
摘要在上一篇文章中,我们聊了聊Golang中的一些基础的语法,如变量的定义、条件语句、循环语句等等。他们和其他语言很相似,我们只需要看一看它们之间的区别,就差不多可以掌握了,所以作者称它们为“基础语法”。在这篇文章中,我们将聊一聊Golang的一些语言特性,这也是Golang和其他语言差别比较大的地
Golang入门(2):一天学完GO的基本语法
摘要在配置好环境之后,要研究的就是这个语言的语法了。在这篇文章中,作者希望可以简单的介绍一下Golang的各种语法,并与C和Java作一些简单的对比以加深记忆。因为这篇文章只是入门Golang的第二篇文章,所以本文并不会对一些指令进行深挖,仅仅只是停留在“怎么用”的程度,至于“为什么是这样”,则涉及
Golang入门(1):安装与配置环境变量的意义
摘要在几年前学习Java的时候,环境的配置就会劝退一部分的初学者。而对于Golang来说,也需要从环境的配置开始学起。这一篇文章将从如何安装Golang开始讲起,随后将会提到Golang中的环境变量GOROOT和GOPATH的配置以及这两个环境变量起到什么样的效果。下面开始:安装和其他语言的安装类似