持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第10天,点击查看活动详情
记录一下格灵深瞳一面的情况
总我介绍
首先进行自我介绍
计算机基础
二进制减法实现
这个我在前几天的原码反码补码这个帖子中,为什么计算机使用补码计算,正好分析过,这里再说一下
- 计算机减法是把加法换成减法进行运算,比如 2 - 1 = 2 +(-1)
- 机器数就是二进制数,但是最高位是符号位。比如 1 = 0000 0001 , -1 = 1000 0001.这也就是原码。
- 如果使用原码计算 2 + (-1) = 0000 0010 + 1000 0001 = 1000 0011 = -3.这样会出错
- 为了解决这个问题,出现了反码。
- 2 + (-1) = (0000 0010 + 1111 1110)反 = 0000 0001 = 1
- 但是还会出现一个问题 +0 和 -0 的问题 +0 = 0000 000 ,-0 = 1111 1111。对计算机来说一个数字只能对应一个机器数,否则会在运算的时候出现错误。于是为了解决这个错误,出现了补码
- 补码:
- 我们这样设定,0对应的是+0。所以0的编码是0000 0000
- 那么-0就不能表示0,人们就把-0 ~ - 127 整体向后偏移了1位,编程了 -1 ~ -128.至于怎么偏移,就是补码+1 变成反码。
- 然后我们可以顺着推,1111 1111 是 -1 。那么-128 就是 1000 000了。
- 至此解决了+0,-0的问题,而且int8的数据范围多了1个,变成了 -128 ~ 127。完结撒花
int8类型,-128 - 1的结果
明白了加法是怎么实现的就很好理解 -128 - 1 = 1000 0000(补)+ 1111 1111(补)= 0111 1111 =127。当然这样记太麻烦了,也可以这样记,把整个数据范围看成一个循环
mysql
-
mysql常见的搜索引擎
- MYISM
- Innodb
- MEMORY
- MEGRE
- NDB
-
为什么默认使用Innodb引擎
- Mysql之前采用的引擎是MYISM,但是MYISM有个很大的缺点,就是不支持事务、不支持行级锁,如果一旦崩溃无法安全恢复
- MYISM只支持表级锁,一锁就锁住了整个表,在并发情况下很不好
- Innodb支持事务安全、支持行级锁,也就是说Innodb可以安全的进行数据崩溃恢复和回滚,并发表现更好
- Innodb支持外键
- blog.csdn.net/qq894351194…
-
事务
-
Innodb为什么使用B+树
- 这个在我为什么Innodb选择B+树索引也有分析,下面再分析一下。
- B+树结构是一个多叉树,和二叉树相比,同样的数据树的高度更低,搜索效率就更高
- 和B树相比,B+树的非叶子节点只存存储关键字,不存储数据,而B树存储关键字和数据。而叶子节点其实就在Mysql的页上面,这个是固定的。所以B+树的叶子结点的关键字就更多,同样多的数据,B+树的层级会更低
- 然后B+树的叶子节点会有指针指向相邻的叶子节点,而B树没有。也就是说相比哈希和B树,B+树更适合做区间搜索
-
回表查询
- 想要查找的数据需要再次根据主键去聚簇索引中查找,就叫做回表查询
锁
- 介绍一下乐观锁还有悲观锁
- Mysql的锁是乐观锁还是悲观锁
- 乐观锁和悲观锁的区别在哪
- Redis怎么实现分布式锁
go
- 中间件是怎么实现的
- 中间件Next方法停止了当前的中间件,去执行下一个中间件,怎么实现的?
算法
- 手撸了两个力扣easy难度的题,不值一提
- topk问题 -- 10亿个int型数据找出值最大的k个数据
- 维护一个大小为k的小根堆,遍历的时候数据大于最小值,就删除最小值,替换维护这个小根堆。时间复杂度是 nlongk(这个是所有方法的下线)。 可以优化,使用分治+小根堆,分治可以使用并发实现,可以把时间缩短,但是还是要把所有数据再遍历一遍。
- 分治+排序,每组取最大的m个值,然后这个最大的值再取k个值。时间复杂度是nlongn
项目
- 项目有没有涉及高并发场景
- 很遗憾我的项目没有这个,我也不知道怎么说