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ýarint 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
divide
haýsy usuly makul bilýärsiňiz? Kadadan çykmany çagyryş usulyna ugratmagy saýlardym, sebäbi ... int
bö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 ortasynaArrayList
ýa-da ortasyna salmak LinkedList
? * Ine, bökdüm, hemme ýerde “ LinkedList
sanawyň 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ň
- 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. - For
LinkedList
.. Ilki bilen çyzykly wagtyň ortasyna ýetýäris, soň bolsa goňşy elementler üçin baglanyşyklary üýtgedip, hemişe bir element goýýarys.
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 LinkedList
diň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ýärObject
, kapotyň aşagynda näme bolýar, bir element girizilende HashMap
we ş.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 equals
we 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ň! *
-
A synpyň iki mysalyny dörediň
-
Boş kartany döredýäris, adaty ýagdaýda 16 sebet bar. Esasy A synpyň obýekti bolup, onda usullar
equals
we usullar ýazylmaýarhashcode
. -
a1
Kartada goýuň . Munuň üçin ilki bilen hasany hasaplaýarysa1
.Haş nämä deň bolar?
Memoryatdaky öýjügiň salgysy, synpdan bir usulyň durmuşa geçirilmegi
Object
-
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); }
-
Çaknyşyklaryň ýokdugyny barlaýarys we a1 goýýarys.
-
Usula geçeliň
get
. A1 we a2 ýagdaýlaryň başga (ýatda dürli salgy) bolmagy kepillendirilýärhash
, şonuň üçin bu açar üçin hiç zat tapmaryshashcode
Diň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.Entry
Soň bolsa, araba birikdirilen LinkedListdäki obýektlerden geçip başlalyň we düwmeleri deňeşdiriňequals
. Sebäbiequals
kepillendirilmeýär, soň esasy ýerine ýetiriş synpdan alynýarObject
- 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?
HashMap
Düşünmedik obýektde açar hökmünde ulanyp bolarmyequalshashcode
?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
( Heap
jaň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 OutOfMemory
obý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ň!
GO TO FULL VERSION