KodeGym/Blog Jawa/Acak/Njelajah pitakonan lan jawaban saka wawancara proyek kang...
John Squirrels
tingkat
San Francisco

Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa. Bagian 7

Diterbitake ing grup
Hey kabeh! Pemrograman kebak pitfalls. Lan meh ora ana topik siji sing ora bakal nyebabake sampeyan kesandhung lan stub driji sikil. Iki utamané bener kanggo pamula. Cara mung kanggo nyimpen driji sikil yaiku sinau. Utamane, sampeyan kudu nyilem menyang topik sing paling dhasar. Dina iki, kita bakal nerusake review pitakonan sing paling populer sajrone wawancara kanggo pangembang Jawa. Pitakonan wawancara iki nindakake tugas sing apik kanggo nutupi topik dhasar. Elinga yen dhaptar uga kalebu sawetara pitakonan sing ora standar sing ngidini sampeyan nyedhaki masalah umum kanthi beda. Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa.  Bagean 7 - 1

62. Apa blumbang string, lan apa iku perlu?

Bagéyan saka memori sing kasedhiya kanggo program Jawa diarani tumpukan (sing bakal kita pirembagan mengko), lan bagéan saka tumpukan diarani blumbang String . Iku kanggo nyimpen nilai string. Ing tembung liyane, nalika nggawe senar, contone, nggunakake kuotasi pindho kaya iki:
String str = "Hello world";
JVM mriksa manawa blumbang string wis duwe nilai sing ditemtokake. Yen mengkono, banjur variabel str diutus referensi kanggo Nilai ing blumbang. Yen ora, Nilai anyar digawe ing blumbang, lan referensi kanggo iku diutus kanggo variabel str . Ayo nimbang conto:
String firstStr = "Hello world";
String secondStr = "Hello world";
System.out.println(firstStr == secondStr);
bener bakal ditampilake ing layar. Elinga yen == mbandhingake referensi, lan loro variabel kasebut nuduhake nilai sing padha ing blumbang senar. Iki mbantu supaya ora ngasilake akeh obyek String sing padha ing memori. Kita bisa nindakake iki amarga, sing bakal kelingan, String kelas immutable, supaya ana apa-apa salah karo sawetara referensi kanggo Nilai padha. Saiki, ora ana kahanan sing ngganti nilai ing sak panggonan bakal nyebabake owah-owahan ing sawetara referensi liyane. Isih, yen kita nggawe string nggunakake anyar :
String str = new String("Hello world");
banjur obyek kapisah digawe ing memori lan nyimpen Nilai senar kasebut (ora Matter yen nilai wis ana ing blumbang senar). Kanggo ngonfirmasi pratelan iki, nimbang iki:
String firstStr = new String("Hello world");
String secondStr = "Hello world";
String thirdStr = new String("Hello world");
System.out.println(firstStr == secondStr);
System.out.println(firstStr == thirdStr);
Kita bakal entuk rong baris sing nuduhake palsu , tegese kita duwe telung senar sing kapisah. Sejatine, iki sebabe sampeyan kudu nggawe senar mung nggunakake kuotasi kaping pindho. Yen ngandika, iku bisa kanggo nambah (utawa njaluk referensi kanggo) nilai ing blumbang senar malah nalika nggawe obyek nggunakake tembung kunci anyar . Kanggo nindakake iki, kita nggunakake metode intern kelas String () . Cara iki njamin yen kita nggawe nilai ing blumbang senar utawa kita entuk referensi yen wis ana. Iki contone:
String firstStr = new String("Hello world").intern();
String secondStr = "Hello world";
String thirdStr = new String("Hello world").intern();
System.out.println(firstStr == secondStr);
System.out.println(firstStr == thirdStr);
System.out.println(secondStr == thirdStr);
Kode iki ngasilake bener kanggo console kaping telu, sing ngandhani yen kabeh telung variabel nuduhake senar sing padha ing memori.

63. Apa pola desain GoF digunakake ing blumbang senar?

Ing blumbang senar, pola desain GoF minangka pola flyweight . Yen sampeyan wis weruh pola desain liyane ing kene, nuduhake ing komentar. Ing kene kita bakal ngomong babagan pola desain flyweight. Iki minangka pola desain struktural ing ngendi obyek sing nggambarake awake dhewe minangka conto unik ing macem-macem panggonan ing program kasebut sejatine ora unik. Flyweight ngirit memori kanthi nyimpen status bareng obyek tinimbang nyimpen data sing padha ing saben obyek. Kanggo mangertos inti, nimbang conto dhasar iki. Ayo kita duwe antarmuka Karyawan :
public interface Employee {
   void work();
}
Lan duwe sawetara implementasine, kayata kelas Pengacara :
public class Lawyer implements Employee {

   public Lawyer() {
       System.out.println("A lawyer was hired.");
   }

   @Override
   public void work() {
       System.out.println("Settling legal issues...");
   }
}
Lan kelas Akuntan :
public class Accountant implements Employee {

   public Accountant() {
       System.out.println("An accountant was hired.");
   }

   @Override
   public void work() {
       System.out.println("Keeping accounting records...");
   }
}
Cara kasebut kanthi sewenang-wenang - kanggo conto iki, kita mung kudu ndeleng manawa lagi dieksekusi. Padha bener babagan konstruktor. Output console ngandhani nalika obyek anyar digawe. Kita uga duwe departemen sumber daya manungsa sing tugas kanggo ngasilake karyawan sing dijaluk. Yen karyawan kasebut durung dadi staf, mula bakal direkrut lan departemen HR ngasilake karyawan anyar:
public class HumanResourcesDepartment {
   private Map<String, Employee> currentEmployees = new HashMap<>();

   public Employee getEmployee(String type) throws Exception {
       Employee result;
       if (currentEmployees.containsKey(type)) {
           result = currentEmployees.get(type);
       } else {
           switch (type) {
               case "Accountant":
                   result = new Accountant();
                   currentEmployees.put(type, result);
                   break;
               case "Lawyer":
                   result = new Lawyer();
                   currentEmployees.put(type, result);
                   break;
               default:
                   throw new Exception("This employee is not on the staff!");
           }
       }
       return result;
   }
}
Dadi, logika prasaja: yen obyek sing dikarepake ana, bali maneh; yen ora, nggawe, sijine ing panyimpenan (kaya cache a), lan bali. Saiki ayo ndeleng cara kerjane:
public static void main(String[] args) throws Exception {
   HumanResourcesDepartment humanResourcesDepartment = new HumanResourcesDepartment();
   Employee empl1 = humanResourcesDepartment.getEmployee("Lawyer");
   empl1.work();
   Employee empl2 = humanResourcesDepartment.getEmployee("Accountant");
   empl2.work();
   Employee empl3 = humanResourcesDepartment.getEmployee("Lawyer");
   empl1.work();
   Employee empl4 = humanResourcesDepartment.getEmployee("Accountant");
   empl2.work();
   Employee empl5 = humanResourcesDepartment.getEmployee("Lawyer");
   empl1.work();
   Employee empl6 = humanResourcesDepartment.getEmployee("Accountant");
   empl2.work();
   Employee empl7 = humanResourcesDepartment.getEmployee("Lawyer");
   empl1.work();
   Employee empl8 = humanResourcesDepartment.getEmployee("Accountant");
   empl2.work();
   Employee empl9 = humanResourcesDepartment.getEmployee("Lawyer");
   empl1.work();
   Employee empl10 = humanResourcesDepartment.getEmployee("Accountant");
   empl2.work();
}
Mangkene apa sing bakal kita deleng ing konsol:
A pengacara wis nyewo. Ngatasi masalah hukum... Akuntan direkrut. Nyimpen cathetan akuntansi... Nyetel masalah hukum... Nyimpen cathetan akuntansi... Nyetel masalah hukum... Nyimpen rekaman akuntansi... Nyetel masalah hukum... Nyimpen rekaman akuntansi... Nyetel masalah hukum... Nyimpen akuntansi cathetan…
Kaya sing sampeyan ngerteni, kita mung nggawe rong obyek lan digunakake kaping pirang-pirang. Conto kasebut gampang banget, nanging nuduhake kepiye pola desain iki bisa ngreksa sumber daya kita. Kaya sing sampeyan ngerteni, logika pola iki meh padha karo logika kolam asuransi. Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa.  Bagean 7 - 2

64. Kepiye carane kita misahake senar dadi bagean? Menehi conto kode sing cocog

Temenan, pitakonan iki babagan cara pamisah . Kelas String duwe rong variasi saka metode iki:
String split(String regex);
lan
String split(String regex);
Parameter regex yaiku delimiter - sawetara ekspresi reguler sing digunakake kanggo pamisah string dadi array strings, contone:
String str = "Hello, world it's Amigo!";
String[] arr = str.split("\\s");
for (String s : arr) {
  System.out.println(s);
}
Konsol bakal nampilake:
Halo, jagad iki Amigo!
Dadi, string kita dipérang dadi array saka strings, nggunakake spasi minangka delimiter (tinimbang ekspresi reguler "\\s" , kita uga bisa nggunakake ekspresi string biasa " " ). Kapindho, varian overloaded, duwe parameter watesan tambahan . watesan punika ukuran maksimum diijini saka Uploaded asil. Ing tembung liyane, yen senar wis dipérang dadi jumlah maksimum sing diijini saka substrings, pisah mandheg, lan unsur pungkasan bakal ngemot sembarang "sisa" saka senar bisa non-pamisah. Tuladha:
String str = "Hello, world it's Amigo!";
String[] arr = str.split(" ", 2);
for (String s : arr) {
  System.out.println(s);
}
Output konsol:
Halo, jagad iki Amigo!
Minangka kita bisa ndeleng, yen ora kanggo watesan = 2 , unsur pungkasan Uploaded bisa dipérang dadi telung substrings.

65. Kenapa array karakter luwih apik tinimbang senar kanggo nyimpen sandhi?

Ana sawetara alasan kanggo milih array tinimbang senar nalika nyimpen sandhi:

1. Kolam senar lan senar immutability.

Nalika nggunakake array ( char [] ), kita bisa kanthi jelas mbusak data yen wis rampung nggarap. Kita uga bisa nimpa array kaya sing dikarepake, ngilangi tembung sandhi saka sistem sanajan sadurunge koleksi sampah (iku cukup kanggo ngganti sawetara sel dadi nilai sing ora bener). Ing kontras, String minangka kelas sing ora bisa diganti. Iki tegese yen kita pengin ngganti Nilai saka obyek String , kita bakal njaluk anyar, nanging lawas bakal tetep ing blumbang senar. Yen kita arep kanggo mbusak String ngemot sandi, kita ngadhepi tugas rumit amarga kita kudu uwuh kanggo mbusak Nilai saka blumbang senar, nanging sing String kamungkinan bakal tetep ana kanggo dangu. Yaiku, nalika nyimpen data kanthi aman, String luwih murah tinimbang array char .

2. Yen kita output nilai String kanggo console (utawa log), banjur kita njaluk:

String password = "password";
System.out.println("Password - " + password);
Output konsol:
Sandi - sandi
Lan yen sampeyan kelakon nyithak array menyang console:
char[] arr = new char[]{'p','a','s','s','w','o','r','d'};
System.out.println("Password - " + arr);
konsol bakal nampilake omong kosong sing ora bisa dingerteni:
Sandi - [C@7f31245a
Ing kasunyatan, iku ora gibberish. Mangkene carane ngerteni apa sing sampeyan deleng: [C yaiku jeneng kelas - char array, @ minangka pembatas, banjur 7f31245a minangka kode hash heksadesimal.

3. Pandhuan Referensi Java Cryptography Architecture (JCA) resmi kanthi jelas nyebutake nyimpen sandhi ing char[] tinimbang String :

"Iku bakal katon logis kanggo ngumpulake lan nyimpen sandi ing obyek saka jinis java.lang.String . Nanging, kene caveat: Obyek saka jinis String ora bisa diganti, IE, ora ana cara ditetepake sing ngijini sampeyan kanggo ngganti (nimpa) utawa nol isi String sawise panggunaan. Fitur iki ndadekake obyek String ora cocog kanggo nyimpen informasi sensitif keamanan kayata sandhi pangguna. Sampeyan kudu tansah ngumpulake lan nyimpen informasi sensitif keamanan ing array karakter tinimbang." Njelajah pitakonan lan jawaban saka wawancara proyek kanggo posisi pangembang Jawa.  Bagean 7 - 3

Enum

66. Andharan ngenani Enum ing basa Jawa

Enum minangka singkatan saka enumerasi, yaiku sakumpulan konstanta senar sing digabungake karo jinis umum. Kita ngumumake siji nggunakake tembung kunci enum . Iki conto karo enum : peran sing diidinake ing sawetara kampus sekolah:
public enum Role {
   STUDENT,
   TEACHER,
   DIRECTOR,
   SECURITY_GUARD
}
Tembung-tembung sing ditulis nganggo huruf kapital yaiku konstanta enumerasi. Dheweke diumumake kanthi cara sing disederhanakake, tanpa operator anyar . Nggunakake enumerasi nggawe urip luwih gampang amarga bisa nyegah kesalahan lan kebingungan ing jeneng (amarga dhaptar kasebut mung nemtokake nilai sing bener). Kanggo kula, dheweke trep banget ing konstruksi switch .

67. Apa Enum bisa ngetrapake antarmuka (nggunakake tembung kunci implements)?

ya wis. Sawise kabeh, enum kudu makili luwih saka mung set pasif (kayata peran ing kampus sekolah). Ing Jawa, bisa makili obyek sing luwih rumit, mula sampeyan kudu nambah fungsi tambahan. Iki uga ngidini sampeyan njupuk kauntungan saka polimorfisme kanthi ngganti nilai enum ing panggonan sing dibutuhake jinis antarmuka sing dileksanakake.

68. Bisa Enum ngluwihi kelas (nggunakake tembung kunci ngluwihi)?

Ora, ora bisa, amarga enum minangka subclass saka kelas standar Enum<T> , ing ngendi T minangka jinis enum. Iki ora luwih saka kelas dhasar umum kanggo kabeh jinis enum ing basa Jawa. Konversi saka enum menyang kelas ditindakake dening compiler Java ing wektu kompilasi. Ekstensi kasebut ora dituduhake kanthi jelas ing kode kasebut, nanging mesthi diwenehake.

69. Apa bisa nggawe Enum tanpa kedadeyan obyek?

Pitakonan iki rada mbingungake, lan aku ora yakin manawa aku ngerti. Aku duwe rong interpretasi: 1. Apa sampeyan bisa duwe enum tanpa nilai? Ya, mesthi, nanging bakal kaya kelas kosong - ora ana gunane, contone
public enum Role {
}
Lan yen kita nelpon:
var s = Role.values();
System.out.println(s);
Kita entuk ing ngisor iki ing konsol:
[Lflyweight.Role;@9f70c54
(Array kosong saka nilai Role ) 2. Apa bisa nggawe enum tanpa operator anyar ? Ya mesthi. Nalika aku ngandika ndhuwur, sampeyan ora nggunakake operator anyar kanggo nilai enum, awit iku nilai statis.

70. Apa kita bisa ngatasi metode toString () Enum?

Ya, mesthi sampeyan bisa ngalahake cara toString () kanggo nemtokake cara nampilake enum nalika metode toString diarani (nalika ngowahi enum dadi string biasa, contone, kanggo output menyang console utawa log).
public enum Role {
   STUDENT,
   TEACHER,
   DIRECTOR,
   SECURITY_GUARD;

   @Override
   public String toString() {
       return "Selected role - " + super.toString();
   }
}
Iku kabeh kanggo kula dina iki. Nganti bagean sabanjure!
Komentar
  • Popular
  • Anyar
  • lawas
Sampeyan kudu mlebu kanggo ninggalake komentar
Kaca iki durung duwe komentar