自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Y先森0.0

时间并不会因为你的迷茫和迟疑而停留

  • 博客(672)
  • 收藏
  • 关注

原创 Mysql 常见面试题

Mysql 常见面试题1.索引1.什么是索引?索引是对数据库中一个或者多个值进行排序的数据结构,以便实现快速查询2.Mysql索引是如何实现的?mysql索引使用的是B+树,主要是查询效率高,时间复杂度是O(log N),可以充分利用磁盘预读的特性,树可以有多个孩子节点,并且树深度很小,叶子节点有序且存储数据3.为什么选择B+树作为索引结构?hash索引:hash索引的底层是哈希...

2022-07-11 17:42:00 348

原创 Docker 技术原理浅析

Docker 技术原理浅析1.简介简单介绍Docker使用的核心技术利用Linux的Namespace功能,实现资源的隔离利用Linux的cgroups功能,实现资源的限制利用AUFS栈式叠加的文件系统(联合挂载),实现docker的分层结构和增量更新等能力以下一切都基于操作系统资源分配的最小单位:进程 进行讨论2.NameSpaceLinux Namespace是Lin...

2022-07-11 17:41:00 312

原创 k8s最佳实践:业务丢包问题排查

k8s最佳实践:业务丢包问题排查一.问题描述有用户反馈大量图片加载不出来。图片下载走的 k8s ingress,这个 ingress 路径对应后端 service 是一个代理静态图片文件的 nginx deployment,这个 deployment 只有一个副本,静态文件存储在 nfs 上,nginx 通过挂载 nfs 来读取静态文件来提供图片下载服务所以调用链是:client –&g...

2022-05-16 18:53:00 1550

原创 k8s最佳实践:cgroup kmem的内存泄露问题

k8s最佳实践:cgroup kmem的内存泄露问题1.前言这篇文章的全称应该叫:[在某些内核版本上,cgroup 的 kmem account 特性有内存泄露问题],如果你遇到过 pod 的 "cannot allocated memory"报错,node 内核日志的“SLUB: Unable to allocate memory on node -1”报错,那么恭喜你中招了。2.现象...

2022-05-16 16:45:00 4415

原创 k8s 最佳实践:处理内存碎片化

k8s 最佳实践:处理内存碎片化内存碎片化造成的危害节点的内存碎片化严重,导致docker运行容器时,无法分到大的内存块,导致start docker失败。最终导致服务更新时,状态一直都是启动中在长时间运行的Linux操作系统中,系统日志有时会出现无法分配高阶内存的报错信息:Aug 4 22:58:15 server1 kernel: : [69229257.683658] xenwa...

2022-05-16 15:47:00 1088

原创 k8s最佳实践:部分业务POD内存持续泄露问题

K8S部分业务POD内存持续泄露问题1.前言线上K8S集群有极少量的PHP业务,它们的POD内存持续走高直到OOM,相信与特殊代码场景有关,需要展开分析。我从POD的内存监控原理入手,分析到底内存用到了哪些地方。2.分析过程第一步:分析pod的内存限制原理容器化依赖Cgroup限制内存资源,Docker采集容器的内存使用量也是基于Cgroup技术实际上,Cgroup标准做法是...

2022-05-16 15:31:00 2909

原创 k8s 最佳实践:解决长连接服务扩容失效

Kubernetes 最佳实践:解决长连接服务扩容失效1.问题背景在现网运营中,有很多场景为了提高效率,一般都采用建立长连接的方式来请求。我们发现在客户端以长连接请求服务端的场景下,K8S的自动扩容会失效。原因是客户端长连接一直保留在老的Pod容器中,新扩容的Pod没有新的连接过来,导致K8S按照步长扩容第一批Pod之后就停止了扩容操作,而且新扩容的Pod没能承载请求,进而出现服务过载的情...

2022-05-16 15:27:00 848

原创 Mysql锁机制及原理简析

Mysql锁机制及原理简析一.前言1.什么是锁?锁是计算机协调多个进程或线程并发访问某一资源的机制。锁保证数据并发访问的一致性、有效性;锁冲突也是影响数据库并发访问性能的一个重要因素。锁是Mysql在服务器层和存储引擎层的的并发控制2.为什么要加锁?数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加...

2022-05-15 15:46:00 3756

原创 HTTP常见面试题

HTTP常见面试题一.HTTP基本知识1.HTTP 常见的状态码,有哪些?「200 OK」是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。「204 No Content」也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。「206 Partial Content」是应用于 HTTP 分块下载或断点续传...

2022-05-11 18:14:00 162

原创 SSL协议工作原理

SSL协议工作原理在现代,A和B之间要进行安全,省心的网络通信,需要经过以下几个步骤通过CA体系交换public key通过非对称加密算法,交换用于对称加密的密钥通过对称加密算法,加密正常的网络通信在实际中,非对称加密只会用来传递一条信息,那就是用于对称加密的密钥。当用于对称加密的密钥确定了,A和B还是通过对称加密算法进行网络通信因为非对称加密算法比对称加密算法要复杂的多,处理起...

2022-05-11 14:40:00 243

原创 Mysql主从复制

Mysql主从复制1.什么是主从复制主从复制是用来建立一个和主数据库完全一样的数据库,称为从数据库;主数据库一般是准实时的业务数据库。2.主从复制的作用1.做数据的热备作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。2.有利于架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器...

2022-05-06 20:20:00 817

原创 Mysql优化策略

Mysql数据库优化策略简析当数据库出现性能瓶颈时,我们需要进行优化,目前有两类的优化策略硬件层优化:增加机器资源,提升性能软件层优化:SQL调优,表结构优化,读写分离,分库分表,数据库集群数据库性能瓶颈的对外表现:大量请求被阻塞:高并发场景下,连接数不够,大量请求处于阻塞状态SQL操作变慢:比如查询上亿数据的表,没有命中索引进行了全表扫描存储问题:磁盘不够了主要简单...

2022-05-06 20:19:00 836

原创 Mysql集群方案简介

Mysql集群方案简介集群的好处高可用性:故障检测及迁移,多节点备份。可伸缩性:新增数据库节点便利,方便扩容。负载均衡:切换某服务访问某节点,分摊单个节点的数据库压力。集群要考虑的风险网络分裂:群集还可能由于网络故障而拆分为多个部分,每部分内的节点相互连接,但各部分之间的节点失去连接。脑裂:导致数据库节点彼此独立运行的集群故障称为“脑裂”。这种情况可能导致数据不一致,并且无法...

2022-05-06 20:14:00 3164 1

原创 TCP/IP面试要点浅析

TCP/IP面试要点浅析一.TCP基本认识1.TCP头部格式序列号在建立连接时由计算机生成的随机数作为初始值,通过SYN包传输给接收端每发送一次数据,就累加一次该数据字节数的大小用来解决网络包乱序的问题确认应答号指下次期望收到数据的序列号发送端收到这个确认应答号以后,可以认为在这个号以前的数据都已经被正常接收用来解决丢包问题控制位ACK该位为1时,确...

2022-04-27 14:59:00 315

原创 【系统设计】如何设计 Twitter 时间线和搜索?

如何设计 Twitter 时间线和搜索?1.业务场景业务场景如下:用户发布推文服务将推文推送给关注者,发送推送通知和电子邮件用户查看用户时间线(来自用户的活动)用户查看主页时间线(用户关注的人的活动)用户搜索关键字服务具有高可用性其他场景:服务将推文推送到 Twitter Firehose 和其他流服务根据用户的可见性设置删除推文如果用户没有关注被回复的...

2022-04-19 14:07:00 1061

原创 【系统设计】如何设计一个Pastebin.com?

如何设计一个Pastebin.com?1.用例我们将问题的范畴限定在如下用例用户 输入一段文本,然后得到一个随机生成的链接过期设置默认的设置是不会过期的可以选择设置一个过期的时间用户 输入一个 paste 的 url 后,可以看到它存储的内容用户 是匿名的Service 跟踪页面分析一个月的访问统计Service 删除过期的 pastesServi...

2022-04-18 16:25:00 409 1

原创 Golang 面试题 (4) N个协程交替打印1-100

Golang 面试题 (4) N个协程交替打印1-100启动N个协程,共用一个外部变量计数器,计数器范围是1到100开启N个有缓冲chan,chans[i]塞入数据代表协程i可以进行打印了,打印的数字就是计数器的数协程i一直阻塞,直到chan[i]通道有数据可以拉,才打印func main() { gorutinenum := 5 var chanslice []chan int...

2022-04-13 20:40:00 1485

原创 Golang 面试题(3) 两个协程轮流打印字母和数字

Golang面试编程题3实现两个协程轮流输出A 1 B 2 C 3 .... Z 26方案1:有缓冲的chanfunc ChannelFunc() { // 思想:两个g,一个输出数字,一个输出字母,重点是如何控制两个g的打印顺序,让其可以轮流打印 // 分别使用两个缓存为1的chan,来控制两个g的打印顺序 strChan := make(chan int, 1) numCha...

2022-04-13 20:12:00 1705

原创 Golang 面试题 (2) 大切片分割成指定大小的小切片

Golang面试编程题2实现一个函数可以根据指定的size切割切片为多个小切片func main() { lenth := 11 size := 5 list := make([]int, 0, lenth) for i := 0; i < lenth; i++ { list = append(list, i) } SpiltList(list, size)}fu...

2022-04-13 18:37:00 772

原创 【LeetCode】二叉树的中序遍历(非递归形式:栈模拟递归,标记模拟递归,莫里斯遍历)...

二叉树的中序遍历题目链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/面试的时候问这道题基本都是考察非递归的写法,但还是贴一下递归写法:方法1:递归var result []intfunc f(root *TreeNode) { if root==nil{ return } f(root.Le...

2022-04-11 18:26:00 130

原创 【LeetCode】最长有效括号 (dp/栈统计/栈标记再统计/双向双指针)

最长有效括号题目链接:https://leetcode-cn.com/problems/longest-valid-parentheses/问题分析:方案1:动态规划最值问题,应该是一个最值类的dp问题,考虑拆分子问题,弄清楚子问题和我们要解决的大问题之间的联系前一个子问题的解可以提供给后面的子问题多大的有效长度?(子问题)后一个子问题的解,要想纳入前面提供的有效长度,则前面...

2022-04-11 15:48:00 163

原创 【LeetCode】和为k的子数组(map统计前缀和)

和为k的子数组(map统计前缀和)题目链接:https://leetcode-cn.com/problems/subarray-sum-equals-k/题目分析:求和为k的子数组数量我们从暴力解法一步步推导1.首先最基础的暴力是三层循环,两层分别确定区间起始点,最后一层计算此区间和是否为k,时间复杂度为O(N * N * N)2.改进一下,简化最后一层循环,用前缀和来计算每次的区间...

2022-04-09 15:37:00 81

原创 【LeetCode】旋转图像(原地算法,找规律)

旋转图像(找规律)题目链接:https://leetcode-cn.com/problems/rotate-image/题目大意:将矩阵顺时针旋转90度,要求原地旋转,空间复杂度O(1)先水平对折翻转,然后主对角线翻转func rotate(matrix [][]int) { n:=len(matrix) // 水平对折翻转 for i:=0;i<n/2;i++{ m...

2022-04-09 14:29:00 388

原创 Golang 面试题 (1) 用协程交替打印奇偶数

Golang 面试题 (1) 用协程交替打印奇偶数面试神策数据时,有被问到,答得不太好,记录一下方法1两个G,分别打印奇数和偶数无缓冲channel通知这两个G,控制打印顺序var flagChan=make(chan int)func wokr1(){ for i:=1;i<=100;i++{ flagChan <- 1 //塞入 if i%2==1{...

2022-04-08 16:04:00 992

原创 【LeetCode】二叉树的序列化和反序列化(dfs/bfs)

二叉树的序列化和反序列化题目链接:https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/题目大意:写两个函数,能够分别对二叉树进行序列化和反序列化方法1:bfs序列化:采用队列实现,根节点先入队,处理时按照左孩子右孩子的顺序处理func (this *Codec) serialize(root *T...

2022-04-07 18:44:00 120

原创 【LeetCode】删除二叉搜索树中的节点

删除二叉搜索树中的节点题目链接:https://leetcode-cn.com/problems/delete-node-in-a-bst/题目大意:删除指定key的节点,返回root分析:树是二叉搜索树,要求返回后仍然保持搜索树的位置二叉搜索树:根节点值大于左孩子值,根节点值小于右孩子值根据待删除节点的情况,我们可以采取不同的措施如果目标节点大于当前节点值,则去右子树中删除;...

2022-04-07 15:56:00 215

原创 【LeetCode】课程表(图论判环 拓扑排序/dfs)

课程表( 拓扑排序/dfs 判环)题目链接:https://leetcode-cn.com/problems/course-schedule/题目大意:给定一个课程依赖关系图,比如课程A依赖课程B,课程B依赖课程C,按照上述的依赖关系,能否学习完所有的课程?先学C,再学B,最后学A即可方式1:拓扑排序我们按照图论的思想,将每个课程看做一个节点,将课程间的这种依赖和被依赖的关系看做节点的...

2022-04-07 13:19:00 172

原创 【LeetCode】LRU缓存

LRU缓存题目链接:https://leetcode-cn.com/problems/lru-cache/双向链表+mapmap用来确定链表中是否存在此key的节点双向链表用来实际存储每次get,都把get的节点放到链表头部每次put,两种情况key存在,更新value,此节点移到头部key不存在,构建新节点,加入头部,此时需要判断新加入节点后是否需要淘汰一个节点,如果需要淘汰...

2022-04-06 17:47:00 76

原创 【LeetCode】二叉树的最近公共祖先

二叉树的最近公共祖先链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/题目大意:求p和q在root树上的公共祖先,p和q可以是自身的祖先方法1:归根结底还是分解成子问题,然后递归求解针对树上的每一个非pq节点X,pq节点的分布有以下四种情况:情况1:p和q在X的左右子树上,一边一个...

2022-04-06 15:28:00 347

原创 【LeetCode】二叉树最大路径和(dfs)

二叉树最大路径和题目链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/分析:这个题目是求二叉树的最大路径和,要点有两个:最大不能走回头路:从根节点延伸的路径,你不能走了左子树又掉过头来走右子树最大路径不一定要经过根节点思路:对每个非叶子节点,其实都面临这样一个问题:求解从此节点开始的最大路径和,所以...

2022-04-06 12:00:00 254

原创 力扣 二叉树展开为链表(dfs)

力扣 二叉树展开为链表(dfs)题目链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/题目的意思是按照其先序遍历的顺序将二叉树展开为链表,要求使用O(1)的内存空间,所以先排除先序遍历出存储起来再构造链表的方法根据观察,应该是dfs,分为三步:第一步,将根节点的左子树展开为链表第二步,将根节点...

2022-03-10 18:07:00 237

原创 力扣 验证二叉搜索树(dfs或中序遍历)

力扣 验证二叉搜索树(dfs或中序遍历)题目链接:https://leetcode-cn.com/problems/validate-binary-search-tree/题目的意思就是验证一棵树是不是二叉搜索树二叉搜索树的特征就是左孩子值小于根节点值,右孩子值大于根节点值解析:方法1就是进行一遍中序遍历,如果得到的序列是升序的,那么该树是二叉搜索树方法2:从根节点开始搜索,每...

2022-03-10 15:57:00 94

原创 力扣 组合总和 (标准dfs)

力扣 组合总和(标准dfs)题目链接:https://leetcode-cn.com/problems/combination-sum/题目的大致意思就是从一个没有重复元素的数组中,抽取任意个数其和要等于target,让你列出所有的组合方式需要注意的是可选择多个同样的数组元素,无单个限制解析:target=7,选一个2,target=7-2=5,此时意思就是已经选了一个2了,求ta...

2022-03-10 11:27:00 122

原创 力扣 二叉树直径(dfs)

力扣 二叉树的直径(dfs)题目链接:https://leetcode-cn.com/problems/diameter-of-binary-tree/题目的意思是求二叉树的直径,就是从任意节点出发,到任意节点结束,最长的那一条路径,也就是这条路上经过节点的数量减去1就是最长直径需要明确的是,其最长直径不一定非得要经过根节点,所以我们应该以每个节点当做根节点,保存其路径最大值同时,以该节...

2022-03-09 16:04:00 300

原创 力扣 相交链表

力扣 相交链表题目链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists题目大致意思就是判断两个链表有没有交点,有的话给出交点,没有的话返回null要求是不能修改链表,并且时间复杂度为O(N+M),空间复杂度为O(1)假设,有两个链表A和B,长度为N和M,p和q分别指向A和B链表的头节点方法1:长链表...

2022-03-08 16:44:00 171

原创 力扣 括号生成(dfs+剪枝)

力扣 括号生成(dfs+剪枝)数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示: 1 <= n <= 8分析搜索+剪枝剪枝条件:右括号数量不能大...

2022-03-08 12:32:00 92

原创 Redis基础知识扫盲

redis基础知识扫盲1. redis有哪些数据结构?其底层又是如何实现的?基础数据结构:String字符串对象底层实现int : 整数值实现短字符串:embstr编码,sds实现长字符串:raw编码,sds实现List列表对象底层实现ziplist 压缩列表图例linkedlist 双端列表图例满足特定条件的对象才使用zi...

2022-02-21 16:38:00 648

原创 秒杀系统设计浅析

秒杀系统设计浅析一.引言先假设一个业务场景,某商品秒杀活动,100件库存,大概预估10w人参加活动二.系统面临的问题1.高并发秒杀这种业务场景的特点就是时间极短,瞬间用户量极大2.超卖问题卖出高于库存数量的商品3.链接暴露,恶意请求问题类似黄牛,专门抢这种低价秒杀商品,然后又转手高价卖出去4.数据库压力问题十几万的QPS基本都要把数据库打挂,如果秒杀业务还设计...

2022-02-21 16:17:00 327

原创 Golang-分段锁实现并发安全的Map

Golang - 分段锁实现并发安全Map一.引言我们一般有两种方式来降低锁的竞争:第一种:减少锁的持有时间,sync.Map即是采用这种策略,通过冗余的数据结构,使得需要持有锁的时间,大大减少。第二种:降低锁的请求频率,锁分解和锁分段技术即是这种思想的体现。锁分段技术又可称为分段锁机制什么叫做分段锁机制?将数据分为一段一段的存储,然后给每一段数据配备一把锁.这样在多...

2022-02-12 10:39:00 1263 1

原创 Golang - sync.map 设计思想和底层源码分析

Golang - sync.map 设计思想和底层源码分析一.引言在Go v1.6之前,内置map是部分goroutine安全的,并发读没有问题,并发写可能有问题在Go v1.6之后,并发读写内置map会报错,在一些知名的开源库都有这个问题,所以在Go v1.9之前,解决方案是加一个额外的大锁,锁住map。在Go v1.9中,go官方提供了并发安全的map,sync.map。...

2022-01-24 13:00:00 1012

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除