Java backend
Java som backend-språk, med Spring Boot som rammeverk for API-er i produksjon.
Java-grunnlag
Variabler
SenereHva: Deklarering og typing av data i Java.
Hvorfor: Grunnleggende byggeklosser i alt Java-kode.
Bør kunne: Velge riktig primitiv eller referansetype.
Datatyper
SenereHva: Primitive typer og wrapper-klasser.
Hvorfor: Java skiller strengt mellom primitive typer og objekter.
Bør kunne: Vite når autoboxing skjer og hvorfor det har en kostnad.
Kontrollflyt
SenereHva: if/else, switch, løkker.
Hvorfor: Grunnlaget for all forgrening og gjentakelse.
Bør kunne: Bruke switch expressions der det gir klarere kode.
Metoder
SenereHva: Gjenbrukbare kodeblokker med signatur.
Hvorfor: Strukturerer logikk i håndterbare enheter.
Bør kunne: Skrive metoder med ett tydelig ansvar.
Klasser
SenereHva: Definisjoner av objekter med felter og metoder.
Hvorfor: Java er gjennomgående objektorientert.
Bør kunne: Modellere domenet med riktig innkapsling.
Interfaces
SenereHva: Kontrakter en klasse kan implementere.
Hvorfor: Muliggjør løs kobling mellom komponenter.
Bør kunne: Programmere mot interfaces i offentlige API-er.
Arv
SenereHva: Gjenbruk og spesialisering via extends.
Hvorfor: Reduserer duplisering mellom relaterte klasser.
Bør kunne: Foretrekke komposisjon når arv ikke passer naturlig.
Collections
SenereHva: List, Set, Map og deres implementasjoner.
Hvorfor: Kjernen i hvordan data samles og behandles i Java.
Bør kunne: Velge riktig samlingstype for ytelse og bruksmønster.
Generics
SenereHva: Typeparametrisert kode i Java.
Hvorfor: Gir typesikre, gjenbrukbare samlinger og metoder.
Bør kunne: Skrive egne generiske klasser og metoder.
Streams
SenereHva: Funksjonell databehandling av samlinger.
Hvorfor: Gjør transformasjon og filtrering av data mer deklarativt.
Bør kunne: Bruke map, filter og collect fremfor manuelle løkker.
Exceptions
SenereHva: Checked og unchecked unntak i Java.
Hvorfor: Java tvinger eksplisitt håndtering av forventede feil.
Bør kunne: Vite når et unntak bør være checked eller unchecked.
Records
SenereHva: Kompakte, uforanderlige databærende klasser.
Hvorfor: Reduserer boilerplate for enkle datamodeller.
Bør kunne: Bruke records for DTO-er og verdiobjekter.
Enums
SenereHva: Faste sett med navngitte konstanter.
Hvorfor: Gjør kode tryggere enn å bruke rå strenger eller tall.
Bør kunne: Bruke enums for tilstander og kategorier.
Pakker
SenereHva: Organisering av klasser i navnerom.
Hvorfor: Holder store kodebaser strukturerte og lesbare.
Bør kunne: Følge en konsistent pakkestruktur per lag.
Maven eller Gradle
SenereHva: Byggverktøy og avhengighetshåndtering for Java.
Hvorfor: Forutsetning for ethvert reelt Java-prosjekt.
Bør kunne: Konfigurere avhengigheter og byggeliv selv.
Spring Boot
Prosjektstruktur
SenereHva: Standard lagdeling i et Spring Boot-prosjekt.
Hvorfor: Gjenkjennelig struktur for controller, service og repository.
Bør kunne: Organisere kode etter ansvar, ikke etter tilfeldighet.
Controllers
SenereHva: Klasser som håndterer HTTP-forespørsler.
Hvorfor: Inngangspunktet for alle API-kall.
Bør kunne: Holde controllers tynne og delegere til services.
Services
SenereHva: Forretningslogikk atskilt fra HTTP-laget.
Hvorfor: Gjør logikken testbar uavhengig av web-rammeverket.
Bør kunne: Plassere forretningsregler i services, ikke controllers.
Repositories
SenereHva: Datatilgangslag, ofte via Spring Data JPA.
Hvorfor: Skiller databaselogikk fra forretningslogikk.
Bør kunne: Bruke repository-grensesnitt fremfor rå SQL der mulig.
Dependency injection
SenereHva: Springs kjernemekanisme for å koble sammen komponenter.
Hvorfor: Gjør komponenter løst koblet og testbare.
Bør kunne: Bruke konstruktørinjeksjon som standard.
Spring Data JPA
SenereHva: Abstraksjon over JPA for enklere datatilgang.
Hvorfor: Reduserer boilerplate for vanlige CRUD-operasjoner.
Bør kunne: Skrive egne query-metoder når standardmetodene ikke strekker til.
Hibernate
SenereHva: JPA-implementasjonen Spring Boot bruker som standard.
Hvorfor: Håndterer mapping mellom objekter og databaserader.
Bør kunne: Forstå lazy loading og N+1-problemer.
Validering
SenereHva: Bean Validation-annotasjoner på inndata.
Hvorfor: Fanger ugyldig data før den når forretningslogikken.
Bør kunne: Validere DTO-er konsekvent på alle endepunkter.
Configuration
SenereHva: application.yml/properties og profiler per miljø.
Hvorfor: Skiller konfigurasjon fra kode per miljø.
Bør kunne: Bruke profiler for lokal, test og produksjon.
Logging
SenereHva: SLF4J og strukturert logging i Spring Boot.
Hvorfor: Nødvendig for feilsøking i produksjon.
Bør kunne: Logge med riktig nivå og kontekst.
REST API
SenereHva: Bygging av ressursorienterte endepunkter med Spring MVC.
Hvorfor: Kjernen i backend-utvikling med Java.
Bør kunne: Designe konsistente, RESTfulle endepunkter.
Testing
SenereHva: Enhets- og integrasjonstesting med JUnit og Spring Test.
Hvorfor: Gir trygghet ved endringer i forretningslogikk.
Bør kunne: Teste både isolert logikk og fulle HTTP-flyter.
Spring Security
SenereHva: Rammeverk for autentisering og autorisering.
Hvorfor: Standardløsningen for sikkerhet i Spring-økosystemet.
Bør kunne: Konfigurere sikkerhetsfiltre uten å svekke beskyttelsen ved et uhell.
JWT eller sessions
SenereHva: To hovedstrategier for å holde brukere innlogget.
Hvorfor: Valget påvirker skalerbarhet og kompleksitet.
Bør kunne: Vite hvilken strategi som passer API vs. tradisjonell webapp.
PostgreSQL
SenereHva: Relasjonsdatabasen Spring Boot-prosjekter typisk bruker i produksjon.
Hvorfor: Robust og godt støttet i JPA-økosystemet.
Bør kunne: Designe skjema og migrasjoner for en ekte database.
Swagger/OpenAPI
SenereHva: Automatisk generert API-dokumentasjon via springdoc.
Hvorfor: Gjør API-et utforskbart uten separat dokumentasjon.
Bør kunne: Holde annotasjoner synkronisert med faktisk API-oppførsel.
Prosjektstige
Konsollprogram
Grunnleggende syntaks, kontrollflyt og metoder uten rammeverk.
Budsjettprogram
Enkel datamodellering og collections/streams for beregninger.
CRUD-app
Første møte med persistens, enten i minnet eller mot en enkel database.
Spring Boot REST API
Bygg et første API med controller, service og repository-lag.
API med PostgreSQL
Spring Data JPA mot en ekte relasjonsdatabase.
Autentisering
Spring Security med JWT-basert innlogging.
Testing
Enhets- og integrasjonstester for hele API-et.
Fullstack-app med Next.js-frontend
Koble et Spring Boot-API til en Next.js-frontend i produksjon.