🖥️
Sunil Notebook
Interview Preparation
  • 📒Notebook
    • What is this about ?
  • System Design
    • 💡Key Concepts
      • 🌐Scalability
      • 🌐Latency Vs Throughput
      • 🌐Databases
      • 🌐CAP Theorem
      • 🌐ACID Transactions
      • 🌐Rate limiting
      • 🌐API Design
      • 🌐Strong Vs eventual consistency
      • 🌐Distributed tracing
      • 🌐Synchronous Vs asynchronous Communication
      • 🌐Batch Processing Vs Stream Processing
      • 🌐Fault Tolerance
    • 💎Building Blocks
      • 🔹Message
      • 🔹Cache
      • 🔹Load Balancer Vs API Gateway
    • 🖥️Introduction to system design
    • ⏱️Step By Step Guide
    • ♨️Emerging Technologies in System Design
    • ☑️System design component checklist
      • 🔷Azure
      • 🔶AWS
      • ♦️Google Cloud
    • 🧊LinkedIn feed Design
    • 🏏Scalable Emoji Broadcasting System - Hotstar
    • 💲UPI Payment System Design
    • 📈Stock Broker System Design - Groww
    • 🧑‍🤝‍🧑Designing Instagram's Collaborative Content Creation - Close Friends Only
    • 🌳Vending Machines - Over the air Systems
    • Reference Links
  • DSA
    • Topics
      • Introduction
      • Algorithm analysis
        • Asymptotic Notation
        • Memory
      • Sorting
        • Selection Sort
        • Insertion Sort
        • Merge Sort
        • Quick Sort
        • Quick'3 Sort
        • Shell Sort
        • Shuffle sort
        • Heap Sort
        • Arrays.sort()
        • Key Points
        • Problems
          • Reorder Log files
      • Stacks and Queues
        • Stack Implementations
        • Queue Implementations
        • Priority Queues
        • Problems
          • Dijkstra's two-stack algorithm
      • Binary Search Tree
        • Left Leaning Red Black Tree
          • Java Implementations
        • 2-3 Tree
          • Search Operation - 2-3 Tree
          • Insert Operation - 2-3 Tree
        • Geometric Applications of BST
      • B-Tree
      • Graphs
        • Undirected Graphs
        • Directed Graphs
        • Topological Sort
      • Union Find
        • Dynamic Connectivity
        • Quick Find - Eager Approach
        • Quick Find - Lazy Approach
        • Defects
        • Weighted Quick Union
        • Quick Union + path comparison
        • Amortized Analysis
      • Convex Hull
      • Binary Heaps and Priority Queue
      • Hash Table vs Binary Search Trees
  • Concurrency and Multithreading
    • Introduction
    • Visibility Problem
    • Interview Questions
    • References
      • System design
  • Design Patterns
    • ℹ️Introduction
    • 💠Classification of patterns
    • 1️⃣Structural Design Patterns
      • Adapter Design Pattern
      • Bridge Design Pattern
      • Composite Design Pattern
      • Decorator Design Pattern
      • Facade Design Pattern
      • Flyweight Design Pattern
      • Private Class Data Design Pattern
      • Proxy Design Pattern
    • 2️⃣Behavioral Design Patterns
      • Chain Of Responsibility
      • Command Design Pattern
      • Interpreter Design Pattern
      • Iterator Design Pattern
      • Mediator Design Pattern
      • Memento Design Pattern
      • Null Object Design Pattern
      • Observer Design Pattern
      • State Design Pattern
      • Strategy Design Pattern
      • Template Design Pattern
    • 3️⃣Creational Design Patterns
      • Abstract Factory Design Pattern
      • Builder Design Pattern
      • Factory Method Design Pattern
      • Object Pool Design Pattern
      • Prototype Design Pattern
      • Singleton Design Pattern
    • Java Pass by Value or Pass by Reference
  • Designing Data-Intensive Applications - O'Reilly
    • Read Me
    • 1️⃣Reliable, Scalable, and Maintainable Applications
      • Reliability
      • Scalability
      • Maintainability
      • References
    • 2️⃣Data Models and Query Languages
      • Read me
      • References
    • Miscellaneous
  • Preparation Manual
    • Disclaimer
    • What is it all about?
    • About a bunch of links
    • Before you start preparing
    • Algorithms and Coding
    • Concurrency and Multithreading
    • Programming Language and Fundementals
    • Best Practices and Experience
  • Web Applications
    • Typescript Guidelines
  • Research Papers
    • Research Papers
      • Real-Time Data Infrastructure at Uber
      • Scaling Memcache at Facebook
  • Interview Questions
    • Important links for preparation
    • Google Interview Questions
      • L4
        • Phone Interview Questions
      • L3
        • Interview Questions
      • Phone Screen Questions
  • Miscellaneous
    • 90 Days Preparation Schedule
    • My Preparation for Tech Giants
    • Top Product Based Companies
  • Links
    • Github
    • LinkedIn
Powered by GitBook
On this page
  • OOP & Design patterns
  • Recommended to know
  • Books
  • Programming language of choice
  • What you need to know
  • Advice
  • General Outlook
  • What you need to know
  • Books
  • Links and Articles

Was this helpful?

Edit on GitHub
  1. Preparation Manual

Programming Language and Fundementals

PreviousConcurrency and MultithreadingNextBest Practices and Experience

Last updated 3 years ago

Was this helpful?

OOP & Design patterns

Priority: P2

In their pure form, such questions are not very common now. It is unlikely that you will be asked what is encapsulation, polymorphism, or inheritance. However, such questions may meet as accompanying systems design. For example, if you are asked to design a class diagram or data entities for a system, you may be asked why you chose not inheritance, but aggregation (composition). Or vice versa. And what are you at all prefer. And why do you prefer this. Is this due to the characteristics of your programming language (for example, java eliminates multiple inheritance)? Something else? What exactly?

Recommended to know

  • Singleton. The most famous pattern, which, nevertheless, has not been canceled. Where

    occurs in real life, that is, in live code.

  • Active Record. Chain of Responsibility. Data Transfer Object. Adapter. Decorator. Factory. Factory Method. Other standard programming patterns.

  • Data design. In case of relational data - table for class, table for all classes, table for

    each concrete class, what and why. Relational databases still have a very significant a place.

Books

Programming language of choice

The programming language is your working tool. And from you, as a professional, it is expected that you will not only know the limited set of functionality that you use every day, but also more deeply understand your language. And if a beginner can be forgiven lack of deep understanding, for example, Java garbage collection, then the person who writes on Java is unlikely for many years. Even if at work he does not encounter him (which is usually true, because everything works like that, is there any point in delving deeply?), then this creates the impression of a person who is interested in and has no enthusiasm for his profession. This is not the impression that you want to produce for an employer.

It is worth considering that questions from this part will most likely start asking you if you have 5+ years of solid experience in this particular language. You will be expected that since you are on it so you write a lot, you should know good ins & outs.

If you have 1-2 years of experience, you recently graduated from university and have been writing all this time, say, in Java, then don't worry too much about the intricacies. Just make sure you understand well the basics and principles of your language.

What you need to know

  • Best practices of your language. Be sure to check out Effective Java or Effective C ++, if this your languages. Google "best practices ", I'm sure you'll find enough good stuff.

  • Features of your language - does it have a garbage collector, how does it work with memory, as in it implements virtual functions, which makes it globally different from other languages programming, in what situations is your language better than others and why?

  • How to do various useful things in your programming language, if possible. For example an immutable class, or a class that cannot be copied.

  • Working with memory. Stack vs heap. malloc vs new (for C ++).

Advice

  • Read at least one book about your programming language ("Effective X" will do).

General Outlook

Most of the things listed in this chapter you need to know on a general level - have a good presentation, but not necessarily deeply into the details. Be able to respond to basic questions like "So I wrote a program in C ++, what happens next?" Here you need to understand about compilers, and about machine code, and about processor instructions.

The exception is if you have been working with any of these areas for a long time. In this case more solid knowledge will be expected from you.

What you need to know

  • That in reality things do not work quite the way they do in theory. For example, if you want store in memory HashMap, then you store not only the values, but also the data structure itself. This is called overhead. This is usually one or two additional pointers for a node. If there are a lot of values, and they are all, for example, numbers, then the overhead may appear quite substantial.

  • Databases. NoSQL vs RDBMS (relational databases), what is index, what is key and attribute.

  • Regular expressions and automata / grammars.

  • Computer architecture - memory, processors, registers, buses, disk, instructions

  • Operating systems - what is a thread and a process (and how do they differ), what are in the OS components, how the processor interacts with memory, where the operating system is from loaded when the computer is turned on, etc.

  • Networks and how the Internet works.

  • Compilers in general terms.

  • Data storage, RAID.

  • Computer security, cryptography.

Books

  • Books by Andrew Tanenbaum. They are big, but very well written. So read quickly for general development.

Links and Articles

Worst practices of your language. For example things that will work but will work slowly, or crookedly, or at the risk of collapsing at the first opportunity. If you google "C ++ avoid" or "C ++ pitfalls", then a lot of different interesting things will come out ().

Read guide for your programming language. There is a lot of useful information.

Search for puzzles about your programming language. When a small program is written and the reader is required to understand what the program will produce. For example, for ... Googles on " ". .

, according to Stackoverflow contributors that every good one should read programmer. The list is huge, you should not read every book from there, but you can considered as a manual for the selection of good books.

- the Google allowed the publication of a list of references, which we recommend employees to read.

. A very long list, don't take verbatim. But there are good links to materials.

- a huge list of knowledge, divided by levels.

""... A series of articles on Quora on a variety of topics.

" "

a course on computer architecture

Patterns of Enterprise Application Architecture by Martin Fowler
for example
Google style
C ++
C ++ quiz
For Java
List of books
Recommended reading from the Google
"for What every major computer science TM Should the know"
"the Programmer Competency the Matrix"
What should every programmer know about X
Latency numbers every programmer Should the know
The the Hardware / Software Interface (University then of Washington You) -