优步系统设计 | Hello World



优步系统设计 | Hello World

根据看到的面经,这题会分两个侧重点来问,当然get和set是最基本的, 1, 重点要处理各个cell之间的dependency,比如cell(1,3)是用公式算出来的cell(1,3)=cell(0,0)+cell(0,1)+cell(0,2),我会用两层哈希表表示整个表格(unordered_map> workbook),然后每个Cell中保存一个unordered_set parents;(所有计算当前Cell需要依赖的cells,上例就是cell(0,0),cell(0,1)和cell(0,2)) 和 unordered_set children; (所有依赖这个Cell通过公式计算出来的cells),每次改变cell的值就要对children和parents做相应的改变; 2, 重点是要处理add或delete一整行或一整列,我会用2d数组,vector> workbook, add的话就直接append,delete行的话就直接erase对应的行,delete列的话就根据列下标,对每行进行erase,好写,但是效率有点低,如果大家有更好的想法,可以一起讨论下。 首先这的想法可能是用一个2darray,但是我们我们不知道初始的大小,所以我们可以用list of list,这样的话还是会要用到多余的空间。即使这些空间没有存数据。所以最好的办法是用HashMap 来实现,这样的话我们就只会记录写过data的cell了。 还有一个问题是dependency,因为我们在excel里要实现cell(1,3)=cell(0,0)+cell(0,1)+cell(0,2),所以当cell(0,0) 变化的时候,我们要update cell(0,0).

Read full article from 优步系统设计 | Hello World


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts