03 2022 档案
摘要:strlen(s) 获取字符串长度 str_word_count(s) 获取单词数 strrev() 反转字符串 strpos(s,targe) 判断targe在s中的第一个位置 str_replace(old,new,s) 将字符串中的old替换成new trim(s,'abc') 去除字符串左右
阅读全文
摘要:in_array(taget,arr) 判断是否在数组 array_keys() 获取数组key array_values() 获取数组value array_merge() 合并一个或多个数组 (与数组+区别 主要是索引相同时,array_merge 是后面的覆盖前面的 +是保留前面的 舍弃后面的
阅读全文
摘要:__construct() 构造函数 __destruct() 析构函数 __clone() 克隆函数 __call() 调用对象中不存在的方法时调用 __callStatic() 调用对象中不存在的静态方法时调用 __get() 获取不存在的属性时调用 __set() 设置不存在的属性时调用 __
阅读全文
摘要:一、什么是https https是为了解决http的安全问题,在http和tcp中间加了一层SSL/TSL安全层,加密通信,防窃取、篡改 二、https传输流程 TCP三次握手之后,进行SSL/TLS握手 客户端发送hello,告知服务端自己支持的SSL协议版本、支持的加密算法和一个随机数 服务端确
阅读全文
摘要:一、http支持的请求方法 GET 获取资源 POST 上传资源 PUT 更新资源 PATCH 更新部分资源 HEAD 获取返回头部 DELETE 删除资源 OPTIONS 询问服务器支持的方法 TRACE 追踪路径 CONNECT 使用管道通信 二、http常见状态码 100 已收到部分请求,可以
阅读全文
摘要:一、反向代理 server { listen 15672; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / {//被代理的路由 root html; proxy_pas
阅读全文
摘要:1、路由定义 func InitRouter() *gin.Engine { router := gin.Default() router.GET("/", controllers.IndexAction) router.GET("/one", controllers.GetOneAction) v
阅读全文
摘要:一、数据安全性控制(data race) 互斥锁 sync.Mutex 读写锁 sync.RWMutex 原子操作sync/atomic 二、并发gorutine行为控制 sync.WaitGroup(等待所有gorutine全部结束) channel(可以用有缓冲队列控制gorutine的数量,可
阅读全文
摘要:一、什么是内存逃逸? golang在编译时,需要确定一个变量到底是在栈上分配内存,还是在堆上分配内存,不能在栈上分配的变量,就只能在堆上分配,就说这个变量内存逃逸了。 二、什么时候会内存逃逸? 引起内存逃逸的关键:编译器在编译时,无法确定变量的生命周期,只能在运行时控制。 函数返回了局部变量的指针
阅读全文
摘要:一、jion执行流程 select * from t1 straight_join t2 on t1.a = t2.a 假设 两个表a上都有索引,且强制以t1作为驱动表 执行过程: 从t1中读取一行数据R1 去t2的a索引树上找a=R1.a的id t2回表获取R2于R1组成一个结果 重复步骤 sel
阅读全文
摘要:一、group by 执行过程 select a,count(*) as cnt from t group by a 假设a上面没有索引 执行过程: 创建临时表,有两个字段a,cnt 且a为主键 遍历表t,假设记录为R,查看临时表中,是否有a=R.a的记录,没有就新增一条,有就cnt+1 临时表按c
阅读全文
摘要:一、order by 执行流程 select a,b,c from t where a = xxx order by b limit 100 假设a上有索引、b上没有索引(全字段排序) 执行过程: 通过a的索引树,获取到a=xxx的id 通过id从聚簇索引中查询到a,b,c三个字段,放入内存sort
阅读全文
摘要:1、查看客户端连接数是不是太多了,如果太多检查下代码是不是忘了关闭连接 2、memory info 查看碎片率,碎片过多需要整理,设置参数自动清理 3、--big-keys 查找大key,该删删(unlink)、该优化优化 4、搞一份rdb文件,用工具分析rdb文件,找大key
阅读全文
摘要:一、什么是哨兵模式? 在redis主从模式下,如果主节点出现故障,需要从从节点中选举一个新的主节点,将其余从节点的主节点改变成新的主节点,同时要通知redis客户端主节点已经更换,等到原主节点恢复,还要将原主节点变成新主节点的从节点,这一系列操作,需要一个自动化的过程,哨兵模式就是自动完成这一系列操
阅读全文
摘要:一、redis的内存消耗到底在哪些地方? 自身内存(redis空进程消耗的内存,只有几M,可以忽略) 对象内存(主要的内存消耗,存储数据对象,包括key、value占的内存) 缓冲区内存(客户端输入缓冲区、服务端输出缓存区、AOF缓冲区) 内存碎片(对象内存不规则导致的内存碎片) 子进程内存消耗(R
阅读全文
摘要:1、什么是观察者模式? 2、为什么要用观察者模式? 当多个对象依赖于某个对象的行为变化作出反应时,需要用到观察者模式,发生行为变化的叫发布者,监听变化做出反应的叫观察者。(一对多依赖场景) 3、具体实现
阅读全文
摘要:1、什么是单例模式? 顾名思义:单例类只允许有一个对象实例。 2、为什么要用单例模式? 某些对象需要频繁的创建、销毁,但是对象本身的属性是没有任何变化的,为了节省创建销毁的开销,可以用单例模式 某些资源类对象(比如mysql连接对象)创建过程耗时,且实例化过多会影响其他性能(例如mysql连接过多)
阅读全文
摘要:1、为什么需要内存淘汰? redis的数据可以分为两种,一种不带过期时间,另一种带有过期时间,到期自动删除。假如redis的内存占用阈值为M,那么不带过期时间的数据太多或者带过期时间的数据没有及时删除,都可能导致内存溢出。 redis的过期删除策略:a、定期删除:redis会对设置了过期时间的数据定
阅读全文
摘要:map主要由连个数据结构实现,hmap+bmap,hmap是map的整体描述信息,相当于头节点,包含了bmap的地址,bmap是真正存储数据的地方,一个bucket可以存8个k-v,当超过8个k-v后,会用拉链法生成溢出bucket,bmap本身是连续的内存数组。 查找过程:先根据hash函数和ha
阅读全文
摘要:type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key interface{}) interface{} } context顾名思义为
阅读全文
摘要:1、架构图 2、基本概念 G:gorutine协程,由go关键字创建。主要作用是执行逻辑代码。 P:Processor处理器,最多有 GOMAXPROCS个。主要作用是维护调度G。 M: 操作系统线程的抽象结构,维护着内核线程信息,代码的实际执行者。 3、调度概述 go程序启动时,会根据GOMAXP
阅读全文
摘要:go语言的内存分配不是每次都触发系统调用,go程序运行开始,先向操作系统申请一块较大的内存空间,然后由go在运行时分配 go内存分配的基本单元的mspan,为了减少内存碎片,go有67种大小的mspan,给对象分配最接近的mspan GPM模型中,每个P有一块本地内存mcache,小对象直接从mca
阅读全文
摘要:1、什么是GC? 字面意思:垃圾回收,对于已经分配且不再有用的内存进行回收的管理机制或程序 2、为什么要GC? 防止内存溢出(OOM) 3、怎么GC? GO的GC基于标记法,将对象分为三种颜色:黑色(有用对象)、灰色(被引用对象,不知道还有没有其他依赖对象)、白色(不被引用对象,需要被回收)。 GC
阅读全文
摘要:PHP底层是由HashTable+Bucket实现 HashTable typedef struct HashTable{ uint nTableSize; //哈希表的大小 uint nTableMask; //哈希表掩码,用以矫正过长的哈希值 ulong nNumOfElements; //记录
阅读全文
摘要:1、swoole运行模型 1、main reactor 线程 处理客户端链接,并均匀分配给reactor 2、reactor 线程监听socket事件 3、reactor将监听到的请求发送给manager 4、manager分配woker处理 5、如果有耗时较长的异步任务,woker交给task线程
阅读全文
摘要:一、什么是事务 简单点说,就是一堆sql逻辑排列在一起,要么全部执行,要么都不执行。只有InnoDB存储引擎才支持事务(SHOW ENGINES;) 二、如何开启一个事务 show VARIABLES LIKE '%autocommit%' 查看是否已经开启自动提交,如果为YES,那么每执行一条sq
阅读全文
摘要:1、什么是mvcc MVCC(Multi-Vesion Concurrency Control),即多版本并发控制,意思就是一条数据有多个版本,查询的时候,通过一系列操作,能够在不加锁的情况下获取到满足事务隔离级别的数据,提高并发。 2、关键概念 readVeiw-读视图 用来描述哪些版本的数据可见
阅读全文