golang整理

这篇博客涵盖了Go语言的基础知识,包括算法基础(冒泡、选择、插入、希尔、快速排序),SQL优化技巧,如避免使用通配符、利用索引等,以及MongoDB和MySQL的对比。还涉及到Go的并发机制(goroutine和锁)、网络编程(HTTP、TCP/UDP、Socket)和Nginx的用途。此外,博主分享了面试中常见的MySQL问题和Redis实战经验,以及Linux常用命令。最后讨论了Docker和Golang调度器的重要性,以及TCP的三次握手和异常处理机制(panic)。
摘要由CSDN通过智能技术生成

1. 算法基础

冒泡排序(稳定):

冒泡排序实现的过程主要是分为两步,第一步利用一层循环控制数列的冒泡的次数,第二步利用第二层循环控制从第一个数值位置“冒出”的元素数值不断与之后的数值比较之后(也就是冒泡中的数值始终是比较之后的最大值(或最小值))放在合适的位置,也就是逐次将大(小)数,次大(小)数。。。往后放,最终形成一个有序的序列。

选择排序(不稳定):

整个排序过程和插入排序的思想有些相似,默认形成两个子序列,一个有序序列,一个无序序列,不断地从无序列中选择出最大值(或最小值)往有序序列中填充,填充的过程只是简单的在有序序列后面追加,因为有序序列本身就已经满足按照之后最大值(或最小值)选出来的。

插入排序(稳定):

插入排序的思想和选择排序类似,也是分成两个序列,有序序列和无序序列,不同的插入排序是不在无序列中挑选,而是不断直接选取无序序列第一个数值,在有序序列中比较,来确定有序序列中的准确位置。

希尔排序(不稳定):

希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止

快速排序(不稳定):

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

步骤为:

  1) 从数列中挑出一个元素,称为"基准"(pivot),

  2) 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

  3) 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去

2. sql

mqsql优化:

  1) 避免使用星号 * ,用具体字段替代(使用星号会在查询时增加一个查询列的操作)

  2) where尽量加索引, 尽量避免在 where 子句中对字段进行 null 值判断,最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库 (不然会进行全表扫描,影响效率) 
-反例:select id from t where num is null 
-可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num = 0

  3) 应尽量避免在 where 子句中使用 != 或 <> ,in 或 not in 操作符 (同上)

  4) 能用between就不要使用in,或者用exists替换in 
-select num from a where num in(select num from b) 
用下面的语句替换:select num from a where exists(select 1 from b where num=a.num)

  5) 尽可能的使用 varchar/nvarchar 代替 char/nchar (节省字段存储空间)

  6) 加一个explain(分析), 可以分析当前的查询, 用它来判断是否需要使用索引

  7) 怎么加索引: 建表的时候加索引, add index(xxx某个需要索引的名称)

MongoDB是一个由C++编写的高性能的文档型数据库,为web应用提供可扩展数据库解决方案。它和MySQL的区别如下:

项目 MongoDB MySQL
存储单元 按collection存储,一个collection中包含很多document 按table存储,一个table中包含很多的记录
数据格式要求 非常灵活,document可以存储任意json格式的数据 row中的每一列的数据类型都是限定死的,不够灵活
数据字段扩展 对数据字段的扩展零消耗 数据扩展字段有很大的消耗。比如:上万条数据再增加一列就要消耗几十秒。
事务支持 在4.0之后版本支持,目前已经支持 支持
读写性能 一般情况下,读写性能都要略高于MySQL 性能平稳
CRUD MongoDB MySQL
   C db.[documentName].insert({…}); insert into 表名[列名1,列名2...]values(值1,值2...);
   R db.[documentName].remove({...}); delete from 表名 [where 条件];
   U db.[documentName].update({查询器},{修改器}); update 表名 set 字段名1=值,字段名2=值 [where 条件];
   D db.[documentName].find(); select distinct[列名1,列名2...]from 表名 [where 条件]

mongodb: &#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值