-
[면접스터디 1주차] JAVA/WEB/Spring그 외/면접준비 2021. 10. 11. 17:19
JAVA
1. 추상클래스와 인터페이스의 차이
- 추상클래스: 추상메소드가 1개이상 존재하며 abstract로 정의된 클래스. 다중상속 불가 및 extends를 통해 상속받음. 생성자를 가지며 객체화 가능.
- 인터페이스: 상수와 추상메소드의 집합. 다중상속 가능 및 implements를 통해 상속받음. 생성자X 객체화X. Java8 버전부터 Default 추상메소드 선언 및 초기화 가능
2. Exception의 종류
- Error: 메모리 부족, 스택오버플로우 등과 같이 발생하게 되면 복구할 수 없는 심각한 오류
- Checked Exception: 컴파일 시 검사하는 예외. 개발자가 반드시 예외처리를 해야하며 그렇지 않으면 컴파일에러 발생. IOException, SQL Exception 등
- Unchekd Exception(Runtime Exception): 컴파일 시 검사하지 않는 예외. 개발자가 반드시 예외처리를 할 필요는 없음. NullPointerException, NumberFormatException, ArrayIndexOutOfBoundsException 등
3. Override - Overload 차이
- Override: 부모클래스에 선언되어있는 메소드를 자식클래스에서 해당 메소드를 재정의함.
- Overload: 같은 이름의 메소드의 매개변수만 변경하여 새로운 메소드를 생성함.
4. Array - List 차이
- Array: 인덱스를 가지는 데이터의 집합. 데이터 추가/삭제가 어려움. 인덱스를 이용한 조회가 빠름.
- List: 인덱스를 갖지 않는 순차적으로 저장되어있는 데이터의 집합. 데이터 추가/삭제가 쉬움. 포인터를 통해 다음 데이터의 주소를 가리킨다. 조회가 느림. 크기가 동적으로 변함.
5. ArrayList - LinkedList 차이
- ArrayList: 메모리 주소가 연속되어 구현되어 있는 배열, 검색 빠름, 삭제 느림
- LinkedList: 메모리 주소가 뒤죽박죽인 배열, 검색 느림, 삭제 빠름
6. 스레드와 프로세스의 차이
- 스레드: 자원을 이용하여 실행하는 단위
- 프로세스: 운영체제로부터 자원을 할당받는 작업의 단위.
- 어플리케이션 하나가 프로세스이며 프로세스 내에서 작업을 분기치는 것이 스레드이다.
7. 우선순위 큐 자료구조란?
- 우선순위가 높은 멤버를 우선적으로 처리하는 Queue 자료구조
8. JVM 동작원리
- 자바 컴파일러가 자바소스파일(.java)을 컴파일하여 자바 바이트 코드(.class)를 생성한다.
- 컴파일된 바이트 코드를 JVM의 클래스로더에게 전달한다.
- 클래스로더는 필요한 클래스들을 로딩 및 링크하여 런타임데이터 영역, 즉 JVM의 메모리에 올린다.
- 실행엔진(Execution Engine)은 JVM 메모리에 올라온 바이트코드를 명령어 단위로 하나씩 실행한다.
- + GC: 힙메모리에서 사용되지 않는 데이터들을 삭제함
9. JVM 메모리구조(Runtime Data Area)
- Method Area: 모든 쓰레드가 공유하는 메모리 영역입니다. 메소드 영역은 클래스, 인터페이스, 메소드, 필드, Static 변수 등의 바이트 코드를 보관합니다.
- Heap Area: 모든 쓰레드가 공유하며, new 키워드로 생성된 객체와 배열이 생성되는 영역입니다. 또한, 메소드 영역에 로드된 클래스만 생성이 가능하고 Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역입니다.
- Stack Area: 메서드 호출 시마다 각각의 스택 프레임(그 메서드만을 위한 공간)이 생성합니다. 그리고 메서드 안에서 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장합니다. 마지막으로, 메서드 수행이 끝나면 프레임별로 삭제합니다.
- PC Register: 쓰레드가 시작될 때 생성되며, 생성될 때마다 생성되는 공간으로 쓰레드마다 하나씩 존재합니다. 쓰레드가 어떤 부분을 무슨 명령으로 실행해야할 지에 대한 기록을 하는 부분으로 현재 수행중인 JVM 명령의 주소를 갖습니다.
- Native Method Stack: 자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역입니다.
10. 자바의 특징
- 추상화: 공통의 속성이나 기능을 묶어 이름을 붙이는 것. 예: 물고기, 사자, 토끼, 뱀 -> 동물 class
- 캡슐화: 데이터 구조와 데이터를 다루는 방법들을 결합시켜 묶는 것. 변수와 함수를 하나로 묶는 것.
- 상속성: 상위 개념의 특징을 하위 개념이 물려받는 것.
- 다형성: 부모클래스에서 물려받은 가상 함수를 자식클래스 내에서 오버라이딩 되어 사용하는 것
WEB
1. 쿠키와 세션의 차이는?
- 쿠키: 클라이언트의 상태정보를 로컬에 저장 및 참조, 브라우저 Request시 Header에 자동으로 넣어서 서버에 전송. 보안 저하, 서버 처리가 필요없기 때문에 속도 빠름.
- 세션: 클라이언트의 상태정보를 서버측에서 관리함. 각 클라이언트에 고유한 세션 ID를 부여한다. 서버 메모리 공간 차지. 보안 우수. 속도 느림.
2. SSR과 CSR의 특징 및 차이
- SSR: 페이지 이동시 마다 서버에 새로운 페이지 요청. 서버에서 렌더링을 마치고 Data가 결합된 HTML을 반환함.
- CSR: 최초 요청시 페이지 요청. 이후 서버에 데이터만 요청하고 해당 데이터를 이용하여 뷰를 다시 구성함. 초기 로딩속도가 느리다.
3. Web Server와 Web Application Server의 차이
- 웹서버: 클라이언트가 페이지 요청시, 그 요청에 대한 정적 컨텐츠(단순 HTML, CSS, Javascript, 이미지, 파일 등 즉시 응답가능한 컨텐츠)를 제공하는 서버.
- 웹애플리케이션서버: 웹서버 + 웹 컨테이너, 웹서버 단독으로 처리할 수 없는 데이터베이스, 로직 등 처리가 필요한 동적 컨텐츠를 제공한다. 웹 컨테이너는 JSP와 서블릿을 실행시킬 수 있는 서블릿 컨테이너. 서블릿 수행결과를 웹서버에게 전달함.
4. HTTP와 HTTPS의 특징 및 차이
- HTTP: 기본 80포트, 서버는 요청에 응답하며 자료(정보)를 단순 텍스트로 주고받음.
- HTTPS: HTTP+S(Secure Socket), 서버 클라이언트 데이터 통신 내용이 암호화 됨. SSL 인증서
5. RESTFUL API의 구조 및 특징
- REST API: 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것.
- 구조: 자원(Resource, HTTP URI), 행위(Verb, HTTP METHOD), 표현(Representations, HTTP MESSAGE PAYLOAD)
- C(생성, POST), R(조회, GET), U(업데이트, PUT(전체), PATCH(일부)), D(삭제, DELETE)
6. 자바와 자바스크립트의 차이 및 특징
- 둘 다 OOP, 자바스크립트도 백엔드 사용 가능.
- 자바: JVM 환경에서만 구동, 프로그래밍언어이기 때문에 컴퓨터가 이해할 수 있도록 컴파일 되어야 함. 다양한 운영체제에서 실행될 수 있는 독립적인 언어.
- 자바스크립트: 모든 브라우저는 자바스크립트 엔진 내장. 이미 존재하는 소프트웨어를 제어하기 위한 스크립트 언어. 컴파일 과정을 거치지 않고 실시간으로 텍스트를 분석하여 실행. 반드시 CSS와 HTML에 의존해야 한다.
7. Cross Browsing이란?
- W3C에서 채택된 표준 웹기술을 적용해 모든 브라우저에 다른 기종으 ㅣOS나 HTML 렌더링 기술로 비슷하게 만들어 어떤 환경에서도 이상없이 작동되게 하는 웹페이지 제작방법론.
- 예) 익스플로러에서 이용할 수 있던 사이트를 크라스 브라우징을 통해 크롬이나 오페라에서도 이용할 수 있도록 함.
8. Cross Domain(CORS)이란?
- Ajax 등을 통해 다른 도메인의 서버 URL을 호출할 경우, 자신과 동일한 도메인으로만 HTTP요청을 보내도록 제한함.
- CORS(Cross-origin resource sharing): 웹페이지의 제한된 자원을 외부 도메인에서 접근 허용해주는 매커니즘.
- 스프링에서는 CrossOrigin 어노테이션을 이용하여 해결가능
9. 비동기/동기 프로그래밍(Async, Await, Promise, Ajax 등)
- 각각의 작업이 독립적으로 실행되어, 작업이 끝나지 않아도 다음 작업을 수행함.
- Promise: 비동기 연산이 종료된 이후의 결과값이나 실패 이유를 처리하기 위한 처리기(then, catch) 존재. 대기(pending), 이행(fulfilled), 거부(rejected) 상태 존재
- Async, Await: async 키워드는 함수 앞에 붙여서 사용 가능. async 함수는 promise를 사용하여 결과를 반환함. await가 붙은 비동기 함수는 동기함수처럼 비동기 함수의 실행이 끝날때까지 기다림.
- Ajax: 서버 클라이언트의 데이터 통신을 비동기 수행
10. 웹소켓이란 무엇인가?
- 서버와 클라이언트 간에 Socket Connection을 유지하여 데이터 통신함.
- 기본적으로 서버-클라이언트의 HTTP 통신간 Connectionless이기 때문에 클라이언트 데이터를 업데이트 하기 위해 서버에서 웹소켓 메세지를 송신하여 클라이언트를 업데이트 함.
Spring
1. Spring MVC 동작 원리
- 클라이언트의 요청을 받으면 Dispatcher Servlet은 Handler Mapping에게 컨트롤러 검색을 요청함
- Dispatcher Servlet은 전달받은 컨트롤러 객체를 처리할 수 있는 Handler Adapter에게 요청 처리를 위임
- Handler Adapter는 컨트롤러의 알맞은 메서드를 호출해 요청을 처리함.
- 처리 결과를 ModelAndView라는 객체로 DispatcherServlet에게 반환함
- DispatcherServlet은 ViewResolver 객체를 이용하여 해당 뷰를 검색하여 리턴함.
- DispatcherServlet은 ViewResolver가 리턴한 View 객체에게 응답 결과 생성을 요청.
- View 객체는 JSP를 실행함으로서 브라우저에게 전송할 응답결과를 생성함.
2. Dispatcher Servlet 이란?
- HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임함.
3. Spring Boot와 Spring MVC의 특징 및 차이
- Boot: 내장 톰캣서버 포함. 종속된 모든 라이브러리를 알맞게 찾아서 자동으로 가져옴.
4. AOP란?
- 관점지향 프로그래밍: 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하겠다는 것이다.
- 서로 다른 클래스라고 하더라도 비슷한 기능(메서드, 코드)를 하나로 모아 @Aspect 로 사용.
- A클래스 안에 들어있는 모든 메소드는 B메소드(Aspect, Advice)를 사용해라.
5. Spring에서 Bean을 생성하는 방법
- 빈: IOC 컨테이너가 관리하는 자바 객체.
- 생성법: @Component, 빈 설정파일에 직접 등록(@Configuration, @Bean), application.xml 파일에 등록 (<property...)
6. Spring Bean의 Scope란? 종류와 특징
- singleton: 하나의 Bean 정의에 대해 IOC Container 내 단 하나의 객체만 존재
- prototype: 하나의 Bean 정의에 대해 다수의 객체가 존재할 수 있다. 요청마다 새로운 객체 생성, gc에 의해 bean 제거됨.
- request: 하나의 Bean 정의에 대해, 하나의 HTTP Request 생명주기 내 단 하나의 객체 존재. 즉, 각각의 HTTP Request는 자신만의 객체를 가진다.
- session: 하나의 Bean 정의에 대해 하나의 HTTP Session 생명주기 내 단 하나의 객체 존재.
- global session: 하나의 Bean 정의에 대해 global HTTP Session의 생명주기 내 단 하나의 객체 존재. 일반적으로 portlet context안에서 유효.
7. @Controller와 @RestController 차이
- Controller: Veiw를 반환하기 위해 사용. 데이터 반환시에는 @ResponseBody 어노테이션 사용해야함.
- RestController: JSON 형태로 객체 데이터 반환함. @Controller + @ResponseBody
8. 의존성주입(DI), 제어의 역전(IOC)
- DI: 객체 사이에 필요한 의존관계에 대해서 스프링 컨테이너가 자동으로 연결해 주는것. Bean 객체 관리
- IOC: 사용자가 직접 new 연산자를 통해 인스턴스를 생성하고 메서드를 호출하는 작업을 스프링에 위임함.
'그 외 > 면접준비' 카테고리의 다른 글
예상면접질문 (0) 2022.09.17 예상면접질문 - JPA (0) 2022.09.17 예상면접질문 - Spring (0) 2022.09.17 면접준비 (0) 2021.09.22