**Habár a diasoron én nem láttam magyarázatot a <code>@media only screen</code> query és a <code>min-width</code> használatára, [[Kliensalkalmazások kvíz#Mire való egy @media screen and (min-width: 1100px) CSS-query?|a vizsgán kérdezik]]. De legalább az egyik laboron [https://bmeviaubb03.github.io/laborok/laborok/web/02-css/#reszponziv-elrendezes szó esik róla].
**Habár a diasoron én nem láttam magyarázatot a <code>@media only screen</code> query és a <code>min-width</code> használatára, [[Kliensalkalmazások kvíz#Mire való egy @media screen and (min-width: 1100px) CSS-query?|a vizsgán kérdezik]]. De legalább az egyik laboron [https://bmeviaubb03.github.io/laborok/laborok/web/02-css/#reszponziv-elrendezes szó esik róla].
**Megjegyzés a 44. diához: habár a diasoron én nem láttam magyarázatot a <code>confirm()</code> függvény használatára, [[Kliensalkalmazások kvíz#A confirm() JS-függvény aszinkron.|a vizsgán kérdezik]]. De legalább az egyik laboron [https://bmeviaubb03.github.io/laborok/laborok/web/03-js/#:~:text=%C3%89rdekess%C3%A9g%20a%20confirm()%20f%C3%BCggv%C3%A9ny,%20amely%20b%C3%B6ng%C3%A9sz%C5%91ben%20nat%C3%ADvan%20implement%C3%A1lt: szó esik róla] – érdekességként.
** Megjegyzés a 44. diához: habár a diasoron én nem láttam magyarázatot a <code>confirm()</code> függvény használatára, [[Kliensalkalmazások kvíz#A confirm() JS-függvény aszinkron.|a vizsgán kérdezik]]. De legalább az egyik laboron [https://bmeviaubb03.github.io/laborok/laborok/web/03-js/#:~:text=%C3%89rdekess%C3%A9g%20a%20confirm()%20f%C3%BCggv%C3%A9ny,%20amely%20b%C3%B6ng%C3%A9sz%C5%91ben%20nat%C3%ADvan%20implement%C3%A1lt: szó esik róla] – érdekességként.
**Megjegyzések a 103. diához:
**Megjegyzések a 103. diához:
***Arrow functionöket <code>const</code>-tal érdemes definiálni, mivel általában nem változik a tartalmuk.
***Arrow functionöket <code>const</code>-tal érdemes definiálni, mivel általában nem változik a tartalmuk.
***Az ''Objektum nem adható vissza simán'' pontban szándékosan hibás változódeklarációk szerepelnek.
*** Az ''Objektum nem adható vissza simán'' pontban szándékosan hibás változódeklarációk szerepelnek.
**Az 52. dián az utolsó szöveges bekezdés pontosabban: ''míg a JavaScript tetszőleges típuson, a TypeScript csak <code>number</code>-ön tud <code>toString</code>-et hívni''.
**Az 52. dián az utolsó szöveges bekezdés pontosabban: ''míg a JavaScript tetszőleges típuson, a TypeScript csak <code>number</code>-ön tud <code>toString</code>-et hívni''.
**Habár a diasoron én nem láttam példát az <code>ImageView</code> használatára, [[Kliensalkalmazások#:~:text=Vázolja fel a képen látható nézet kódját a View framework segítségével!|a vizsgán kérdezik]]. De legalább az egyik laboron [https://bmeviaubb03.github.io/laborok/laborok/android/ui-basics/#:~:text=A%20m%C3%A1sik%20%C3%BAjdons%C3%A1g%20itt%20az%20ImageView%20haszn%C3%A1lata. szó esik róla].
**Megjegyzés a 14. diához: a Nearby Messages [https://developers.google.com/nearby/#:~:text=Nearby%20Messages%20is%20deprecated%20and%20will%20stop%20working%20as%20of%20December%202023. 2023], a Nearby Notifications pedig már [https://developers.google.com/nearby/notifications/overview#:~:text=Android%20users%20will%20stop%20receiving%20Nearby%20Notifications%20on%20December%206th,%202018. 2018 decemberében] meg lett szüntetve.
**Megjegyzés a 14. diához: a Nearby Messagest [https://developers.google.com/nearby/#:~:text=Nearby%20Messages%20is%20deprecated%20and%20will%20stop%20working%20as%20of%20December%202023. 2023], a Nearby Notifications-t pedig már [https://developers.google.com/nearby/notifications/overview#:~:text=Android%20users%20will%20stop%20receiving%20Nearby%20Notifications%20on%20December%206th,%202018. 2018 decemberében] megszüntették.
*15. hét: ''szünet''
*15. hét: ''szünet''
105. sor:
103. sor:
===Web===
===Web===
==== 2023. tavasz ====
==== 2023. tavasz====
*Mintavizsga
*Mintavizsga
**''Mi az a TypeScript-dekorátor? Milyen szintaktikával használjuk?'' (kifejtős)
**''Mi az a TypeScript-dekorátor? Milyen szintaktikával használjuk?'' (kifejtős)
***kb. ugyanaz, mint Pythonban
*** kb. ugyanaz, mint Pythonban
***módosítani lehet vele egy osztályt vagy annak tagjainak működését
***módosítani lehet vele egy osztályt vagy annak tagjainak működését
***pl.:<syntaxhighlight lang="ts" line="1">
***pl.:<syntaxhighlight lang="ts" line="1">
function logged(originalMethod: any, context: ClassMethodDecoratorContext) {
**''Mire való a <code>[https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementById getElementById]</code> függvény? Hogyan lehet elérni?'' (kifejtős)
** ''Mik az overload szignatúrák? Hogyan kell őket használni?''
***egy függvénynek többféle számú és típusú bemeneti változóját lehet velük definiálni
***pl. az alábbi kód első két sorában:<syntaxhighlight lang="ts" line="1">
function makeDate(epoch: number): Date;
function makeDate(year: number, month: number, day: number): Date;
function makeDate(epochOrYear: number, month?: number, day?: number): Date {
if (month !== undefined && day !== undefined) {
return new Date(epochOrYear, month-1, day);
} else {
return new Date(epochOrYear);
}
}
const dateFromEpoch = makeDate(1719082884000);
const dateFromDate = makeDate(2024, 6, 22);
</syntaxhighlight>a 3. sorban található az implementációs szignatúra
****mindig csak egy lehet belőle
****nem lehet közvetlenül meghívni
**''Mire való a <code>[https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementById getElementById]</code> függvény? Hogyan lehet elérni?''
***egy adott ID-jű elem DOM-ban való megtalálására
***egy adott ID-jű elem DOM-ban való megtalálására
****így könnyen lehet a JS-kódból módosítani a DOM-ot
****így könnyen lehet a JS-kódból módosítani a DOM-ot
*****POST esetén: a fenti, <code>?</code> utáni rész kerül a bodyba
***a JS-kódban a <code>document.getElementByName()</code> használatakor erre lehet hivatkozni
****ezzel könnyen manipulálható a DOM
**''Mire való egy <code>.d.ts</code> kiterjesztésű fájl?''
***declaration file
***declaration file
***kizárólag a hozzá tartozó JavaScript-fájl típusinformációit tartalmazza
***kizárólag a hozzá tartozó JavaScript-fájl típusinformációit tartalmazza
***gyakorlatilag ugyanaz, mint Pythonban a [https://typing.readthedocs.io/en/latest/source/stubs.html type stub], de a TypeScript fordításidőben jelzi a típusokkal kapcsolatos problémákat (Pythonban ezeket csak az IDE mutatja)
***gyakorlatilag ugyanaz, mint Pythonban a [https://typing.readthedocs.io/en/latest/source/stubs.html type stub] – bár a TypeScript fordításidőben jelzi a típusokkal kapcsolatos problémákat (Pythonban ezeket csak az IDE mutatja)
**''Mire szolgál az Angular <code>[https://angular.dev/api/common/NgIf?tab=description ngIf]</code> direktívája?'' (kifejtős)
** ''Milyen előnyei vannak a dependency injection használatának?''
***separation of concerns
****az injektor a felelős a dependency létrehozásáért, életciklusáért
*****teljesen független a dependency életciklusa a komponensétől
******újrafelhasználható
*****csak az injektornak kell ismernie a függőségi gráfot
****erősebb dekompozíció
*****jobb tesztelhetőség
*****a komponens kódja így rövidebb lesz
**''Mire szolgál az Angular <code>[https://angular.dev/api/common/NgIf?tab=description ngIf]</code> direktívája?''
***elemek feltételes megjelenítésére
***elemek feltételes megjelenítésére
*** pl.:<syntaxhighlight lang="ng2" line="1">
***pl.:<syntaxhighlight lang="ng2" line="1">
<div *ngIf="train">
<div *ngIf="train">
<p>
<p>
180. sor:
219. sor:
</p>
</p>
</div>
</div>
</syntaxhighlight>
</syntaxhighlight>
***az <code>*ngIf</code> attribútumban található kifejezést értékeli ki
***az <code>*ngIf</code> attribútumban található kifejezést értékeli ki
****itt a komponens <code>.ts</code> fájljában található változókra (is) hivatkozhatunk, melyekre adatkötést hoz létre
**** itt a komponens <code>.ts</code> fájljában található változókra (is) hivatkozhatunk, melyekre adatkötést hoz létre
****ha az értéke <code>true</code>, megjeleníti az elemet
****ha az értéke <code>true</code>, megjeleníti az elemet
****ha <code>false</code>, törli a teljes elemet
****ha <code>false</code>, törli a teljes elemet
***lehet <code>else</code> ága is
***lehet <code>else</code> ága is
****ha sok if-else ág van, érdemes az <code>[https://angular.dev/api/common/NgSwitch?tab=usage-notes ngSwitch]</code>-et használni helyette
**** ha sok if-else ág van, érdemes az <code>[https://angular.dev/api/common/NgSwitch?tab=usage-notes ngSwitch]</code>-et használni helyette
===Android===
===Android ===
==== 2024. tavasz ====
====2024. tavasz====
*A diasorokon szereplő kifejtős kérdések
*A diasorokon szereplő kifejtős kérdések
**9. hét
**9. hét
***Milyen lehetőségeink vannak a fejlesztés közbeni debugolásra?
***Milyen lehetőségeink vannak a fejlesztés közbeni debugolásra?
***Miket kell tartalmaznia a manifestnek?
***Miket kell tartalmaznia a manifestnek?
*** Mit értünk erőforrás-minősítő alatt?
***Mit értünk erőforrás-minősítő alatt?
*** Magyarázza el a fordítás mechanizmusát!
***Magyarázza el a fordítás mechanizmusát!
*** Mit jelent az obfuszkálás?
*** Mit jelent az obfuszkálás?
***Az Activity callback életciklus-függvények felüldefiniálásakor meg kell-e hívni kötelezően az ősosztály implementációját? Miért?
***Az Activity életciklus callback függvények felüldefiniálásakor meg kell-e hívni kötelezően az ősosztály implementációját? Miért?
***Ha <code>A</code> <code>Activity</code>-ről átváltunk a <code>B</code> <code>Activity</code>-re, milyen sorrendben hívódnak meg az életciklusfüggvények?
**10. hét
**10. hét
***Magyarázza el az <code>Activity</code> back stack működési elvét!
***Magyarázza el az <code>Activity</code> back stack működési elvét!
***Hogyan kell egy <code>Activity</code>-t indítani, ha vissza akarunk kapni adatot tőle?
***Hogyan kell egy <code>Activity</code>-t indítani, ha vissza akarunk kapni adatot tőle?
***Hogyan működik az implicit <code>Intent</code>?
***Hogyan működik az implicit <code>Intent</code>?
*** Mit értünk ''sűrűségfüggetlen pixel'' alatt?
***Mit értünk ''sűrűségfüggetlen pixel'' alatt?
***Egy 320 dpi-s képernyőn <code>1.dp</code> hány darab pixelnek felel meg?
***Egy 320 dpi-s képernyőn <code>1.dp</code> hány darab pixelnek felel meg?
***Sorolja fel a legfontosabb androidos layoutokat!
***Sorolja fel a legfontosabb androidos layoutokat!
***Hogyan támogatja az Android a lokalizációt?
***Hogyan támogatja az Android a lokalizációt?
**11. hét
**11. hét
***Mi a <code>LayoutInflater</code> feladata?
*** Mi a <code>LayoutInflater</code> feladata?
***Hogyan lehet elkészíteni és kezelni egy menüt?
***Hogyan lehet elkészíteni és kezelni egy menüt?
***Hogyan adható meg, hogy egy stílus az egész alkalmazásra érvényes legyen?
**12. hét
**12. hét
***Mire használhatók a <code>Fragment</code>-ek?
***Mire használhatók a <code>Fragment</code>-ek?
221. sor:
258. sor:
***Hogyan támogatja az Android az adatok adatbázisban tárolását?
***Hogyan támogatja az Android az adatok adatbázisban tárolását?
***Sorolja fel az ORM alapelveit!
***Sorolja fel az ORM alapelveit!
****
{| class="wikitable"
|+
!DB
!code
|-
|table
|class
|-
|column
|field
|-
|row
|object
|}
****
***Milyen lehetőségek vannak a fájlrendszerben való adattárolásra?
***Milyen lehetőségek vannak a fájlrendszerben való adattárolásra?
***Mire jó egy content provider?
***Mire jó egy <code>ContentProvider</code>?
***Milyen formában adja vissza az adatokat egy content provider?
***Milyen formában adja vissza az adatokat egy <code>ContentProvider</code>?
***Milyen módszereket ismer a <code>BroadcastReceiver</code>-ek regisztrálására?
***Milyen módszereket ismer a <code>BroadcastReceiver</code>-ek regisztrálására?
*** Hogyan biztosítható, hogy egy bizonyos típusú broadcastot megkapjon a komponensünk?
***Hogyan biztosítható, hogy egy bizonyos típusú broadcastot megkapjon a komponensünk?
***Milyen típusú <code>Service</code>-eket ismer?
*** Milyen típusú <code>Service</code>-eket ismer?
***Mire kell nagyon figyelni egy <code>Service</code> írásakor?
***Mire kell nagyon figyelni egy <code>Service</code> írásakor?
***Milyen engedélykategóriákat ismer?
***Milyen engedélykategóriákat ismer?
***Milyen fázisai vannak a veszélyes engedélyek kérésének?
***Milyen fázisai vannak a veszélyes engedélyek kérésének?
*Vizsga
*Vizsga
** ''Hogyan tudunk saját stílust definiálni? Hogyan tudjuk ezt a stílust az egész alkalmazásra érvényesíteni?'' (kifejtős)
**''Hogyan tudunk saját stílust definiálni? Hogyan tudjuk ezt a stílust az egész alkalmazásra érvényesíteni?'' (kifejtős)
***View
***<code>View</code>
****Saját stílust a <code>res/values/styles.xml</code> fájlban egy <code><style></code> tag, majd ez alatt további <code><item></code> tagek hozzáadásával lehet definiálni.
****Saját stílust a <code>res/values/styles.xml</code> fájlban egy <code><style></code> tag, majd ez alatt további <code><item></code> tagek hozzáadásával lehet definiálni.
****A manifest fájl <code><application></code> tagjébe kell felvenni egy <code>android:theme</code> attribútumként, pl. így: <code><application android:theme="@style/CustomStyle"></code>.
****A manifest fájl <code><application></code> tagjébe kell felvenni egy <code>android:theme</code> attribútumként, pl. így: <code><application android:theme="@style/custom_style"></code>.
***Jetpack Compose
***Jetpack Compose
****Saját stílust egy <code>@Composable</code> függvény (pl. <code>MyTheme</code>) létrehozásával lehet definiálni, melyben pl. a <code>MaterialTheme</code> függvényt az általunk választott paraméterekkel hívjuk meg.
****Saját stílust egy <code>@Composable</code> függvény (pl. <code>MyTheme</code>) létrehozásával lehet definiálni, melyben pl. a <code>MaterialTheme</code> függvényt az általunk választott paraméterekkel hívjuk meg.
****A <code>MainActivity</code> class <code>setContent</code> függvényében az <code>App</code> függvény hívását a <code>MyTheme</code> függvény hívásába kell ágyazni.
****A <code>MainActivity</code> class <code>setContent</code> függvényében az <code>App()</code> hívását a <code>MyTheme</code> függvény hívásába kell ágyazni.
**''Mi a Fragment?'' (kifejtős)
*** objektumok, melyek...
**** a képernyő egy nagyobb részéért felelősek
*****résznézeteket írnak le
*****Activity-kbe lehet őket ágyazni
******egyszerre többet is
*****növelni lehet velük a modularitást
****és / vagy a háttérben munkát végeznek
**''Mire és hogyan használható egy flow?'' (kifejtős)
**''Mire és hogyan használható egy flow?'' (kifejtős)
***A flow egy Python generatorhoz vagy egy Java Streamhez hasonló változótípus.
***egy Python generatorhoz vagy egy Java Streamhez hasonló változótípus
****Egy Python generatorhoz hasonlóan több visszatérési értéke is lehet.
****egy Python generatorhoz hasonlóan több visszatérési értéke is lehet
****Egy Java Streamhez hasonlóan lehet mapelni vagy filterezni.
****egy Java Streamhez hasonlóan lehet mapelni vagy filterezni
***Segítségével pl. fel lehet iratkozni egy adatfolyamra, hogy onnan folyamatosan kapjunk frissítéseket.
***segítségével pl. fel lehet iratkozni egy adatfolyamra, hogy onnan folyamatosan kapjunk frissítéseket
***A <code>Flow<></code> típusú változó <code>.collect { }</code> függvényét meghívva egy lambda kifejezést lehet végrehajtani a kapott értékkel.
***egy <code>Flow<></code> típusú változó <code>.collect { }</code> függvényét meghívva egy lambda kifejezést lehet végrehajtani a kapott értékekkel
** ''Vázolja fel a képen látható nézet kódját Jetpack Compose segítségével! A kódnak nem kell tökéletesnek és teljesnek lennie, de a lényegi részek szerepeljenek benne.'' (kódolós) A képen egy képernyő, melynek közepén teljes szélességben egy ''Email'' feliratú szövegmező látható, alatta egy ''Password'' feliratúval. Mindkét szövegmezőbe ugyanazon látható szöveg van beírva. Alattuk pedig egy ''Login'' gomb látható, szintén a képernyő teljes szélességében.
**Ha <code>A</code> <code>Activity</code>-ről átváltunk a <code>B</code> <code>Activity</code>-re, milyen sorrendben hívódnak meg az életciklus callback függvények?
**#<code>A.onPause()</code>
**#<code>B.onCreate()</code>
**#<code>B.onStart()</code>
**#<code>B.onResume()</code>
**#*ekkor már <code>B</code>-n van a fókusz
**#<code>A.onStop()</code>
**#*mivel már nem látható
**''Vázolja fel a képen látható nézet kódját '''Jetpack Compose''' segítségével! A kódnak nem kell tökéletesnek és teljesnek lennie, de a lényegi részek szerepeljenek benne.'' A képen egy képernyő, melynek közepén teljes szélességben egy ''Email'' feliratú szövegmező látható, alatta egy ''Password'' feliratúval. Mindkét szövegmezőbe ugyanazon látható szöveg van beírva. Alattuk pedig egy ''Login'' gomb látható, szintén a képernyő teljes szélességében.
**[[Fájl:Kliens_vizsga3_20240617_the-lord-of-the-rings.svg|keret|jobbra|keretnélküli|332x332px]]''Vázolja fel a képen látható nézet kódját a '''<code>View</code>''' framework segítségével! A kódnak nem kell tökéletesnek és teljesnek lennie, de a lényegi részek szerepeljenek benne.''
***<syntaxhighlight lang="xml" line="1">
<RelativeLayout
android:background="#000000">
<ImageView
android:src="@drawable/one_ring_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:padding="16dp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_centerHorizontal="true"
android:background="#FFFFFF">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="J. R. R. Tolkien"
android:textColor="#000000"
android:textSize="24sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="The Lord of the Rings"
android:textColor="#000000"
android:textSize="24sp" />
</LinearLayout>
</RelativeLayout>
</syntaxhighlight>
{{Lábléc_-_Üzemmérnök-informatikus_alapszak}}
{{Lábléc_-_Üzemmérnök-informatikus_alapszak}}
A lap jelenlegi, 2024. június 27., 13:10-kori változata
A tárgy célja, hogy a hallgatók megismerjék a kliensoldali alkalmazások fejlesztésének módszereit és meghatározó technológiáit különös tekintettel a vékony kliensekre (webes és mobil kliensek). A tárgy külön figyelmet fordít arra, hogy a technológiai lehetőségeken túl a hallgatók gyakorlati problémákkal és megoldásokkal is találkozzanak a félév során.
Az összesen 10 laborból legalább 3 illetve 5 teljesítése a két témakörben.
A laborfeladatok felöltésének határideje: 1 hét.
Házi feladat
A tárgyhoz 2 házi feladat (részteljesítmény értékelés) tartozik, mobilos és webes témakörben. Az első feladat bemutatásának határideje a 6. heti, a másodiké a 14. heti laboralkalom. Az első házi feladatra 10, a másodikra 20 pont kapható, amelyeknek egyenként 50%-át el kell érni.
Aláírás
Mindkét házi feladat sikeres bemutatása és legalább 5 és 10 pont elérése.
Legalább 8 (3+5) labor sikeres teljesítése.
Pótlási lehetőség
A póthéten az egyik házi feladat pótolható.
Vizsga
A vizsgaidőszakban írásbeli vizsgát tartunk, amely 60 pontos (36 pont web + 24 pont Android), ebből legalább 30 pontot el kell érni a sikerességhez. Igaz-hamis, feleletválasztós, kifejtős és kódolós kérdések is várhatóak.
Osztályozás
A végső osztályzatot a házi és a vizsga pontszámok összeadásával határozzuk meg.
Laborok: max. 10 pont
Mobil házi feladat: max. 10 pont
Webes házi feladat: max. 20 pont
Vizsga: max. 60 pont
Megjegyzés a 61. diához: habár a diasoron én nem láttam magyarázatot a name attribútum használatára, a vizsgán kérdezik. De legalább az egyik laboron szó esik róla.
Megjegyzés a 69. diához: a .webm-et valójában már mindegyik böngésző támogatja.[1]
Megjegyzés a 97. diához: a display: flow-root-ot valójában már mindegyik böngésző támogatja.[2]
Habár a diasoron én nem láttam magyarázatot a @media only screen query és a min-width használatára, a vizsgán kérdezik. De legalább az egyik laboron szó esik róla.
Megjegyzés a 44. diához: habár a diasoron én nem láttam magyarázatot a confirm() függvény használatára, a vizsgán kérdezik. De legalább az egyik laboron szó esik róla – érdekességként.
Megjegyzések a 103. diához:
Arrow functionöket const-tal érdemes definiálni, mivel általában nem változik a tartalmuk.
Az Objektum nem adható vissza simán pontban szándékosan hibás változódeklarációk szerepelnek.
5. hét (Albert István): TypeScript: transpiler, static typing (any, noImplicitAny), structural typing, deklaráció (var, let, const), null (strictNullChecks), undefined, type narrowing / assertion, non-null assertion, optional chaining, null coalescing, enum (sorszámozás), string / number literal (union), type annotation / alias, optional values, interface; class: static, constructor, readonly, protected, extends, super, private, erősen védett mező; function overload signatures, generic types, típuskényszer, metszettípus, spread, dekorátorok; modulok: export, import, típusdeklarációs fájl (.d.ts)
Az 52. dián az utolsó szöveges bekezdés pontosabban: míg a JavaScript tetszőleges típuson, a TypeScript csak number-ön tud toString-et hívni.
Mi a különbség a block és inline típusú HTML-elemek között?
block
pl.: <div>, <p>
a szülőjének teljes szélességét kitölti
új sorban jelenik meg
inline
pl.: <a>, <span>
nem tölti ki a szülőjének teljes szélességét
ugyanabban a sorban jelenik meg
így lehet formázni linkeket, vagy pl. highlightolni (kihúzni) szöveget
csak a tagen belüli szövegre vonatkozik
Mire valóak az űrlapok?
adatok beküldésére
kérdőív
belépés
meglévő adatok módosítására
az adatmezőket előre ki lehet tölteni
a bevitt adatokat azok rögzítése előtt még validálni lehet
kliens- vagy szerveroldalon
általában GET vagy POST queryt hajt végre az oldal a beküldés után
pl. egy mögöttes adatbázisból lehet lekérni, vagy abban módosítani adatokat
Mire való egy űrlap elemeiben a name attribútum?
egyes beviteli mezők elnevezésére
az űrlap beküldésekor a kliens ezeket használja a szervernek küldött adatok megnevezésére
GET esetén: https://foo.com/?name1=value1&name2=value2
POST esetén: a fenti, ? utáni rész kerül a bodyba
a JS-kódban a document.getElementByName() használatakor erre lehet hivatkozni
ezzel könnyen manipulálható a DOM
Mire való egy .d.ts kiterjesztésű fájl?
declaration file
kizárólag a hozzá tartozó JavaScript-fájl típusinformációit tartalmazza
gyakorlatilag ugyanaz, mint Pythonban a type stub – bár a TypeScript fordításidőben jelzi a típusokkal kapcsolatos problémákat (Pythonban ezeket csak az IDE mutatja)
Milyen előnyei vannak a dependency injection használatának?
separation of concerns
az injektor a felelős a dependency létrehozásáért, életciklusáért
teljesen független a dependency életciklusa a komponensétől
újrafelhasználható
csak az injektornak kell ismernie a függőségi gráfot
<div *ngIf="train"> <p> This is the {{train.departureTime}}{{train.type}} service to {{train.destination}}. </p></div>
az *ngIf attribútumban található kifejezést értékeli ki
itt a komponens .ts fájljában található változókra (is) hivatkozhatunk, melyekre adatkötést hoz létre
ha az értéke true, megjeleníti az elemet
ha false, törli a teljes elemet
lehet else ága is
ha sok if-else ág van, érdemes az ngSwitch-et használni helyette
Android
2024. tavasz
A diasorokon szereplő kifejtős kérdések
9. hét
Milyen lehetőségeink vannak a fejlesztés közbeni debugolásra?
Miket kell tartalmaznia a manifestnek?
Mit értünk erőforrás-minősítő alatt?
Magyarázza el a fordítás mechanizmusát!
Mit jelent az obfuszkálás?
Az Activity életciklus callback függvények felüldefiniálásakor meg kell-e hívni kötelezően az ősosztály implementációját? Miért?
10. hét
Magyarázza el az Activity back stack működési elvét!
Hogyan kell egy Activity-t indítani, ha vissza akarunk kapni adatot tőle?
Hogyan működik az implicit Intent?
Mit értünk sűrűségfüggetlen pixel alatt?
Egy 320 dpi-s képernyőn 1.dp hány darab pixelnek felel meg?
Sorolja fel a legfontosabb androidos layoutokat!
Hogyan támogatja az Android a lokalizációt?
11. hét
Mi a LayoutInflater feladata?
Hogyan lehet elkészíteni és kezelni egy menüt?
12. hét
Mire használhatók a Fragment-ek?
Hogyan csatolhatók a Fragment-ek?
Hogyan kommunikálhatnak a Fragment-ek egymással?
Mire jó a RecyclerView? Mik az előnyei?
Milyen adattárolási lehetőségeket ismer?
Mire használható a SharedPreferences?
Hogyan támogatja az Android az adatok adatbázisban tárolását?
Sorolja fel az ORM alapelveit!
DB
code
table
class
column
field
row
object
Milyen lehetőségek vannak a fájlrendszerben való adattárolásra?
Mire jó egy ContentProvider?
Milyen formában adja vissza az adatokat egy ContentProvider?
13. hét
Mik a Jetpack Compose használatának előnyei?
Milyen Jetpack Compose layoutokat ismer? Jellemezze őket!
Mik a Jetpack Compose alapelvei?
Miért hatékony módszer a recomposition?
Vázolja fel, milyen Jetpack Compose-architektúrákat ismer!
Mire használható a lazy loading?
Mik azok a coroutine-ok?
14. hét
Milyen rövidtávú kommunikációs technológiákat ismer?
Milyen hosszútávú kommunikációs technológiákat ismer?
Mi a különbség az UDP és a TCP/IP között?
Hogyan kell végezni a hálózati kommunikációt?
Mire szolgál a Retrofit library?
Milyen módszereket ismer a BroadcastReceiver-ek regisztrálására?
Hogyan biztosítható, hogy egy bizonyos típusú broadcastot megkapjon a komponensünk?
Milyen típusú Service-eket ismer?
Mire kell nagyon figyelni egy Service írásakor?
Milyen engedélykategóriákat ismer?
Milyen fázisai vannak a veszélyes engedélyek kérésének?
Vizsga
Hogyan tudunk saját stílust definiálni? Hogyan tudjuk ezt a stílust az egész alkalmazásra érvényesíteni? (kifejtős)
View
Saját stílust a res/values/styles.xml fájlban egy <style> tag, majd ez alatt további <item> tagek hozzáadásával lehet definiálni.
A manifest fájl <application> tagjébe kell felvenni egy android:theme attribútumként, pl. így: <application android:theme="@style/custom_style">.
Jetpack Compose
Saját stílust egy @Composable függvény (pl. MyTheme) létrehozásával lehet definiálni, melyben pl. a MaterialTheme függvényt az általunk választott paraméterekkel hívjuk meg.
A MainActivity class setContent függvényében az App() hívását a MyTheme függvény hívásába kell ágyazni.
Mi a Fragment? (kifejtős)
objektumok, melyek...
a képernyő egy nagyobb részéért felelősek
résznézeteket írnak le
Activity-kbe lehet őket ágyazni
egyszerre többet is
növelni lehet velük a modularitást
és / vagy a háttérben munkát végeznek
Mire és hogyan használható egy flow? (kifejtős)
egy Python generatorhoz vagy egy Java Streamhez hasonló változótípus
egy Python generatorhoz hasonlóan több visszatérési értéke is lehet
egy Java Streamhez hasonlóan lehet mapelni vagy filterezni
segítségével pl. fel lehet iratkozni egy adatfolyamra, hogy onnan folyamatosan kapjunk frissítéseket
egy Flow<> típusú változó .collect { } függvényét meghívva egy lambda kifejezést lehet végrehajtani a kapott értékekkel
Ha AActivity-ről átváltunk a BActivity-re, milyen sorrendben hívódnak meg az életciklus callback függvények?
A.onPause()
B.onCreate()
B.onStart()
B.onResume()
ekkor már B-n van a fókusz
A.onStop()
mivel már nem látható
Vázolja fel a képen látható nézet kódját Jetpack Compose segítségével! A kódnak nem kell tökéletesnek és teljesnek lennie, de a lényegi részek szerepeljenek benne. A képen egy képernyő, melynek közepén teljes szélességben egy Email feliratú szövegmező látható, alatta egy Password feliratúval. Mindkét szövegmezőbe ugyanazon látható szöveg van beírva. Alattuk pedig egy Login gomb látható, szintén a képernyő teljes szélességében.
Vázolja fel a képen látható nézet kódját a View framework segítségével! A kódnak nem kell tökéletesnek és teljesnek lennie, de a lényegi részek szerepeljenek benne.
<RelativeLayoutandroid:background="#000000"><ImageViewandroid:src="@drawable/one_ring_image"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:padding="16dp"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:layout_centerHorizontal="true"android:background="#FFFFFF"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="J. R. R. Tolkien"android:textColor="#000000"android:textSize="24sp"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="The Lord of the Rings"android:textColor="#000000"android:textSize="24sp"/></LinearLayout></RelativeLayout>