How to crack an interview for your dream company
Hi, this is Abhishek. I recently prepared thoroughly for my software engineering interviews and found that there is a lot of rich content scattered on the web to help you prepare for the interviews. At first, it looks overwhelming to go through all of these resources especially when you have a busy schedule and so, I thought it would be a great idea to summarize them. If you plan well and prepare with a dedicated goal, interviews shouldn’t be very difficult for most people. Consider this post as an index of a plethora of interview material out there. If you are interested to read about my interview experience and planning, please go over my second post.
This post is divided into 5 sections — Coding (gatekeeper round), System Design (level-decider), Behavioral (potential team player), Past Experience (background explorer), Advanced Topics (probing on knowledge). Help yourself to navigate to any of them as per your interest.
Coding
Generally, there is one phone screening followed by two coding rounds in an on-site interview, so this part decides more than 50% of your fate of getting into a certain company.
Know how much prep do you need?
It is very important to know where you stand and how much coding preparation you need. People who are practicing coding frequently may just need to revise, for people who are passively giving interviews may need 3–4 weeks of preparation to brush up the concepts. People who are in their comfort zone or didn’t give interviews for years may need to start from the basics and can take 2 to 3 months of preparation.
Solve some basic coding questions, take up coding challenges or just skim through famous questions and try to figure out how much preparation you actually need for coding interviews. Do not spend more than the required time as you will be evaluated on overall skills and not just by your coding abilities.
Books & Online Resources
There are numerous books, tutorials, and online interview preparation guides available to overwhelm you. I would recommend choosing whatever suits you the best and start preparing without wasting much time going over all of them.
1. Cracking the coding interview: This book is recommended by many people, it has crash course-like material on data structures and the solution for famous coding interview questions. You can refer to this book if you are already aware of all of the data structures and just need to revise them before starting your preparation. Amazon Link.
2. Data Structures and Algorithms Made Easy in Java: I felt this book has a detailed explanation which is helpful to understand the basics of data structures if you are new to programming. You can get it in C++ and Python too. Amazon Link.
3. Introduction to Algorithms: This book is pretty detailed and used in Masters’ / Bachelors’ coursework. I wouldn’t recommend this book unless you want to go above and beyond to learn about data structures and algorithms. Amazon Link.
If you don’t feel the need to go over the books and prefer something online then consider yourself fortunate as there are many online resources and services available to help you fast track the preparation.
1. Leetcode: By far the most used and famous resource for interviews. There are 1800+ user-submitted interview questions till date, tagged by company name and grouped by difficulty level. Below is my strategy to get a hang of leetcoding, it may take up to 2 months (~12 to15 hrs. / week), so please decide ahead if you want to go with this approach.
- Go to topics and start with Arrays and Strings Easy questions, solve or code at your own pace.
- ProgramCreek has an old but still relevant article on leetcode for algorithm classifications. Go over these questions — read, try to think, and understand the solution. With this approach, you at least wouldn’t have to think of what data structure to use for those questions.
- While you are studying data structures, spend some time on Leetcode Easy questions on that topic. Aim to look at 100 Easy questions in total, it’s okay even if you don’t actually code all of them.
- After studying most of the data structures and algorithms, do/code union of Top 100 Liked and Top Interview Questions. You can skip HARD if they are not frequently asked. Most of the questions will be repeated, I am assuming this set will have around 125 to 150 unique questions.
- Buy Leetcode Premium if you can and then do/code Top 50 of Facebook, Google, Amazon, and Microsoft. Premium gives you access to the solutions and debugging tool which is efficient IMO.
If you do not have Leetcode Premium and looking for solutions then just Google it or look it up on YouTube, I am sure you will find the solutions for most of the questions. Otherwise, here is a good resource for all leetcode solutions from fishercoder1534.
2. Educative.io: Educative is a great online learning tutorial, it’s paid but I think it’s worth it if you are actively looking for a new job. I would recommend the following courses for coding strategies and patterns. This will help you to prepare in a confined time and not get blown away by other resources.
- Grokking the coding interview : ~ 50 Hr. course to help you systematically prepare with different strategies to apply for problem-solving and coding.
- Algorithms for coding interviews : ~15 Hr. course focused on heavily used algorithms. This is an advanced course that will prepare you for Graph, DP, Greedy, Sorting/Searching type of algorithms.
- Grokking Dynamic Programming patterns : A short course to understand DP in a neat way. I would also recommend DP solutions by Tushar Roy if you prefer short video explanations.
3. Other online resources : AlgoExpert.io has nice video solutions for 150+ problems and a crash course on data structures. HackerRank, InterviewCake, CoderByte, and InterviewBit are other paid websites where you can practice coding.
Please choose either one of the above three options for your coding preparation, you can’t and should not try to do everything. You might also want to check out Mock Interviews offered by Inteviewing.io, Pramp, and InterviewBuddy.
Categories of coding questions
1. Simple Pointer & Storage: Problems involving simple parsing of an input (mostly an Array/String) and building the result in additional storage (mostly Array or HashMap).
2. Slow & Fast pointer: In this technique, the solution is derived by moving two pointers at a different pace while parsing the input (mostly an Array/ String).
3. Sliding Window: Problems where you need to consider a subset (window) of the input data set and gradually move (slide) towards the end of the data set to find the potential solution.
4. Binary Search: Straightforward hint for using binary search is when the given input is already sorted. Binary search should not be assumed to be only used in Arrays and Trees; it could be used anywhere the data set could reduce to half at every iteration.
5. Matrix: Problems where the input set is a matrix or 2-dimensional array. Advancing row & column pointers is the catch in such problems.
6. Recursion: Problems that could be solved by writing a function which calls itself with different input. Correct breaking conditions and a clear understanding of the call stack is needed for recursions.
7. Depth-First Search: Problems when we need to explore the entire input set (mostly Tree or Graph) by going deeper first (children before siblings). Such solution often requires some data to be passed from parent to child and aggregated results to be passed from children to parent.
8. Breadth-First Search: Problems when we need to explore the entire input set (mostly Tree or Graph) by going broader first (siblings before children). BFS is good for problems similar to “finding the shortest distance between two nodes”.
9. Dynamic Programming: Recursion + Memoization is in short called DP. It is also a technique by which smaller overlapping sub-problems are solved first and the combination of results generates a final solution. DP problems often involve gradually building either a value (1X1 matrix), an Array (1XN matrix), or a matrix (NXN matrix) to yield the result.
10. Bit Manipulation: Problems involving manipulating the bit value of the input by using bitwise operators in a logical way.
Data structures
Choosing the right data structure is the key to solve a particular problem. Each data structure has a unique benefit over others, you should not assume that Hash-based Map/Set is best in all cases, sometimes choosing a LinkedList or Stack makes more sense.
Your brain should be developed to scan all data structures and see which one could be applied to the given problem within 2 to 3 mins. The applicable data structures should be discussed with interviewers before you start coding.
1. Array : Sized memory block, helpful when access needs to be done by indices and not by values. Access O(1), Add O(n)
2. String : Special purpose immutable character array. It could be accessed in a similar way as Array. Access O(1), Add O(n)
3. Stack : Data structure following last-in-first-out property, helpful when you need to keep a track of previous (useful) elements, access via an index is not possible. Access last O(1), Access any O(n), Add O(1)
4. Queue : Data structure following first-in-first-out property, helpful when the oldest element needs to be removed. Access last O(1), Access any O(n), Add O(1)
5. LinkedList : Dynamically allocated memory blocks connected to each other by references, helpful when you need not worry about handling the useless elements, they can simply be de-referenced. Random (or via index) access of items is not possible. Access O(n), Remove O(1)
6. Set : Collection of unique elements in an unordered manner (bag of items), helpful when you just need to know the presence of an element. Access O(1), Add O(1), Remove O(1)
7. HashMap / Dictionary : Collection of key-value pairs in an unordered manner where the key is generated by applying the hash algorithm. Keys and values are individual sets where memory location at hash_function(key) stores a value. Access O(1), Add O(1), Remove O(1)
8. Binary (search) Tree : A tree node having at most two children, left and right. In the binary search tree, the left child is lower (in some valued comparison) than the parent node and the right child is higher than the parent node. BT Access O(n), BT Add O(logn), BT Find O(n), BST Find O(logn)
9. Heap : A priority queue data structure where elements are arranged in the binary tree and the root element is either smallest (min-heap) or largest (max-heap), helpful when you need to access the next smallest / largest element in O(1) when elements can be added and removed at any point of time. Access min/max O(1), Add O(logn), Remove O(logn)
Here are some insights on the time complexities (in order)
O(1) - Constant time, when solution is derived by single or constant number of operations.O(logN) - Logarithmic time when problem is reduced to half at each iteration.O(n) - Linear time, when solution is derived by scanning through entire input of size n.O(nLogN) - Logarithmic time, when logN operation is executed for each of n elements.O(n^c)/O(n^2) - Polynomial time when solution has nested loops.O(n X m) - Polynomial time, when m number of operations (first input set) are performed for n number of elements (second input set).O(2^n) - Exponential time when number of problems are doubling at each iteration (reverse of logN).O(n!) - Factorial time when permutations are involved.
System Design
There are generally 1 or 2 rounds of System Design for every software engineering interview. These rounds help interviewers decide the level at which you would be a better fit. It is very important that you bring up the correct words/concepts at the correct time in the interview. For that, you must at least be aware of them if not an expert.
Primer
System design primer by donnemartin is the ultimate guide for system design interviews. I grokked it before my interviews, it helped me immensely and I would highly recommend going over it
User topcat prepared a System Design template that would work in most of the questions. You can take a printout and try to remember it while driving your discussion in the interview.
I made my own notes from the primer which helped me in revising it quickly, here they are :
Scalability
Vertical Scaling
Adding more capacity to the single machine - used for small
to mid-size applications.
Pros - Fast as there are no remote calls, Consistency is
maintained.
Cons - SPOF, Limited scalability achieved. Horizontal Scaling
Adding more machines - used for large enterprises.
Pros - Unlimited scaling.
Cons - Slower due to remote calls, consistency overhead.Performance
Caching - In memory data storage
Placements - Client side, web server, application, database
MemCached - Multithreaded, 1 MB size limit, no advanced data
structures support, faster and good for small/static data.
Redis - Distributed cache, 512 MB size limit, support for
advanced data structures, horizontally scalable, better
evictions, data is persisted, pub/sub support.
Varnish - HTTP accelerator for content heavy dynamic sites
Squid - Web server cache to speed up repeated requests, DNS
and other computer network lookups CDN - Content delivery network (proxy servers) used to cache
the web site assets like static photos, videos, HTMLs etc.
Push CDN - manually managed content
Pull CDN - automatically managed content with TTL.
Examples - Amazon CloudFront, Cloudflare, Akamai, Fastly. Database Caching - row or query level
Update Strategies
1. Read through - read from cache, miss will load from the
data store in cache for future.
2. Write through - write to cache + write to DB (slowest)
3. Write behind - write to cache & asynchronously update
the data store.
4. Refresh ahead - refresh cache before its expirationReliability
Load Balancer - self-explanatory
Techniques -
1. Weighted/ Round Robin - sequential distribution of the load
2. Least loaded - distribute to least loaded server
3. Sticky session - distribution by session or cookies
4. Layer 4 - distribute based on source/ destination ip address
5. Layer 7 - distribute based on request headers, cookies etc.
6. Consistent Hashing -
Server ip address and request ids could be mapped in a
ring like structure using a hash function. Angle degrees
are used for mapping. Minimizes remapping when node is
deleted/added.Consistency
Patterns -
Weak Consistency - reads may or may not be seen (best effort)
examples - VOID, Video Chat, Games
Eventual Consistency - reads will eventually be seen (async)
examples - Email, DNS
Strong Consistency - reads are instantly seen (sync)
examples - Banks, Transactional systemsAvailability
System's uptime per unit time
Patterns -
Fail-over
1. Active-Passive - Passive is hot standby and takes over the
traffic when active goes down
2. Active-Active - All servers are active and balancing the
load. Refer to consensus protocol
3. DR - Disaster recovery center takes over when a whole data
center goes down Replication
1. Master-Slave - Master node serves read and writes, slaves
serves reads. System is read only when the master goes
down.
2. Master-Master - Also known as Active/Active
All are master nodes which serves read and writes and
communicate to each other on writesTrade Offs
1. Performance Vs Scalability
2. Latency Vs Throughput
3. Availability Vs Consistency CAP Theorem -
CA - Not possible, Partition tolerance is inevitable
CP - To ensure availability, add more replicas
AP - Implement eventual consistency or Two-phase protocolRelational Database
ACID - Atomicity (All or nothing), Consistency (one valid state)
Isolation (|| or serial delivers same result), Durability
(once committed stays).
Scaling - Replication, Sharding, Federation, DeNormalization
Indexing - Uses BTree (Stored separately in sorted manner for
logN search time, has reference to DB row)
Relationships - 1:1, 1:M, M:M
Constraints - Primary Key, Foreign key, Unique, Not Null, Custom
Commits - Atomic, 2-phase, 3-phaseNoSQL
Lack ACID properties, data is denormalized (duplicated) and
joins are handled by applications Types -
1. Key-value store - allows O(1) read writes. Redis, MemC.
2. Document store - key-value store where values are documents.
Provides API or QL to retrieve. MongoDB, CouchDB, DynamoDB
3. Wide column store - basic unit is column, any column could be
added, grouped in column families. Cassandra, HBase
4. Graph database - each node is a document and each arc is a
relationship. Efficient for M:M relationships. Neo4J, Flock
- ElasticSearch for full text search, aggregations
Practical examples for each database postAsynchronism
Used wherever an operation could be deferred from real time
processing. Eventual consistency is achieved.
Back pressure and exponential backoff to release the pressure. Message Queue - pub/sub model to achieve asynchronism
Apache ActiveMQ, RabbitMQ
Streaming - distributed streaming platform for async processing
Kafka (Confluent guide) Differences -
Kafka - Uses pull model, log based streaming, keeps messages
till retention period, retains order, good for short
messages, throughput 10K/sec Message Q - User push model, provides consistent delivery of
messages, removes messages when consumed by all, does
not guarantee ordering, good for transactional
messages, throughput 1-2K/secCommunication
OSI (Open system interconnect) 7 layer model - Best Intro Video Please Do Not Tell Secret Password Anyone
Physical DataLink Network Transport Session Presentation Appl.Numbers
- bit holds 0 or 1, byte holds 8 bits(2^8=256 ASCII UTF-8 chars)
- L1 cache reference - 0.5 ns
- L2 cache reference - 7 ns
- RAM reference - 100 ns
- SSD reference - 100 us = 0.1 ms
- HDD reference - 10 ms
- within datacenter roundtrip - 500 us = 0.5 ms
- packet transfer from CA to NL to CA - 150 ms
- Approx. cost of a server is $1K, 1 GB Storage is $0.1
Above are basic concepts to remember while designing the system. Here are more notes for some modern topics and important things from my perspective.
Microservices vs Monolithic Architectures - very broad topic.2PC vs 3PC vs SAGA
- 2PC - Prepare and Commit. Orchestrator is SPOF
- 3PC - Prepare, Can Commit and Finalize Commit.
- SAGA - Services talk to each other via message/event bus.
Subsequent service operation only be triggered by
publishing a message.
Useful when message processing latency is acceptable.
Example - Uber ride lifecycle, food delivery lifecycle.
- Distributed TransactionsReverse Proxy
Reverse of client proxy. Hides the identity of the servers and
manages what clients can access.
Provides - load balancing, caching, security, scalability, SSL
termination, compression, CDN connection.Containerization
Docker - Uses OS level virtualization to deliver software in
containers. Containers are built separately and share
resources.
- Kernel, server, host OS are shared by containers unlike VM.
- Can clone existing docker images w/o managing dependencies.
- Docker virtualizes OS itself, VM uses hypervisor to
virtualize the hardware and have its own OS on the host OS.
Kubernetes - Container orchestration system.
- Creates Kubernetes deployment consisting of multiple docker
containers (configurable)
- Allows scaling and monitoring docker instances
- etcd, Consul, Zookeeper can be used for service discoveryJenkins
SDLC pipeline tool, helps to automate development process like
building, testing, deployment etc.Hystrix
Circuit Breaker, helps in stopping the cascading of errors
Same as home circuit breaker, it trips after number of errors
from the same service.Protocols
TCP - Connection oriented, ensures orderly data delivery, high
reliability, high latency, flow, and congestion control
UDP - Connection-less, data loss, low latency, non-orderly
Streaming, VOIP, Video chat
HTTP - request/response protocol. GET, PUT, POST, PATCH, DELETE
REST - API protocol to expose representations or resources
through HTTP verbs
RPC - Executing procedure on a remote server, direct calling
WebSockets - full-duplex, persistent, bi-directional channel
WebHooks - protocol to augment or alter applications behavior
with custom callbacks. - Card refreshes, Jenkins pipeline.Cassandra
Wide column store, good for higher availability and linearly
scalable with commodity hardware.
Underlying concepts - Consistent hashing, consistency level,
gossip protocol, merket tree, commit log, memtable, sstable,
column family, keyspace, compaction, write and read path.
Datastax courseMongoDB
Document oriented, stores documents (json files) in collection
Single master multiple replica architecture
Provide consistency over availabilitySearch Cluster
Large data is stored in a way that it could be searched quickly
Apache Lucene - powerful indexing, search, spellchecking,
highlighting, parsing and tokenization capabilities
Solr - built on Lucene for highly scalable, fault tolerant,
distributed indexing and search
ElasticSearch/Kibana- build on Lucene, distributed, multitenant
full text search engine.Consensus
When server of link fails (partition tolerance), it's called as
split-brain problem and other servers helps to decide the
current state of the record or perform leader election by
distributed consensus.
Paxos algorithmBloom Filter
Probabilistic data structure to find if element is present or
not with far less storage. Hashmaps usually take a lot of space.
It’s a bit array which maps bits after applying multiple hashes
on the input.
Never gives false negative, can give false positive.
Usage - Presence of userId during signup, browser telling if
website is malicious, presence of DB/cache entry (used in
Cassandra)Count-Min Sketch
Probabilistic data structure to find the frequency of elements
from the infinite stream with far less storage.
Apply hash function on the input and increment respective count
Minimum value from all hash functions is the frequency.
Result is always exact or over the actual frequency count.
Please note that there are still a lot of topics that I have not covered due to a lack of knowledge in that space. You might want to read about those topics if they are relevant to your field — Big Data, Hadoop, Networking, Security, Machine Learning, Artificial Intelligence, Deep Learning, Front-End technologies.
YouTube
YouTube is a great source of information for many things and system design is no different. There are many YouTubers who frequently post videos about system design and its concepts. You can refer to this video by Tushar Roy for the introduction to the system design interview. It will give you a high-level overview of what to prepare for these interviews.
Gaurav Sen has put tremendous effort into creating a series of system design interviews. His videos are informational and helpful for someone who enjoys learning about systems. Narendra from Tech Dummies also has a very good playlist for system design. Please note that their videos can get lengthy and provide a lot of information that sometimes may not be expected in the interviews. You may listen to these videos (maybe at 1.5x speed) in your leisure time and try to get the pointers and a high-level idea about the systems. Since system design is an open-ended question, the best way to learn about it is to get into a habit of designing rather than remembering from these videos.
Eventually, I came up with this list of systems that I used for my preparation. I would recommend preparing your own list and draw a high-level diagram on a whiteboard or ExcaliDraw.
TinyURL, Parking Lot, Rate Limiter, Twitter Timeline, Web Crawler, Mint.com, Dropbox or Google Drive, StockExchange, Uber, Movie Booking website, Tinder, Instagram, WhatsApp or Messenger or Slack, Netflix, Type Ahead, Google Doc, PayPal or Venmo, Instacart or Food delivery website, Amazon or E-Commerce website.
Educative.io
Educative.io has below courses to help you prepare for the system design interviews. Please note that a lot of the knowledge in these courses will be repeated but Educative provides a systematic way to learn things. It may work for some people, I preferred going over primer and making my own notes.
- Scalability & System Design for Developers : This course touches upon all the basics of system design. The course is 35 hours long but good to revise the concepts, refer to more resources if you want to understand a topic in depth.
- Grokking the System Design Interview : 20 hours course focused on real-life systems design. They walk you through the core building blocks of the systems and what can you speak once a similar question is asked.
- Grokking the Object-Oriented Design Interview : This is a short 15 hours course to help you understand how OOD concepts could be used in real-life systems. The course is also helpful to learn about different diagrams you can have to explain a system.
Behavioral Interview
Behavioral interviews should not be underestimated, and one must put dedicated time aside to prepare for these rounds. Interviewers evaluate if you are a better team fit during this round. I would suggest not fake anything and be yourself while you provide your answers because it’s not just about cracking the interview but it’s very important for you to be a fit in the team culturally.
Someone will ask a question, “If I have to act naturally and be myself, then why do I need preparation?” Even if that’s the case, people are sometimes nervous and not good at putting forth their thoughts and explaining things about themselves. It is very important to make use of this interview to portray your own image in the best way possible.
How to start and strategies
To start preparing for this round I would recommend going over a few most frequently asked questions (you can find tons of online resources), for example, this list from devskiller.com. After going through it, you can introspect yourself and try to answer them, I highly recommend writing down your answers at least for the top 20–25 questions because you tend to give different answers for the same question. Writing it down puts a bit of pressure on the brain and helps to remember the points for a longer duration.
“Tell me about yourself” aka elevator pitch should be on the tip of your tongue because this question might be asked several times during your onsite interview. Here is an excellent video from Linda Raynier where she helps you to prepare for this question step by step.
STAR (Situation, Task, Action, Result) technique : As the name suggests, the thumb rule for these questions is to follow 4 steps —
1. What was the situation?
2. What was the task assigned to you?
3. What actions you took to address it?
4. What was the outcome of your actions?
General Tips :
- The most effective way of answering a question is to give two situations of yourself, one slightly older which you failed to address correctly and a recent one in which you improvised yourself and handled the situation in a far better way. This shows the improvement in you and creates an impression.
- Transparency is the key word — While explaining your thoughts, it is very important that you speak out the word “Transparent” or at least demonstrate transparency in your answer. Most people are okay with mistakes, but they prefer candidates who keep transparency in their work.
- Show off your good sides — Sometimes you won’t get a chance to bring up the good points about you but you will need to prepare and figure out how to use your most effective situations in different kinds of questions that could be asked.
- Don’t be aggressive in answers, you are not Superman to do everything on your own. People prefer hiring a good team player than an over-confident person who might ultimately talk more and do less.
- Keep it limited — Always try to time-bound your answers, it’s a good practice to check with your interviewers before going much into the details. It’s also important to study a bit about the company and its culture to make your answers more relatable.
Your situations
I am sure 99% of the people think about their past situations when they need to prepare for such interviews. If you are a person who periodically makes a note of good and bad professional experiences then you can absolutely skip this section as you already have it handy. But if you are not someone who belongs to that 1% of people then I would recommend retrospection for at least 3 to 4 hours to recollect the situations that may be helpful in giving the answers for behavioral questions.
Think about:
- Your best work so far and why according to you it’s best.
- Situations where you did not accomplish what was expected, why do you think that happened and how that could have been avoided.
- Instances when you went above and beyond your call of duty.
- Situations where you created a positive impact on someone or on a group of people.
- Times when you felt under pressure and how you handled it.
- Your work to boost the team’s morale, motivation, and other team bonding activities you initiated.
- Conflict of opinion situations and how you resolved them.
- Professional goals you achieved or failed to achieve.
and this list can go on and on… but you got the gist of what I am trying to say.
Top Questions
I would recommend googling top behavioral interview questions for software engineering or for your specialized field.
Could you have done anything differently?
I think this is a tricky extension of a question that the interviewer may ask, and all of a sudden it feels like a burden to answer it. Sometimes you can simply ignore it by saying “No, everything was perfect” or if you have thought about it earlier you could give a better and effective reply.
I feel it’s difficult to handle this impromptu question but have this extension of a question back of your mind when you prepare.
Past Experience
Experiential interviews are sometimes part of your onsite schedule. This interview might be for a short duration like 30 mins or might be combined with other types of interviews on values, culture, or leadership. You might have varied multiple years of experience which could be very difficult to explain in a short duration. No one will be interested to know each and everything that you worked on, so you should be able to provide a 10,000 ft view of your work and zoom into it if asked.
Choose a project
Its recommended to choose a project which is recent (2 to 3 years) and you had significantly worked on. You should be knowing in and out of this project and able to handle any cross-questions that the interviewer might ask. I wouldn’t recommend choosing a complex project since you need to be sure that any questions that come up should be answered correctly within a confined time.
While you are at the current company, you can do your own research to gather as much information as you can for the project you selected. Do not limit yourself to the work you delivered, be curious and understand the design end to end.
Here are some things you will need to focus on while discussing your project:
- Problem statement
- Challenges you faced
- Trade-offs you had to make
- End-to-end solution
- Tech stack
- Testing strategies
- Team size and your role
- Execution from inception to go-live
Overall, your company’s building blocks & technologies you use
No matter how complex your company’s system is you should be aware of the basic building blocks. You can consider this as a system design question for your own company. It would be very helpful if you could visualize the design and try to fit your work in some of those blocks. This helps the interviewer to understand the scope of your work and what kind of impact it has on the overall company’s business.
I did the same exercise and came out with a simple payment processor design as below -
*Please note that no proprietary information is shared with this diagram.
Be sure to know most of the technologies you use in your current job. You may also be asked about your experience within a company with several things like deployment strategies, cloud infrastructure, database, messaging framework, logging frameworks, caching, coding languages etc.
Leadership qualities
Along with finding a good software engineer, interviewers also try to look out for leadership qualities in a potential candidate. Leadership is a pretty wide topic and I consider myself at the start of my journey towards becoming a good leader. Even if you are in the same boat, you should know basic principles of leadership and you should have demonstrated some kind of leadership in your career. It could be as small as mentoring a new hire or intern, but it matters a lot.
Have such examples ready where you think you have demonstrated leadership at work.
With my limited knowledge, here are some things I think are important regarding leadership:
- Simple Definition: Leadership is taking people to a place where they wouldn’t have reached without you.
- Good Leader must-haves: social influence, storytelling, leading a way through the crisis, enabling your followers to do great things, repeating things until people can internalize.
- Leadership code: Every good leader must have his/her own leadership code to follow.
and I am sure there are many more interesting facts about leadership that you can read as per your interest.
Advanced Topics
To be added later on.…