Câu hỏi mà mỗi Nhà phát triển Java / Java EE tốt sẽ có thể trả lời? [đóng cửa]


138

Tôi đã trải qua các Câu hỏi mà mọi nhà phát triển .Net tốt sẽ có thể trả lời và rất ấn tượng với nội dung và cách tiếp cận của câu hỏi này, và vì vậy, theo tinh thần tương tự, tôi đang đặt câu hỏi này cho Nhà phát triển Java / Java EE.

Những câu hỏi nào bạn nghĩ rằng một lập trình viên Java / Java EE tốt có thể trả lời?

Tôi đánh dấu câu hỏi này là wiki cộng đồng vì nó không dành riêng cho người dùng và nó nhằm mục đích phục vụ cộng đồng lập trình nói chung.

Mong chờ một số phản ứng tuyệt vời.

EDIT : Vui lòng trả lời các câu hỏi, như được đề xuất trong các bình luận, để mọi người cũng có thể học một cái gì đó mới về ngôn ngữ.


3
Tại sao câu hỏi này không thể nhận được câu trả lời tương tự cho câu hỏi .Net?
Rachel

5
Chúa ơi :), câu hỏi .Net đã được hỏi một năm trước và câu hỏi này chỉ mới một ngày tuổi và bạn đang so sánh các câu trả lời.
hạ gục

1
Tại sao bạn không chỉnh sửa câu hỏi của mình và thêm câu "Vui lòng trả lời câu hỏi của chính bạn.", Để mọi người thậm chí có thể học được điều gì đó (mới).
r3zn1k

9
"Tên viết tắt hiện tại của Phiên bản Doanh nghiệp là gì";)
Bozho

17
Giai thoại của Albert Einstein .. Một trong những đồng nghiệp của Einstein đã hỏi ông về số điện thoại của ông vào một ngày nào đó. Einstein với lấy một danh bạ điện thoại và tra cứu nó. "Bạn không nhớ số của riêng bạn?" Người đàn ông hỏi, giật mình. "Không," Einstein trả lời. "Tại sao tôi nên ghi nhớ thứ gì đó mà tôi có thể dễ dàng lấy được từ một cuốn sách?" Tôi có đến được với mọi người không?)? Vâng tôi biết, Einstein đã không phải đối mặt với Người phỏng vấn ...
SB.

Câu trả lời:


83

Mối quan hệ giữa hashCode () và bằng () là gì? Ý nghĩa của các phương pháp này là gì? Các yêu cầu để thực hiện chúng là gì?


Có, mọi nhà phát triển ít nhất nên nhận thức được các vấn đề, ngay cả khi bạn không nhất thiết phải gặp chúng trong thực tế.
sleske

3
bằng () và hashCode () trong java @ technofundo.com/tech/java/equalhash.html
pramodc84

70

Sự khác biệt giữa Bộ, Bản đồ và Danh sách là gì?

Tôi vẫn ngạc nhiên khi có nhiều người không biết điều này trong một cuộc phỏng vấn qua điện thoại.


8
Cấp, nhưng đó là vấn đề của 20 giây khi xem các tài liệu trên mạng ("khung bộ sưu tập java"), vì vậy nhiều người đáng giá có thể không bận tâm đến việc giữ nó trong bộ nhớ.
Manur

127
Không, xin lỗi, đừng mua cái đó, đó là kiến ​​thức cơ bản mà mọi nhà phát triển nên biết.
Jon

15
Tôi muốn nói rằng bất cứ ai thậm chí nghĩ về một công việc trong phần mềm cũng cần phải hiểu không chỉ điều đó, mà còn về sự khác biệt giữa các loại danh sách khác nhau (ArrayList / LinkedList). Không nhất thiết phải thực hiện tốt nhất hoặc thậm chí ký hiệu O (n), nhưng hiểu được khi nào nên sử dụng cái gì.
Hoàn nguyên Gonzo

11
+1 @Jon: Tôi thường đăng ký vào trường phái "không cần ghi nhớ chi tiết", nhưng nếu bạn thậm chí không biết sự khác biệt về khái niệm cơ bản giữa các giao diện cơ bản đó, thì bạn chắc chắn không phải là nhà phát triển Java giỏi.
Joachim Sauer

13
@Joachim: bạn có thể bỏ từ "Java" khỏi câu lệnh của mình. Bộ, Bản đồ và Danh sách là các khái niệm thuật toán cơ bản.
CPerkins

44

Một giao diện có thể mở rộng nhiều giao diện?

Hầu hết mọi người trả lời "không", vì họ biết java không có nhiều sự kế thừa. Nhưng một giao diện vẫn có thể mở rộng nhiều giao diện (nhưng một lớp không thể mở rộng nhiều lớp). Điều này không dẫn đến vấn đề kim cương.

Nếu câu trả lời là "không", người phỏng vấn nên hỏi "tại sao sẽ nó bị cấm?". Sau đó, bạn bắt đầu nghĩ về nó và bạn nên nhận ra rằng không có vấn đề gì với nó.

Vì vậy, bạn đã học được điều gì đó (một mình) trong cuộc phỏng vấn và bạn đã cho người phỏng vấn biết rằng bạn có thể suy luận về các lớp học, đối tượng, tính kế thừa, tính đa hình, v.v ... Nó thực sự tốt hơn nhiều so với một ứng viên biết câu trả lời bằng trái tim nhưng không hiểu tại sao


Tôi đã nhầm lẫn một giảng viên C ++ ngày hôm qua với vấn đề thừa kế kim cương, cô ấy không biết gì về nó cả :)
Esko

2
Tôi đã từng hỏi câu hỏi này và tôi đã trả lời "không". Tôi nghĩ rằng đó là căng thẳng cộng với tôi đã trả lời quá nhanh. luôn luôn khó để biết câu trả lời cho những thứ bạn không bao giờ sử dụng.
IAd CHƯƠNG

1
Tôi xây dựng thêm một chút trong văn bản. Trả lời "không" thực sự là ok. Điều hay ho với câu hỏi này là cách tốt để kích hoạt một cuộc thảo luận về các khái niệm OO và xem lý do ứng cử viên như thế nào. Nếu người phỏng vấn bạn chỉ muốn nghe "có" thì thật vô nghĩa. Nhiều kế thừa của các giao diện thực sự không phải là phổ biến để được biết đến bởi trái tim.
ewernli

3
Một phiên bản khó hơn của câu hỏi này là "java có hỗ trợ nhiều kế thừa không?" mà câu trả lời là "sắp xếp" chỉ dành cho giao diện
nsfyn55

23

Sử dụng từ khóa cuối cùng trong các cuộc gọi phương thức. Ví dụ, tại sao kiểm tra phương thức trong mã bên dưới không đưa ra bất kỳ lỗi biên dịch nào mặc dù sử dụng vòng loại cuối cùng cho tham số phương thức.

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");
}


Tôi thực sự rất muốn biết câu trả lời cho câu hỏi này. Nghe có vẻ rất thú vị.
Rachel

@Rachel: Lý do là vì finaltừ khóa được áp dụng cho Nameđối tượng, không phải namelĩnh vực của lớpName
ryanprayogo

20
Chà, tham số nđược khai báo là cuối cùng, có nghĩa là nó không thể được gán lại trong testthân phương thức. Nó không gây ra lỗi vì phương thức testkhông cố gán lại tham số, nó chỉ đặt thuộc tính trên tham số ... n = new Name("test");sẽ gây ra lỗi biên dịch ...
rjohnston

7
Thêm vào nhận xét của @ rjohnston: việc sử dụng tham số cuối cùng cho tham số phương thức không đảm bảo tính bất biến của một thể hiện của lớp. Nếu có nhu cầu về tính bất biến, lớp (Tên trong trường hợp hiện tại) phải được thiết kế sao cho (ví dụ trong trường hợp hiện tại không cung cấp bộ cài đặt)
sateesh

Cảm ơn tất cả các bạn đã chia sẻ thông tin có giá trị. Tôi thực sự đánh giá cao đầu vào của bạn về điều này.
Rachel

19

Một chắc chắn là so sánh chuỗi. Sự khác biệt giữa

Chuỗi helloWorld = "Hello World";
helloWorld == "Xin chào thế giới";
"Xin chào thế giới" .equals (helloWorld);


14
Khá chắc chắn rằng bạn cần phải làm một cái gì đó như Chuỗi mới ("Hello World"). Các hằng chuỗi không được kéo từ một nhóm, giống như hiệu ứng intern () sẽ có, do đó làm cho cả hai câu lệnh đều đúng?
Steven Schlansker


17

Câu hỏi mẹo: Những loại tham số nào được truyền bằng tham chiếu trong Java?

Thật đáng ngạc nhiên khi nhiều người vẫn vẹt câu "nguyên thủy được truyền qua giá trị, các đối tượng được truyền bằng thần chú tham chiếu".


4
Tôi tự hỏi nếu câu trả lời chính xác luôn luôn là người đưa ra trong một cuộc phỏng vấn. Ở một nơi tôi đã phỏng vấn, người phỏng vấn cũng vẹt điều tương tự.
MAK

2
Tôi đã nhận thấy sự khác biệt giữa những người học C là ngôn ngữ đầu tiên và những người học C ++ là ngôn ngữ đầu tiên khi trả lời câu hỏi này về Java. Có lẽ bởi vì người dùng C được dạy rằng việc truyền một con trỏ tới một giá trị là "truyền tham chiếu".
Uri

23
Đó là một câu hỏi ngu ngốc vì câu trả lời "sai" rất có thể sẽ trở thành đúng về mặt kỹ thuật nếu bạn cũng hỏi "hậu quả nào đã đi qua tham chiếu?" . Đây chỉ là vấn đề định nghĩa về việc chuyển qua tham chiếu nghĩa là gì và do đó không có nhiều giá trị trong thế giới Java vì chỉ có một cách để vượt qua các đối tượng. Điều quan trọng hơn là phải hiểu những gì thực sự xảy ra hơn là sử dụng một định nghĩa aribitrary để vượt qua bằng cách tham khảo theo cách bạn muốn.
x4u

3
Câu hỏi này ít nhất là có vấn đề, bởi vì nó chủ yếu dựa vào định nghĩa chính xác của "vượt qua giá trị" / "vượt qua tham chiếu", thường được sử dụng không chính xác. Mặc dù tôi đồng ý rằng một nhà phát triển giỏi nên biết các định nghĩa, điều quan trọng hơn là phải hiểu hậu quả. Nếu bạn hiểu hành vi thực tế của Java, thì việc biết tên chính xác cho khái niệm này không có ý nghĩa lắm, bởi vì đó không phải là điều bạn thảo luận trong thực tế, vì nó không bao giờ thay đổi.
sleske

3
Erm, các đối tượng được truyền bằng tham chiếu trong Java. Bạn không thể vượt qua một đối tượng theo giá trị; trong số những thứ khác, các đối tượng không bao giờ tồn tại trên ngăn xếp. Tài liệu tham khảo được thông qua bởi giá trị, chắc chắn.
Sean Owen

17

Bạn đã nói "Tốt", "Nhà phát triển". Đây là 2 xu của tôi nữa .. :)

  • "Ngoại lệ được kiểm tra" nghĩa là gì?
  • Cái nào tốt hơn để sử dụng và khi nào: Xác nhận hoặc Ngoại lệ để xử lý các điều kiện không mong muốn?
  • Tại sao lớp String là cuối cùng? (hoặc nó không phải là ?;))
  • sự chờ đợi, thông báo và thông báo cho tất cả các phương thức trong lớp Object?
  • Tại sao lớp học cuối cùng không phải là chủ đề? Tại sao tôi sẽ mở rộng Thread, bao giờ?
  • Tại sao có hai lớp Date; một trong gói java.util và một gói khác trong java.sql?
  • Điều gì xảy ra nếu một ngoại lệ được ném vào khối cuối cùng? Là cuối cùng còn lại thực hiện hay không?
  • Có một trình thu gom rác ổn, nhưng sau đó bộ nhớ bị rò rỉ hoàn toàn không có trong các ứng dụng Java? Nếu không thì làm sao vậy?

Dành cho J2EE:

  • Có tốt không khi có các biến thể hiện / tĩnh trong một servlet? Tại sao không? Sau đó, bạn lưu trữ "nhà nước" ở đâu?
  • tiếp tục câu hỏi trên: "trạng thái" cho ứng dụng (web) là gì & ở đâu?
  • Điều gì xảy ra nếu tôi bắt đầu tạo / đóng các kết nối DB trong "JSP"?
  • Các cách để xử lý các ngoại lệ của JSP là gì? cố gắng bắt? Hmmm .. còn gì nữa không?

Tôi có thể nghĩ nhiều, rất nhiều, rất nhiều trong số họ nhưng điều này sẽ làm ngay bây giờ :)


8
Câu trả lời sẽ rất hay, tôi không biết câu trả lời cho một vài trong số chúng.
MAK

Các trường hợp ngoại lệ được kiểm tra là những trường hợp chương trình phải có kế hoạch xử lý nếu chúng xảy ra. Nếu không có khối thử / bắt xung quanh thứ gì đó ném ngoại lệ được kiểm tra, chương trình sẽ không biên dịch. chờ, thông báo và thông báo Tất cả là để đồng bộ hóa các luồng và trong Java, tất cả các Đối tượng có thể được đồng bộ hóa trên. Tôi sẽ mở rộng Thread (trái ngược với việc triển khai Runnable) nếu về mặt khái niệm lớp yêu cầu luồng riêng, tức là nó cần thực hiện một số quản lý và không thể hiện một tác vụ có thể chạy trên luồng công nhân khác.
ZoFreX

Nếu một ngoại lệ được ném trong một khối cuối cùng thì phần còn lại của nó sẽ không chạy. Trong một chương trình Java "thuần túy", rò rỉ bộ nhớ chính tắc không tồn tại. Tuy nhiên, bộ nhớ vẫn có thể được sử dụng nếu cấu trúc dữ liệu có chứa các tham chiếu đến các đối tượng không còn cần thiết nữa. Nếu sử dụng các thư viện riêng thì tài nguyên của họ có thể cần phải được quản lý, ví dụ trong SWT, điều quan trọng là phải gọi .dispose () trên một số tài sản nhất định để đảm bảo chúng không bị rò rỉ.
ZoFreX

2
Sử dụng các xác nhận cho các lỗi "Điều này sẽ không bao giờ xảy ra" mà sẽ được xử lý trong quá trình phát triển. Sử dụng các ngoại lệ cho các lỗi có thể thực sự xảy ra trong thời gian chạy và chương trình sẽ cần xử lý chúng theo một cách nào đó.
MatrixFrog

16

Sự khác biệt giữa String, StringBuffer và StringBuilder là gì?


5
Chuỗi - lớp bất biến đại diện cho một Chuỗi. StringBuffer - mẫu trình xây dựng được giới thiệu trong các phiên bản Java cũ hơn, đồng bộ hóa trên mọi hoạt động (hoặc phần lớn trong số chúng) để sử dụng để xây dựng Chuỗi. StringBuilder - được giới thiệu trong Java 5 (JDK 1.5), một lớp chia sẻ API StringBuffer để sử dụng để xây dựng Chuỗi không đồng bộ hóa trên mọi hoạt động (hoặc phần lớn trong số chúng). Vì việc xây dựng Chuỗi có xu hướng xảy ra trong một luồng duy nhất, StringBuilder được ưa thích cho mục đích này trong các thời gian chạy Java / JDK hỗ trợ nó.
MetroidFan2002 17/03/2016

13

"Mô tả triển khai là gì?"

Nếu ứng viên rùng mình vô tình, anh ta có kinh nghiệm làm việc với các EJB trước 3.0.


làm cho nó "rùng mình không tự nguyện + đổ mồ hôi nhiều + chết sau khi lặp lại câu hỏi này thêm 2 lần nữa", đôi khi tôi cảm thấy đó là lý do "một & duy nhất" mà họ đã thêm / hỗ trợ toàn bộ điều Chú thích! :)
Elister

12

Nhiều câu hỏi và phỏng vấn có sẵn tại http://www.techinterviews.com/interview-questions/java và tôi không thực sự thấy giá trị trong việc sao chép / dán một lựa chọn của chúng.

Không, tùy thuộc vào bạn để tạo ra bản tổng hợp của riêng bạn về những điều bạn cho là quan trọng. Cá nhân, tôi luôn tiến hành theo hai bước: đầu tiên là một vài câu hỏi để có được ý tưởng cơ bản về kinh nghiệm và kỹ năng, sau đó là một tình huống giải quyết vấn đề. Tôi thực sự không tin rằng việc có thể trả lời bất kỳ câu hỏi đã biết nào sẽ giúp bạn giải quyết vấn đề chưa biết tốt hay xấu . Vì vậy, tôi thích yêu cầu mọi người giải quyết một vấn đề nhất định, đưa ra cho họ một số yêu cầu và yêu cầu họ viết mã (nhưng không phải trên giấy). Tôi cho họ một chút thời gian để quay lại với tôi và kiểm tra xem họ đã làm như thế nào, phong cách mã hóa của họ, cách họ sử dụng các API được đề xuất, v.v.

Điều đó đã được nói, câu hỏi yêu thích của tôi là "bạn không thích gì về Java?" (theo tinh thần của cái này ). Đây thực sự là một câu hỏi tuyệt vời, nó cung cấp cho bạn một phản hồi ngay lập tức về mức độ một ứng cử viên đã sử dụng Java và khám phá API của nó và liệu anh ta có tôn giáo về nó hay không (như OP đã viết).

Cập nhật: Theo đề xuất của CPerkins, một từ ngữ tốt hơn cho câu hỏi được đề xuất ở trên có thể là "Điều gì bạn muốn thấy nhất đã thay đổi trong Java?". Và thực sự, tôi thích cách này.


Tôi không thích câu hỏi "bạn không thích gì về Java?", Tôi sẽ nói dối, bởi vì nó nghe giống như "tại sao bạn rời công ty cuối cùng của bạn?". cộng với họ có thể nghĩ - "nếu bạn ghét java, chúng tôi sẽ không cung cấp cho bạn công việc".
IAd CHƯƠNG

@ 01 Đó là quyền của bạn nhưng tôi không đồng ý với bạn và tôi nghĩ rằng bạn đã bỏ lỡ điểm của câu hỏi đó.
Pascal Thivent

1
Tôi thường thấy điều này giống như: "Điều gì bạn muốn thấy nhất đã thay đổi trong Java", thay vì "không thích".
CPerkins

@CPerkins Đó thực sự là một từ ngữ tốt hơn, tốt hơn "không thích" và tốt hơn nhiều so với "ghét" (trong tài liệu tham khảo). Cảm ơn.
Pascal Thivent

11

'Hệ thống', 'ra', 'println' trong System.out.println là gì? Điều gì xảy ra khi bạn gọi 'put' trên HashMap?


Câu trả lời là gì ?? Tôi không bao giờ nghĩ về lớp hệ thống nào !! tôi tự hỏi để biết asnwer :)
palAlaa

10
  1. Giải thích các công cụ sửa đổi truy cập khác nhau được sử dụng trong Java. Tôi đã có rất nhiều người đấu tranh với điều này, đặc biệt là truy cập mặc định.
  2. Nếu bạn có thể thay đổi một điều về ngôn ngữ hoặc nền tảng Java thì đó là gì? Các nhà phát triển giỏi sẽ có câu trả lời ở đây trong khi những người không thực sự quan tâm đến phát triển có thể không quan tâm.
  3. Nếu CV của họ nói điều gì đó giống như họ sử dụng EJB2.1 thì hãy hỏi về EJB3 để xem họ biết gì về nó. Các nhà phát triển tốt nhất sẽ theo kịp các phát triển mới nhất ngay cả khi họ không sử dụng các phiên bản mới hơn.

3
Nếu chỉ có một điều tôi có thể thay đổi, tôi sẽ thêm quá tải toán tử vào ngôn ngữ, có lẽ chỉ với một tập hợp các toán tử quá tải bị hạn chế (nghĩa là không quá tải newhoặc ^hoặc >>, <<>>>). Nếu tôi có thể thay đổi một điều, rằng sẽ có thêm thật cuộc gọi-by-reference ngữ nghĩa. Điều thứ ba sẽ là thêm unsignedcác loại tích phân.
Chinmay Kanchi

1
đại biểu và đóng cửa và có thể là một biểu thức lambda, nhưng điều đó không thực sự cần thiết. Phương pháp mở rộng cũng sẽ là tuyệt vời. Họ thực sự có thể làm sạch mã nếu được sử dụng đúng cách.
Joel

10
  • Hợp đồng chung khi ghi đè bằng là gì?
  • Là lựa chọn tốt hơn thích danh sách hoặc mảng?
  • Các quy ước đặt tên thường được chấp nhận là gì?
  • Làm thế nào nối tiếp hoạt động?
  • Làm thế nào để thực hiện so sánh?
  • Những lợi thế của việc sử dụng Tuyên bố chuẩn bị của JDBC là gì?
  • Java EE là gì?
  • Container là gì và nó cung cấp dịch vụ gì?

9

Nếu bạn đang tuyển dụng sinh viên tốt nghiệp với "kinh nghiệm" Java, một câu hỏi đơn giản như Viết một số mã sẽ khiến NullPulumException bị ném có thể phân biệt ứng viên nào đã sử dụng Java gần đây và không dừng lại khi họ hoàn thành khóa học / khóa học của họ.


16
"Ném NullPulumException ()" mới có phải là một câu trả lời đúng không?
Thorbjørn Ravn Andersen

1
Vâng, đó là tùy thuộc vào người phỏng vấn. Nếu họ đưa ra một ví dụ về việc kiểm tra một biến và ném NPE với một thông điệp hữu ích thì tôi sẽ rất vui. Nếu tôi nghĩ rằng họ đã sử dụng câu trả lời đó bởi vì họ không thể đưa ra một số mã sẽ ném NPE một cách hợp pháp thì tôi sẽ lo lắng.
David

9

Những gì sẽ được in?

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");
    }
}

Trả lời : CoolReturn + 1

Khó hơn một chút:

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;  /* ;) */
    }
}

Trả lời : CoolReturn


mã đầu tiên chỉ ra rằng cuối cùng luôn bị loại bỏ ngay cả khi câu lệnh return có sẵn trong khối thử, nhưng tôi không có mã thứ hai ?? Điều gì đã xảy ra khi statement builder = null; xảy ra ??
palAlaa

3
@Alaa, nó gần giống như một giá trị tạm thời được đặt cho trình xây dựng, trình xây dựng được đặt thành null trong khối cuối cùng và sau đó giá trị tạm thời là giá trị được trả về.
răn đe

1
@VextoR, vâng Alaa đã đưa ra mô tả hay. Mã đó kiểm tra cách người được phỏng vấn hiểu thử ... cuối cùng chặn với trả về bên trong và phạm vi biến nói chung, xử lý biến
zaletniy

4
Câu lệnh return trả về tham chiếu đến đối tượng StringBuilder. Thay đổi tham chiếu cuối cùng không làm gì đối với tham chiếu thực sự được trả về. Tuy nhiên, việc thay đổi nội dung của đối tượng sẽ ảnh hưởng đến những gì được trả về, như trong ví dụ đầu tiên.
Derek Litz

8

Sự khác biệt giữa một lớp trừu tượng và một giao diện là gì? Khi nào bạn sẽ sử dụng từng người trong số họ?

Rất nhiều nhà phát triển Java không biết điều này, tôi đã hỏi hầu hết mọi người về khóa học khoa học máy tính của tôi ở trường đại học và đại đa số không thể trả lời được.


Sự khác biệt duy nhất là lớp trừu tượng có thể chứa các phương thức không trừu tượng.
TBH

1
Đó là câu trả lời bạn có nếu bạn đọc một cuốn sách Java, chắc chắn. Mặc dù sau đó bạn cũng có thể thêm rằng chúng cũng có thể chứa các biến thành viên: P Nhưng sự khác biệt khi sử dụng chúng và tại sao, thậm chí còn thú vị hơn.
ZoFreX

1
việc sử dụng giao diện cung cấp cho tôi kỹ thuật rất mạnh, đó là đa hình, có thể gọi bất kỳ phương thức ghi đè nào từ các lớp thực hiện giao diện theo cách dường như vô nghĩa, mà bạn không cần phải biết loại của từng lớp con.
palAlaa

@TBH - Đừng quên rằng, trong mô hình thừa kế duy nhất mà Java hiện đang sử dụng, bạn chỉ có thể mở rộng một lớp trừu tượng, cho một bộ chức năng - nhưng bạn có thể kết hợp nhiều giao diện trong một lớp để nhiều chức năng được triển khai mà không cần một chức năng hạn chế thừa kế.
MetroidFan2002

8

Những câu hỏi đơn giản như,

  • JRE và JDK là gì?
  • Tại sao java yêu cầu khả năng tương tác?

Mặc dù những điều này rất cơ bản, nhiều nhà phát triển không biết câu trả lời. Tôi đề nghị những điều này được hỏi trước các truy vấn liên quan đến mã.


Không biết về phần JDK / JRE. Chẳng hạn, không có sự phân biệt như vậy trên Mac. Vì vậy, là một nhà phát triển Java trên Mac, thực sự không cần biết gì về điều đó.
Fabian Steeg

Tôi nghĩ rằng đây là một câu hỏi hay và nếu nó giúp phơi bày những người đủ hiểu lầm để cố gắng phát triển Java nghiêm túc trên máy Mac thì tốt hơn. Nghiêm túc mà nói, nếu bạn tuyên bố là nhà phát triển Java nhưng sẽ không biết liên kết tải xuống nào để nhấp vào java.sun.com thì có vấn đề.
Đánh dấu B

Là một nhà phát triển java, người ta không cần phải lo lắng về nền tảng mà anh ấy / cô ấy đang sử dụng. Hiểu các công cụ java có vẻ là yêu cầu cơ bản. Tôi không nghĩ như vậy. Tôi không biết về Mac OS. Nhưng tôi không lo lắng lắm về hệ điều hành mà tôi làm việc
Ravisha

@mbaird Đó là một nhận xét khá có ý nghĩa. Mặc dù tôi phát triển trên máy Mac và tôi biết JRE / JDK là gì, nhưng hãy trung thực, trong một sự phát triển thực tế, nó có thực sự quan trọng không? Đặc biệt với các IDE làm cho dòng lệnh sử dụng quá khứ, một nhà phát triển Java cần biết cách sử dụng ngôn ngữ này hơn bất kỳ thứ gì khác.
Vua Alexis

6

Top 5 câu hỏi J2EE / JEE

Danh sách các câu hỏi phần mềm trung gian J2EE / JEE mà tôi đã phải đối mặt đặc biệt dài, nhưng đây là 5 câu hỏi hàng đầu mà tôi đã được hỏi và dẫn đến các cuộc thảo luận tốt:

  1. Điều gì xảy ra khi MDB gặp một ngoại lệ mà nó không thể xử lý?
    Câu hỏi này thường dẫn đến các cuộc thảo luận thú vị khác nhau về thông điệp độc hại, hàng đợi lỗi, v.v.
  2. Đưa ra một Chủ đề JMS và một vài người tiêu dùng về các JVM khác nhau, các câu hỏi về các kịch bản khác nhau có và không có người tiêu dùng lâu bền.
    Câu hỏi này thường cho phép tôi thảo luận về thời điểm sử dụng thuê bao bền, khi nào nên sử dụng hàng đợi, v.v.
  3. Nếu bị mắc kẹt trong tình huống truy cập nội dung Hibernate / JPA POJO dẫn đến ngoại lệ, làm thế nào để giải quyết nó?
    Điều này dẫn đến các cuộc thảo luận tuyệt vời về việc lười tải, bù nước, v.v., nó thậm chí còn dẫn đến việc so sánh và đối chiếu JPA với các loại đậu Entity. Tôi đã thấy hữu ích khi được chuẩn bị, và rõ ràng trong các khái niệm.
  4. Làm thế nào một dịch vụ web đơn giản có thể được cung cấp?
    Bất kỳ giải pháp nào từ máy chủ web đơn giản dựa trên các giải pháp SOAP / REST tinh vi và bất kỳ giải pháp nào ở giữa, đều đủ tốt. Ngoài ra, dựa trên người phỏng vấn, đôi khi nó dẫn đến các cuộc thảo luận rất thú vị về các chủ đề như một số ý tưởng thiết kế - trước tiên là WSDL, phong cách doc, trung gian SOAP, v.v. -RPC, hoặc SOAP1.2 trên SOAP1.1, câu trả lời thường dựa trên mức độ tôi nhớ.
  5. Tiêm tài nguyên JEE 5
    Câu hỏi này được đặt ra theo nhiều cách, bắt đầu từ mẫu Định vị dịch vụ đến các javax.naming.Contextcâu hỏi.

Một câu hỏi khó khác tôi thấy phiền hà, nhưng đã phải đối mặt nhiều lần là, Làm thế nào các thư viện phụ thuộc được đóng gói vào một kho lưu trữ?
hoặc Hiển thị của các lớp khác nhau trong một kho lưu trữ đi kèm.
Nếu cuộc thảo luận không dẫn đến hệ thống phân cấp trình tải lớp của các máy chủ ứng dụng khác nhau, lưu trữ tài nguyên, v.v., tốt nhất là từ chức và tiếp tục.

Top 5 câu hỏi Java cốt lõi:

  1. Câu hỏi trên java.util.collections
    Đây là mẹ của tất cả các câu hỏi. Một khi bạn có thể hạ cánh người phỏng vấn một cách hiệu quả trong lĩnh vực này, và nếu bạn đã chuẩn bị, phần còn lại của cuộc phỏng vấn thường ở lại đây. Hãy chắc chắn biết Set, List, Map, và tầm quan trọng củaObject.equals()Object.hashCode()trong mọi việc thực hiện các giao diện.
  2. Tái cấu trúc câu hỏi
    Đây là tốt nếu người phỏng vấn có một tâm trí cởi mở. Nếu người phỏng vấn đã có một giải pháp cụ thể trong đầu và bạn không phù hợp với anh ấy / cô ấy, bạn sẽ phải chịu đựng rất nhiều. Tốt nhất là đồng ý với câu trả lời "Tôi hiểu các giải pháp khác là có thể."
  3. Các câu hỏi về đa luồng trong JDK5, so sánh với các phiên bản JDK trước đó tôi đã thấy tốt nhất nên chuẩn bị với các lớp gói java.util.conc hiện . Cuốn sách của Doug Lea có hầu hết các câu trả lời.
  4. Có gì mới trong JDK1.6 / JDK1.7 ...?
    Đây là một câu hỏi bắn chắc chắn với nhiều người phỏng vấn. Nhiều như tôi ghét điều này, tốt nhất là nên chuẩn bị. Ít nhất là nhớ một vài điều mà tôi đã làm việc cùng, và dẫn dắt cuộc thảo luận theo một số hướng khác, phần lớn và hiệu quả tránh và giải quyết vấn đề.
  5. Các mẫu trong Java API
    Time và một lần nữa tôi đã được yêu cầu chỉ ra một mẫu GoF trong API Java. Tốt hơn nên chuẩn bị cho cái này.


5

Bạn thích gì nhất / ít nhất về Java và tại sao?


5

tại sao bạn lại ghi đè phương thức toString ()?


4

Một câu hỏi thuần Java hơn:

Sự khác biệt giữa giấc ngủ và chờ đợi là gì? Không nhiều người thực sự hiểu làm thế nào chờ đợi là làm việc.

Làm thế nào để bạn cần xử lý InterruptedExceptions?


4

Đây là câu hỏi tôi phải đối mặt trong cuộc phỏng vấn của tôi.

Tại sao phương thức chính trong Java được gọi là public static void main (String [] args)?

Câu trả lời:

1. main () phải được khai báo công khai vì nó được JVM gọi bất cứ khi nào chương trình thực thi bắt đầu. JVM không thuộc gói chương trình của chúng tôi.

Đặt hàng để truy cập chính bên ngoài gói, chúng tôi phải khai báo nó là công khai. Nếu chúng tôi khai báo nó là bất kỳ thứ gì khác ngoài công khai, nó sẽ hiển thị Lỗi Runtime nhưng không phải là lỗi thời gian biên dịch

2. main () phải được khai báo là static vì nếu một phương thức được khai báo là static thì chúng ta có thể gọi phương thức đó bên ngoài lớp bằng ClassName.methodName ();

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

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

Trước tiên, JVM sẽ tải lớp Test và sẽ kiểm tra các đối số dòng lệnh và gọi phương thức chính là Test.main ();

3. main () phải được khai báo là void main () vì JVM không mong đợi bất kỳ giá trị nào từ hàm main (). Vì vậy, nó phải được khai báo là void.

Nếu loại trả về khác được cung cấp, thì đó là RunTimeError tức là; NoSuchMethodFoundError.

4. main () phải có các đối số Chuỗi dưới dạng mảng vì JVM gọi phương thức chính bằng cách truyền đối số dòng lệnh. Chúng được lưu trữ trong đối tượng mảng chuỗi, nó được truyền dưới dạng đối số cho hàm main ().


Bạn có thể sử dụng public static void main(String... args)nếu bạn rất có khuynh hướng :-) Nó có cùng chữ ký với[]
corsiKa

3

Sự khác biệt giữa J2SE và J2EE (hoặc JSE và JEE) là gì?

Một nhà phát triển có thể chỉ ra rằng phiên bản doanh nghiệp về cơ bản là một định nghĩa giao diện (tức là một đặc điểm kỹ thuật) có thể được thực hiện bởi các nhà cung cấp. Trong khi đó phiên bản tiêu chuẩn là một triển khai theo đúng nghĩa của nó


4
Là khả năng giữ cho thuật ngữ tiếp thị thẳng thực sự quan trọng vào cuối ngày?
Laurence Gonsalves

@Laurence - đó là một điều vô lý để nói. Có một sự khác biệt thực sự giữa hai điều mà bạn sẽ ngạc nhiên khi có nhiều nhà phát triển được cho là có kinh nghiệm không hiểu
oxbow_lakes

Quan điểm của tôi là nếu ai đó là một lập trình viên giỏi, tôi không thể quan tâm nếu họ biết sự khác biệt giữa J2SE và J2EE.
Laurence Gonsalves

Tôi đọc câu hỏi là "những thứ mà nhà phát triển JEE + JSE nên biết", trong trường hợp đó tôi nghĩ rằng việc hiểu sự khác biệt giữa hai công nghệ là có liên quan.
oxbow_làm

4
@ Thorbjørn Ravn Andersen Tôi nghi ngờ rằng hầu hết các lập trình viên Java, bao gồm những người giỏi, đều nhận thức rõ về sự khác biệt ở trên, "phiên bản doanh nghiệp về cơ bản là một định nghĩa giao diện ... Trong khi đó phiên bản tiêu chuẩn là một triển khai theo đúng nghĩa của nó". Đối với hầu hết các lập trình viên Java giỏi, sự khác biệt quan trọng là API nào có sẵn. ví dụ: Servlets là một phần của EE, v.v. Trong mọi trường hợp, như tôi nghĩ việc tìm lập trình viên giỏi hơn lập trình viên ngôn ngữ X tốt, tôi nghĩ điều quan trọng hơn là tìm được lập trình viên Java giỏi hơn lập trình viên JSE / JEE giỏi.
Laurence Gonsalves

3

Làm thế nào để volatileảnh hưởng đến tối ưu hóa mã bằng trình biên dịch?


3
Mục đó nên chứa câu trả lời đúng quá.
Thorbjørn Ravn Andersen

Tôi không nhớ câu trả lời đầy đủ, hãy xem phần này youtube.com để giải thích tốt. Tóm lại: giả sử rằng phương pháp sử dụng biến dễ bay hơi tại một số điểm. Sau đó, trình biên dịch không tối ưu hóa mã của phương thức này sau thời điểm đó.
La Mã

2

Làm thế nào về đậu phiên là gì và mô tả một số khác biệt giữa đậu phiên phi trạng thái và trạng thái.


2

Viết chương trình chấp nhận hai số nguyên và xuất số lớn nhất trong hai số vào một tệp tại vị trí bạn chọn. Bây giờ mô tả những gì mỗi tuyên bố làm.

Có thể đi sâu khá sâu bắt đầu từ tầm quan trọng của báo cáo nhập khẩu, ngay đến khi chấm dứt bất thường


2

Cốt lõi: 1. Những ngoại lệ được kiểm tra và không được kiểm tra là gì? 2. Trong khi thêm ngoại lệ mới trong mã, loại nào (Đã kiểm tra / Bỏ chọn) sẽ sử dụng khi nào?

Servlet: 1. Sự khác biệt giữa answer.sendRedirect () và request.forward () là gì?


bạn có thể vui lòng trả lời những câu hỏi này không? đây là lần đầu tiên tôi biết về "ngoại lệ được kiểm tra và không được kiểm tra" !!
palAlaa

Tìm kiếm google đơn giản có thể dẫn bạn đến câu trả lời: google.co.in/ từ
YoK

1

Làm thế nào để làm threadsviệc? Là synchronizedgì Nếu có hai synchronizedphương thức trong một lớp, chúng có thể được thực thi đồng thời bởi hai luồng. Bạn sẽ ngạc nhiên khi nghe nhiều người trả lời . Sau đó, tất cả các câu hỏi liên quan đến chủ đề, ví dụ như bế tắc , chết đói , vv


2
Đó là bởi vì câu trả lời là có thể ...
Fortega

@Fortega - Sao lại thế được? Mỗi phương thức có một khóa trên đối tượng. Nếu một người threadđang chạy phương thức, không ai khác threadcó thể có được khóa.
fastcodejava

1
Nếu bạn có hai đối tượng cùng loại, bạn có thể gọi phương thức đầu tiên trên đối tượng thứ nhất và phương thức thứ hai trên đối tượng thứ hai cùng một lúc. Trừ khi các phương thức là tĩnh tất nhiên.
Fortega

2
Nếu bạn không hiểu đúng cách khóa diễn ra, thì đó không thực sự là điều không có trí tuệ. Ngoài ra, mặc dù có thể không có trí tuệ, điều đó không có nghĩa là câu trả lời của tôi không chính xác :-)
Fortega

1
Câu trả lời có thể gây nhầm lẫn cho những người lập trình không sử dụng chủ đề trong công việc của họ, nhưng tôi nghĩ đó là một câu hỏi hay :)
palAlaa

1

Một điều mà nhiều lập trình viên Java không biết là String là bất biến, vì vậy hãy sử dụng StringBuilder hoặc StringBuffer!

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

Và Số như Số nguyên, Dài và vân vân
Arthur Ronald

Hiệu suất khôn ngoan, không còn có sự khác biệt giữa nối các chuỗi bất biến và sử dụng StringBuilder. Điều này là do các trình biên dịch java hiện đại sẽ tối ưu hóa việc ghép nối: java.sun.com/docs/books/jls/third_edition/html/. Tốt nhất là sử dụng bất kỳ phương pháp nào dễ đọc hơn.
Brent Wilson

1
@BrentWilson những gì bạn liên kết sẽ không làm những gì bạn nghĩ. Nó sẽ biến s += "a" + "b" + "c"thành một Stringbuilder.append(...)kịch bản. Nhưng nó sẽ không tối ưu hóa một forvòng lặp. Mã trong câu trả lời này cuối cùng sẽ tạo ra tổng số 201 Chuỗi, 100 StringBuilders và (tùy thuộc vào việc triển khai) 300 char[]s khác nhau bên trong các StringBuilders đó và ước tính 425k + ký tự. Thay đổi nó để sử dụng StringBuilder hoàn toàn sẽ giảm điều này xuống còn 1 String, 1 StringBuilder và 13-15 char[]s nội bộ chỉ sử dụng ~ 8k ký tự thay vì cần.
corsiKa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.