Háttéralkalmazások/Záróvizsgatételek

A lap korábbi változatát látod, amilyen Gyöngyösi Máté (vitalap | szerkesztései) 2025. június 24., 00:11-kor történt szerkesztése után volt. (4. EF Core: Tétel kidolgozása)


1. Adatbázisok

Ismertesse az adatbáziskonkurencia-problémákat!

  • dirty read
    • uncommitted tranzakciók által frissített sorok kiolvasása
  • non-repeatable read
    • committed tranzakciók által frissített sorok kiolvasása
      • a tranzakció előtt és után kiolvasott értékek nem egyeznek
  • phantom read
    • committed tranzakciók által hozzáadott / eltávolított sorok kiolvasása
      • a tranzakció előtt és után kiolvasott értékek nem egyeznek

Ismertesse a tranzakciók alaptulajdonságait!

  • ACID:
    • atomicity
      • minden tranzakció egy egység
      • ha egy tranzakció valamely része elhasal, akkor az egész sikertelennek minősül
    • consistency
      • az illegal transactionök nem mennek végbe
      • a kulcsok mindig helyesek
      • a megkötések (NOT NULL, UNIQUE, CASCADE stb.) be vannak tartva
      • a triggerek az előírtaknak megfelelően működnek
    • isolation
      • a párhuzamosan futó tranzakciók az izolációs szintnek megfelelő adatokat olvassanak ki
    • durability
      • a tranzakciók végrehajtása utáni állapot egy rendszerhiba vagy üzemzavar esetén is megmaradjon

Mire szolgálnak a tranzakcióizolációs-szintek?

izolációs szint dirty read non-repeatable read phantom read
read uncommitted 🔴 🔴 🔴
read committed 🟢 🔴 🔴
repeatable read 🟢 🟢 🔴
serializable 🟢 🟢 🟢

Ezeket az SQL-92 (ISO-)szabvány tartalmazta először.

Milyen izolációs szinteket támogat az Microsoft SQL Server?

A fentieket, plusz egy snapshot szintet, ami egy segédadatbázis (tempdb) segítségével számon tartja az egyes sorok verzióit, így a tranzakciók az azok kezdetekor készített pillanatkép alapján végeznek műveletet az adatbázisban. Előnye, hogy lockok nélkül működik. Hátránya, hogy a tempdb-nek magas lehet az erőforrásigénye, illetve egy esetleges írásütközés esetén kivételt dob az RDBMS, amit kezelni kell.

2. Tárolt eljárások

Ismertesse az adatbázisok szerveroldali programozásának koncepcióját, előnyeit, hátrányait!

Használatával eljárásokat (procedures) és függvényeket (functions), illetve triggereket lehet tárolni az adatbázisban. Lényege, hogy az üzleti logika helyett maga az adatbázis-kezelő szerver futtatja a beállított szubrutinokat, az előbbi csak meghívja őket.

a szerveroldali programozás jellemzői
szempont / tulajdonság
teljesítmény
  • gyorsabb lokális feldolgozás
  • a gyorsítótárnak is köszönhetően
  • hálózat: kisebb késleltetés, alacsonyabb terhelés
  • legtöbb esetben[1] értelmezett nyelvek
  • nagyobb terhelés az adatbázison
  • nem lehet igazán jól skálázni
szabvány
  • nincs (ISO-)szabvány
  • platformfüggőek az implementációk
  • sőt, általában egy külön nyelvet is meg kell tanulni hozzá
  • így nehezebben karbantartható a kód
adatbiztonság
  • jobb megfelelés az ACID-elveknek
  • nem kell a hálózaton utaztatni az adatokat
az üzleti logika bárhonnan meghívhatja a szubrutinokat
  • növeli a kód újrafelhasználhatóságát
  • könnyebb karbantartás
  • nincs scope-juk, így nehezebb korlátozni, ki hívhatja meg őket
  • jogosultságkezeléssel meg lehet oldani

Milyen programozási lehetőségei, sajátosságai vannak a Microsoft SQL Servernek?

A Microsoft SQL Server procedurális programozási nyelve a T(ransact)-SQL. Azokban változókat, operátorokat, elágazásokat, utasításblokkokat, ciklusokat és kivételeket is lehet használni.

Egyedi adatbetöltési eszköze a kurzor. Gyakorlatilag úgy működik, mintha lenne egy Excel-táblázatunk, amit egy olyan Maccel szeretnénk kiolvasni, amihez csak egy billentyű van csatlakoztatva. Meg kell nyitni a táblázatot, utána egyesével végig lehet léptetni az adatokon. Az utolsó sort elérve be kell zárni az ablakot (= a kurzort), majd magát a programot is, hogy felszabadítsuk az erőforrásokat (DEALLOCATE cursor1).

A függvények skalár értékekkel (változókkal) vagy táblákkal térhetnek vissza.

A triggerek DML- és DDL-utasításokat is végrehajthatnak.

szubrutinok jellemzői T–SQL-ben
típus van visszatérési értéke? van mellékhatása?
eljárás 🟠 lehet 🟠 lehet
függvény 🟢 igen, mindig 🔴 nem, soha

3. ORM

Mi az O/R leképzés feladata, mire szolgálnak a shadow-információk?

Az ORM segítségével egy objektumorientált nyelv memóriájában tárolt objektumokat le lehet képezni egy relációs adatbázis sémájára (és fordítva). Ezzel hidat képez az adatbázis és az üzleti logika között, biztosítva utóbbi adatperzisztenciáját.

A shadow-információk az adatbázisban szükséges, de az üzleti logika által nem használt kulcsokat, időbélyegeket és egyéb adatokat takarják.

egymásnak megfeleltethető adattípusok
üzleti logika adatbázis
osztály tábla
tagváltozó (primitive) oszlop (attribútum)
tagváltozó (objektum) oszlop (attribútum), mely egyben idegen kulcs is
osztálypéldány sor (rekord)

Az öröklési hierarchiát miképp lehet leképezni relációs sémára?

Tegyük fel, hogy van egy absztrakt Vehicle osztályunk. Ebből származik a Tram és a Bus osztály. Be akarunk vezetni egy új ElectricBus osztályt, mely a Bus leszármazottja.

Egy táblába, gányul

vehicle
🔑 id lpn_or_car_number is_tram has_radio_point_switcher is_bus rear_engined
1 V1448 true false false <null>
2 SGY811 false <null> true true

vehicle
🔑 id lpn_or_car_number is_tram has_radio_point_switcher is_bus rear_engined is_electric_bus traction_battery_capacity_kwh
1 V1448 true false false <null> false <null>
2 SGY811 false <null> true true false <null>
3 NLE848 false <null> false true true 170

Külön táblába a valós osztályokat

tram
🔑 id lpn_or_car_number has_radio_point_switcher
1 V1448 false
bus
🔑 id lpn_or_car_number rear_engined
1 SGY811 true

electric_bus
🔑 id lpn_or_car_number rear_engined traction_battery_capacity_kwh
1 NLE848 true 170

Külön táblába az összes osztályt

vehicle
🔑 id lpn_or_car_number
1 V1448
2 SGY811
3 NLE848
tram
🔑 id 🔑 🇸🇨 vehicle_id has_radio_point_switcher
1 1 false
bus
🔑 id 🔑 🇸🇨 vehicle_id rear_engined
1 2 true
2 3 true

electric_bus
🔑 id 🔑 🇸🇨 bus_id traction_battery_capacity_kwh
1 2 170

Absztrakt struktúrába

Külön tábla az osztályoknak, örökléseknek, tagváltozóknak, azok típusainak és az értékeknek. Mindegyiknek van kapcsolata legalább egy másik táblával.

Hogyan képezzük le az objektumok közötti kapcsolatokat?

Csak a kapcsolatok számosságát lehet leképezni, azok irányát nem. A kapcsolatok akár azonos táblán belül is lehetnek (rekurzió).

kapcsolatszámossági mátrix
egy több
egy idegen kulccsal az egyik táblában
több egy külön kapcsolótáblával

Hogyan képezhetőek le a globális változók?

Gányul

Változónként külön táblában:

vat_hungary
🔑 id vat
1 0,27
transaction_fee_hungary
🔑 id bank_transaction_tax
1 0,0045

Vagy akár ezeket osztályonként / teljesen összevonva.

Szépen

Kulcs-érték páronként:

globals
🔑 id class key value
1 Hungary vat 0,27
2 Hungary bank_transaction_tax 0,0045

4. EF

Mi az Entity Framework?

Az Entity Framework az ADO.NET-re és a .NET Frameworkre épülő ORM-keretrendszer. A 2016-ban kiadott, .NET Core-alapon újraírt, nyílt forráskódú verzió neve Entity Framework Core.

Teljesen moduláris, az egyes részeit NuGet-csomagokból lehet importálni. A JDBC-hez hasonlóan drivereket biztosít az egyes RDBMS-ekhez. Az ORM mellett a LINQ-eket futásidőben SQL-kódra fordítja le és hajtja végre.

Mikor használjuk, és mikor nem?

Mikor nem használjuk

  • legacy kódban, ami közvetlenül használja az ADO.NET-et, és nyers SQL-parancsok szerepelnek benne, amiket nem éri meg migrálni EF-be
  • teljesítménykritikus környezetekben, ahol
    • nem megengedhető az ORM overheadje
    • nem bízható rá az SQL-parancsok generálása az EF-re (pl. költségoptimalizálás miatt)
  • tömeges műveleteknél

Mikor használjuk

Avagy mik az előnyei:

  • ORM
  • LINQ
  • kódból történő migrációk (sémafrissítés)
  • lazy loading
  • párhuzamosság és konkurenciakezelés
  • előre lefordított és cache-elt lekérdezések

Mi a DbContext?

Egy EF Core-beli osztály, mely egy adatbázis-munkamenetet reprezentál. Általában a DAL-ban hozunk létre egy DbContext-ből leszármazó osztályt. Az entitások felderítésében segíti az EF-et, ha DbSet<Entity> tagváltozókat is megadunk. Egy DbContextOptions objektum átadásával – mely tartalmazza az adatbázis típusát és connection stringjét – lehet példányosítani.

A service layernek DI-vel adjuk át a DbContext-et, és annak tagfüggvényeit meghívva lehet LINQ-ket futtatni.

Milyen három modellezési lehetőségünk van adatmodell készítésére?

példa előnyei
automatikus
public class Book
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Isbn { get; set; }
}
  • nem szükséges további konfiguráció
  • a konvenciók alkalmazása kiváltja a további kód írását
annotációk
public class Book
{
    public int Id { get; set; }
    public string Title { get; set; }

    [Unicode(false)]
    [MaxLength(22)]
    public string Isbn { get; set; }
}
  • automatikus típusmegfeleltetés
  • egyszerű, ismert szintaxis
Fluent API
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Book>()
        .Property(b => b.Isbn)
        .IsUnicode(false);
}
  • kapcsolatok meghatározása
  • nézetek és egyedi eljárások támogatása
  • ősfeltöltés támogatása
  • adatbázisspecifikus beállítások

Milyen két lehetőségünk van a modell konfigurációjára?

Code first

lépés ki / mi készíti?
1. OO-modell a fejlesztő C#-ban
2. ORM
3. DB-objektumok EF Core Migration Tool

Database first

lépés ki / mi készíti?
1. DB-objektumok a fejlesztő SQL-ben
2. ORM EF Core Reverse Engineering Tool
3. OO-modell

Hogy néz ki egy entitás, hogyan készítünk kapcsolatokat közöttük?

...

Hogyan készítünk lekérdezéseket, hogyan módosítunk adatokat EF Core-ban?

...

5. JPA – általános

Ismertesd a Java Persistence API architektúráját és főbb jellemzőit!

...

Milyen annotációkat kell alkalmazni egy JPA-entitás megírásakor, és milyen típusú attribútumokat vehetünk fel benne?

...

Ismertesd a perzisztenciakontextus fogalmát!

...

Mutasd be az entitások életciklusát!

...

6. JPA – használat

Milyen módokon lehet lekérdezést megfogalmazni a JPA-ban?

...

Hogyan bővíti a lehetőségeket a Spring Data JPA a lekérdezések megfogalmazásának területén?

...

Hogyan valósíthatók meg entitások közti kapcsolatok és az entitások öröklése JPA-ban?

...

7. Spring

Mik a függőséginjektálás főbb előnyei, és hogyan támogatja a Spring?

...

Milyen élettartama lehet egy springes beannek?

...

Hogyan könnyíti meg a JPA használatát a Spring Data JPA?

...

Hogyan támogatja a tranzakciókezelést a Spring?

...

8. ASP.NET Core

Mi az ASP.NET Core?

...

Mit jelent, hogy egy alkalmazás monolitikus?

...

Mi a clean architecture?

...

Sorolj fel min. 3 általános ASP.NET Core által nyújtott infrastruktúra funkciót!

...

Hogyan indul el egy ASP.NET Core projekt?

...

Milyen lépései vannak, hogy egy Web API-n kiajánljunk egy EF Core által nyújtott adatmodellt (lekérdezésre, módosításra)?

...

9. Razor

Milyen módokon szeparálhatjuk a kliens–szerver alkalmazásrétegeket?

...

Mi a szerveroldali renderelés?

...

Milyen előnyei/hátrányai vannak a kliensoldalival szemben?

...

Mi a Razor?

...

Hogyan készül el egy HTML-oldal Razor segítségével és MVC vagy Razor Pages használatával?

...

10. Microservices

Milyen előnyökkel és hátrányokkal jár a mikroszolgáltatás architektúra a monolitikussal szemben?

...

Ismertesd az alábbi microservice tervezési minták céljait, azok előnyeit, hátrányait!

Shared database

...

Database per service

...

API composition

...

CQRS

...

11. Microservices

Milyen előnyökkel és hátrányokkal jár a mikroszolgáltatás architektúra a monolitikussal szemben?

Ismertesd az API gateway tervezési mintát!

...

Ismertesd a tanult Service discovery mintákat!

...

12. Cloud

A számítási felhő fő jellemzői.

...

A számítási felhő fizikai, térbeli kiépítése.

...

Főbb publikus felhőszolgáltatók.

...

Felhős szolgáltatásmodellek.

...

Szolgáltatásgaranciák (SLA).

...

Skálázási lehetőségek.

...

Példák elérhető szolgáltatásokra.

...

A felhős modell előnyei, hátrányai.

...

13. Azure

Azure alapszolgáltatások viszonya egymáshoz.

Előfizetés

...

...

Fiók (account)

...

Erőforráscsoport

...

Erőforrás

...

Erőforrások beállítható alapjellemzői.

...

Régió kiválasztásának szempontjai.

...

Azure SQL és Azure App Service szolgáltatások...

...bemutatása.

...

...felépítése (logikai) erőforrások szintjén.

...

...árazási tényezői.

...