📣 Back to School开学季 - VIP通行证5折优惠!蓝莓、Offer多多同步优惠
查看: 2464| 回复: 1
跳转到指定楼层
上一主题 下一主题
收起左侧

[经验总结] 硅谷程序员跳槽指南之系统设计 System design (with iOS example)

   
全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x

往期推荐


系统设计是区分初阶、中阶、高阶程序员的一轮面试,是作为跳槽面试中必然会面的一轮。一个产品的实现,分为产品定义,模块划分,每个模块下面有不同的功能,每个功能有不同的需求,每个需求可以拆分为多个Task。
拿TikTok 创作工具产品举例,有拍摄、编辑、发布、特效等模块,特效里面有特效面板、特效搜索、发现推荐等功能,特效面板里会有UI优化的需求,这个需求可以拆分成几个小的Task。





一个人刷题能力很强可以说明他执行力很强,给一个Task能够快速高质量的完成。所以刷题能力只是最基础的要求。程序员的成长,就是能实现更大的需求,从更高维度去设计系统。这也是为什么在跳槽的时候,系统设计是关键考察候选人能力并且影响定级的一个环境。
相比于刷题题目类型丰富,题库很大,每题有固定解法和准确答案,发挥空间主要在把这个题目用正确的算法解释清楚。
往往系统设计题没有明确的答案,题库较小,每题没有固定的解法,发挥空间较大。开始练习系统设计面试时,做过几个题之后,看几个youtube视频,就能总结出套路。

常见的系统设计问题



OS 常见的系统设计问题包括设计news feed,设计歌单,主要考察App architecture (MVP, MVVM), UITableView,UICollectionView,Delegate设计,DataModel设计,网络API设计等。
下面来分析一下系统设计面试的操作步骤Steps和考点:
  • Identifying technique requirement, limitations,跟面试官沟通,明确需求,定义Scope,比如对于客户端的面试,可以明确是否后端数据库等实现不在这次面试Scope里
  • High level design,技术选型,用MVVM还是MVP模式;用UITableView还是UICollectionView;数据持久化存储用CoreData还是UserDefault,SQLite。这一步有条件可以画一下各个模块共同的草稿图,就像这样:
  • Implementation,可以写一下UITableView的几个delegate的实现
  • Low level Details,UITableView 需要实现dequeueReusableCell,来提升内存利用率,提高滑屏流畅度;网络请求部分,设计成异步api,并且用一个指定的queue来处理等,这些细节的掌握从侧面反应出你考虑事情的周全,这样的候选人代码质量普遍较高
  • Other considerations 大部分准备充分的候选人,都能把基础的1-4步回答到点上,基本上就能覆盖考点并且通过系统设计轮,但是要把系统面试答出花来,令面试官印象深刻,需要在第五点进行拓展。拓展点就是一个展现考点之外的知识点好机会。甚至能够弥补1-4步里面回答的一些不足。


拓展点


  • Mobile limitation, 手机算力的限制,一些复杂的操作比如机器学习的一些算法没法在手机上跑,或者在手机上只能跑低精度版本的;28% of users are using the latest, 所以确保实现的功能在中低端机上能使用,模型、视频、图片的下发就需要设计成分机型下发

  • Networking,无网弱网的时候怎么处理,比如news feed划着划着没网了,怎么处理,facebook news feed无网时在最下面有一个scissors design,来提示用户,继续划看到的就是之前缓存的post
  • Event Tracking (ET) and metrics,这个需求的实现,需要添加哪些Event tracking,每个按钮的点击,每次网络请求的发送和返回,后期如何用这些ET来建立Funnel Logging,建立稳定性指标等等
  • trade-offs, 讲一讲多种技术可以实现的时候,如何做选择,比如数据存本地,还是存服务端;移动端开发选择React Native 这种跨端实现还是选择原生框架实现
  • OS SDKs,在实现的时候,选择哪些OS SDKs,比如相机相关的会用到AVFoundation,数据库CoreData
  • i18n and a11y, 分别指代internationalization和accessibility,是指国际化字符串的翻译,和视障人士辅助功能。国际化的产品,都需要做i18n and a11y,通常大公司有内部的库来实现这些功能,只需要产品实现的时候调用对应的库就行了
  • AB design, 作为一个数据驱动的公司,每个需求都需要设计一些AB 实验,来测试新功能的好坏
  • mobile app architecture,
  • app lifecycle
  • UI rendering
  • memory constraints


总结



总结起来,系统设计面试本身不难,不会遇到算法不会就卡壳的情况,需要候选人提前准备好知识点,面试过程中按照操作步骤,结合问题和知识点,从high level design, 到low level detail给出一个完整的设计,然后选几个other consideration展开讲解一下。就能给面试官传递一个信号:他不仅完成了所有的需求点,还给了一个更加面向全球化、兼顾未来迭代、性能优化的超出预期的回答!


大家有做mobile 开发的可以留言交流,另外TikTok 我们组也有iOS Android 岗位,欢迎跳槽来撩。
码子不易,如果觉得有用的话,欢迎分享给您的朋友,或者赞赏一点大米,支持我继续创作优质的职业发展文章。

评分

参与人数 3大米 +3 收起 理由
ccsev7en + 1 很有用的信息!
blueaken + 1 给你点个赞!
Chasedream.df + 1 赞一个

查看全部评分


上一篇:系统设计题目讨论
下一篇:用GPT辅助系统设计面试的网站, 请大家看看是否靠谱
🔗
changchu723 2023-10-19 18:47:43 | 只看该作者
全局:
谢谢楼主,请问iOS面System Design时会需要考虑任何后台或者数据库的high level、performance、tracking之类的吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表