Programming Languages & Core Development Topics
Programming languages, development fundamentals, coding concepts, and core data structures. Includes syntax, algorithms, memory management at a programming level, asynchronous patterns, and concurrency primitives. Also covers core data manipulation concepts like hashing, collections, error handling, and DOM manipulation for web development. Excludes tool-specific proficiency (see 'Tools, Frameworks & Implementation Proficiency').
Asynchronous and Event-Driven Programming
Non-blocking execution models: callbacks, promises and futures, async/await, event loops, and event-driven and reactive architectures. Covers reasoning about ordering, back-pressure, and error propagation in asynchronous flows, including data-fetching patterns. Central to modern frontend, backend, and mobile runtimes.
Functional Programming
Functional-style programming: pure functions, immutability, higher-order functions, closures, currying and partial application, and memoization, along with functional reactive patterns. Covers reasoning about code as composed transformations rather than mutable state, whether in a dedicated functional language or a multi-paradigm one. Increasingly probed for frontend and data-heavy work.
Language-Level Concurrency and Multithreading
Per-language and per-runtime concurrency: the threading and async APIs each language and platform provides (goroutines, channels, worker pools and pipelines in Go, threads, executors, ThreadPoolExecutor tuning and CompletableFuture in Java, Kotlin coroutines, dispatchers, Flow and structured concurrency, Swift GCD with queues and QoS, DispatchGroup, OperationQueue, actors and async/await, Android Handler/Looper, HandlerThread and thread pools, Flutter isolates, C++ std::thread and atomics, Python threads versus multiprocessing versus asyncio tasks, gather and graceful shutdown), each language's memory model and visibility guarantees (Java happens-before and volatile, C++11 memory orders such as relaxed, acquire and release, Objective-C and Swift atomic versus nonatomic), mobile main-thread rules and JNI thread attachment, cancellation and shutdown idioms, and the idioms for coordinating shared state safely in that language, including thread-safe caches, singletons and bounded queues. Also covers reproducing, testing and diagnosing races and deadlocks in a specific language or app, and migrating callback, GCD or thread-pool code to structured concurrency. Covers choosing and using a language's concurrency primitives correctly. Boundary: general synchronization theory, deadlock and lock-free algorithm internals, OS scheduling, database isolation levels, and callback or event-loop architecture are covered elsewhere.
Java Programming
The Java language and platform: type system, collections framework, generics, exceptions, the memory and JVM model, and idiomatic object-oriented Java. Covers writing correct Java and reasoning about its runtime and language semantics. A staple server-side and test-automation language surface.
Programming Fundamentals
Language-agnostic building blocks of writing code: variables, primitive and composite data types, scope and lifetime, functions and callbacks, control flow, and expressions versus statements. Covers the mental model a candidate needs before any language-specific or algorithmic depth. The baseline literacy layer of a technical screen.
Error Handling and Defensive Programming
Making code robust against bad input and failure: exceptions versus error returns, input validation, guard clauses, graceful degradation, and designing for the unhappy path. Covers where to handle versus propagate errors and how to fail safely without hiding bugs. A recurring probe of production maturity.
JavaScript and TypeScript Fundamentals
The JavaScript and TypeScript language surface: scope, closures, the this binding, prototypes and inheritance, the type system, modern ES features, and common language patterns. Covers the deep language-mechanics questions frontend and full-stack interviews lean on, independent of any framework. TypeScript's static typing is treated as an extension of the same core.
Language-Level Memory Management (C/C++/Rust)
How C and C++ expose and manage memory at the language level: pointers and pointer arithmetic, pointers to pointers and function pointers, arrays versus pointers and array decay, stack versus heap storage, manual allocation and freeing in C (malloc, realloc, free), new and delete versus malloc and free, placement new, RAII and owning smart pointers (unique_ptr, including custom deleters for C resources), shallow versus deep copies and move semantics in C++. Covers reasoning about who owns a buffer and designing ownership and lifetime contracts across function, library and plugin boundaries; dangling and uninitialized pointers, leaks, double frees, use-after-free, off-by-one errors and buffer overruns and how to prevent them; undefined behavior, strict aliasing and safe byte reinterpretation, endianness; struct layout, alignment and padding as the language defines them; and finding and diagnosing memory bugs with sanitizers, Valgrind-style tools, tracing allocators and heap-corruption triage, including allocator design and heap fragmentation at the language level. Boundary: garbage-collector behavior and tuning, embedded memory budgets, register access and packing structs to hardware layouts, OS virtual memory and paging, and lock-based concurrency are covered elsewhere.
Programming for Test Automation
General Java and Python language proficiency questions where the test-engineering framing is load-bearing: it changes what is actually being assessed, not just the flavor text. Covers designing for testability (polymorphism and interchangeable implementations so a test harness can substitute a fake), how exception-handling choices change what a test for that failure path looks like, choosing the right collection for test-result processing, methodology for testing concurrency correctness (writing a test that can actually reveal a race or a visibility bug, not just fixing one), serialization and diffing trade-offs for test fixtures and CI artifacts, detecting a hash/equality-contract violation through testing, memory-bounded generator and streaming I/O patterns for test data, and small test-engineering utilities (CI-config diffing, checksum-verified data sharding). Excludes writing or debugging the code inside a single automated test script (control flow, parameterization, translating a manual case, locator, wait, and retry mechanics), which belongs to test automation scripting. Excludes suite-wide or framework-wide structural and strategy decisions (Page Object Model, layering, tool or driver choice, CI wiring, governance, flaky-test-detection systems, scalable test infrastructure), which belongs to test automation framework architecture and design. Excludes classic array/string/graph technique problems with no real test-engineering judgment required, which belong to arrays, strings, and hashing. Also excludes generic OOP-principles surveys, generic concurrency-primitive implementation (singletons, thread pools, producer-consumer queues, lock-free structures) with no distinct testing angle, generic garbage-collection and memory-leak content, generic functional-programming surveys, and generic hash-function or hash-table design: each of these already has a dedicated, larger topic in the catalog (Object-Oriented Programming and Design, Concurrency Synchronization and Deadlock, Memory Management and Garbage Collection, Functional Programming, Hashing and Hash Tables), and a test-flavored costume on otherwise-identical content is not a reason to duplicate it here.