招聘岗位内通
主要是做基础云服务搭建、包含鉴权、发票等公司通用业务
面试流程
整体面试感觉还可以,自己说的有点结结巴巴,没有网上说的那么桀骜不驯,自以为是,目中无人情况,但是有些问题自己确实没有准备特别好,像go语言、redis底层跳表等,无奈的是又是4道算法题,这次算法运气好,整体算是做出来3道,其中有一题是暴力破解
面试题真解
Redis 连环问
1、redis 常用数据结构?五种:string/hash/list/set/zset
2、用 redis 设计一个 ip查找地区?(提示我了ip可以转化为int) zset + zrangByScore(求分数值区间范围)
cityIP 通过 ip2long 转换
value: city
score: ip(小的ip端加特殊字符区分)
3、zset底层怎么实现?回答了跳表(zipList + skipList)
# zipList
故事:假设10w个1 5个10000000,用数组需要按最大去开辟,浪费空间
zipList:节点+长度(按需分配)
优势:节约内存
劣势:
1、压缩表是紧凑的,新增元素动态调整我们内存,不适合大规模数据量
2、节点会存储前一个节点大小,会导致连锁更新问题
(前一个节点<254,长度用1个字节,>254,长度五个字节)
# skipList
1、多层有序链表实现(链表也有层级关系,上下层比约是1:2)
2、查询时间复杂度O(logN)
3、支持我们范围查询(倒序、正序)
4、创建节点层数是随机生成
4、redis 失效,很多数据打到 DB?
热点数据
es
后台续命(定时处理快过期key)
setNx + 第一个生成缓存
限流
5、了解的限流算法?两者区别?令牌生成规则?(因为上一问说了限流)
1、固定窗口(类似redis计数器)
单位时间计数,超过就拒绝访问,可能存在并发超过场景
2、滑动窗口
更小单位时间的计数,解决上面临界问题
3、漏桶算法
// 系统当前时间
long curTime = System.currentTimeMillis()
// 流出的水量 rate
long outWater = (curTime,refreshTime)/1000 * rate
// 桶容量
curWater = max(curWater - outWater, 0)
if (capcity < curWater) {
curWater++
return true
}
return false
3、令牌桶算法
// 系统当前时间
long curTime = System.currentTimeMillis()
// 放入临牌速度
long generateToken = (curTime,refreshTime)/1000 * putTokenRate
// 临牌容量
curToken = min(generateToken + curToken, capcity)
if (curToken > 0) {
curToken--
return true
}
return false
6、api 刷 DB 不存在数据,如何处理?
查询接口为空 -> 缓存(不是面试官答案)
双重缓存
Go
1、空结构用过么? 不占用内存空间,具有很强语义性,通常作为占位符 通知子协程任务执行
2、new、make 区别? 作用:new 只分配内存,获取指向类型指针,make初始化内置数据结构 返回值:new返回的类型是指针,make是对应类型本身 范围:make只用于slice、map、channel,new可以对所有的
3、channel 用过么? 有缓存channel、无缓冲channel
4、切片与数组区别?切片扩容,扩容原理 切片底层就是数组,切片也叫动态数组
5、问输出什么? append() - 数组装不下,创建新的数组来保存切片
6、GMP模型讲解?如果发生阻塞应该怎么处理? G-携程 M-操作系统 P-上下文环境 发生阻塞,会另外起一个P继续运行,不会继续阻塞
7、全局G和本地G区别? 全局G:存放等待运行的G 本地G:存放等待运行的G,数量有限制,新建G优先添加本地,如果队列满了,则会把本地一半G移动到全局G队列
8、GMP模型对比线程模型有什么优缺点? 去除了内核切换消耗
9、线程切换与协程切换区别? 用户态-协程 用户态和内核台-线程
协程切换相比线程切换做的事情更少(都是用户态完成)
算法题
1、爬楼梯。(本质是斐波那次) leetcode 70
2、每日温度(暴力破解) leetcode 739 (最优解单调栈)
3、环形链表I(快慢指针) leetcode 141
4、环形链表II (快慢指针解决相遇点 + 快指针到头部 = 相遇点 == 环形入口) leetcode 142
总结
1、加强项目常见问题总结
2、redis 底层还需要多了解下,还有特殊场景运用
3、leetcode 不刷不行
总结:感概,互联网真的是越来越卷了,大学的给我们培训的老师也刚在成都被裁,今天问他,他还是在看数据库底层、redis底层实现等,不由的想到自己,可能也快了吧,说不定那天,给自己的一些建议,
第一:既然互联网的已经如此的卷了,那么可以考虑利用空闲时间向其他方向发展了,周末帮帮大家遛遛狗、喂喂猫提升点额外收入也不错
第二:做好随时被裁的准备,提升自我永不过时。可以计算机其他的有门槛的岗位,最近在了解算法、芯片验证。
第三:20多岁的年纪就背负了百万债,经济不好,还是不要轻易买房吧,我现在就是被房贷绊住了脚,买房掏空了家里钱包,自己还负债,不买房结婚也给不了另一半一个家,真的是两难
也希望大家能找到好的工作