Top 40 J2EE Interviewvragen & Antwoorden (2026 Editie)

Zich voorbereiden op een J2EE/Jakarta EE-gesprek? Deze uitgebreide gids behandelt 40 kerntechnische vragen over architectuur, componenten, patronen en real-world troubleshooting – plus 10 gedragsmatige/situatiegewijze vragen met strategische modelantwoorden. Bijgewerkt voor moderne Jakarta EE-contexten terwijl klassieke J2EE-fundamenten behouden blijven.
👉 Gratis PDF-download: J2EE Interviewvragen & Antwoorden
Kernarchitectuur & Platformfundamenten
1. J2EE-architectuur & Kernkenmerken
J2EE definieert een multi-tier, gedistribueerd model dat presentatie, bedrijfslogica en datalagen scheidt voor schaalbaarheid en onderhoudbaarheid. Het biedt een gestandaardiseerde runtime met container-gebeheerde services (beveiliging, transacties, concurrentie), wat component-herbruikbaarheid en modulaire deployment mogelijk maakt.
| Laag | Technologieën | Verantwoordelijkheid |
|---|---|---|
| Presentatie | Servlets, JSP, JSF | UI-afhandeling |
| Bedrijfslogica | EJB (Session, Message-Driven) | Business logic |
| Integratie | JCA | Externe systemen (ERP, mainframe) |
| Data | JDBC, JPA/ORM | Databasetoegang |
Voorbeeld: Bankportal: Servlets voor dashboards, EJBs voor transacties, JDBC voor rekeningdata.
2. J2EE vs Java SE
Java SE = kerntaal, API's, utilities. J2EE = enterprise-uitbreidingen: containers, EJB, Servlet, JMS, JDBC, JPA, JTA, JAAS. Java SE bouwt desktop-tools; J2EE bouwt gedistribueerde, transactionele, beveiligde enterprise-systemen.
| Voordeel | Beschrijving |
|---|---|
| Component-gebaseerd | Modulaire ontwikkeling |
| Gestandaardiseerde API's | EJB, Servlet, JMS, JDBC, JPA |
| Ingebouwde services | Transacties, beveiliging, pooling |
| Gedistribueerd rekenen | RMI, JMS, JCA-integratie |
3. EJB-typen & Use Cases
| EJB-type | Kenmerken | Use Case |
|---|---|---|
| Stateless Session | Geen client-state, pooled | Betalingverwerking, validatie |
| Stateful Session | Behoudt conversationele state | Winkelwagentjes, wizards |
| Singleton Session | Eén instantie per app, gedeelde state | Caches, tellers, config |
| Message-Driven (MDB) | Async JMS-consumer, geen interface | Event-verwerking, order-queues |
| Entity (Legacy) | Vervangen door JPA-entiteiten | Afgeschreven |
4. Servlet-levenscyclus & voordelen over CGI
- Laden & Instantiëren door container
- Initialisatie via
init() - Request-verwerking via
service(),doGet()/doPost() - Vernietiging via
destroy()
| Servlet | CGI |
|---|---|
| Thread-based, hoge prestaties | Proces-based, langzamer |
| Beter geheugengebruik | Hoog resourceverbruik |
| Geïntegreerd Java-ecosysteem | Taal-afhankelijk |
Enkele instantie bedient duizenden requests vs. CGI's per-request proces-spawn.
5. JSP vs Servlets in Presentatielaag
| Factor | Kies JSP | Kies Servlet |
|---|---|---|
| Output-aard | Vooral HTML met ingesloten Java | Minimaal HTML, zware logica |
| Complexe logica | Vermijden | Preprocessing, berekening |
| Onderhoudbaarheid | Schone scheiding | Controller-rol (MVC) |
Best practice: JSP voor views, Servlets voor controllers.
6. JDBC in J2EE: Voor- & Nadelen
| Voordelen | Nadelen |
|---|---|
| Eenvoudige SQL-API | Boilerplate-code |
| Vendor-onafhankelijk | SQL-injectie risico bij misbruik |
| Werkt met alle RDBMS | Handmatig resourcebeheer |
Wordt meestal verpakt in DAO's of ORM (Hibernate/JPA) voor abstractie.
7. Transactiebeheertypen
| Type | Beschrijving |
|---|---|
| Container-Managed (CMT) | Declaratief via annotaties (@TransactionAttribute); container hanteert begin/commit/rollback |
| Bean-Managed (BMT) | Programmatisch via UserTransaction; ontwikkelaar controleert grenzen |
| JTA | Standaard-API voor gedistribueerde/globale transacties over resources |
Voorbeeld: Geldoverdracht vereist atomiciteit; CMT rolt automatisch terug bij falen.
8. JNDI vs RMI
| Kenmerk | JNDI | RMI |
|---|---|---|
| Doel | Resource-lookup (naming/directory) | Remote method invocation |
| Gebruik | Verkrijg DataSource, EJB, JMS-queue | Roep remote EJB-methoden aan |
JNDI lokaliseert; RMI communiceert.
9. JMS: Asynchrone Messaging-voordelen
- Non-blokkerend → prestaties
- Berichtpersistentie → veerkracht
- Ontkoppelde producers/consumers → schaalbaarheid
- Point-to-point (queues) & pub-sub (topics)
Voorbeeld: E-commerce queued orderbevestigingen; checkout reageert direct.
10. JSP-tagtypen
| Tag-type | Doel | Voorbeeld |
|---|---|---|
| Directive | Pagina-config | <%@ page %> |
| Scripting | Java inbedden | <% %> |
| Action | Server-componenten | <jsp:include> |
| Expression Language (EL) | Data-toegang | ${user.name} |
| Custom | Herbruikbare taglibs | <my:table> |
11. MVC in J2EE
| Component | Technologieën | Rol |
|---|---|---|
| Model | POJOs, EJBs, JPA-entiteiten | Business logic, state |
| View | JSP, JSTL, JSF | Render data |
| Controller | Servlets, Front Controller | Dispatch requests, controleer flow |
Stelt parallel UI/Backend-werk in.
12. Filters: Cross-Cutting Concerns
Intercepteer request/response via Filter-interface (init, doFilter, destroy). Kettingbaar. Gebruikt voor: auth, logging, compressie, validatie.
| Voordeel | Beschrijving |
|---|---|
| Gecentraliseerde logica | Enkele plek voor cross-cutting concerns |
| Herbruikbaar | Toepasbaar op meerdere endpoints |
| Schonere Servlets | Boilerplate verwijderen |
| Makkelijke config | web.xml of @WebFilter |
13. DAO-patroon: Wanneer & Waarom
Inkapselt DB-toegang achter interface; scheidt persistentie van bedrijfslogica. Voordelen: JDBC/Hibernate/JPA wisselen, mocken voor testen, standaardiseer toegangspatronen.
interface CustomerDAO { Customer findById(Long id); }
14. Beveiligingsimplementatiemethoden
| Methode | Beschrijving | Voorbeeld |
|---|---|---|
| Declaratief | web.xml / annotaties | Rollen-gebaseerde toegang |
| Programmatisch | Code-checks | request.isUserInRole("ADMIN") |
| JAAS | Pluggable auth-framework | Enterprise SSO |
| HTTPS/SSL | Transport-encryptie | Beveiligde login |
15. Application Server vs Web Server
| Kenmerk | App Server (WebLogic, WildFly) | Web Server (Apache HTTPD, Nginx) |
|---|---|---|
| EJB-ondersteuning | Ja | Nee |
| Transactiebeheer | Ingebouwd | Geen |
| JMS | Beschikbaar | Nee |
| Complexiteit | Hoog | Laag |
16. Sessiebeheertechnieken
| Methode | Voordelen | Nadelen |
|---|---|---|
| Cookies | Eenvoudig, automatisch | Kan uitgeschakeld zijn |
| URL Rewriting | Werkt zonder cookies | Lange URLs, security-risico |
| HttpSession | Eenvoudige API, server-side | Verbruikt geheugen |
| Hidden Fields | Eenvoudig voor formulieren | Alleen POST |
Bankieren: HttpSession + korte timeout.
17. Goede J2EE-ontwerpkenmerken
- Duidelijke scheiding: MVC, DAO, Service-lagen
- Standaardpatronen: Front Controller, Business Delegate, Service Locator, DAO
- Hoge cohesie, lage koppeling
- Robuuste exception-handling & logging
- Configureerbaar, omgeving-agnostische deployment
18. EL & JSTL: Scriptlets verminderen
EL: ${customer.name}
JSTL Loop:
<c:forEach var="item" items="${cart.items}"> ${item.name} </c:forEach>
Schonere pagina's; frontend-devs hebben minder Java-kennis nodig.
19. Veelvoorkomende J2EE-ontwerppatronen
| Patroon | Voordeel |
|---|---|
| Front Controller | Gecentraliseerde request-afhandeling |
| DAO | Ontkoppelt persistentie |
| Business Delegate | Vermindert presentatie-complexiteit |
| Service Locator | Cachet JNDI-lookups |
| MVC | Georganiseerde UI-architectuur |
20. Connection Pooling: Essentieel voor Prestaties
Hergebruikt vooraf vastgelegde DB-verbindingen via DataSource (JNDI). Container beheert levenscyclus, concurrentie, sizing. Voordelen: snellere toegang, lager resourcegebruik, betere schaalbaarheid, betrouwbaarheid.
21. Deployment Descriptor (web.xml) Relevantie
Gecentraliseerde config voor servlet-mappings, filters, listeners, security-constraints, sessie-config. Nog steeds vitaal voor env-specifieke overrides, auditing, strikte security-mappings – veel enterprises prefereren boven annotaties alleen.
22. Stateless vs Stateful Session Beans
| Attribuut | Stateless | Stateful |
|---|---|---|
| State | Geen | Client-specifiek |
| Schaalbaarheid | Hoog | Matig |
| Use Case | Betaling, validatie | Winkelwagentje, wizard |
| Levenscyclus | Kort | Lang, passivatie/activatie |
23. Interceptors: Modulaire Cross-Cutting Logica
@Interceptor + @InterceptorBinding voor logging, auditing, tx-checks. Voordelen: modulair, verminderde boilerplate, configureerbare prioriteit.
24. Resource-injectie
| Annotatie | Injecteert | Voorbeeld |
|---|---|---|
@Resource | DataSource, JMS, Env Entry | @Resource DataSource ds; |
@EJB | Enterprise Beans | @EJB OrderService svc; |
@PersistenceContext | JPA EntityManager | @PersistenceContext EntityManager em; |
Elimineert handmatige JNDI-lookup; schoner, testbaarder.
25. JCA: Legacy-systeemintegratie
Gestandaardiseerd framework voor verbinden met ERP, mainframes, messaging via resource-adapters die transacties, beveiliging, pooling beheren. Ondersteunt inbound (event-driven) en outbound-communicatie.
Voorbeeld: Bankieren JCA-adapter → COBOL-kern voor klantrecords.
26. Class Loaders & Deployment-isolatie
Per-app classloaders isoleren dependencies, vermijden conflicten, enable hot-deployment, controleren shared-library-zichtbaarheid. Lossen ClassNotFoundException / versie-conflicten op.
27. Schaalbaarheidsfactoren & Prestatie-tuning
| Factor | Impact |
|---|---|
| Sessiegrootte | Groter = minder schaalbaar |
| DB-indexering | Slecht = hoge latentie |
| Caching-strategie | Vermindert dure operaties |
| Pool-config | Controleert concurrentie/doorvoer |
Tunen: stateless EJBs, async messaging (JMS), thread-pools, JVM GC, profileren (JProfiler).
28. Message-Driven Beans (MDB)
| Kenmerk | MDB | Session Bean |
|---|---|---|
| Interactie | Async (JMS) | Sync |
| Interfaces | Geen | Local/Remote |
| State | Stateless | Kan stateful zijn |
Event-driven ontkoppeling.
29. JPA vs Entity Beans
- Simpelere API/annotaties (
@Entity,EntityManager) - Lazy loading, caching, betere prestaties
- Vendor-onafhankelijkheid (Hibernate, EclipseLink)
- Intuïtieve object-relationele mapping
30. Servlet-naar-EJB-communicatie & patronen
Via JNDI-lookup of @EJB-injectie. Patronen om te ontkoppelen:
| Patroon | Doel |
|---|---|
| Business Delegate | Abstraheert EJB-complexiteit |
| Service Locator | Cachet JNDI-lookups |
| Session Facade | Grofkorrelige operaties |
31. Front Controller-patroon
Enkele controller (ActionServlet/DispatcherServlet) centraliseert request-dispatching, auth, logging, view-selectie. Struts ActionServlet, Spring MVC DispatcherServlet implementeren dit.
32. EJB-levenscyclus & Resourcebeheer
| Bean-type | Stadia |
|---|---|
| Stateless | Instantiëren → Pool → Methode-aanroepen → Vernietigen |
| Stateful | Instantiëren → Methode-aanroepen → Passiveren → Activeren → Vernietigen |
| MDB | Instantiëren → Berichtverwerking → Vernietigen |
Container-pooling optimaliseert resourcegebruik onder belasting.
33. Prestatieverbeteringstechnieken
- Caching (lokaal/gedistribueerd: JCache, Redis)
- SQL-optimalisatie, indexering
- HTTP-sessiegrootte/levenscyclus verkleinen
- Load-balancing, clustering
- JVM heap/GC-tuning
- Async JMS voor zware rapporten
34. WAR vs EAR Packaging
| Kenmerk | WAR | EAR |
|---|---|---|
| Web-componenten | Ja | Ja |
| EJB-modules | Nee | Ja |
| Geschikt voor | Web-apps | Enterprise-apps |
| Deployment | Enkel module | Multi-module |
35. Logging-frameworks & selectiefactoren
JUL, Log4j2, Logback, server-geïntegreerd. Kies op basis van: async-appenders (Logback uitstekend), config-flexibiliteit (XML/JSON/Properties), server-integratie, prestaties onder concurrentie.
36. Listeners in Applicatie-levenscyclus
| Listener | Doel |
|---|---|
ServletContextListener | App-opstart/afsluit init |
HttpSessionListener | Sessie create/destroy tracking |
ServletRequestListener | Request-logging/tracking |
Event-driven monitoring zonder business-code aan te raken.
37. Container-kenmerken & Enterprise-services
- Geautomatiseerd levenscyclusbeheer
- Ingebouwd: beveiliging, transacties, threading, pooling
- Integratie: messaging, persistentie, naming
- Config-gedreven via descriptors/annotaties
EJB-container rolt automatisch tx terug bij exception.
38. Clustering: Betrouwbaarheid & Schaalbaarheid
| Voordeel | Beschrijving |
|---|---|
| Hoge Beschikbaarheid | Geen single point of failure |
| Load Balancing | Distribueer requests |
| Failover | Naadloze crash-herstel |
| Schaalbaarheid | Voeg nodes toe naarmate traffic groeit |
Sessie-replicatie behoudt gebruikersstate. Vliegticketing piekt tijdens feestdagen.
39. Service Locator-patroon
Centraliseert/cachet JNDI-lookups voor EJBs, DataSources, JMS. Lost op: herhaalde lookup-overhead, complexe naming-logica, enkel toegangspunt.
40. Stateful Session Bean-nadelen & mitigaties
| Nadeel | Mitigatie |
|---|---|
| Geheugen-overhead | Minimaliseer sessiedata |
| Clustering-complexiteit | Sessie-replicatie inschakelen |
| Langere levenscyclus | Alleen gebruiken wanneer conversationele state vereist |
🔍 Real-World Scenario Vragen (Gedragsmatig & Situatiegericht)
Volledige zinnen; vereiste zinnen gebruikt precies één keer elk.
1. Kerncomponenten van J2EE-architectuur?
Verwacht: Multi-tier, majeure API's.
Antwoord: "De kerncomponenten van de J2EE-architectuur omvatten de client-tier, web-tier, business-tier en enterprise information system-tier. Deze lagen werken samen met behulp van technologieën zoals Servlets, JSP, EJB, JMS en JDBC om een schaalbare en modulaire enterprise-oplossing te bieden."
2. Servlets vs JSP-verschil?
Verwacht: Request-afhandeling vs view-rendering.
Antwoord: "Servlets worden primair gebruikt voor request-verwerking en business-logica, terwijl JSP ontworpen is om de creatie van dynamische webcontent te vereenvoudigen door Java in HTML in te sluiten. JSP wordt typisch gebruikt voor presentatielogica terwijl Servlets complexe verwerking afhandelen."
3. Transactiebeheer in J2EE?
Verwacht: JTA, CMT vs BMT.
Antwoord: "J2EE-applicaties gebruiken de Java Transaction API om gedistribueerde transacties te beheren. Container-managed transacties vereenvoudigen dit proces door de applicatieserver de grenzen te laten controleren, terwijl bean-managed transacties ontwikkelaars meer granulare controle geven."
4. Uitdagende J2EE-app & succesfactoren?
Verwacht: Probleemoplossing, teamwerk.
Antwoord: "In mijn vorige rol werkte ik aan een grootschalige financiële applicatie die strikte beveiliging en hoge beschikbaarheid vereist. Ik zorgde voor succes door EJBs te implementeren voor business-logica, connection-pooling te optimaliseren, en nauw samen te werken met het beveiligingsteam om aan compliance-vereisten te voldoen."
5. Beveiligde J2EE-app ontwerpen voor gevoelige data?
Verwacht: Auth, authz, encryptie, secure coding.
Antwoord: "Ik zou JAAS gebruiken voor authenticatie en autorisatie, HTTPS implementeren voor beveiligde communicatie, alle input valideren, en gevoelige data at-rest versleutelen. Ik zou ook ervoor zorgen dat de applicatieserver gehardend is volgens best practices."
6. Productieprobleem troubleshooten in J2EE?
Verwacht: Druk-afhandeling, root-cause-analyse.
Antwoord: "Op een eerdere positie onderzocht ik een prestatiedegraderingsprobleem door threaddumps te analyseren en JDBC-verbindingsgebruik te reviewen. Zodra ik een connection-leak identificeerde, implementeerde ik correcte resource-cleanup en voegde monitoring-alerts toe om herhaling te voorkomen."
7. EJBs ondersteunend schaalbaarheid & onderhoudbaarheid?
Verwacht: Pooling, levenscyclus, modulariteit.
Antwoord: "EJBs ondersteunen schaalbaarheid door container-gebeheerde pooling, asynchrone verwerking en gedistribueerde deployment. Ze verbeteren ook onderhoudbaarheid door business-logica te scheiden van presentatie en infrastructuur-concerns."
8. Trage DB-prestaties troubleshooten stappen?
Verwacht: Logische bottleneck-analyse.
Antwoord: "Ik zou beginnen met SQL-execution-plannen analyseren, controleren op ontbrekende indexen, en connection-pool-configuraties reviewen. Ik zou daarna kijken naar caching-strategieën met J2EE-frameworks om herhaalde queries te verminderen."
9. Concurrerende prioriteiten over J2EE-projecten?
Verwacht: Tijdmanagement, communicatie.
Antwoord: "In mijn laatste rol beheerde ik concurrerende taken door business-impact te beoordelen, duidelijk te communiceren met stakeholders, en complexe ontwikkelingstaken op te breken in beheersbare segmenten. Dit stelde me in staat om consistent te leveren zonder kwaliteit op te offeren."
10. Legacy J2EE-migratie naar Jakarta EE/modern?
Verwacht: Moderniseringsstrategie, containerisatie.
Antwoord: "Ik zou beginnen met afgeschreven API's beoordelen, bibliotheken updaten naar Jakarta EE-pakketten, en de applicatie modulair maken. Op mijn vorige werk gebruikte ik deze aanpak om applicaties met succes te migreren naar nieuwere servers terwijl downtime verminderd werd."
Java
- Java 9 Multi-Resolution Image API: Responsive Graphics vereenvoudigen
- Een char omzetten naar een String in Java – Praktische voorbeelden en best practices
- Java Reflectie meesteren: klassen, methoden en velden inspecteren tijdens runtime
- Java-printen meesteren: print(), println() en printf() gebruiken
- Top 20 Neo4j-interviewvragen en antwoorden voor 2026
- Polymorfisme in Java begrijpen: Concepten en Praktisch Gebruik
- Java NavigableMap beheersen: Features, methoden en TreeMap-implementatie
- Java ConcurrentHashMap beheersen: Operaties, voorbeelden en best practices
- Java primitieve datatypes: complete gids met voorbeelden
- Java-commentaar: typen, gebruik en best practices
- Java 9 verbetert @Deprecated Annotation: forRemoval en betere richtlijnen