EPAM Systems Java Full Stack with React Interview Questions & Answers
Curated interview practice questions with answers. These are practice scenarios, not a verified list of past interview questions.
About EPAM Systems hiring for Java Full Stack with React roles
EPAM Systems is a global digital platform engineering and software development services company. It works on product development, quality engineering, cloud and data projects for clients in finance, life sciences, retail and software. Its India delivery centres hire for software engineers, test automation engineers, data engineers and data scientists.
For Java Full Stack with React roles, this EPAM Systems practice set focuses most on React Frontend (7), Spring Boot (6), Core Java (5), JavaScript, HTML and CSS (4). It has 12 easy, 18 medium questions, so you can start easy and work up to the harder ones.
Company type
IT services
Headquarters
Newtown, Pennsylvania, USA
Main India offices
Hyderabad, Bengaluru, Pune, Chennai, Gurugram
EPAM Systems Java Full Stack with React interview process
Online coding assessment
Technical interview
Technical or design round
Hiring manager round
Typical pattern based on public candidate experiences. Rounds vary by role, team and year.
Solved for EPAM SystemsStart practicing
3 QUESTIONS FREESign up to unlock the full question bank and track your progress.Unlock every question and answer, then continue practising company-wise and package-wise.
✓ 3 questions free • Unlock the rest in seconds
01
Build a login form with basic validation in React.
public interface OrderRepository extends JpaRepository<Order, Long> {
@Query("""
select distinct o from Order o
join fetch o.items i
where o.customer.id = :customerId
""")
List<Order> findWithItems(@Param("customerId") Long customerId);
@EntityGraph(attributePaths = {"items", "customer"})
Optional<Order> findWithGraphById(Long id);
}
03
What is the difference between controlled and uncontrolled components?
In a controlled component, form input values live in React state and change through onChange, so React is the single source of truth, which makes validation and conditional UI easy. In an uncontrolled component, the DOM keeps the value and you read it through a ref when needed, which needs less code and suits simple forms or file inputs. Libraries like React Hook Form use uncontrolled inputs for better performance in large forms.
The GC frees objects that are no longer reachable from GC roots such as thread stacks and static fields. Most objects die young, so the heap is generational: minor collections clean the young generation often and survivors are promoted. G1 is the default collector since Java 9 and targets predictable pause times by collecting regions. ZGC and Shenandoah offer sub-millisecond pauses for large heaps. Tuning usually starts with -Xmx and choosing the collector, not dozens of flags.
05
Create a scheduled job that runs every night at 2 AM in Spring Boot.
@SpringBootApplication
@EnableScheduling
public class App { }
@Component
public class CleanupJob {
private final SessionRepository repo;
public CleanupJob(SessionRepository repo) { this.repo = repo; }
@Scheduled(cron = "0 0 2 * * *", zone = "Asia/Kolkata")
public void removeExpiredSessions() {
repo.deleteByExpiresAtBefore(Instant.now());
}
}
// With several instances, use ShedLock so only one runs the job.
06
Write a production-friendly Dockerfile for a Spring Boot application.
HashMap is not synchronized and allows one null key and null values. Hashtable is a legacy class where every method is synchronized, so it is slow and allows no nulls. ConcurrentHashMap is the modern thread-safe choice: reads are mostly lock-free, writes lock only a single bucket using CAS and synchronized blocks, and it offers atomic methods such as computeIfAbsent and merge. It also does not allow null keys or values.
08
Your application fails at startup with a circular dependency error between two services. What do you do?
Spring Boot 2.6 and later forbid circular references by default. The real fix is design: two services depending on each other usually means a responsibility is in the wrong place. Extract the shared logic into a third bean, or use an application event so one service notifies the other without a direct reference. Using @Lazy or allowing circular references in properties hides the problem and should only be a temporary workaround.
09
Create a custom unchecked exception and throw it from a service method.
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException(String message) {
super(message);
}
}
public Product getProduct(Long id) {
return repository.findById(id)
.orElseThrow(() ->
new ResourceNotFoundException("Product not found: " + id));
}
// A @RestControllerAdvice can map this exception to HTTP 404.
In my e-commerce project I designed tables for users, addresses, products, categories, orders, order_items and payments. Orders had a foreign key to users, and order_items linked orders and products with quantity and price at purchase time, so later price changes did not affect old orders. I added unique constraints on email and SKU, indexes on order status and date, and used Flyway for version-controlled changes.
12
What is the difference between localStorage, sessionStorage and cookies?
localStorage keeps data with no expiry for the origin, around 5 to 10 MB, and is shared across tabs. sessionStorage is similar but cleared when the tab closes and is per tab. Cookies are small, around 4 KB, are sent automatically with every request to the server and can be marked HttpOnly, Secure and SameSite. Use cookies for auth sessions, and storage for non-sensitive UI preferences only, since scripts can read storage.
13
How does the this keyword work, and how do arrow functions change it?
In a regular function, this depends on how the function is called: the object before the dot in a method call, undefined in strict mode for a plain call, the new object with new, or a value set by call, apply or bind. Arrow functions do not have their own this; they use this from the surrounding scope. That makes arrows ideal for callbacks inside methods, but unsuitable as object methods that need their own this.
Normalization organises tables to reduce redundancy and update anomalies. 1NF requires atomic values with no repeating groups. 2NF requires 1NF and that every non-key column depends on the whole primary key, not part of a composite key. 3NF requires 2NF and no transitive dependency, so non-key columns depend only on the key. For example, store customer city in the customers table, not in every order row. Reporting systems sometimes denormalize for speed.
15
Write code that runs tasks in parallel using ExecutorService and collects results.
An index, usually a B-tree, lets the database find rows without scanning the whole table, which speeds up WHERE, JOIN and ORDER BY on indexed columns. Indexes cost disk space and slow down INSERT, UPDATE and DELETE because each index must also be updated. They help little on low-selectivity columns like a boolean flag. Functions on the column, such as WHERE LOWER(email) = ?, or a leading wildcard in LIKE also prevent normal index use.
It is a convenience annotation combining three annotations. @SpringBootConfiguration marks the class as a configuration source. @EnableAutoConfiguration tells Boot to configure beans based on the classpath and properties, for example a DataSource when a JDBC driver is present. @ComponentScan scans the package of the main class and its sub-packages for components. That is why the main class should sit in the root package of your project.
React is a JavaScript library for building user interfaces from reusable components. Components describe what the UI should look like for a given state, and React updates the browser DOM when the state changes. The virtual DOM is a lightweight in-memory tree of the UI. On each update, React compares the new tree with the previous one and applies only the minimum real DOM changes, which keeps updates efficient and the code declarative.
19
Write CSS for a product grid that shows 1 column on mobile, 2 on tablet and 4 on desktop.
@Bean
PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(12);
}
public void register(RegisterRequest req) {
User user = new User(req.email(), encoder.encode(req.password()));
userRepository.save(user);
}
public boolean checkLogin(String raw, User user) {
return encoder.matches(raw, user.getPasswordHash());
}
// BCrypt adds a random salt and is deliberately slow.
// Never store plain text or use MD5/SHA-1 for passwords.
21
Show how to read a file safely using try-with-resources.
Authentication verifies who the user is, for example by checking a password, OTP or token. Authorization decides what that authenticated user is allowed to do, for example only admins can delete products. In Spring Security, authentication produces an Authentication object with granted authorities, and authorization uses those authorities in URL rules or annotations like @PreAuthorize("hasRole('ADMIN')"). A failed authentication gives 401 and a failed authorization gives 403.
23
What is a custom hook and why would you write one?
A custom hook is a function whose name starts with use and which calls other hooks, letting you reuse stateful logic across components. Examples are useFetch for loading data, useDebounce for search input and useAuth for the current user. Each component calling the hook gets its own independent state. Custom hooks keep components focused on rendering and make logic easier to test, much like extracting a service in backend code.
24
What is the biggest full stack project you have built?
I built a job portal using React with Vite, Spring Boot 3, Spring Security with JWT and MySQL. Recruiters could post jobs and candidates could apply and track status. I designed the REST APIs, implemented role-based access, added pagination and search, and used TanStack Query on the frontend. I deployed it with Docker and a CI pipeline. The hardest part was file upload for resumes, which I solved with pre-signed object storage URLs.
String is immutable, so every change creates a new object. StringBuilder is mutable and fast but not thread-safe, which makes it the default choice for building strings inside a method or loop. StringBuffer is mutable and synchronized, so it is thread-safe but slower, and it is rarely needed today because strings are seldom shared across threads while being built. The compiler already uses optimized concatenation for simple + expressions outside loops.
26
How do code splitting and lazy loading work in React?
Code splitting breaks the JavaScript bundle into smaller chunks loaded on demand, which improves first load time. React.lazy with a dynamic import, such as const Reports = lazy(() => import('./Reports')), loads the component only when it renders, and Suspense shows a fallback while it loads. Splitting by route is the most common pattern. Bundlers like Vite create the chunks automatically from dynamic imports.
27
What changed when moving from Spring Boot 2 to Spring Boot 3?
Spring Boot 3 requires Java 17 or later and is built on Spring Framework 6. The biggest migration task is the switch from javax.* to jakarta.* packages for persistence, validation and servlet APIs. Spring Security 6 removed WebSecurityConfigurerAdapter in favour of SecurityFilterChain beans. Boot 3 also supports GraalVM native images, Micrometer observation and tracing, and from 3.2 the RestClient and virtual thread support.
28
The layout looks fine on desktop but breaks on mobile with horizontal scrolling. How do you debug it?
Check that the page has the viewport meta tag. Use browser device mode to find the element wider than the screen, often fixed widths in pixels, large images, long words or tables. Replace fixed widths with max-width: 100 percent, flexible units and flex-wrap, add overflow-wrap for long text and wrap wide tables in a scrollable container. Build mobile-first with media queries that add complexity for larger screens.
singleton is the default: one instance per application context. prototype creates a new instance every time the bean is requested. Web applications also have request, session and application scopes, and websocket scope. Singleton beans must be stateless or thread-safe because many requests share them. If a singleton needs a prototype or request-scoped bean, inject an ObjectProvider or use a scoped proxy so each use gets the correct instance.
30
Why does React need a key prop when rendering lists?
Keys help React match list items between renders, so it knows which items were added, removed or moved. Use a stable unique ID from the data, such as product.id. Using the array index as key causes bugs when items are reordered or deleted, because state and input values can attach to the wrong row. Keys only need to be unique among siblings, and they are not passed to the component as a prop.
Tips to crack the EPAM Systems Java Full Stack with React interview
Revise core concepts in Java, Python or JavaScript deeply, as EPAM interviews often test language fundamentals in detail.
Prepare test automation framework design questions if applying for QA roles, including page object model and CI integration.
Read about EPAM's engineering-first identity and its learning platforms, which it highlights for career growth.
Keep a one-minute story ready for every project on your CV: problem, your part, tools, result.
Practise the hard questions on this page aloud; EPAM Systems interviewers usually ask follow-ups on your first answer.
Frequently asked questions
How many rounds are there in the EPAM Systems Java Full Stack with React interview?
Candidates usually go through 4 stages: Online coding assessment; Technical interview; Technical or design round; Hiring manager round. The exact rounds change with the role, team, location and your experience, so confirm the process with the recruiter.
Which topics should I prepare for the EPAM Systems Java Full Stack with React interview?
This practice set leans on React Frontend (7), Spring Boot (6), Core Java (5), JavaScript, HTML and CSS (4). Revise those first, then practise explaining one or two of your own projects end to end, because most EPAM Systems interviewers ask you to walk through real work.
Are these the exact questions asked at EPAM Systems?
No. These are curated practice questions that match the skills and difficulty usually tested in it services interviews like EPAM Systems's. They are not a leaked or verified list of past questions.
Where does EPAM Systems hire Java Full Stack with React professionals in India?
EPAM Systems has large teams in Hyderabad, Bengaluru, Pune, Chennai, Gurugram. Openings and locations change often, so check the EPAM Systems careers page and filter by city and experience.
Java Full Stack with React questions for similar companies