의문점 공부하기/🧾공부하며

🧾면접 최종 정리(Java, Spring, DB, OS, 네트워크, 자료구조)

아리빠 2023. 12. 12. 01:57

스프링:
자바 플랫폼을 위한 오픈소스 어플리케이션 프레임워크로 , pojo 기반 - plain old java object , DI- defendency injection 의존성 주입, aop
-관점 지향 프로그래밍 을 지원하는 컨테이너를 제공하는 프레임워크


제어의 역전 Ioc(Inversion of Control) - 디자인 원칙 중 하나로 

객체의  생성부터 생명주기의 까지 모든 객체에 대한 제어권이 바뀐것을 의미 - 클래스 간 결합도를 줄이기 위해

-결합도는 왜 줄이는가? 결합도는 구성 요소 간의 의존성 정도를 나타내는데 높은 결합도는 시스템을 유지보수하거나 확장하기 어렵게 만들기 때문에 



DI(Dependency injection) 의존성 주입 - 디자인 패턴 중 하나 

의존 객체를 직접 생성하는 것이 아닌, 생성자나 setter을 통해 의존 관계를 주입하는 것 의미


그렇다면 스프링에선 IoC와 DI를 어떻게 지원하는가?
-컨테이너로써 제공, 클래스 사이 의존 관계를 Bean 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 방식으로 제공
-> 객체간 결합도가 낮아짐 But 코드 추적이 어렵다


AOP
관점 지향 프로그래밍: 공통 관심사항과 핵심 관심사항을 분리하는 것을 의미


Bean 객체란?
DI 컨테이너 내부에 존재하며 관리받고 있는 객체를 의미, Bean으로 등록된 객체는 쉽게 주입하여 사용 가능


Annotation
프로그램에 추가적 정보를 제공하는 메타 데이터
어노테이션을 정의하고 원하는 위치에 배치한 후, 코드가 실행되는 도중 자바 리플렉션을 이용해 추가 정보를 획득, 기능 실시하는 방식


트랜잭션을 추상화해서 사용하는 이유
코드레벨은 다르지만 논리적으로 같은 기능을 수행하기에


JAVA의 장단점
JVM 위에서 실행되기 때문에 OS에 종속적이지 않고, 독립적으로 실행
객체 지향 언어로, 객체 지향 프로그래밍이 가능
바이트 코드로 변환하고, JVM에 의해 기계어로 번역되므로 한번 컴파일링을 거치는 언어에 비해 느리다


JVM이란?
java virtual machine
OS와 java application사이를 중재해주는 가상 머신 


자바 실행 과정
1. java 소스코드 작성: .java 확장자 가짐
2. java 소스코드를 .class바이트 코드로 변환하는 컴파일 작업 수행
3. jvm의 바이트 코드 실행
4. java 클래스 파일이 jvm에 의해 로딩, 클래스변수 초기화
5. main 메서드 실행
6. 프로그램 종료


가비지 콜렉터 GC란?
동적으로 할당한 메모리 영역 중, 사용하지 않는 영역을 탐지해 해제하는 역할
Java에서 동적 변수를 할당하는 영역은 Heap 영역이므로, JVM의 GC의 작동 대상은 Heap 메모리


자바에서 ==와 equals의 차이
==: 참조 비교, 두 객체가 같은 메모리 위치인지 비교
equals: 두객체의 내부 값이 같은지 비교


자바의 접근 제한자
public: 접근에 제한 없음
private: 자기 자신 클래스 내에서 접근 가능
default: 같은 패키지 내에서 접근 가능
protected: 동일한 패키지 내에서 접근+ 상속을 이용한 접근 가능


자바의 데이터 타입
원시 자료형: stack영역
정수형 : byte, short, int, long
실수형 : float, double
논리형 : boolean
문자형 : char


참조 자료형: Heap영역
원시 자료형 제외 모두
String, integer 등
데이터는 heap에서 관리, 메모리 주소값은 stack에서 관리 


Java의 hashcode()는?
두 객체가 동일한 객체인지 비교할 때 사용


Boxing과, UnBoxing에 대해 
기본 타입의 변수를 래퍼클래스의 인스턴스로 변경하는 과정을 박싱, 래퍼클래스의 인스터스를 다시 기본 타입으로 꺼내는 과정을 언박싱


래퍼(Wrapper) 클래스:원시자료형 타입의 데이터를 객체로 취급해야 할 경우 사용하는 클래스


Java의 static변수 
클래스 당 하나만 생성, 동일한 클래스의 모든 객체들에 의해 공유 


Java의 main 메소드가 static인 이유는?
static은 프로그램 시작 시 클래스 로더에 의해 메모리에 로드되어 인스턴스를 생성하지 않아도 호출 가능하기 때문


generic이란?
클래스 내부에서 타입을 지정하는것이 아닌 외부에서 사용자에 의해 지정되는 것
필요에 의한 지정을 그때그때 할 수있는 일반 타입


추상클래스 vs 인터페이스

 

추상 클래스: 추상 클래스 내부에 추상 메소드 이외 다른 것들도 추가 가능,
추상 키워드사용해 선언한 클래스, 추상 메서드 한개 이상 포함

인터페이스: 인터페이스 키워드를 사용해 선언, 추상메서드와 상순만을 포함
다중상속 가능


String builder: 동기화 지원 안해서, 단일쓰레드에서 성능이 좋음 
String buffer: 동기화 지원해서 멀티 쓰레드 환경에서 thread-safe


OS란?
운영체제는 하드웨어 자원을 관리하고, 응용 프로그램와 하드웨어 사이를 중재하는 인터페이스


커널이란?
메모리에 상주하는 OS의 핵심 부분으로, 필요한 운영체제의 핵심 부분만을 메인 메모리에 적재하여 운영체제를 사용하게함


메모리 구조

텍스트 영역: 실행할 프로그램의 구조가 저장되는 영역

static 영역: 전역 변수, 정적 변수가 저장되는 영역

heap 영역: 사용자가 직접 관리하는 영역, 메모리 공간 동적 할당

stack 영역: 지역변수, 매개변수가 저장되는 영역, 컴파일 시 크기 결정


Heap vs Stack
두 영역은 같은 물리 메모리 공간을 공유하는데, 서로의 영역을 누가 침범하느냐에 따라 heap overflow, stack overflow가 발생
스택: 크기 제한
힙: 크기 제한 X


Heap의 영역을 너무 크게 잡으면 생기는 일은?
힙 영역이 너무 크다면, 가비지 콜렉터의 수행시간이 길어져 성능저하로 이어짐


프로세스 vs 쓰레드
프로세스: 자원을 할당받는 작업의 단위
쓰레드: 프로세스의 자원을 실행하는 실행의 단위


Context Switiching(문맥교환이란?)
 현재 수행 중인 프로세스나 스레드의 상태 정보를 저장하고 
다음에 실행할 프로세스나 스레드의 상태 정보로 교체하는 작업을 의미
-프로세스 스케줄링, 시스템 콜 등에 사용
-> 자주 사용 시 오버헤드 발생


프로세스 제어 블록이란? 
프로세스를 관리하기 위한 정보를 포함하는 OS커널의 자료구조


 크롬 브라우저에서 한 탭에 오류가 생기더라도, 다른 탭에 영향을 끼치지 않는다
 그렇다면 각각의 크롬 탭은 프로세스일까? 쓰레드일까?
 한 탭에 오류가 생기더라도 다른 탭에 영향을 끼치지 않는다는 특성에 의해, 크롬 탭은 별개의 프로세스


멀티쓰레드 vs 멀티 프로세스
멀티 쓰레드: 하나의 프로세스를 여러개의 쓰레드로 구성해 자원을 공유하며 작업을 수행
- 한 프로세스 내의 자원을 공유하므로 동기화를 항상 고려

멀티 프로세스: 하나의 프로그램을 여러개의 프로세스로 구성해 프로세스가 병렬적 작업 수행 


동기 vs 비동기
동기는 요청과 결과가 동시에 일어남, 요청시 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야한다


비동기: 요청과 결과가 동시에 일어나지 않음, 그 시간동안 다른 작업이 가능하므로 자원의 효율적 사용 가능


DeadLock:교착상태
두개 이상의 프로세스나 쓰레드가 서로 자원을 기다리면서 무한히 대기하는 상태 
-상호배제
-점유대기
-비선점
-순환대기


선점 vs 비선점

선점 방식: 특정 프로세스가 실행 중이더라도 CPU 할당을 뺏어 다른 프로세스에 부여할 수 있는 방식
-System Call, Time Quantum, Interrupt

비선점 방식: 특정 프로세스가 실행 중이면 끝나기 전까지는 절대로 다른 프로세스에게 CPU를 뺏기지 않는 방식


동시성 vs 병렬성

동시성: 멀티 프로그래밍에서 나온 개념, 주 기억장치에 여러 프로세스를 적재해 context switching을 통해 동시에 실행되는것 처럼 
보이게 하는것(실제로는 동시 X, 번갈아 실행)

병렬성: 멀티 프로세싱에서 나온 개념: 실제로 동시에 여러 프로세스 병렬적으로 실행하는 방식


메모리 종류
CPU에 가까운 순으로 레지스터, 캐시, 주기억장치, 보조기억 장치
-> 접근속도에 따른 차이를 두기 위해 종류 다양


OS가 메모리 관리 해야 하는 이유
-각각의 프로세스는 독립적 메모리 공간을 갖음-> 다른 프로세스의 메모리 공간 침범 불가,
오로지 OS만이 OS메모리 영역과 사용자 메모리영역의 접근에 영향받지 않기에, OS만 관리 가능해서


페이징 vs 세그멘테이션
페이징: 프로세스를 동일한 크기의 페이지로 분리, 메모리는 해당 페이지와 동일한 프레임으로 분리해
메인 메모리에 불연속적으로 저장하는 방식

세그멘테이션: 프로세스를 가변적인 크기의 세그먼트로 분리, 메모리에 적재


단편화: 프로세스들이 차지하는 메모리 사이에 사용하지 못할만큼 작은 공간을 의미
내부 단편화: 고정길이 할당/페이지

외부 단편화: 가변길이 할당/세그먼테이션


가상메모리란?
프로레스 전체가 메모리에 올라오지 않아도 실행 가능
-> 동시에 많은 프로그램 실행 가능, 응답시간 유지하며 CPU 이용율, 처리율 높일 수 있음


요구페이징
프로그램 실행 시작 시에 프로그램 전체를 물리 메모리에 적재하는 대신, 초기에 필요한 것들만 적재하는 전략


메모리가 고갈되면 일어나는 현상
-프로세스를 실행해야 하기 때문에 Swap이 활발
->CPU 이용률이 하락하고, OS는 CPU 이용률이 낮으므로 오히려 프로세스를 추가하게 되는 쓰레싱 현상 발생
쓰레싱:페이지 부재율이 높은 상태


캐시 메모리 사용 이유
:CPU와 메모리 사이의 속도 차이를 완화하기 위해 사용


OSI 7 Layer의 각 계층
7계층 (Application Layer, 응용계층) : 최종 목적지로 응용 프로그램과 연관해 서비스를 수행하는 계층 -HTTP,DNS
6계층 (Presentation Layer, 표현계층) : 데이터 압축 혹은 변환이 이뤄지는 계층, 데이터의 형식을 정의 -JPEG
5계층 (Session Layer, 세션계층) : 데이터가 통신하기 위한 논리적 연결을 담당하는 계층, 세션을 생성해 통신 -API, Socket
4계층 (Transport Layer, 전송계층) : 종단 간 사용자들에게 신뢰성있는 데이터를 전달하는 계층 -TCP,UDP
3계층 (Network Layer, 네트워크계층) : IP를 지정하고 라우터로 경로를 선택해 네트워크를 통해 데이터를 전달하는 계층 -Router
2계층 (Datalink Layer, 데이터링크계층) : 신뢰성 있는 전송을 위해 에러 검출, 흐름제어를 담당하며 데이터의 물리적인 전송이 일어나는 계층 -Ethernet
1계층 (Physical Layer, 물리계층) : 데이터를 전기 신호로 변경하는 계층


전송계층과 데이터 링크계층 모두 신뢰성 관련 기능 제공, 차이는?
전송계층: 논리적 연결
데이터 링크 계층: 물리적 연결


전송계층이 데이터 분실을 확인하는 방법
- 데이터를 패킷단위로 쪼개어 목적지로 전송, 패킷에 각각 번호 부여해 목적지에서 패킷 재조립, 분실여부 확인


전송계층의 흐름제어, 오류제어, 혼잡제어 
흐름제어: 송신측과 수신측 사이의 데이터 처리 속도를 제어하기 위해서 송신측의 데이터 처리 속도를 조절
오류제어:오류제어는, 패킷이 손상되었거나 손실된 경우, 재전송을 통해 오류를 복구할 수 있는 방법으로 재전송 프로토콜
혼잡제어: 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송 속도를 제어


DNS?
Domain Name Server의 약어로, IP주소를 문자로 표현한 주소로 바꾸는 시스템 혹은 서버


http://www.google.com 도메인을 브라우저에 입력했을 때 일어나는 일


1. 주소창에 http://www.google.com 입력
2. 브라우저는 캐싱된 DNS 기록을 통해 해당 도메인 주소에 대응하는 IP주소가 있는지 확인
3. 요청한 URL이 캐시에 없을 경우, ISP의 DNS 서버가 http://www.google.com을 호스팅하는 서버의 IP주소 찾기 위해 DNS Query보내찾음
4. 브라우저는 http://www.google.com 해당 IP주소 획득, 해당서버와 TCP 연결 시도
5. TCP연결 완료시 브라우저가 웹 서버에 HTTP Request 보냄
6. 서버는 해당 Request 처리, Response 생성
7. 브라우저는 해당 Response 읽어 사용자에게 보여줌


TCP Connection 시 3-way handshaking 의 설명
TCP는 신뢰성있는 전송을 위해 1:1로 서로 잘 연결되었음을 확인하는 과정을 거침. 이 과정이 바로 3-way handshaking


TCP vs UDP
TCP: 연결지향, 흐름제어,혼잡제어,오류제어를 통한 신뢰성 보장, 속도 느림
UDP:비연결 지향, Checksum 필드로 최소한의 오류만 보장, 속도 빠름


HTTP의 특징
- 비연결지향 (connectionless) : client가 server에 request를 보내고, 서버가 해당 요청에 맞는 response를 보내면 바로 연결을 끊음
- 상태 비저장 (stateless) : 연결을 끊는 순간 client와 server의 통신은 끝나며, 상태정보를 유지하지 않는 특징


HTTPS는 HTTP의 보단상 문제 해결 위해 나온 프로토콜
HTTP는 TEXT로 자원을 주고 받기 때문에 네트워크 중간을 가로챈다면, 내용이 유출되는 사고가 생김
따라서 SSL, TLS를 이용해 암호화를 거쳐 주고 받음 (응용-전송 계층 사이에 위치)


HTTP Method
GET 조회, 리소스 요청
POST 요청된 데이터를 처리하고 자원을 생성함
PUT 요청된 자원이 없으면 생성, 있으면 새 것으로 전체 갱신
PATCH 자원의 일부분만 수정
DELETE 요청된 자원을 삭제


멱등성 메소드: 특정 메소드를 여러번 요청했는데, 매번 요청 결과가 같은 경우
Get, Put, Delete


REST API와 RESTful 하다는 것

REST는 HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해 자원을 처리하도록 설계된 아키텍처
이러한 REST를 기반으로 만든 API가 REST API
RESTful 하다는 것은, REST 원리를 잘 따르는 시스템


쿠키 vs 세션

쿠키: 라이프 사이클-만료기간 부여,서버 요청이 없어-> 빠름, 클라이언트 로컬에 있어 보안 취약
세션: 라이프 사이클-브라우저 종료시 소멸, 서버 통신이 필요->느림, 서버에서 관리 비교적 안전


JWT Token
JWT는 JSON 포맷을 이용하는 Claim 기반의 웹 토큰이며, 토큰 자체를 정보로 사용하는 Self-Contained 방식으로 정보를 안전하게 전달
헤더(Header).내용(Payload).서명(Signature)로 구성


URI vs URL
URI: 특정 리소스를 식별하는 통합 자원 식별자(Uniform Resource Identifier)를 의미, 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스
URL: 흔히 웹 주소라고도 하며, 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약


DBMS 란?
database management system: 데이터 베이스 관리 시스템, 여러 사용자가 데이터 베이스에 접근해 사용 할 수있도록하는
소프트웨어
->DB를 사용하지 않고, OS에 종속적인 파일 시스템을 활용하면 프로그램의 확장성을 해치기에


스키마
: 구조와 제약 조건에 대해 명세를 기술한 데이터 집합


외부 스키마 : 사용자의 입장에서 데이터베이스의 모습으로 조직의 일부분을 정의한 것
개념 스키마 : 모든 응용 시스템과 사용자들이 필요로하는 데이터를 통합한 조직 전체의 데이터베이스 구조를 논리적으로 정의한 것
내부 스키마 : 전체 데이터베이스의 물리적 저장 형태를 기술하는 것


뷰 란?
뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 테이블에서 유도된, 메모리에는 물리적으로 존재하지 않는 가상테이블


키 란?
검색, 정렬 시 튜플 구분하는 기준이 되는 속성

슈퍼키: 유일성을 만족

후보키: 기본키가 될 수있는 후보가 되는 키, 유일성+최소성 만족

기본키: 후보 키 중에서 선택된 하나의 고유한 식별자, 중복되는 값이나 NULL값 X

대체키: 후보 키 중 기본키 제외한 나머지 

외래키: 다른 테이블의 레코드를 유일하게 식별 할 수 있는 키 


트랜잭션
데이터베이스의 상태를 변화시키는 논리적인 작업 단위
원자성: 트랜잭션은 모두 정상 실행 or 모두 취소
고립성:  두 개 이상의 트랜잭션 발생 시 서로 영향주면 안된다 
일관성: 실행을 성공 했을 시 언제나 일관성있는 상태 유지
영구성: 커밋된 트랜잭션 영구히 반영

-활동, 장애, 철회, 부분완료, 완료


Commit: 트랜잭션이 성공해 트랜잭션 결과를 영구적으로 반영하는 연산
Rollback: 트랜잭션의 실행을 취소했음을 알리는 연산이며, 트랜잭션이 수행한 결과를 원래의 상태로 원상 복구


동시성 제어란?
DBMS는 다수의 사용자를 가정, 다중 트랜잭션의 상호 간섭 작용 중, DB를 보호해야함, 일관성을 파괴하지 않도록 
상호작용을 제어하는 것을 의미


데이터의 무결성: 데이터가 정확하고 일관되게 유지되는 상태
- 개체 무결성: 기본키는 null. 중복 값 불가능
- 참조 무결성: 외래키는 null이거나 참조 테이블의 기본 키 값과 같아야 함


Join
두 개 이상의 테이블이나 데이터베이스를 연결해 데이터를 검색하는 방법
inner join은 서로 연관된 내용만 검색하는 조인 방법
outer join은 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽의 내용을 전부 출력하는 방법


Group By의 역할
 GROUP BY 명령어를 통해 특정 컬럼을 기준으로 연산한 결과를 집계 키로 정의하여 그룹을 짓는 역할


 DELETE, TRUNCATE, DROP의 차이
DELETE는 데이터는 지우지만 테이블 용량은 줄어들지 않고 원하는 데이터만 골라서 지울 수 있습니다. 삭제 후 되돌릴 수 있다.

TRUNCATE는 전체 데이터를 한번에 삭제하는 방식입니다. 테이블 용량이 줄어들고 인덱스 등도 삭제되지만 테이블은 삭제할 수 없고,  삭제 후 되돌릴 수 없다.

DROP은 테이블 자체를 완전히 삭제하는 방식, 삭제 후 되돌릴 수 없다


트리거란?
트리거는 특정 테이블에 반응해 데이터베이스에서 자동으로 동작하도록 작성된 프로그램
-사용자가 직접 호출하지 않고 DB에서 자동적으로 호출


DB 인덱스
Index는 테이블을 처음부터 끝까지 검색하지 않고, 인덱스를 검색해서 해당 자료의 테이블을 접근하는 방법
- 원하는 값 검색은 빠르지만, 새로운 값 추가,삭제,수정은 쿼리문 실행 속도가 느려짐


정규화란?
이상현상이 존재하는 테이블을 분해해 여러 개의 테이블로 분리하는 과정

-삽입 이상: 불필요 데이터 추가해야 삽입이 가능
-갱신 이상: 전체 데이터 중 일부만 변경하여 데이터 불일치 현상
-삭제 이상: 삭제로 인해 필요한 데이터까지 삭제되는 현상

정규화
1 정규화 : 원자값을 갖도록 분해
2 정규화 : 부분 함수 종속성 제거
3 정규화 : 이행종속 제거


역정규화
-읽기 작업이 많이 필요한 DB의 전반적인 성능을 향상시키기 위해 역정규화


Connection Pool이란?
커넥션 풀은, 미리 일정 수의 Connection을 생성해 Pool에 보관해 두는 것


RDB vs NoSQL


RDB: 관계형 데이터 베이스
데이터 구조 보장, 중복 피할 수 있음

NoSQL
스키마가 없거나, 느슨한 스키마로 데이터 간의 관계 없이 자유로운 형태로 데이터 저장
중복을 계속 업데이트 해줘야함


ORM
ORM은 객체와 관계형 데이터베이스 매핑의 줄임말
 데이터 테이블을 서로 매핑하는 것을 의미



Array와  LinkedList가 각각 무엇인지, 어떻게 다른지

Array 순서가 있는 데이터를 저장하기 위한 선형 자료구조

LinkedList는 각 데이터 저장한 노드를 서로 연결하여 만든 선형 자료구조, 가변길이 크기


스택 vs 큐

스택: 선입후출 - 주로 배열을 통해 구현, 브라우저의 '뒤로가기' 기능

큐: 선입선출- 주로 연결리스트 통해 구현, CPU 스케줄링의 Ready Queue

Priority Queue?
선입선출의 큐와 다르게, 우선순위가 높은 원소가 우선적으로 빠져나오게 되는 자료구조


Heap
힙(Heap)은 '완전이진트리'면서, 모든 부모노드와 자식노드 간에 '크거나 같은' 혹은 '작거나 같은'의 관계를 가지고 있는 트리


해시 테이블
해시 테이블은 Key-Value 쌍으로 값을 저장하는 자료구조
해시 충돌:서로 다른 Key에 대해 같은 해시값을 갖는 경우를 해시 충돌

'의문점 공부하기 > 🧾공부하며' 카테고리의 다른 글

🧾스프링  (1) 2023.12.08
🧾리액트 정리  (0) 2023.12.08
면접대비 java  (0) 2023.12.06
🧾 HTTP VS HTTPS  (0) 2023.12.04
🧾면접 대비  (0) 2023.12.02