<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=Java-technol%C3%B3gia_-_Elm%C3%A9leti_k%C3%A9rd%C3%A9sek</id>
	<title>Java-technológia - Elméleti kérdések - Laptörténet</title>
	<link rel="self" type="application/atom+xml" href="https://vik.wiki/index.php?action=history&amp;feed=atom&amp;title=Java-technol%C3%B3gia_-_Elm%C3%A9leti_k%C3%A9rd%C3%A9sek"/>
	<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Java-technol%C3%B3gia_-_Elm%C3%A9leti_k%C3%A9rd%C3%A9sek&amp;action=history"/>
	<updated>2026-05-15T21:50:30Z</updated>
	<subtitle>Az oldal laptörténete a wikiben</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://vik.wiki/index.php?title=Java-technol%C3%B3gia_-_Elm%C3%A9leti_k%C3%A9rd%C3%A9sek&amp;diff=157225&amp;oldid=prev</id>
		<title>David14: David14 átnevezte a(z) Java-technológia elméleti kérdések lapot a következő névre: Java-technológia - Elméleti kérdések</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Java-technol%C3%B3gia_-_Elm%C3%A9leti_k%C3%A9rd%C3%A9sek&amp;diff=157225&amp;oldid=prev"/>
		<updated>2013-02-06T10:03:41Z</updated>

		<summary type="html">&lt;p&gt;David14 átnevezte a(z) &lt;a href=&quot;/index.php?title=Java-technol%C3%B3gia_elm%C3%A9leti_k%C3%A9rd%C3%A9sek&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Java-technológia elméleti kérdések (a lap nem létezik)&quot;&gt;Java-technológia elméleti kérdések&lt;/a&gt; lapot a következő névre: &lt;a href=&quot;/Java-technol%C3%B3gia_-_Elm%C3%A9leti_k%C3%A9rd%C3%A9sek&quot; title=&quot;Java-technológia - Elméleti kérdések&quot;&gt;Java-technológia - Elméleti kérdések&lt;/a&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;hu&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Régebbi változat&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;A lap 2013. február 6., 12:03-kori változata&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;hu&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Nincs különbség)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key my_wiki:diff:1.41:old-145763:rev-157225 --&gt;
&lt;/table&gt;</summary>
		<author><name>David14</name></author>
	</entry>
	<entry>
		<id>https://vik.wiki/index.php?title=Java-technol%C3%B3gia_-_Elm%C3%A9leti_k%C3%A9rd%C3%A9sek&amp;diff=145763&amp;oldid=prev</id>
		<title>Unknown user: Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|JavaTechElmelet}}   Minden feladat 30 pontot ér. A feladatok a tárgy weblapjáról származnak, a rövid jegyzetek pedig a kiadott diák …”</title>
		<link rel="alternate" type="text/html" href="https://vik.wiki/index.php?title=Java-technol%C3%B3gia_-_Elm%C3%A9leti_k%C3%A9rd%C3%A9sek&amp;diff=145763&amp;oldid=prev"/>
		<updated>2012-10-22T11:41:16Z</updated>

		<summary type="html">&lt;p&gt;Új oldal, tartalma: „{{GlobalTemplate|Valaszthato|JavaTechElmelet}}   Minden feladat 30 pontot ér. A feladatok a tárgy weblapjáról származnak, a rövid jegyzetek pedig a kiadott diák …”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Új lap&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{GlobalTemplate|Valaszthato|JavaTechElmelet}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Minden feladat 30 pontot ér. A feladatok a tárgy weblapjáról származnak, a rövid jegyzetek pedig a kiadott diák alapján készültek, készülnek. A címsorban a kérdések vizsgákon való előfordulásának dátuma szerepel (ééhhnn).&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Collections Framework, (060614)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Mutasd be a java Collections Framework-öt! Ismertesd az adatmodelleket (1.4), nevezz meg néhány implementációt, és a köztük levő különbséget. Miben változott az 1.5 java CF-je az 1.4-hez képest? Mutasd be az elvet, ahogy egy gyűjtemény elemeihez hozzáférünk. Mik az elvárások a CF-ben tárolt objektumokkal szemben? Hogyan lehet egy gyűjteményt rendezni?&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
===!! 3 adatmodell (6 pont)===&lt;br /&gt;
===!! implementációk (4 pont)===&lt;br /&gt;
===!! 1.5 újdonság (5 pont)===&lt;br /&gt;
==!!Generikusok==&lt;br /&gt;
List words = new ArrayList();&lt;br /&gt;
helyett:&lt;br /&gt;
List&amp;amp;lt;String&amp;gt; words = new ArrayList&amp;amp;lt;String&amp;gt;();&lt;br /&gt;
==!!Autoboxing-unboxing==&lt;br /&gt;
collection-ök osztályokat tárolnak, primitív típusokat nem, tehát int helyet Integert, de a konverziót (wrapperbe csomagolás, kicsomagolás) a fordító végzi&lt;br /&gt;
&lt;br /&gt;
Map&amp;amp;lt;String, Integer&amp;gt; m =� new TreeMap&amp;amp;lt;String, Integer&amp;gt;();�&lt;br /&gt;
&lt;br /&gt;
for (String word : args) {�&lt;br /&gt;
&lt;br /&gt;
  m.put(word, m.get(word) + 1);�&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==!!Új for ciklus==&lt;br /&gt;
iterátor használata egyszerűbb, de így nem lehet törölni iterátorral, ha az is kell, azt kell használni&lt;br /&gt;
&lt;br /&gt;
for (String word : args) { }&lt;br /&gt;
&lt;br /&gt;
új &amp;quot;typesafe&amp;quot; enumot is kapott az 1.5&lt;br /&gt;
&lt;br /&gt;
-- [[Main.mp9k1]] - 2012.06.11.&lt;br /&gt;
===!! iterator (5 pont)===&lt;br /&gt;
&lt;br /&gt;
A =Collection iterator()= metóduásval kérhetünk egy iterátort, amellyel be tudjuk járni a gyűjteményt. Van =Iterator= és =ListIterator=. &lt;br /&gt;
&lt;br /&gt;
* =Iterator= metódusai: =hasNext=, =next=&lt;br /&gt;
* =Iterator= opcionális metódusai: =remove=&lt;br /&gt;
* =ListIterator= további metódusai: =hasPrevious=, =previous=, =previousIndex=, =nextIndex=&lt;br /&gt;
* =ListIterator= opcionális metódusai: =add=, =set=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===!! equals, hashcode (5 pont)===&lt;br /&gt;
===!! Collections.compare (5 pont)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Kivételkezelés (060522, 051219, 050111, 040112, 021218)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Írd le a Java kivételkezelés felépítését és működését. Szempontok: a kivételkezelés elve, kivételosztályok, azok hierarchiája és szerepe, ellenőrzött és nem ellenőrzött kivételek közötti különbségek, a kivételkezelés kulcsszavai és jelentésük, nyelvi konstrukciók és működésük, kivételek keletkezési módjai.&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
===!! elv (5 pont)===&lt;br /&gt;
&lt;br /&gt;
Exception objektumokkal történik a hibák kezelése. Ezek a hiba helyén keletkeznek, és felfele terjednek az utasításblokkok és a híváslánc mentén, amíg valaki le nem kezeli őket, vagy ha nem kezeljük sehol, akkor megszakad a program futása.&lt;br /&gt;
&lt;br /&gt;
Öröklődésnél a leszármazott osztály túlterhelt metódusa nem dobhat újabb kivételt, mint amik az ősben vannak.&lt;br /&gt;
&lt;br /&gt;
===!! osztályok, hierarchiájuk és szerepük (5 pont)===&lt;br /&gt;
&lt;br /&gt;
A kivtelek a =Throwable= osztályból származnak. =Error=, =Exception=, =RunTimeException=, +UML ábra.&lt;br /&gt;
&lt;br /&gt;
=Error=: A JVM dobja, illetve API-ban használják.&lt;br /&gt;
&lt;br /&gt;
Kivétel tovább dobható, illetve becsomagolható. &lt;br /&gt;
&lt;br /&gt;
=printStackTrace()= metódus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===!! ellenőrzött és nem ellenőrzött különbségek (5 pont)===&lt;br /&gt;
&lt;br /&gt;
Ellenőrzött: az =Exception= osztályból származnak, kötelező kezelni, vagy =throws= kulcsszóval jelezni, hogy a hívó kezelje le őket.&lt;br /&gt;
&lt;br /&gt;
Nem ellenőrzött: nullával való osztás és egyéb (=null= referencia, stb.) mindenhol előforduló hibákat jelezhet, de kényelmetlen és átláthatatlan lenne őket mindenhol jelezni, kezelni.&lt;br /&gt;
&lt;br /&gt;
===!! kulcsszavak és jelentésük (5 pont)===&lt;br /&gt;
&lt;br /&gt;
=throw=, =catch= (=finally=, =try=, =try-catch= blokk)&lt;br /&gt;
&lt;br /&gt;
===!! konstrukciók és működésük (5 pont)===&lt;br /&gt;
&lt;br /&gt;
=try-catch-finally= + folyamatábra&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===!! keletkezési módok (5 pont)===&lt;br /&gt;
&lt;br /&gt;
=throw= paranccsal, kifejezéskiértékelés során (nullával való osztás), metódushívás során (&amp;quot;kivétellel tér vissza&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Generics, generikus típusok (060201)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ismertesd a Java 5.0-ban bevezetett generics (generikus típusok) működését. Mire szolgál, mik az előnyei a korábbi típuskezeléssel szemben. Generikus típusok definiálása, használata (ezekre mutass példát). Írd le, hogyan lehet a típusparaméterek körét szűkíteni. Mire szolgál a határozatlan típusparaméter? Hogyan valósították meg a generikus típusokat az 5.0-ás fordítóban és virtuális gépben? Ismertesd a generikus metódusok specialitásait.&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
===!! általános ismertetés (6 pont)===&lt;br /&gt;
===!! fordítási időben való típusellenőrzés (2 pont)===&lt;br /&gt;
===!! castolások elhagyása (2 pont)===&lt;br /&gt;
===!! generikus típusok definiálására és használatára példa (6 pont)===&lt;br /&gt;
===!! generikus típusok körének korlátozása (5 pont)===&lt;br /&gt;
===!! határozatlan típusparaméter (2 pont)===&lt;br /&gt;
===!! típustörlés, nyers típusok (3 pont)===&lt;br /&gt;
===!! generikus metódusok: leszármaztatás (4 pont)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Collections Framework (060120)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Mutasd be a Java Collections Framework alapjait! Mutasd be a három fő adatmodellt, és ezek jellemzőit. Említs néhány implementációt mindhárom típusra! Hogyan lehet egy Collection-t rendezni? Említs meg néhány egyéb, Collection-ökön elérhető szolgáltatást! Mire kell ügyelni többszálú alkalmazás esetén?&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
===!! alapok (3 pont)===&lt;br /&gt;
&lt;br /&gt;
=java.util= alatti osztályok és interfészek, amelyek a dinamikus adatszerkezeteket és az azokat kiszolgáló interfészeket valósítják meg.&lt;br /&gt;
&lt;br /&gt;
UML ábra.&lt;br /&gt;
&lt;br /&gt;
* Collection&lt;br /&gt;
** Set&lt;br /&gt;
*** SortedSet&lt;br /&gt;
** List&lt;br /&gt;
* Map&lt;br /&gt;
** SortedMap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===!! list + impl (5 pont)===&lt;br /&gt;
&lt;br /&gt;
Lista: duplikátumok lehetnek, sorrend opcionálisan meghatározott&lt;br /&gt;
&lt;br /&gt;
Implementációk: ArrayList (tömb), LinkedList (láncolt lista)&lt;br /&gt;
&lt;br /&gt;
===!! set +impl (5 pont)===&lt;br /&gt;
&lt;br /&gt;
Set: Matematikai halmaznak megfelelő, nincsenek duplikátumok, sorrend opcionális.&lt;br /&gt;
&lt;br /&gt;
Implementációk: HashSet (hash tábla), TreeSet (kiegyenlített fa)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===!! map +impl (5 pont)===&lt;br /&gt;
&lt;br /&gt;
Map (leképzés): kulcsok és értékek egyértelmű hozzárendelését határozza meg. Nem kölcsönösen egyértelmű.&lt;br /&gt;
&lt;br /&gt;
Implementációk: HashMap (hash tábla), TreeMap (kiegyenlített fa) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===!! sort, Comparable, Comparator (5 pont)===&lt;br /&gt;
&lt;br /&gt;
Természetes rendezés:&lt;br /&gt;
* A =Comparable= interfészt megvalósítva egy objektum saját magát tudja összehasonlítani egy másik objektummal.&lt;br /&gt;
* =compareTo(Object o)= metódust kell megvalósítani.&lt;br /&gt;
&lt;br /&gt;
Összehasonlító osztályos rendezés: &lt;br /&gt;
* egy =Comparator= -ból származó objektum segítéségével történik a rendezés&lt;br /&gt;
* =compare(Object o1, Object o2)= metódus&lt;br /&gt;
	&lt;br /&gt;
Negatív, pozitív, nulla visszatérési értékek.&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
===!! Collections szolgáltatások (4 pont)===&lt;br /&gt;
&lt;br /&gt;
Interfész, általános műveletek:&lt;br /&gt;
* =contains=&lt;br /&gt;
* =containsAll=&lt;br /&gt;
* =isEmpty=&lt;br /&gt;
* =iterator=&lt;br /&gt;
* =size=&lt;br /&gt;
* =toArray=&lt;br /&gt;
&lt;br /&gt;
Opctionális műveletek (ha nincs megvalósítva, akkor kivételt dob):&lt;br /&gt;
* =add= (opcionális)&lt;br /&gt;
* =addAll(másikCollection)= (opcionális)&lt;br /&gt;
* =clear= (opcionális)&lt;br /&gt;
* =remove= (opcionális)&lt;br /&gt;
* =removeAll= (opcionális)&lt;br /&gt;
* =retainAll= (opcionális)&lt;br /&gt;
&lt;br /&gt;
Lehetnek fix tartalmú Collection-ök is. A Collection-ök elemei csak objektumok lehetnek (wrapper class primitívek esetén).&lt;br /&gt;
	&lt;br /&gt;
Vannak kész algoritmusok: rendezésre, bináris keresésre, listák megfordítására, véletlen permutációk előállítására, stb.&lt;br /&gt;
&lt;br /&gt;
Előállíthatóak szinkronizált nézetek, valamint módosíthatatlan nézetek is (a =Collections= statikus metódusaival).&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
===!! nem thread safe (3 pont)===&lt;br /&gt;
&lt;br /&gt;
A CF megvalósításai nem szinkronizáltak. &lt;br /&gt;
&lt;br /&gt;
Az =Iterator= és a =ListIterator= ún. &amp;#039;&amp;#039;&amp;#039;fail-fast iterátor&amp;#039;&amp;#039;&amp;#039;, ha használat közben más módosít, akkor dob egy kivételt, de ez nem garantálható.&lt;br /&gt;
&lt;br /&gt;
Vannak =synchronized= kezdetű metódusok az adatszerkezetek létrehozására, de az iterátorok nem tartoznak bele, azokra külön kell figyelni.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Java I/O (060104, 031222)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Mutasd be a java I/O-t! Alapelv, legfontosabb ősosztályok. Várható kivételek, stream végének kezelése. Szűrő fogalma. Karakteres I/O, objektumos I/O. Szerializáció fogalma. További lehetőségek.&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
===!! elv (4 pont)===&lt;br /&gt;
&lt;br /&gt;
Stream, adatfolyam, szekvenciális hozzáférésű.&lt;br /&gt;
Megnyitás, írás/olvasás, lezárás. Karakteres- (=*Reader=, =*Writer=), és Bytestream (=*Stream=).&lt;br /&gt;
&lt;br /&gt;
Olvashatunk/írhatunk bárhonnan/bárhova: fájl, pipe, memória, stb.&lt;br /&gt;
&lt;br /&gt;
Konverzió: karakterkódolást is be lehet állítani.&lt;br /&gt;
&lt;br /&gt;
===!! ősosztályok (3 pont)===&lt;br /&gt;
&lt;br /&gt;
=Reader=, =Writer=, =InputStream=, =OutputStream=&lt;br /&gt;
&lt;br /&gt;
===!! kivételek (3 pont)===&lt;br /&gt;
&lt;br /&gt;
Az EOF néhol speciális érték, máshol kivétel (=EOFException=).&lt;br /&gt;
&lt;br /&gt;
=IOException=, =FileNotFoundException=, =SecurityException=&lt;br /&gt;
&lt;br /&gt;
===!! szűrők (3 pont)===&lt;br /&gt;
&lt;br /&gt;
Szűrő lezárása lezárja a stream-et is. &lt;br /&gt;
&lt;br /&gt;
Szűrők: =BufferedReader=, =PrintWriter=, =ObjectInputStream=, =ObjectOutputStream=.&lt;br /&gt;
* =DataInputStream=, =DataOutputStream=: minden típushoz külön =read/write= függvény&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===!! karakteres i/o (4 pont)===&lt;br /&gt;
&lt;br /&gt;
=PrintWriter=, =PrintStream=. Karakterenként ír, a neki megadott objektum =toString= metódusának eredményét írja ki. Sorvége jelet automatikusan cseréli a platform formátumára (csak a =Writer=).&lt;br /&gt;
&lt;br /&gt;
Bufferelt olvasás.&lt;br /&gt;
&lt;br /&gt;
=FileReader=, =FileWriter=&lt;br /&gt;
&lt;br /&gt;
===!! objektumos i/o (5 pont)===&lt;br /&gt;
&lt;br /&gt;
* Objektumok közvetlen írása/olvasása.&lt;br /&gt;
* =ClassNotFoundException=: ha nem ismerjük a fájlban lévő osztályt.&lt;br /&gt;
* Beolvasásnál cast-olni kell a nekünk kellő típusra.&lt;br /&gt;
&lt;br /&gt;
===!! szerializáció (4 pont)===&lt;br /&gt;
&lt;br /&gt;
* Objektum bájtsorozattá alakítása&lt;br /&gt;
* =Serializable= interfész kell hozzá&lt;br /&gt;
* Lehet sajátot is (=writeObject=, =readObject= metódusok felülírása)&lt;br /&gt;
* =transient= mező nem íródik ki (titkosításhoz is jó)&lt;br /&gt;
* argumentum nélküli konstruktor kötelező&lt;br /&gt;
* Verziók! (régi verzió által kiírt objektumot az új is jól olvassa be - az objektum felelőssége, de van amit tud automatikusan kezelni)&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
===!! további lehetőségek (típusos, módosítószók stb.) (4 pont)===&lt;br /&gt;
&lt;br /&gt;
* =SequenceInputStream=: Byte-os csatornák egymás után fűzhetőek &lt;br /&gt;
* =LineNumberStream=: olvasott sorok számát nyilvántartja&lt;br /&gt;
* =PushbackReader=&lt;br /&gt;
* =FilterReader=&lt;br /&gt;
* =RandomAccesFile=&lt;br /&gt;
* =StreamTokenizer=: szövegfeldolgozáshoz  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Java biztonsági architektúra (050622)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Mutasd be a Java biztonsági architektúráját, annak fejlődését. Ismertesd a Java biztonsági architektúra alapelemeit (permission, policy, kulcsok, kulcsmenedzsment, kulcstárolás). Hogyan történik egy digitális aláírás létrehozása és ellenőrzése? A Java fejlesztői környezetben milyen, a biztonsággal kapcsolatos eszközök állnak rendelkezésünkre?&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
===!! Biztonsági modellek (5 pont)===&lt;br /&gt;
===!! Permission osztályok (5 pont)===&lt;br /&gt;
===!! Policy file-ok (5 pont)===&lt;br /&gt;
===!! Kulcsok, kulcsmenedzsment, kulcstárolás (5 pont)===&lt;br /&gt;
===!! Aláírás létrehozása és ellenőrzése (5 pont)===&lt;br /&gt;
===!! policytool, keytool, jarsigner (5 pont)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Szálkezelés (threads) (050607, 030129)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Írd le a Java szálkezelésének elemeit, működését. Mi a szinkronizáció alapja? Hogyan valósítható meg szinkronizáció metódus, illetve blokk szinten? Hogyan valósíthatunk meg szálakat? Szálak vezérlése + elavult módszerek&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
=Thread= osztály és leszármazottai, =Runnable= interfész, =run()= metódus.&lt;br /&gt;
&lt;br /&gt;
===!! monitor (8 pont)===&lt;br /&gt;
&lt;br /&gt;
Minden objektumhoz tartozik egy monitor, ezekkel valósul meg a szinkronizáció. A monitort egyszerre egy szál birtokolhatja - ha többnek is kell, akkor várakoznak, futásuk felfüggesztődik. Ha a birtokló elengedi, akkor a többi verseng érte, az ütemező választ.&lt;br /&gt;
&lt;br /&gt;
===!! synchronized metódusok (3 pont)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
public synchronized void method { ... }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A metódust tartalmazó objektum monitora kell a belépéshez. Rekúrziv híváskor újra beléphet.&lt;br /&gt;
&lt;br /&gt;
Statikus metódus esetén a =new MyClass.getClass()= monitorát kell megszerezni.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===!! synchronized blokkok (3 pont)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
synchronized (monitorobj) { ... }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Belépéskor a szál megszerzi a monitort, kilépéskor elengedi.&lt;br /&gt;
&lt;br /&gt;
Atomi művelethez nem kell szinkronizáció (primitív típusok írása, olvasása, kivéve =long= és =double=).&lt;br /&gt;
&lt;br /&gt;
Atomicitás: a többi szál nem láthat inkonzisztens állapotot, de nem garantál semmit, hogy másik szál mikor látja az új állapotot. Megoldás: =synchornized= mezőhozzáférés mindenhol vagy =volatile= mezők (ez garantálja, hogy az új érték azonnal láthatóvá válik a többi szál számára).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===!! Thread, Runnable (5 pont)===&lt;br /&gt;
&lt;br /&gt;
Kivétel kimegy =stderr= -re ha nem kezeljük le.&lt;br /&gt;
&lt;br /&gt;
===!! notify, notifyAll, wait, join, ... (4 pont)===&lt;br /&gt;
&lt;br /&gt;
Ezek az =Object= osztály szolgáltatásai, kell hozzá az objektum monitora&lt;br /&gt;
&lt;br /&gt;
* =wait(long timeout, long nanos)=: felfüggeszti a hívó szál futását&lt;br /&gt;
* =notify()=: az objektum monitorán wait()-elő szála felébresztése&lt;br /&gt;
&lt;br /&gt;
	Thread szolgáltatásai: &lt;br /&gt;
	&lt;br /&gt;
* =join(millis, nanos)=: A hívó szál várakozik, míg ez a szál be nem fejezi futását, vagy le nem jár az időkorlát (ha van).&lt;br /&gt;
* =sleep(millis, nanos)= felfüggeszti a futást, monitorokat nem enged el.&lt;br /&gt;
* =interrupt()=: alvás megszakítása&lt;br /&gt;
* =setDaemon(boolean)=: démon szál legyen-e&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
===!! start, stop, suspend, resume (4 pont)===&lt;br /&gt;
&lt;br /&gt;
=Thread= szolgáltatásai. A =stop()= vesélyes, és a =suspend()=, =resume()= metódusokkal együtt elavult.&lt;br /&gt;
&lt;br /&gt;
=stop()= esetén =ThreadDeath= kivétel bárhol a szálban, nehéz kezelni.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===!! stop, suspend, resume deprecated (3 pont)===&lt;br /&gt;
&lt;br /&gt;
==Java Servlet, JavaServer Pages (050523)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Írd le a Java Servlet és JavaServer Pages technológiák célját, a köztük lévő alapvető különbségeket, egymáshoz való viszonyukat! Rajzon mutasd be a servletek tipikus elhelyezkedését egy szerveren! Mutasd be a servletek életciklusát! Hogyan épül fel egy, a Java Servlet specifikációnak megfelelő web alkalmazás? Hogyan működik, és mi a célja a session kezelésnek? Mi egy tag library, és mi a célja?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===!! Java Servlet, JavaServer Pages célja, különbségeik, viszonyuk (10 pont)===&lt;br /&gt;
===!! servletek életciklusa (5 pont)===&lt;br /&gt;
===!! web alkalmazás felépítése (5 pont)===&lt;br /&gt;
===!! session kezelés (5 pont)===&lt;br /&gt;
===!! tag library (5 pont)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Swing MVC (050126)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Írd le a Swing MVC architektúrán alapuló működési modelljét, és ennek programozási hatásait. Szempontok: koncepció, architektúrális felépítés, szálkezelés (eseménykezelés, renderelés), saját eseménykezelő rutinok írása és ezek hatása a Swing működésére, hosszan tartó műveletek összekapcsolása a grafikus felülettel.&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
===!! koncepció (5 pont)===&lt;br /&gt;
&lt;br /&gt;
Pehelysúlyú komponensek, Java-ban megvalósítva, platformfüggetlen, bővebb, mint az AWT, ami az operendszer komponenseit használja. A megjelenés is egységes, J betűvel kezdődnek a komponensek nevei. Az AWT eseménykezelőjét használja.&lt;br /&gt;
&lt;br /&gt;
===!! MVC architektúra (5 pont)===&lt;br /&gt;
&lt;br /&gt;
Modell-View-Controller, adatmodell, megjelenítés, vezérlés. A Swingben a View és a Controller össze van vonva (Document-View). &lt;br /&gt;
&lt;br /&gt;
LAF (look-and-feel): kinézet, minden komponenshez külön beállítható.&lt;br /&gt;
&lt;br /&gt;
===!! Swing-ben használt módosított MVC architektúra, ennek szinkronizálási követelménye, kölcsönös kizárás megvalósítása a renderelő és az eseménykezelő rutin között (8 pont)===&lt;br /&gt;
&lt;br /&gt;
Ha a képernyőfrissítés közepén megváltozik az adat, akkor inkonzisztens lehet a GUI tartalma. Ezért egy szálon történik a rajzolás és az eseménykezelés, amiből az következik, hogy a hosszú eseménykezelő műveletek blokkolhatják a GUI-t, így nem teljes a felhasználói élmény (mintha lefagyna). A hosszú műveleteket (I/O, hálózatkezelés, komplex számítások, stb.) ezért új szálon kell futtatni, majd a =javax.swing= csomag =SwingUtilities= osztályának =invoke= és =invokeLater= metódusinak átadni egy GUI-t frissítő objektumot, amit majd az eseménykezelő szál végrehajt GUI frissítés előtt.&lt;br /&gt;
&lt;br /&gt;
Az eseménykezelő szálat nevezzük EDT, vagyis AWT EventDispatch Thread-nek.&lt;br /&gt;
&lt;br /&gt;
Ha egy boolean adatot frissítünk, akkor azért lehet a feldolgozást végző szálból is frissíteni, de ettől bonyolultabbat nem ajánlott.&lt;br /&gt;
&lt;br /&gt;
+folyamatábra.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===!! a saját eseménykezelő rutin feltartja az egész Swing működését, ezt kezelni kell (5 pont)===&lt;br /&gt;
===!! hosszan tartó műveleteket külön szálban kell elindítani, és ezeket vissza kell csatolni a grafikus felületbe az invokeAndWait vagy az invokeLater metódusok valamelyikével (5 pont)===&lt;br /&gt;
===!! invokeAndWait és invokeLater közötti különbség ismertetése (2 pont)===&lt;br /&gt;
&lt;br /&gt;
Az =invokeLater= után rögtön visszakapja a futást az őt hívó szál, míg az =invokeAndWait= esetében csak miután frissült a GUI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reflection (040126)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Írd le a Reflection fogalmát, lehetőségeit, illetve az API felépítését (fontosabb osztályok, interfészek, ezek kapcsolata). Írj le egy szituációt, amikor szükség lehet a Reflection használatára.&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
===!! Reflection fogalma (5 pont)===&lt;br /&gt;
&lt;br /&gt;
Hozzáférést biztosít a program metaszintű elemeihez a programból (osztályok, metódusok, mezők, stb.)&lt;br /&gt;
&lt;br /&gt;
===!! Reflection lehetőségei (10 pont)===&lt;br /&gt;
===!! osztályok, interfészek (10 pont)===&lt;br /&gt;
&lt;br /&gt;
=java.lang.reflect= csomag, de a =java.lang.Class= és a =java.lang.Package= osztályok is ide tartoznak.&lt;br /&gt;
&lt;br /&gt;
* =Object=&lt;br /&gt;
** =Array=&lt;br /&gt;
** =Class=&lt;br /&gt;
** =Modifier=&lt;br /&gt;
** =Package=&lt;br /&gt;
	  &lt;br /&gt;
* =AccessibleObject=&lt;br /&gt;
** =Constructor= (implementálja a =Member= interfészt)&lt;br /&gt;
** =Method= (implementálja a =Member= interfészt)&lt;br /&gt;
** =Field= (implementálja a =Member= interfészt)&lt;br /&gt;
&lt;br /&gt;
Kell egy =Class= példány, ami leírja a vizsgálandó osztályt vagy objektumot. Hozzáférés:&lt;br /&gt;
* =class= literás (pl.: =String.class=)&lt;br /&gt;
* =getClass= metódus&lt;br /&gt;
* =Class.forName= metódussal betöltött osztály (minősített névvel)&lt;br /&gt;
	  &lt;br /&gt;
	  &lt;br /&gt;
===!! szituáció (5 pont)===&lt;br /&gt;
&lt;br /&gt;
* Hozzáférés privát tagokhoz valamilyen szerializációhoz hasonló szolgáltatásnál (letiltható)&lt;br /&gt;
* Proxy osztályok (=java.lang.reflect.Proxy=): futásidőben változtathatjuk, hogy milyen interfészt implementálnak. Az interfészekre érkező hívásokat továbbítja egy híváskezelő osztályhoz (invocation handler).&lt;br /&gt;
** Az interfészek sorrendje számít, a =hashCode=, =equals= és =toString= metódusokat is továbbítja, a többi =Object= metódust nem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Logging API (040524)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Írd le a Java Logging API elemeit és működését. Írj le egy alkalmazási példát a Logging API elemei segítségével.&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Java 1.4 óta&amp;lt;br&amp;gt;&lt;br /&gt;
- Logok használata:&amp;lt;br&amp;gt;&lt;br /&gt;
- Hibák, kivételek jelzése a végfelhasználónak vagy a rendszergazdának&lt;br /&gt;
  (konfigurációs hiba, erőforráshiány, biztonsági hiba ...)&amp;lt;br&amp;gt;&lt;br /&gt;
- Tesztelési fázisban a fellépő kivételek részletes leírása (+kontextus). Ezeket a&lt;br /&gt;
  logokat eljuttatni a fejlesztőkhöz.&amp;lt;br&amp;gt;&lt;br /&gt;
- A fejlesztési fázisban hibadetektálásra, végrehajtási történet követésére,&lt;br /&gt;
  események bekövetkeztének ellenőrzésére.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===!! Elemek (10 pont)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===!! Osztályok (8 pont)===&lt;br /&gt;
&lt;br /&gt;
=Logger=, =Handler=, =Filter=, =Formatter=&lt;br /&gt;
&lt;br /&gt;
===!! Működés (8 pont)===&lt;br /&gt;
&lt;br /&gt;
Loggereknek van szülője, neki is továbbítja az üzeneteket. Egy loggerhez több handler is tartozhat. Logolási szintek. Loggerek neve.&lt;br /&gt;
&lt;br /&gt;
Handler: stream, console, file, socket, memory&lt;br /&gt;
&lt;br /&gt;
===!! Alkalmazási példa (4 pont)===&lt;br /&gt;
&lt;br /&gt;
=Logger.getLogger(String name)= metódus, aztán =logger.info=, =logger.entering=, stb. metódusok.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==JNI, Java Native Interface (040608)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Írd le a Java Native Interface (JNI) célját, elemeit, eszközeit, használatának két alapvető módját. Írd le egy natív kódrészlet JNI segítségével történő integrációjának lépéseit.&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
===!! Célja (5 pont)===&lt;br /&gt;
&lt;br /&gt;
Natív, rendszerközeli, platformfüggő dolgokhoz hozzáférni más nyelvekkel készült kódon keresztül, vagy más nyelvekből Java objektumok elérése. Hatékonysági okok, assembly. Java-C kommunikáció mindkét irányban, kivételek dobása-elkapása is működik. &lt;br /&gt;
&lt;br /&gt;
===!! Elemei (JNI API, Invocation API) (5 pont)===&lt;br /&gt;
&lt;br /&gt;
Natív Java metódusok (C-ben megvalósítva mondjuk), illetve az Invocation API segítségével egy Java virtuális gépet indíthatunk C-ből. Leállítani közvetlenül nem lehet, csak megkérni rá (majd leáll, ha az összes nem démon szál leállt).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===!! Eszközei (javah) (5 pont)===&lt;br /&gt;
===!! Használati módok (5 pont)===&lt;br /&gt;
===!! Példa (10 pont)===&lt;br /&gt;
&lt;br /&gt;
A natív metódusokat a =native= kulcsszóval jelezzük, és nem írjuk meg a kódját (mintha absztrakt lenne). Ezután fordítunk, majd a =javah= programmal generálunk belőle egy C-s header fájlt, ami alapján meg tudjuk írni a C kódot. Ha ez megvan, akkor ez lefordítjuk C fordítóval, amiből kaptunk mondjuk egy DLL-t, amit a natív metódus osztályának statikus inicializátorában betölthetünk a =System.loadLibrary= metódussal. Ezután a szokásos módon használható a metódus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Package-ek (041220, 030108)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Írd le a Java csomagok (package-ek) szerepét, tulajdonságait, használatát! (definiálásuk, hivatkozás csomagokra, hozzáférésvezérlés csomagokkal kapcsolatos kérdései, stb.)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===!! szerepük: hierarchikus csoportosítás (5 pont)===&lt;br /&gt;
===!! nem valódi hierarchia (5 pont)===&lt;br /&gt;
===!! package deklaráció (5 pont)===&lt;br /&gt;
===!! hozzáférés minősített nevekkel, import-tal (5 pont)===&lt;br /&gt;
===!! névtelen csomag (4 pont)===&lt;br /&gt;
===!! névtelen csomaghoz nem lehet hozzáférni másik csomagból (3 pont)===&lt;br /&gt;
===!! package private (3 pont)===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==RMI (030122)==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Írd le a Remote Method Invocation (RMI) elemeit és azok szerepét! Hogyan továbbítódnak a metódushívások paraméterei és a visszatérési értékek a kliens és a szerver között? Egy kliens hogyan talál meg egy adott szolgáltatást egy szerveren? Mely lépéseket kell követni egy RMI alkalmazás megírásakor?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
===!! szerver, kliens, stub, skeleton (10 pont)===&lt;br /&gt;
&lt;br /&gt;
Távoli objektum távoli metódusa hívható, objektumok is közlekedhetnek. Tisztán Java. Kliens és szerveroldali vázak. Interfészek a működés leírására.&lt;br /&gt;
* kliens: tudja hogy működik, egy proxy fut a kliensoldalon, ami továbbít a szerver felé.&lt;br /&gt;
* szerver: végrehajtja&lt;br /&gt;
&lt;br /&gt;
Három absztakciós réteg:&lt;br /&gt;
* stub és szkeleton réteg: a fejlesztő ezen keresztül veheti igénybe a szerver szolgáltatásait, a szerver oldalon ezek kapcsolódnak az implementált szolgáltatáshoz&lt;br /&gt;
* távoli referencia réteg: a kliensek távoli objektumokra való hivatkozását kezeli&lt;br /&gt;
* transzport réteg: TCP/IP&lt;br /&gt;
	&lt;br /&gt;
Stub működése:&lt;br /&gt;
# kapcsolat felépítése a távoli JVM-el&lt;br /&gt;
# marshalling&lt;br /&gt;
# várakozás eredményre&lt;br /&gt;
# unmarshalling&lt;br /&gt;
# eredmények visszaadása a hívónak&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
===!! skeleton-ra nincs már szükség (2 pont)===&lt;br /&gt;
&lt;br /&gt;
JDK1.2-től már nem kell a skeleton segédosztály (a stub protokoll továbbfejlesztése miatt). Amúgy a marshalling és a hívás elvégzéséért felelt.&lt;br /&gt;
&lt;br /&gt;
===!! marshalling, unmarshalling (6 pont)===&lt;br /&gt;
&lt;br /&gt;
marshalling: szerializáció és átküldés&lt;br /&gt;
unmarshalling: eredmények olvasása (deszerializáció)&lt;br /&gt;
&lt;br /&gt;
===!! RMI Registry (5 pont)===&lt;br /&gt;
&lt;br /&gt;
Kell a távoli egyedre referencia. Megoldás: naming vagy directory service, =java.rmi.Naming= osztály&lt;br /&gt;
&lt;br /&gt;
Szerver oldalon van =java.rmi.registry.Registry=.&lt;br /&gt;
&lt;br /&gt;
===!! lépések (7 pont)===&lt;br /&gt;
&lt;br /&gt;
# Interfész megírása (=java.rmi.Remote= kiterjesztése)&lt;br /&gt;
# Szolgáltatás-implementáció elkészítése&lt;br /&gt;
# Stubok létrehozása&lt;br /&gt;
** =rmic Osztálynév= generálja&lt;br /&gt;
# Szerver létrehozása a kérések fogadására&lt;br /&gt;
# Kliens létrehozása&lt;br /&gt;
# A rendszer beindítása&lt;br /&gt;
** =rmiregistry= parancs&lt;br /&gt;
** =java Server=&lt;br /&gt;
** +kliens&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- [[KarakoMiklos|palacsint]] - 2007.01.08.&lt;br /&gt;
-- [[KarakoMiklos|palacsint]] - 2007.01.11.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Valaszthato]]&lt;/div&gt;</summary>
		<author><name>Unknown user</name></author>
	</entry>
</feed>