JavaRush /Java Blog /Random-TK /Bir söhbetdeşligiň hekaýasy: gyzykly soraglar
GuitarFactor
Dereje
Санкт-Петербург

Bir söhbetdeşligiň hekaýasy: gyzykly soraglar

Toparda çap edildi
Recentlyakynda iri IT kompaniýalarynyň birinde tejribe alyşmak üçin geçirilen söhbetdeşlige gatnaşmaga mümkinçilik aldym. Bir söhbetdeşligiň hekaýasy: gyzykly soraglar - 1Bu meniň ilkinji IT söhbetdeşligimdi we meniň pikirimçe gyzykly boldy. Umuman, meni 3 sagatdan gowrak wagtlap “sorag etdiler” (munuň öňüsyrasynda öý işi we ofisde kompýuterde synag). Soraga nädogry jogap berenimde ýüz öwürmedik, ýöne esasy soraglarynyň kömegi bilen meni bu hakda pikirlenmäge we dogry jogaba gelmäge mejbur eden söhbetdeşe hormat goýmak isleýärin. Aşakda birnäçe "eskiz" hödürlärin - meniň pikirimçe, gaty gyzykly soraglar, käbiri maňa Java-yň käbir taraplaryna has çuňňur düşünmäge mümkinçilik berdi. Belki, bu zatlar käbirlerine düşnükli ýaly bolup biler, ýöne bu peýdaly boljaklar bolar diýip pikir edýärin. Jümleleriň aşagynda aşakdaky şriftlerde görkezilýär: Söhbetdeş - goýy sesli düşündirişlerde we pikirlerimde - ýazgylar bilen jogaplarym - yzygiderli şriftde Biz fon bilen işledik, geliň işe gireliň)

Eskiz 1. “simpleönekeý ýaly görünýän usul”

Sanlary b belgisine bölmegiň netijesini gaýtaryp berýän usuly nädip durmuşa geçirjekdigiňizi ýazyň. Söhbetdeşlikçi kagyz ýüzüne ýazýar
int divide(int a, int b) {
}
* Usul goly bilen kagyz ýüzüne haýran galdym. Tutmak näme? * Writeazýaryn:
int divide(int a, int b) {
    return a/b;
}
Bu usul bilen baglanyşykly problemalar barmy? * Men hakykatdanam samsyk dilsiz tutýaryn * Megerem ýok .. Indiki kanuny sorag gelýär: b = 0 bolsa näme etmeli? * Haý, men şeýle dowam etsem, bu ofisden kowuljak bolýaryn! * Hawa, elbetde. Bu ýerde int görnüşli argumentlerimiz bar, şonuň üçin arifmetiki kadadan çykma bolar. Argumentler ýüzýän ýa-da goşa görnüşli bolsa, netije Infinity bolar. Bu barada näme etjek? Synag / tutmak ýazyp başlaýaryn
int divide(int a, int b) {
    try {
        return a/b;
    } catch (Exception e) {
        e.printStackTrace();
        return ... // ??? what the hack?
    }
}
* Dolanyp, doňup başlaýaryn: ýalňyşlyk ýüze çykan halatynda bir zady yzyna gaýtarmaly. Thisöne bu “bir zady” hasaplamanyň netijesinden nädip tapawutlandyryp bolar? * Näme gaýdarys? Hm ... Yza gaýdýan üýtgeýjiniň görnüşini Integer-e üýtgederdim we kadadan çykma ýagdaýynda null gaýdyp gelerdim. Görnüşini üýtgedip bilmejekdigimizi göz öňüne getireliň. Nädip çykyp bileris? Belki, muňa garamazdan başga bir zat edip bileris? * Ine, gelýär * Çagyryş usulyna hem iberip bileris! Dogry. Ol nähili bolar?
int divide(int a, int b) throws ArithmeticException{
    return a/b;
}

void callDivide(int a, int b) {
    try {
        divide(a, b);
    } catch (ArithmeticException e) {
        e.printStackTrace();
    }
}
Kadadan çykma zerurmy? Hawa, sebäbi ony bölmek usulyndan aç-açan iberýäris. . _ Bu, iş wagtyndan başga kadadan çykma diýmekdir. * Ine, öldüriji sorag gelýär * Şeýlelik bilen, siziň sözleriňizde, arifmetiki kadadan çykma usuly goluna atan bolsak, bu barlanylan kadadan çykma boldumy? * Ug! * Mümkin ... ýok. Hawa, beýle bolmady. Eger goluň içine zyňylýan / barlanmadyk kadadan çykma görkezsek, diňe usulyň kadadan çykma bolup biljekdigini duýdurýarys, ýöne ony çagyryş usulynda ulanmak hökman däl. Bu düzüldi. Mistakesalňyşlyklardan gaça durmak üçin başga edip biljek zadymyz barmy? * Biraz pikirlenenden soň * Hawa, (b == 0) ýa-da ýokdugyny hem barlap bileris. Käbir logikany ýerine ýetiriň. Dogry. Şonuň üçin 3 ýoldan geçip bileris:
  • synap gör / tut
  • zyňýar - çagyryş usulyna ugratmak
  • argumentleri barlamak
Bu ýagdaýda dividehaýsy usuly makul bilýärsiňiz?
Kadadan çykmany çagyryş usulyna ugratmagy saýlardym, sebäbi ... intbölmek usulynda bu kadadan çykmany nädip işlemelidigi we ýalňyşlyk ýüze çykan halatynda haýsy netijäniň yzyna gaýdyp boljakdygy belli däl . Çagyryş usulynda bolsa, nola deňdigini ýa-da ýokdugyny barlamak üçin b argumentini ulanardym. Bu jogap söhbetdeşi kanagatlandyrana meňzeýär, ýöne dogrymy aýtsam, bu jogabyň birmeňzeş däldigine ynanamok))

Eskiz 2. “Kim has çalt?”

Adaty soragdan soň, “ArrayList” “LinkedList” -den nädip tapawutlanýar, şeýle geldi: Çalt näme bolar - bir elementi ortasyna ArrayListýa-da ortasyna salmak LinkedList? * Ine, bökdüm, hemme ýerde “ LinkedListsanawyň ortasyna elementleri salmak ýa-da aýyrmak üçin ulanyň” ýaly bir zady okanym ýadyma düşdi. Öýde hatda JavaRush leksiýalaryny iki gezek barladym, bir söz bar: “kolleksiýanyň ortasyna köp element girizjek (ýa-da ýok etjek) bolsaň, has gowy ulanarsyň LinkedList. Beýleki ähli ýagdaýlarda - ArrayList. ” Awtomatiki jogap * Bu has çalt bolar LinkedList. Düşündiriň
  1. Ortada bir element goýmak üçin ArrayList, sanawdaky elementi hemişe tapýarys, soňra elementleriň görkezilen görkezijilerini sag tarapda, çyzykly wagtda täzeden hasaplaýarys.
  2. For LinkedList.. Ilki bilen çyzykly wagtyň ortasyna ýetýäris, soň bolsa goňşy elementler üçin baglanyşyklary üýtgedip, hemişe bir element goýýarys.
Görnüşi ýaly, haýsy has çalt? Hm ... Edil şol bir zat. Emma haçan has LinkedListçalt? Sanawyň birinji ýarymyna salanymyzda ýüze çykýar. Mysal üçin, başda goýsaňyz, ArrayListähli görkezijileri guýruga çenli täzeden hasaplamaly bolarsyňyz, ýöne LinkedListdiňe birinji elementiň salgylanmasyny üýtgetmeli bolarsyňyz. Ahlak: hatda JavaRush-da ýazylanlaryň hemmesine sözme-söz ynanmaň!)

Eskiz 3. “Deň we hashkod bolmasa nirede bolardyk!”

Deňdir we hashkod hakda söhbet gaty uzyn boldy - ony nädip ýok etmeli, haýsy durmuşa geçirilýär Object, kapotyň aşagynda näme bolýar, bir element girizilende HashMapwe ş.m. Diňe meniň pikirimçe gyzykly birnäçe bal bererin * Synp döredendigimizi göz öňüne getiriň
public class A {
    int id;

    public A(int id) {
        this.id = id;
    }
}
Olar muny äsgermezlik etdiler equalswe hashcode. Kod ýerine ýetirilende nämeleriň boljakdygyny aýdyp beriň
A a1 = new A(1);
A a2 = new A(1);
Map<A, String> hash = new HashMap<>();
hash.put(a1, "1");
hash.get(a2);
* Söhbetdeşlikden ozal esasy algoritmlere, olaryň çylşyrymlylygyna we maglumat gurluşlaryna düşünmek üçin birnäçe gün sarp edenim gowy zat - CS50 sag boluň! *
  1. A synpyň iki mysalyny dörediň

  2. Boş kartany döredýäris, adaty ýagdaýda 16 sebet bar. Esasy A synpyň obýekti bolup, onda usullar equalswe usullar ýazylmaýar hashcode.

  3. a1Kartada goýuň . Munuň üçin ilki bilen hasany hasaplaýarys a1.

    Haş nämä deň bolar?

    Memoryatdaky öýjügiň salgysy, synpdan bir usulyň durmuşa geçirilmegiObject

  4. Haşa esaslanyp, sebet indeksini hasaplaýarys.

    Ony nädip hasaplap bileris?

    * Gynansagam, bu ýerde anyk jogap bermedim. Sizde uzyn san bar - heş, we 16 çelek bar - dürli heşli obýektleriň çelekleriň arasynda deň paýlanmagy üçin indeksini nädip kesgitlemeli? Indeksiň şeýle hasaplanýandygyny göz öňüne getirip bilerin:

    int index = hash % buckets.length

    Öýde deslapky kodda asyl ýerine ýetirilişiniň birneme üýtgeşikdigini gördüm:

    static int indexFor(int h, int length)
    {
        return h & (length - 1);
    }
  5. Çaknyşyklaryň ýokdugyny barlaýarys we a1 goýýarys.

  6. Usula geçeliň get. A1 we a2 ýagdaýlaryň başga (ýatda dürli salgy) bolmagy kepillendirilýär hash, şonuň üçin bu açar üçin hiç zat tapmarys

    hashcodeDiňe A synpda täzeden kesgitläp, hashmap-a ilki a1 açary, soň bolsa a2 bilen jübüt girizmäge synanyşsak näme etmeli ?

    Soň bolsa ilki bilen islenýän sebedi taparys hashcode- bu amal dogry ýerine ýetiriler. EntrySoň bolsa, araba birikdirilen LinkedListdäki obýektlerden geçip başlalyň we düwmeleri deňeşdiriň equals. Sebäbi equalskepillendirilmeýär, soň esasy ýerine ýetiriş synpdan alynýar Object- salgylanma bilen deňeşdirilýär. a1 we a2-de dürli baglanyşyklaryň bolmagy kepillendirilýär, şonuň üçin goýlan elementi “sypdyrarys” we a2 täze düwün hökmünde LinkedList-e ýerleşdiriler.

    Netije näme? HashMapDüşünmedik obýektde açar hökmünde ulanyp bolarmy equalshashcode?

    Nook.

Eskiz 4. “Geliň, bilgeşleýin bozalyň!”

Roralňyşlyk we kadadan çykma baradaky soraglardan soň aşakdaky sorag geldi: Funksiýanyň StackOverflow-a zyňjak ýönekeý mysalyny ýazyň. * Soňra käbir gaýtalanýan funksiýa ýazjak bolanymda bu ýalňyşlygyň meni nädip başdan geçirendigi ýadyma düşdi * Bu, gaýtalanmakdan çykmagyň şerti nädogry görkezilen bolsa, gaýtalanýan jaň ýagdaýynda bolup biler. * Soň akylly bir zady synap başladym, ahyrynda söhbetdeş kömek etdi, hemme zat ýönekeý boldy *
void sof() {
    sof();
}
Bu ýalňyşlyk näme bilen tapawutlanýar OutOfMemory? * Bu ýerde jogap bermedim, diňe Java ýadyny bilmek baradaky soraga düşündim Stack( Heapjaňlar we obýektlere salgylanmalar Stackda, obýektleriň özi bolsa Heap ýadynda saklanýar). StackŞoňa laýyklykda indiki usul jaňy üçin ýatda ýer ýok bolanda we OutOfMemoryobýektler üçin boş ýer ýatda galanda StackOverflow zyňylýar Heap*
Söhbetdeşlikden pursatlar ýadyma düşýär. Netijede, tejribe geçmek üçin kabul edildi, şonuň üçin öňümde 2,5 aýlyk okuw bar we hemme zat gowy bolsa, kompaniýadaky iş) Gyzyklanma bar bolsa, bu gezek has kiçi, başga bir makala ýazyp bilerin başga bir kompaniýada söhbetdeşlik beren ýönekeý, ýöne suratlandyryjy meseläniň derňewi. Bularyň hemmesi meniň üçin, bu makala kimdir birine bilimini çuňlaşdyrmaga ýa-da tertipleşdirmäge kömek eder diýip umyt edýärin. Hemmäňize bagtly boluň!
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION