📁 Sangam Dhakal - Portfolio v2.0 - Netscape Navigator 4.0
_
□
×

πŸ“š .NET Interview Questions

377 questions for senior .NET engineer interviews, each with a 30-second answer, the full answer, a deep dive, the follow-ups interviewers ask next, and real-world production problems.

  1. How do x64 and Arm64 CPU architectures differ, and what does a .NET team need to check before running services on Arm64 servers or developing on Apple Silicon?

    CISC versus RISC design, instruction sets, memory ordering models and SIMD differences between x64 and Arm64, and the practical checklist for .NET: RIDs, native dependencies, multi-arch container images, concurrency correctness, performance testing and cost.

    Mid-Level Theory CPU Β· πŸ”— 3 follow-ups Β· πŸ›  1 real-world
  2. What is SIMD, how do CPU vector registers work, and when would you use Vector128<T>, Vector256<T> or Vector<T> in .NET?

    Single instruction, multiple data: vector registers and instruction sets (SSE, AVX2, AVX-512, NEON), the .NET hardware-intrinsic APIs, vectorised BCL methods and TensorPrimitives, writing a vectorised loop with a scalar tail, and when SIMD is or isn't worth it.

    Senior Coding CPU Β· πŸ”— 2 follow-ups Β· πŸ›  1 real-world
  3. What is the difference between the stack and the heap in .NET, and what actually lives where?

    How the call stack and the managed heap work, what goes in each (locals, frames, objects, boxed values, captured variables, async state), why "value types live on the stack" is a myth, and the performance and lifetime consequences.

    Junior Theory Memory Β· πŸ”— 3 follow-ups
  4. What are pointers and references in .NET? How do object references, ref/in/out parameters, ref locals, Span<T> and unsafe pointers differ?

    The spectrum from safe object references to managed pointers (ref, in, out, ref locals and ref returns, ref fields in ref structs) to unmanaged pointers in unsafe code, how the GC tracks and moves them, pinning, and when each is appropriate.

    Mid-Level Theory Memory Β· πŸ”— 2 follow-ups Β· πŸ›  1 real-world
  5. Explain the memory hierarchy: registers, L1, L2 and L3 caches, and RAM. How big and how fast is each level, and why does it matter for .NET code?

    The levels of the memory hierarchy with realistic sizes and latencies, why caches exist, how cache lines and associativity work, what is private versus shared between cores, TLBs, and how the hierarchy shapes the performance of everyday .NET code.

    Mid-Level Theory Memory Β· πŸ”— 3 follow-ups
  6. What is a cache miss? How would you find out whether cache misses are slowing down a .NET service, and how do you reduce them?

    Types of cache misses (compulsory, capacity, conflict, coherence) and TLB misses, the symptoms of memory-bound code, how to measure misses on Windows and Linux for .NET processes, and the design changes that reduce them.

    Senior Debugging Memory Β· πŸ”— 2 follow-ups Β· πŸ›  1 real-world
  7. What is memory alignment and padding? How does the CLR lay out structs and classes in memory, and when would you control layout with StructLayout?

    Natural alignment, padding and why misaligned access is slow or non-atomic, how the CLR lays out classes (auto) and structs (sequential by default, auto when they contain references), object headers and minimum object size, measuring sizes, and using StructLayout, FieldOffset, Pack and InlineArray for interop and performance.

    Senior Theory Memory Β· πŸ”— 2 follow-ups Β· πŸ›  1 real-world
  8. A .NET service suddenly crashes with a StackOverflowException. Why can't you catch it, and how do you find and fix the cause?

    How the call stack overflows, why .NET terminates the process instead of letting you catch it, common causes (unbounded or deep recursion, self-referencing properties, cyclic object graphs, large stackalloc), and how to diagnose with crash output, dumps and tests.

    Mid-Level Debugging Memory Β· πŸ”— 2 follow-ups Β· πŸ›  1 real-world
  9. Your .NET service in Kubernetes keeps getting OOMKilled even though the GC heap looks small. How do RAM, virtual memory, working set, private bytes and the GC heap relate, and how do you investigate?

    Process memory from the operating system's and the runtime's point of view: physical RAM versus virtual address space, working set, private and committed memory, the GC heap and native memory, container cgroup limits, GC heap hard limits, Server GC and DATAS, and a step-by-step investigation of OOMKilled pods.

    Senior RealWorldScenario Memory Β· πŸ”— 3 follow-ups Β· πŸ›  1 real-world
  10. How does the .NET managed heap allocate objects? Explain allocation contexts, generations, the large object heap and the pinned object heap.

    How allocation works on the managed heap (bump-pointer allocation in per-thread contexts), how generations and promotion keep collections cheap, when objects go to the large object heap, why pinning matters and the pinned object heap, and how to measure and reduce allocations.

    Mid-Level Theory Memory Β· πŸ”— 2 follow-ups Β· πŸ›  1 real-world
  11. What is the operating system kernel, and what is the difference between user mode and kernel mode?

    The kernel's responsibilities, CPU privilege levels (rings on x64, exception levels on Arm64), why applications run in user mode, how and when the CPU switches to kernel mode, and what that means for .NET applications, drivers, containers and security.

    Junior Theory Operating System Β· πŸ”— 2 follow-ups
  12. What is a system call? How does a .NET call like File.ReadAllBytesAsync or Socket.SendAsync reach the kernel, and why can system calls be expensive?

    The system call mechanism, the path from .NET APIs through SafeHandles and the PAL to Windows (IOCP) and Linux (epoll) interfaces, the cost of crossing into the kernel, and how buffering, batching and async I/O reduce that cost. Includes tracing system calls with strace and Process Monitor.

    Mid-Level Theory Operating System Β· πŸ”— 3 follow-ups Β· πŸ›  1 real-world
  13. What is the difference between a process and a thread? How do they map to .NET concepts such as Process, Thread, the thread pool and Task?

    What a process owns (address space, handles, security context) versus what a thread owns (stack, registers, thread-local storage), how threads share memory, how .NET threads map to OS threads, how the thread pool and Task build on them, and when to use multiple processes instead of threads.

    Junior Theory Operating System Β· πŸ”— 3 follow-ups
  14. How does the operating system scheduler decide which thread runs next, and what do preemption, time slices, priorities and container CPU limits mean for a .NET service?

    Preemptive scheduling, run queues, time slices, priorities and starvation, how Windows and Linux schedulers differ at a high level, CPU affinity and NUMA, and how cgroup CPU quotas throttle containers and interact with the .NET thread pool and GC.

    Mid-Level Theory Operating System Β· πŸ”— 2 follow-ups Β· πŸ›  1 real-world
  15. What is a context switch, what does it cost, and why can having too many threads make a .NET service slower?

    What the OS saves and restores on a context switch, thread versus process switches, direct and indirect costs (cache and TLB pollution), voluntary versus involuntary switches, how blocking code and oversized thread counts multiply them, and how to measure and reduce them.

    Mid-Level Theory Operating System Β· πŸ”— 3 follow-ups Β· πŸ›  1 real-world
  16. Explain virtual memory and paging. How does the operating system map a process's virtual addresses to physical RAM?

    Why virtual memory exists, pages and page frames, multi-level page tables, the TLB, demand paging, copy-on-write, memory-mapped files, swap and the page file, overcommit, address space layout randomisation, and what all this means for .NET processes.

    Mid-Level Theory Operating System Β· πŸ”— 2 follow-ups
  17. What is a page fault? Explain soft (minor) vs hard (major) page faults, and how you would investigate a .NET service whose latency spikes line up with a high page fault rate.

    Page faults, minor vs major faults, what triggers them, and how to diagnose paging-related latency in a .NET service.

    Senior Debugging Operating System Β· πŸ”— 3 follow-ups Β· πŸ›  1 real-world
  18. What are file descriptors on Linux and handles on Windows? How does .NET manage them, and why does SafeHandle exist?

    File descriptors and handles as the OS's per-process references to kernel resources, their limits, and how .NET wraps them with SafeHandle and IDisposable.

    Mid-Level Theory Operating System Β· πŸ”— 2 follow-ups Β· πŸ›  1 real-world
  19. A .NET service on Linux starts failing with "Too many open files" and SocketException errors under load. Walk me through how you would diagnose it, including HttpClient socket exhaustion and TIME_WAIT.

    Diagnosing descriptor exhaustion and socket exhaustion in .NET on Linux: ulimit, lsof, ss, TIME_WAIT, ephemeral ports, and the HttpClient/IHttpClientFactory fixes.

    Senior Debugging Operating System Β· πŸ”— 2 follow-ups Β· πŸ›  1 real-world
  20. What actually is a file and a directory at the operating system level, and how do you list and walk directories efficiently in .NET?

    Files, directories, metadata, inodes and links, plus efficient directory enumeration in .NET with EnumerateFiles and EnumerationOptions.

    Junior Theory File System Β· πŸ”— 3 follow-ups

🌐 Sangam's Webring

βͺ Previous 🏠 Main Next ⏩
πŸ’¬ Chat with me