일단 씻고 나가자

23.04.20 본문

Study/닥치는 대로 주워 담기

23.04.20

일단 씻고 나가자 2023. 4. 21. 06:28

2023. 04. 20 목요일

 

- [DB] WHERE, GROUP BY, HAVING, ORDER BY의 설명?

: WHERE은 각 ROW 별로 조건을 주는 것.

GROUP BY는 같은 값을 가진 행끼리 묶는 것.

HAVINGGROUP BY GROUP 들에게 부여하는 조건.

ORDER BY는 정렬 기준.

https://velog.io/@dntjd7701/SQL-GROUP-BY

 

 

- [DB] 특정 값을 대소문자 구분 없이 검색하는(바꾸는) 두 가지 함수?

: SELECT UPPER/LOWER(컬럼 명)

 

 

- [Spring] fail fast?

: 코드를 짜다 보면 예외 케이스에 대한 분기를 메서드 내부에 적어야 하는데, 이때 성공 케이스에 대한 처리를 앞부분에 하지 않고 가장 뒤로 미루고 실패 케이스들에 대한 분기를 성공 케이스 앞 부분에 적는 것.

 

 

- 프로세스의 구조는? SP? 코드의 진행 과정을 예시로 표현?

: code 코드 / data 변수, 초기화된 데이터 / stack 임시 데이터 (함수 호출, 로컬 변수, 매개 변수) / heap 코드에서 동적으로 만들어지는 데이터 (객체)

 

SP Stack Pointer. 스택의 최상단 포인터. (스택의 가장 위에 있는 데이터의 한 칸 위 주소) 최상단 위치를 알면 현재 어디까지 호출이 되어 있는지 알 수 있음. 레지스터로 구성.

 

1. 코드를 PCSP가 읽어가며, 함수나 지역 변수는 딱히 처리 없이 PC만 늘린다.

2. 전역 변수가 data에 담긴다.

3. 함수가 호출되면 stack에 호출한 함수의 위치(RET == return address)가 담기고, 그 위에 전역 변수가 차례로 담긴다.

4. return을 만나면 스택을 POP하며, 3번에서 수행한 RET까지 스택을 비운다.

5. RET에 쓰여 있는 주소를 PC에 담고, 그 주소부터 코드를 다시 실행한다.

6. 객체는 언제, 얼마나 생성될지 알 수 없으므로 Heap에 담긴다.

 

 

- 컨텍스트 스위칭이란? PCB는 무엇이며 무엇이 저장되는지?

: 시분할 시스템에서 다음 프로세스에게 자원을 넘겨줄 때 현재 진행 상황을 저장하고 넘겨주어야 다음에 다시 자원을 잡았을 때 그 위치부터 실행할 수 있다. PCSP만 저장하여 바꿔주면 된다. 이런 정보들은 프로세스마다 PCB (Process Control Block) 내부에 저장된다. 이렇게 이전에 저장된 정보를 불러와 CPU의 레지스터에 넣고 다른 프로세스를 실행하는 것.

PID 프로세스별 유니크한 ID

register PC, SP

 

 

- O(n log n)의 네 가지 정렬 방법과 설명?

1. 합병 정렬 O(n log n)

배열을 반씩 나눠 길이가 1이 되도록 만들고, 다시 병합할 때 인접한 부분끼리 정렬.

속도는 빠르나, 병합할 때 데이터들을 저장할 공간이 n개만큼 더 필요하다.

 

2. 힙 정렬 O(n log n)

힙 형태로 배열을 정렬. 단 힙의 자료구조에 배열을 넣으면 그만큼 공간이 더 필요하므로 주어진 배열 내에서 정렬.

 

3. 퀵 정렬 O(n^2)

임의의 기준값(pivot)을 기준으로 좌우로 분할하며 정렬하는 방식.

평균 시간이 빠르지만, pivot이 최대 혹은 최솟값일 경우 O(n^2)

pivot을 구하는 방법은 배열의 맨 앞, 맨 뒤, 가운데 값 선택 등 여러 가지가 있지만

worst caseO(n^2)를 피하고자 임의의 세 값 중 중간값을 선택하는 방법도 있다.

1) pivot 기준 큰 값을 왼쪽에서부터 증가하며 찾고, 작은 값을 오른쪽에서부터 찾는다.

-> 두 값의 자리를 교체한다.

2) 두 인덱스가 같아지면 그 자리의 값과 pivot을 교체해주고, 그 자리는 고정한다.

3) 고정된 자리를 기준으로 왼쪽, 오른쪽 나누어 같은 과정을 진행한다.

 

4. 트리 정렬 O(n log n)

이진 탐색 트리(BST)를 만들어 정렬하는 방식.

 

 

- [Effective Java] finalizer?

: 객체 생성 시 @Override 받을 수 있는 public void finalize() 함수.

java 9 버전부턴 deprecated 되었으며, 내용은 객체의 레퍼런스가 끊어졌을 때

GC가 발동하여 해당 메모리를 지울 때 함께 실행되는 내용.

혹시 사용자가 사용 후 레퍼런스를 끊지 않았을 때를 대비한 거름망 같은 역할이며,

실제 FileIn/OutputStream 등의 클래스 내부에서

public void finalize() throws Throwable { if(!this.closed) close(); } 같은 형태로

구현이 되어 있다고 한다.

'Study > 닥치는 대로 주워 담기' 카테고리의 다른 글

23.04.24  (0) 2023.04.25
23.04.21  (0) 2023.04.22
23.04.19  (0) 2023.04.20
23.04.18  (0) 2023.04.19
23.04.17  (1) 2023.04.18