Tell me about a time you had several important tasks competing for your attention.
Explain how you assessed urgency, impact, dependencies and risk, then communicated the resulting priorities.
Software Engineer 路 Intern to senior
General software engineering interviews are usually language-agnostic. Expect a coding problem, questions about how a language you know works under the hood, a design discussion and behavioral questions about how you work with a team.
112 questions
Explain how you assessed urgency, impact, dependencies and risk, then communicated the resulting priorities.
Show respectful disagreement, evidence-based reasoning, willingness to listen and commitment after the final decision.
Identify a recurring source of wasted time or risk, make a focused improvement, and demonstrate its impact.
Explain the manual problem, why automation was worthwhile, how you implemented it safely and what time or error reduction resulted.
Show how you adapted your explanation to the audience, focused on the outcome and avoided unnecessary technical jargon.
Show how you noticed a risk early, validated it, communicated it and added a safeguard.
Describe how you understood the stakeholder鈥檚 goals, handled disagreement professionally and reached a workable outcome.
HashMap is not thread-safe, Hashtable is thread-safe by locking the whole map on every method, and ConcurrentHashMap is thread-safe with much finer-grained locking and lock-free reads, so it scales far better.
The JVM divides memory into a per-thread stack, a shared heap (split into young and old generations) and Metaspace; the garbage collector frees heap objects that are no longer reachable, collecting short-lived young objects frequently and old objects less often.
Explain why you accepted, reduced or paid down technical debt and how you managed the associated risk.
Start with the problem, evaluate alternatives, validate the technology with a small experiment and explain how you managed adoption and risk.
Explain how you identified what the developer needed, coached rather than simply solved the problem, and measured their progress.
Take heap snapshots in Chrome DevTools before and after the suspect action, compare what grew, and fix the retaining reference, which is usually a forgotten listener, timer, global variable or unbounded cache.
Use async all the way down instead of blocking on tasks with .Result or .Wait(), and in library code use ConfigureAwait(false) so continuations do not need to return to a captured context.
synchronized gives mutual exclusion and memory visibility for a block of code, while volatile only guarantees that reads and writes of one variable are visible to all threads and does not make compound operations such as count++ atomic.
The Global Interpreter Lock (GIL) in CPython lets only one thread execute Python bytecode at a time, so threads do not speed up CPU-bound code but still help with I/O-bound work.
Threading runs concurrent threads that share memory and suit blocking I/O, multiprocessing runs separate processes to use multiple CPU cores for CPU-bound work, and asyncio runs many non-blocking tasks cooperatively on one thread for high-volume I/O.
Generate a short unique code for each long URL (for example by base62-encoding a unique ID), store the mapping in a key-value or relational database, serve redirects through a cache because reads far outnumber writes, and record analytics asynchronously.
The CAP theorem says that during a network partition a distributed system must choose between consistency (every read sees the latest write) and availability (every request gets a response); you cannot have both while the partition lasts.
Replication copies the same data to several servers to improve read capacity and availability, while sharding splits the data across servers so each holds only a part, which increases write capacity and total storage.