본문 바로가기

verdantjuly/Today I Learned

TIL 20231023

728x90

이번 주 목표

2차 면접 준비

응답하라 추억시대 - 썸네일 저장/캐싱

미륵관심법 - devices, notifications 코드 수정, CI/CD postgreSQL RDS 문제 해결

오늘 목표

오전 : 2차 면접 준비

오후 : 응답하라 추억시대 - 썸네일 저장/캐싱

오늘 한 것

1. 자료구조 

1. 단순구조 

텍스트 자료 : ASCII (7비트, 128개), 유니코드 (영어 숫자 1byte, 기타 4byte)

숫자 자료 : 부호 없는 정수, 부호 있는 정수, 실수(부동 소수점 표현 방식)

 

2. 선형구조 

* 배열 : 순서가 있다. 연속된 공간을 미리 정해서 사용해야 한다. n번째 데이터에 접근하기 위해 덧셈과 곱셈만 있으면 된다

* 리스트 : 크기를 지정하거나 변경할 필요가 없다. 데이터의 순서를 유지할 수 없다. 

* 벡터 : 배열과 비슷하나 일정 용량 이상 찼을 때 더 큰 새로운 벡터를 만들 수 있다.

 

배열 vs 리스트

데이터의 추가 삭제가 많은 경우 > 리스트

데이터를 읽고 쓰는 게 많은 경우 > 배열

 

* : FIFO 먼저 들어간 데이터가 먼저 나온다

* 스택 : LIFO 나중에 들어간 데이터가 먼저나온다

 

* : 더블엔디드 큐, 양쪽으로 넣고 뺄 수 있는 큐

양쪽으로 넣고 뺄 수 있는 스택 또는 한 쪽을 큐로 써도 된다.

중간의 데이터를 건드릴 수 없고 양 끝단만 건드릴 수 있다.

 

3. 비선형 구조

* Hash Table (맵)

key: value

key를 통해 바로 value를 받을 수 있어 속도가 획기적으로 빠르다. 

 

* Set 

데이터를 비순차적으로 저장할 수 있는 순열 자료구조

동일한 값을 여러번 삽입 불가능하다

수정 가능하다

 

2. 객체 지향 프로그래밍

객체 지향 프로그래밍이란  필요한 데이터를 추상화 시켜 객체로 만들고 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 기법입니다. 특징으로는 추상화, 상속, 다형성, 캡슐화가 있습니다.

 

- 추상화 : 객체의 공통적인 속성과 기능을 추출하여 정의하는 것.

- 상속  : 상위 클래스의 기능을 하위클래스에서 사용하거나 오버라이딩을 통해 재정의 하는 것.

- 다형성 : 상위 클래스의 참조변수로 하위 클래스의 객체를 참조할 수 있게 하는 것.

- 캡슐화 : 데이터를 외부로부터 보호하는 것.

 

3. Node.js 코드 작동 원리

function run(){ console.log("3초후 실행") }
console.log("시작")
setTimeout(run,3000)
console.log("끝")

1. call stack 에 annonymous, setTimeout() 순으로 들어감

2. setTimeout이 실행 됨. 타이머 3초가 백그라운드로 들어감

3. 태스크 큐로 run을 3초 뒤에 run을 보냄

4. setTimeout 호출 스택에서 제거 됨.

5. 전역 컨텍스트 annonymous가 호출 스택에서 제거 됨.

 

* 스택 : LIFO 나중에 들어간 데이터가 먼저 나옵니다.

* 큐 : FIFO 먼저 들어간 데이터가 먼저 나옵니다.

 

* 콜 스택 : 실행 컨텍스트를 저장하는 스택 자료 구조

* 백그라운드 : setTimeout 같은 타이머나 이벤트 리스너들이 대기하는 곳입니다.여러 작업이 동시에 실행될 수 있습니다.

* 태스크 큐 : 콜백이 줄지어 서 있음. 보통 완료된 순서로 줄을 서 있지만 특정한 경우 순서가 바뀜.

* 실행 컨텍스트 : 실행할 코드에 제공할 환경 정보들을 모아놓은 객체

* annonymous : 전역 콘텍스트 global context

 

4. having 절

GROUP BY를 통해 묶인 레코드 그룹에 대해 조건을 거는 역활을 합니다.

SELECT [컬럼명] FROM [테이블명] GROUP BY [컬럼명] HAVING [조건절]

 SELECT 취미, AVG(나이) AS 평균나이 FROM dbo.취미 GROUP BY 취미 HAVING AVG(나이) = 16

 

5. 호이스팅

인터프리터가 코드를 실행하기 전에 함수, 변수, 클래스를 해당 범위의 맨 위로 이동시키는 과정

 

6. 인덱스

데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조

 

인덱스를 모든 컬럼에 넣으면 어떻게 될까?

데이터베이스에 레코드가 삽입, 삭제될 때마다 인덱스가 변경되어야 합니다.

데이터의 삽입, 삭제 속도가 느려집니다.

 

NoSQL RDBMS 각각 어떤 물리 저장소를 사용하는지

RDBMS 는 주로 디스크 기반의 저장소를 사용합니다.

반면에 NoSQL 데이터베이스는 JSON XML key-value store등 다양한 유형의 물리 저장소를 사용할 수 있습니다.

 

 

7. 프로세스와 쓰레드, 둘의 차이

프로세스는 독립적인 프로그램의 인스턴스입니다.

쓰레드는 프로세스 내에서 실행되는 독립적인 실행 흐름입니다.

 

한 프로세스의 오류가 다른 프로세스에 영향을 미치지 않습니다.

자신만의 공간과 자원을 할당받아 사용합니다.

 

쓰레드는 같은 프로세스에서 실행되며,

쓰레드 간의 통신 비교적 간단하고 빠릅니다.

 

8. 소켓이란?

네트워크를 경유하는 프로세스 간 통신의 종착점이다.

 

9. 비동기랑 동기

동기는 말 그대로 동시에 일어난다는 뜻입니다. 요청과 결과가 동시에 일어납니다.

비동기는 동시에 일어나지 않는다를 의미합니다. 요청과 결과가 동시에 일어나지 않습니다.

그 대기 시간동안 또 다른 요청에 대해 처리 가능한 방식입니다.


KPT

Keep

뭐라도 하는 것

 

Problem

불안하면 열심히 하지 못하는 것

 

Try

최대한 긴장하지 않기

 

소감

파이팅

 

 

 

 

'verdantjuly > Today I Learned' 카테고리의 다른 글

TIL 20231030  (0) 2023.10.30
TIL 20231026  (0) 2023.10.26
TIL 20231022  (0) 2023.10.23
TIL 20231021  (0) 2023.10.21
TIL 20231020  (2) 2023.10.20