Ray's blog

Coding...


  • 归档

  • 分类

  • 标签

  • 关于

Golang map实现原理

发表于 2020-11-22 | 分类于 后端

map数据结构

在介绍map之前,先来看看它的数据结构,map实际上就是一个散列表,指向一堆桶buckets。通过哈希函数计算出key的值,然后再存储到每个桶bmap中,每个bmap可以存储 8 组键值对。为了加速hash定位桶,bmap里记录了tophash数组,记录了key的哈希高 8 位,通过比较不同键的哈希的高 8 位可以减少访问键值对的次数。

内部结构图:

结构图

阅读全文 »

Golang并发之Goroutine

发表于 2020-11-21 | 分类于 后端

1.介绍

Golang 中的并发指的是一个函数拥有独立于其他函数运行的能力,当创建一个goroutine时,Go 会将其视为一个独立的工作单元,然后会被调度到可用的逻辑处理器上执行。 Go 语言运行时的调度器能够管理所有的goroutine并为其分配执行时间。调度器是在操作系统之上的,将操作系统的线程与程序运行时的逻辑处理器绑定,并在逻辑处理器上运行goroutine。调度器在任何给定的时间,都会控制哪个goroutine在哪个逻辑处理器上执行。

Golang 的并发同步模型来自一个叫做通讯顺序程序(Communicating Sequential Processes, CSP)的范型。CSP是一种消息传递模型。在goroutine之间同步和传递数据是通过通道channel实现的,而不是通过对数据加锁来实现同步访问。

阅读全文 »

MySQL是如何执行SQL更新语句的

发表于 2020-08-22 | 分类于 数据库

用了这么久数据库,却不知道数据库是如何执行我们输入的语句的,经过一番查阅后,记录下执行一条查询和更新SQL语句后,MySQL是如何工作的。

SQL语句基本的执行链路:

流程
阅读全文 »

MySQL事务和锁

发表于 2020-07-18 | 分类于 数据库

1.事务

1.1 事务的概念

事务是一组连续的操作集合,MySQL中默认AUTOCOMMIT是为1,也就是说每一次请求都是一个独立的事务,即改请求会被立即执行。以START TRANSACTION;或BEGIN开始一个事务,以COMMIT或者ROLLBACK结束一次事务。

阅读全文 »

TCP/IP协议

发表于 2020-06-26 | 分类于 网络

最近重新学习了计算机网络原理这一门课,趁着这机会,也对TCP/IP做一下总结吧。

一、 计算机网络体系结构分层

avatar

OSI模型和TCP/IP模型上有一些区别,每一层都是处理自己的事情,然后交给下一层处理。

阅读全文 »

使用Supervisor管理Golang程序

发表于 2020-06-20 | 分类于 后端

1.介绍

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

2.安装

由于使用Python开发的,所以我们可以用pip来安装。

1
sudo pip install supervisor

阅读全文 »

Golang的值类型和引用类型

发表于 2020-05-27 | 分类于 后端

值类型和引用类型

  • 值类型:变量直接存储,内存通常在栈中分配。
  • 引用类型:变量存储的是一个地址,这个地址存储最终的值。内存通常在堆上分配。通过GC回收

PS : 通常在函数中转入指针效率比较高,因为方法中的参数是需要进行拷贝的,拷贝指针的效率比较高,要是一个大的接口体的话拷贝的效率就比较低

阅读全文 »

Redis类型及应用场景

发表于 2020-05-24 | 分类于 数据库

NoSQL非关系型数据库。
Redis支持5种数据类型:string(字符串), hash(哈希), list(双向列表), set(无序集合), zset(有序集合)

1、string

介绍
string数据类型是最常用的、简单的key-value类型,普通的key/value存储都可以归为此类。value也可以是数字。因为是二进制安全的,所有可以将一个图片文件的内容作为string来存储。redis的string完全实现目前memcached的功能,并且效率更高。除了提供与memcached一样的get,set,incr,decr等操作外,还提供了下面的操作:

阅读全文 »

MySQL性能调优

发表于 2020-05-08 | 分类于 数据库

目录

  • 服务器硬件的优化
  • MySQL数据库配置优化
  • MySQL的参数配置

服务器硬件的优化

提升硬件设备,例如选择尽量高频率的内存(频率不能高于主板的支持)、提升网络带宽、使用SSD高速磁盘、提升CPU性能等。

CPU的选择:

  • 对于数据库并发比较高的场景,CPU的数量比频率重要。
  • 对于CPU密集型场景和频繁执行复杂SQL的场景,CPU的频率越高越好。
阅读全文 »

MySQL优化之SQL优化

发表于 2020-05-08 | 分类于 数据库

1 查询SQL尽量不要使用 select * ,而是select具体字段。

反例:

1
select * from employee;

正例:

1
select id, name from employee;

说明:

  1. 只取需要的字段,节省资源、减少网络开销。
  2. select * 进行查询时,很可能就不会使用到覆盖索引了,就会造成回表查询。
阅读全文 »
123
Ray Wong

Ray Wong

Peace & Love

30 日志
8 分类
38 标签
RSS
GitHub cnblog QQ E-Mail
© 2024 Ray
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4