自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 分布式还有这个坑

这是一篇3分钟就能阅读完的文章,相信对你有极大的实战帮战hi,大家好,我是康师傅,最近看到一个比较有意思的问题,关于分布式锁的,自己平时在工作中也有用到分布式锁,但是确实也没注意到一些临界值的问题,说白了就是没有进行深度思考。关于这个标题,你可能会比较诧异,锁还能怎么优雅删除?直接一个 delete 不就完了,不然还怎么删除。首先啊,我们先简单说下为什么要分布式锁,现在基本上都是分布式系统,应该没有什么系统是部署的单节点吧,因为单节点风险比较大,如果节点宕机,那么整个应用就起不来,如果是多节...

2022-03-20 20:58:50 2616 6

原创 MySQL join没用到索引,跪了~

MySQL Join 你用过吗?你知道其中的原理吗?

2022-01-26 09:08:16 4631 1

原创 redis 奇葩数据类型和集群知识

今天聊聊 redis 的数据类型和集群相关的知识,冲~。多样的数据类型string类型简单方便,支持空间预分配,也就是每次会多分配点空间,这样 string 如果下次变长的话,就不需要额外的申请空了,当然前提是剩余的空间够用。List类型可以实现简单的消息队列,但是注意可能存在消息丢失哦,它并不持 ACK 模式。Hash表有点像关系型数据库,但是当 hash 表越来越大的时候,请注意,避免使用 hgetall 之类的语句,因为请求大量的数据会导致redis阻塞,这样后面的兄弟们就得等待...

2022-01-04 08:29:38 2521 5

原创 切,老掉牙的TCP知识

hi,大家好,我是康师傅,今天和大家聊聊网络协议那些常见的知识点,为了要聊这个知识呢?主要是因为自己快忘完了,同时这不今年快要结束了,可能很多同学都在开始准备明年的面试了,那么我想不管你是前端、后端还是客户端,网络协议这块的复习应该是少不了的。网络协议离不开我们常说的http、tcp这些,在网络分层模型中 http 属于应用层协议,tcp属于传输层协议,其实应用层协议还有像smtp、ftp等协议,传输层还有udp协议,当然我们今天重点说下http和tcp相关的知识,http离不开tcp,因此我们先说说t

2021-12-28 09:22:57 4188 12

原创 架构师?so easy

在大数据的时代、流量爆发的时代,怎么保证我们的服务安全、稳定是每个企业、每个开发者需要关注的问题。于是微服务、分布式、大数据等等一些高大尚的名词出现了...。然而无论多么复杂的系统或者框架,它们肯定都是由某些细小的东西组成的

2021-12-16 09:09:51 4416 9

原创 比特跳动公司的三面

上回说到程序员小扎在通过二面之后,最终来到了技术的最后一面。最后一面当然是我们接下来要讲的这位技术总监,这位技术总监安静的看着程序员小扎的简历,然后说到:我看你的之前的工作做过支付相关的业务,那我问你如果收到了两次微信或者支付宝的回调通知该怎么办?「小扎」:哦哦,这个我们一般会做幂等,支付回调一般会有订单ID这样的信息,我们只要判断同样的订单ID是否已经处理过,如果处理过了,就直接忽略就好了。「总监」:那如果在支付过程中,商品库存减成功了,用户的订单更新失败了怎么办?「小扎」:这个我们一般会用事务来保证

2021-12-13 08:44:57 5970 22

原创 如何让网络传输更快-CPU和磁盘之间的恩怨情仇

你们知道当程序需要读取或者写入数据的时候,CPU是如何操作我们的磁盘的吗?首先CPU肯定是要把读写数据的命令告诉给磁盘,这个命令可以通过IO总线传给磁盘,那这里有个细节...

2021-12-07 09:15:57 6409 16

原创 比特跳动公司的二面

程序员小扎比特跳动公司的二面

2021-11-30 09:16:56 15355 35

原创 比特跳动公司的一面

程序员小扎面试记

2021-11-24 09:10:51 28994 60

原创 小心陷入MySQL索引的坑

你可能会遇到这样的情况:这个字段我需不需要加索引?对于这个问题,我们常用的判断手段就是:查询会不会用到这个字段,如果这个字段经常在查询的条件中,我们可能会考虑加个索引。但是如果只根据这个条件判断,你可能会加了一个错误的索引

2021-11-19 15:09:21 1854

原创 从机械硬盘和固态硬盘的结构来看IO

“磁盘”这个词,对于程序员来说并不陌生,我们知道它是一种存储介质,主要用来存储数据的,可以说常用的中间件基本上都离不开它,比如我们常用的MySQL数据库、kafka消息引擎,甚至redis缓存都离不开磁盘。我们在优化某个业务逻辑的时候,经常需要用到缓存,尽量让热数据都从缓存里读取,因为我们知道磁盘是缓慢的,特别在高并发的场景下,我们要保证极少的请求走磁盘IO。不知道你有没有思考过以下问题: 机械硬盘为什么慢? 机械硬盘有多慢? kafka也是写磁盘的,它却挺快的,为什么?..

2021-11-16 08:56:23 42470 48

原创 你真的了解MySQL的order by吗

排序这个词,我的第一感觉是几乎所有App都有排序的地方,淘宝商品有按照购买时间的排序、B站的评论有按照热度排序的...,当然我们今天说的并不是大数据下该如何优雅的排序,如何提升排序性能的问题,我们说一说MySQL中的排序。对于MySQL,一说到排序,你第一时间想到的是什么?关键字order by?order by的字段最好有索引?叶子结点已经是顺序的?还是说尽量不要在MySQL内部排序?事情的起因现在假设有一张用户的朋友表:CREATETABLE`user`(`id`int(...

2021-11-09 09:21:28 5314 10

原创 内存管理:程序是如何被优雅的装载到内存中的

内存作为计算机中一项比较重要的资源,它的主要作用就是解决CPU和磁盘之间速度的鸿沟,但是由于内存条是需要插入到主板上的,因此对于一台计算机来说,由于物理限制,它的内存不可能无限大的。我们知道我们写的代码最终是要从磁盘被加载到内存中的,然后再被CPU执行,不知道你有没有想过,为什么一些大型游戏大到10几G,却可以在只有8G内存的电脑上运行?甚至在玩游戏期间,我们还可以聊微信、听音乐...,这么多进程看着同时在运行,它们在内存中是如何被管理的?带着这些疑问我们来看看计算系统内存管理那些事。内存的交换技术..

2021-11-04 09:29:02 4302 12

原创 redis IO模型的演进

前言redis作为应用最广泛的nosql数据库之一,大大小小也经历过很多次升级。在4.0版本之前,单线程+IO多路复用使得redis的性能已经达到一个非常高的高度了。作者也说过,之所以设计成单线程是因为redis的瓶颈不在cpu上,而且单线程也不需要考虑多线程带来的锁开销问题。然而随着时间的推移,单线程越来越不满足一些应用场景了,比如针对大key删除会造成主线程阻塞的问题,redis4.0出了一个异步线程。针对单线程由于无法利用多核cpu的特性而导致无法满足更高的并发,redis6.0也推出了多线程模式

2021-11-02 21:30:51 1692 3

原创 20张图-常见分布式理论与解决方案

对于分布式系统,最简单的理解就是一堆机器对外提供服务,相比单体服务,它可以承受更高的负载,但是分布式系统也带了一系列问题,比如如何解决某个节点故障的问题?如何解决数据一致性的问题?如何解决数据倾斜的问题?今天通过这篇文章,带大家搞懂和分布式相关的常见理论和解决方案。CAP理论先从定义开始:C(Consistence):一致性,所有的节点访问的是最新的数据副本,这是什么意思呢?我们知道在分布式系统中,为了高可用,往往一个节点会有若干个数据副本,简称Follower节点,比较常见的模式是我们的数据更

2021-11-01 09:24:00 1721 1

原创 一文搞懂MySQL持久化和回滚

redo log事务的支持是数据库区分文件系统的重要特征之一,事务的四大特性:原子性:所有的操作要么都做,要么都不做,不可分割。 一致性:数据库从一种状态变成另一种状态的的结果最终是一致的,比如A给B转账500,A最终少了500,B最终多了500,但是A+B的值始终没变。 隔离性:事务和事务之前相互隔离,互不干扰。 持久性:事务一旦提交,它对数据的变更是永久性的。本篇文章主要说说持久性相关的知识。当我们在事务中更新一条记录的时候,比如:update user set age=11

2021-10-28 09:09:43 3958 9

原创 简单!代码原来是这样被CPU跑起来的

CPU对我们来说既熟悉又陌生,熟悉的是我们知道代码是被CPU执行的,当我们的线上服务出现问题时可能首先会查看CPU负载情况。陌生的是我们并不知道CPU是如何执行代码的,它对我们的代码做了什么。本文意在简单解释我们代码的生命周期,以及代码是如何在CPU上跑起来的。编译-让计算机认识我一个漂亮 control+c 加上一个漂亮的 control+v,啪~,我们愉快的写下了代码,当代码被保存后,它就被存在我们磁盘的某个地方,它可能是像java或者python这些高级语言写的,也可能是像c这种古老语言写

2021-10-25 09:03:04 6625 16

原创 kafka-我与面霸的三百回合大战

本文面试情节虚假,但知识真实,请在家人或者朋友的陪同下仔细观看,防止在观看的过程发呆、走神导致没学到知识。性能篇一位身穿格子衬衣,头发好似一拳超人的中年人走了过来,没错他就是面试官,他手握简历,若有所思,我当时害怕极了,然后他开口:小伙子啊,我们这边是基础架构的中间件组,既然你的简历没提到kafka,那我接下来问问你kafka的知识吧。我:好的,kafka平时看的不多,但也还了解一点,不是特别精通所以没写了。(嘿嘿,我是故意没写的,早就知道你要来这一套,kafka其实是俺最精通的东西了)面试

2021-10-20 07:30:40 2836 5

原创 肝文-MySQL面试小抄

使用覆盖索引减少IOmysql的索引类型主要分为聚集索引和非聚集索引,通过聚集索引可以获取到整行数据,而通过非聚集索引只能获得主键id和当前字段。当我们要查询的字段就是非聚集索引叶子含有的字段(primary key+field),那么就不需要回表查询更多的字段,这就是覆盖索引。# name是索引字段1. SELECT id,name from user WHERE name='假装懂编程'#不需要回表2. SELECT id,name,age from user WHERE name='..

2021-10-19 21:12:17 1759 6

原创 kafka扫盲-思考与实现

微信搜【假装懂编程】,与作者零距离交流由于工作中经常用到kafka,但是对kafka的一些内部机制不是很熟悉,所以最近在看kafka相关的知识,我们知道kafka非常经典的消息引擎,它以高性能、高可用著称。那么问题来了,它是怎么做到高性能、高可用的?它的消息是以什么样的形式持久化的?既然写了磁盘,为何速度还那么快?它是如何保证消息不丢失的...?带着这一系列的问题,我们来扒开kafka的面纱。首先我们思考这样一个问题:为什么需要消息引擎?为什么不能直接走rpc? 以一个订单系统为例:当我们下了一.

2021-10-14 08:08:37 4591 11

原创 万字总结redis

redis数据类型剖析1.stringsds数据结构,采用空间预分配和惰性空间释放来提升效率,缺点就是耗费内存。struct sdshdr { int len; //长度 int free; //剩余空间 char buf[]; //字符串数组};空间预分配:当一个sds被修改成更长的buf时,除了会申请本身需要的内存外,还会额外申请一些空间。惰性空间:当一个sds被修改成更短的buf时,并不会把多余的内存还回去,而是会保存起来。总结:这种设计的核心思想就是空间

2021-10-11 07:56:05 10357 20

原创 一文搞懂锁知识

一位风尘仆仆的男子走了过来,对我说:小伙子,我看你简历上写的精通mysql,那我就问问你mysql的知识吧!我:好的(千万别多问,千万别多问~~)面试官:对mysql锁了解的多吗?我:还行(其实就是很好)。面试官:那好,那我接下来主要问锁相关的知识我:好的好的(放马过来吧,我也就是客气一下。)面试官: mysql支持哪些级别的锁?我:支持库锁、表锁、行锁。面试官:那先说说库锁吧,锁库有几种方式?我:两种,分别是FTWRL(Flush tables with read

2021-10-09 08:33:45 9309 31

原创 一个简单的删除,我发现这么多知识...

删除并不是真正的删除熟悉mysql innodb存储引擎的同学应该知道,当我们执行delete的时候,数据并没有被真正的删除,只是对应数据的删除标识deleteMark被打开了,这样每次执行查询的时候,如果发现数据存在但是deleteMark是开启的话,那么依然返回空,因为这个细节,所以经常会出现“我明明删除了数据,为什么空间没释放”的现象。15M7618:46user_info.ibd#删除前15M10416:47user_info.ibd#删除后为什么不直接删...

2021-10-08 10:43:50 11458 13

空空如也

空空如也

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

TA关注的人

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