티스토리 뷰

CS

[기술면접] General Interview Questions

Nickolodeon 2023. 10. 11. 23:38

1. 컴포넌트와 모듈의 차이

① 컴포넌트: 런타임 개체 단위
② 모듈: 실질적으로 구현이 된 단위

※ 서버 / 클라이언트 구조에서 서버 1개 · 클라이언트 100개라면?
→ 모듈: 서버 1 + 클라이언트 1 = 2개 → 컴포넌트: 서버 1 + 클라이언트 100 = 101개

2. 자바란?

"Write once, Run anywhere" 라는 특성의 객체지향 언어

3. 자바의 구동원리

① 컴파일러가 코드를 검증하고 JVM이 읽는 바이트 코드 (.class) 로 변환한다.
② JVM 으로 바이트 코드를 가져온다.
③ 바이트 코드가 올바른지 검증한다.
④ 인터프리트한다.
⑤ 바이트 코드를 바이너리 코드로 변경하고 JVM 의 클래스 영역에 저장한다.
⑥ 런타임 과정에서 클래스들의 static 변수를 자동으로 초기화한다.
⑦ static 블록을 수행한다.
⑧ 인스턴스 블록을 수행한다.
⑨ 생성자를 호출한다.
⑩ main 함수를 호출한다.

4. JVM 의 특징

▷ 스택 기반의 가상 머신이다.
▷ GC (Garbage Collector) 가 동작한다.
▷ 플랫폼에 독립적으로 작동한다.

5. 객체 지향과 절차 지향의 차이점

◎ 절차 지향 프로그래밍 ▶ 루틴, 서브루틴, 함수 (프로시저) 등을 이용해 프로그래밍하는 것
◎ 객체 지향 프로그래밍 ▶ 프로그램을 데이터 \ 처리방법 으로 나누지 않고 객체 내에 데이터와 처리방법 (동작) 을 모두 담아 객체 간의 상호작용으로 서술하는 것 ▶캡슐화, 상속, 다형성, 추상화와 같은 특징을 가짐

6. 객체 지향 언어의 특징

◈ 캡슐화:객체의 속성과 행위를 하나로 묶고 실제 구현 내용의 일부는 외부에 감추는 것
◈ 상속: 새 클래스가 기존 클래스의 자료 및 연산을 사용할 수 있는게 하는 것
◈ 다형성: 하나의 요소에 여러 개념을 넣은 것 (오버라이딩, 오버로딩)
◈ 추상화: 공통되는 속성이나 기능을 묶어서 이름을 붙이는 것

7. 상속과 구현의 차이점과 특징 및 장단점

상속은 is-a, 구현은 can-do
장점 ☞ 코드의 중복을 줄일 수 있다; 확장성이 증가한다; 하나의 인터페이스와 여러 구현체로 다형성을 구현 가능하다.
단점 ☞ 다중상속 시 복잡도가 증가한다.

8. 오버라이딩과 오버로딩

오버라이딩? 상속하는 부모 클래스의 함수를 재정의하는 것, 함수 이름 / 매개변수 / 반환형이 동일하다.
오버로딩? 함수 이름 외의 다른 요소들을 재정의한다.

9. 기본형 변수와 참조형 변수

기본형 ≫ Stack 영역에 값이 저장되는 변수
e.g. byte, short, int, long, float, double, boolean, char
참조형 ≫ Heap 영역에 저장되고, Stack 에 저장되는 주소값에 의해 참조되는 변수
e.g. Integer, Long, Double, Character, String

10. 스택 오버플로우의 원인

스택 포인터가 스택의 경계를 넘는 것이 원인
왜? 상당히 깊은 / 무한 루프 (예) 탈출 조건이 없는 재귀 함수)

11. 메모리 누수란?

프로세스가 메모리 할당을 한 후 해제하지 않으면 발생한다.
프로세스를 장기간 동작시키는 경우에 메모리 누수의 위험이 있다.
막기 위해서는 프로세스가 끝날 때 메모리가 할당된 변수를 제거하면 된다.

12. static 이란?

절차 지향과 객체 지향으로 나누어 생각할 수 있다.
㉮ 절차 지향: 지역변수 · 전역변수; 함수 내에서만 사용가능 (지역 변수) 함수 종료 시까지 메모리에서 해제되지 않음 (전역 변수)
㉯ 객체 지향: 클래스 멤버; 클래스 내에 선언이 되면 클래스 관련 모든 인스턴스가 사용 가능한 객체이다.

13. 싱글턴 패턴이란?

인스턴스를 한 번만 생성하고 계속 재사용하는 패턴

14. 전략 패턴?

스트래티지 패턴(Strategy pattern)이라고도 하며, 교환 가능한 행동을 캡슐화하고 위임을 해 행동을 다르게 하는 패턴
e.g. '운송 전략' 이라는 인터페이스를 생성하고 서로 다른 전략을 클래스로 구현한 후, 버스나 기차와 같은 운송 수단이 전략을 매개 변수로 변경할 수 있도록 한다. 버스나 기차의 내부 구현 방식은 한 메서드의 매개 변수로 주어지는 전략에 따라 행동을 변경하는 방식으로 되어 있다.

15. 익명 클래스와 익명 객체

익명 클래스 → 인스턴스를 생성함과 동시에 클래스를 선언한다; 일회성, 유일의 객체

16. 스레드란? 스레드가 사용되는 때

프로세스 내에서 실제로 작업을 수행하는 주체
하나 이상의 프로세스가 있을 때 멀티 스레드

17. 여러 번 Join 하기 vs 역정규화

데이터가 500만개만 되도 join 을 여러 번 하는 것은 시간이 많이 걸린다. 정규화되지 않은 DB 라도 foreign key 를 이용해 데이터를 바로 참조할 수 있도록 설계하는 것을 선호하기도 한다.

18. 쿼리 실행 계획

explain 키워드를 사용한다.
id, type, key 등의 컬럼의 값을 확인하여 쿼리가 어떻게 실행될지 판단할 수 있다.

19. 서브 쿼리 순서

서브 쿼리 → 메인 쿼리
장점: 쿼리의 각 부분을 명확히 구분할 수 있다; 복잡한 JOIN 을 대체할 수 있다; 복잡한 JOIN에 비해 가독성이 뛰어나다.

20. lazy loading

당장에 필요하지 않은 리소스를 추후에 로딩하는 것

21. Spring을 사용함에 있어서 가장 핵심적인 이유는?

Spring 의 IOC, 즉 제어의 역전은, 개발자가 관리하던 객체의 생성부터 소멸까지의 생명주기를 스프링 빈을 통해 프레임워크가 관리한다는 의미이다. Spring 은 개발 외의 구성을 신경 쓰지 않고 오롯이 코드 작성에 집중할 수 있게 해준다.
▷ 스프링은 POJO 기반의 프레임워크이므로, 객체 지향적 설계를 하는 데에 용이하며, 개발자의 생산성을 높여준다.

22. Java 컴파일 과정을 설명하시요

Java 는 컴파일러에 의해 바이트 코드 (.class) 로 변환된다. 바이트 코드를 JVM 이 읽고 바이너리 코드로 변환한 후 클래스 영역에 저장한다. execution engine 이 바이너리 코드를 읽고 실행시킨다.
▷ 1. 컴파일러가 코드를 검증한 후 바이트 코드 (.class) 로 변환한다.
▷ 2.  컴파일러가 바이트 코드를 검증한다.
▷ 3. 인터프리트
▷ 4. 바이트 코드를 바이너리 코드로 변환하고 JVM 의 클래스 영역에 저장한다.
▷ 5. 런타임 과정에서 static 변수들을 초기화한다.

23. Array와 Linked List의 차이점을 설명하시고 시간복잡도 순으로 설명하시요

Array는 값을 단순히 나열한 자료 구조로 삽입, 조회, 삭제 모두 O(n) 의 시간 복잡도를 가진다.
LinkedList는 노드로 구성되어 각 노드가 앞뒤 노드의 정보를 알고 있는 노드끼리 연결된 형태의 자료구조이다. 그래서 단순히 삽입과 삭제에 앞뒤 노드가 참조하는 모양을 바꾸면 되기 때문에 O(1)이 걸리고 최악의 경우 O(n)이 걸린다. 조회도 O(1) 이 걸리지만 최악의 경우 O(n) 이 걸린다.

24. TCP/UDP의 통신 방식 차이점

TCP 는 연결 지향적인 프로토콜로, 서버와 클라이언트 간 통신을 위한 연결을 맺을 때 3-way handshake, 끊을 때 4-way handshake 를 사용해 안전하게 연결한다. 보안성이 높지만 속도가 느리다는 단점이 있다.
UDP 는 서버의 상태에 상관 없이 계속해서 연결 요청을 보낸다. 그래서 연결이 보장되지는 않지만 통신의 속도는 빠르다는 장점이 있다.

25. HTTP/HTTPS의 정의와 차이점

HTTP 는 서버 클라이언트 간 네트워크 통신 프로토콜이다. 80 포트를 사용한다.
HTTPS 는 HTTP 에 데이터 암호화를 추가한 프로토콜이다. 443 포트를 사용한다.

26. DB의 ACID 요소 설명

A: Atomicity, 원자성으로 트랜잭션은 오직 완전히 성공하거나 완전히 실패하기만 한다는 특성이다.
C: Consistency, 일관성으로 트랜잭션 전후로 데이터의 모순이 존재하지 않는다는 특성이다.
I: Isolation, 독립성으로 트랜잭션은 한번에 하나만 존재할 수 있다는 특성이다.
D: Durability, 지속성으로 모든 트랜잭션은 (rollback 포함) 영원히 남는다는 특성이다.

27. DB의 Transaction이란?

트랜잭션은 DB 에 수행하는 작업의 단위이다.

28. 조인이란?

2 개 이상의 테이블 레코드들을 하나로 엮어서 하나의 열로 보고 싶을 때 사용하는 쿼리문이다. 

29. SQL vs NoSQL

SQL은 정형화된, 스키마가 있는 중복이 없고 관계가 있는 데이터베이스 → 수직적 확장만 가능
NoSQL은 비정형화된, 스키마가 없고 중복이 있으며 관계도 없는 데이터베이스 → 수평적, 수직적 확장 모두 가능

30. 이상 (Anomaly) 의 종류

1. 삽입 이상
2. 갱신 이상
3. 삭제 이상

31. 쿠키와 세션

Http 의 Stateless, Connectionless 한 특징을 보완할 수 있다.
쿠키는 클라이언트에 저장된다. 쿠키 만료 시간을 설정하면 브라우저가 종료되어도 상태를 유지할 수 있다. 서버에 저장되지 않기 때문에 보안에 취약하지만 속도가 빠르다.
세션은 서버에 저장된다. 브라우저가 종료되면 세션은 만료된다. 서버에 저장되어 보안성이 높지만 서버의 자원을 활용하기 때문에 서버에 부하를 줄 수 있다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함