웹 개발자 신입에 지원하면서 기술 면접 준비했던 것과 실제로 질문받은 내용들을 정리해보려고 한다. (실제로 질문받은 내용은 최상단에 업데이트할 예정)
트랜잭션이란?
- 작업의 완전성을 보장해주는 것
- 논리적인 작업을 모두 완벽하게 처리하거나, 또는 처리하지 못할 경우, 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능
트랜잭션의 특성(ACID)
- Atomicity 원자성: All or Nothing. 트랜잭션이 DB에 모두 반영되거나, 전혀 반영되지 않아야 함
- Consistency 일관성 : 트랜잭션이 실행을 성공적으로 완료하면, 언제나 일관성 있는 데이터베이스 상태로 유지되어야 함
- Isolation 격리성 : 트랜잭션 수행 시 다른 트랜잭션의 연산 작업이 영향을 미치지 않도록 보장함
- Durability 지속성 : 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함
세션과 쿠키의 차이
- 세션(Session) : 방문자가 특정 웹사이트에 머무르는 기간. 웹에 접속해서 웹 브라우저를 종료하는 시점까지. 세션 관련 데이터는 서버에 저장되기 때문에 대량의 데이터 저장 가능
- 쿠키(Cookie) : 사용자 정보를 클라이언트 측에 작은 텍스트파일로 저장. 브라우저 종료해도 사용자의 하드 드라이브에 저장되기 때문에 직접 삭제,만료되어야 사라짐
- 차이점
1) 저장위치: 세션은 서버에 저장, 쿠키는 클라이언트에 파일로 저장
2) 보안: 세션은 보안성 높고, 쿠키는 취약
3) 라이프사이클: 세션은 브라우저 종료시 삭제, 쿠키는 브라우저 종료해도 사용자가 삭제할 때까지 파일로 남아있음
MVC1, 2의 차이점
| MVC1 | MVC2 | |
| jsp의 역할 | 뷰 + 컨트롤러 | 뷰 |
| 요청 시 응답 | jsp/servlet이 응답 | 컨트롤러라는 서블릿이 모든 요청에 대한 흐름 제어 |
| 장점 | 페이지 흐름 단순, 구조가 간단 | 로직/뷰 코드 분리로 유지보수 용이 |
| 단점 | 로직/뷰 코드 혼합으로 jsp코드 복잡⇒ 유지보수 어렵, 코드 중복 발생률 높음 | 작업량이 많고 접근이 어려움 |
JVM
- JVM이란?
- 자바 애플리케이션을 클래스 로더를 통해 읽어들여 자바 API와 함께 실행하는 자바 가상 머신
- 인터프리터 - 컴파일러에 의해 변환된 자바 바이트 코드를 읽고 해석하는 것
- 클래스 로더 - 동적으로 클래스를 로딩해주는 역할
- 컴파일러 - 프로그램 실행중일 때 실제로 기계어로 변환해주는 역할
- 가비지 컬렉터 - 더이상 사용하지 않는 메모리 자동 회수
- 실행과정
- 컴파일러(javac)가 자바소스(.java) 읽어서 바이트코드(.class)로 변환
- 변환된 클래스 파일들 → 클래스 로더 통해 JVM 메모리 영역으로 로딩
- 로딩된 클래스 파일들 → Execution Engine 통해 해석됨
- 해석된 바이트코드는 Runtime Data Areas에 배치되어 실질적인 수행 이루어짐
- JVM의 바이트 코드
- JVM이 이해할 수 있는 언어로 변환된 자바 소스 코드
- 자바 컴파일러에 변환되는 코드의 명령어로 크기가 1byte, 확장자는 .class
프로세스와 스레드
- 프로세스
- 운영체제로부터 시스템 자원을 할당받는 작업의 단위
- 4가지 영역으로 구성
- Stack: 매개변수, 지역변수 등 임시적인 자료
- Heap: 생성자, 인스턴스와 같은 동적으로 할당되는 메모리
- Data: static으로 저장된 전역 변수
- Text: Program의 코드
- 스레드
- 프로세스보다 더 작은 작업의 단위, 프로세스 내에서 실행되는 흐름의 단위
- 프로세스 내 다른 메모리 영역을 같은 프로세스 내 다른 스레드와 공유
- 스레드의 스케줄링은 OS가 처리X → 개발자가 직접 동기화 문제 해결
- 차이점: 프로세스는 자신만의 고유 공간과 자원 할당받아 사용, 스레는 프로세스 내의 다른 스레드와 공간, 자원을 공유하면서 사용
멀티스레드
- 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업 수행하는 것(js는 싱글 스레드)
- 한계점: 공유하는 자원들에 대한 동기화 문제 발생 가능성
- 사용하는 이유: 각 스레드가 자신이 속한 프로세스의 메모리를 공유하므로 자원 낭비 적고, 한 스레드가 작업할 때 다른 스레드가 별개 작업할 수 있어 사용자와의 응답성도 좋아짐
- 처리방법: Thread 클래스나 Runnable 인터페이스 상속받아 run() 메서드 오버라이딩하여 구현. synchronized 키워드를 이용해 공유자원에 대한 동기화 처리 가능
객체 지향 언어란?
- 모든 데이터들을 객체로 정의하고, 객체와 객체 간의 상호작용으로 프로그램이 동작하는 것을 말합니다.
- 4가지 특징
- 추상화, 상속, 다형성, 캡슐화
- 추상화: 공통된 기능을 하는 클래스들의 기능을 추출하여 인터페이스에서는 역할만 선언하고, 각 클래스에서 실질적으로 기능을 구현하는 것
- 상속: 부모 클래스에서 구체적으로 선언한 것들을 자식 클래스에서 사용하는 것으로, 반복적인 코드를 줄일 수 있음
- 캡슐화: 게터세터나 접근지정자를 통해 외부에서의 접근 여부를 설정할 수 있음
- 다형성: 상위 클래스의 참조변수를 이용하여 하위 클래스의 객체에 접근 가능
- 추상화, 상속, 다형성, 캡슐화
- 절차 지향 언어와의 차이
- 절차 지향 언어는 속도가 빠르나 유지보수나 디버깅이 어렵습니다.
- 실행 순서가 정해져 있어서 코드의 순서가 바뀌면 동일한 결과 기대하기 어렵습니다.
자료구조
- Array & ArrayList
- 공통점: 중복 요소 허용, 널 값 저장 가능, 인덱스로 값 참조 가능, 순서 X
- 차이점: 길이 조정 가능 여부(Array는 고정길이, ArrayList는 가변 길이)
- LinkedList & ArrayListArrayList LinkedList
순서대로 데이터 저장 앞뒤 원소의 위치값을 가짐, 정방향 또는 역순으로 순회 가능 인덱스로 데이터에 한번에 접근하여 속도 빠름 순차적 접근으로 검색 속도 느림 동적 배열로 크기 자유롭게 조절 가능 데이터 삽입, 삭제 빈번할 경우 빠른 성능 보장 데이터 삽입,삭제시 위치 맞춰줘야 해서 비효율적 삽입, 삭제시 주소값만 변경해주면 되서 효율적 - 배열 & 컬렉션(List, Map, Set)
- 배열: 자료형이 같아야하고, 크기 고정, 추가/삭제 번거로움
- 컬렉션: 어떤 자료형도 담을 수 있고, 추가/삭제 자유로움
- List & Map & Set
List Map Set 인덱스 O key/value 형태, 인덱스 대신 iterator 사용 인덱스 대신 iterator 사용 순서 유지 O 순서유지 X 순서유지 X 중복 O Key 중복 X, Value 중복 O 중복 X
'Dev Silver' 카테고리의 다른 글
| 비전공자 국비학원출신 취뽀 후기 (0) | 2023.07.29 |
|---|---|
| 비전공자 SQLD(SQL 개발자) 합격 후기 (0) | 2023.07.08 |
| 비전공자 정보처리기사 합격 후기 (0) | 2023.04.28 |
| 개인 프로젝트 시작 (0) | 2023.04.27 |
| 티스토리 시작 (0) | 2023.04.26 |