คำถามนักพัฒนา Java / Java EE ที่ดีทุกคนควรตอบคำถามได้ดี? [ปิด]


138

ฉันจะต้องตอบคำถามนักพัฒนาสุทธิที่ดีทุกคนควรจะสามารถตอบและรู้สึกประทับใจอย่างมากกับเนื้อหาและวิธีการของคำถามนี้และด้วยจิตวิญญาณเดียวกันฉันกำลังถามคำถามนี้สำหรับนักพัฒนา Java / Java EE

คุณคิดว่ามีคำถามอะไรที่โปรแกรมเมอร์ Java / Java EEที่ดีควรตอบคำถามได้?

ฉันกำลังทำเครื่องหมายคำถามนี้เป็นวิกิชุมชนเพราะไม่เจาะจงผู้ใช้และมีเป้าหมายที่จะให้บริการชุมชนการเขียนโปรแกรมในวงกว้าง

มองไปข้างหน้าสำหรับการตอบสนองที่น่าอัศจรรย์

แก้ไข : โปรดตอบคำถามด้วยเช่นกันตามที่แนะนำในความคิดเห็นเพื่อให้ผู้คนสามารถเรียนรู้สิ่งใหม่เกี่ยวกับภาษาได้เช่นกัน


3
ทำไมคำถามนี้ไม่สามารถรับการตอบกลับที่คล้ายกันกับคำถาม. Net
ราเชล

5
ท่านผู้ดี :) คำถาม. Net ได้ถูกถามเมื่อปีที่แล้วและคำถามนี้มีอายุเพียงหนึ่งวันและคุณกำลังเปรียบเทียบคำตอบ
zapping

1
ทำไมคุณไม่แก้ไขคำถามของคุณและเพิ่มประโยค "โปรดตอบคำถามของคุณเอง" เพื่อให้ผู้คนสามารถเรียนรู้บางสิ่ง (ใหม่)
r3zn1k

9
"ตัวย่อปัจจุบันของ Enterprise Edition คืออะไร";)
Bozho

17
เรื่องราวเล็ก ๆ น้อย ๆ ของ Albert Einstein .. หนึ่งในเพื่อนร่วมงานของ Einstein ถามเขาถึงหมายเลขโทรศัพท์ของเขาในวันหนึ่ง Einstein เอื้อมมือไปหาสมุดโทรศัพท์และเงยหน้าขึ้นมอง "คุณจำเบอร์ของตัวเองไม่ได้เหรอ?" ชายคนนั้นถามตกใจ "ไม่" Einstein ตอบ "ทำไมฉันต้องจำบางสิ่งบางอย่างที่ฉันสามารถหาได้จากหนังสือได้ง่าย ๆ ?" ฉันไปถึงทุกคน;)? ใช่ฉันรู้แล้ว Einstein ไม่ได้เผชิญหน้ากับผู้สัมภาษณ์ ...
SB

คำตอบ:


83

ความสัมพันธ์ระหว่าง hashCode () และเท่ากับ () คืออะไร? ความสำคัญของวิธีการเหล่านี้คืออะไร? ข้อกำหนดสำหรับการนำไปใช้มีอะไรบ้าง


ใช่อย่างน้อย dev ทุกคนควรตระหนักถึงปัญหาแม้ว่าคุณจะไม่จำเป็นต้องเผชิญกับปัญหาเหล่านั้นในทางปฏิบัติ
sleske

3
เท่ากับ () และ hashCode () ใน java @ technofundo.com/tech/java/equalhash.html
pramodc84

70

อะไรคือความแตกต่างระหว่างชุดแผนที่และรายการ?

ฉันยังคงประหลาดใจที่มีคนจำนวนมากที่ไม่รู้ว่าสิ่งนี้ในการสัมภาษณ์ทางโทรศัพท์


8
ได้รับ แต่มันเป็นเรื่องของ 20 วินาทีในการดูเอกสารบนเน็ต ("กรอบการรวบรวมคอลเลกชันของจาวา") ผู้คนที่คุ้มค่าจำนวนมากอาจไม่สนใจที่จะเก็บไว้ในหน่วยความจำ
Manur

127
ไม่ขอโทษอย่าซื้อมันเป็นความรู้พื้นฐานที่นักพัฒนาทุกคนควรรู้
Jon

15
ฉันจะไปไกลเพื่อบอกใครแม้แต่คิดเกี่ยวกับงานในซอฟต์แวร์ต้องเข้าใจไม่เพียงแค่นั้น แต่ยังแตกต่างระหว่างรายการต่าง ๆ (ArrayList / LinkedList) ไม่จำเป็นต้องมีการนำไปใช้ที่ดีที่สุดหรือแม้กระทั่งสัญกรณ์ O (n) แต่ต้องเข้าใจว่าเมื่อไรที่ควรใช้อะไร
สาธุคุณกอนโซ

11
+1 @ จอน: ฉันมักจะสมัครเป็นสมาชิกของ "ความคิดที่ไม่จำเป็นต้องจดจำรายละเอียด" แต่ถ้าคุณไม่รู้ถึงความแตกต่างทางแนวคิดพื้นฐานระหว่างอินเทอร์เฟซพื้นฐานเหล่านั้นแสดงว่าคุณไม่ใช่นักพัฒนา Java ที่ดีจริงๆ
โจอาคิมซาวเออร์

13
@Joachim: คุณสามารถวางคำว่า "Java" จากคำสั่งของคุณ ชุดแผนที่และรายการเป็นแนวคิดพื้นฐานของอัลกอริทึม
CPerkins

44

อินเตอร์เฟสสามารถขยายหลายอินเตอร์เฟสได้หรือไม่?

คนส่วนใหญ่ตอบว่า "ไม่" เพราะพวกเขารู้ว่าจาวาไม่มีมรดกหลายอย่าง แต่อินเทอร์เฟซยังสามารถขยายหลายอินเทอร์เฟซ (แต่คลาสไม่สามารถขยายหลายคลาส) สิ่งนี้ไม่ได้นำไปสู่ปัญหาเพชร

ถ้าคำตอบคือ "ไม่" ผู้สัมภาษณ์ควรถามว่า "ทำไมจะมันเป็นสิ่งต้องห้าม?" จากนั้นคุณเริ่มคิดเกี่ยวกับมันและคุณควรตระหนักว่าไม่มีปัญหากับมัน

ดังนั้นคุณได้เรียนรู้บางสิ่ง (ด้วยตัวเอง) ในการสัมภาษณ์และคุณได้แสดงผู้สัมภาษณ์ว่าคุณสามารถให้เหตุผลเกี่ยวกับชั้นเรียนวัตถุการถ่ายทอดทางพันธุกรรมความแตกต่าง ฯลฯ จริง ๆ แล้วมันดีกว่าผู้สมัครที่รู้คำตอบด้วยใจจริง ๆ เข้าใจว่าทำไม


ฉันสับสน c ++ วิทยากรเมื่อวานนี้ที่มีปัญหาเพชรมรดกเธอไม่เคยรู้เกี่ยวกับมัน :) ทั้งหมด
Esko

2
ฉันเคยถามคำถามนี้และฉันตอบว่า "ไม่" ฉันคิดว่ามันเป็นความเครียดและฉันก็ตอบเร็วเกินไป มันยากที่จะรู้คำตอบสำหรับสิ่งที่คุณไม่เคยใช้
IAdapter

1
ฉันอธิบายเพิ่มเติมในเนื้อหาอีกเล็กน้อย การตอบว่า "ไม่" ก็โอเค สิ่งที่ดีกับคำถามนี้คือมันเป็นวิธีที่ดีในการกระตุ้นการอภิปรายเกี่ยวกับแนวคิด OO และดูว่าผู้สมัครมีเหตุผลอย่างไร หากผู้สัมภาษณ์คุณต้องการเพียงแค่ได้ยินคำว่า "ใช่" มันก็ไร้ประโยชน์ การสืบทอดอินเทอร์เฟซหลายอย่างนั้นไม่ได้เป็นเรื่องธรรมดา
ewernli

3
คำถามที่ซับซ้อนกว่านี้คือ "java รองรับมรดกหลายอย่างหรือไม่" คำตอบคือ "sort" สำหรับอินเตอร์เฟสเท่านั้น
nsfyn55

23

การใช้คำหลักสุดท้ายในการเรียกใช้เมธอด ตัวอย่างเช่นทำไมการทดสอบวิธีการด้านล่างรหัสไม่ให้ข้อผิดพลาดในการรวบรวมแม้จะมีการใช้คุณสมบัติสุดท้ายสำหรับพารามิเตอร์วิธี

class Name {
    private String name;

    public Name (String s) {
        this.name = s;
    }

    public void setName(String s) {
        this.name = s;
    }
}

private void test (final Name n) {
    n.setName("test");
}


ฉันชอบที่จะรู้คำตอบสำหรับคำถามนี้ มันฟังดูน่าสนใจมาก
Rachel

@ ราเชล: เหตุผลเป็นเพราะfinalคำหลักนำไปใช้กับNameวัตถุไม่ใช่nameสาขาของชั้นเรียนName
ryanprayogo

20
พารามิเตอร์nถูกประกาศเป็นขั้นสุดท้ายซึ่งหมายความว่าไม่สามารถกำหนดใหม่ในtestเนื้อหาของเมธอดได้ ไม่ก่อให้เกิดข้อผิดพลาดเนื่องจากวิธีการtestไม่พยายามกำหนดพารามิเตอร์ใหม่เพียงตั้งค่าคุณสมบัติบนพารามิเตอร์ ... n = new Name("test");จะทำให้เกิดข้อผิดพลาดในการคอมไพล์ ...
rjohnston

7
การเพิ่มความคิดเห็นของ @ rjohnston: การใช้งานขั้นสุดท้ายสำหรับพารามิเตอร์ method ไม่รับประกันความไม่แน่นอนของอินสแตนซ์ของคลาส หากมีความจำเป็นในการเปลี่ยนแปลงไม่ได้คลาส (ชื่อในกรณีปัจจุบัน) ควรได้รับการออกแบบให้ (ตัวอย่างเช่นในกรณีปัจจุบันไม่ได้จัดให้มีสุนัข)
sateesh

ขอบคุณทุกท่านที่แบ่งปันข้อมูลที่มีค่า ฉันขอขอบคุณที่คุณป้อนข้อมูลเกี่ยวกับเรื่องนี้
Rachel

19

สิ่งหนึ่งที่แน่นอนคือการเปรียบเทียบสตริง ความแตกต่างระหว่าง

String helloWorld = "Hello World";
helloWorld == "Hello World";
"Hello World". เท่ากับ (helloWorld);


14
ค่อนข้างแน่ใจว่าคุณต้องทำอะไรบางอย่างเช่นสตริงใหม่ ("Hello World") ค่าคงที่ของสตริงไม่ถูกดึงออกมาจากพูลเหมือนว่าเอฟเฟกต์ฝึกงาน () จะมีดังนั้นจึงทำให้ทั้งสองข้อความเป็นจริงหรือไม่
Steven Schlansker


17

เคล็ดลับคำถาม: พารามิเตอร์ชนิดใดที่ถูกส่งผ่านโดยการอ้างอิงใน Java?

มันน่าอัศจรรย์ว่ามีกี่คนที่ยังคงนกแก้ว "ดั้งเดิมถูกส่งผ่านโดยค่าวัตถุจะถูกส่งผ่านโดยอ้างอิง" มนต์


4
ฉันสงสัยว่าคำตอบที่ถูกต้องเป็นคำตอบที่ให้สัมภาษณ์เสมอหรือไม่ ในสถานที่ที่ฉันสัมภาษณ์ผู้สัมภาษณ์ก็ชอบสิ่งเดียวกัน
MAK

2
ฉันสังเกตเห็นความแตกต่างระหว่างคนที่เรียนภาษา C เป็นภาษาแรกกับคนที่เรียนภาษา C ++ เป็นภาษาแรกในการตอบคำถามเกี่ยวกับ Java อาจเป็นเพราะผู้ใช้ C ได้รับการสอนว่าการส่งตัวชี้ไปยังค่านั้นเป็น "การส่งผ่านอ้างอิง"
Uri

23
นั่นเป็นคำถามที่โง่เพราะคำตอบที่ "ผิด" น่าจะเป็นเทคนิคที่ถูกต้องถ้าคุณถามว่า "ผลอะไรที่ผ่านการอ้างอิงด้วย" . มันเป็นเพียงเรื่องของการนิยามว่าการส่งผ่านโดยการอ้างอิงนั้นมีค่าเท่าใดในโลกของ Java เนื่องจากมีเพียงวิธีเดียวในการส่งผ่านวัตถุ การเข้าใจสิ่งที่เกิดขึ้นจริง ๆ นั้นสำคัญกว่าการใช้คำจำกัดความของการส่งผ่านโดยอ้างอิงตามที่คุณต้องการ
x4u

3
คำถามนี้เป็นปัญหาอย่างน้อยที่สุดเพราะส่วนใหญ่จะขึ้นอยู่กับคำจำกัดความที่แน่นอนของ "การส่งผ่านค่า" / "การส่งผ่านการอ้างอิง" ซึ่งมักใช้อย่างไม่ถูกต้อง ในขณะที่ฉันยอมรับว่านักพัฒนาที่ดีควรทราบคำจำกัดความมันสำคัญกว่าที่จะเข้าใจผลที่ตามมา หากคุณเข้าใจพฤติกรรมที่แท้จริงของ Java การรู้ว่าชื่อที่ถูกต้องสำหรับแนวคิดนั้นไม่มีความหมายมากนักเพราะไม่ใช่สิ่งที่คุณพูดคุยในทางปฏิบัติเนื่องจากไม่เคยเปลี่ยนแปลง
sleske

3
เอ่อวัตถุจะถูกส่งผ่านโดยอ้างอิงใน Java คุณไม่สามารถส่งผ่านวัตถุตามค่า; เหนือสิ่งอื่นใดวัตถุไม่เคยอยู่บนกอง การอ้างอิงถูกส่งผ่านตามค่าแน่นอน
Sean Owen

17

คุณพูดว่า "ดี", "ผู้พัฒนา" นี่คือ 2 เซ็นต์ของฉันด้วย .. :)

  • "ข้อยกเว้นที่ตรวจสอบแล้ว" หมายความว่าอะไร
  • จะใช้อันไหนดีกว่าและเมื่อใด: ยืนยันหรือข้อยกเว้นเพื่อจัดการกับสภาพที่ไม่คาดคิด
  • ทำไมคลาส String ถึงเป็นที่สุด? (หรือไม่เป็น?;))
  • การรอการแจ้งและการแจ้งเตือนทั้งหมดใน Object Object มีอะไรบ้าง?
  • ทำไมคลาสของเธรดถึงไม่จบ ทำไมฉันถึงขยายเธรด
  • ทำไมจึงมีคลาสสองวัน หนึ่งในแพคเกจ java.util และอีกหนึ่งใน java.sql?
  • จะเกิดอะไรขึ้นถ้ามีการโยนข้อยกเว้นในที่สุดบล็อก? ส่วนที่เหลือจะถูกประหารชีวิตในที่สุดหรือไม่?
  • มีตัวรวบรวมขยะไม่เป็นไร แต่จากนั้นหน่วยความจำรั่วหายไปโดยสิ้นเชิงในโปรแกรม Java? ถ้าไม่เป็นเช่นนั้นได้อย่างไร

สำหรับ J2EE:

  • เป็นการดีที่จะมีตัวแปรอินสแตนซ์ / คงที่ใน servlet หรือไม่? ทำไมจะไม่ล่ะ? แล้วคุณจะเก็บ "สถานะ" ไว้ที่ไหน
  • ดำเนินการตามคำถามข้างต้น: แอปพลิเคชัน "สถานะ" สำหรับ (เว็บ) คืออะไร
  • จะเกิดอะไรขึ้นถ้าฉันเริ่มสร้าง / ปิดการเชื่อมต่อฐานข้อมูลใน "JSP"
  • วิธีจัดการกับข้อยกเว้น JSP มีอะไรบ้าง ลองจับได้หรือไม่ อืม .. มีอะไรอีกไหม?

ฉันสามารถคิดจำนวนมากและอีกมากมายของพวกเขา แต่ตอนนี้จะทำ :)


8
คำตอบจะดีฉันไม่ทราบคำตอบให้บางคน
MAK

การตรวจสอบข้อยกเว้นคือสิ่งที่โปรแกรมต้องมีแผนการจัดการหากเกิดขึ้น หากไม่มีบล็อก try / catch รอบสิ่งที่ส่งข้อยกเว้นที่เลือกโปรแกรมจะไม่คอมไพล์ รอแจ้งเตือนและแจ้งเตือนทั้งหมดสำหรับการซิงโครไนซ์เธรดและใน Java วัตถุทั้งหมดสามารถทำข้อมูลให้ตรงกันได้ ฉันจะขยายเธรด (ตรงข้ามกับการใช้ Runnable) ถ้าแนวคิดต้องการคลาสของเธรดของตัวเองนั่นคือมันต้องทำการจัดการบางอย่างและไม่ได้แสดงถึงภารกิจที่สามารถรันบนเธรดผู้ปฏิบัติงานอื่นได้
ZoFreX

หากมีการโยนข้อยกเว้นในบล็อกในที่สุดแล้วส่วนที่เหลือจะไม่ทำงาน ในโปรแกรม Java "บริสุทธิ์" การรั่วไหลของหน่วยความจำแบบบัญญัติไม่มีอยู่ อย่างไรก็ตามหน่วยความจำยังคงสามารถใช้งานได้ซึ่งไม่ควรหากโครงสร้างข้อมูลมีการอ้างอิงไปยังวัตถุที่ไม่ต้องการอีกต่อไป หากใช้เนทีฟไลบรารี่แล้วทรัพยากรของพวกเขาอาจจำเป็นต้องได้รับการจัดการตัวอย่างเช่นใน SWT มันเป็นสิ่งสำคัญที่จะเรียกว่า. disispose () ในสินทรัพย์บางอย่างเพื่อให้แน่ใจว่าพวกเขาจะไม่รั่วไหล
ZoFreX

2
ใช้การยืนยันสำหรับข้อผิดพลาด "สิ่งนี้ไม่ควรเกิดขึ้น" ซึ่งจะต้องได้รับการจัดการในการพัฒนา ใช้ข้อยกเว้นสำหรับข้อผิดพลาดที่อาจเกิดขึ้นจริงขณะใช้งานจริงและโปรแกรมจะต้องจัดการกับข้อผิดพลาดบางประการ
MatrixFrog

16

String, StringBuffer และ StringBuilder แตกต่างกันอย่างไร?


5
String - คลาสที่ไม่เปลี่ยนรูปแทนสตริง StringBuffer - รูปแบบการสร้างที่นำมาใช้ใน Java รุ่นเก่าที่ประสานในทุกการดำเนินงาน (หรือส่วนใหญ่ของพวกเขา) เพื่อใช้ในการสร้างสตริง StringBuilder - เปิดตัวใน Java 5 (JDK 1.5) คลาสที่แบ่งใช้ StringBuffer API เพื่อใช้ในการสร้างสตริงที่ไม่ซิงโครไนซ์กับทุกการดำเนินการ (หรือส่วนใหญ่) เนื่องจากการสร้าง Strings มีแนวโน้มที่จะเกิดขึ้นในเธรดเดี่ยว StringBuilder จึงเป็นที่ต้องการสำหรับวัตถุประสงค์นี้ใน Java runtimes / JDKs ที่รองรับ
MetroidFan2002

13

"ตัวบอกเกี่ยวกับการปรับใช้คืออะไร"

หากผู้สมัครสั่นอย่างไม่ตั้งใจเขามีประสบการณ์การทำงานกับ 3.0 EJB ก่อน


ทำให้เป็น "ตัวสั่นโดยไม่สมัครใจ + มุมมองอย่างหนัก + ลดลงอย่างมากหลังจากทำซ้ำคำถามนี้อีก 2 ครั้ง" บางครั้งฉันรู้สึกว่าเหตุผล "หนึ่งเดียวเท่านั้น" ที่พวกเขาเพิ่ม / สนับสนุนสิ่งที่ใส่คำอธิบายประกอบทั้งหมด! :)
Elister

12

มีคำถามและบทสัมภาษณ์มากมายที่http://www.techinterviews.com/interview-questions/javaและฉันไม่เห็นคุณค่าในการคัดลอก / วางสิ่งที่เลือก

ไม่ขึ้นอยู่กับคุณที่จะสร้างสิ่งที่คุณคิดว่ามีความสำคัญ โดยส่วนตัวฉันดำเนินการสองขั้นตอนเสมอ: คำถามสองสามข้อแรกเพื่อให้ได้แนวคิดพื้นฐานของประสบการณ์และทักษะจากนั้นจึงเป็นสถานการณ์การแก้ปัญหา ฉันไม่เชื่ออย่างแน่นอนว่าการสามารถตอบคำถามใด ๆ ที่รู้จักทำให้คุณเป็นนักแก้ปัญหาที่ไม่รู้จักดีหรือไม่ดี ดังนั้นฉันชอบที่จะขอให้ผู้คนแก้ไขปัญหาที่กำหนดเพื่อให้ข้อกำหนดบางอย่างแก่พวกเขาและขอให้พวกเขาเขียนรหัส (แต่ไม่ใช่บนกระดาษ) ฉันให้เวลาพวกเขากลับมาหาฉันและตรวจสอบว่าพวกเขาทำมันอย่างไรสไตล์การเขียนรหัสของพวกเขาวิธีที่พวกเขาใช้ API ที่แนะนำ ฯลฯ

คำถามที่ฉันชอบคือ "คุณไม่ชอบอะไรเกี่ยวกับ Java" (ด้วยจิตวิญญาณของสิ่งนี้ ) มันเป็นคำถามที่ยอดเยี่ยมจริง ๆ มันให้ความคิดเห็นทันทีเกี่ยวกับจำนวนผู้สมัครที่ใช้ Java และสำรวจ API และถ้าเขาเพียงแค่นับถือเกี่ยวกับมันหรือไม่ (ตามที่ OP เขียนไว้)

อัปเดต:ตามที่ CPerkins แนะนำให้ใช้ถ้อยคำที่ดีกว่าสำหรับคำถามที่แนะนำข้างต้นอาจเป็น "คุณต้องการเห็นอะไรเปลี่ยนแปลงใน Java มากที่สุด" และแน่นอนฉันชอบวิธีนี้


ฉันไม่ชอบคำถาม "คุณไม่ชอบอะไรเกี่ยวกับ Java" ฉันจะโกหกเพราะฟังดูเหมือนว่า "ทำไมคุณถึงออกจาก บริษัท สุดท้ายของคุณ" รวมทั้งพวกเขาอาจคิดว่า - "ถ้าคุณเกลียดชังจาวาเราจะไม่เสนองานให้คุณ"
IAdapter

@ 01 มันถูกต้อง แต่ฉันไม่เห็นด้วยกับคุณและฉันคิดว่าคุณพลาดจุดที่คำถามนั้น
Pascal Thivent

1
ฉันมักจะเห็นสิ่งนี้ทำให้เหมือน: "สิ่งที่คุณต้องการเห็นมากที่สุดในการเปลี่ยนแปลงใน Java" มากกว่า "ไม่ชอบ"
CPerkins

@ CPerkins นั่นเป็นถ้อยคำที่ดีกว่าจริง ๆ ดีกว่า "ไม่ชอบ" และดีกว่า "เกลียด" มาก (อ้างอิง) ขอบคุณ
Pascal Thivent

11

'ระบบ', 'ออก', 'println' ใน System.out.println คืออะไร จะเกิดอะไรขึ้นเมื่อคุณโทร 'วาง' บน HashMap


คำตอบคืออะไรฉันไม่เคยคิดว่าระบบชั้นใด !! ฉันสงสัยว่ารู้จัก asnwer :)
palAlaa

10
  1. อธิบายตัวดัดแปลงการเข้าถึงต่างๆที่ใช้ใน Java ฉันมีผู้คนจำนวนมากต่อสู้กับเรื่องนี้โดยเฉพาะการเข้าถึงเริ่มต้น
  2. หากคุณสามารถเปลี่ยนสิ่งหนึ่งเกี่ยวกับภาษา Java หรือแพลตฟอร์มสิ่งที่มันจะเป็นอย่างไร นักพัฒนาที่ดีจะได้รับคำตอบที่นี่ในขณะที่ผู้ที่ไม่สนใจการพัฒนาอาจไม่สนใจ
  3. หาก CV ของพวกเขาพูดถึงสิ่งที่พวกเขาใช้ EJB2.1 ให้ถามเกี่ยวกับ EJB3 เพื่อดูว่าพวกเขารู้อะไรบ้าง นักพัฒนาซอฟต์แวร์ที่ดีที่สุดจะติดตามการพัฒนาล่าสุดแม้ว่าพวกเขาจะไม่ใช้เวอร์ชันที่ใหม่กว่าก็ตาม

3
ถ้ามีเพียงหนึ่งในสิ่งที่ฉันสามารถเปลี่ยนแปลงฉันต้องการเพิ่มผู้ประกอบการบรรทุกเกินพิกัดภาษาที่อาจจะมีเพียงชุด จำกัด ของผู้ประกอบการ overloadable (กล่าวคือไม่มีการบรรทุกเกินพิกัดnewหรือ^หรือ>>, <<และ>>>) ถ้าฉันสามารถเปลี่ยนสิ่งอื่นได้นั่นก็คือการเพิ่มความหมายการโทรโดยอ้างอิงที่แท้จริง สิ่งที่สามคือการเพิ่มunsignedประเภทอินทิกรัล
Chinmay Kanchi

1
มอบหมายและปิดและอาจแสดงออกแลมบ์ดา แต่นั่นไม่จำเป็นจริงๆ วิธีการขยายจะยิ่งใหญ่เช่นกัน พวกเขาสามารถล้างรหัสได้จริงหากใช้อย่างถูกต้อง
Joel

10
  • สัญญาทั่วไปคืออะไรเมื่อเอาชนะมากกว่า?
  • ตัวเลือกที่ดีกว่าต้องการรายการหรืออาร์เรย์หรือไม่
  • อนุสัญญาการตั้งชื่อที่ยอมรับโดยทั่วไปคืออะไร?
  • การทำให้เป็นอันดับเป็นอย่างไร
  • วิธีการใช้งานที่เปรียบเทียบได้?
  • อะไรคือข้อดีของการใช้งบเตรียมการของ JDBC?
  • Java EE คืออะไร
  • คอนเทนเนอร์คืออะไรและมีบริการอะไรบ้าง

9

หากคุณกำลังจ้างบัณฑิตที่มี "ประสบการณ์" Java คำถามง่ายๆเช่นเขียนโค้ดบางอย่างที่จะทำให้ NullPointerException ถูกโยนสามารถแยกแยะผู้สมัครรายใดที่ใช้ Java เมื่อเร็ว ๆ นี้และไม่ได้หยุดเพียงแค่จบหน่วย / หลักสูตร


16
"โยน NullPointerException ()" ใหม่เป็นคำตอบที่ถูกต้องหรือไม่
Thorbjørn Ravn Andersen

1
ก็ขึ้นอยู่กับผู้สัมภาษณ์ หากพวกเขาแสดงตัวอย่างของการทดสอบตัวแปรและส่ง NPE พร้อมข้อความที่เป็นประโยชน์แสดงว่าฉันมีความสุข ถ้าฉันคิดว่าพวกเขาใช้คำตอบนั้นเพราะพวกเขาไม่สามารถคิดรหัสที่จะโยน NPE ได้อย่างถูกกฎหมายฉันก็กังวล
เดวิด

9

จะพิมพ์อะไร

public void testFinally(){
    System.out.println(setOne().toString());

}

protected StringBuilder setOne(){
    StringBuilder builder=new StringBuilder();
    try{
        builder.append("Cool");
        return builder.append("Return");
    }finally{
        builder.append("+1");
    }
}

คำตอบ : CoolReturn + 1

ยากขึ้นอีกเล็กน้อย:

public void testFinally(){
    System.out.println(setOne().toString());

}

protected StringBuilder setOne(){
    StringBuilder builder=new StringBuilder();
    try{
        builder.append("Cool");
        return builder.append("Return");
    }finally{
        builder=null;  /* ;) */
    }
}

คำตอบ : CoolReturn


รหัสแรกบ่งชี้ว่าในที่สุดก็จะถูก excuted แม้ว่าคำสั่งการส่งคืนในบล็อกลองใช้ แต่ฉันไม่ได้รับรหัสที่สอง? เกิดอะไรขึ้นเมื่อเครื่องมือสร้างคำสั่ง = null; เกิดขึ้น ??
palAlaa

3
@Alaa มันเกือบจะเหมือนว่าค่าชั่วคราวถูกตั้งค่าเป็นตัวสร้างผู้สร้างจะถูกตั้งค่าเป็นโมฆะในบล็อกสุดท้ายจากนั้นค่าชั่วคราวคือสิ่งที่ส่งคืน
ขัดขวาง

1
@VextoR ใช่ Alaa ได้ให้คำอธิบายที่ดี รหัสนั้นจะตรวจสอบว่าผู้สัมภาษณ์เข้าใจอย่างไรลอง ... ในที่สุดก็ปิดกั้นด้วยการกลับเข้ามาภายในและขอบเขตของตัวแปรโดยทั่วไปการจัดการตัวแปร
zaletniy

4
คำสั่ง return ส่งคืนการอ้างอิงไปยังวัตถุ StringBuilder การเปลี่ยนแปลงการอ้างอิงในที่สุดก็ไม่ทำอะไรเลยกับการอ้างอิงที่ถูกส่งกลับจริง อย่างไรก็ตามการเปลี่ยนแปลงเนื้อหาของวัตถุจะมีผลกับสิ่งที่ส่งคืนเช่นในตัวอย่างแรก
Derek Litz

8

อะไรคือความแตกต่างระหว่างคลาสนามธรรมและอินเตอร์เฟส? คุณจะใช้แต่ละคนเมื่อใด

นักพัฒนา Java จำนวนมากไม่รู้เรื่องนี้ฉันถามคนส่วนใหญ่เกี่ยวกับหลักสูตรวิทยาการคอมพิวเตอร์ของฉันที่มหาวิทยาลัยและคนส่วนใหญ่ไม่สามารถตอบได้


ความแตกต่างเพียงอย่างเดียวคือคลาสนามธรรมสามารถมีวิธีที่ไม่เป็นนามธรรม
TBH

1
นั่นคือคำตอบที่คุณมีหากคุณอ่านหนังสือ Java แน่นอน ถึงแม้ว่าคุณอาจเพิ่มว่าพวกเขาสามารถมีตัวแปรสมาชิกได้เช่นกัน: P แต่ความแตกต่างของเวลาที่ใช้พวกเขาและทำไมจึงน่าสนใจยิ่งขึ้น
ZoFreX

1
การใช้อินเทอร์เฟซทำให้ฉันมีประสิทธิภาพมาก techniqe ซึ่งเป็น polymophism ซึ่งสามารถเรียกวิธีการ overridden จากคลาสที่ใช้อินเทอร์เฟซในลักษณะที่ดูเหมือนว่าคุณไม่จำเป็นต้องรู้ประเภทของเด็กแต่ละคลาส
palAlaa

@TBH - อย่าลืมว่าในรูปแบบการสืบทอดเดียวที่ Java ใช้อยู่ในปัจจุบันคุณสามารถขยายคลาสนามธรรมได้เพียงคลาสเดียวสำหรับการทำงานหนึ่งชุด - แต่คุณสามารถรวมหลายอินเตอร์เฟสในคลาสเดียวสำหรับฟังก์ชันการใช้งานหลาย ๆ ข้อ จำกัด การสืบทอด
MetroidFan2002

8

คำถามง่าย ๆ เช่น

  • JRE และ JDK คืออะไร
  • ทำไมจาวาจึงเรียกร้องการทำงานร่วมกัน?

แม้ว่าสิ่งเหล่านี้เป็นพื้นฐานมากนักพัฒนาหลายคนไม่ทราบคำตอบ ฉันขอแนะนำเหล่านี้ก่อนถามแบบสอบถามที่เกี่ยวข้องกับรหัส


ไม่ทราบเกี่ยวกับส่วน JDK / JRE ตัวอย่างเช่นไม่มีความแตกต่างดังกล่าวบน Mac ดังนั้นในฐานะนักพัฒนา Java บน Mac คุณไม่จำเป็นต้องรู้อะไรเลย
Fabian Steeg

ฉันคิดว่านี่เป็นคำถามที่ดีและหากช่วยให้ผู้ที่เข้าใจผิดมากพอที่จะพยายามพัฒนา Java อย่างจริงจังบน Mac ให้ดียิ่งขึ้น อย่างจริงจังถ้าคุณอ้างว่าเป็นนักพัฒนา Java แต่ไม่รู้ว่าจะดาวน์โหลดลิงค์ใดให้คลิกบน java.sun.com แสดงว่ามีปัญหา
Mark B

การเป็นนักพัฒนาจาวานั้นไม่จำเป็นต้องกังวลเลยเกี่ยวกับแพลตฟอร์มที่เขา / เธอกำลังทำอยู่เข้าใจเครื่องมือ java ดูเหมือนความต้องการขั้นพื้นฐานฉันขอพิจารณาด้วยดังนั้นฉันไม่ทราบเกี่ยวกับ Mac OS.still ฉันไม่ m = กังวลมาก เกี่ยวกับระบบปฏิบัติการที่ฉันทำงาน
Ravisha

@maird ที่ออกมาเป็นความคิดเห็นที่ค่อนข้างมีค่า แม้ว่าฉันจะพัฒนาบน Mac และฉันรู้ว่า JRE / JDK คืออะไรกันเถอะในการพัฒนาจริงมันมีความสำคัญจริงหรือ โดยเฉพาะอย่างยิ่งกับ IDEs ที่ทำให้บรรทัดคำสั่งใช้สิ่งในอดีตจาวา dev จำเป็นต้องรู้วิธีการใช้ภาษามากกว่าสิ่งอื่นใด
Alexis King

6

คำถาม J2EE / JEE 5 อันดับแรก

รายการคำถามมิดเดิลแวร์ J2EE / JEE ที่ฉันพบมีความยาวเป็นพิเศษ แต่ต่อไปนี้เป็น 5 อันดับแรกที่ฉันถูกถามและนำไปสู่การอภิปรายที่ดี:

  1. จะเกิดอะไรขึ้นเมื่อ MDB พบข้อยกเว้นที่ไม่สามารถจัดการได้
    คำถามนี้มักจะนำไปสู่การสนทนาที่น่าสนใจต่าง ๆ เกี่ยวกับข้อความพิษคิวข้อผิดพลาด ฯลฯ
  2. ได้รับหัวข้อ JMS และผู้บริโภคไม่กี่รายที่มี JVM ที่แตกต่างกันคำถามเกี่ยวกับสถานการณ์ต่าง ๆ ที่มีและไม่มีผู้บริโภคที่คงทน
    คำถามนี้มักจะทำให้ฉันสามารถพูดคุยกันได้ในแง่ของเวลาที่จะใช้ผู้สมัครสมาชิกที่คงทนเมื่อใดจะใช้คิว ฯลฯ
  3. หากติดอยู่ในสถานการณ์ที่การเข้าถึงเนื้อหาไฮเบอร์เนต / JPA POJO นำไปสู่ข้อยกเว้นหนึ่งจะแก้ไขได้อย่างไร
    สิ่งนี้นำไปสู่การพูดคุยที่ยอดเยี่ยมเกี่ยวกับการโหลดแบบขี้เกียจการคืนความชุ่มชื้น ฯลฯ มันยังนำไปสู่การเปรียบเทียบและการเปรียบเทียบ JPA กับ Entity beans ฉันพบว่ามีประโยชน์ที่จะเตรียมและชัดเจนในแนวคิด
  4. สามารถให้บริการเว็บแบบง่ายได้อย่างไร
    การแก้ปัญหาใด ๆ จากเว็บเซิร์ฟเวอร์ที่เรียบง่ายซึ่งใช้ SOAP / REST ที่ซับซ้อนและอื่น ๆ ควรจะดีพอ บางครั้งอาจนำไปสู่การอภิปรายที่น่าสนใจในหัวข้อต่าง ๆ เช่นแนวคิดการออกแบบบางอย่าง - WSDL ก่อนสไตล์ doc, SOAP ตัวกลาง ฯลฯ อาจนำไปสู่คำถามเช่นการปรับปรุงรายการใน JAX-WS มากกว่า JAX -RPC หรือ SOAP1.2 เหนือ SOAP1.1 คำตอบที่มักจะขึ้นอยู่กับจำนวนที่ฉันจำได้
  5. การฉีดทรัพยากร JEE 5
    คำถามนี้ถูกวางหลายวิธีโดยเริ่มจากรูปแบบตัวระบุบริการเป็นjavax.naming.Contextคำถาม

อีกคำถามที่หากินผมพบว่าหนักใจ แต่ต้องเผชิญกับหลายต่อหลายครั้งเป็น อย่างไรขึ้นอยู่กับห้องสมุดบรรจุลงในที่เก็บ?
หรือทัศนวิสัยของคลาสต่าง ๆ ในไฟล์เก็บถาวรแบบบันเดิล
หากการอภิปรายไม่ได้นำไปสู่ลำดับชั้นของตัวโหลดคลาสของแอ็พพลิเคชันเซิร์ฟเวอร์ที่เก็บถาวรรีซอร์สอื่น ๆ วิธีที่ดีที่สุดคือการลาออกและไป

คำถาม Java หลัก 5 อันดับแรก:

  1. คำถามเกี่ยวกับ java.util.collections
    นี่คือแม่ของคำถามทั้งหมด เมื่อคุณสามารถลงจอดผู้สัมภาษณ์ในพื้นที่นี้ได้อย่างมีประสิทธิภาพและหากคุณเตรียมการสัมภาษณ์ที่เหลือมักจะอยู่ที่นี่ ให้แน่ใจว่ารู้Set, List, MapและความสำคัญของObject.equals()และObject.hashCode()ในการดำเนินงานของการเชื่อมต่อเหล่านี้ทุก
  2. Refactoring คำถาม
    เหล่านี้จะดีถ้าผู้สัมภาษณ์มีใจที่เปิดกว้าง หากผู้สัมภาษณ์มีวิธีแก้ปัญหาเฉพาะอยู่ในใจแล้วและคุณไม่ตรงกับ / เขาของคุณคุณก็จะถึงวาระแล้ว ที่ดีที่สุดคือเห็นด้วยกับคำตอบ "ฉันเข้าใจวิธีการแก้ปัญหาอื่น ๆ ที่เป็นไปได้"
  3. คำถามเกี่ยวกับมัลติเธรดใน JDK5 เปรียบเทียบกับรุ่น JDK ก่อนหน้านี้ที่ ฉันพบว่าเป็นการดีที่สุดที่จะเตรียมด้วยคลาสแพ็กเกจjava.util.concurrent หนังสือของ Doug Lea มีคำตอบส่วนใหญ่
  4. มีอะไรใหม่ใน JDK1.6 / JDK1.7 ...
    นี่เป็นคำถามที่ได้รับคำตอบที่ดีจากผู้สัมภาษณ์หลายคน เท่าที่ฉันเกลียดสิ่งนี้มันเป็นการดีที่สุดที่จะเตรียมไว้ อย่างน้อยก็จำบางอย่างที่ฉันได้ทำงานด้วยและเป็นผู้นำการอภิปรายในทิศทางอื่น ๆ อย่างมากและมีประสิทธิภาพหลบและแก้ปัญหา
  5. รูปแบบใน Java API
    Time และอีกครั้งฉันถูกขอให้ชี้รูปแบบ GoF ใน Java API เตรียมตัวให้ดีกว่านี้


5

คุณชอบอะไรมากที่สุด / น้อยที่สุดเกี่ยวกับ Java และเพราะอะไร



4

คำถาม Java บริสุทธิ์ยิ่งขึ้น:

ความแตกต่างระหว่างการนอนหลับและรอคืออะไร? มีหลายคนที่ไม่เข้าใจการรอคอย

คุณต้องจัดการกับ InterruptExceptions อย่างไร


4

นี่คือคำถามที่ฉันเผชิญในการสัมภาษณ์ของฉัน

ทำไมเมธอดหลักใน Java ถูกเรียกว่า public void main (String [] args)

ตอบ:

1. main () จะต้องประกาศสู่สาธารณะเพราะ JVM ถูกเรียกใช้เมื่อใดก็ตามที่การดำเนินการของโปรแกรมเริ่มต้นขึ้น JVM ไม่ได้เป็นของแพ็คเกจโปรแกรมของเรา

Inorder เพื่อเข้าใช้งานหลักนอกแพ็คเกจเราต้องประกาศให้เป็นแบบสาธารณะถ้าเราประกาศเป็นสิ่งอื่นที่ไม่ใช่สาธารณะจะแสดงข้อผิดพลาดรันไทม์แต่ไม่ใช่ข้อผิดพลาดในการรวบรวมเวลา

2. main () จะต้องประกาศว่าเป็นแบบคงที่เพราะหากวิธีการประกาศเป็นแบบคงที่แล้วเราสามารถเรียกวิธีการที่อยู่นอกชั้นเรียนโดยใช้ClassName.methodName ();

class Sample
{
     static void fun()
     {
           System.out.println("Hello");       
     }
}

class Test
{
      public static void main(String[] args)
      {
                Sample.fun();
      }
}

JVM จะทำการโหลดคลาส Test ก่อนและจะตรวจสอบอาร์กิวเมนต์ Commandline และเรียกใช้เมธอดหลักเป็น Test.main ();

3. main () จะต้องประกาศเป็นโมฆะ main ()เนื่องจาก JVM ไม่ได้คาดหวังว่าจะมีค่าใด ๆ จาก main () ดังนั้นจึงต้องประกาศเป็นโมฆะ

หากมีการระบุประเภทการส่งคืนอื่น ๆ ประเภทนั้นจะเป็น RunTimeError เช่น NoSuchMethodFoundError

4. main () ต้องมี String arguements เป็น Arrayเนื่องจาก JVM เรียกเมธอด main โดยผ่าน arguement บรรทัดคำสั่งเนื่องจากมีการเก็บไว้ในวัตถุ array array มันจะถูกส่งผ่านเป็นอาร์กิวเมนต์ไปยัง main ()


คุณสามารถใช้public static void main(String... args)หากคุณเอียง :-) มันมีลายเซ็นเช่นเดียวกับ[]
corsiKa

3

อะไรคือความแตกต่างระหว่าง J2SE และ J2EE (หรือ JSE และ JEE)

ผู้พัฒนาควรจะสามารถชี้ให้เห็นว่ารุ่นองค์กรนั้นเป็นคำจำกัดความของอินเทอร์เฟซ (เช่นข้อมูลจำเพาะ) ซึ่งผู้จำหน่ายสามารถนำไปใช้ได้ ในขณะที่รุ่นมาตรฐานคือการดำเนินการในสิทธิของตนเอง


4
ความสามารถในการรักษาคำศัพท์ทางการตลาดให้ตรงไปตรงมาสำคัญจริงๆ ณ สิ้นวันหรือไม่?
Laurence Gonsalves

@ Laurence - นั่นเป็นสิ่งที่ไร้สาระที่จะพูด มีความแตกต่างอย่างแท้จริงระหว่างสองสิ่งที่คุณจะต้องประหลาดใจนักพัฒนาที่มีประสบการณ์เท่าที่คาดคะเนจำนวนมากไม่เข้าใจ
oxbow_lakes

ประเด็นของฉันคือถ้าใครบางคนเป็นนักเขียนโค้ดที่ดีฉันก็ไม่สนหรอกถ้าพวกเขารู้ความแตกต่างระหว่าง J2SE และ J2EE
Laurence Gonsalves

ฉันอ่านคำถามว่า "สิ่งที่นักพัฒนา JEE + JSE ควรรู้" ในกรณีนี้ฉันคิดว่าการเข้าใจความแตกต่างระหว่างเทคโนโลยีทั้งสองนั้นเกี่ยวข้องกัน
oxbow_lakes

4
@ Thorbjørn Ravn Andersen ฉันสงสัยว่า Java coders ส่วนใหญ่เป็นคนดีรวมถึงตระหนักถึงความแตกต่างดังกล่าวข้างต้น "รุ่น Enterprise นั้นเป็นคำนิยามส่วนติดต่อ ... ในขณะที่รุ่นมาตรฐานคือการใช้งานในสิทธิของตนเอง" สำหรับผู้เขียนโค้ด Java ที่ดีที่สุดความแตกต่างที่สำคัญคือ API ที่มีให้ เช่น: Servlets เป็นส่วนหนึ่งของ EE ฯลฯ ไม่ว่าในกรณีใดฉันคิดว่ามันสำคัญกว่าที่จะหาโปรแกรมเมอร์ที่ดีกว่าโปรแกรมเมอร์ภาษา X ที่ดีฉันคิดว่าการหาโปรแกรมเมอร์ Java ที่ดีนั้นดีกว่าโปรแกรมเมอร์ JSE / JEE ที่ดี
Laurence Gonsalves

3

วิธีการที่ไม่volatileส่งผลกระทบต่อการเพิ่มประสิทธิภาพรหัสคอมไพเลอร์?


3
รายการนั้นควรมีคำตอบที่ถูกต้องเช่นกัน
Thorbjørn Ravn Andersen

ฉันจำคำตอบไม่ได้ทั้งหมดดูคำว่าyoutube.com/…สำหรับคำอธิบายที่ดี โดยสรุป: คิดว่าวิธีการใช้ตัวแปรระเหยในบางจุด จากนั้นคอมไพเลอร์ไม่ปรับรหัสของวิธีนี้ให้เหมาะสมหลังจากจุดนั้น
โรมัน

2

แล้วถั่วเซสชั่นคืออะไรและอธิบายความแตกต่างบางอย่างระหว่างเซสชั่นไร้สัญชาติและไร้รัฐ


2

เขียนโปรแกรมเพื่อยอมรับจำนวนเต็มสองตัวและส่งออกจำนวนที่ใหญ่ที่สุดของสองตัวเลขไปยังไฟล์ที่ตำแหน่งที่คุณเลือก ตอนนี้อธิบายสิ่งที่แต่ละคำสั่งไม่

เป็นไปได้ที่จะเจาะลึกลงไปมากเริ่มจากความสำคัญของคำสั่งนำเข้าจนถึงการเลิกจ้างที่ผิดปกติ


2

แกนหลัก: 1. มีการตรวจสอบและยกเว้นอะไรบ้าง 2. ในขณะที่เพิ่มข้อยกเว้นใหม่ในรหัสประเภทใด (ทำเครื่องหมาย / ไม่ถูกตรวจสอบ) ที่จะใช้เมื่อใด

Servlet: 1. อะไรคือข้อแตกต่างระหว่าง response.sendRedirect () และ request.forward ()?


คุณช่วยตอบคำถามเหล่านี้ได้หรือไม่นี่เป็นครั้งแรกที่ฉันรู้เกี่ยวกับ "ข้อยกเว้นที่ทำเครื่องหมายและไม่ได้ตรวจสอบ" !!
palAlaa

การค้นหา google อย่างง่ายสามารถนำคุณไปสู่คำตอบ: google.co.in/…
YoK

1

วิธีการthreadsทำงานหรือไม่ คือsynchronizedอะไร หากมีสองsynchronizedวิธีในชั้นเรียนพวกเขาสามารถดำเนินการพร้อมกันโดยสองหัวข้อ คุณจะประหลาดใจที่จะได้ยินคำตอบที่หลาย ๆ คนใช่ แล้วคำถามที่เกี่ยวข้องกับหัวข้อทั้งหมดเช่นการหยุดชะงัก , การอดอาหารเป็นต้น


2
นั่นเป็นเพราะคำตอบคือใช่ ...
Fortega

@Fortega - เป็นไปได้อย่างไร? แต่ละวิธีมีการล็อควัตถุ หากมีใครthreadกำลังใช้วิธีการอยู่จะไม่มีวิธีอื่นใดที่threadสามารถล็อค
fastcodejava

1
หากคุณมีวัตถุสองชนิดที่เหมือนกันคุณสามารถเรียกวิธีแรกในวัตถุแรกและวิธีที่สองในวัตถุที่สองพร้อมกัน นอกเสียจากวิธีการคงที่แน่นอน
Fortega

2
หากคุณไม่เข้าใจวิธีการล็อคอย่างถูกต้องแสดงว่าไม่ใช่เกมง่ายๆ นอกจากนี้ถึงแม้ว่ามันอาจจะเป็นเกมง่ายๆไม่ได้หมายความว่าคำตอบของฉันไม่ถูกต้อง :-)
Fortega

1
คำตอบที่จะทำให้เกิดความสับสนสำหรับ progrmmers ที่ไม่ได้ใช้หัวข้อในการทำงานของพวกเขา แต่ผมคิดว่ามันเป็นหนึ่งที่ดี :)
palAlaa

1

สิ่งหนึ่งที่โปรแกรมเมอร์ Java หลายคนไม่ทราบก็คือ Strings นั้นไม่เปลี่ยนรูปดังนั้นให้ใช้ StringBuilder หรือ StringBuffer!

String s = "";
for(int i = 0; i < 100; i++) {
  s += "Strings " + "are " + "immutable, " + " so use StringBuilder/StringBuffer to reduce memory footprint";
}

และ Number เช่น Integer, Long และอื่น ๆ
Arthur Ronald

ประสิทธิภาพการทำงานที่ชาญฉลาดไม่มีความแตกต่างระหว่างการต่อสตริงที่ไม่เปลี่ยนรูปและการใช้ StringBuilder นี่เป็นเพราะคอมไพเลอร์ java สมัยใหม่จะปรับการเรียงต่อกัน: java.sun.com/docs/books/jls/third_edition/html/ ดีที่สุดที่จะใช้วิธีการใดก็ได้ที่อ่านง่ายกว่า
Brent Wilson

1
@BrentWilson สิ่งที่คุณลิงค์จะไม่ทำในสิ่งที่คุณคิด มันจะกลายs += "a" + "b" + "c"เป็นStringbuilder.append(...)สถานการณ์ แต่จะไม่ปรับforลูปให้เหมาะสม รหัสในคำตอบนี้จะจบลงด้วยการสร้าง 201 Strings ทั้งหมด, 100 StringBuilders และ (ขึ้นอยู่กับการใช้งาน) 300 char[]s ที่แตกต่างกันภายใน StringBuilders เหล่านั้นและประมาณ 425k + ตัวอักษร การเปลี่ยนเป็นใช้ StringBuilder ทันทีจะลดสิ่งนี้เป็น 1 String, 1 StringBuilder และ 13-15 Internal char[]s ใช้เพียง ~ 8k ตัวอักษรแทนเหมือนที่ควร
corsiKa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.