# 程序员面试总结
## 系统设计
系统设计,总的来说就类似于面试官让你盖房子,你搭个框架给他看证明你有能力,面试官可以就跟你讨论讨论框架,也可以跟你讨论什么材料适合,也可以跟你讨论具体某一层楼的室内装修,所以准备系统设计特别耗费时间,需要比较全面的知识。很多新手往往觉得无从下手,但是我认为对于新手还是有一些基本套路可循,所以做了一份设计总结。
系统设计中,最重要的就是 Trade-off,中文应该叫权衡,系统设计之所以难就是难在这里,因为你在设计过程中做的每一个决定都需要给出理由,比如为什么用SQL为什么用NoSQL,这时候就需要考察你对不同数据库的理解,而且在不断深入的过程中,面试官会随时让你挑一个地方让你做具体设计,如果碰巧挑到你不是很熟悉的地方或者没有考虑过的问题,那么面试就危险了。所谓我在这里介绍概念和题目讲解的时候,尽量多覆盖一些知识点,尤其是讲解题目,我会尽量列出多种方法,然后说说不同方法适用于什么情况,如何做出权衡。**个人水平有限,如果有错误的地方请大家指出改正。**
我认为几个需要强调的地方:
* 系统设计没有标准答案
* 系统设计重点在于权衡
* 不要只说名词不解释
* 面试过程中需要随机应变
* 面试官有的时候可能不要你回答业界通用的做法
在跟一些面试官交流过程中,大部分面试官都提到了系统设计的考点:
* do you gather requirement
* do you define the right limits of the system(what the system can/cannot do), do you realize trade-offs
* do you think big enough to have the right level of abstraction and keep it simple
* do you have basic knowledge, such as avoid single point of failure, CAP theorem, scaling, fault tolerant, consistent hasing...
* can you think clearly, do you have a good working method, do you loop back on requirement to test if your design work well, do you call out how the system can and can't envolve
* do you have domain expertise
一般系统设计都会涉及到以下几个方面:
首先是需求收集,这里要不断和面试官沟通,了解这个系统需要支持哪些功能,用户量有多少,然后你可以估算系统的QPS。然后需要考虑系统有哪些特性,根据前面计算的QPS判断系统是读多还是写多,是需要可用性(availability) 还是需要一致性(Consistency)。具体可以参照以下文章:
* [估算](SystemDesignBasics/estimations.md)
* [CAP定理](SystemDesignBasics/cap.md)
搜集完需求之后,接下来就是具体业务逻辑设计,业务逻辑很难归纳,因为每个系统都有自己的业务逻辑,不过针对一些特定的问题有些常见的解决方案,比如你需要设计一个全局UUID有几种解决办法,或者地理位置服务(LBS)通常怎么设计,或者是如何处理海量数据,这些内容可以在系统设计概念中找到。
* [地理位置服务](SystemDesignBasics/lbs.md)
* [分布式全局id](SystemDesignBasics/globaluuid.md)
* [海量数据处理](SystemDesignBasics/massive-data-processing.md)
* [消息队列](SystemDesignBasics/message-queue.md)
再接着就是讨论数据存储,数据存储无外乎就是缓存和永久存储,缓存有许多种类,比如write through, cache aside 等等。永久存储一般是讨论SQL 和 NoSQL的区别,极个别特殊情况可能会直接用文件系统(File System)来存储,这些内容会在以下部分谈到:
* [缓存](SystemDesignBasics/cache.md)
* [SQL和NoSQL](SystemDesignBasics/sqlvsnosql.md)
除此之外,每一层的设计都会涉及到扩容的问题,还有如何增加备份冗余,以防单点故障(Single point of failure)的问题。为了处理海量访问请求,通常解决办法就是增加机器数量,然后保证负载均衡(load balance),业务逻辑层,数据存储层都自己的办法,比如master-slave。这些内容会在很多地方被反复提及,具体可以参照:
* [一致性哈希 - Consistent Hashing](SystemDesignBasics/consistent-hashing.md)
* [分区 - Sharding, Partitioning](SystemDesignBasics/sharding.md)
在讨论完了基本概念之后,我们可以总结一套写常见系统设计题的解答。
* [热门排行榜 - Top K问题](SystemDesignQuestions/topk.md)
* [输入提示 - Typeahead](SystemDesignQuestions/typeahead.md)
* [视频平台(Youtube, Netflix)](SystemDesignQuestions/videoPlatform.md)
* [网络爬虫](SystemDesignQuestions/WebCrawl.md)
* [在线聊天服务](../SystemDesignQuestions/chat.md)
* [信息流/时间线(Facebook,Twitter...)](SystemDesignQuestions/newsfeed.md)
* [地理位置服务(Yelp)](SystemDesignQuestions/PlaceSuggestionPOI.md)
* [打车服务(Uber, Lyft)](SystemDesignQuestions/rideshare.md)
* [搜索服务(Google, Facebook Status Search)](SystemDesignQuestions/search.md)
* [点击统计服务](SystemDesignQuestions/clickCount.md)
* [分布式文件系统](SystemDesignQuestions/distributedFileSystem.md)
* [分布式工作调度系统](SystemDesignQuestions/eventScheduler.md)
没有合适的资源?快使用搜索试试~ 我知道了~
这是面向软件工程师的面试准备指南。包括行为访谈、系统设计和编码(中文)。.zip
共280个文件
java:187个
md:54个
png:22个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 107 浏览量
2023-03-29
23:03:13
上传
评论
收藏 3.2MB ZIP 举报
温馨提示
这是面向软件工程师的面试准备指南。包括行为访谈、系统设计和编码(中文)。.zip
资源推荐
资源详情
资源评论
收起资源包目录
这是面向软件工程师的面试准备指南。包括行为访谈、系统设计和编码(中文)。.zip (280个子文件)
.DS_Store 6KB
newsfeed.excalidraw 86KB
jobscheduler.excalidraw 84KB
instacart_payment.excalidraw 47KB
chat.excalidraw 44KB
poi.excalidraw 41KB
clickCount.excalidraw 40KB
youtube.excalidraw 35KB
search.excalidraw 30KB
dfs.excalidraw 30KB
crawler.excalidraw 27KB
rideshare.excalidraw 23KB
botnetCrawler.excalidraw 15KB
SubarrayProblems.java 23KB
MergeIntervals.java 16KB
NSums.java 15KB
ValidParenthese.java 13KB
Palindromes.java 13KB
ConstructBrinayTree.java 12KB
BuyAndSellStock.java 12KB
LowestCommonAncestor.java 12KB
MeetingRooms.java 11KB
PrintTrees.java 11KB
WindowSubstring.java 11KB
CoinChange.java 10KB
MatrixProblems.java 9KB
DistinctSubsequence.java 9KB
SparseVectors.java 9KB
NestedIntegerProblems.java 9KB
DecodeWays.java 9KB
StringCalculation.java 8KB
Combinations.java 8KB
TaskCoolDown.java 8KB
ReservoirSample.java 8KB
LongestIncreaseSubseq.java 8KB
Subsets.java 7KB
WordBreak.java 7KB
GraphValidTree.java 7KB
UnionFindSummary.java 7KB
SkylineProblem.java 7KB
BasicCalculator.java 7KB
TopologicalSort.java 7KB
WordLadder.java 6KB
BinaryTreeTraversal.java 6KB
MajorityElem.java 6KB
OtherProblems.java 6KB
ReadNRead4K.java 6KB
FindKLargest.java 6KB
LinkedListProblems.java 6KB
SortColors.java 6KB
MergeContacts.java 6KB
SerializeDeserialize.java 6KB
AddOperator.java 6KB
MergeKSortedList.java 6KB
StackAndQueue.java 5KB
EditDistance.java 5KB
SlidingWindow.java 5KB
BinarySearchPowSqrt.java 5KB
InsertInterval.java 5KB
AlienDictionary.java 5KB
RotatedSortArray.java 5KB
NaturalSortString.java 5KB
IntegerToEnglish.java 5KB
ConcatenatedWords.java 5KB
InclusiveExclusive.java 5KB
GraphBasics.java 5KB
WordSearch.java 5KB
BinaryTreeVerticalOrder.java 4KB
MaxPointsOnLine.java 4KB
KCloestPoint.java 4KB
AddAndSearchWord.java 4KB
ReconstructItinerary.java 4KB
ShortestPath.java 4KB
Permutations.java 4KB
RearrageStringK.java 4KB
WorkLoadTask.java 4KB
BinaryTreeLevelOrder.java 4KB
NumbersInArray.java 4KB
PaintHouse.java 4KB
UF.java 4KB
GroupAnagrams.java 4KB
NumberOfIslands.java 4KB
QuickSelect.java 3KB
RangeSum.java 3KB
CloneGraph.java 3KB
Strstr.java 3KB
PostOfficeII.java 3KB
MoveZeros.java 3KB
IntersectionOfArray.java 3KB
ReconstructItenrary.java 3KB
FlatternBinaryTree.java 3KB
MultipleString.java 3KB
RecoverBST.java 3KB
BinaryTreeBoundry.java 3KB
KLargestInBinarySearchTree.java 3KB
BombEnemy.java 3KB
BitManipulation.java 3KB
LongestSubstringAtLeastK.java 3KB
UniqueBST.java 3KB
RemoveCommentsInCode.java 3KB
共 280 条
- 1
- 2
- 3
资源评论
快撑死的鱼
- 粉丝: 1w+
- 资源: 9154
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- vmware workstation pro 17 linux版
- 3479521_1710042575-1.rwmod
- 安装及环境配置UMCM-2023C-ma笔记
- (完整)数据库课程设计餐厅点餐说明书-21ab6d3c8beb172ded630b1c59eef8c75ebf952c.doc
- 2023-04-06-项目笔记 - 第一百五十四阶段 - 4.4.2.152全局变量的作用域-152 -2024.06.04
- 松哥解协议松哥解协议松哥解协议松哥解协议松哥解协议
- 618节日618节日618节日
- tensorflow-gpu-2.9.1-cp37-cp37m-win-amd64.whl
- tensorflow-gpu-2.9.0-cp37-cp37m-win-amd64.whl
- tensorflow-gpu-2.9.0-cp39-cp39-win-amd64.whl
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功