ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [22.03.18] TIL 기술면접 준비하기1
    TIL 2023. 3. 18. 18:14

    시간 복잡도, 공간 복잡도에 대한 설명

    시간 복잡도

    • 특정 알고리즘이 어떤 문제를 해결하는데 걸리는 시간을 의미
    • 결과가 같아도 코드 작성 방법에 따라 걸리는 시간이 달라지고, 이 시간이 적게 걸리는 것이 좋은 코드이다.

    공간 복잡도

    • 작성한 코드가 얼마나 많은 메모리를 차지하는지 분석하는 방법
    • 시간복잡도와 공간복잡도는 반비례적인 경향이 있다.
    • 최근 컴퓨터 성능의 발달로 메모리 공간이 넘쳐나 공간 복잡도 보다는 시간 복잡도를 더 중요시 한다.

    스택, 큐에 대한 설명

    스택

    • 차곡차곡 쌓아올린 형태의 자료구조
    • 같은 구조의 자료를 정해진 방향으로만 쌓을 수 있다.
    • top으로 정한 곳에서만 접근이 가능
    • 나중에 들어온것이 맨 먼저 나가게 되는 후입선출 구조(LIFO, Last In First Out)
    • 웹브라우저 뒤로가기, 실행취소 등을 예로 들 수 있다.

    • 스택과 반대로 한쪽에서는 삭제연산, 한쪽에서는 삽입연산 만을 담당한다.
    • 그래서 선입선출 구조를 가지고 있다.(FIFO, First In First Out)
    • 삽입연산이 이루어지는 곳은 "리어"라고 하며, 여기서의 작업을 "인큐"라고 칭한다.
    • 삭제연산이 이루어 지는 곳은 "프론트"라고 하며, 여기서의 작업을 "디큐"라고 칭한다.
    • 데이터가 입력된 시간 순서대로 처리해야 할 필요가 있는 상황에서 사용한다.

    배열, 링크드리스트를 비교하여 설명

    배열 연결리스트
    정적 자료구조 동적 자료구조
    미리 크기를 정해놓는다. 크기를 정해놓을 필요가 없다.
    연속된 메모리 주소를 할당 받는다. 연속된 메모리 주소를 할당받지 않는다.
    데이터가 index라는 것을 갖게 된다. 노드 안에 데이터가 있고 다음 데이터를 가르키는 주소를 가지고 있다.
    임의 접근이 가능 임의 접근 불가능
    접근과 탐색에 용이(index때문) 데이터 탐색 시 순차적으로 접근해야 한다.
    미리 크기를 정해놓아 수정 불가 데이터 추가,삭제가 자유롭다
    해당 배열 크기 이상의 데이터 저장 불가  

    CORS의 개념과 허용 방법에 대하여

    • 다른 출처간의 리소스 공유, Cross Origin Resource Sharing의 약자
    • 가져오는 리소스들이 안전한지 검사하는 브라우저의 방화벽이라고 생각한다.
    • Origin은 Protolcol과 Host 그리고 Port까지 모두 합친 URL을 의미한다.
    • Access-Control-Allow-Origin 응답 헤더 세팅 서버측 응답에서 접근 권한을 주는 헤더를 추가하여 해결 할 수 있다.
    • cors 모듈을 사용하여 아무 옵션없이 설정하면 모든 Cross-Origin 요청에 대해 응답이라 특정 도메인이나 특정 요청에만 응답하게 옵션을 설정할 수 있다.
    • webpack-dev-server proxy 기능을 이용하여 리액트 개발 환경에서 중간 프록시 서버를 설정, 서버와 같은 도메인으로 요청하여 CORS를 허용하게 하는 방법이 있다.

    사용자 패스워드를 전송하고 보관하는 방법

    • 유저의 패스워드를 받은 클라이언트는 평문으로 서버로 전송합니다.
    • 평문을 받은 서버는 패스워드를 단방향 해시 함수로 암호화하여 보관합니다.
    • 단방향 해시함수는 수학적 연산에 의해 원본 데이터를 완전히 다른 암호화된 데이터(다이제스트)로 변환하는 것을 말합니다.
    • 원본 데이터로는 다이제스트를 구할 수 있지만 다이제스트로는 원본데이터를 구할 수 없어야 합니다.
    • 이것을 단방향이라 합니다. 단방향 해시함수는 브루트포스 공격으로 쉽게 당할 수 있기 때문에 이를 보완하기 위해 입력된 다이제스트를 N번 반복해서 생성하는 것인 key stretching과 원문 패스워드에 임의의 문자열을 추가하여 해싱하는 것인 salting을 이용해 보안의 강도를 높힐 수 있습니다.

    var, let, const에 대한 설명

    var

    • 변수를 선언하는 키워드 없이 선언 및 할당이 가능하다. 
    • 선언인지 재할당인지 구분이 어렵다.
    • 같은 이름으로 재선언이 가능하다.
    • 블록 레벨 스코프 지원이 안되서 동일레벨 스코프를 무시하고 가장 가까운 변수를 가져온다.

    let

    • 재선언 불가
    • 재할당 가능
    • const
    • 재선언, 재할당 불가능

    let+const

    • 가리키는 Object의 값을 변경할 수 있다.
    • 메모리 셀 안의 값을 변경하는 것이 아니라 메모리 셀이 가리키고 있는 특정한 Object 내부를 수정하는 것 이기 때문

    Promise 설명

    • 비동기 함수 호출 또는 비동기 연산이 완료된 이 후에 처리할 함수나 에러를 처리하기 위한 함수를 설정하는 모듈
    • Promise가 없어도 비동기 연산이 가능하지만 콜백지옥이 발생할 수 있고 가독성이 떨어지며 수정이 힘들다.
    • Promise의 3가지 상태 - pending(대기), fulfilled(이행), rejected(실패)
      • pending - fulfilled와 rejected가 안된 초기상태
      • fulfilled - 비동기 연산이 성공적으로 완료된 상태로 결과값 반환
      • rejected - 비동기 연산이 실패한 상태로 에러를 반환
      • fulfilled 혹은 rejected가 발생하면 바로 핸들러가 호출되지 않고
        1. then 메서드에 의해 관련 핸들러들이 콜백 큐로 삽입되고
        2. 그 후 콜스택이 비었을 때 콜백 큐에서 콜스택으로 push되고
        3. 콜스택에 올라간 콜백함수는 나중에 pop되어 실행된다.

    Hoisting 설명

    • 코드가 실행하기 전 변수,함수 선언이 해당 스코프의 최상단으로 끌어올려진 것 같은 현상을 말한다.
    • Hoisting이 발생하는 이유
      • 자바스크립트 엔진은 코드를 실행하기 전 실행 컨텍스트가 생성되는데 이 실행 컨텍스트는 코드를 원활하게 실행될 수 있도록 환경을 만들어주는 역할을 한다.
      • 실행컨텍스트는 생성단계와 실행단계가 있는데 그 중 코드를 읽기 전 생성단계에서 자신의 스코프 내 선언된 변수와 함수들을 미리 스코프 내에 등록시키는 작업이 진행되기에 Hoisting이라는 현상이 발생한다.
    • var랑 함수와는 다르게 let과 const가 호이스팅 된 것 같지 않은 이유는 초기화 단계 이전인 선언단계 까지만 진행된 상태이므로 선언문을 만나기 전 까지 변수를 사용할 수 없기 때문이다.

    async / await 설명

    • 함수 앞에 async를 사용하면 해당 함수는 항상 Promise를 반환합니다.
    • Promise가 아닌 값을 반환하더라도 이행 상태의 Promis(resolved promise)로 값을 감싸 이행된 Promise가 반환되도록 합니다.
    • await는 async 함수 안에서만 동작합니다.
    • await 키워드를 만나면 자바스크립트는 Promise가 처리될 때 까지 기다립니다.
    • Promise가 처리되면 그 결과와 함께 실행이 재개됩니다.
    • Promise가 처리되길 기다리는 동안 엔진이 다른 일(다른 스크립트를 실행하거나 이벤트 처리 등)을 할 수 있기 때문에 CPU리소스가 낭비되지 않습니다.

    'TIL' 카테고리의 다른 글

    [22.03.19] TIL 기술면접 준비하기2  (0) 2023.03.19
    [22.02.17] TIL  (0) 2023.02.17
    [23.02.15] TIL  (0) 2023.02.16
    [23.02.14] TIL  (0) 2023.02.14
    [23.02.06] TIL 최종 프로젝트 시작  (0) 2023.02.07
Designed by Tistory.