면접 내용 정리

몽슈뜨·2023년 5월 4일
0

TIL

목록 보기
63/69
post-thumbnail

1. let, const , var의 특징과 차이점과 어떻게 구현이 되는지

var 재 선언, 재 할당 되며 scope는 전역 범위 혹은 함수 범위로 지정된다. 호이스팅이 된다.
let은 재 할당만 되며 scope는 블록 {} 범위이다. let도 호이스팅이 되지만 undefined로 초기화 되지 않아 선언 이전에 let을 사용하려고 하면 참조 오류가 발생한다.
const는 재할당도, 재선언도 되지 않아 일정한 상수 값으로 사용된다. let처럼 블록 {} 범위 스코프이며 선언과 할당이 동시에 일어나야 한다.

2. 원시타입과 참조 타입

원시값 - number, bigint, string, boolean, null, undefined, symbol로 객체가 아니고 따로 method를 가지지 않는 데이터이다.
원시타입은 선언하면 스택에 저장 식별자를 통해 접근할 수 있고 원시 데이터와 함께 스택에 저장이 된다.
ex) const a= 50 -> a가 50과 함께 스택에 푸쉬됨
ex) let a =50, let b =a, a = 100 : a를 변경해도 b는 영향이 없다. {a:50},{b:50} -> {a:100},{b:50}
참조 타입 - 원시타입을 제외한 나머지
참조 타입은 스택에 식별자와 heap(메모리 주소값)이 저장이 되어 heap에 저장된 값을 참조하게 된다.

3. OOP가 추구하는 방향과 특징 -> 프로그래밍 방식중 하나이다.

프로그램을 서로 관련 있는 '객체(함수와 데이터의 묶음)'라는 기본 단위(class)로 나누고 서로 의사소통할 수 있도록 프로그래밍하는 방식
장점으로는 중복되는 관련 객체는 재사용을 통해 코드의 중복을 줄이고(생산성을 높여준다.) 역활을 확실하게 나누어 가독성을 높일 수 있다(유지 보수 및 확장성이 높다).
1. 캡슐화 : 서로 연관되어 있는 데이터와 함수들을 하나로 묶고 접근 지정자를 통해 제어하는 것으로 외부에서 보여질 필요가 없는 데이터를 숨기면서 외부에는 기능만을 제공하기 위해 사용
2. 추상화 : 데이터의 공통된 속성이나 기능을 묶어 이름을 붙이는 것으로 클래스를 정의하는 것을 추상화한다고 할 수 있다.
3. 상속 : 특정 클래스의 기능을 물려받고, 새로 기능을 추가하는것으로 상위 클래스를 하위 클래스가 기능만을 복사하는 것을 뜻한다.
코드를 재활용하여 생산성이 높아지며 유지보수하기에 좋다.
4. 다향성 : 부모클래스에서 물려받은 가상의 함수를 자식 클래스 내에서 오버라이딩(메서드나 데이터를 수정해서 사용) 되어 사용되는 것

4. this란?

자기참조변수로 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리킨다. this를 통해 자신이 속한 객체와 자신이 생성할 인스턴스의 프로퍼티나 메소드를 참조할 수 있다.
4-1 Constructor
클래스의 인스턴스 객체를 생성하고 초기화하는 특별한 메서드이다.
자바스크립트에서 this는 함수로 호출했는지, 객체의 메서드로 호출 했는지에 따라 달라진다.
this는 기본적으로 window이다 하지만 객체의 메서드로 this를 사용하면 객체를 가리킨다.

5. 인덱스

테이블의 검색 성능의 속도를 높여주기 위한 자료구조이다. 특정 컬럼에 인덱스를 생성하면, 해달 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다. 인덱스가 생성이 되면 조회 쿼리를 실행할 시에 옵티마이저에서 판단하여 생성된 인덱스를 사용한다. 인덱스에 저장되어 있는 데이터의 물리적 주소에서 데이터를 가져오는 동작으로 속도의 향상을 가져온다.
5-1 옵티마이저
가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 엔진이다. DBMS의 두뇌이다.
5-2 카디널리티
5-3 Selectivity
5-4 트레이드 오프 관계

6. 트랜잭션

DB의 상태를 변화 시키기 위해 수행하는 작업 단위
원자성 : DB에 모두 반영이되거나, 전혀 반영이되지 않아야 한다.
일관성 : 작업처리 결과는 항상 일관성이 있어야 한다.
독립성 : 둘 이상의 트랜잭션이 동시에 병행되고 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 있다.
지속성 : 트랜잭션이 성공적으로 완료되면 결과는 영구적으로 반영되어야 한다.
6-1 스케줄
직렬 스케줄은 순서대로, 하나씩 트랜잭션을 실행하는 것으로 하나의 트랜잭션이 완료되면 다른 트랜잭션을 시작하는 방식
직렬화 스케줄은 트랜잭션들이 동시에 자료 접근 연산들을 교차하며 실행시키면서도 결과가 직렬 스케줄과 동일한 스케줄이다.
-> 병행 처리

7. DI -> OOP SOLID 원칙을 지키기 위해서

OOP에서는 객체가 의사소통을 하게되는데 의사소통을 하기 위해서는 객체간의 의존성이 생긴다는 말이다. 의존성은 'A가 B를 의존한다는 B가 변하면 A도 영향을 받는다'는 뜻이다. 이는 의존 대상의 로직이 변경되면 의존하는 모든 클래스가 변경되어야 한다는 뜻이다. 이를 해결 하기 위해서는 의존을 줄여야 한다 즉 A클래스 내부에서 B클래스 인스턴스를 생성하지 않고 외부에서 인스턴스를 주입해줘야 하는데 이를 DI 의존성 주입이라고 부른다. 3가지 방법이 제안되는데 1. Field 주입, 2. Setter 주입, 3. Constructor 주입이 있고 많은 디자인 패턴들이 3.Constructor 주입을 권장하고 있다. 1,2는 의존성 없이 생성 할 수 있어서 에러가 발생할 수 있다.
Nest에서 DI하는 방법은 Constructor에 현재 프로바이더에 등록되어있는것을 넣는 것으로 적용이된다. 이것은 Ioc 덕분에 가능
요약 : 각 클래스를 관리 하려면 기존의 인스턴스 정보를 주입은 해줘야된다 안하면 몰라서 -> Ioc 프로바이더에 DI를 하는 것으로 다른 파일에서 사용이 가능

8. Ioc

그러면 Ioc는 무엇일까 프레임워크가 의존의 제어권을 가져가는 것을 말한다. 즉 관리해주는 권한의 주체를 프레임워크에 넘기는 것이다. Nest에서는 프로바이더가이 역활을 해준다.

9. NoSQL vs RDB

SQL은 스키마가 고정적이고, 데이터 무결성이 필요할 때, 데이터 수정이 자주 필요한 경우
NoSQL은 스키마가 불규칙적이고, 데이터가 중복되어도 상관없고, 읽기와 쓰기가 중요한 경우

10. 자료구조 큐,스택

11. 이벤트루프가 뭔가요? - 메인스레드(싱글스레드)가 자바스크립트를 동작시키는데 이것을 관리해주는 관리자

자바스크립트는 싱글 스레드 프로그래밍 언어이다. 이로인해 Call Stack을 하나만 가지게 되어 비동기동작을 실행할 수 없습니다. 하지만 Node나 브라우저에서 비동기 동작을 하기 위해서 만든것이 이벤트 루프 입니다. libuv와 web API를 통해 싱글스레드 방식으로 쌓인 콜스택에서 비동기나 블로킹 처리가 필요한 동작들을 이벤트 루프를 통해 스레드 풀이 처리를 하고 처리가 완료된 동작들은 Callback Queue(FIFO)에 저장이 됩니다. 이때 어떤 순서든 Promise가 가장 먼저 나가게 됩니다. 콜스택이 전부 실행되면 Callback Queue에 있는 것들을 콜스택에 넣어서 실행합니다.

12. HTTPS의 특징

13. www.google.com을 쳤을때 생기는 일?

14. REST API가 뭔가요

uri(자원)와http method로 개발자가 소통하기 쉽게 표현한 api
→ http method 종류 → get, post 차이 → 멱등성, 요청 방식 → get에서 body를 넣어 요청하면 → 왠만하면 무시된다.(프레임 워크에서 무시)

15. 정규화

16. TCP와 UDP의 차이

둘다 전송계층에서 사용되는 프로토콜이다 -> IP에 의해 전달되는 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당하는 계층
TCP와 UDP - 모두 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP 프로토콜을 기반으로 구현됬다.
TCP

17. 제네릭

클래스 또는 함수에서 사용할 타입(Type)을, 그 클래스나 함수를 사용할 때 결정하는 프로그래밍 기법을 말한다. -> 타입을 함수의 파라미터처럼 사용하는 것
사용이유 : 한가지 타입보다 여러 가지 타입에서 동작해야 할때, 재사용성이 높은 함수와 클래스를 생성할 수 있다.
제네릭은 자바의 타입 안정성을 맡고 있습니다. 컴파일 과정에서 타입체크를 해주는 기능으로 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줍니다.

18. Promise을 왜 쓰냐?, 어떻게 사용하냐?

자바스크립트에서 비동기 처리에 사용되는 객체로 서버에서 받아온 데이터를 프론트에 보낼때 주로 사용합니다. 데이터가 받아오기 전에 마치 데이터를 다 받아온 것 마냥 화면에 데이터를 표시하려고 하면 오류가 발생하거나 빈 화면이 뜨는 문제를 해결하기 위한 방법으로 사용합니다. pending, fulfilled, rejected의 상태가 존재한다.

profile
개발자되면 맥북사줄께

0개의 댓글