深信服C++秋招一面复盘 9-16

背景:深信服MSS海外组——后端开发实习

本次面试,重点围绕实习期间的需求:ip2region微服务化改造需求深入探讨。本菜鸡觉得压力满满,全程斯米马赛,感觉蛋了个糕。
(注:复盘时候发现录像忘记录本地音了woc,之前面百度也是现在也是- -, 只能尽量去回忆当时说了什么)
(再注:面试是面试官的摄像头一闪一闪亮晶晶的(绿屏花屏),把我眼睛闪瞎了)
(继续住:简历上根本没有写了解分布式理论,笑死。)

面试内容

  1. 介绍一下自己
  • 背到烂的自我介绍
  1. 介绍一下ip2region
  • ip2region我们海外组的一个需求,因为之前只服务国内,所以地理位置信息只有中文,现在第三方服务商提供了一个英文的更全的离线包,不过这个包太大了,组长就让我起一个微服务,对内提供ip地理位置映射接口(忘了面试咋说的了,差不多是这样)。
  1. 你的这个微服务是用什么语言写的,平台是什么?(???平台- -,我能理解成注册中心吗)
  • Python,注册中心用的consul。
  1. 只是用的注册中心是吧?那服务的访问呢?
  • 我们部门有人将consul的服务注册服务发现服务监控等封装成包了,我只需要调用这个包提供的方法就行,不过这个包的具体实现我还是看过他的源码的。
  1. 为什么用的consul?(first blood,已经不会了。。)
  • (沉默是金)呃。。。我从分布式一致性方面来说吧,consul他是强一致性和有分区容错性的,牺牲了高可用性。可能是因为这个原因?
  1. 那为什么不保证高可用呢?(double kill,9m我不会分布式原理aaaaaaa)
  • (胡说八道ing),可能是我们的产品面向的b端,流量不是很大,可能没有高可用也可以(复盘后翻译的人话:对高可用没有很强烈的需求),反而是对强一致性有需求。(这答的啥这是。。。)
  1. 不需要高可用为什么需要分区容错性?(trible kill????别问了哥,人已经不好了,已经感觉寄了)
  • 额,我不知道。
  1. 你怎么理解分区容错性?(听我说谢谢泥,(bushi),这个我背过,直接八股)
  • consul的分区容错性首先他的所有请求需要半数以上的节点同意才能生效,当发生网络分区,假设分成两个区域,那么超过一般节点的那个分区将会生效。(这里面试的时候说错了,说成没有leader分区的那个分区会选举出新leader,--)假如超过有一半节点的那个分区没有leader,就会自动选取出一个新leader。我的理解是分区容错性不能保证高可用,因为另外一个少于半数节点的分区,无论有多少请求,都不会成功。这就保证了分区容错性。(个人理解啊,如果有误麻烦大佬们指正qaq)
  1. 那他跟高可用有什么区别?
  • 不会,忘记怎么回答了(个人理解是高可用可以保证服务请求成功,比如说之前b站崩溃就导致了可用性为0。)
  1. 按我的理解一般来说用户对高可用还是要求很高的。为什么你们要舍弃高可用而保证了一致性?
  • 解答同5(为什么要反复鞭尸啊)
  1. 有看过Raft算法嘛?
  • 有的,我在接到这个需求的时候有查资料了解过这个分布式一致性算法。
  1. 有看过代码嘛?(听我说。。。不听了已经麻了)
  • 这个没有。。。

——————————————

  1. 好的,你的ip2region这个东西,提供了ip地址映射,这个映射是什么呀?(终于问别的了,我哭死)
  • 这个是根据IP地址返回对应的地理位置信息。
  1. ip地址量有多大?
  • 里面应该记录了全球范围的ip地址。
  1. 他的ip信息会有多少呢?
  • 这个数据是第三方提供的离线数据包,具体我不太清楚。
  1. 都是ipv4地址嘛?
  • 是的之前只实现了ipv4的。
  1. 你的离线包,他一定有4个255的内容嘛?
  • emmm,应该有地址分类或者可能有想同一子网地址相同的情况,就可以合并记录成一个地址区间。(当时已经说的语无伦次了)
  1. 对于ip地址段,你是怎么匹配的呢?(草,是绿色的)
  • 额,我不太清楚,我有去查找相关资料,他离线包里面的内容大概划分成了索引区和数据区,我想应该是先从索引区找到对应ip的内容区的地址,再到内容区读取响应内容,这样就能匹配到地理位置信息。
  1. 你这个索引段是怎么查找的?
  • 额。。。。。不太清楚,我想应该是二分。
  1. 二分法怎么查找地址段?你不是说查找的是地址段嘛?不是一个确切的ip地址诶。
  • 额。。。。。我想一下。。。。应该取折中的确切ip地址?
  1. 那么会这有两个问题,第一个问题是地址段是怎么进行索引的,或者说地址段是怎么进行排序的?
  • 还是和查找方法法一样?取折中的ip地址,在进行排序。
  • (面试官:ip地址不是字符串嘛?)答:可以先转换成一个确切的数,就是比如说1.1.1.1,可以通过1 * 256 ^ 0 + 1 * 256 ^ 1 + 1 * 256 ^ 2 + 1 * 256 ^ 3,这样子转换,再对转换后的数进行排序。
  1. 这个数是什么类型的数?他会有多大?(忘了问的啥。。突然说如果数过大会涉及大数排序,0A0又是啥555)
  • 我想先设成long long吧,怕设成int会超(现在想想确实,应该设置成unsigned int32)。有多大啊。。。255255255*255?
  1. 有了解过ipv4地址的格式嘛?
  • 点分。。。(说道这里卡住了突然不知道是几进制了,可能被前面的问题问晕了,面试才进行了15分钟啊555)十进制吧好像。
  1. ipv4,C语言是怎么存储的,用的什么样的数据结构?
  • 额。。。。。我没了解过。
  • (面试官:能想一想嘛)我想想啊,我能想到两种,一种是我之前说的直接转换成一个确切的数,另一种是以数组形式存储,数组空间为4,存储一个八次方的数(又胡言乱语了,当时在想256是2的几次方emmm,面试官小声bb:8次方是什么鬼),(急忙补充)2的八次方的数,也就是4个空间大小的八位存储。比如说1.1.1.1,我们可以直接存到数组中。
  • (面试官:这个想法是合理的。)
  1. 那么你说的数组,这个大小是多大呢?
  • (我直接大脑高速运转知识宇宙.jpg)额。。。。(一七得七二七四十八三八妇女节五一劳动节(bushi))应该是四个字节。
  1. 那这种数据结构怎样进行索引排序呢?
  • 额。。。。。。这个不是很好排序吧。。。。。
  • (面试官:不好排序?为什么不好排序啊?)哦哦,可以排序,我们可以遍历下标定位他们的位置,比如说先确定下标为零的数组确定他们的位置,再在下标为0相同的数组确定下标为2的数的位置,以此类推(当时忘记说什么了,反正说的有点乱,好像说成查找方法了,寄。。。)
  • (面试官:有没有更好的方法?)二分?
  • (面试官:二分是查找方法?有没有更好的排序方法?)额。。。我不知道了。
  1. 那你说一下常用的排序方法?这些排序方法关注两个数的什么关系?(--???)
  • 有冒泡、插入、归并、堆排、快排等等,(后面已经语无伦次了)冒泡就是两个相邻的数相比较,每一轮排序最后确定一个数的确切位置;插入也是相邻两个数比较大小(卡壳了,说的不全);归并有点像二分的思想,把一个问题拆分成两个子问题,最后拆分成两个数比大小,然后将子问题解决完这个问题就解决了;快排也是二分思想,每次会取一个基准数,我们这里就三点取中吧,然后基于这个基准数划分为左边比基准数小右边比基准数大的部分,再对这两个部分进行排序。
  1. 那么回到刚才的问题(听我说。。。已经麻了)你觉得排序用哪个排序比较好?
  • 额。。。我想下啊,我想用快排?
  1. 快排具体怎么将ip排序呢,假如是确切的IPv4地址。
  • 和刚刚我说的思路差不多。
  1. 两个ip怎么比较?
  • (怎么又回到之前的问题了--!)回答和之前的差不多。(面试官:如果是ip段呢?)可以取折中的ip地址。(忘记我怎么说了。。。)
  1. 你怎么找到折中的ip?用什么方法?
  • emmmmm。。。(大脑已经死机了)我们说一个最朴素的吧,就直接从起始地址开始遍历,遍历到结束地址,之后找到他中间的地址。
  • (面试官具体呢?用什么遍历?)emmmmm。。。可以定义一个快慢指针。
  • (面试官:快慢指针?不是遍历链表的方法嘛?)我觉得这里也适用,你先听我说,一个走一步,一个走两步,快指针走到结束地址,满指针的地址就是折中的地址。
  • (面试官:那他ipv4不是有四个段嘛?那你怎么走呢?)可以在下标为0的地址累加1,逢255进一。(又问了一些细节。。不写了麻了)
  1. 好的,第一个问题问完了,第二个问题是,你找的这个ip地址可以代表这个ip区间嘛?什么情况下不能代表这个ip区间?
  • 额。。。。。。。不知道。(红豆泥私密马赛)(面试官:假设我的段有重叠怎么办?)额。。。。确实没考虑到。(那你现在考虑一下呢?)可以根据起始ip进行排序,如果起始ip一样的,保守一点的话就根据结束ip进行排序,或者说可以随便排序。
  1. 那如果不是重叠关系,是包含关系呢?怎么处理?
  • 额。。。。。。(听我说。。)不太了解,我想可以用树状结构,用线段树?(开始给自己挖坑)
  1. 线段树?你知道线段树是怎样的结构嘛?
  • (只了解过一次线段树。。太菜了我- -,如果有说错的地方麻烦大佬们指出)线段树就是,每个节点的值为起始值和终止值,是一段区间,然后根节点区间和其子树所有节点的区间和是包含关系。
  1. 那这个结构怎么解决重叠问题,又是怎么解决排序问题的呢?
  • 忘记当时说的啥了。。。反正在胡说八道就对了。(省略一堆与面试官的对话和我的疯狂的私密马赛)
  • 面试官:其实重叠情况是要进行数据清理的,因为一个ip并不能表示两个地理位置(原来是现实逻辑问题,听我说。。。),但是这个数据清理可能不能完全清理掉,要看你的数据的情况。我问问你,这个清理给你做,你应该怎么清理呢?— — 答:私密马赛,我不会。
  • 面试官:假设没有重叠,那ip段怎么排序?(这不是回到之前的问题了吗?直接说和之前的想法一样。)
  1. 手撕分割IPV4,返回数组。(因为时间不够了,本来还想叫我写快排,就只让我撕这个。)
  • 讨论了一下IPv4输入数据格式,返回数组的数据格式,然后开撕。(终于有个正常问题了555)

反问

  1. 我的表现怎样?
  • 这个好像是不能说的吧,如果通过的话会通知你的。
  1. 我还以为一面问的是基础问题呢
  • 答:这个也是基础问题啊。(--,是我太菜555)
  1. 是指定部门面还是不分部门统一面试?
  • 网申的时候是指定部门嘛,没有指定就是不分部门统一面试。
  1. 多久能出结果呢?
  • 我不清楚具体什么情况哦。

最后的话

还以为一面是常规八股没想到会挖这么深入(感觉就是对需求的深入探讨吧),面试官还是挺好的,一直在引导我回答问题,感谢和面试官就我实习经历做的需求展开深入探讨,就是感觉好多答不出啊只能私密马赛qaq,如果不是面试的话,我觉得我们聊的还是挺愉快的哈哈哈。最后希望一面能过吧,许愿offer。

背分布式理论和Raft和Consul有点去了。。。

#学生时代让我难忘的事##深信服校招##深信服##面经##23届秋招笔面经#
全部评论
请问收到二面了吗
点赞 回复 分享
发布于 2022-09-19 16:14 广东
hi~同学,秋招遇“寒气”,牛客送温暖啦!23届秋招笔面经有奖征集中,参与就得牛客会员7天免费体验,最高赢300元京东卡!戳我去看>>>https://www.nowcoder.com/link/zhengjipinglun
点赞 回复 分享
发布于 2022-09-19 12:53 北京
同学同花顺尝试一下吗,面试简单不造火箭,我帖子有内推
点赞 回复 分享
发布于 2022-09-17 00:42 浙江
问八股文的时代过去了
点赞 回复 分享
发布于 2022-09-17 00:21 重庆

相关推荐

04-18 17:10
已编辑
门头沟学院 Java
一面033157mins自我介绍问项目有没有真实用户的使用1 讲一下JWT(项目提到)2 JWT和session的区别3 JWT和cookie的区别4 讲一下OAuth2.05 授权码模式拿到的access token泄露了咋办,如何降低泄露风险6 你说设置较短的过期时间,那过期了咋办,客户端还没用呢7 讲一下websocket8 如果不用websocket还有什么方式吗 (服务端咋通知客户端,没答出来)9 你刚才提到全双工,全双工指得啥下面开始八股10 MySQL的存储引擎11 innodb有非聚簇索引吗,说说聚簇索引和非聚簇索引的区别12 讲一讲事务的特性,具体说一下各个特性(一致性没说出来,被追问了)13 说一下隔离级别,分别可能有什么问题呢14 几个问题(脏读、幻读、不可重复读)具体指什么(一开始忘记了脏读,被提醒了)15 索引什么情况下失效 (函数、where、模糊匹配、表达式计算、不满足最左匹配原则忘记了)16 redis如何实现分布式锁17 加了过期时间,业务代码还没执行完,锁就过期了怎么办18 缓存三大问题(雪崩、击穿、穿透),如何避免19 redis内存的淘汰策略手撕lc143 重排链表当晚约4月10号二面二面04101h15mins自我介绍问项目中间一小段忘记了慢查询怎么办?(慢查询日志、explain分析字段)假如使用了索引,但是还是很慢怎么办?(索引失效的情况)假如使用了索引,且索引没有失效,怎么办?(这块答的比较差,我说的就是判断数据量是否比较大,如果是数据量实在较大,可以进行分表)spring中使用了哪些代理模式 (我只回答了工厂模式、单例模式、代理模式)说一下你对AOP的理解(吟唱)你了解线程池吗,讲一下创建参数和运行的流程(吟唱)有没有用过消息队列,如何保证消费的时候不重复也不遗漏(笔者没用过消息队列,八股也基本没看,只有一些简单的印象)那根据你自己的理解,为什么消息队列在项目中有使用,它的使用场景是什么,你觉得怎么保证消息不重复不遗漏,所有的消息都能正确的被消费到?对AI工具有没有了解,用来干嘛(ds、kimi、cursor,看论文,读代码)解决问题的效率高吗,能解决多少问题场景:设计一个抢课系统,你觉得它的痛点在哪里,你又会如何解决这个痛点,一堆人使用的时候系统不会宕机,热门课程不会被超出容量的人抢掉 (这块答的比较差)追问:这个系统越做越大,对于抢课信息的表的设计和存储,有什么好的方式,避免出现慢查询的问题继续追问:如果有人用接口去刷来抢课,这种场景怎么解决(统计某个ip的QPS,过高就ban掉)再次追问:怎么统计这个QPS?(通过调用api的用户唯一标识符存储,带上过期时间,存在本地缓存中)本地缓存可以在一个集群中多个机器下共享吗?打在别的机器上怎么办?可不可以让一个人的请求只打到同一台机器上?(面试官提醒一致性hash)手撕:寻路,只能往右和往下走,现在在左上角,能否走到右下角,能走到的话最短距离是多少(我先用的dfs,做完后面试官说dp行不行呢,我说可以,然后让我也用dp做)反问:业务 + 面试结果 + 建议体验:是一个年轻的小哥,人很好,不会的问题也会引导,是一次不错的面试体验。第二天约16号三面,后改到17号三面041758mins自我介绍项目相关 10分钟左右在实际过程(你的日常编程中)中如何减少gc的开销给了一条sql语句,分析执行的过程(我从索引的角度分析的)(select a, b, c,d from t where a=x and b=y order by c;)如何避免索引失效呢?如何看实际过程中有没有使用到你说的那些索引呢?(explain)说一下sql的整个执行过程(从连接器->解析器->预处理器->优化器->执行器)说一下整个innodb的索引结构?(说了B+树的结构)实际过程中每页快速定位记录?了解Linux的awk命令吗?(不了解)讲一下线程池的工作原理吧。(讲了线程池的参数+执行任务的过程)手撕 leetcode 3 无重复字符的最长子串为啥代码中选择使用set呢场景题:设计一个社交朋友圈,可以发文,好友可以发动态,设计数据结构和架构日常过程中是如何学习的呢?有系统的学习过某些知识吗?有深入的学习过吗?比如Linux源码之类的问实习时间反问下午约傍晚HR面
DY_19:uu 哪个部门诶
点赞 评论 收藏
分享
评论
2
4
分享

创作者周榜

更多
牛客网
牛客企业服务