CodeGym/Java Blog/무작위의/Java 개발자 직책에 대한 면접에서 질문과 답변을 탐색합니다. 1 부
John Squirrels
레벨 41
San Francisco

Java 개발자 직책에 대한 면접에서 질문과 답변을 탐색합니다. 1 부

무작위의 그룹에 게시되었습니다
회원
안녕! CodeGym은 다양한 그룹의 사람들을 모았습니다. 우리 중 일부는 Java 개발자가 되는 것 이상을 원하지 않으며 개발에 많은 시간과 노력을 투자하고 있습니다. 다른 사람들은 이미 Java 개발자입니다. 두 경우 모두 기술 인터뷰에서 테스트를 받을 준비가 되어 있어야 합니다. 쉽지 않습니다. 정서적 및 기술적 준비가 모두 필요합니다. Java 개발자 직책에 대한 면접에서 질문과 답변을 탐색합니다.  파트 1 - 1저는 최근 Java 개발자 직책에 대한 몇 가지 큰 인터뷰 질문 목록을 발견했습니다. 질문은 주니어, 중간 레벨 및 시니어의 다양한 레벨로 나뉩니다. 놀라지 마십시오. 모든 질문이 쉬운 것은 아니지만 별표가 있는 질문은 거의 묻지 않습니다. 질문이 좋고 대부분의 질문에 답하려고 노력하고 싶습니다. 분명히 이것은 하나의 기사에 모두 들어맞지는 않을 것입니다. 결국 거기에는 많은 질문이 있습니다. 즉, 이러한 인터뷰 질문에 대한 답변이 포함된 전체 기사 시리즈가 있을 것입니다. 바로 몇 가지 사항을 강조하겠습니다. 매우 자세하게 작성된 답변이 별도의 기사로 나올 수 있기 때문에 답변이 짧습니다. 또한 인터뷰에서 매우 자세하고 방대한 답변은 원하지 않습니다.

주니어 개발자 직책에 대한 Q&A

일반적인 질문들

1. 어떤 디자인 패턴을 알고 있습니까? 작업에 사용한 두 가지 디자인 패턴에 대해 알려주십시오.

엄청나게 다양한 패턴이 있습니다. 디자인 패턴과 완전히 친해지고 싶은 분들은 "Head First. Design Patterns"라는 책을 읽어보길 권한다. 가장 기초적인 디자인 패턴의 디테일을 쉽게 익힐 수 있도록 도와드립니다. 취업 면접에서 언급할 수 있는 디자인 패턴의 관점에서 다음이 떠오릅니다.
  • Builder — 자주 사용되는 템플릿으로 객체 생성에 대한 고전적인 접근 방식의 대안입니다.
  • Strategy — 기본적으로 다형성을 나타내는 패턴입니다. 즉, 하나의 인터페이스가 있지만 프로그램의 동작은 함수에 전달된 특정 인터페이스 구현에 따라 변경됩니다(전략 패턴은 현재 Java 애플리케이션의 거의 모든 곳에서 사용됨).
그것으로 충분하지 않다면 Spring (이미 익숙하다면)에 주의를 기울이십시오. Spring은 처음부터 끝까지 패턴으로 스며드는 프레임워크의 전체 플랫폼이기 때문입니다. 다음은 내가 말하는 것에 대한 몇 가지 예입니다.
  • Factory — 이 패턴은 ApplicationContext(또는 BeanFactory)에서 찾을 수 있습니다.
  • 싱글톤 — 모든 빈은 기본적으로 싱글톤입니다.
  • 프록시 — 기본적으로 Spring의 모든 것은 이 패턴을 어떤 식으로든 사용합니다. 예를 들어 AOP;
  • 책임 사슬 — Spring Security를 ​​뒷받침하는 패턴입니다.
  • 템플릿 — Spring JDBC에서 사용됩니다.

자바 코어

Java 개발자 직책에 대한 면접에서 질문과 답변을 탐색합니다.  파트 1 - 2

2. Java에는 어떤 데이터 유형이 있습니까?

Java에는 다음과 같은 기본 데이터 유형이 있습니다.
  • byte — -128에서 127 사이의 정수로 1바이트를 차지합니다.
  • short — -32768에서 32767 사이의 정수로 2바이트를 차지합니다.
  • int — -2147483648에서 2147483647 범위의 정수로 4바이트를 차지합니다.
  • long — 9223372036854775808에서 9223372036854775807까지의 정수는 8바이트를 차지합니다.
  • float — -3.4E+38에서 3.4E+38 범위의 부동 소수점 숫자는 4바이트를 차지합니다.
  • double — -1.7E+308에서 1.7E+308 범위의 부동 소수점 숫자는 8바이트를 차지합니다.
  • char — UTF-16의 단일 문자로 2바이트를 차지합니다.
  • 부울 참/거짓 값은 1바이트를 차지합니다.
그리고 힙의 개체를 가리키는 참조 데이터 유형이 있습니다.

3. 객체는 기본 데이터 유형과 어떻게 다릅니까?

첫 번째 차이점은 점유된 메모리의 양입니다. 프리미티브는 자체 값만 포함하기 때문에 거의 차지하지 않지만 객체는 프리미티브와 다른 객체에 대한 참조 등 다양한 값을 포함할 수 있습니다. 두 번째 차이점은 다음과 같습니다. Java는 객체 지향 언어이므로 Java 작업의 모든 것은 객체 간의 상호 작용입니다. 프리미티브는 여기에 잘 맞지 않습니다. 사실 이것이 바로 Java가 100% 객체 지향 언어가 아닌 이유입니다. 두 번째에서 이어지는 세 번째 차이점은 Java가 개체 상호 작용에 중점을 두기 때문에 개체 관리를 위한 다양한 메커니즘이 있다는 것입니다. 예를 들어, 생성자, 메서드, 예외(주로 개체와 함께 작동) 등이 있습니다. 그리고 이 개체 지향 환경에서 프리미티브가 어떻게든 작동할 수 있도록 Java 작성자는 다음을 생각해 냈습니다.기본 유형( Integer , Character , Double , Boolean ...) 에 대한 래퍼

4. 참조로 인수를 전달하는 것과 값으로 인수를 전달하는 것의 차이점은 무엇입니까?

기본 필드는 값을 저장합니다. 예를 들어 int i = 9 로 설정하면 ; , i 필드는 값 9를 저장합니다. 개체에 대한 참조가 있는 경우 개체에 대한 참조가 있는 필드가 있음을 의미합니다. 즉, 객체의 주소를 메모리에 저장하는 필드가 있습니다.
Cat cat = new Cat();
즉, 개체에 대한 참조가 있는 필드도 값을 저장합니다 . 그들의 값은 메모리 주소입니다. 즉, cat은 새 Cat() 객체 의 메모리 주소를 저장합니다 . 메서드에 인수를 전달하면 해당 값이 복사됩니다. 프리미티브의 경우 프리미티브의 값이 복사됩니다. 따라서 이 방법은 사본과 함께 작동합니다. 사본이 변경되더라도 원본에는 영향을 미치지 않습니다. 참조형의 경우 메모리 주소의 값이 복사됩니다. 따라서 두 참조 변수는 동일한 개체를 가리키는 주소를 저장합니다. 그리고 이 새로운 참조를 사용하여 개체를 변경하면 이전 참조에 대해서도 변경되었음을 알 수 있습니다. 결국 둘 다 같은 객체를 가리킵니다.

5. JVM, JDK, JRE란?

JVM은 Java Virtual Machine 의 약자로 컴파일러에서 미리 생성한 Java 바이트코드를 실행합니다. JRE는 Java Runtime Environment 의 약자입니다 . 기본적으로 Java 응용 프로그램을 실행하기 위한 환경입니다. 여기에는 Java 프로그래밍 언어로 작성된 애플릿 및 응용 프로그램을 실행하기 위한 JVM, 표준 라이브러리 및 기타 구성 요소가 포함됩니다. 즉, JRE는 컴파일된 Java 프로그램을 실행하는 데 필요한 모든 패키지이지만 애플리케이션 개발을 위한 컴파일러 또는 디버거와 같은 도구 및 유틸리티는 포함하지 않습니다. JDK는 JRE 의 확장인 Java Development Kit 의 약자입니다 .. 즉, Java 응용 프로그램을 실행하는 것뿐만 아니라 개발하기 위한 환경이기도 합니다. JDK에는 JRE의 모든 것과 Java 응용 프로그램(Java 문서 포함)을 만드는 데 필요한 다양한 추가 도구(컴파일러 및 디버거)가 포함되어 있습니다. Java 개발자 직책에 대한 면접에서 질문과 답변을 탐색합니다.  파트 1 - 3

6. JVM을 사용하는 이유는 무엇입니까?

위에서 언급한 바와 같이 JVM(Java Virtual Machine)은 컴파일러에서 미리 생성한 Java 바이트코드를 실행하는 가상 머신입니다. 이는 JVM이 Java 소스 코드를 이해하지 못함을 의미합니다. 따라서 먼저 .java 파일을 컴파일합니다. 컴파일된 파일에는 .class 가 있습니다.확장자이며 이제 JVM이 이해하는 바이트코드 형식입니다. OS마다 JVM이 다릅니다. JVM이 바이트코드 파일을 실행할 때 실행 중인 OS에 맞게 조정합니다. 실제로 JVM이 다르기 때문에 JDK(또는 JRE)도 OS마다 다릅니다(각 버전마다 자체 JVM이 필요함). 다른 프로그래밍 언어에서 개발이 어떻게 작동하는지 기억해 봅시다. 프로그램을 작성하면 해당 코드가 특정 OS용 기계 코드로 컴파일된 다음 실행할 수 있습니다. 즉, 플랫폼마다 다른 버전의 프로그램을 작성해야 합니다. 그러나 Java의 코드 이중 처리(소스 코드를 바이트코드로 컴파일한 다음 JVM에서 바이트코드 처리)를 통해 교차 플랫폼 솔루션의 이점을 누릴 수 있습니다. 코드를 한 번 생성하고 바이트코드로 컴파일합니다. 그런 다음 모든 OS로 가져갈 수 있고 기본 JVM에서 실행할 수 있습니다. 그리고 이것이 바로 자바의 전설적인한 번 쓰고 어디서나 실행 기능. Java 개발자 직책에 대한 면접에서 질문과 답변을 탐색합니다.  파트 1 - 4

7. 바이트코드란?

위에서 말했듯이 컴파일러는 Java 코드를 중간 바이트 코드 로 변환합니다 (확장자가 .java인 파일에서 확장자가 .class인 파일로 이동). 많은 면에서 바이트코드는 머신 코드와 유사하지만 명령어 세트가 실제 프로세서용이 아니라 가상 프로세서용이라는 점만 다릅니다. 즉, 프로그램이 실행 중인 실제 프로세서에 대한 명령 실행을 최적화하는 JIT 컴파일러용으로 설계된 섹션을 포함할 수 있습니다. 온더플라이 컴파일이라고도 하는 JIT 컴파일은 프로그램이 실행되는 동안 바이트코드를 머신 코드나 다른 형식으로 컴파일하여 바이트코드 프로그램의 성능을 높이는 기술입니다. 짐작하셨겠지만 JVM은 바이트코드를 실행할 때 JIT 컴파일러를 사용합니다. 몇 가지 샘플 바이트코드를 살펴보겠습니다. Java 개발자 직책에 대한 면접에서 질문과 답변을 탐색합니다.  파트 1 - 5너무 읽기 쉽지 않습니까? 좋은 소식은 이 지침이 우리를 위한 것이 아니라는 것입니다. JVM용입니다.

8. JavaBean의 기능은 무엇입니까?

JavaBean은 특정 규칙을 따르는 Java 클래스입니다. 다음은 JavaBean 을 작성하기 위한 몇 가지 규칙입니다 .
  1. 클래스는 public 액세스 한정자가 있는 빈(인수 없음) 생성자를 포함해야 합니다 . 이 생성자는 불필요한 문제 없이 클래스의 개체를 생성할 수 있도록 합니다(인수를 불필요하게 조작하지 않도록).

  2. 내부 필드는 표준 구현이 있어야 하는 getset 인스턴스 메서드를 통해 액세스됩니다 . 예를 들어 이름 필드가 있으면 getNamesetName 등이 있어야 합니다 . 이를 통해 다양한 도구(프레임워크)가 어려움 없이 빈의 내용을 자동으로 가져오고 설정할 수 있습니다.

  3. 클래스는 equals() , hashCode()toString() 메서드를 재정의해야 합니다.

  4. 클래스는 직렬화 가능해야 합니다. 즉, Serializable 마커 인터페이스가 있거나 Externalizable 인터페이스를 구현해야 합니다. 이는 Bean의 상태를 안정적으로 저장, 저장 및 복원할 수 있도록 하기 위한 것입니다.

Java 개발자 직책에 대한 면접에서 질문과 답변을 탐색합니다.  파트 1 - 6

9. OutOfMemoryError란 무엇입니까?

OutOfMemoryError는 JVM(Java Virtual Machine)과 관련된 중요한 런타임 오류입니다. 이 오류는 메모리가 부족하여 JVM이 개체를 할당할 수 없고 가비지 수집기가 더 많은 메모리를 할당할 수 없을 때 발생합니다. OutOfMemoryError 의 몇 가지 유형 :
  • OutOfMemoryError: Java 힙 공간 — 메모리 부족으로 인해 Java 힙에 개체를 할당할 수 없습니다. 이 오류는 메모리 누수 또는 현재 애플리케이션에 비해 너무 작은 기본 힙 크기로 인해 발생할 수 있습니다.

  • OutOfMemoryError: GC 오버헤드 제한 초과 — 애플리케이션의 데이터가 힙에 거의 맞지 않기 때문에 가비지 수집기가 항상 실행되어 Java 프로그램이 매우 느리게 실행됩니다. 결과적으로 가비지 수집기 오버헤드 제한이 초과되고 이 오류와 함께 애플리케이션이 충돌합니다.

  • OutOfMemoryError: 요청된 배열 크기가 VM 제한을 초과합니다 . 이는 애플리케이션이 힙 크기를 초과하는 배열에 대해 메모리 할당을 시도했음을 나타냅니다. 다시 말하지만 이는 기본적으로 메모리가 충분하지 않게 할당되었음을 의미할 수 있습니다.

  • OutOfMemoryError: Metaspace — 힙에 메타데이터에 할당된 공간이 부족합니다(메타데이터는 클래스 및 메서드에 대한 지침임).

  • OutOfMemoryError: 이유에 대한 요청 크기 바이트. 스왑 공간 부족 — 힙에서 메모리를 할당하려고 할 때 일부 오류가 발생하여 힙에 충분한 공간이 부족합니다.

10. 스택 추적이란 무엇입니까? 어떻게 얻나요?

스택 추적은 응용 프로그램 실행에서 이 시점까지 호출된 클래스 및 메서드 목록입니다. 다음을 수행하여 애플리케이션의 특정 지점에서 스택 추적을 얻을 수 있습니다.
StackTraceElement[] stackTraceElements =Thread.currentThread().getStackTrace();
이렇게 하면 LIFO(후입선출) 순서 로 배열된 StackTraceElements 배열을 얻을 수 있습니다 . Java 개발자 직책에 대한 면접에서 질문과 답변을 탐색합니다.  파트 1 - 7Java에서 사람들이 스택 추적에 대해 이야기할 때 일반적으로 오류(또는 예외)가 발생할 때 콘솔에 표시되는 스택 추적을 의미합니다. 다음과 같은 예외에서 스택 추적을 얻을 수 있습니다.
StackTraceElement[] stackTraceElements;
try{
                ...
} catch (Exception e) {
   stackTraceElements = e.getStackTrace();
}
콘솔에 예외의 스택 추적을 표시하려면 다음을 수행하십시오.
try{
                ...
} catch (Exception e) {
  e.printStackTrace();
}
또한 오류, 확인되지 않은 예외 또는 처리되지 않은 확인된 예외가 발생하는 경우 애플리케이션 충돌 시 콘솔에서 예외의 스택 추적을 자동으로 가져옵니다. 다음은 콘솔의 스택 추적에 대한 작은 예입니다. Java 개발자 직책에 대한 면접에서 질문과 답변을 탐색합니다.  파트 1 - 8이 메모에서 오늘 이 주제에 대한 논의를 마치겠습니다.Java 개발자 직책에 대한 면접에서 질문과 답변을 탐색합니다.  파트 1 - 9
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다