I’m a senior backend developer with 25 years of experience, mostly in Singapore. In my recent role, I led a migration from a legacy Java app to Spring Boot microservices, which improved deployment frequency by 3x. I’m strongest in Java, Spring Boot, and database optimization. I’ve also worked with React, CI/CD, and I’m currently deepening my Kafka and Kubernetes skills. I’m looking for a role where I can help modernize enterprise systems

 

·        Prepare 6 project stories in STAR format.

·        Do 2 mock interviews before the next real one.

 


API started failing in production. What do you do?

 

First, I'd assess impact: all users or a subset. Then I'd check application logs and correlation IDs. Next I'd determine whether failures originate from the application, database, or downstream dependencies. If the issue is critical, I'd initiate incident response, stabilize the system, and identify rollback options

First, I’d check the last 30 minutes of logs for that API. Second, I’d verify if the failure is consistent or intermittent. Third, I’d roll back the last deployment if nothing else changed. If no dashboard exists, I’d add structured logging immediately

First I would confirm whether the issue is user-specific or system-wide. Then I would check logs, trace IDs, recent deployments, and downstream dependencies. If needed, I would isolate the failing service and roll back the last change. The goal is to restore production quickly while preserving evidence for root-cause analysis

IMPACT

Who is affected?

All users? Specific users?

 

EVIDENCE

Logs

Metrics

Alerts

Recent deployments

 

ISOLATE

Application?

Database?

External service?

Infrastructure?

 

STABILIZE

Rollback

Restart

Disable feature

Failover

 

 

ROOT CAUSE

Why?

How to prevent recurrence?

 

Convert Java application to Spring Boot REST API with minimal changes.

 

I'd preserve the service layer, expose it through REST controllers, externalize configurations, replace direct JDBC with Spring Data where appropriate, and migrate incrementally using strangler pattern principles

 

Increase from 200 APIs/minute to 2000 APIs/minute.

If I cannot change infrastructure, I’d first optimize database queries and add caching. Then I’d profile the API to find bottlenecks. Finally, I’d use connection pooling and async processing if the workload allows

Key lesson:
Always clarify constraints first:
“Am I allowed to add more servers, change code, or only tune the existing setup?”

 

Step 1

Measure.

What is the bottleneck?

CPU?

Memory?

Database?

Thread pool?

Connection pool?

External API?


Step 2

Tune.

Tomcat threads.

JDBC pool.

Cache.

SQL optimization.

Connection reuse.


Step 3

Load test.


Step 4

Then scale horizontally.

Only then talk about Kubernetes.


6. PostgreSQL Migration



I would first inventory Oracle-specific constructs such as packages, sequences, global temporary tables, materialized views, and PL/SQL procedures. Then I'd classify what can be automatically converted and what requires manual redesign into PostgreSQL functions, sequences, and partitioning. Finally, I'd perform reconciliation testing

 

AI Question

I use GenAI to accelerate repetitive tasks such as generating unit test skeletons, documentation, and boilerplate. However, all generated output is reviewed carefully, especially for security-sensitive banking applications.


PREP Framework

Point

"My first step is impact assessment."


Reason

"Because the resolution approach differs."


Example

"For example, if all users fail, I'd suspect infrastructure."


Point

"Then I'd investigate logs."


This makes you sound like an architect.


Stop Overselling

My strongest contribution is leading enterprise Java modernization initiatives while remaining hands-on with troubleshooting and delivery


40%

Production scenarios

·        API failures

·        Thread dumps

·        Memory leaks

·        DB bottlenecks

·        WebLogic incidents

·        Scaling


20%

Migration scenarios

·        Oracle PostgreSQL

·        Monolith Spring Boot

·        WebLogic Kubernetes

·        EJB Spring


20%

Multithreading

·        Deadlocks

·        Executor tuning

·        ThreadLocal leaks

·        Atomic vs LongAdder

·        Virtual Threads


10%

Spring Boot internals

·        Transactions

·        AOP

·        Security

·        Performance


10%

Behavioral questions

·        Why change?

·        Conflict management?

·        Leadership examples?

·        Production incidents you handled.

 

Action:
Review these terms before your next interview:

·        Strangler pattern

·        Circuit breaker

·        Bulkhead

·        CQRS (if relevant)

·        Orchestration vs choreography

 

scenario-based interviews with strict s

I’m a senior Java developer. In my last project, I migrated a legacy system to Spring Boot microservices, reducing deployment time by 40%.

 

·        We used Spring Boot to solve slow startup and manual config. I set up auto-configuration and externalized properties.
Prepare 3–4 crisp stories (migration, performance, scaling, debugging).

·        Practice answering “What problem did you solve?” in 60 seconds.

 

Scenario 1: Production APIs Suddenly Fail

Interviewer

All APIs are failing in production. What do you do?

 

First, I'd assess the impact: whether all users are affected or only a subset. Then I'd investigate recent deployments, application logs, and correlation IDs to identify whether the issue originates from the application, database, or downstream services. I'd also check infrastructure health such as thread pools and connection pools. Once identified, I'd stabilize the system by rolling back the release, restarting affected components, or redirecting traffic if required. Finally, I'd perform root cause analysis and implement preventive measures.


Scenario 2: Throughput Must Increase from 200 to 2000 APIs/minute

Interviewer

How would you do it?

 

I wouldn't immediately scale infrastructure. First, I'd identify the bottleneck using metrics: CPU, memory, database response times, Tomcat threads, and JDBC pool utilization. Then I'd optimize inefficient SQL, introduce caching where appropriate, and tune thread pools and connection pools. I'd validate improvements using load testing. Only if capacity is still insufficient would I introduce horizontal scaling through clustering or container orchestration.


Scenario 3: Deadlock in Production

Interviewer

Users complain the system hangs.

 

I'd immediately capture thread dumps using jstack or kill -3 and look for Java-level deadlocks. If confirmed, I'd identify the conflicting locks and determine whether a restart is necessary. For permanent resolution, I'd redesign the locking strategy using consistent lock ordering or move critical concurrency control to the database using transactional locking.


Scenario 4: Oracle to PostgreSQL Migration

Interviewer

How would you approach it?

 

I'd first inventory Oracle-specific constructs such as packages, sequences, materialized views, PL/SQL procedures, and temporary tables. Then I'd classify them into automatically convertible components versus those requiring redesign. I'd migrate schemas and data incrementally, rewrite Oracle-specific logic into PostgreSQL functions where necessary, and perform reconciliation testing to ensure functional equivalence.


Scenario 5: Memory Leak

Interviewer

Production JVM keeps crashing.

 

I'd capture heap dumps and analyze them using Eclipse MAT to identify dominant objects and retention paths. I'd correlate this with GC logs and thread dumps to determine whether the issue is caused by caching, ThreadLocal misuse, session growth, or application bugs. Once identified, I'd fix the leak, validate under load, and establish monitoring thresholds.


Scenario 6: Monolith to Spring Boot

Interviewer

How would you migrate?

 

I would avoid a big-bang rewrite. I'd use an incremental strangler approach, preserving existing business logic while exposing selected functionality through Spring Boot REST APIs. Configuration would be externalized, testing automated, and migration performed feature by feature to minimize business risk.


Scenario 7: High Database Response Time

Interviewer

APIs are slow because of database delays.

 

I'd identify the slow SQL using AWR reports or query monitoring tools. Then I'd examine execution plans, indexes, and statistics. I'd eliminate unnecessary database round trips, batch operations where appropriate, and tune connection pools. If needed, I'd introduce caching for frequently accessed read-only data.


Scenario 8: External Service Dependency Failure

Interviewer

Downstream SOAP service becomes unavailable.

 

I'd implement resilience patterns such as timeouts, retries with exponential backoff, and circuit breakers to prevent cascading failures. Depending on business requirements, I'd either queue requests for later processing or return meaningful fallback responses while maintaining audit trails.


Scenario 9: Duplicate Payment Processing

Interviewer

Same payment processed twice.

 

I'd first identify whether duplicate requests originated from retries, redelivered messages, or user actions. To prevent recurrence, I'd implement idempotency using unique transaction references and enforce constraints at the database level. In financial systems, idempotency is critical because retries are expected.


Scenario 10: WebLogic Stuck Threads

Interviewer

Multiple stuck thread alerts.

 

I'd collect thread dumps and identify whether threads are blocked on database calls, external dependencies, or synchronization locks. I'd review JDBC pool metrics and recent changes. If necessary, I'd stabilize the environment by isolating problematic components, then implement fixes such as query optimization, timeout configurations, or lock redesign.


Scenario 11: ThreadLocal Leak

Interviewer

Explain ThreadLocal issues.

 

ThreadLocal itself isn't a problem, but in application servers using thread pools, failing to clear ThreadLocal values can cause memory leaks because worker threads live for a long time. Therefore, ThreadLocal values should always be removed in a finally block.


Scenario 12: Banking Transaction Consistency

Interviewer

Two withdrawals happen simultaneously.

 

I'd ensure transactional consistency using database locking mechanisms such as SELECT FOR UPDATE or optimistic locking with version checks. In clustered environments, I prefer database-level controls because JVM synchronization only protects a single instance.


Golden Rule for Senior Interviews

When asked any scenario, think:

Impact Investigate Stabilize Prevent

or

Situation Investigation Resolution

Don't start with technologies.

 

Better closing:

“Based on our discussion, is there any specific area — like migration, scaling, or debugging — where you’d like me to go deeper?”

 

 

Area Action Item

Introduction 60 sec: role + recent project + measurable impact.

Scenario answers First 3 concrete steps. Clarify constraints.

Closing Ask specific, forward-looking question.

 

·        Tell me about yourself.

·        Describe a Spring Boot migration you worked on.

·        How do you debug an API failure in production?

·        How do you migrate a legacy Java app with minimal change?

·        How do you handle traffic growth from 200 to 2000 requests per minute?

·        Explain orchestration vs choreography.

·        How do you convert Oracle SQL to PostgreSQL with minimal impact?

·        What is your experience with CI/CD and deployment?

·        How have you used AI in development or testing?

·        Why are you looking for a change now?

backend Java/Spring Boot, migration, database tuning, deployment, and troubleshooting. Keep React, Kubernetes, Kafka, and AI as supporting skills unless the role specifically asks for them.

 

How do you debug an API failure in production?

1.  Clarify the symptom.

2.  one user, one service, or everyone.

3.  Reproduce or isolate the issue.

4.  Inspect logs, metrics, and trace IDs.

5.  Form a root-cause hypothesis and validate it.

6.  Fix, retest, and monitor.

My first step is to confirm the scope of the issue, whether it is one user, one API, one service, or a system-wide failure. Then I try to reproduce the problem and check recent changes, logs, error codes, and trace or request IDs. If it is a microservices flow, I follow the request across services and compare the failing path with a successful one. After I identify the root cause, I apply the fix, run regression tests, and monitor the system to ensure the issue does not return

 

Try answering this in 45 seconds:

·        “An API is failing in production. What do you do first?”

Your ideal order should be:

·        scope,

·        reproduce,

·        inspect evidence,

·        isolate cause,

·        fix,

·        verify.

 

 

1.  State the problem briefly.

2.  Explain what you tried.

3.  Explain why it was still unresolved.

4.  Say how you escalated or worked around it.

5.  End with what you learned.

 

I worked on a production issue where the root cause was not immediately clear. I checked logs, reproduced the problem, and compared failing and working requests. I was able to narrow it down, but I could not fully resolve it within my scope because it required dependency-team changes. I escalated it with evidence, helped verify the fix after their update, and learned to isolate the issue faster by checking upstream/downstream dependencies earlier.

 

1.  Identify the current Spring Boot and Java versions.

2.  Review breaking changes and incompatible libraries.

3.  Migrate one module or endpoint first.

4.  Keep old and new flows running in parallel if needed.

5.  Test thoroughly after each step.

6.  Monitor logs and performance after deployment.

 

Avoid saying only “adapter pattern” unless you explain what problem it solves. In your case, say that it helps keep the legacy path working while the new Spring Boot APIs are introduced gradually.

 

 

For a Spring Boot migration, I normally follow an incremental modernization strategy. First I assess the application to understand the architecture, module boundaries, external integrations, database access, and any framework or JDK constraints. I also identify which parts are tightly coupled and which parts can be moved with minimal change.
Next, I define the migration path. In many cases I prefer a strangler-style approach, where I place a layer in front of the legacy system and gradually route selected functionality to the new Spring Boot implementation. I usually begin with a simple, low-risk module so I can validate the patterns, update the dependency management, and make sure the new configuration works correctly.
Once that part is stable, I refactor the build, properties, security settings, and any outdated libraries. I also verify API compatibility, database connectivity, and test coverage. If the migration affects multiple services or modules, I move step by step and keep monitoring logs and runtime behavior after each release. The main goal is to reduce risk, preserve business continuity, and prove stability before expanding the migration further.

·        “I assess first.”

·        “I migrate in stages.”

·        “I keep the old path working when needed.”

·        “I test after each step.”

·        “I monitor after release.”

 

“The current legacy application is harder to maintain, more vulnerable to security issues, and slower to change.”

“That increases support effort, delivery time, and operational risk.”

“I would migrate incrementally to Spring Boot so we reduce risk while modernizing the platform.”

“We would validate each step with testing and monitoring.”

“The result is a more supportable system with lower long-term cost and better agility.”