모든 훌륭한 Java / Java EE 개발자가 대답 할 수있는 질문이 있습니까? [닫은]


138

나는 모든 좋은 .Net 개발자가 대답 할 수 있어야하고 질문 의 내용과 접근 방식에 크게 감명을 받았으므로 같은 질문으로 Java / Java EE Developer에 대해이 질문을하고 있습니다.

훌륭한 Java / Java EE 프로그래머가 어떤 질문에 대답 할 수 있다고 생각 하십니까?

이 질문은 사용자별로 다르며 프로그래밍 커뮤니티를 제공하는 것을 목표로하기 때문에 커뮤니티 위키로 표시하고 있습니다.

놀라운 답변을 기대합니다.

편집 : 사람들이 언어에 대해 새로운 것을 배울 수 있도록 의견에 제안 된대로 질문에 대답하십시오.


3
이 질문이 .Net 질문에 비슷한 응답을 얻을 수없는 이유는 무엇입니까?
Rachel

5
좋은 주 :), .Net 질문은 1 년 전에 요청 되었으며이 질문은 하루 전이며 응답을 비교하고 있습니다.
재핑 (zapping)

1
사람들이 무언가를 배울 수 있도록 질문을 편집하고 "자신의 질문에 답하십시오."라는 문장을 추가하십시오.
r3zn1k

9
"Enterprise Edition의 현재 약어는 무엇입니까";)
Bozho

17
알버트 아인슈타인의 일화. 아인슈타인의 동료 중 한 명이 그에게 전화 번호를 요청했습니다. 아인슈타인은 전화 번호부를 찾아 찾아 보았습니다. "당신은 당신의 자신의 번호를 기억하지 않습니까?" 남자가 물었다. 아인슈타인이 대답했다. "왜 책에서 쉽게 얻을 수있는 것을 외워야합니까?" 내가 모든 사람에게 다가 가고 있습니까?)? 그래, 아인슈타인이 면접관을보고 있지 않았어 ...
SB.

답변:


83

hashCode ()와 equals ()의 관계는 무엇입니까? 이 방법의 중요성은 무엇입니까? 이를 구현하기위한 요구 사항은 무엇입니까?


그렇습니다. 실제로 문제가 발생하지 않아도 모든 개발자는 적어도 문제를 알고 있어야합니다.
sleske

3
(동일) 및 자바 @ 내의 hashCode () technofundo.com/tech/java/equalhash.html
pramodc84

70

세트, 맵 및 목록의 차이점은 무엇입니까?

나는 아직도 전화 인터뷰에서 얼마나 많은 사람들이 이것을 모르는 것에 놀랐습니다.


8
물론, 인터넷상의 문서 ( "java collections framework")를 살펴 보는 것은 20 초의 문제이므로, 많은 가치있는 사람들이 그것을 메모리에 보관하는 데 신경 쓰지 않을 수 있습니다.
Manur

127
죄송합니다, 그것을 사지 마십시오. 모든 개발자가 알아야 할 기본 지식입니다.
Jon

15
나는 소프트웨어에서 직업에 대해 생각하는 사람조차도 그것을 이해해야 할뿐만 아니라 다른 종류의 목록 (ArrayList / LinkedList)의 차이점을 이해해야한다고 말하고 싶습니다. 반드시 최상의 구현 또는 O (n) 표기법은 아니지만 언제 무엇을 사용해야하는지에 대한 이해입니다.
Gonzo 목회

11
+1 @Jon : 저는 일반적으로 "상세를 암기 할 필요가 없습니다"라는 생각의 학교에 가입하지만, 기본 인터페이스의 기본적인 개념적인 차이점조차 모른다면, 당신은 확실히 훌륭한 Java 개발자가 아닙니다.
Joachim Sauer

13
@Joachim : 문장에서 "Java"라는 단어를 삭제할 수 있습니다. 세트, 맵 및 목록은 기본 알고리즘 개념입니다.
CPerkins

44

인터페이스가 여러 인터페이스를 확장 할 수 있습니까?

대부분의 사람들은 java에 다중 상속이 없다는 것을 알고 있기 때문에 "아니오"라고 대답합니다. 그러나 인터페이스는 여전히 여러 인터페이스를 확장 할 수 있지만 클래스는 여러 클래스를 확장 할 수 없습니다. 이것은 다이아몬드 문제로 이어지지 않습니다.

대답은 "아니오"가 "왜, 면접관 물어 안 이 금지 될?". 그런 다음 그것에 대해 생각하기 시작하면 문제가 없음을 인식해야합니다.

그래서 당신은 면접에서 무언가를 스스로 배웠고 면접관에게 당신이 수업, 사물, 상속, 다형성 등에 대해 추론 할 수 있음을 보여주었습니다. 왜 이해


나는 어제 C ++ 강사와 다이아몬드 상속 문제를 혼동했다. 그녀는 그것에 대해 전혀 몰랐다 :)
Esko

2
한 번이 질문을 받았으며 "아니요"라고 대답했습니다. 스트레스라고 생각하고 너무 빨리 대답했습니다. 항상 사용하지 않는 것에 대한 답을 알기가 어렵습니다.
IAdapter

1
나는 본문에서 조금 더 자세히 설명합니다. "아니오"라고 대답하면 실제로 괜찮습니다. 이 질문으로 좋은 점은 OO 개념에 대한 토론을 시작하는 좋은 방법이며 후보자가 어떻게 이유를 보는 것입니다. 면접관이 방금 "예"를 듣고 자한다면 사실상 무의미합니다. 인터페이스의 다중 상속은 실제로 마음에 의해 알려진 일반적인 것이 아닙니다.
ewernli

3
이 질문의 까다로운 버전은 "자바가 다중 상속을 지원합니까?"입니다. 응답은 인터페이스에 대해서만 "정렬"
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

@Rachel : 이유는 final키워드 가 클래스 Namename필드가 아닌 객체에 적용 되었기 때문입니다.Name
ryanprayogo

20
매개 변수 n는 final로 선언되므로 test메서드 본문 에서 다시 할당 할 수 없습니다 . 메소드 test가 매개 변수를 재할 당하지 않기 때문에 오류가 발생 하지 않으며 매개 변수에 특성을 설정하기 n = new Name("test");
만하면

7
@rjohnston의 의견에 추가 : 메소드 매개 변수의 final 사용은 클래스 인스턴스의 불변성을 보장하지 않습니다. 불변의 필요성 (본 경우 이름) 클래스 (세터를 제공하지 않는 존재하는 경우, 예를 들어) 그렇게 설계되어야한다있을 경우
sateesh

소중한 정보를 공유해 주셔서 감사합니다. 나는 이것에 대한 귀하의 의견에 진심으로 감사드립니다.
Rachel


17

트릭 질문 : Java에서 어떤 종류의 매개 변수가 참조로 전달됩니까?

얼마나 많은 사람들이 여전히 "기본형이 가치에 의해 전달되고, 객체가 기준에 의해 전달됨"만트라를 앵무새 화하는지는 놀랍습니다.


4
나는 정답이 항상 인터뷰에서 주어야하는지 궁금합니다. 내가 인터뷰했던 곳에서 인터뷰어도 같은 것을 앵무새로 만들었다.
MAK

2
나는 C를 모국어로 공부 한 사람들과 C ++을 모국어로 공부 한 사람들 사이에서 Java에 관한이 질문에 답하는 데 차이점을 발견했습니다. 아마도 C 사용자는 포인터를 값에 전달하는 것이 "참조에 의한 통과"라고 가르치기 때문일 것입니다.
Uri

23
"어떤 결과가 참조로 전달 되었는가?"라고 물으면 " 잘못된"대답이 기술적으로 옳아 질 것이므로 어리석은 질문입니다. . 참조에 의한 전달의 의미 에 대한 정의의 문제 이므로 객체를 전달하는 한 가지 방법 만 있기 때문에 Java 세계에서는 그다지 가치가 없습니다. 원하는 방식 으로 참조를 위해 임의의 정의를 사용하는 것보다 실제로 어떤 일이 발생하는지 이해하는 것이 더 중요합니다 .
x4u

3
이 질문은 종종 "가치로 전달"/ "참조로 전달"의 정확한 정의에 달려 있기 때문에 문제가됩니다. 종종 잘못 사용됩니다. 좋은 개발자가 정의를 알아야한다는 데 동의하지만 그 결과를 이해하는 것이 더 중요합니다. Java의 실제 동작을 이해하면 개념의 올바른 이름을 아는 것은 의미가 없습니다. 실제로 변경되지 않기 때문에 실제로 논의하지 않기 때문입니다.
sleske

3
음, 객체 자바에서 참조로 전달됩니다. 값으로 객체를 전달할 수 없습니다. 무엇보다도 스택에 객체가 존재하지 않습니다. 참조 는 값으로 전달됩니다.
Sean Owen

17

당신은 "좋은", "개발자"라고 말했다. 여기도 2 센트입니다 .. :)

  • "체크 된 예외"는 무엇을 의미합니까?
  • 어느 쪽을 사용하는 것이 더 낫고 언제 : 예기치 않은 조건을 처리하기위한 주장 또는 예외?
  • 왜 String 클래스가 최종적인가? (또는 그렇지 않습니까?;))
  • 클래스의 wait, notify 및 notifyAll 메소드입니까?
  • 왜 스레드 클래스가 최종이 아닌가? 왜 스레드를 확장합니까?
  • 왜 두 개의 Date 클래스가 있습니까? 하나는 java.util 패키지와 다른 하나는 java.sql?
  • finally 블록에서 예외가 발생하면 어떻게됩니까? 나머지는 마지막으로 실행됩니까?
  • 가비지 수집기가 있지만 Java 응용 프로그램에서 메모리 누수가 완전히 없습니까? 그렇지 않다면 어떻게됩니까?

J2EE의 경우 :

  • 서블릿에 인스턴스 / 정적 변수를 갖는 것이 좋습니까? 왜 안돼? 그렇다면 "상태"를 어디에 저장합니까?
  • 위의 질문에 계속 : (웹) 응용 프로그램의 "상태"는 무엇입니까?
  • "JSP"에서 DB 연결 생성 / 닫기를 시작하면 어떻게됩니까?
  • JSP 예외를 처리하는 방법은 무엇입니까? 시험 해봐? 흠 .. 다른 게 있습니까?

나는 많은, 많은, 더 많은 것을 생각할 수 있지만 지금은 그렇게 할 것입니다 :)


8
대답은 좋을 것입니다, 나는 그들 중 일부에 대한 대답을 모르겠습니다.
MAK

점검 된 예외는 프로그램이 발생할 경우 처리 할 계획이 있어야하는 예외입니다. 점검 된 예외를 던지는 무언가 주위에 try / catch 블록이 없으면 프로그램은 컴파일되지 않습니다. wait, notify 및 notifyAll은 스레드 동기화를위한 것이며 Java에서는 모든 객체를 동기화 할 수 있습니다. 개념적으로 클래스에 자체 스레드가 필요한 경우 (즉, 일부 관리를 수행해야하며 다른 작업자 스레드에서 실행될 수있는 작업을 나타내지 않는 경우) Runnable 구현과 달리 Thread를 확장합니다.
ZoFreX

finally 블록에 예외가 발생하면 나머지 블록은 실행되지 않습니다. "순수한"Java 프로그램에서 정식 메모리 누수가 존재하지 않습니다. 그러나 데이터 구조에 더 이상 필요하지 않은 객체에 대한 참조가 들어 있으면 메모리를 계속 사용할 수 있습니다. 네이티브 라이브러리를 사용하는 경우 SWT와 같이 리소스를 관리해야 할 수도 있습니다. 특정 자산에서 .dispose ()를 호출하여 누출되지 않도록해야합니다.
ZoFreX

2
개발시 처리해야 할 "이것은 절대로 발생해서는 안됩니다"오류에 대해 어설 션을 사용하십시오. 실제로 런타임에 발생할 수있는 오류에 대해서는 예외를 사용하십시오. 프로그램은 어떤 방식 으로든 오류를 처리해야합니다.
MatrixFrog

16

String, StringBuffer 및 StringBuilder의 차이점은 무엇입니까?


5
String-문자열을 나타내는 불변 클래스. StringBuffer-이전 버전의 Java에서 도입 된 빌더 패턴으로, 모든 작업 (또는 대부분)에서 문자열을 작성하는 데 동기화합니다. StringBuilder-Java 5 (JDK 1.5)에 도입되었으며 모든 작업 (또는 대부분)에서 동기화 되지 않는 문자열을 빌드하는 데 사용하는 StringBuffer API를 공유하는 클래스입니다 . String의 구성은 단일 스레드에서 발생하는 경향이 있으므로 StringBuilder는이를 지원하는 Java 런타임 / JDK에서이 목적으로 선호됩니다.
MetroidFan2002

13

"배포 설명자가 무엇입니까?"

후보자가 무의식적으로 떨리는 경우 3.0 이전 EJB를 사용한 경험이 있습니다.


"이 질문을 2 번 더 반복 한 후 무의식적으로 떨림 + 심하게 땀을 흘리다 + 죽은 사람을 떨어 뜨림"으로 만들 때, 때로는 전체 주석을 추가 / 지원 한 "단일"이유를 느낀다! :)
Elister

12

많은 질문과 인터뷰는 http://www.techinterviews.com/interview-questions/java 에서 제공됩니다 . 있으며 선택의 복사 / 붙여 넣기에 실제로 가치가있는 것은 아닙니다.

아닙니다 . 중요하다고 생각하는 것들을 직접 편집하는 것은 당신 의 몫 입니다. 개인적으로 저는 항상 두 단계로 진행합니다. 먼저 경험과 기술에 대한 기본 아이디어를 얻는 몇 가지 질문, 문제 해결 상황. 나는 알려진 질문 에 대답 할 수 있다는 것이 당신에게 좋은 또는 나쁜 알 수없는 문제 해결사를 만들어 준다고 확신하지는 않습니다 . 따라서 사람들에게 주어진 문제를 해결하고 요구 사항을 제시하고 코드를 작성하도록 요청하는 것을 선호합니다 (종이는 아님). 나는 그들에게 돌아와서 그들이 어떻게했는지, 코딩 스타일, 제안 된 API를 어떻게 사용했는지 등을 확인할 시간을 준다.

내가 가장 좋아하는 질문은 "자바에 대해 싫은 점은 무엇입니까?"입니다. ( 이것 의 정신으로 ). 정말 훌륭한 질문입니다. 후보자가 Java를 얼마나 사용하고 API를 탐색했는지, 그리고 OP가 작성한 것처럼 종교에 대한 종교적 여부에 대한 즉각적인 피드백을 제공합니다.

업데이트 : CPerkins가 제안한대로 위에서 제안한 질문에 대한 더 나은 표현은 "Java에서 변경된 것을 가장보고 싶습니까?"입니다. 그리고 실제로, 나는이 방법을 선호합니다.


나는 "자바에 대해 무엇을 좋아하지 않습니까?"라는 질문을 좋아하지 않습니다. "마지막 회사를 떠난 이유는 무엇입니까?" 게다가 그들은 "자바를 싫어한다면 당신에게 직업을 제공하지 않을 것"이라고 생각할 것입니다.
IAdapter

@ 01 그것은 당신의 권리이지만 당신에게 동의하지 않으며 당신이 그 질문의 요점을 놓쳤다 고 생각합니다.
Pascal Thivent

1
나는 보통 이것이 "싫다"가 아니라 "자바에서 변경된 것을 가장 좋아하는 것"과 같은 것을 보았습니다.
CPerkins

@CPerkins 그것은 "좋아요"보다 낫고 "증오"(참조)보다 훨씬 낫습니다. 감사.
Pascal Thivent

11

System.out.println에서 'System', 'out', 'println'은 무엇입니까? HashMap에서 'put'을 호출하면 어떻게됩니까?


답은 무엇입니까? 나는 어떤 시스템 클래스를 생각하지 않습니다! 난 asnwer를 알고 궁금해 :)
palAlaa

10
  1. Java에서 사용되는 다양한 액세스 수정자를 설명하십시오. 많은 사람들이 특히 기본 액세스 권한으로 어려움을 겪었습니다.
  2. Java 언어 또는 플랫폼에 대해 한 가지를 변경할 수 있다면 무엇입니까? 좋은 개발자는 여기에 대답을 할 것이며 실제로 개발에 관심이없는 사람들은 신경 쓰지 않을 것입니다.
  3. 그들의 CV가 EJB2.1을 사용하는 것과 같은 것을 말하면 EJB3에 대해 그들이 무엇을 알고 있는지 물어보십시오. 최고의 개발자는 최신 버전을 사용하지 않더라도 최신 개발을 따라갈 것입니다.

3
변경할 수있는 것이 하나 뿐인 경우 , 오버로드 가능한 제한된 연산자 세트 (예 : 오버로드 new또는 ^또는 >>, <<>>>) 를 사용하여 언어에 연산자 오버로드를 추가 합니다. 다른 것을 바꿀 수 있다면 진정한 호출 기준 의미론 을 추가하는 것 입니다. 세 번째는 unsigned정수 유형 을 추가하는 것입니다 .
Chinmay Kanchi

1
델리게이트와 클로저, 람다 표현 일 수도 있지만 실제로는 필요하지 않습니다. 확장 방법도 훌륭합니다. 제대로 사용하면 실제로 코드를 정리할 수 있습니다.
Joel

10
  • 재정의시 일반 계약이란 무엇입니까?
  • 더 나은 옵션이 목록이나 배열을 선호합니까?
  • 일반적으로 허용되는 명명 규칙은 무엇입니까?
  • 직렬화는 어떻게 작동합니까?
  • Comparable을 구현하는 방법?
  • JDBC의 Prepared Statements를 사용하면 어떤 이점이 있습니까?
  • Java EE 란 무엇입니까?
  • 컨테이너 란 무엇이며 어떤 서비스를 제공합니까?

9

Java "경험"으로 졸업생을 고용 하는 경우 NullPointerException이 발생하도록하는 일부 코드 작성 과 같은 간단한 질문은 최근에 Java를 사용한 응시자를 구분할 수 있으며 , 단위 / 강좌를 마칠 때까지 멈추지 않았습니다.


16
"throw new NullPointerException ()"이 정답입니까?
Thorbjørn Ravn Andersen 님이

1
글쎄요, 그것은 면접관에게 달려 있습니다. 그들이 변수를 테스트하고 유용한 메시지와 함께 NPE를 던지는 예를 보여 주면 기쁠 것입니다. NPE를 합법적으로 던질 수있는 코드를 만들 수 없기 때문에 그 대답을 사용했다고 생각하면 걱정할 것입니다.
David

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


첫 번째 코드는 try 블록에서 return 문을 사용할 수 있더라도 마지막으로 항상 실행된다는 것을 나타내지 만 두 번째 코드는 얻지 못했습니까 ?? statement builder = null 일 때 발생한 일; 발생 ??
palAlaa

3
@Alaa, 그것은 임시 값이 빌더로 설정되는 것과 거의 같으며, finally 블록에서 빌더가 null로 설정 된 다음 임시 값이 반환됩니다.
deterb

1
@ VextoR, 예 Alaa는 멋진 설명을했습니다. 이 코드는 인터뷰 대상자가 try ...를 이해하는 방법을 확인합니다. 최종적으로 내부 반환 및 변수 범위, 일반적으로 변수 처리
zaletniy

4
return 문이 StringBuilder 객체에 대한 참조를 반환합니다. 마지막으로 참조를 변경하면 실제로 반환되는 참조에는 아무런 영향이 없습니다. 그러나 객체 의 내용 을 변경해도 첫 번째 예와 같이 반환 되는 내용 에 영향을줍니다.
데릭 리츠

8

추상 클래스와 인터페이스의 차이점은 무엇입니까? 언제 각각을 사용 하시겠습니까?

많은 Java 개발자들은 이것을 모르고 있습니다. 나는 대부분의 사람들에게 대학의 컴퓨터 과학 과정을 물었고 대다수는 대답 할 수 없었습니다.


유일한 차이점은 추상 클래스가 비추 상 메소드를 포함 할 수 있다는 것입니다.
TBH

1
Java 책을 읽으면 그 대답을 얻을 수 있습니다. 그럼에도 불구하고 멤버 변수도 포함 할 수 있다고 덧붙일 수도 있습니다 .P 그러나 변수를 사용하는 시점과 이유의 차이는 훨씬 더 흥미 롭습니다.
ZoFreX

1
인터페이스를 사용하면 polymophism 인 매우 강력한 techniqe가 제공됩니다.이 기술은 인터페이스를 겉보기 방식으로 구현하는 클래스에서 재정의 된 메서드를 호출하여 각 자식 클래스의 유형을 알 필요가 없습니다.
palAlaa

@TBH-Java가 현재 사용하는 단일 상속 모델에서 하나의 기능 세트에 대해 하나의 추상 클래스 만 확장 할 수 있지만 단일 기능없이 여러 기능을 구현하기 위해 단일 클래스에 여러 인터페이스를 결합 할 수 있습니다. 상속 제한.
MetroidFan2002

8

다음과 같은 간단한 질문

  • JRE와 JDK 란 무엇입니까?
  • Java가 상호 운용성을 주장하는 이유는 무엇입니까?

이것들은 매우 기본이지만 많은 개발자들이 답을 모릅니다. 코드 관련 쿼리보다 먼저 요청하는 것이 좋습니다.


JDK / JRE 부분을 모릅니다. 예를 들어, Mac에는 그러한 차이점이 없습니다. 따라서 Mac의 Java 개발자는 전혀 알 필요가 없습니다.
Fabian Steeg

나는 이것이 좋은 질문이라고 생각하며, 그것이 잘못된 안내를받는 사람들이 Mac에서 심각한 Java 개발을 시도하는 데 더 도움이된다면 더 잘 노출시킬 수 있다고 생각합니다. 진심으로, Java 개발자라고 주장하지만 java.sun.com을 클릭 할 다운로드 링크를 모른다면 문제가있는 것입니다.
Mark B

잘 자바 개발자는 자신이 착용하고있는 플랫폼에 대해 전혀 걱정할 필요가 없습니다 .Java 도구를 이해하는 것이 기본 요구 사항 인 것 같습니다. 매우 중요합니다. 내가 일하는 OS에 대해.
Ravisha

@mbaird 그것은 오히려 의미있는 의견으로 나옵니다. Mac에서 개발하고 있으며 JRE / JDK가 무엇인지 알고 있지만 실제 개발에서 솔직하게 말하면 정말 중요합니까? 특히 명령 줄을 과거의 것으로 사용하는 IDE의 경우 Java 개발자는 다른 언어보다 언어를 사용하는 방법을 알아야합니다.
Alexis King

6

5 가지 J2EE / JEE 관련 질문

내가 직면 한 J2EE / JEE 미들웨어 질문 목록은 예외적으로 길지만 다음은 제가 요청한 상위 5 개이며 좋은 토론으로 이어졌습니다.

  1. MDB에서 처리 할 수없는 예외가 발생하면 어떻게됩니까?
    이 질문은 일반적으로 독 메시지, 오류 대기열 등에 대한 다양한 흥미로운 토론으로 이어집니다.
  2. JMS 주제와 다른 JVM의 일부 소비자를 고려할 때 내구성있는 소비자가 있거나없는 다양한 시나리오에 대한 질문이 있습니다.
    이 질문을 통해 일반적으로 영구 가입자 사용시기, 대기열 사용시기 등을 논의 할 수 있습니다.
  3. Hibernate / JPA POJO 컨텐츠에 액세스하면 예외가 발생하는 상황에 빠지면 어떻게 해결할 수 있습니까?
    이것은 게으른 로딩, 재수 화 등에 관한 훌륭한 토론으로 이어지고, JPA와 엔티티 bean을 비교하고 대조하기까지합니다. 준비하고 개념을 명확하게하는 것이 유용하다는 것을 알았습니다.
  4. 간단한 웹 서비스를 어떻게 제공 할 수 있습니까?
    간단한 웹 서버 기반의 정교한 SOAP / REST 솔루션과 그 사이의 솔루션은 충분해야합니다. 또한 면접관을 바탕으로 WSDL first, doc-style, SOAP 중개자 등과 같은 일부 디자인 아이디어와 같은 주제에 대해 매우 흥미로운 토론으로 이어질 수 있습니다. -RPC 또는 SOAP1.1을 통한 SOAP1.2의 대답은 대개 내가 기억하는 정도에 따라 다릅니다.
  5. JEE 5 리소스 삽입
    이 질문은 Service Locator 패턴 에서 시작하여 다양한 방법으로 제기 됩니다.javax.naming.Context 질문에 .

문제가 있지만 여러 번 직면 한 또 다른 까다로운 질문 은 종속 라이브러리가 아카이브에 어떻게 패키지되어 있습니까?
또는 번들 아카이브의 다양한 클래스의 가시성.
토론으로 인해 서로 다른 응용 프로그램 서버, 리소스 아카이브 등의 클래스 로더 계층 구조가 생성되지 않으면 사임하고 계속 진행하는 것이 가장 좋습니다.

5 가지 핵심 Java 질문 :

  1. java.util.collections에 대한 질문
    이것은 모든 질문의 어머니입니다. 면접관을이 지역에 효과적으로 착륙 시킬 수 있고 준비가되면 면담의 나머지 부분은 보통 여기에 있습니다. 확인 될 알고 Set, List, Map, 그리고 중요성 Object.equals()Object.hashCode() 이 인터페이스의 모든 구현한다.
  2. 리팩토링 질문
    면접관이 열린 마음을 가지고 있다면 좋습니다. 면접관이 이미 특정 솔루션을 염두에두고 귀하의 답변과 일치하지 않는 경우, 귀하는 거의 운명에 처해 있습니다. "다른 해결책이 가능하다는 것을 이해합니다."라는 대답에 동의하는 것이 가장 좋습니다.
  3. 이전 JDK 버전과 비교하여 JDK5의 멀티 스레딩에 대한 질문은 java.util.concurrent 패키지 클래스 로 준비하는 것이 가장 좋습니다 . 더그 레아의 책에는 대부분의 답이 있습니다.
  4. JDK1.6 / JDK1.7 ...의 새로운 기능
    이것은 많은 면접관들에게 확실한 질문입니다. 내가 이것을 싫어하는 한, 준비하는 것이 가장 좋습니다. 적어도 내가 함께 일한 몇 가지를 기억하고 다른 방향으로 토론을 이끌면서 문제를 크게 효과적으로 피하고 해결합니다.
  5. Java API의 패턴
    시간 그리고 나는 Java API에서 GoF 패턴을 지적하라는 요청을 받았다. 이것을 위해 더 잘 준비하십시오.


5

Java에 대해 무엇을 가장 좋아하고 가장 싫어하는 이유는 무엇입니까?



4

더 순수한 자바 질문 :

수면과 대기의 차이점은 무엇입니까? 기다림이 어떻게 작동하는지 실제로 이해하는 사람은 많지 않습니다.

InterruptedExceptions를 어떻게 처리해야합니까?


4

이것은 면접에서 직면 한 질문입니다.

Java의 main 메소드가 public static void main (String [] args)으로 불리는 이유는 무엇입니까?

대답:

1. main ()은 프로그램 실행이 시작될 때마다 JVM에 의해 호출되므로 public으로 선언되어야합니다. JVM은 프로그램 패키지에 속하지 않습니다.

패키지 외부의 main에 액세스하려면 public으로 선언해야합니다. public 이외의 것으로 선언하면 Runtime Error 는 표시 되지만 Compilation time error는 표시 되지 않습니다.

2. main ()은 static으로 선언되어야합니다 . 메소드가 static으로 선언 된 경우 ClassName.methodName ()을 사용하여 클래스 외부에서 해당 메소드를 호출 할 수 있기 때문입니다 .

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

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

JVM은 먼저 테스트 클래스를로드하고 명령 행 인수를 확인하고 기본 메소드를 Test.main ()으로 호출합니다.

3. main ()은 void main ()으로 선언되어야합니다 JVM이 main ()의 값을 기대하지 않으므로 으로 선언되어야하므로 void로 선언해야합니다.

다른 반환 유형이 제공되는 경우 RunTimeError 즉, NoSuchMethodFoundError입니다.

4. JVM이 명령 행 인수를 전달하여 main 메소드를 호출하므로 main ()은 배열로 문자열 인수를 가져야합니다 . 문자열 배열 오브젝트에 저장되므로 main ()에 인수로 전달됩니다.


당신 public static void main(String... args)이 너무 기울어지면 사용할 수 있습니다 :-) 그것과 같은 서명을 가지고[]
corsiKa

3

J2SE와 J2EE (또는 JSE와 JEE)의 차이점은 무엇입니까?

개발자는 Enterprise Edition이 기본적으로 공급 업체가 구현할 수있는 인터페이스 정의 (예 : 사양)임을 지적 할 수 있어야합니다. 표준판은 그 자체로 구현되는 반면


4
하루 종일 마케팅 용어를 똑바로 유지하는 능력이 그렇게 중요합니까?
Laurence Gonsalves

@Laurence-그건 말도 안되는 일입니다. 경험 많은 개발자들이 이해하지 못하는 것에 놀라게 될 두 가지 사이에는 실제 차이점이 있습니다
oxbow_lakes

내 요점은 누군가가 좋은 코더라면 J2SE와 J2EE의 차이점을 알면 크게 신경 쓰지 않는다는 것입니다.
Laurence Gonsalves

나는 질문을 "JEE + JSE 개발자가 알아야 할 것"으로 읽었으며,이 경우 두 기술의 차이점을 이해하는 것이 적절하다고 생각합니다.
oxbow_lakes

4
@ Thorbjørn Ravn Andersen 좋은 Java를 포함한 대부분의 Java 코더가 위의 차이점을 강력하게 알고 있다고 의심합니다. "엔터프라이즈 판은 기본적으로 인터페이스 정의입니다. 반면 표준판은 자체 구현입니다". 가장 좋은 자바 코더들에게 중요한 차이점은 사용 가능한 API입니다. 예를 들면 : 서블릿은 EE의 일부입니다. 어쨌든, 좋은 언어 -X 프로그래머보다 좋은 프로그래머를 찾는 것이 더 중요하다고 생각 하듯이, 좋은 JSE / JEE 프로그래머보다 좋은 Java 프로그래머를 찾는 것이 더 중요하다고 생각합니다.
Laurence Gonsalves

3

어떻게 volatile 컴파일러 코드 최적화에 영향을 줍니까?


3
해당 항목에도 정답이 포함되어야합니다.
Thorbjørn Ravn Andersen 님이

나는 완전한 대답을 기억하지 못한다 . 좋은 설명을 위해이 선거 youtube.com/… 을 보십시오 . 요컨대, 어떤 시점에서 메소드가 휘발성 변수를 사용한다고 가정하십시오. 그런 다음 컴파일러는이 시점 이후에이 메소드의 코드를 최적화하지 않습니다.
로마

2

세션 빈은 무엇이며 상태 비 저장 세션 빈과 상태 저장 세션 빈의 차이점을 설명합니다.


2

두 개의 정수를 허용하고 가장 큰 두 숫자를 원하는 위치에 파일로 출력하는 프로그램을 작성하십시오. 이제 각 진술이 무엇을하는지 설명하십시오.

수입 명세서의 중요성에서 비정상 종료까지 매우 깊게 드릴 다운 할 수 있습니다.


2

핵심 : 1. 점검 및 점검되지 않은 예외는 무엇입니까? 2. 코드에서 새 예외를 추가하는 동안 어떤 유형 (체크 / 체크되지 않음)을 사용할 때?

서블릿 : 1. response.sendRedirect ()와 request.forward ()의 차이점은 무엇입니까?


이 질문에 대답 해 주시겠습니까? "체크 된 및 체크되지 않은 예외"에 대해 아는 것은 처음입니다!
palAlaa

간단한 Google 검색으로 답변을 얻을 수 있습니다. google.co.in/…
YoK

1

어떻게 threads작동합니까? 무엇입니까 synchronized? synchronized클래스에 두 개의 메소드가있는 경우 두 개의 스레드에서 동시에 실행될 수 있습니다. 많은 사람들이 예라고 대답하는 것을보고 놀랄 것 입니다. 그런 다음 모든 스레드 관련 질문, 예를 들어 교착 상태 , 기아 상태


2
그 대답은 '그렇다'때문입니다 ...
Fortega

@ Fortega-어떻게 할 수 있습니까? 각 메소드에는 오브젝트에 대한 잠금이 있습니다. 하나 thread가 메소드를 실행 중이면 다른 누구도 thread잠금을 얻을 수 없습니다 .
fastcodejava

1
동일한 유형의 객체가 두 개있는 경우 첫 번째 객체의 첫 번째 메서드와 두 번째 객체의 두 번째 메서드를 동시에 호출 할 수 있습니다. 방법이 정적 인 경우가 아니라면.
Fortega

2
잠금이 어떻게 이루어지는 지 제대로 이해하지 못한다면 실제로 그렇게 생각할 필요는 없습니다. 또한 그것이 더
똑똑

1
대답은 작업에 쓰레드를 사용하지 않은 프로 그러에게는 혼란 스러울 수 있지만, 이것이 좋은 것이라고 생각합니다.)
palAlaa

1

많은 Java 프로그래머가 모르는 것 중 하나는 문자열을 변경할 수 없으므로 StringBuilder 또는 StringBuffer를 사용하십시오!

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

그리고 정수, Long 등의 숫자
Arthur Ronald

성능면에서 더 이상 불변 문자열을 연결하는 것과 StringBuilder를 사용하는 것 사이에는 더 이상 차이가 없습니다. 현대의 Java 컴파일러가 연결을 최적화하기 때문입니다. java.sun.com/docs/books/jls/third_edition/html/… 더 읽기 쉬운 방법을 사용하는 것이 가장 좋습니다.
브렌트 윌슨

1
@BrentWilson은 당신이 생각하는 것을하지 않을 것입니다. 시나리오 s += "a" + "b" + "c"로 바뀔 것 Stringbuilder.append(...)입니다. 그러나 루프를 최적화 하지는 않습니다for . 이 답변의 코드는 총 201 개의 문자열, 100 개의 StringBuilders 및 char[]해당 StringBuilders 내부에 300 개의 서로 다른 s 및 약 425k + 문자를 생성합니다. StringBuilder를 완전히 사용하도록 변경하면 char[]~ 8k 문자 만 사용하여 이를 1 String, 1 StringBuilder 및 13-15 내부로 줄입니다.
corsiKa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.