2019年3月14日 星期四
2019年3月13日 星期三
[Books] Programming Pearls (2nd Edition)
Bought a Chinese translation of Programming Pearls (2nd Edition).
Super recommend to read!
Quote from this book:
Q: It seems that most columns emphasize the design process. Can you summarize your advice on that topic?
- Work on the right problem.
- Explore the design space of solutions.
- Look at the data.
- Use the back of the envelope.
- Exploit symmetry.
- Design with components.
- Build prototypes.
- Make tradeoffs when you have to.
- Keep it simple.
- Strive for elegance.
Also check this for designing machine learning systems: Hidden Technical Debt in Machine Learning Systems [paper].
2019年3月7日 星期四
[FWD] Cost of Living Comparison
Example: Cost of Living Comparison Between Taipei and Singapore
https://www.numbeo.com/cost-of-living/compare_cities.jsp?country1=Taiwan&city1=Taipei&country2=Singapore&city2=Singapore&amount=1%2C000%2C000.00&displayCurrency=TWD
+30% but we can explain the whole details to clarify the correctness of these metrics.
https://www.numbeo.com/cost-of-living/compare_cities.jsp?country1=Taiwan&city1=Taipei&country2=Singapore&city2=Singapore&amount=1%2C000%2C000.00&displayCurrency=TWD
+30% but we can explain the whole details to clarify the correctness of these metrics.
2019年3月4日 星期一
Notes on System Design
Warning: All materials are prepared for Facebook onsite interview but I failed.
Case Study:
Case Study:
- Netflix (mysterious)
- Learning a Personalized Homepage – Netflix TechBlog – Medium (2015): Article
- The Netflix Recommender System: Algorithms, Business Value, and Innovation (2016): Paper
- Benchmarking Cassandra Scalability on AWS — Over a million writes per second (2011): Article
- A Multi-Armed Bandit Framework for Recommendations at Netflix | DataEngConf SF '18 (2018): YouTube
- Building Software Systems at Google and Lessons Learned (2010): Slide | YouTube
- Google Production Environment (2018): YouTube
- The Google File System - Research (2003): Paper
- MapReduce: Simplified Data Processing on Large Clusters (2004): Paper
- Bigtable: A Distributed Storage System for Structured Data (2006): Paper
- Differential Synchronization (2009): Paper | YouTube
- The Paxos Algorithm (2018): YouTube
- Yahoo
- The Hadoop Distributed File System (2010): Paper
- Analyzing Google File System and Hadoop Distributed File System (2016): Article
- Youtube
- Deep Neural Networks for YouTube Recommendations (2016): Paper
- RecSys 2016: Paper Session 6 - Deep Neural Networks for YouTube Recommendations (2016): YouTube
- Balancing Multi-Tenancy and Isolation at 4 Billion QPS (2015): YouTube
- TAO: Facebook's Distributed Data Store for the Social Graph - Usenix (2013): Paper
- Finding a needle in Haystack: Facebook's photo storage - Usenix (2010): Paper
- Cassandra - A Decentralized Structured Storage System (2009): Paper
- Scaling Instagram (QCon London 2017): YouTube
- Amazon
- Dynamo: Amazon's Highly Available Key-value Store (2007): Paper
- Slack
- How Slack Works (QCon San Francisco 2016): YouTube
- Uber
- Project Mezzanine: The Great Migration (2015): Article
- Designing Schemaless, Uber Engineering’s Scalable Datastore Using MySQL (2016): Article Part 1 & Part2 & Part3
- The Uber Engineering Tech Stack, Part I: The Foundation (2016): Article
- The Uber Engineering Tech Stack, Part II: The Edge and Beyond (2016): Article
- How Uber Scales Their Real-Time Market Platform (2015): Article
Interview Practices:
- URL shortener system design | tinyurl system design | bitly system design (2018): YouTube
- NETFLIX System design | software architecture for netflix (2018): YouTube
- UBER System design | OLA system design | uber architecture | amazon interview question (2018): YouTube
- Twitter system design | twitter Software architecture | twitter interview questions (2018): YouTube
- Whatsapp System design or software architecture (2018): YouTube
2019年3月3日 星期日
Notes on Coding Interviews
- Search on YouTube.
- Practice. Practice. Practice.
- Practice a lot of problems? Not so effective.
- Effective way: build up your knowledge from Leetcode.
- Organize classical problems into several categories.
- Excellent example: https://cspiration.com/leetcodeClassification#103.
- My 5 categories: (All-in-one)[doc]
- Foundations: [doc]
- Array
- String
- Math
- Data Structure: [doc]
- Stack
- PriorityQueue
- LinkedList
- Binary Search Tree
- Advanced Design: [doc]
- Backtracking
- Dynamic Programming (too many dissimilar problems, and hard to prepare)
- Union Find
- Trie
- Graph Algorithms: [doc]
- Graph
- Tree
- DFS & BFS
- Topological Sort
- Selected Topics: [doc]
- System Design
- Random
- Matrix
- Bit Manipulation
- Computational Geometry
- Read articles in the Discuss.
- Identify all possible solutions
- Different algorithms (from brute force to effective algorithms).
- Same algorithm with different implementations (e.g., segment tree).
- (My documents are not completed. Try to build up your own documents.)
- Could analyze time complexity and space complexity of each solution.
- Analyze line by line.
- Understand all details of build-in libraries.
- Know which solution is the best under certain assumption.
- Official solutions are not always concise (and the best). But it must be correct.
- Improve your code review ability.
- Read codes in the Submission (if possible).
- Not always correct.
- Learn from undocumented solutions. Need more time to understand.
- Write down your concise code in your style.
- About 20 ~ 40 lines in Java.
- Concise but not tricky. Tricky codes are not easy to remember.
- Possible to reproduce in the real interview.
- Lengthy codes might be regarded as messy codes.
- Just copy or imitate other's code.
- Not shame.
- Save your time.
- Align to your style (e.g., binary search, naming convention and so on).
- Practice makes perfect.
- Identify your weakness.
- Could prove the correctness of your code.
- Demonstrate your codes line by line.
- Design meaningful test cases.
訂閱:
文章 (Atom)