JavaRush /Blog Jawa /Random-JV /Analisis pitakonan lan wangsulan saka wawancara kanggo pa...

Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa. Bagian 7

Diterbitake ing grup
Hey kabeh! Pemrograman kebak pitfalls. Lan meh ora ana topik sing sampeyan ora bakal kesandhung lan nabrak. Iki utamané bener kanggo pamula. Cara mung kanggo nyuda iki yaiku sinau. Utamane, iki ditrapake kanggo analisis rinci babagan topik sing paling dhasar. Dina iki aku terus nganalisa 250+ pitakonan saka wawancara pangembang Jawa, sing nyakup topik dhasar kanthi apik. Aku kaya kanggo Wigati sing dhaftar uga ngemot sawetara pitakonan non-standar sing ngijini sampeyan kanggo ndeleng topik umum saka amba beda.Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 7 - 1

62. Apa iku blumbang senar lan apa perlu?

Ing memori ing Jawa (Heap, sing bakal kita pirembagan mengko) ana area - String pool , utawa string pool. Iki dirancang kanggo nyimpen nilai senar. Ing tembung liyane, nalika sampeyan nggawe senar tartamtu, contone liwat kuotasi pindho:
String str = "Hello world";
mriksa digawe kanggo ndeleng yen blumbang senar wis Nilai diwenehi. Yen mangkono, variabel str diwenehi referensi kanggo nilai kasebut ing blumbang. Yen ora, nilai anyar bakal digawe ing blumbang, lan referensi kanggo iku bakal diutus kanggo variabel str . Ayo ndeleng conto:
String firstStr = "Hello world";
String secondStr = "Hello world";
System.out.println(firstStr == secondStr);
bener bakal ditampilake ing layar . Kita elinga yen == mbandhingake referensi-tegese loro referensi iki nuduhake nilai sing padha saka blumbang senar. Iki rampung supaya ora kanggo gawé akeh obyek podho rupo saka jinis String ing memori, amarga kita elinga, String kelas immutable, lan yen kita duwe akeh referensi kanggo Nilai padha, ana apa-apa salah karo. Ora bisa maneh kahanan sing ngganti nilai ing sak panggonan ndadékaké owah-owahan kanggo sawetara pranala liyane bebarengan. Nanging, yen kita nggawe string nggunakake anyar :
String str = new String("Hello world");
obyek kapisah bakal digawe ing memori sing bakal nyimpen Nilai senar iki (lan ora Matter apa kita wis duwe nilai kuwi ing blumbang senar). Minangka konfirmasi:
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 nilai palsu , tegese kita duwe telung nilai sing beda-beda ing kene sing dirujuk. Bener, iki sebabe disaranake nggawe senar mung nggunakake kuotasi kaping pindho. Nanging, sampeyan bisa nambah (utawa entuk referensi) nilai menyang blumbang string nalika nggawe obyek nggunakake new . Kanggo nindakake iki, kita nggunakake metode kelas string - intern() . Cara iki kanthi paksa nggawe nilai ing blumbang senar, utawa entuk link yen wis disimpen ing kono. 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);
Akibaté, kita bakal nampa telung nilai sing bener ing konsol , sing tegese kabeh telung variabel kasebut nuduhake senar sing padha.Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 7 - 2

63. Apa pola GOF digunakake ing blumbang senar?

Pola GOF katon kanthi jelas ing blumbang senar - flyweight , utawa disebut settler. Yen sampeyan ndeleng template liyane ing kene, nuduhake ing komentar. Inggih, ayo ngomong babagan cithakan sing entheng. Ringan minangka pola desain struktural ing ngendi obyek sing nampilake dhewe minangka conto unik ing macem-macem panggonan ing program kasebut, nyatane ora kaya ngono. Entheng ngirit memori kanthi nuduhake kahanan obyek sing dienggo bareng, tinimbang nyimpen data sing padha ing saben obyek. Kanggo ngerti inti, ayo goleki conto sing paling gampang. Ayo kita duwe antarmuka karyawan:
public interface Employee {
   void work();
}
Lan ana sawetara implementasine, contone, pengacara:
public class Lawyer implements Employee {

   public Lawyer() {
       System.out.println("Юрист взят в штат.");
   }

   @Override
   public void work() {
       System.out.println("Решение юридических вопросов...");
   }
}
Lan akuntan:
public class Accountant implements Employee{

   public Accountant() {
       System.out.println("Бухгалтер взят в штат.");
   }

   @Override
   public void work() {
       System.out.println("Ведение бухгалтерского отчёта....");
   }
}
Cara kasebut banget kondisional: kita mung kudu ndeleng manawa ditindakake. Kahanan sing padha ditrapake kanggo konstruktor. Thanks kanggo output console, kita bakal weruh nalika obyek anyar digawe. Kita uga duwe departemen pegawe, kang tugas kanggo ngetokake pegawe dijaluk, lan yen ora ana, ngrekrut wong lan ngetokake kanggo nanggepi panjalukan:
public class StaffDepartment {
   private Map<String, Employee> currentEmployees = new HashMap<>();

   public Employee receiveEmployee(String type) throws Exception {
       Employee result;
       if (currentEmployees.containsKey(type)) {
           result = currentEmployees.get(type);
       } else {
           switch (type) {
               case "Бухгалтер":
                   result = new Accountant();
                   currentEmployees.put(type, result);
                   break;
               case "Юрист":
                   result = new Lawyer();
                   currentEmployees.put(type, result);
                   break;
               default:
                   throw new Exception("Данный сотрудник в штате не предусмотрен!");
           }
       }
       return result;
   }
}
Tegese, logika iku prasaja: yen ana unit sing diwenehake, bali maneh; yen ora, gawe, selehake ing panyimpenan (kaya cache) lan bali maneh. Saiki ayo ndeleng cara kerjane:
public static void main(String[] args) throws Exception {
   StaffDepartment staffDepartment = new StaffDepartment();
   Employee empl1  = staffDepartment.receiveEmployee("Юрист");
   empl1.work();
   Employee empl2  = staffDepartment.receiveEmployee("Бухгалтер");
   empl2.work();
   Employee empl3  = staffDepartment.receiveEmployee("Юрист");
   empl1.work();
   Employee empl4  = staffDepartment.receiveEmployee("Бухгалтер");
   empl2.work();
   Employee empl5  = staffDepartment.receiveEmployee("Юрист");
   empl1.work();
   Employee empl6  = staffDepartment.receiveEmployee("Бухгалтер");
   empl2.work();
   Employee empl7  = staffDepartment.receiveEmployee("Юрист");
   empl1.work();
   Employee empl8  = staffDepartment.receiveEmployee("Бухгалтер");
   empl2.work();
   Employee empl9  = staffDepartment.receiveEmployee("Юрист");
   empl1.work();
   Employee empl10  = staffDepartment.receiveEmployee("Бухгалтер");
   empl2.work();
}
Lan ing console, bakal ana output:
Pengacara wis nyewa. Ngatasi masalah hukum ... Akuntan wis nyewa. Njaga laporan akuntansi.... Ngatasi masalah hukum... Njaga laporan akuntansi.... Ngatasi masalah hukum... Njaga laporan akuntansi.... Ngatasi masalah hukum... Njaga laporan akuntansi.... Ngatasi masalah hukum ... Njaga laporan akuntansi ...
Kaya sing sampeyan ngerteni, mung rong obyek sing digawe, sing digunakake kaping pirang-pirang. Conto kasebut gampang banget, nanging kanthi jelas nuduhake carane nggunakake cithakan iki bisa ngirit sumber daya kita. Ya, kaya sing sampeyan ngerteni, logika pola iki meh padha karo logika kolam asuransi. Sampeyan bisa maca liyane babagan jinis pola GOF ing artikel iki .Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 7 - 3

64. Kepiye carane mbagi senar dadi bagean? Mangga wenehi 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);
regex minangka pemisah baris - sawetara ekspresi reguler sing mbagi senar dadi array senar, contone:
String str = "Hello, world it's Amigo!";
String[] arr = str.split("\\s");
for (String s : arr) {
  System.out.println(s);
}
Ing ngisor iki bakal dadi output menyang konsol:
Halo, jagad iki Amigo!
Tegese, nilai string kita dipérang dadi array strings lan separator minangka spasi (kanggo pamisahan, kita bisa nggunakake ekspresi reguler non-spasi "\\s" lan mung ekspresi string " " ). Cara kapindho, overloaded nduweni argumen tambahan - limit . watesan - nilai maksimum sing diijini saka array sing diasilake. Sing, nalika senar wis dipérang dadi jumlah maksimum allowable saka substrings, bakal ora ana pisah maneh, lan unsur pungkasan bakal duwe "sisa" saka senar kamungkinan under-split. 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 alangan , unsur pungkasan Uploaded bisa dipérang dadi telung substrings.Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 7 - 4

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

Ana sawetara alasan kanggo milih Uploaded kanggo senar nalika nyimpen sandi: 1. String pool lan senar immutability. Nalika nggunakake array ( char[] ), kita bisa kanthi jelas mbusak data kasebut sawise rampung. Uga, kita bisa nulis ulang array kaya sing dikarepake, lan tembung sandhi sing bener ora ana ing ngendi wae ing sistem, sanajan sadurunge koleksi sampah (cukup kanggo ngganti sawetara sel dadi nilai sing ora bener). Ing wektu sing padha, String minangka kelas sing ora bisa diganti. Yaiku, yen kita pengin ngganti regane, kita bakal entuk sing anyar, dene sing lawas bakal tetep ana ing blumbang senar. Yen kita arep kanggo mbusak Nilai String sandi, iki bisa dadi tugas banget angel, awit kita kudu uwuh kanggo mbusak Nilai saka blumbang String , lan ana kemungkinan dhuwur sing Nilai String iki bakal tetep ana kanggo a dangu. Yaiku, ing kahanan iki, String luwih murah tinimbang susunan char babagan keamanan panyimpenan data. 2. Yen nilai String ora sengaja metu menyang console (utawa log), nilai kasebut bakal ditampilake:
String password = "password";
System.out.println("Пароль - " + password);
Output konsol:
Sandi
Ing wektu sing padha, yen sampeyan ora sengaja ngasilake array menyang konsol:
char[] arr = new char[]{'p','a','s','s','w','o','r','d'};
System.out.println("Пароль - " + arr);
Bakal ana gobbledygook sing ora bisa dingerteni ing konsol:
Sandi - [C@7f31245a
Bener ora gobbledygook, nanging: [C iku jeneng kelas punika char array , @ punika separator a, ngiring dening 7f31245a punika heksadesimal hashcode. 3. Dokumen resmi, Pandhuan Arsitektur Kriptografi Jawa, kanthi tegas nyebutake nyimpen sandhi ing char [] tinimbang String : "Iku katon logis kanggo ngumpulake lan nyimpen tembung sandhi ing obyek jinis java.lang.String . Nanging, ana caveat ing kene: Obyek string ora bisa diganti, yaiku, ora ana cara sing ditetepake kanggo ngidini isi obyek String bisa diowahi (ditimpa) utawa dibatalake sawise digunakake. Fitur iki ndadekake obyek String ora cocog kanggo nyimpen informasi sensitif kayata sandhi pangguna. Nanging, sampeyan kudu tansah ngumpulake lan nyimpen informasi keamanan sensitif ing array karakter.Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 7 - 5

Enum

66. Andharan ngenani Enum ing basa Jawa

Enum minangka enumerasi, sakumpulan konstanta senar sing digabung karo jinis umum. Diumumake liwat tembung kunci - enum . Iki minangka conto karo enum - peran sing sah ing sekolah tartamtu:
public enum Role {
   STUDENT,
   TEACHER,
   DIRECTOR,
   SECURITY_GUARD
}
Tembung sing ditulis nganggo huruf kapital yaiku konstanta enumerasi sing padha sing diumumake kanthi cara sing disederhanakake, tanpa nggunakake operator anyar . Nggunakake enumerasi nemen nyederhanakake urip, amarga mbantu ngindhari kesalahan lan kebingungan ing jeneng (amarga mung ana dhaptar nilai tartamtu). Secara pribadi, aku nemokake dheweke trep banget nalika digunakake ing desain logika Switch .

67. Bisa Enum ngleksanakake antarmuka?

ya wis. Sawise kabeh, enumerasi kudu makili luwih saka koleksi pasif (kayata peran). Ing Jawa, padha bisa makili obyek liyane Komplek karo sawetara fungsi, supaya sampeyan bisa uga kudu nambah fungsi tambahan kanggo wong-wong mau. Iki uga bakal ngidini sampeyan nggunakake kemampuan polimorfisme kanthi ngganti nilai enum ing papan sing dibutuhake jinis antarmuka sing diimplementasikake.

68. Apa Enum bisa nambah kelas?

Ora, ora bisa, amarga enum minangka subkelas standar saka kelas umum Enum <T> , ing ngendi T nuduhake jinis enum umum. Iku ora liya nanging kelas dhasar umum kanggo kabeh jinis enum basa Jawa. Konversi enum menyang kelas ditindakake dening compiler Java ing wektu kompilasi. Ekstensi iki ora dituduhake kanthi jelas ing kode kasebut, nanging tansah ora katon.

69. Apa bisa nggawe Enum tanpa conto obyek?

Kanggo kula, pitakonan iki rada aneh, utawa aku ora ngerti. Aku duwe rong interpretasi: 1. Apa ana enum tanpa nilai - ya mesthine kaya kelas kosong - ora ana gunane:
public enum Role {
}
Lan nelpon:
var s = Role.values();
System.out.println(s);
Kita bakal nampa ing console:
[Lflyweight.Role;@9f70c54
(Array kosong saka nilai Role ) 2. Apa bisa nggawe enum tanpa operator anyar - ya, mesthi. Kaya sing dakkandhakake ing ndhuwur, sampeyan ora perlu nggunakake operator anyar kanggo nilai enum (enumerasi) , amarga iki minangka nilai statis.

70. Kita bisa ngalahake toString () cara kanggo Enum?

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

   @Override
   public String toString() {
       return "Выбрана роль - " + super.toString();
   }
}
Iku kabeh kanggo dina iki, nganti bagean sabanjure!Analisis pitakonan lan wangsulan saka wawancara kanggo pangembang Jawa.  Bagean 7 - 6
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION