Interjú a java-oopra (kérdések és válaszok)

A válaszok harmadik része és az OOP Java-ban készült interjú kérdései.

Kérdéseket. 3. rész

Válaszokat. 3. rész

43. Hogyan érhetem el a helyi metódusváltozót egy olyan névtelen osztályból, amelyet ebben a módszerben deklaráltam? Van-e korlátozás egy ilyen változóra?

A helyi osztályok mellett az anonim is képes rögzíteni a változókat, a helyi változókhoz való hozzáférés ugyanazokat a szabályokat követi:

Az anonim osztályok helyi osztályokat is tartalmazhatnak. A névadó osztály konstruktora nem lehet.

44. Hogyan társul egyéni osztály az Object osztályhoz?

Minden osztály a Superclass objektum örököse. Ezt nem kell kifejezetten megadnia. Ennek eredményeként az Object o bármely másik osztály valamely objektumára hivatkozhat.

  • nyilvános végleges natív class getClass () - visszaadja az objektum osztályát futási időben.
  • nyilvános natív int hashCode () - visszaküldi a hash-kódot
  • nyilvános logikai egyenlők (Object obj) - összehasonlítja az objektumokat.
  • védett natív objektumklón () a CloneNotSupportedException-t - egy objektum klónozását dobja
  • public String toString () - visszaadja az objektum karakterlánc ábrázolását.
  • public final natív void notify () - egy olyan szál, amely várakozik az objektum "monitorán", felébred.
  • public final natív void notifyAll () - minden olyan szál, amely az objektum "monitorán" várakozik, felébred.
  • dobja a MegszakítottExcepciót - a szál a megadott időre készenléti állapotba kerül.
  • nyilvános végleges void wait () throws InterruptedException - ez a téma vár, amíg egy másik téma felhívja a notify () vagy notifyAll () metódusokat erre az objektumra.
  • állami végső void várakozás (hosszú időtúllépés, int nanos) dob InterruptedException - vezeti a szálat kell várni, amíg a másik szál hívások értesíti () vagy notifyAll () ezt a módszert, vagy amíg a megadott idő intervallumban.
  • védett void finalize () throws Throwable - a szemétgyűjtő által kiváltott, amikor a szemétgyűjtő meghatározza, hogy már nincs hivatkozás az objektumra.

46. ​​Mi az egyenlő () metódus. Hogyan különbözik a művelet ==.
47. Ha felül szeretné fejezni az egyenlő () értéket, akkor milyen feltételeknek kell teljesülnie a felülírt módszerhez?
47. Ha az egyenlők () felülbírálják, vannak-e olyan más módszerek, amelyeket újra kell definiálni?
49. Mi a hashCode sajátossága és egyenlő a módszerekkel? Hogyan vannak a hashCode és egyenértékűek az Object osztályban végrehajtott módszerek? Milyen szabályok és megállapodások léteznek e módszerek végrehajtására? Mikor alkalmazzák?

  • A reflexivitás. minden nem nulla x, x.egyenleg (x) értéke igaz;
  • Tranzitivitás. bármilyen nem nulla x, y és z, ha x.equals (y) és y.equals (z) TRUE, akkor x.equals (z) return true;
  • Szimmetria: bármely nem nulla x és y, x.equals (y) vissza kell igaz, akkor és csak akkor, ha y.equals (x) igaz értékkel tér vissza.
  • Más nem nulla x, x.equals (null) esetén is vissza kell adni

Ha egyenlők () felülbírál, felül kell hagynia a hashCode () metódust. Az egyenlő objektumoknak ugyanazokat a hasító kódokat kell visszaadniuk.

A hash kód egy szám. Pontosabban, ez egy fix hossza, amelyet tetszőleges hosszúságú tömbből nyernek. A Java-kifejezésekben a hash-kódex egy olyan egész szám eredménye, amelyet egy objektum bemeneti paraméterként ad át.

Ez a módszer úgy kerül végrehajtásra, hogy ugyanaz a bemeneti objektum esetében a hash-kód mindig ugyanaz legyen. Meg kell érteni, hogy a lehetséges hash-kódok halmaza egy primitív típusú int-ra korlátozódik. és a tárgyak készletét csak képzeletünk korlátozza. Ebből következik az állítás: "Az objektumok halmaza erősebb, mint a hash-kódok". E korlátozás miatt teljesen lehetséges, hogy a különböző objektumok hasító kódjai egybeeshetnek.

Itt a legfontosabb megérteni:

  • Ha a hash-kódok eltérőek, akkor a bemeneti objektumok is garantáltak különbözőek.
  • Ha a hasító kódok egyenlőek, akkor a bemeneti objektumok nem mindig egyenlőek.

Az a helyzet, amikor a különböző objektumoknak ugyanaz a hasis kódja van, ütközésnek nevezik. Az ütközés valószínűsége a hash-kód előállításához használt algoritmustól függ.

50. Milyen módszerrel tér vissza egy objektum karakterlánc ábrázolására?

51. Mi történik, ha felülbírálom az egyenlőségeket a kényszerítő hashCode nélkül? Milyen problémák merülhetnek fel?

A szerződés megszakadt. A szerződés szabályait alkalmazó osztályok és módszerek esetleg nem működnek megfelelően. Tehát egy HashMap objektum esetén a térképen elhelyezett pár nem okozhatja azt, hogy a mappa elérésekor, ha a kulcs egy új példányát használja.

52. Van-e olyan ajánlás, hogy milyen mezőket kell használni a hashCode számlálásakor?

Azok, amelyeket a módszer meghatározásakor használnak (). A hash-kódot egyenletesen kell elosztani a lehetséges értékek tartományán belül.

53. Gondolod, hogy probléma merülne fel, ha egy olyan objektumot, amelyet kulcsszóként használnak a hashMap-ben, olyan mező, amely részt vesz a hashCode definícióban?

Will. A kulcs elérésekor nem találunk értéket.

54. Mi a különbség az absztrakt osztály és az interfész között, mely esetekben mit használsz?

Absztrakt osztályok csak akkor használatosak, ha létezik egy "egy" típusú kapcsolat; Az interfészeket olyan osztályok segítségével lehet végrehajtani, amelyek nem kapcsolódnak egymáshoz.

Egy elvont osztály képes végrehajtani a módszereket; a felület képes statikus módszereket megvalósítani, és a 8. verziótól kezdve.

A felület leírhat konstansokat és módszereket. Az összes interfészmód alapértelmezés szerint nyilvános és absztrakt, és a mezők nyilvános statikus véglegesek. A 8-as Java-modullal az alapértelmezett és a statikus módszereket végrehajthatja az interfészekben.

Java-ban egy osztály számos interfészből örökölhető, de csak egy absztrakt osztályból.

Absztrakt osztályokkal elveszíted az osztály egyéniségét, amely örökli azt; az interfészekkel egyszerűen kiterjesztheti az egyes osztályok funkcionalitását.

55. Hozzáférhetek-e a privát osztályváltozókhoz, és ha igen, milyen módon?

56. Mi változékony és átmeneti? Mire és milyen esetekben használhatom az alapértelmezést?

ingadozó - nincs gyorsítótár (azaz a memóriaterület, amelyben a JVM képes tárolni a változó helyi példányát, hogy csökkentse a változóhoz való hozzáférési időt), amikor elérte a mezőt. Éles változó esetén a JVM biztosítja a szinkronizálást az olvasási / írási műveletekhez, de nem garantálja a változók értékének megváltoztatásához szükséges műveleteket.

tranziens - azt jelzi, hogy a sorozat szerializálásakor / deserializálásakor nem kell sorba állítani / deserializálni.

57. Módosítók bővítése az örökléssel, felülbírálással és a módszerek eltitkolásával. Ha a szülő osztály egy magántulajdonú módszerrel rendelkezik, akkor az örökös kiterjesztheti láthatóságát? És ha védett? És szűk látókör?

Van egy általános elv: nem tudja kibővíteni a láthatóságot, nem szűkítheti le. a privát módszerek csak az osztályon belül láthatók, de nem láthatók a leszármazottak számára. Ezért nem bővíthetők.

58. Van-e értelme kijelenteni a magán végső módszert?

Nem, ez a módszer nem látható az örökösöknek, így nem lehet újból meghatározni.

59. Mik a végleges változók inicializálásának jellemzői?

  • A mezőre. A végleges jelöléssel rendelkező mező az inicializálást követően nem módosíthatja értékét.
    Nem lehet statikus végleges mező inicializálni: a leírásban, a konstruktorban (mindenben), egy statikus blokkban, egy dinamikus blokkban.
    A statikus végleges mezőt egy statikus mondatban vagy egy leírásban inicializálják.
  • A helyi változók értéke, valamint az utolsó szóval megjelölt módszer paraméterei nem módosíthatók a hozzárendelés után.

60. Mi történik, ha egy osztályú konstruktort véglegesnek nyilvánítanak?

A végleges kulcsszó nem vonatkozik a szerkesztőre.

61. Mi a véglegesítés? Miért van szükség? Mit tudsz mondani a szemétgyűjtőről és a munkájának algoritmusairól?

A finalize () metódus az objektumnak a szemétgyűjtő (szemétgyűjtő, majd gc) eltávolítása előtt szól. A gc sok különböző megvalósítása létezik. A munka alapja a következő, a gc jelzi azokat az objektumokat, amelyeket már nem hivatkoznak más objektumok a törlésükre. Ezután az egyik elérési úton a kijelölt objektumokat törölni kell.
A Finalize () nem garantált; Az alkalmazás megszüntethető, mielőtt újabb hulladékgyűjtemény indul. Igen, összeállíthat egy objektumot a finalize () módszerrel. hivatkozás bizonyos statisztikai módszerre.

62. Miért védettnek nyilvánítják a klónt? Mi szükséges a klónozás megvalósításához?

Ez azt jelzi, hogy bár a módszer az Object osztályban van, és a fejlesztő használni akarja, akkor újra kell definiálni. Ehhez a Clonable felületet kell végrehajtania. hogy teljesítse a szerződést.

59. Mik a végleges változók inicializálásának jellemzői?
A mezőre. A végleges jelölésű mező nem módosíthatja az értékét inicializálás után (inicializálva vagy a leírásban vagy a konstruktor / statikus blokkban).
- Ha a végleges statikus, akkor VAGY a dinamikus blokkban, VAGY az ALL konstruktorokban, VAGY a leírásnál.
-Ha a végleges statikus valami VAGY egy statikus blokkban, VAGY a leírásnál, VAGY alapértelmezés szerint.

A választ statikus \ nem statikus, és hozzáadtam az összes konstruktőrre. Alapértelmezés szerint a végleges statikus int a; nem fordítva 0-ra.

illékony - nincs gyorsítótár (azaz a memóriaterület, amelyben a JVM tárolhatja a változó helyi példányát, hogy csökkentse a változó eléréséhez szükséges időt), amikor elérte a mezőt
Nem teljes válasz

Egy ingadozó változó esetén a JVM biztosítja az olvasási / írási műveletek szinkronizálását, de nem garantálja a változó értékének megváltoztatására irányuló műveleteket

És ez a válasz szintén nem teljes. A proxy gyorsítótárral és a java gépekkel való együttműködés nyilvánvalóan nem illeszkedik ebbe a részbe. De még hozzá, köszönöm.

Kapcsolódó cikkek