일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 프론트 면접족보
- 키바나
- 리액트 패치
- 리액트 패치노트
- 리액트 버전
- githubaction
- next로 jwt
- 프론트 면접
- java 신입
- 자바17
- 자바 패치
- 잔디심기
- 백엔드 면접
- 깃허브액션
- java 신입면접
- 백엔드 신입
- nextjs와 typescript
- 파일비트
- 프론트엔드 면접
- 엘라스틱서치로 로그관리
- 엘라스틱서치
- 자동커밋
- 자바 패치노트
- 프론트엔드 신입
- NextJs
- 자동잔디
- java 면접정리
- 로그스태쉬
- 리액트 #무한스크롤
- 도커컴포즈
- Today
- Total
천쓰의 개발동산
비전공자의 JAVA 신입 개발자 취업 면접 정리 본문
그동안 면접준비하면서 노션에 정리해둔거 올려봅니다.
실제 면접시, 질문받은것들은 체크하겠습니다.
개념 정리도 중요하지만
본인이 가지고있는 프로젝트에서 무엇을 했는지, 시스템 구성 부분이 가장중요하였습니다.
JAVA 관련 정리
1. Java의 특징을 설명해주세요.
Java는 객체지향 프로그래밍 언어입니다. 기본 자료형을 제외한 모든 요소들이 객체로 표현되며, 캡슐화, 상속, 다형성 등 객체지향 개념이 잘 적용된 언어입니다.
- 장점:
- 운영체제 독립성: JVM(Java Virtual Machine) 위에서 동작하기 때문에 운영체제에 독립적입니다.
- 자동 메모리 관리: Garbage Collector를 통해 자동적인 메모리 관리가 가능합니다.
- 단점:
- 실행 속도: JVM 위에서 동작하기 때문에 실행 속도가 상대적으로 느립니다.
- 제약: 다중 상속을 지원하지 않으며, 타입에 엄격하고 제약이 많습니다.
2. JVM의 역할에 대해 설명해주세요.
JVM은 스택 기반으로 동작하며, Java Byte Code를 각 운영체제에 맞게 해석해주고, 가비지 컬렉션을 통해 자동적인 메모리 관리를 수행합니다.
3. Java의 컴파일 과정에 대해 설명해주세요.
- 개발자가 .java 파일을 생성합니다.
- javac 명령어를 사용해 바이트코드(.class)를 생성합니다.
- Class Loader를 통해 JVM 메모리 내로 로드합니다.
- 실행 엔진을 통해 컴퓨터가 읽을 수 있는 기계어로 해석됩니다.
4. Java에서 제공하는 원시 타입들에 무엇이 있고, 각각 몇 바이트를 차지하나요?
- 정수형: byte(1), short(2), int(4), long(8)
- 실수형: float(4), double(8)
- 문자형: char(2)
- 논리형: boolean(1)
5. 오버라이딩(Overriding)과 오버로딩(Overloading)에 대해 설명해주세요.
- 오버라이딩(Overriding): 상위 클래스에 있는 메소드를 하위 클래스에서 재정의하는 것입니다.
- 오버로딩(Overloading): 매개변수의 개수나 타입을 다르게 하여 같은 이름의 메소드를 여러 개 정의하는 것입니다.
6. 객체지향 프로그래밍(OOP)에 대해 설명해주세요.
객체 지향 프로그래밍은 프로그램을 객체 단위로 파악하고, 상태와 행위를 가진 객체들을 정의하여 이들 간의 상호작용을 통해 프로그램을 만드는 것입니다. 핵심 특징으로는 캡슐화, 상속, 다형성, 추상화 등이 있으며, 모듈 재사용으로 확장 및 유지보수가 용이합니다.
7. try-with-resources에 대해 설명해주세요.
try-with-resources는 try-catch-finally의 문제점을 보완하기 위한 개념입니다. try 블록 안에 자원 객체를 전달하면, try 블록이 끝난 후 자동으로 자원을 해제해주는 기능을 합니다.
8. 불변 객체가 무엇인지 설명하고 대표적인 Java의 예시를 설명해주세요.
불변 객체는 생성 이후 내부 상태가 변하지 않는 객체를 말합니다. Java에서는 String이 대표적인 불변 객체입니다. 필드가 원시 타입인 경우 final 키워드를 사용해 불변 객체를 만들 수 있고, 참조 타입일 경우에는 방어적 복사(Defensive Copy) 등을 사용해 불변성을 유지합니다.
9. 추상 클래스와 인터페이스를 설명해주시고, 차이에 대해 설명해주세요.
- 추상 클래스: 클래스 내 추상 메소드가 하나 이상 포함되거나 abstract로 정의된 경우.
- 인터페이스: 모든 메소드가 추상 메소드로만 이루어져 있는 것.
공통점:
- new 연산자로 인스턴스 생성 불가능.
- 사용하기 위해서는 하위 클래스에서 확장/구현 해야 함.
차이점:
- 인터페이스는 다중 상속이 가능하지만, 추상 클래스는 다중 상속이 불가능합니다.
- 인터페이스는 구현하는 모든 클래스에 대해 특정 메소드의 존재를 강제하고, 추상 클래스는 상속받는 클래스들의 공통적인 로직을 추상화합니다.
10. 싱글톤 패턴에 대해 설명해주세요.
싱글톤 패턴은 단 하나의 인스턴스를 생성해 사용하는 디자인 패턴입니다. 메모리 낭비를 방지하고, 동일한 인스턴스를 자주 생성해야 하는 경우에 주로 사용됩니다. 대표적인 예로는 Spring Bean이 있습니다.
11. 가비지 컬렉션(Garbage Collection)에 대해 설명해주세요.
가비지 컬렉션은 JVM의 메모리 관리 기법 중 하나로, 시스템에서 동적으로 할당됐던 메모리 영역 중 필요없어진 메모리 영역을 회수하여 메모리를 관리해주는 기법입니다.
12. 객체지향의 설계원칙에 대해 설명해주세요.
- SRP: 단일 책임 원칙.
- OCP: 개방-폐쇄 원칙.
- LSP: 리스코프 치환 원칙.
- ISP: 인터페이스 분리 원칙.
- DIP: 의존관계 역전 원칙.
13. 자바의 메모리 영역에 대해 설명해주세요.
- Method 영역: 전역변수와 static 변수를 저장.
- Stack 영역: 지역변수와 매개변수 데이터 값을 저장.
- Heap 영역: new 키워드로 생성되는 객체와 배열 등을 저장.
14. 클래스와 객체에 대해 설명해주세요.
- 클래스: 객체를 만들어내기 위한 설계도 또는 틀.
- 객체: 클래스의 인스턴스로, 고유의 상태와 행동을 가짐.
15. Wrapper Class란 무엇이며, Boxing과 UnBoxing은 무엇인지 설명해주세요.
- Wrapper Class: 기본 자료형에 대한 객체 표현을 Wrapper class라고 합니다.
- Boxing: 기본 자료형 → Wrapper class로 변환.
- UnBoxing: Wrapper class → 기본 자료형으로 변환.
16. Synchronized에 대해 아는 대로 말해주세요.
여러 개의 쓰레드가 한 개의 자원을 사용할 때, 현재 데이터를 사용하고 있는 쓰레드를 제외한 나머지 쓰레드들이 데이터에 접근할 수 없게 막는 개념입니다. Synchronized 키워드를 사용하여 멀티 쓰레드 환경에서 동기화를 시켜 데이터의 thread-safe를 보장합니다.
17. new String()과 리터럴("")의 차이에 대해 설명해주세요.
new String()은 Heap 메모리 영역에 저장되고, 리터럴 ""은 Heap 안의 String Constant Pool 영역에 저장됩니다.
18. String, StringBuffer, StringBuilder의 차이를 설명해주세요.
- String: 불변 객체.
- StringBuffer: 가변 객체, 동기화를 지원하여 멀티 쓰레드 환경에서 사용.
- StringBuilder: 가변 객체, 동기화를 지원하지 않아 싱글 쓰레드 환경에서 사용.
19. 접근 제한자(Access Modifier)에 대해 설명해주세요.
- public: 접근 제한이 없습니다.
- protected: 해당 패키지 내, 다른 패키지에서 상속받은 자손 클래스에서 접근 가능.
- default: 해당 패키지 내에서만 접근 가능.
- private: 해당 클래스 내에서만 접근 가능.
20. 클래스 멤버 변수 초기화 순서에 대해 설명해주세요.
- static 변수 선언부.
- 필드 변수 선언부.
- 생성자 블록.
21. static에 대해 설명해주세요.
static 키워드를 사용한 변수나 메소드는 클래스가 메모리에 올라갈 때 자동으로 생성되며, 인스턴스 생성 없이 사용할 수 있습니다.
22. Inner Class(내부 클래스)의 장점에 대해 설명해주세요.
- 내부 클래스에서 외부 클래스의 멤버에 손쉽게 접근할 수 있습니다.
- 관련 있는 클래스를 논리적으로 묶어서 표현할 수 있어, 캡슐화를 증가시키고 코드의 복잡성을 낮출 수 있습니다.
- 외부에서는 내부 클래스에 접근할 수 없어 코드의 보안성을 높일 수 있습니다.
23. 리플렉션(Reflection)이란 무엇인지 설명해주세요.
구체적인 클래스 타입을 알지 못해도 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API입니다.
24. Error와 Exception의 차이를 설명해주세요.
- Error: 치명적 오류로, 예측 불가능한 UncheckedException에 속합니다.
- Exception: 경미한 오류로, try-catch를 이용해 프로그램의 비정상 종료를 막을 수 있습니다.
25. CheckedException과 UnCheckedException의 차이를 설명해주세요.
- CheckedException: 실행 전에 예측 가능한 예외로, 반드시 예외 처리를 해야 합니다.
- UnCheckedException: 실행 후에 알 수 있는 예외로, 예외 처리를 하지 않아도 됩니다.
26. Optional API에 대해 설명해주세요.
Java 8부터 제공되는 Optional<T>을 사용하여 null로 인한 예외 발생을 줄이고, null 검사를 간편하게 할 수 있습니다. Optional은 해당 객체가 존재할 수도 있고, 존재하지 않을 수도 있는 상황에서 사용됩니다. 주요 메소드로는 isPresent(), get(), orElse(), orElseThrow() 등이 있습니다. 이를 통해 NullPointerException 등의 예외를 방지하고, 코드를 더욱 안전하고 명확하게 작성할 수 있습니다.
27. 컬렉션 프레임워크에 대해 설명해주세요.
자바의 컬렉션 프레임워크는 데이터를 저장하고 관리하기 위한 클래스들의 모음으로, 대표적인 인터페이스로는 List, Set, Map 등이 있습니다. java.util 패키지에 포함되어 있으며, 데이터를 효율적으로 저장, 검색, 삭제, 정렬할 수 있도록 다양한 구현체를 제공합니다.
- 주요 컬렉션:
- List: 순서가 있는 데이터의 집합, 중복을 허용합니다. 예: ArrayList, LinkedList.
- Set: 순서를 유지하지 않으며, 중복을 허용하지 않습니다. 예: HashSet, TreeSet.
- Map: 키와 값의 쌍으로 이루어진 데이터의 집합, 키는 중복을 허용하지 않습니다. 예: HashMap, TreeMap.
컬렉션 프레임워크를 사용하면 데이터를 보다 효율적으로 관리할 수 있으며, 다양한 자료구조와 알고리즘을 제공하여 프로그래머가 원하는 형태로 데이터를 조작할 수 있습니다.
Spring 프레임워크
- Spring 프레임워크란 무엇인가요?
- 답변: Spring은 자바 기반의 오픈 소스 프레임워크로, 기업급 애플리케이션을 개발하기 위한 다양한 모듈과 기능을 제공합니다.
- Spring의 핵심 모듈은 어떤 것들이 있나요?
- 답변: Spring Core, Spring AOP(Aspect-Oriented Programming), Spring ORM(Object-Relational Mapping), Spring DAO(Data Access Object), Spring Context 등이 있습니다.
- DI와 IoC의 개념은 무엇인가요?
- 답변: DI(Dependency Injection)는 객체 간의 의존 관계를 외부에서 주입하는 것을 의미하며, IoC(Inversion of Control)는 객체의 제어권이 프레임워크에게 넘어가는 것을 말합니다.
- Spring에서 AOP가 무엇이고 왜 사용되나요?
- 답변: AOP는 관점 지향 프로그래 밍ㅡㅏ ㅑㅑㅓㅕㅓ ㅑ으로, 코드에서 공통 관심 사항을 분리하여 재사용성과 유지보수성을 향상시킵니다. Spring에서는 AOP를 통해 트랜잭션 관리, 보안 등을 구현할 수 있습니다.
- Spring의 트랜잭션 관리 방식에 대해 설명해주세요.
- 답변: Spring에서는 선언적 트랜잭션 관리를 지원하며, @Transactional 어노테이션을 사용하여 트랜잭션을 설정할 수 있습니다.
- Spring MVC 아키텍처는 어떻게 구성되어 있나요?
- 답변: Spring MVC는 모델(Model), 뷰(View), 컨트롤러(Controller)로 구성되어 있으며, 이를 통해 웹 애플리케이션의 구조를 분리하고 관리할 수 있습니다.
- Bean이란 무엇인가요?
- 답변: Spring에서 Bean은 스프링 컨테이너에 의해 생성 및 관리되는 객체로, Spring 애플리케이션의 핵심 구성 요소입니다.
- Spring에서 지원하는 ORM 프레임워크는 무엇인가요?
- 답변: Hibernate, MyBatis와 같은 ORM 프레임워크를 Spring에서 지원하며, 데이터베이스와의 상호작용을 쉽게 구현할 수 있습니다.
- Spring과 Spring Boot의 차이
- 답변: Spring은 다양한 애플리케이션을 개발하기 위한 포괄적인 프레임워크인 반면, Spring Boot는 Spring 애플리케이션 개발을 단순화하고 생산성을 높이기 위한 도구입니다. Spring Boot는 자동 설정, 독립 실행 가능한 애플리케이션 패키지, 내장 서버 등을 제공하여 빠른 애플리케이션 개발을 지원합니다. Spring Boot를 사용하면 초기 설정이 줄어들고, 간단한 설정으로 복잡한 Spring 설정을 자동화할 수 있습니다.
- JPA와 MyBatis
JPA (Java Persistence API):- ORM 표준: JPA는 자바에서 ORM을 위한 표준 인터페이스를 정의합니다.
- 추상화: 데이터베이스와의 상호작용을 높은 수준으로 추상화하여, SQL을 직접 작성하지 않고도 데이터베이스 작업을 수행할 수 있습니다.
- 자동 매핑: 엔티티 클래스와 데이터베이스 테이블 간의 매핑을 자동으로 처리합니다.
- 캐싱: 1차 및 2차 캐싱을 지원하여 성능을 최적화합니다.
- SQL 매핑 프레임워크: MyBatis는 SQL을 직접 작성하면서 데이터베이스 작업을 매핑할 수 있는 프레임워크입니다.
- 유연성: SQL을 직접 작성할 수 있어 복잡한 쿼리와 성능 최적화에 유리합니다.
- XML 매핑: XML 파일이나 애너테이션을 통해 SQL 쿼리와 자바 메서드를 매핑할 수 있습니다.
- 자동 매핑: 결과 매핑을 자동으로 처리하여 개발자의 작업을 줄여줍니다.
JWT (JSON Web Token) 관련 정리
1. JWT가 무엇이며 어떻게 작동하는지 설명해보세요.
- 답변: JWT는 JSON 형식의 웹 표준으로, 정보를 안전하게 전달하기 위한 열린 표준입니다. JWT는 페이로드에 사용자에 대한 클레임(claim) 정보를 담고 있으며, 이를 서명하여 안전성을 보장합니다. 보통 세 부분(헤더, 페이로드, 서명)으로 이루어져 있으며, 이를 합쳐서 토큰을 생성합니다.
2. JWT의 구성 요소와 각 부분의 역할에 대해 설명하세요.
- 답변: JWT는 헤더(Header), 페이로드(Payload), 서명(Signature)으로 구성됩니다.
- 헤더: 토큰의 유형과 사용하는 해싱 알고리즘 등의 메타 정보를 담고 있습니다.
- 페이로드: 클레임(사용자 정보 등)이 담겨 있습니다.
- 서명: 헤더와 페이로드의 내용을 기반으로 생성되어 토큰의 무결성을 검증합니다.
3. JWT와 세션 기반 인증의 차이는 무엇인가요?
- 답변: JWT는 서버 측에 세션 정보를 저장하지 않고, 토큰 자체에 사용자 정보를 담아 클라이언트에 전달합니다. 이는 상태를 저장하지 않는(stateless) 특성을 가지고 있습니다. 세션 기반 인증은 서버에 세션 정보를 저장하고 클라이언트에 세션 ID를 부여하는 방식이며, 서버는 세션 정보를 유지합니다.
4. JWT의 보안 측면에서 주의할 점은 무엇인가요?
- 답변:
- 토큰의 유효 기간을 적절히 설정하여 만료된 토큰이 악용되지 않도록 합니다.
- HTTPS를 사용하여 통신을 암호화하여 중간자 공격을 방지합니다.
- 보안 강화를 위해 서명 알고리즘을 신중하게 선택하고 키 관리를 철저히 해야 합니다.
- 중요한 정보를 토큰에 담을 때는 적절한 클레임을 사용하고, 민감한 정보는 암호화해야 합니다.
5. JWT의 리프레시 토큰에 대해 설명하세요.
- 답변: 리프레시 토큰은 주로 액세스 토큰이 만료되었을 때 새로운 액세스 토큰을 발급하기 위해 사용됩니다. 클라이언트가 리프레시 토큰을 서버에 전송하면, 서버는 이를 검증하고 새로운 액세스 토큰을 발급합니다. 이는 사용자가 로그인 상태를 유지하면서 보안을 강화하는 데 도움이 됩니다.
웹소켓 관련 정리
1. 스프링 웹소켓이란 무엇인가요?
- 답변: 스프링 웹소켓은 실시간 양방향 통신을 지원하는 프로토콜로, 웹 애플리케이션에서 클라이언트와 서버 간에 데이터를 실시간으로 주고받을 수 있게 해주는 기술입니다. 이는 HTTP 프로토콜보다 빠르고 가벼우며, 주로 채팅, 실시간 업데이트, 협업 기능 등에 사용됩니다.
2. 스프링 웹소켓의 주요 특징은 무엇인가요?
- 양방향 통신: 클라이언트와 서버 간에 양방향으로 데이터를 주고받을 수 있습니다.
- 실시간 업데이트: 데이터의 변경이 발생하면 즉시 클라이언트에게 업데이트를 전달할 수 있습니다.
- 단일 연결: 여러 개의 메시지를 단일 연결을 통해 처리할 수 있어 오버헤드를 줄일 수 있습니다.
- STOMP 프로토콜 지원: 간단하면서도 유연한 메시지 기반 프로토콜인 STOMP를 지원합니다.
3. 스프링 웹소켓과 HTTP의 차이점은 무엇인가요?
- 통신 방식: HTTP는 단방향 통신으로 클라이언트가 서버에 요청하고 응답을 받는 반면, 웹소켓은 양방향 통신을 지원합니다.
- 실시간성: 웹소켓은 실시간으로 데이터를 주고받을 수 있어 실시간 업데이트에 적합합니다.
- 프로토콜: HTTP는 상태가 없는 프로토콜이지만, 웹소켓은 연결을 유지하며 상태를 관리할 수 있습니다.
4. 스프링 웹소켓 엔드포인트(Endpoint)의 역할은 무엇인가요?
- 답변: 웹소켓 엔드포인트는 클라이언트와 서버 간의 웹소켓 연결을 관리합니다. 이를 통해 메시지를 주고받고, 이벤트를 처리하며, 연결 상태를 관리할 수 있습니다. 주로 @ServerEndpoint 어노테이션을 사용하여 정의하며, 클라이언트가 해당 엔드포인트로 접속하면 웹소켓 연결이 생성됩니다.
5. 스프링 웹소켓에서의 메시지 브로커(Message Broker)의 역할은 무엇인가요?
- 답변: 메시지 브로커는 서버와 여러 클라이언트 간의 메시지 전달을 중개하는 역할을 합니다. 스프링 웹소켓에서는 주로 STOMP 프로토콜과 함께 사용되며, 특히 토픽(topic)이나 큐(queue)와 같은 메시지 전달 패턴을 지원하여 채팅 애플리케이션 등에서 유용하게 활용됩니다.
꿀팁) GPT로 모르거나 이해안가는 부분은 물어가면서볼것
'JAVA' 카테고리의 다른 글
메이븐 설치 가이드 (0) | 2024.07.11 |
---|---|
JAVA17 설치 및 환경세팅(Window 11) (0) | 2024.07.11 |
JAVA 버전 정리 ( 8 , 11 , 17 )LTS기준 (0) | 2024.06.08 |