ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [면접코칭] 기술면접 필수대비 질문
    면접대비 2023. 11. 15. 11:02

    알고리즘

    시간복잡도 공간복잡도

    시간복잡도는 어떠한 알고리즘을 풀기 위해서 걸리는 시간을 나타낸 것으로 여기서 말하는 시간이란 우리가 사용하는 time이 아닌 종료까지 몇번을 반복했는지에 대한 횟수라고 생각하면 좋을 것 같다. 공간복잡도는 차지하는 메모리양을 나타낸 것으로 각각 BigO표기법으로 나타내서 표현하는 것을 자주 볼 수 있다.

     

    이분탐색

    이분탐색이란 정렬된 배열에서 사용할 수 있는 탐색방법으로써 쉽게말해 매 탐색마다 반으로 쪼갠다고 생각을 하면된다 그렇기에 시간복잡도는 상대적으로 낮아 O(log N)만큼의 시간복잡도를 가진다 


    자료구조

    스택과 큐

     - 스택은 선입후출의 구조를 가지고 있고 큐는 선입선출의 구조를 가지고 있다. 예를 들면 설거지를 하기 위해 쌓아놓은 접시는 맨 위에서 부터 세척이 되므로 stack구조이고 가장 먼저 입력한 인쇄물부터 순서대로 나오는 프린트의 경우 큐가 되겠다.

     

    배열과 링크드리스트

     - 먼저 배열은 index와 value의 1대1구조를 이루는 선형자료구조로써 탐색에서 많이 쓰이는 자료구조이지만 삭제와 삽입과정에서 배열의 길이와 정비례적인 O(n)구조를 가진다 이러한 삽입 제거과정에서의 문제점을 해결하기 위해 링크드리스트를 만들게 되었고 링크드리스트는 쉽게말해 꼬리부분에 다음에 올 value가 무엇인지 표시해서 삭제와 제거시에 shift로 인해 생기는 구조를 제외하였지만 애초에 value를 탐색한는 과정을 포함하면 O(n)의 구조를 벗어나지 못한 점이 있어 잘 활용되지 않는다. 하지만 tree구조의 기틀이 된 구조가 링크드리스트가 되겠다.


    네트워크

    https 의 원리

     - 데이터전송의 기본 프로토콜인 http의 보안버전으로써 SSL/STL 인증서를 이용해서 데이터 송수신 간의 보안서을 올린 프로토콜입니다. 먼저 최종적으로는 클라이언트와 서버가 같은 세션키를 공유함으로써 서로를 식별하는 형태가 되고 이 세션키를 주고 받기 위해서 https 사이트에 유저가 접속을 했을 때 클라이언트가 서버에 인증서 요청을 하고 서버가 응답을 하게 되면 가지고 있는 퍼블릭키를 이용해서 세션키를 암호화해서 서버에 전달하고 서버에서는 소유하고 있는 시크릿키를 사용해서 세션키를 해독해서 보유하게 되면서 같은 세션키를 소유하게 되겠습니다

     

     

    TCP 3way handshake

    - TPC는 연결형서비스라는 특징을 가지고 있는데 이로써 신뢰성을 높여 데이터를 좀 더 안전하고 동기적으로 송수신할 수 있습니다. 이 연결형 서비스를 이루기 위해 port 확인을 위해 실행되는 과정이 3way handshake라고 할 수 있겠습니다. 먼저 클라이언트에서 서버에 접속을 요청하는 SYN패킷을 보내고 서버에서는 요청 수락한다는 ACK와 SYN이 설정된 패킷을 보내고 이 응답을 받은 클라이언트에서 다시 ACK를 서버로 보내면서 연결이 성립이 되는 구조입니다. 이 3way handshake 과정이 속도가 느려지는 원인이 되기에 신속성은 UDP가 더 좋습니다.

     

    CORS란 무엇이고 구현방법

    - cross-origin-resourse-sharing의 약자로 내가 실행중인 애플리케이션이 다른 출처의 자원에 접근 할 수 있도록 권한을 부여하도록 브라우저에 알려주는 체제로써 가장 쉽게 이해하자면 서버도메인과 클라이언트의 도메인이 다를 때 클라이언트에서 서버의 데이터를 불러오기 위해서는 CORS를 구현하지 않으면 도메인이 달라서 접근할 수가 없다.

    구현방법으로써는 먼저 클라이언트에서 올바르게 서버에서 설정해 준 api를 확인했는지 점검할 필요가 있고 서버에서는 Access-Controll-Allow-Origin설정이 올바르게 되었는지 확인을 해야한다.

    cookie를 사용했을 경우에는 요청 header에 withCredential 설정을 따로 해줘야한다.

     

    TCP와 UDP

     - 데이터 교환을 할 수 있도록 하는 메시지형식에 대한 규칙(프로토콜)

    TCP는 IP규칙만으로는 불안정하던 단점을 보완하여 패킷 전송을 제어하여 신뢰성을 보증한 프로토콜로써

    연결형 서비스라는 특징과 패킷의 교환을 가상 회선을 통해 하며 전송순서를 보장하기에 신뢰성이 높다 그러나 3hand shake로 인해 전송속도가 느리다는 단점이 있고 그에 따라 고용량 데이터(실시간 영상 스트리밍)과 같은 경우 UDP를 이용하게 되었다.  UDP의 경우 비연결형 서비스이며 데이터그램 방식의 패킷교환방식으로 인해 경로를 신경쓰지 않아 전송속도가 빠르지만 신뢰성이 낮고 전송순서보장을 하지 않는다는 특징이 있다.

    하지만 UDP가 신뢰성이 없는 것이 아니라 탑재를 안했을 뿐 커스터마이징이 가능하며 http3에서도 UDP를 기반으로 하기에 중요성이 더욱 높아지고 있다. 그렇게 탄생한 것이 QUIC 프로토콜이며 TCP + TLS + HTTP 기능을 모두 구현하는 프로토콜이다 


    기타

    Base64 인코딩

     - Binary data를 text로 바꾸기 위해서 사용되는 인코딩방법으로 기본원리는 문자열 -> 아스키코드 -> 2진수 -> 6비트로 쪼갬 -> base64인코딩 순서를 통해서 이루어진다. 하지만 실제로 base64인코딩을 통해 만들어진 데이터는 양도 증가하고 별도의 CPU연산까지 필요하다 그럼에도 사용되는 이유는 아스키코드로 전달하게 7비트로 나누게 되는데 이 1비트를 처리하는 방식이 시스템 별로 달라서 데이터가 안전하게 전달되지 않기 때문이다 


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

    - 사용자의 패스워드를 클라이언트에서 입력받으면 https를 통하여 안전하게 서버에 전달하고 서버에서는 이를 해시함수를 통해서 단방향으로 암호화하여 DB에 저장한다. 해시함수는 복호화가 불가능하지만 같은 값을 넣었을 때 같은 값을 출력하기에 보안적으로 안전성을 추가하기 위해 솔트나 키스트레칭을 사용해아한다

     

    동기와 비동기

    - 동기는 작업이 순차적으로 실행되며 비동기는 작업이 병렬적으로 실행이 된다. 그렇기에 비동기는 여러명의 직원이 커피를 만드는 일이라면 동기는 한명의 직원이 주문받은 순서대로 커피를 만드는 작업이다.

     

    프로세스와 스레드

    - 프로세스는 스레드가 생기기 전까지 사용되던 프로그램의 가장 작은단위였지만 스위칭시에 큰 부하와 프로세스끼리의 데이터 공유가 어려운 점이 있어 스레드가 생겨나 되었음 스레드는 데이터를 공유하는 heap과 개인공간인 task를 가지고 있어 데이터 공유가 쉬워졌고 프로세스는 여러개의 스레드를 가짐으로써 데이터 쉬위칭을 할 때의 부하도 줄일 수 있게 되었다.   

     

    동시성과 병렬성

    - 동시성은 주로 단일 프로세서 환경에서 사용되며 작업이 동시에 실행되는 것처럼 보이지만 실제로 작업이 번갈아가면서 진행되는 것이지만 병렬성은 멀티 프로세서 환경에서 실행되며 작업이 실제로 동시에 실행된다.

     

     

    댓글

Designed by Tistory.