3

后端面试—关于系统设计与项目难点

 1 year ago
source link: https://www.v2ex.com/t/917496
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  职场话题

后端面试—关于系统设计与项目难点

  balabalaXMX · 3 小时 22 分钟前 · 1245 次点击

最近想要跳槽,找了一些面试,八股文基本上都是临时抱佛脚可以抱一下,但是项目亮点和系统设计有点不知道如何下手,有几个疑问想问问大佬们的想法。

  1. 老生常谈的项目亮点和遇到的难点是什么,这个需要说到什么粒度?比如我优化了一个本地缓存,本来是全局一个前缀树,解析字符串,根据 xxxx 的业务场景,改成了二级 map ,减小了锁的粒度。这么说是不是过于简单了?

  2. 面试官问了一个系统设计相关的题目:用户注册的用户名唯一,你会怎么设计。(原话,我想问一下上下文或者业务,面试官说要我自己想。)我说实现可以是插入 mysql 的时候使用主键来约束唯一性,问我还有没有别的办法,我没想出来。这种到底需要一个什么思路?要说得非常全面吗?

  3. 平时的工作中应该怎么挖掘和积累这种面试加分的东西?

22 条回复    2023-02-20 12:56:17 +08:00
silencil

silencil      3 小时 5 分钟前

借题问一下遇到场景面试的概率大吗?我个人也没去积累系统设计相关的问题。第二个问题,我想用 hash 算法来去重是否可以,类似布隆过滤器,如果不存在才可以注册,虽然会导致一些可用的名不让注册。
carmark

carmark      2 小时 58 分钟前

分享下我的经验,我作为面试官期望得到的结果:
carmark

carmark      2 小时 54 分钟前   ❤️ 1

> 老生常谈的项目亮点和遇到的难点是什么,这个需要说到什么粒度?比如我优化了一个本地缓存,本来是全局一个前缀树,解析字符串,根据 xxxx 的业务场景,改成了二级 map ,减小了锁的粒度。这么说是不是过于简单了?

是的简单了,我的思路是:
1. 实际过程中,在线上业务或者 perf 测试时候发现了问题,如何发现的?这里涉及到了可观测性工具,以及 perf 工具,以及 debug 思路
2. 找到了问题,那么就要考虑原有的结构, 如何调优,如何测试,有没有更好地思路,是否去做了探查,业界有哪些方法来解决这个问题(方法论问题)
3. 解决完成后,看收益,要具体到数字指标
4. 如何持续性优化思路
EdwardXia

EdwardXia      2 小时 53 分钟前

第二题用字典树行不行啊
业务亮点难点这个要看运气的,感觉公司遇到棘手的技术问题了主动顶上去,解决了就是简历加分的东西
EdwardXia

EdwardXia      2 小时 53 分钟前

@silencil 同想到布隆过滤器,但是不知道大厂的解决方案是什么
sadfQED2

sadfQED2      2 小时 36 分钟前 via Android

1.没什么简单不简单的,好用才是硬道理
2.肯定是 MySQL 查库啊,你注册接口能有多大 QPS 啊,就算被爬了,分库后查的都是从库,能有啥影响。
3.面试官说我设计简单啥的,我一般都是直接 dis 回去
ddzm

ddzm      2 小时 33 分钟前

想问布隆过滤器
wuhaoecho

wuhaoecho      2 小时 15 分钟前

@sadfQED2 dis 回去之后, 怎么立即结束面试比较好? 有些面试确实很不舒服, 想走人.

回楼主, system design 也有八股文, System Design Interview. 出了两版了, 而且 youtube 上也有视频版.
agagega

agagega      2 小时 8 分钟前   ❤️ 2

我觉得系统设计的八股文比什么 JVM 八股文或者算法题恶心多了,语言内部实现相关的坑日常工作里还可能遇到,系统设计几乎是遇不到的。如果是问刚毕业的学生这种题就更无聊了,人家念书的时候可以搞算法,可以折腾开源、看源码实现,但是谁给你接触什么高并发?
zzzzz001

zzzzz001      2 小时 6 分钟前

布隆过滤器因为 hash 冲突会被误判吧,直接用 mysql 唯一索引就好了吧。
zzzzz001

zzzzz001      2 小时 6 分钟前

@zzzzz001 这种估计面试官也水平有限
zzzzz001

zzzzz001      2 小时 3 分钟前

@zzzzz001 阿里规范上,对于全表唯一的数据推荐就是唯一索引,他说的意思在外层再怎么约束,基于墨菲定律总会出现相同数据,mysql 的写操作,QPS 几万也是小意思吃住
lscbqr

lscbqr      1 小时 53 分钟前

1 、首先你要吃透你自己所做的项目,然后抽取业务中最核心最难的一个模块(最好是业务闭环),用你所知道的所有方式去实现一遍;
2 、经常性的总结复盘,多去思考如果业务体量扩大一百倍,一千倍,该怎么办?
wuhaoecho

wuhaoecho      1 小时 48 分钟前

@lscbqr 我花了半年时间, 把公司的慢接口基本上消灭了, 体量扩大百倍顶得住没啥问题, 然后公司业务量断崖式下跌, 被裁了.
newskillsget

newskillsget      1 小时 47 分钟前   ❤️ 1

@sadfQED2 我觉得 diss 的时候也可以注意下方法,不卑不亢,有理有据,不然显得咱没职业素养。
不能因为对面没水准,就降低自己的水平。设计一个东西的时候不仅要考虑当下实现的复杂度,也要考虑后续维护的成本。通常来说越简单的东西越好维护。而且对于系统管理者而言,可维护性可能会是一个更重要的指标。
newskillsget

newskillsget      1 小时 40 分钟前   ❤️ 4

@wuhaoecho 客气礼貌地说,要不我们今天的面试就先到这里吧。如果对方还问,就说面试是一个双向选的机会,公司在考察个人的同时个人也在考察公司,交流下来我觉得我和这个岗位可能不太适合。说完礼貌示意直接走就行了。
dethan

dethan      1 小时 37 分钟前 via Android

@newskillsget #15 正解
8355

8355      1 小时 12 分钟前   ❤️ 1

1. 项目亮点和遇到的难点
项目亮点主要是说你项目的特殊性 跟普通的 curd 有哪些不同 你可以说业务上有哪些特殊需求 然后技术方案上怎么处理的,难点部分主要针对你自己解决的问题,需求开发或项目运营周期内有哪些棘手比较难解决的问题例如 bug 、接口告警、性能问题等等,最后通过什么方案(不一定是技术方案)解决了,面试官想通过你解决问题的方式了解你的能力水平。

很多人写在简历上的项目就是白开水,就算真的是你也可以有一些自己的思考,可以是你自己没有真的实现但技术能力范围可以实现的,可以介绍一下给他听,比如说你的想法需要协调很多资源最终没能实现,但你自己做过了什么调研可以确认如果按照这个方案是可以解决某些问题的,这也相当于解决了。

2.系统设计相关的题目,当你给出一个可以实际解决问题的回答时如果面试官追问有没有别的方案,你可以说以往的工作中是这样处理的,是不是有哪里不太完善希望面试官给一些提示。

这里有一部分问题是他自己经历过的问题最终解决了,可能你说的没有他想听到的答案或者细节,最好是反问下他到底想听什么,大部分的人都会给一些提示引导一下方向毕竟太开放了也没办法回答,实在答不出也可以邀请对方聊一下,从对方后续的回答中也可以理解下对方想问的方向如果你能继续聊两句 你也可以顺着他的思路再补充一下说刚才没完全理解题目之类的,尽量不要在这种题目把话题聊死说不会答不出等等 尽量沟通上平滑过度 不然很容易快速结束面试。。。 这种题展示的是你的思路和思考的过程,简答题知道吧。。。别空着瞎聊也聊几句

3.平时的工作中应该怎么挖掘和积累这种面试加分的东西
没办法只能去业务体量足够大的公司,很多这种东西没实际做过写不出来的,需要公司提供一个这样的工作环境才能成长,看视频看书学不到的。比如说 mysql 单表十亿数据就一定有性能问题吗?就一定要分表吗? 这种方案让你给你没做过你给不出来的,所以去到一个体量大的公司,公司会有架构和 DBA 以及运维联合出一个方案,你只要应用体会和学习,简历上就能写出东西了,菜鸟的成长速度除了自己努力之外还要看是否能够站在巨人肩膀上。

后端值钱的地方就在这里,从纯 CURD 的数据库表设计者转为后端方案设计者是真的实实在在上了一个台阶。
hyperdak288

hyperdak288      1 小时 7 分钟前

@wuhaoecho 来自 jeff dean 的建议:面向 5x ~10x 扩展来设计系统,而不是 100x~1000x
过多的考虑不存在的战术问题,就会耽误战略
lscbqr

lscbqr      1 小时 7 分钟前

@newskillsget 道理谁都明白,但有时候,实在是忍不了

我去年在某头部大厂面试,二面的面试官开场就问这几个问题:
1 、你在上家公司工作时有哪些亮点?
2 、你为上家公司创造了什么价值?
3 、你简历上的项目在设计上有很多缺陷,你有没有发现?
...

然后各种 pua ,各种贬低跟歧视,顺便带上了我前公司(前公司也是大厂),最后我差点跟他打起来了。
8355

8355      59 分钟前

其实单看问题二 一个简单的问题再加上海量的 QPS 和现存的海量数据方案一定是不一样的.

方案的最后一层可能就是个唯一索引是没错的.
但是你不能让所有的请求都在写库的时候才报错返回
整个库 其他业务也一样要读写
起码应该回答一下从缓存读取已有用户名

那如果访问量就是大到你的用户名专用 redis 都顶不住的查询量怎么处理?
所以公司希望你做需求给出的设计方案是考虑过这种问题
而不是你觉得现有资源可以随意 cover 糊一糊 搞一堆屎山代码以及大量技术债务最后干不下去离职跑路其他人再来花大量时间精力擦屁股.....
yangzhezjgs

yangzhezjgs      4 分钟前

其实这一块也有一些学习资料,不多大多是英文,可以去找电子版
System Design Interview https://book.douban.com/subject/35246417/
System Design Interview: Volume 2 https://book.douban.com/subject/35803094/
Software Architecture: The Hard Parts https://book.douban.com/subject/35587139/
Designing Data-Intensive Applications https://book.douban.com/subject/26197294/
amazon 上搜 system design 还有很多其他的

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK