特邀讲师:
大鲲,常春藤名校计算机博士,在谷歌工作多年,面过各种级别的数百求职者,现为谷歌招聘委员会(Hiring Committee)成员。
是的,传说中让大家面完谷歌后忐忑不安的Hiring Committee成员之一,从幕后走出来,教授大家System Design知识。
这门系统设计课程侧重什么?
大鲲的课程不会把“how to design Twitter”、“how to design Netflix”、“how to design xxx”等面试题套路一路讲下来。
根据大鲲的面试经验:很多求职者遇到系统设计类问题,会硬搬已有的解题套路或者答案,但是,系统设计类问题非常open ended,这种做法经常让面试官觉得你“驴唇不对马嘴”,并且“给你暗示你也不听,甚至屡教不改”。
大鲲的课程会先讲授工业界系统设计相关知识,让你先理解Why,然后再讲解如何应用这些知识来设计系统。我们希望你不光是掌握应对面试的技巧,也能提高对系统设计的理解和应用能力。
课程安排:
Insights on system design interviews. Knowledge test. Experience test.
The actual interview question.
Reading the interviewer’s mind.
从面试官的角度探究为什么要设计system design interview,具体考察什么
Part 2:
An overview of important technologies used in internet application companies.
Concepts of servers, data centers, http(s) communication, RPC communication, testing, protocol buffer, load balancing, QPS, databases, map reduce.
这是用来扫盲的High Level Overview,也给出了课程将会覆盖的内容
Testing — Is it political correct in the programing world?
Unit tests, integration tests, mocking, test flakiness. How to write good unit tests.
Hermetic tests.
大鲲老师认为很重要、有很多争议的一个话题。
Part 2:
Data centers, machines, server jobs, load balancing.
Life of a query, http(s) requests, RPC requests, protocol buffers.
Server resource planning.
Distributed NoSQL databases.
Why NoSQL DBs are so popular? Performance, Availability, Consistency.
Considerations for strong consistency.
A detailed analysis of bigtable and its pros and cons. NoSQL database Schema design.
Part 2:
Map reduce, its theory and design.
Applications that are suitable for map reduce.
Three steps to beat the system design interviews.
1. Drawing a diagram.
2. Design the database
3. Analyze the life cycle of the operations.
这里会讲解如何应用前面几节课的知识来应对具体的面试题目。One class can typically cover 3-4 interview questions in depth.
How Singleton pattern is used?
How publisher and subscriber pattern is used?
How dependency graph is used?
How scheduled refresh job can be implemented.
etc
再次将理论知识应用到实践中,深入讲解几道系统面试题目。
MapReduce
Dependency Graph
Amazon Shopping Cart Design
所需基础:
required:学过操作系统或者分布式系统,或具备相关的基础知识。
optional:了解常见的设计模式
MOOC课程:
Introduction to Operating Systems
Advanced Operating Systems
试听章节:
CS601 Lesson 1
- CS601_101_Introduction
- CS601_102_Coding_Interview_vs_System_Design
- CS601_103_How_to_Prepare
- CS601_104_What_are_Interviewers_looking_for
- CS601_105_On_the_same_page_as_the_interviewer
- CS601_106_Is_there_secret_sauce
- CS601_107_Features_of_Good_System_Design_Questions
- CS601_108_Preview_Class1_Testing
- CS601_109_Preview_Class2_Basic_Infrastructures
- CS601_110_Preview_Class3_NoSQL
- CS601_111_Preview_Class3_MapReduce
- CS601_112_Class4&5_Practice&Common_Design_Patterns
- CS601_113_Class6&7_Practice&Misc_Items
CS601 Lesson 2
- CS601_201_A_Story_about_Testing
- CS601_202_What_do_we_learn_from_the_story
- CS601_203_Test_Driven_Development
- CS601_204_Mocking
- CS601_205_Unit_Test_General_Tips
- CS601_206_Unit_Test_Best_Practice
- CS601_207_Integration_Test
- CS601_208_Hermetic_Test
- CS601_209_Prober_Tests_Monitoring&Staged_Rollout
- CS601_210_Data_Center
- CS601_211_Load_Balancing
- CS601_212_http_vs_https_vs_rpc
- CS601_213_Protocol_Buffers
- CS601_214_Resource_Planning
CS601 Lesson 3
- CS601_301_NoSQL
- CS601_302_Key_Value_Pair
- CS601_303_Hashtable
- CS601_304_Balanced_Tree
- CS601_305_Runtime&Memory_Comparison
- CS601_306_Bigtable
- CS601_307_Storing_Data
- CS601_308_Bigtable_Architecture
- CS601_309_Mutation
- CS601_310_Bloom_Filter
- CS601_311_Replication
- CS601_312_Consistency_Issue
- CS601_313_Pulling
- CS601_314_Normal_Read_Strong_Read&Versioned_Read
- CS601_315_DB_Design
CS601 Lesson 4
- CS601_401_Key_Things_to_Remember
- CS601_402_Q1_Design_an_LRU_Cache
- CS601_403_Priority_Queue
- CS601_404_Linked_List_as_a_Priority_Queue
- CS601_405_Priority_Queue_vs_Double_Linked_List
- CS601_406_Q2_Distributed_In_Memory_Cache
- CS601_407_Implementation
- CS601_408_Pros&Cons
- CS601_409_Design_Choice
- CS601_410_Q3_Design_a_Quota_Server(Rate_Limit)
- CS601_411_Q3_Idea1
- CS601_412_Q3_Idea2
- CS601_413_Apply_Quota_across_Data_Center
CS601 Lesson 5
- CS601_501_Topic1_Interface_vs_Abstract_Class
- CS601_502_How_to_pick
- CS601_503_Implements_two_interfaces_with_the_same_function
- CS601_504_When_Abstract_Classes_are_good
- CS601_505_Topic2_Factory_Pattern
- CS601_506_Dependency_Injection
- CS601_507_Topic3_Singleton
- CS601_508_Topic4_Inheritance_vs_Composition
- CS601_510_Topic6_Producer&Consumer
- CS601_511_Topic7_Adaptive_Pattern
- CS601_509_Topic5_Builder_Pattern
CS601 Lesson 6
- CS601_601_Q1_Design_a_URL_Shortening_System
- CS601_602_Create&Get_a_Shortened_URL
- CS601_603_Diagram
- CS601_604_Further_Analysis
- CS601_605_Q2_Live_Chat_Group_Google_Hangout
- CS601_606_Scale_thousands_of_Subscribers
- CS601_607_Q3_Design_Facebook_News_Feeds
- CS601_608_Two_Design_Options
- CS601_609_Pull_Model_vs_Push_Model
- CS601_610_Go_Back_to_Chat_Group
- CS601_611_Q&A