สิ่งที่ต้องทบทวนก่อนการสัมภาษณ์ Java
ที่มา: สื่อ ในบทความนี้ คุณจะพบกับ 17 เคล็ดลับจากนักพัฒนาที่มีประสบการณ์ซึ่งจะช่วยคุณในการสัมภาษณ์ Java
-
คลาสObjectอยู่ที่รูทของลำดับชั้นคลาส Java คลาส Java ทั้งหมดติดตามกลับไปยังObject แม้ว่าคลาสจะไม่ขยายคลาสใด ๆ อย่างชัดเจน แต่Object ก็ขยายออก ไป อย่างไรก็ตาม คลาสมีอิสระที่จะขยายObjectอย่างชัดเจน
-
ใน Java คุณสามารถขยายได้เพียงคลาสเดียว (ไม่อนุญาตให้มีการสืบทอดหลายรายการเนื่องจากความคลุมเครือ) อย่างไรก็ตาม คลาสสามารถใช้อินเทอร์เฟซจำนวนเท่าใดก็ได้ในเวลาเดียวกัน
-
อินเทอร์เฟซขยายอินเทอร์เฟซอื่น (ตรงข้ามกับการใช้งาน)
-
มีตัวดัดแปลงการเข้าถึงสี่ตัวใน Java: สาธารณะ (ใช้ได้กับทุกคน), ป้องกัน (มีให้สำหรับคลาสย่อยเท่านั้น), ส่วนตัว (มีให้เฉพาะภายในคลาสเดียว), ค่าเริ่มต้น (มีให้ในแพ็คเกจเดียว) ควรสังเกตว่าคลาสย่อยของคลาสเดียวกันสามารถอยู่ในแพ็คเกจที่แตกต่างกันได้ คลาสพาเรนต์และคลาสย่อยไม่จำเป็นต้องเป็นส่วนหนึ่งของแพ็คเกจเดียวกัน
-
สตริงคลาสไม่เปลี่ยนรูป ความไม่เปลี่ยนรูปหมายความว่า คลาส String เองไม่ได้จัดเตรียมวิธี การใด ๆ สำหรับการแทนที่ค่าใน การอ้างอิง String หากคุณ ต้องการแทนที่ค่าของการอ้างอิงสตริง คุณต้องกำหนดค่าอย่างชัดเจนโดยใช้ ตัวดำเนินการ = เปรียบเทียบสิ่งนี้กับ คลาส StringBufferหรือStringBuilderซึ่งมีวิธีการเช่น append ดังนั้นคุณไม่จำเป็นต้องใช้ ตัวดำเนินการ = ที่ นั่น
-
ConcurrentHashMap มี ประสิทธิภาพมากกว่าHashtable ConcurrentHashMapดำเนินการในส่วนต่างๆ ของโครงสร้างข้อมูลพื้นฐาน ซึ่งการดำเนินการเขียนจะล็อกเฉพาะส่วนที่ระบุเท่านั้น (ไม่ว่าคีย์จะอยู่ในส่วนใดก็ตาม) อย่างไรก็ตาม ในHashtableโครงสร้างข้อมูลทั้งหมดจะถูกล็อค
-
ConcurrentHashMapช้ากว่าHashMapเนื่องจากHashMapไม่ได้ใช้ความปลอดภัยของเธรด HashMapอาจส่งConcurrentModificationExceptionหากเธรดวนซ้ำผ่านHashMapและเธรดอื่นพยายามแก้ไขHashMapเดียวกัน ConcurrentHashMapจะไม่ส่งข้อยกเว้นที่นี่
-
จะใช้ความเท่าเทียมกันของสองวัตถุในคลาสเดียวกันที่คุณกำหนดได้อย่างไร คำตอบ: ซึ่งสามารถทำได้โดยการแทนที่hashcode() วิธี การ
-
ผลลัพธ์ เริ่มต้นของ เมธอด toString() คืออะไร? คำตอบ: เป็นการต่อชื่อคลาส เครื่องหมาย @และ ค่า hashcode() เข้าด้วย กัน
-
จะใช้ความหลากหลายใน Java ได้อย่างไร? วิธีหนึ่งในการทำเช่นนี้คือการโอเวอร์โหลดวิธีการนี้ อีกวิธีหนึ่งคือการแทนที่วิธีการ
-
คุณจะเรียกคอนสตรัคเตอร์ซูเปอร์คลาสจากคลาสย่อยได้อย่างไร คำตอบ: ซึ่งสามารถทำได้โดยใช้ คำ หลักsuper() เมธอดsuper()ที่ไม่มีอาร์กิวเมนต์จะถูกเรียกเสมอ แม้ว่าจะไม่ได้ระบุไว้อย่างชัดเจนก็ตาม ต้องระบุ เมธอดsuper()พร้อมอาร์กิวเมนต์อย่างชัดเจน การเรียกsuper() (มีหรือไม่มีอาร์กิวเมนต์) จะต้องเป็นบรรทัดแรกในตัวสร้างคลาสย่อยเสมอหากจำเป็นต้องเรียก
-
ข้อยกเว้นที่ถูกตรวจสอบและไม่ถูกตรวจสอบคืออะไร? คำตอบ: ข้อยกเว้นที่ถูกตรวจสอบคือข้อยกเว้นที่ต้องประกาศหรือตรวจพบในวิธีที่คาดว่าจะถูกโยนทิ้ง ข้อยกเว้นที่ไม่ได้ตรวจสอบไม่มีข้อจำกัดนี้ java.io.IOExceptionเป็นตัวอย่างของข้อยกเว้นที่เลือก ข้อยกเว้นที่ไม่ได้ตรวจ สอบมาจาก คลาส RunTimeException
-
คลาสรูทของลำดับชั้นข้อยกเว้นคือThrowable (ซึ่งจะขยายObject ออกไปโดยปริยาย ) ข้อยกเว้นและ ข้อ ผิดพลาดมาจากThrowable
-
ตั้งแต่ Java 8 วิธีการสามารถนำไปใช้ในอินเทอร์เฟซได้ วิธีการเริ่มต้นและวิธีการคงที่สามารถมีการใช้งานได้
-
คลาสที่มีคุณสมบัติเป็นนามธรรมไม่สามารถสร้างอินสแตนซ์ได้ คลาสใด ๆ ที่ไม่มีเนื้อความสำหรับวิธีการใด ๆ จะต้องประกาศให้เป็นนามธรรม นักพัฒนาสามารถประกาศคลาสให้เป็นนามธรรมได้แม้ว่าเมธอดทั้งหมดจะมีเนื้อหาก็ตาม อย่างไรก็ตาม ไม่แนะนำอย่างยิ่ง เพราะในกรณีนี้ คลาสจะไม่สามารถสร้างอินสแตนซ์ได้
-
ไม่สามารถขยายชั้นเรียนสุดท้าย ได้ ตัวแปรสุดท้ายไม่สามารถกำหนดค่าอื่นได้ วิธีสุดท้ายไม่สามารถแทนที่ได้
-
คำหลักใดที่จำเป็นใน การสร้าง try-catch- finally นี่อาจเป็นtry-catch , try-finallyหรือทั้งสามอย่าง ในกรณีนี้catchไม่ใช่คีย์เวิร์ดที่จำเป็น
ความแตกต่างระหว่าง enum และ iterator ใน Java คืออะไร?
ที่มา: Rrtutors โพสต์นี้นำเสนอให้คุณอภิปรายถึงความแตกต่างระหว่างการแจงนับและการวนซ้ำใน Java แพ็คเกจJava.utilจัดเตรียมอินเทอร์เฟซสองแบบสำหรับการสำรวจองค์ประกอบของ อ็อบเจ็กต์ คอลเลกชัน : การแจงนับและตัววนซ้ำ แม้ว่าทั้งสองจะผ่าน วัตถุ Collectionแต่ก็มีความแตกต่างบางประการระหว่างกันความแตกต่างระหว่าง enum และตัววนซ้ำ
-
เวลาที่เพิ่มใน JDK:มีการแนะนำในเวลาที่ต่างกัน Enum เปิดตัวใน JDK 1.0 ในขณะที่ตัววนซ้ำเปิดตัวใน JDK 1.2
-
การลบองค์ประกอบ:นี่คือข้อแตกต่างหลักระหว่างทั้งสอง ในอินเทอร์เฟ ซตัววน ซ้ำ เราสามารถลบองค์ประกอบเมื่อวนซ้ำบน วัตถุ Collectionในขณะที่เราไม่สามารถเปลี่ยนแปลงได้เมื่อวนซ้ำบนวัตถุCollectionโดยใช้การแจงนับ เนื่องจาก อินเทอร์เฟซ Iteratorมี เมธอด Remove() แต่ อินเทอร์เฟซการแจงนับไม่มี
-
ประเภทการดำเนินการ:ตัววนซ้ำมีประเภทการดำเนินการที่ล้มเหลวอย่างรวดเร็ว และการแจงนับมีประเภทการดำเนินการที่ไม่ปลอดภัย เป็นผลให้ Iterator โยนConcurrentModificationException เมื่อคอลเลกชันได้รับการแก้ไขในระหว่างการวนซ้ำ เว้นแต่ว่ามีการใช้เมธอด Remove()ของตัวเองในขณะที่การแจงนับจะไม่เกิดข้อยกเว้นใดๆ เมื่อมีการแก้ไขคอลเลกชันในระหว่างการวนซ้ำ
ตัวอย่างการแจงนับและตัววนซ้ำใน Java
ตัวอย่างการแจงนับ
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;
public class Enumeration_Example {
public static void main(String[] args) {
List laptoplist = new ArrayList(Arrays.asList( new String[] {"Samsung", "Lenovo", "Apple", "HP"}));
Vector vectali = new Vector(laptoplist);
delete(vectali, "Samsung");
}
private static void delete(Vector vectali, String laptop) {
Enumeration lapi = vectali.elements();
while (lapi.hasMoreElements()) {
String s = (String) lapi.nextElement();
if (s.equals(laptop)) {
vectali.remove(laptop);
}
}
System.out.println("The Laptop brands includes:");
lapi = vectali.elements();
while (lapi.hasMoreElements()) {
System.out.println(lapi.nextElement());
}
}
}
บทสรุป:
ตัวอย่างตัววนซ้ำ:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
public class Iterator_example {
public static void main(String[] args) {
List laptoplist = new ArrayList(Arrays.asList( new String[] {"Samsung", "Lenovo", "HP", "Apple"}));
Vector vectali = new Vector(laptoplist);
delete(vectali, "HP");
}
private static void delete(Vector vectali, String name) {
Iterator a = vectali.iterator();
while (a.hasNext()) {
String s = (String) a.next();
if (s.equals(name)) {
a.remove();
}
}
// Display the names
System.out.println("The laptop brand includes:");
a = vectali.iterator();
while (a.hasNext()) {
System.out.println(a.next());
}
}
}
บทสรุป:
GO TO FULL VERSION