기술면접 D-1에 훑어볼 용으로 정리하는 for 백엔드개발자 기술면접 대비 요약집입니다. 손으로 메모해둔 쪽지들 모아모아 옮긴거라 순서가 뒤죽박죽이고 요약st인 것 감안요- 😌💙
Java 메모리 구조
- 코드 영억 - 프로그램 코드가 저장된 영역
- 데이터 영역 - 전역변수, 정적변수 할당 영역
- 힙 영역 - 런타임 시 동적 병수 할당 영역
- 스택 영역 - 컴파일 시 지역 변수, 함수, 매개 변수 할당 영역
멀티스레드
멀티스레드 환경에서는 race condition(경합 상황)이 발생할 수 있다. 이 때 요청이 같은 상태의 자원을 보도록 하는 가시성과 요청이 모두 반영되도록 하는 원자성을 확보하는 것이 중요하다. 변수에 volatile 키워드를 추가하여 캐싱한 자원을 보지 않도록 하고, 메소드에 synchronized 키워드를 추가하여 동기화 함으로써 가시성과 원자성을 확보할 수 있다.
+) 간단히?는.. 변수를 private으로 선언하고.. 가능하면 전역 변수는 설정하지 않고... 로드 밸런싱을 잘 하고.. 동기화를 지원하는 자료구조(리스트.. 벡터.. 등)를 쓰고... 하는 방식으로도 경합 조건은 발생하지 않게 만들 수 있는 것 같다.
웹에서 주소창에 주소 적고 엔터 치면 일어나는 일?
- URL 도메인의 IP(Internet Protocol) 주소를 찾는다.
- 서버와 TCP(Transmission Control Protocol - 연결형 프로토콜, 높은 신뢰성, 흐름제어 & 혼잡 제어)연결을 한다.
- HTTP 요청을 서버로 전송한다.
- 웹서버가 요청을 처리하여 응답한다.
- 브라우저에서 렌더링 한다. 화면이 나온다.
웹 브라우저 렌더링 순서?
- HTML, CSS, JS 등 리소스를 요청하여 응답받는다.
- 파싱하여 DOM(Document Object Model), CSSOM(CSS Object Model)을 생성한다.
- 렌더링 트리를 결합한다.
- JS를 파싱하여 결합한다.
- HTML 레이아웃을 파싱한다.
CORS
Cross Origin Sharing의 약자로 출처가 다른 리소스를 허용하는 정책이다. 기본적으로 브라우저는 출처가 다른 리소스를 허용하지 않고 있는데, 사실상 그렇게 사용하는 건 불가능하기 때문에 정책을 정해놓고, 요청 헤더에 출처를 보내면 서버에서 허용된 출처를 응답함으로써 그 정책에 맞는 경우는 출처가 다르더라도 리소스를 허용하는 것이다. 이 때 CORS를 위반하면 에러가 발생한다.
접근 제어자(access modifier)
변수 및 메소드에 접근 범위를 설정하는 것이다.
- public - 모든 곳에서 접근 허용
- protected - 패키지 내 또는 상속 받은 경우에만 접근 허용
- default - 패키지 내에서만 접근 허용
- private - 클래스 내에서만 접근 허용
Overriding
상위 클래스 또는 인터페이스의 메소드를 재정의 하는 것이다.
Overloading
같은 메소드명으로 매개변수 타입, 개수 등을 다르게 만드는 것이다.
final 키워드
변경을 허용하지 않는 키워드다.
- final class - 상속 불가능
- final method - 오버라이딩 불가능
- final variable - 새롭게 할당 불가능
제네릭
데이터 타입을 일반화 하는 것이다. 컬렉션 클래스에서 주로 사용하며, 클래스나 메소드에서 사용할 데이터 타입을 컴파일 시 미리 지정하는 것이다. 컴파일 시에 미리 타입 검사를 함으로써
- 클래스나 메소드 내부에서 사용하는 객체의 안정성을 높일 수 있고,
- 반환 값에 대한 타입 검사 등에 들어가는 노력을 줄일 수 있다.
네트워크 7계층
- (P) 물리 계층
- (D) 데이터 링크 계층
- (N) 네트워크 계층
- (T) 전송 계층
- (S) 세션 계층
- (P) 표현 계층
- (A) 응용 계층
Please, DoNT SPA
객체 지향 설계 원칙
- S - 단일 책임 원칙 (하나의 책임만을 수행하도록)
- O - 개방 폐쇄 원칙 (확장에는 열려있고, 수정에는 닫혀있도록)
- L - 리스코프 치환 원칙 (하위 객체로 상위 객체를 치환 가능하도록)
- I - 인터페이스 분리 원칙
- D - 의존 역전의 원칙 (추상 클래스나 인터페이스에 의존하도록)
REST API
Http 프로토콜 통신에 적합한 네트워크 기반 아키텍처이다. REST는 Representational state transfer의 약자로 네트워크 환경 통신 지침이다. 이 통신 지침에 맞는 아키텍처를 따르는 API가 REST API 이다. 확장성이 좋고 유연하며 독립적이다. 식별자, 메서드, 데이터 파라미터를 가진다. 메소드에는 GET(정보 요청), POST(정보 입력 create), PUT(정보 업데이트), DELETE(정보 삭제)가 있다.
디자인패턴
[생성 패턴]
- 싱글턴 패턴 - 특정 클래스에 객체를 하나만 만들도록 하는 패턴이다. 싱글턴 패턴은 클래스 인스턴스를 하나만 만들어 전역 접근을 제공함으로써 자원 낭비를 막는다. getInstence()
- 추상 팩토리 패턴
- 팩토리 메소드 패턴
[행동 패턴]
- 템플릿 메소드 패턴
- 싱글턴 패턴 (ex: getInstence())
- 상태 패턴(ex: hande())
- 반복자 패턴(ex: hasNext(), next(), remove())
- 전략 패턴
- 옵저버 패턴
[구조 패턴]
- 데코레이터 패턴
- 프록시 패턴
- 컴포지트 패턴
- 어댑터 패턴
- 퍼사드 패턴
HTTP
HyperText Transfer Protocol의 줄임말로, 링크 기반으로 클라이언트와 서버가 데이터를 주고 받는 프로토콜이다.
[HTTP 특징]
- connectless: 요청-응답 후에는 연결을 끊는다.
- stateless: 상태를 저장하지 않는다. 클라이언트의 이전 상태를 알 수 없다.
- keep-alive: HTTP1.1부터는 keep-alive time out 내 재요청은 새로운 연결이 아닌 기존 연결을 이용한다.
[HTTP request 구조]
- Header - HTTP reqeust method, HTTP request header
- 공백
- message - HTTP request message
[HTTP response 구조]
- Header - HTTP 상태코드(ex: 200), HTTP response header
- 공백
- message - HTTP response message
[HTTP 메소드]
- GET - 정보를 요청(Read)
- POST - 정보를 입력(Create)
- PUT - 정보를 수정(Update)
- DELETE - 정보를 삭제(Delete)
Java Collection
- List, Map, Set, Stack, Queue 자료형을 제공한다.
- data 표준화 클래스를 제공하여 편리하다
- 객체의 수를 동적 할당이 가능해 효율적이다.
인덱스
책의 목차와 같이 컬럼의 값과 컬럼의 값이 저장된 주소를 key : value 쌍으로 저장해둔 것이다. 인덱스를 생성하는 경우 조회 시 성능이 향상된다는 장점이 있지만 insert, update 시에는 오히려 느려질 수 있다.
정규화 vs 비정규화
정규화의 목적은 중복을 최소화 하는 것이고 비정규화의 목적은 읽는 시간을 최소화 하는 것이다.
조인의 종류
- NL JOIN - 중첩 반복문 형태로 조인하는 것이다. 선행 테이블에서 해당 값 찾고 그 값으로 후행 테이블 조회함
- HASH JOIN - 선행 테이블을 해싱하고 후행 테이블을 해싱하여 조인
- SORT MERGE JOIN - 조인 컬럼 기준으로 정렬하여 조인
트랜잭션
트랜잭션은 작업의 완전성을 위한 것으로 모두 처리되어야 하는 것이다. 모두 처리 되지 못한 경우 원복 되어야 한다.
[트랜잭션의 특징]
- 원자성
- 일관성
- 고립성
- 지속성
LOCK
여러 커넥션에서 동시에 자원을 요청하는 경우 하나의 커넥션만 자원에 접근 가능하도록 하는 것이다.
절차형 SQL
대표적으로 프로시저가 있다. 문장을 DB 서버에 저장하며, 애플리케이션 사이에 공유하여 독립적으로 실행이 가능하다.
'기타 CS' 카테고리의 다른 글
(기술 면접 기출) Local cache VS Global cache (0) | 2023.03.26 |
---|---|
(기술 면접 기출) GC종류, 가비지 컬렉션 종류, 설정 명령어 (0) | 2023.03.26 |
(JPA) Entity 설계 시 주의점 (0) | 2023.03.18 |
쿠버네티스란 무엇인가 (0) | 2023.03.15 |
Redis (0) | 2023.03.06 |