GO基础语法
基本结构一个简单的helloworld程序的展示: 1234567package mainimport "fmt"func main(){ fmt.Println("HelloWorld")} package main定义程序包,main包可独立运行 import导入包 func main()程序入口 fmt.Println()打印输出 变量与常量变量声明123var a int =10var b=10c:=10 常量12345const Pi=3.14const( Monday=1 Tuesday=2) 基本数据类型 类型 说明 int/int8/int16/int32/int64 整型 uint/uint8/uint16/uint32/uint64 无符号整型 float32/float64 浮点型 bool 布尔值 string 字符串 rune Unicode字符(等...
Segment tree
主要作用线段树是主要用来维护区间信息的数据结构线段树可以在O(logN)的时间复杂度内实现单点修改、区间修改、区间查询(区间求和、求区间最大值、求区间最小值)等操作 基本结构将数组a={10,11,12,13,14}转化为线段树:设线段树的根节点编号为1,用数组d来保存我们的线段树,did_idi用来保存线段树上编号为i的节点的值,这里每个节点所维护的值就是这个节点所表示的区间总和。 did_idi的左儿子节点就是d2∗id_{2*i}d2∗i,did_idi的右儿子节点就是d2∗i+1d_{2*i+1}d2∗i+1.如果did_idi表示的是区间[s,t](即did_idi=asa_sas+as+1a_{s+1}as+1+...+ata_tat)的话,那么did_idi的左儿子节点表示的是区间[s,s+t2\frac{s+t}{2}2s+t],did_idi的右儿子表示的区间为s+t2\frac{s+t}{2}2s+t+1到t的闭区间 建树在实现时,我们考虑递归建树。设当前的根节点为ppp,如果根节点管辖的区间长度已经是1,...
Linux common commands
文件与目录操作ls -lh以人类可读方式显示文件大小 ls -ltr按时间排序 cd -返回上一个目录 tree树型结构显示目录,需要安装 stat file查看文件详细信息 basename /path/file.txt获取文件名 dirname /path/file.txt获取文件路径 文件查看与处理cat -n file显示行号 tac file反向输出文件 less -N file分页并显示行号 strings file提取二进制文件中的字符串 split -l 1000 big.txt part_按行切割文件 sort file排序 uniq file去重 diff file1 file2比较两个文件 cmp file1 file2比较两个文件是否相同 权限与用户管理chmod 644 filerw-r–r– chmod u+x file给用户添加执行权限 umask查看默认权限掩码 chgrp group file修改文件所属组 groups user查看用户所属组 useradd newuser添加用户 usermod -aG...
How to use git
本地开发阶段仓库操作 git init初始化本地仓库 git clone < repo >克隆远程仓库 git remote -v查看远程仓库地址 git remote add origin < url >添加远程仓库地址 分支管理 git branch查看分支 git branch dev创建分支 git checkout dev/git switch dev切换分支 git checkout -b feature-x新建并切换分支 git branch -d branch-name删除本地分支 git branch -vv查看本地分支与远程分支的关系 代码修改 git status查看修改状态 git diff查看改动内容 git add file添加到暂存区 git add .添加全部修改 git commit -m “feat:xxx”提交代码 git commit –amend修改最近一次commit git restore file撤销修改 git reset –hard HEAD撤销到最后一次提...
Redis's data type
字符串String基本的数据存储单元,可以存储字符串、整数或者浮点数string类型是二进制安全的。redis的string可以包含任何数据,比如jpg图片或者序列化的对象string类型是redis最基本的数据类型,string类型的值最大能存储512mb string常用命令 SET key value:设置键的值 GET key:获取键的值 INCR key:将键的值加1 DECR key:将键的值减1 APPEND key value:将值追加到键的值之后 哈希hash一个键值对集合,可以存储多个字段redis hash是一个键值对集合,类似于一个小型的noSQL数据库redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象每个哈希最多可以存储2^32-1个键值对 hash常用命令 HSET key field value:设置哈希表中字段的值 HGET key field:获取哈希表中字段的值 HGETALL key:获取哈希表中所有字段和值 HDEL key field:删除哈希表中的一个或多个字段 列表list一个...
Merge sort
归并排序适合处理大规模数据排序,尤其是当需要稳定排序时非常有用 归并排序原理 分治Divide,将数组从中间分成两半 解决conquer,递归地对左右两半分别进行归并排序 合并combine,将两个已排序的子数组合并成一个有序数组 时间复杂度:O(n logn) 空间复杂度:O(n),需要额外数组用于合并 稳定排序,相同元素的相对顺序保持不变 代码实现123456789101112131415161718192021222324252627282930313233343536373839package mainimport "fmt"func mergeSort(arr []int) []int { if len(arr) <= 1 { return arr } mid := len(arr) / 2 left := mergeSort(arr[:mid]) right := mergeSort(arr[mid:]) return merge(left, right)&...
How is data sorting implemented in MySQL?
Answer排序过程中,如果排序字段命中索引,则利用索引排序反之,使用文件排序文件排序中,如果数据量少则在内存中排序,具体是使用单路排序或者双路排序如果数据大则利用磁盘文件进行外部排序,一般使用归并排序 拓展知识MySQL可以分为索引排序和filesort 索引排序如果查询中的ORDER BY子句包含的字段已经在索引中,并且索引的排列顺序和ORDER BY子句一致,则可直接利用索引进行排序。这种方式效率高,因为索引有序。 filesort当使用explain分析SQL发现执行计划的extra中包含using filesort的时候,说明它无法应用索引的顺序,而主动排序了。 如果需要排序的数据比较少,则直接在内存中通过sort_buffer就能排了。具体是通过sort_buffer_size参数来控制sort_buffer的大小,如果需要排序的数据量小于sort_buffer则直接在内存中排序,反之需要利用磁盘临时文件排序,性能就比较差了。 内存排序双路排序有一个叫max_length_for_sort_data参数,默认是4096字节,如果select列的数据长度超过它,则MyS...
Array
概念数组是一种线性数据结构,用于存储相同类型的元素,在内存中是连续分配的 特点 固定长度:声明时需要确定大小(静态数组),或者动态数组可以扩展长度(for example:Go’s slice,Java’s ArrayList) 随机访问:通过下标在O(1)的时间内访问任意元素 连续存储:方便计算元素的地址,但插入和删除中间元素可能需要移动大量数据 数组操作创建数组1234567//定长数组var arr [5]intarr[0]=1arr[2]=2//动态数组 slices:=[]int{1,2,3} 1234567//定长数组int[] arr=new int[5];arr[0]=1;arr[1]=2;//初始化数组int[] arr2={1,2,3} 访问数组按下标访问,注意下标从0开始 12fmt.Println(arr[0])fmt.Println(s[len(s)-1]) 12System.out.Println(arr[0]);System.out.Println(arr[arr.length-1]); 遍历数...
Dynamic Programming
DP is a way that making the question become the more easy little questions to solve. basic dp
