05 2020 档案
摘要:字符串 type _string struct { elements *byte // 引用着底层的字节 len int // 字符串中的字节数,获取长度O(1) } 对于字符串比较,编译器有两个优化: 若长度不相等,则字符串不相等,O(1) 若指针相等,长度大的字符串大,O(1) slice sl
阅读全文
摘要:go newproc new newobject make makeslice,makechan,makemap,makemap_small...... <- chansend1,chanrecv1,chanrecv2 close closechan select selectgo make、new
阅读全文
摘要:futex futex(&f, FUTEX_WAIT, val, t, nil, 0) 选项FUTEX_WAIT,表示使用mmap在内核态和用户态之间共享f的内存,测试f的值如果等于val则休眠时间t futex(&f, FUTEX_WAKE, cnt, nil, nil, 0) 选项FUTEX_W
阅读全文
摘要:在执行调度循环 runtime.schedule 时,或者系统监控sysmon时,会检查是否有timer就绪。 每次把堆顶timer的when和当前时间作比较,when<nowtime则执行timer里的f,并删除当前timer,如果是ticker,则计算下一次触发的时间,加入到堆中 timer存放
阅读全文
摘要:sync.Cond type Cond struct { L Locker notify notifyList } func NewCond(l Locker) *Cond { return &Cond{L: l} } func (c *Cond) Wait() { t := runtime_not
阅读全文
摘要:接口 type Context interface { Deadline() (deadline time.Time, ok bool) //若实现了超时控制,该方法返回超时时间,true。否则ok为false Done() <-chan struct{} // 通过关闭channel进行通知 Er
阅读全文
摘要:var x, y int go func() { x = 1 fmt.Print("y:", y, " ") }() go func() { y = 1 fmt.Print("x:", x, " ") }() 结果可能为 y:0 x:0 , 编译器看到打印和赋值的变量不同,认为交换两条语句不会影响结
阅读全文
摘要:需要poll的文件描述符都被设置成非阻塞的,加入到epoll里,对应的pollDesc放到epoll event的data域中, 某个goroutine读写fd被阻塞时,runtime会把 fd 对应的 pollDesc 里的 rg / wg 字段设置为这个 g,然后将 g 放到系统的等待队列中 调
阅读全文
摘要:CALL runtime·args(SB) // 整理命令行参数 CALL runtime·osinit(SB) // 确定cpu核心数 CALL runtime·schedinit(SB) // 初始化核心组件 CALL runtime·newproc(SB) // 创建主goroutine即ru
阅读全文
摘要:启动m,进入调度循环 gosave初始化g0.sched执行现场,acquirep绑定p,schedule调度 mstart -> mstart1 -> save -> acquirep -> schedule -> mexit 休眠m gc时,或找不到g的m,或者因执行时间过长、系统调用阻塞等原因
阅读全文
摘要:抢占的时机 gc时,抢占所有g 系统监控发现长时间阻塞于系统调用或者运行时间过长时,抢占该g 同步协作式调度 主动用户让权:通过 runtime.Gosched 主动让出执行机会; 主动调度弃权:当发生执行栈分段时,检查自身的抢占标记,决定是否继续执行; 异步抢占式调度 被动监控抢占:当 G 阻塞在
阅读全文
摘要:锁定g和m 在执⾏ cgo 调⽤时,会⽤ lockOSThread 将 G 锁定在当前线程 锁定操作很简单,只需设置 G.lockedm 和 M.lockedg 即可 lockedm 会休眠,直到某⼈将 lockedg 交给它。⽽不幸拿到 lockedg 的 M, 则要将 lockedg 连同 P
阅读全文
摘要:动态栈 栈是自动增长的,默认2KB,32位架构最大250M,64位架构最大1G,可用runtime/debug.SetMaxStack来设置 每次执行函数调用时Go的runtime都会进行检测,若当前栈的大小不够用,则会触发“中断”,从当前函数进入到Go的运行时库,Go的运行时库会保存此时的函数上下
阅读全文
摘要:len 和 cap 调用 实参类型 结果 len(s) [n]T, *[n]T 数组长度(== n) []T 切片长度 chan T 信道缓存中元素队列的长度 map[K]T 映射长度(已定义键的数量) string type 字符串的字节长度 cap(s) [n]T, *[n]T 数组长度(==
阅读全文
摘要:字符串内容不能更改,可包含byte值0,len()获取的是字节数量, s[i]返回第i个字节的值,类型是uint8,&s[i] 是非法的 s:=s1+s2 会创建一个新的字符串 t:=s[3:8] 不会创建一个新的字符串 //应该是创建了新的直接部分,而引用相同的底层数据 待验证 源码 for i,
阅读全文
摘要:数组 数组是值,将一个数组变量赋值给另一个变量会复制其所有元素。将数组传入函数会复制其所有元素。可以传数组指针,但切片是更好的做法 数组的大小是其类型的一部分。类型 [10]int 和 [20]int 是不同的。长度必须为常量 长度为零的数组的尺寸为零;元素类型尺寸为零的任意长度的数组类型的尺寸也为
阅读全文
摘要:map是引用类型,底层是哈希表,操作是常数时间的 复制map,新旧map共享同一个底层哈希表,在函数里对map进行操作,结果对调用者可见 var m map[int]string,m是nil,底层没有引用哈希表, 不能向nil值的map添加元素,其他大部分对nil值的map的操作都是合法的,行为类似
阅读全文
摘要:形参(或结果)列表中,名称要么都存在,要么都不存在 指定了返回形参的名字,在进入函数时,返回值会被初始化为自身类型的零值 若所有的返回值都有名称,return语句可以省略操作数,这被称为bare return 若只有一个没有名称的结果,结果列表可以不加括号 未初始化的函数类型变量的值为nil,调用n
阅读全文
摘要:type abc struct { x, y int u float32 "标注" _ float32 // padding A *[]int F func() } var a abc // 声明变量,会开辟一段内存 t := &a.x // 对成员取地址 . 的优先级比 * 和 & 高 // 用m
阅读全文
摘要:接收者类型必须为形式 T 或 *T, T 称为接收者的 基础类型, 它不能为指针或接口类型 声明 func (p *Point) Scale(factor float64) {...} 将接收者类型为 *Point 的方法 Scale 绑定至基础类型 Point。 必须在同一包中声明方法。 给类型别
阅读全文
摘要:接口值由动态类型和动态值组成 未初始化的接口类型变量的值为nil,其动态类型和动态值都是nil,调用nil接口值上的方法会产生panic 所有类型都实现了空接口interface{},任意值都能赋给空接口类型 接口里方法的名字必须是唯一的,名字相同,参数或返回值不同,也会报错 接口可以内嵌其他接口,
阅读全文
摘要:main goroutine返回时,所有goroutine都会被直接打断,程序退出 go f(x,y),f、x、y的求值发生在当前goroutine中,f的执行发生在新goroutine中 goroutine运行在相同的地址空间中,访问共享内存需要同步 未初始化的channel类型变量的值为nil,
阅读全文
摘要:go语言101,对引用路径作了比较详细的解释 一个代码包可以由若干Go源文件组成。一个代码包的源文件须都处于同一个目录下。 一个目录(不包含子目录)下的所有源文件必须都处于同一个代码包中,亦即这些源文件开头的package pkgname语句必须一致。 所以,一个代码包对应着一个目录(不包含子目录)
阅读全文
摘要:func h() []*int { s := []*int{new(int), new(int), new(int), new(int)} // 使用此s切片 ... s[0], s[len(s)-1] = nil, nil // 指针指向的两个int可以被回收 return s[1:3:3] }
阅读全文
摘要:func main() { // 可变参数是interface{}类型, var a = []interface{}{1, 2, 3} fmt.Println(a) // 将整个a当作一个interface{},输出 [1,2,3] fmt.Println(a...) // 将a当作interfac
阅读全文
摘要:mutex := make(chan struct{}, 1) // 容量必须为1 increase := func() { mutex <- struct{}{} // 加锁 ...... <-mutex // 解锁 } mutex := make(chan struct{}, 1) mutex
阅读全文
摘要:func source(c chan<- int32) { ra, rb := rand.Int31(), rand.Intn(3) + 1 time.Sleep(time.Duration(rb) * time.Second) // 睡眠1~3秒 c <- ra } func main() { r
阅读全文
摘要:func longTimeRequest() <-chan int32 { r := make(chan int32) go func() { time.Sleep(time.Second * 3) // 模拟一个工作负载 r <- rand.Int31n(100) }() return r } f
阅读全文
摘要:超时 select { case v := <-in: fmt.Println(v) case <-time.After(time.Second): return } 非阻塞 select { case v := <-in: // 尝试接收 fmt.Println(v) default: }
阅读全文
摘要:type ( subscriber chan interface{} // 订阅者为一个管道 topicFunc func(v interface{}) bool // 主题为一个过滤器 ) // 发布者对象 type Publisher struct { m sync.RWMutex // 读写锁
阅读全文
摘要:func Producer(factor int, out chan<- int) { for i := 0; ; i++ { out <- i*factor } } func Consumer(in <-chan int) { for v := range in { fmt.Println(v)
阅读全文
摘要:通过关闭channel来广播消息 waitgroup的目的,是在main关闭channel后,给goroutine一些时间,完成某些操作 func worker(wg *sync.WaitGroup, cannel chan bool) { defer wg.Done() for { select
阅读全文
摘要:ch := make(chan struct{}) for _, f := range filenames { go func(f string) { ..... ch <- struct{}{} }(f) } for range filenames { <-ch } // 等待goroutine执
阅读全文
摘要:for _, filename := range filenames { f, err := os.Open(filename) if err != nil { return err } defer f.Close() // 会打开大量的文件 ...... } for _, filename :=
阅读全文
摘要:var sem = make(chan int, 100) // func handle(r *Request) { sem <- 1 process(r) // 可以控制 process 的并发数 <-sem } func Serve(queue chan *Request) { for { re
阅读全文
摘要:reflect.Type reflect.Value v := reflect.TypeOf(3) // 接受interface{},返回reflect.Type类型的值,该值包含参数的动态类型 fmt包的%T参数,使用reflect.TypeOf来输出 v := reflect.ValueOf(3
阅读全文
摘要:Ticker tick在不使用时,应手动stop,否则会造成timer泄露 func Tick(d Duration) <-chan Time func NewTicker(d Duration) *Ticker func (t *Ticker) Stop() for t := range time
阅读全文
摘要:sync包里的对象,大多是不能复制的 锁 sync.Mutex的Lock()方法,是不能重入的 var mu sync.Mutex // 零值表示未被锁定的互斥量 mu.Lock() defer mu.Unlock() // 对未锁定的锁进行Unlock,会导致panic var mu sync.R
阅读全文
摘要:用join代替子查询,join也尽量少用 join用小的结果集驱动大的结果集,第二个表要建索引, mysql会用第一张表的每条数据去第二张表中查找 尽量定义成not null,并设置默认值 只有一行数据满足条件,要使用limit 1,找到后就停止 列不要太多,指定需要的列,避免select * in
阅读全文
摘要:数据类型越小越好,越简单越好, 整型比字符串好,ip可以转为整型, 整型比浮点型好,金额可以乘以一个倍数,转为整型 内置的日期和时间类型比char好,timestamp比datetime好 少用text类型 数据类型 varchar(M)表示最长M个字符,M<=65535,每个值占用实际字节数+1或
阅读全文
摘要:索引记录的是磁盘中的位置,因此不能迁移 MyISAM无论是主键索引还是非主键索引,叶节点存的都是指向表的指针(记录的物理地址) InnoDB主键索引是聚集索引,叶子节点存的是表中的数据,非主键索引是非聚集索引,叶子节点存的是索引列和主键,拿到主键再查询主键索引(回表)。非主键索引也叫二级索引 索引会
阅读全文
摘要:使用 explain 分析语句 id 标识一个子查询 id相同执行顺序由上至下。 id不同,id值越大优先级越高,越先被执行。 id为null时表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中。 select_type 查询类型 type:访问方法 ALL 扫描全表数据 inde
阅读全文
摘要:事务ACID * 原子性(atomicity)一个事务必须被视为一个不可分割的最小工作单元,整个事务中所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作 * 一致性(consistency)数据库总是从一个一致性的状态转换到另外一个一致性的状态,保持完整性约束
阅读全文
摘要:select ... lock in share mode //共享锁 select ... for update //排他锁 行锁的3种算法: record lock:单个行记录上的锁 gap lock:锁定范围,不锁定记录本身,只在RR里使用 next-key lock:锁定范围,并锁定记录本身
阅读全文
摘要:innoDB和myisam的区别 InnoDB支持事物,而MyISAM不支持事物 InnoDB支持行级锁,而MyISAM支持表级锁 InnoDB支持MVCC, 而MyISAM不支持 InnoDB支持外键,而MyISAM不支持 InnoDB支持聚集索引,而MyISAM不支持 InnoDB不支持全文索引
阅读全文
摘要:select a, b, t1.c, a*b as d from t1, db.t2 where a between 3 and 7 or c not in (5,100,124) group by ... having ... order by d desc, e select的列里没有e lim
阅读全文
摘要:where 匹配时默认不区分大小写 = <> != < <= > >= in is null is not null between 3 and 7 包含3和7 and or not () null=null 返回false,null<=>null返回true select a+ifnull(b,
阅读全文
摘要:聚集函数 count sum avg max min sum、avg、max、min 忽略值为null的行 count(*) 统计行数,包含值为null的行 count(a) 统计a不为null的行数,忽略null count(a=1) 统计a为1的行数 select sum(a*b) as c .
阅读全文
摘要:通配符 where name like 'abc%' like '%' 不会匹配 null 下划线_匹配一个字符 like '[a-z]' like '[^cde]' 正则 regexp 'abc' 等价于like '%abc%' regexp binary 'a|B|c' 区分大小写,匹配 a 或
阅读全文
摘要:函数 字符串 length locate substring soundex trim ltrim rtrim upper lower left right 日期和时间 尽量用yyyy-mm-dd格式的日期 AddDate() 增加一个日期 AddTime() 增加一个时间 Now() 返回当前日期
阅读全文
摘要:insert insert [into] t [(col_name,...)] values(v1,v2...) 如果省略了列名,那么values里必须有所有列的值,自增列的值为null 如果指定了部分列名,其他的列必须允许为null或指定了默认值 连续插入 insert into table(na
阅读全文
摘要:水平分表 range,1~10000一个表,10001~20000一个表 hash,取模 地理区域,华东,华西 时间,一年一个表 分区,对客户端是透明的,分区字段必须是主键的一部分 create table article( id int auto_increment PRIMARY KEY, ti
阅读全文
摘要:视图的好处 重用sql语句,简化复杂语句,屏蔽查询细节 保护数据,用户只看到部分字段 视图可以嵌套,可使用order by,不能索引,不能有触发器和默认值 有的视图可以执行更新操作,mysql不支持物化视图 视图的两种算法 Merge:合并,执行的时候,将视图的sql语句与外部查询语句混合在一起,最
阅读全文
摘要:mysql --help | grep my.cnf 查看配置文件 参数文件 查看参数变量: 通过命令 show variables [like 'abc'\G]; 或者查看 information_schema下的global_variables视图 修改动态变量:分为会话范围和全局范围修改 se
阅读全文
摘要:表是根据主键顺序组织存放的,这种方式称为索引组织表 没定义主键,则判断是否有非空的唯一索引,如果有就用该列作为主键,没有的话自动创建6字节的指针作为主键 可通过 select a,b,c,_rowid 来判断表的主键,_rowid会显示单列主键列的值 逻辑存储结构 常见的段有数据段、索引段、回滚段等
阅读全文
摘要:MySQL 是单进程多线程的 MySQL执行过程 连接器,管理连接,权限验证 查询缓存 分析器,词法分析,语法分析,语法树,检查语法是否有错误 预处理器,进一步检查解析树是否合法,如表名是否存在等 优化器,选择索引,生成执行计划 执行器,操作引擎,返回结果,并将结果缓存 如果查询中包含任何用户自定义
阅读全文
摘要:客户端分区:在客户端决定key该放在哪个节点上 代理分区:客户端把请求发给代理,代理按规则请求某个节点,将结果返回给客户端 查询路由:随机请求一个节点,该节点告诉客户端key在哪个节点上 集群的缺点:对多个key的操作通常不被支持,例如求两个集合的交集,他们可能在不同的节点上 操作多个key,不支持
阅读全文
摘要:复制 向服务器127.0.0.1:12345 发送 slaveof 127.0.0.1 6379 127.0.0.1:12345会成为127.0.0.1:6379的从服务器 也可以设置slaveof选项 复制时需要执行同步和命令传播两个操作 同步: 从向主发送psync命令,主执行bgSave命令,
阅读全文
摘要:估计值准确度80% 12k字节内存,2^64个不同元素 pfAdd k v1 v2 添加,如果估计的基数改变则返回1,否则返回0 pfCount k 返回基数 pfCount k1 k2... 返回并集的基数 O(n),n为集合的个数 pfMerge d k1 k2.. 将ki合并到d里, O(n)
阅读全文
摘要:升序排序,指按score升序排序,score相同,按v字典序升序。降序排序同理。 withscores返回v和score,不使用withscores,只返回v 下标区间 i、j从0开始,可为负数, 值区间min、max可为 -inf和+inf,默认闭区间, '('表示开区间,如zcount k (1
阅读全文
摘要:集合元素不能重复 sismember k v 是否存在 scard k 返回数量 sadd k v1 v2 添加,k不存在则创建 smembers k 返回所有元素 srem k v1 v2 移出元素 smove s d v 将v从s移到d里 spop k 随机移出一个元素并返回 srandmemb
阅读全文
摘要:没有元素会阻塞,直到有元素或超时 t 秒后,t为0则永久阻塞 blpop k1 k2 t 左弹并返回 brpop k1 k2 t 右弹并返回 brpoplpush s d t s右弹,左插到d,并返回 rpoplpush s d s右弹,左插到d,并返回 llen k 返回长度 linsert k
阅读全文
摘要:hexists k f 查看k中是否存在字段f hlen k 字段数量 hdel k f1 f2 删除字段 hset k f v 将k中f设为v hsetnx k f v f不存在时才将f设为v hget k f 返回k中f的值 hmset k f1 v1 f2 v2 设置多个字段的值 hmget
阅读全文
摘要:set k v setEx k s v s秒过期 pSetEx k m v m毫秒过期 setNx k v k不存在时才设置 get k getSet k v k设为v,并返回k的旧值 mSet k1 v1 k2 v2 设置多个值 mSetNx k1 v1 k2 v2 当所有k都不存在时,设置多个值
阅读全文
摘要:简单动态字符串 ( simple dynamic string,SDS) SDS的应用 在redis里,c字符串只会用作字面量,用在不会更改的地方,例如打印日志。 需要修改的字符串,用SDS表示 set msg "hello world" redis将创建一个键值对,键是一个字符串对象,对象的底层实
阅读全文
摘要:定时删除:创建一个定时器,在键过期时立即删除。 为什么不用定时删除策略:虽然内存及时释放,但太消耗 CPU 资源。 定期删除,设置了 expire 的键存储在一个独立的字典中,默认每 100ms 随机选择 20 个 key,删除其中已过期的 key。如果过期 key 比例超过 1/4,那就重复这一步
阅读全文
摘要:事务执行时,不会中断去执行其他命令 不支持回滚,执行时某个命令出错,其他命令也会继续执行 multi set "name" "zhangsan" get "name" set "age" 18 get "age" exec multi 将客户端从非事务状态切换到事务状态 非事务状态,客户端发送的命令
阅读全文
摘要:RDB 手动或定期执行,将数据库状态保存到文件中 手动save:会阻塞服务器进程,拒绝客户端的所有请求; 自动bgsave:fork子进程,不会阻塞,写时复制copy on write bgsave执行过程中会拒绝save、bgsave、bgReWriteAOF 服务器端可同时配置多个save选项,
阅读全文
摘要:hash、list、set、sorted set,可存储2^32-1个元素 string长度为512m字节,即2^(9+10+10+3)=2^32 优点:速度快,数据类型多,可持久化,支持主从备份,水平扩展 快的原因:c语言开发 纯内存操作 单进程单线程 epoll多路复用 高效的数据结构 每次传输
阅读全文
摘要:转自:https://github.com/domnikl/DesignPatternsPHP 1 interface Logger 2 { 3 public function log(string $message); 4 } 5 6 class FileLogger implements Log
阅读全文
摘要:转自:https://github.com/domnikl/DesignPatternsPHP 1 class Context 2 { 3 private Comparator $comparator; 4 5 public function __construct(Comparator $comp
阅读全文
摘要:转自:https://github.com/domnikl/DesignPatternsPHP 1 final class Singleton 2 { 3 private static ?Singleton $instance = null; 4 5 public static function g
阅读全文
摘要:转自:https://github.com/domnikl/DesignPatternsPHP 1 abstract class Journey 2 { 3 private array $thingsToDo = []; 4 5 final public function takeATrip() 6
阅读全文
摘要:PHP 设计模式 B站视频 单一职责、开闭、里氏替换、依赖倒置、接口隔离、迪米特
阅读全文
摘要:1、对现有业务造成冲击,可能导致整个网站瘫痪 秒杀系统独立部署,甚至使用独立的域名,和其他业务完全隔离。 2、用户会不停的刷新页面,对应用服务器和数据库服务器造成极大的压力 秒杀页面静态化 3、突然增加的带宽 租借服务器带宽,CDN也需要租借带宽 4、直接访问下单页面,提前下单 动态生成随机下单页面
阅读全文
摘要:扩展性指的是各个模块高内聚低耦合,可以很容易地扩展新功能。 消息队列:各个模块不直接调用 纵向拆分业务:将大应用拆分成业务独立的小应用 横向拆分业务:将复用的业务拆分出来。 较复杂,涉及到:识别可复用的业务、设计服务接口、服务依赖关系、 分布式服务管理框架
阅读全文
摘要:伸缩性指的是通过增加或减少机器的数量,来改变网站的处理能力。 负载均衡可以及时发现新上线或新下线的服务器,并向新上线的服务器分发请求,停止向已下线的服务器分发请求,那么就实现了应用服务器集群的伸缩性。 应用服务器负载均衡 特点:应用服务器没有状态,访问哪一台都行 DNS负载均衡: 优点:不需要维护负
阅读全文
摘要:负载均衡:心跳检测,自动转移 解决负载均衡后的session问题: ip哈希,或根据cookie来转发。不满足高可用。 session服务器,利用分布式缓存、数据库等。引入了网络开销 session replication,即在服务器间同步session。同步开销、存储开销都很大 把session记
阅读全文
摘要:XSS(Cross Site Script)跨站脚本攻击 持久型:黑客提交含有恶意脚本的请求,保存在被攻击的web站点的数据库中, 用户浏览网页时,恶意脚本被包含在正常页面中,被浏览器执行。 例如在博客里写一段js代码,把cookie发给黑客,里面可能含有sessionID 用户访问该博客,黑客就能
阅读全文
摘要:前端优化: 减少http请求:合并css、js、img keep-alive复用tcp连接 浏览器缓存:css、js、img,设置http头Cache-Control、Expires。 如果要更新缓存的文件,可以改变文件名。 更新文件时,应当一个一个更新,避免浏览器缓存同时大量失效。 压缩:减少传输
阅读全文
摘要:200 OK 请求已成功, 204 No Content 服务器成功处理了请求,没有返回任何内容。 206 Partial Content 成功处理了部分GET请求。 多用于断点续传、大文件拆分下载等 301 Moved Permanently 永久移动到新位置 302 Found 临时重定向 30
阅读全文
摘要:套接字对:(源ip:源port,目的ip:目的port),唯一标识了一个网络上的TCP连接 收到报文,不仅要看目的port,还要看源ip和port才能确定报文该交给哪个连接 listen():将主动套接字转化成被动套接字,内核为每个监听套接字维护半连接队列和全连接队列 backlog参数指定半连接队
阅读全文
摘要:TCP的差错恢复:tcp确认是累积式的,接收方不会确认失序的报文段, 发送方仅需维护已发送但未确认的最小序号,以及下一个要发送的序号 这样看来,tcp是GBN风格的,但tcp又会缓存失序的报文段, 并对缓存的报文段进行选择确认(SACK) 回退N步(Go-Back-N,GBN),也常被称为滑动窗口协
阅读全文
摘要:大量的源想以过高的速度发送数据,导致路由器缓存溢出,继而丢包。 速率控制:TCP维护拥塞窗口cwnd变量,发送端未被确认的数据量不能超过cwnd cwnd代表发送端认为能发送的数据量,流量控制窗口代表接收端能接收的数据量, 实际能发送的数据量是二者的较小值 拥塞检测:隐式检测:超时或者收到三个冗余a
阅读全文
摘要:三次握手:能确定双方都做好了传输数据的准备,并且彼此知道对方已经准备好, 通知对方自己的初始序号isn,设置其他初始化的参数和状态变量。 前两次握手不能携带数据,第三次握手可以携带数据。 syn flood攻击:攻击者发送syn,服务器创建半开连接并发送synack,攻击者不发送ack 解决方法:很
阅读全文
摘要:序号:指字节流首字节的编号,例如100 000字节的数据,MSS为1000字节, 那么第一个报文段的序号为0,第二个报文段的序号为1000,第三个为2000 由于报文段的长度是可变的,所以不能对报文段进行确认,只能对字节进行确认 确认序号:收到0~199字节,和300~456字节,确认序号为200,
阅读全文
摘要:ip协议不可靠,会丢失、出错、乱序 延迟、重复 tcp可靠性是指数据的可靠传递,或故障的可靠通知 tcp为保证可靠性,使用了“带重传的正面确认”技术 1.发送端需要知道接收端有没有收到段,接收端需要返回ack。 2.超时未收到ack就重传,重传会导致段重复,序号可以识别重复的段 3.停等式发一个确认
阅读全文
摘要:创建函数 function func1 { ....... } 或者 func2() { ....... } 调用函数 需要先定义,再调用 .... func1 .... 返回值 默认情况下,函数的退出状态码是函数中最后一条命令的退出状态码 return 0~255 获取返回值:result=$(f
阅读全文
摘要:临时重定向 echo "error" >&2 # test.sh 脚本里 将标准输出重定向到标准错误 ./test.sh 2> test2.txt # 运行脚本时,将错误重定向到文件,则 error 会被写入到文件中 永久重定向 exec 1>a.txt 将脚本中所有标准输出 都重定向到a.txt
阅读全文
摘要:$0 是脚本名称 $# 参数个数 $* 所有参数作为一个单词 $@ 所有参数作为多个单词 $1..9 是参数 ${10}是第10个参数... if [ -n "$1" ] 检测参数 shift 所有参数左移一位 第1个参数丢弃 shift 3 所有参数左移三位 1.2.3三个参数丢弃 用户输入: r
阅读全文
摘要:for for var in list do ... done for i in a b "c" d for i in $(cat $file) # 根据 $IFS 将$file的内容分隔成许多字段 for f in /home/* for (( i = 1, j=2 ; i < 10; i++,
阅读全文
摘要:test命令内的条件为真,则返回退出状态码0 test 5 -eq 15 && echo Yes || echo No teest var1 #测试变量是否有值 test -f /etc/resolv.conf && echo "File /etc/resolv.conf found." || ec
阅读全文
摘要:查看内置变量:set、env、printenv 赋值时,等于号两边不能有空格。变量名对大小写敏感 a=b # a的值为字符串“b” myhome="/home/v/vivek" NOW=$(date) # $() 执行命令 将结果赋给变量 NOW=`date` # 反引号执行命令 将结果赋给变量 s
阅读全文
摘要:s=abc 直接用等号赋值 不能有空格 s = abc s=ab c 都是无效的 有空格的话,用引号括起来,双引号内的特殊字符保有原本的特性,单引号内的特殊字符仅为字符本身 反斜杠可转义空格回车等字符 $()命令替换 a=$(ls) echo $a 输出ls的结果 增加变量内容 PATH="$PAT
阅读全文
摘要:gzip a.txt 压缩为a.txt.gz 并删除原文件a.txt gzip -c a.txt > abc.gz 压缩a.txt -c将结果输出到屏幕并保留a.txt > 重定向到abc.gz gzip -d a.txt.gz 解压缩为a.txt 并删除压缩文件a.txt.gz 源文件是文本文件的
阅读全文
摘要:cat cat -A显示控制字符 -s禁止输出多个空白行 -n给文本添加行号 cat > foo.txt The quick brown fox jumped over the lazy dog. cat -ns foo.txt 1 The quick brown fox 2 3 jumped ov
阅读全文
摘要:locate abc/def 根据路径名匹配 locate abc | grep def updatedb程序每天运行一次,更新locate的数据库,所以locate的数据不是实时的 whereis 搜索可执行文件、源代码文件、帮助文件 只在部分目录里查找 find 直接在硬盘中搜索 速度比较慢 f
阅读全文
摘要:ps 查看进程 ps x 查看所有进程 ps aux显示更多信息 --forest 显示层级信息 状态 意义 R 运行。这意味着,进程正在运行或准备运行。 S 正在睡眠。 进程没有运行,而是,正在等待一个事件, 比如说,一个按键或者网络数据包。 D 不可中断睡眠。进程正在等待 I/O,比方说,一个磁
阅读全文
摘要:id – 显示用户身份号 umask – 设置默认的文件权限 passwd – 更改用户密码 who 看谁在线 用户帐户 定义在/etc/passwd 文件里面,用户组定义在/etc/group 文件里面。当用户帐户和用户组创建以后, 这些文件随着文件/etc/shadow 的变动而修改,文件/et
阅读全文
摘要:C-a C-e C-f C-b M-f M-b C-y C-d M-d M-backspace向前剪切一个词 C-k C-u 剪切行首到光标 C-t M-t 交换两个单词 C-l 清屏 等同clear命令 Tab 自动补全 按两次显示列表 history | less 查看历史命令 !20 输入第2
阅读全文
摘要:echo 输出 路径展开 echo * 不会输出*,而是输出当前目录下的所有文件名 因为*会先展开 参数展开 echo $USER 会输出当前用户的用户名 波浪线~展开 echo ~ 会输出当前用户的home目录 echo ~zhangsan 会输出用户zhangsan的home目录 算术表达式展开
阅读全文
摘要:与 Unix 主题“任何东西都是一个文件”保持一致,程序,比方说 ls,实际上把他们的运行结果 输送到一个叫做标准输出的特殊文件(经常用 stdout 表示),而它们的状态信息则送到另一个 叫做标准错误的文件(stderr)。默认情况下,标准输出和标准错误都连接到屏幕,而不是 保存到磁盘文件。除此之
阅读全文
摘要:命令可以是一个可执行程序,或者内建于shell自身的命令,如cd,或者是shell函数,或者是命令别名 type 查看命令类型 which ls 查看可执行程序的位置 对命令别名和内建命令无效 help cd 查看帮助 mkdir --help 查看帮助 一些程序不支持--help选项 可以把命令放
阅读全文
摘要:grep [options] regex [file...] 选项 描述 -i 忽略大小写。不会区分大小写字符。也可用--ignore-case 来指定。 -v 不匹配。通常,grep 程序会打印包含匹配项的文本行。这个选项导致 grep 程序只会打印不包含匹配项的文本行。也可用--invert-m
阅读全文
摘要:ln a.txt aa 创建硬链接 默认每个文件都有一个硬链接 这个硬链接给文件起名字 创建硬链接 就创建了一个额外的目录条目 硬链接不能关联目录,也不能关联所在磁盘分区以外的文件 硬链接和文件没什么区别,列出硬链接所在目录的文件时,硬链接没有特殊的链接指示说明 删除硬链接,这个链接被删除,文件本身
阅读全文
摘要:mkdir、rmdir mkdir dir1 dir2 dir3... 创建目录 -p建立多级目录 -m初始化目录权限 rmdir a/b/c 删除空目录 -p删除a/b/c(如果a下只有b,b下只有c,c为空目录) -r删除非空目录 cp cp a b 复制文件或目录a到文件或目录b cp a1
阅读全文
摘要:ls ~ /usr 列出home目录和/usr目录的内容 -l 结果以长模式输出 ls的选项 选项 长选项 描述 -a --all 列出所有文件,甚至包括文件名以圆点开头的默认会被隐藏的隐藏文件。 -d --directory 通常,如果指定了目录名,ls 命令会列出这个目录中的内容,而不是目录本身
阅读全文
摘要:linux命令行与shell脚本编程大全 16 Gawk 工具 http://www.shell-fu.org/lister.php?browse 另一个收集命令的网站 左键拖动选择区域,或者双击单词,即为复制 单击中键即为粘贴 使用 aptitude 来管理软件 改变聚焦策略 单击聚焦 date
阅读全文
摘要:2、设置root密码 sudo passwd->输入当前密码->输入新密码 6、开启root登录 /etc/pam.d/ 下的gdm-autologin 和 gdm-password 先改为777权限 再用Gedit打开 注释掉 #auth required pam_succeed_if.so us
阅读全文
摘要:知乎 资料 github 资料 一个github项目 docker+lnmp+redis PowerShell配置别名: 查看profile文件 :$profile 创建profile文件: New-Item -Path $ profile -ItemType file force 在profile
阅读全文
摘要:git 对象 .git / objects 目录下存放git对象,每种对象都有40位的SHA1值作为唯一标识 SHA1前两位作为文件夹名,后38位作为文件名 blob对象,映射到一个文件,对象内容就是文件内容 tree对象,映射到一个目录,对象内容为本目录下的文件的SHA1值和子目录的SHA1值 c
阅读全文
摘要:remote git remote add origin git@github.com:abc/def.git 将本地git目录关联远程origin仓库 origin只是url的别名 git remote 查看远程仓库 -v git remote show [remote] 显示某个远程仓库的信息
阅读全文
摘要:git reset 1. git reset [-q] [<commit>] [--] <path> 带有路径path时,path如果和引用或commitID同名,可在path前加 -- 用<commit>里的<path>文件,替换暂存区中的文件,工作区和版本库不变 省略commit则为HEAD 2
阅读全文
摘要:git diff 后面跟两个参数,用a、b表示,可以是commitID、HEAD^、分支名等 --stat简单的结果 不加参数是工作区和暂存区 参数只有一个HEAD表示工作区和版本库 只有一个分支名是工作区和该分支 --cached或--staged是版本库和暂存区 git status -s 精简
阅读全文
摘要:git init 或 git init dirname git add 点.修改的和新增的,不包括删除 -u修改的和删除的 -A (--all)修改删除新增重命名 dir指定目录递归 -p依次确认 git commit -m "abc" -a 将未暂存的也提交 直接回车进入编辑器 -v 回车 带有详
阅读全文
摘要:commitID HEAD、commitID、tag、branchName 等在很多地方都是等效的 HEAD^ HEAD~ HEAD^3 HEAD~3 HEAD@{3}是reflog里第4个commit commit^ 该commit的父commit 如果有冲突,需要解决后再add、commit,形
阅读全文
摘要:paxos作者论文 The Part-Time Parliament 翻译1 翻译2 paxos作者论文 Paxos Made Simple 翻译1 翻译2 翻译3 维基百科 英文wiki 视频 知行学社 文章 刘杰的《分布式系统原理介绍》 不错 文章 深入浅出Paxos算法协议 还不错 三个约束:
阅读全文
摘要:M-m s 一组搜索操作 多用搜索功能 helm搜索的时候要加空格 M-s h 高亮正则 C-s/r RET abc RET 向后/前搜索abc isearch C-s/r isearch-forward/backward C-M-s/r isearch-regexp-forward/backwar
阅读全文
摘要:smartsparen? 删除左括号,右括号还在 和hungry-delete冲突 多用C-v M-v web-mode C-c C-f 折叠元素 C-减号 会将后面的命令取反 如C-- C-k 删除到行首 C-u 10 k 输入10个k C-u 10 C-u 1 输入10个1 C-u -3 C-n
阅读全文
摘要:WSL 在商店里安装ubuntu,然后在powerShell里输入ubuntu wslconfig /list 查看安装的wsl wslconfig /setdefault ubuntu 设置powerShell里bash命令默认打开的wsl wslconfig /unregister ubuntu
阅读全文
摘要:(global-set-key (kbd "<f1>") 'my-func) (add-hook 'emacs-lisp-mode-hook 'show-paren-mode) 在lisp-mode里打开paren-mode (defun indent-buffer() (interactive)
阅读全文
摘要:Emacs github C-h t emacs tutorial 原生手册中文 http://www.gnuemacs.org/ http://www.gnu.org/software/emacs/manual/html_node/emacs/index.html https://www.gnu.
阅读全文
摘要:phpinfo() 查看php信息 可同时存在多个版本的php nginx的upstream可使用不同的php 安装 官网获取链接 wget http://hk1.php.net/get/php-7.3.2.tar.gz/from/this/mirror tar -zxvf mirror ./con
阅读全文
摘要:GD 步骤: 1、创建画布:在内存开辟空间,用于存储图像信息 2、绘制图像 3、输出图像:要用header()发送Content-type 4、释放资源 直接用浏览器请求该脚本,或将该脚本的url赋给src属性,都可以获取图像 ** php配置文件 extension_dir="ext所在目录" 启
阅读全文
摘要:max — 找出最大值 min — 找出最小值 计算 abs — 绝对值 sqrt — 平方根 pow — 指数表达式 exp — 计算 e 的指数 expm1 — 返回 exp(number) - 1,甚至当 number 的值接近零也能计算出准确结果 log — 自然对数 log10 — 以 1
阅读全文
摘要:flush — 刷新输出缓冲 ob_clean — 清空(擦掉)输出缓冲区 ob_end_clean — 清空(擦除)缓冲区并关闭输出缓冲 ob_end_flush — 冲刷出(送出)输出缓冲区内容并关闭缓冲 ob_flush — 冲刷出(送出)输出缓冲区中的内容 ob_get_clean — 得到
阅读全文
摘要:路径 basename — 返回路径中的文件名部分 dirname — 返回路径中的目录部分 pathinfo — 返回文件路径的信息 realpath — 返回规范化的绝对路径名 glob — 寻找与模式匹配的文件路径 fnmatch — 用模式匹配文件名 判断 file_exists — 检查文
阅读全文
摘要:session_set_save_handler — 设置用户自定义会话存储函数 session_save_path — 读取/设置当前会话的保存路径 session_id — 获取/设置当前会话 ID session_create_id — Create new session id sessio
阅读全文
摘要:php.ini 配置时区 date.timezone checkdate — 验证日期 date — 时间戳转字符串 getdate — 时间戳转关联数组 localtime — 时间戳转关联数组 date_parse — 字符串日期转为关联数组 date_parse_from_format — 指
阅读全文
摘要:字符串 多字节字符串 字符串结构里存储了长度,根据长度来判断字符串的结束,而不是根据特殊的结束符字节 所以php字符串是二进制安全的,可以包含null字节 $name="zhangsan"; echo "{$name}p"或"${name}p" // zhangsanp 花括号{}里不要有空格 ec
阅读全文
摘要:不需要指定数组的大小,也不需要提前声明,直接赋值即可声明数组:$arr['a']=1,或$arr[]=1 合并数组且key相同时,array_merge()保留最后一个value,"+"保留第一个value 键为字符串且为标准的integer表示时,会转为整型。例如"8"会转为8,"08"不会转为8
阅读全文
摘要:命名空间 自动加载 抽象类 至少一个抽象方法,不能实例化 abstract class A{ abstract protected function getValue(); } class B extends A{ public function getValue($v=null){...} } 可
阅读全文
摘要:$a=$b=$c=1; 一次声明多个变量 变量名区分大小写, 内置结构和关键字,用户自定义的类名和函数名,不区分大小写 $a=null isset($a) // false empty($a) // true 检测一个变量是不存在还是值为null,需要 array_key_exists('var',
阅读全文
摘要:性能优化 算法上的优化 多用内置函数,少用魔法函数、错误抑制符、正则 开启opcache 缓冲区 消息队列异步 (发邮件等功能) 少操作文件、网络请求 连接池 用到的时候再new,用完了及时销毁 访问数组arr[name],会先把name当作常量,慢 流程控制 break 2; continue 2
阅读全文

浙公网安备 33010602011771号