1. 1바이트는 몇 비트인가?
과거에는 1바이트는 7~9비트 등 다양했으나, 현재는 8비트로 표준화 되어있다.
컴퓨터가 미국에 특화되어 개발되었다. 그리고 미국권 문자를 표현하는 문자 인코딩은 ASCII인데, 미국에서 쓰이는 문자는 7비트로 충분했었기 때문에 초기에는 1바이트가 7비트 였던 적도 있었다.
그러나 데이터 송수신의 오류를 검출하기 위한 패리티 비트 1비트가 추가되면서 8비트가 되어졌다. (유럽권 문자를 고려해서 8비트로 된 것 같다는 이야기도 있음)
1-1) ASCII란?
ASCII는 미국권 문자를 표현하는 문자 인코딩이다.
통신을 위한 기호, 특수기호, 숫자, 알파벳 대소문자를 표현할 수 있다.
2. 1픽셀은 몇 바이트인가?
채널이 몇개냐에 따라서.......
컬러 이미지의 경우 3바이트이다. 색은 RGB로 구성되는데 red 256비트, green 256비트, blue 256비트라 총 3바이트이다.
흑백 이미지의 경우 1바이트로 표현이 가능하다.
#ffffff : 하양색
#000000: 검정색
#333333: 회색
#ff3333: 다홍색
3. 2^10은?
1024
4. 스택 vs 큐
스택은 top을 통해서만 삽입 삭제가 이루어지는 Last In First Out(LIFO) 방식이다.
큐는 삽입 삭제가 다른 방향에서 이루어지는 First In First Out (FIFO) 방식이다.
스택은 모바일 앱에서 뒤로 가기와 같은 기능을 구현할 때 사용되어지는 자료구조이다.
큐는 은행 업무에서 가장 먼저 온 사람을 가장 먼저 보내는 형태로 사용되어지는 자료구조이다.
5. Binary tree란 뭐고 시간복잡도는 어떻게 되는가?
이진 트리란 모든 노드들이 둘 이하의 자식을 가진 트리를 뜻한다.
이진 트리 탐색의 시간복잡도는 O(logN)
6. DNS의 역할은 무엇인가?
인터넷에서는 컴퓨터를 식별할 때 IP 주소를 사용한다.
그러나 IP주소로는 무엇에 사용되어지는 지를 알 수 없기 때문에 인터넷에서는 IP주소에 도메인을 붙이게 된다.
이러한 IP주소와 도메인의 이름을 교환하는 장치가 DNS이다.
DNS는 트리 구조이며,
DNS 서버는 캐시, 컨텐츠 서버로 나뉘게 된다.
7. HTTPS와 HTTP의 차이
HTTPS는 SSL 인증서를 사용하는 HTTP이다.
SSL 인증서는 일반 HTTP 요청 및 응답을 암호화 한다.
따라서 HTTPS는 HTTP보다 더 안전한 보안용 프로토콜이라고 할 수 있다.
HTTP와 HTTPS의 유일한 차이점은 보안 계층에 있는데, 이를 TLS 프로토콜이라고 한다.
8. 스마트폰 카메라 해상도
아이폰 14프로의 경우 1200만 화소이며, 설정 시 4800만까지 가능한 것으로 알고 있습니다.
4800만일 경우 40~80 메가 바이트라는 용량이 소요됩니다.
-> 근데 실제 사진에서는 2~10메가 바이트 정도 되는 것 같음
9. 사진에 JPG를 쓰는 이유
PNG 파일은 비손실압축 방식이라 원본이 훼손 되지 않는다.
반면 JPG 파일은 손실압축으로 원본 자체가 훼손이 됩니다.
JPEG 알고리즘은 사람의 눈에 거슬리지 않을 정도로 원본을 훼손해 압축 효과를 극대화하는 알고리즘.
JPEG 알고리즘에는 DCT를 적용한 후 데이터를 줄이기 위해 양자화를 한다.
양자화는 자연스러운 색상을 단순화 하는 역할을 한다. 양자화를 하면 색의 갯수가 줄어들게 되고,
이때 데이터의 손실이 발생하는 것이다.
JPG 포켓을 사용하면 약간의 손실을 감수하고 작은 크기로 사진을 저장할 수 있기 때문이다.
11. a href는 뭔가요?
HTML에서 다른 웹 사이트로 링크를 하는 기능을 가지고 있는 명령어
12. 서버 통신에서 200, 400, 500 오류 차이
200은 성공을 뜻하고,
400은 클라이언트 상의 오류 즉 요청 실패를 의미,
500은 서버 내부의 오류를 뜻함.
13. call by reference란?
참조에 의한 전달을 의미.
데이터 메모리상의 주소값을 함수의 인자로 전달 -> 원본의 값이 변하게 됨
13-1) call by value
값에 의한 전달을 의미.
원본의 값을 복사해서 함수의 인자로 전달.
따라서 원본의 값은 변하지 않고 복사본의 값이 변하게 됨.
14. 이벤트 리스너란?
이벤트 리스너란 이벤트가 발생했을 때 그 처리를 담당하는 함수를 가르킵니다.
가령 iOS에서는 클릭, 화면이 나타나거나 사라질때 발생하는 처리를 담당하는 함수를 가르킵니다.
15. OOP란?
객체지향프로그램이란 뜻으로 보다 유연하고 용이하게 프로그래밍함으로써 유지보수에 장점을 가지고 있다.
또한 4가지의 특징을 가지고 있는데 추상화, 캡슐화, 다형성, 상속 -> 추캡다상
1) 추상화
현실세계의 사물을 객체로 보고 필요한 공통특성만 다루어 현실의 복잡성을 제거하고 목적에 집중할 수 있도록 함.
2) 캡슐화
하나의 객체에 대해 그 객체가 특정한 목적을 위해 변수나 메소드를 하나로 묶는 것을 의미
정보의 은닉화에 목적이 있다.
3) 다형성
어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있음을 의미.
메서드 오버라이딩과 메서도 오버로딩이 있다.
4) 상속
상속은 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 것을 의미.
하위 클래스들은 상위 클래스의 프로퍼티와 메소드를 자유롭게 사용할 수 있어서 코드의 중복성을 제거.
상속 -> is-a
포함 -> has-a
15-1) 오버라이딩 vs 오버로딩
오버로딩은 이름만 같고 기존에 없던 새로운 메서드를 만드는 것이고,
오버라이딩은 상속 받은 메서드의 내용만 변경하는 것을 의미.
16. SOLID 구성 5원칙
17. 애자일, 스크럼 이런거 정리
18. non-blocking call이란?
19. 버젼 관리에서 commit의 의미
버젼 관리 시스템에서 커밋은 저장소에 소소 코드에 최신 변경사항을 추가하는 행위를 뜻합니다
20. try catch는 무슨 뜻인가
try - catch 구문은 예외를 처리하기 위한 구문입니다.
try 문에서 예외가 발생할 경우 catch로 빠져서 그 안의 실행문을 실행하게 됩니다.
20-1) try catch 사용 예제 -> 서버상의 오류 그거
21. 브레이크 포인트란 무엇인가?
브레이크 포인트는 소프트웨어 개발에서 프로그램을 의도적으로 잠시 또는 아예 멈추게 하는 장소를 가르킵니다.
이는 디버깅 목적으로 넣는 것입니다.
22. 패스워드는 서버에 어떻게 보관되는가?
크게 두가지가 있다.
첫번째는 단순 plain text로 저장하는 방법.
두번째는 암호화된 text로 저장하는 방법이다.
단순히 plain text로 저장하는 것은 매우 위험한 방법이다.
DB가 노출될 경우 사용자의 모든 계정의 비밀번호가 노출되는 것이기 때문이다.
따라서 보통의 경우 패스워드를 암호화하여 저장한다.
이때 주로 단방향 해시함수를 이용해, 패스워드를 암호화 한다.
단방향 해시함수란, 말 그대로 해시함수를 암호화는 가능하지만, 반대로 해독이 불가능한 해시함수를 의미.
이러한 단방향 해시함수의 단점은 단방향 해시함수로 암호화한 문자열이 항상 같은 다이제스트를 뱉는다면,
공격자가 전처리된 다이제스트를 많이 확보하면 이를 비교해서 패스워드를 찾을 수도 있음.
레인보우 테이블을 이용해 레인보우 공격이 있을 수도 잇음.
이러한 단방향 해시함수를 보완하기 위해 솔팅이라는 것이 존재
솔트는 단방향 해시함수를 이용해 다이제스트를 생성할 때 추가되는 바이트 단위의 임의의 문자열이다.
23. HDD, SSD, DRAM 각각의 성능은?
속도 : DRAM >> SSD >> HDD
23-1) DRAM이란?
dynamic random access memory는 RAM의 한 종류로 저장된 데이터가 시간과 전원의 끊김에 따라
소멸되는 특징을 갖고 있다.
메인 메모리에 사용된다.
23-4) SRAM이란
전원이 공급되는 한 기억된 data는 지워지지 않는다
dram보다 빠르고 비싸다
캐시 메모리에 사용된다.
23-2) SSD란?
solid state drives는 NAND 기반 플래시 메모리를 사용하여 파일을 저장하는 비휘발성 저장 장치.
HDD와 같은 기능을 수행하지만 데이터를 저장하기 위해 HDD와 같은 디스크와 헤드를 사용하지 않음.
대신 전원이 없는 경우에도 데이터를 유지할 수 있는 상호연결된 플래시 메모리 칩을 사용.(이것이 주된차이)
23-3) HDD란?
플래터라고 하는 디스크를 물리전으로 회전시켜 헤드가 이를 방문하며 데이터를 읽거나 저장.
23-1) ssd가 hdd보다 빠른 이유
ssd는 컨트롤러에서 정보를 바로바로 빼주는 반면 hhd는
24. 캐시가 무엇인가
cache란 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소를 가르킨다.
캐시는 저장 공간이 작고 비용이 비싼 대신에 빠른 성능을 제공한다.
계층 구조의 순서는 register >> L1 cache >> L2 cache >> L3 cache >> Main memory >> ssd/hdd
24-1) 메모리는 주기억장치와 보조 기억장치로 분류됨.
레지스터와 캐시가 주기억장치에 해당.
ssd/hdd 가 보조 기억장치에 해당.
25. 가상 메모리는 무엇인가?
가상 메모리는 메모리가 실제 메모리보다 많아 보이게 하는 기술이다.
어떤 프로세스가 실행될 때 메모리에 해당 프로세스 전체가 올라가지 않더라도 실행이 가능하다는 점에 착안되어 고안되었다.
가상 메모리를 구현하기 위해서는 컴퓨터가 특수 메모리 관리 하드웨어를 갖추고 있어야함
->MMU(Memory Management Unit)이 있어야 함.
25-1) MMU란?
가상 주소를 물리 주소로 변환하고, 메모리를 보호하는 기능을 수행함.
MMU는 RAM을 페이지로 나누어 각 페이지를 하나의 독립된 항목으로 처리함.
25-2) 가상 메모리가 디스크를 사용하지 않아도 유용한 이유
1) 메모리에 확장성을 부여하기 때문이다.
물리적 메모리는 한정적이지만, 가상 메모리는 그보다 큰 공간으로 구성이 가능하다.
2) 모든 프로그램에 동일한 메모리 공간을 부여함으로써,
물리적 메모리가 아닌 OS가 제공하는 메모리 공간만 신경쓰면 된다.
3) 메모리 할당과 관리에 효율적이다.
물리적으로 연속되지 않은 메모리라도 가상으로 연속적인 메모리 공간으로 활용이 가능하다.
4) 메모리 보호기능을 제공한다.
26. 배열과 링크드 리스트의 차이
1) 배열
배열은 정적 자료구조라고 불린다.
인덱스가 존재해서 해당 데이터에 대한 접근과 탐색이 빠르다는 장점
크기를 미리 정해놓았기 때문에 수정하는 것이 불가능하고, 배열 크기 이상의 데이터를 저장할 수 없는 단점.
2)링크드 리스트
링크드 리스트는 동적 자료구조라고 불린다.
노드에 데이터와 다음 노드를 가르키는 주소가 들어가있다.
크기를 미리 정할 필요가 없고, 삽입과 삭제가 빠르다.
데이터 탐색 시 순차적으로 접근해야 된다는 단점이 존재.
27. 프로그램과 프로세스와 스레드의 차이점
프로그램은 어떤 작업을 하기 위해 해야할 일들을 순서대로 나열한 정적인 상태의 파일을 의미
프로세스는 운영체제가 자원을 할당해준 "실행중인 프로그램"을 의미.
스레드는 프로세스가 할당 받은 자원을 이용하는 실행 단위를 의미.
27-1) 멀티 프로세스 정의 및 장점
- 여러 개의 프로세스가 서로 협력적으로 일을 처리하는 것
- 여러 개의 프로세스가 작업을 병렬처리 하는 것
- 각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 때 사용
장점
- 독립된 구조이기 때문에 안전성이 높다
단점
- 멀티 스레드보다 많은 메모리 공간과 시간을 차지한다.
27-2) 멀티 스레드 정의 및 장점
- 하나의 작업을 위해 프로세스에서 여러 스레드를 생성해 여러 CPU코어를 사용하기 위한 작업
장점
- 시스템 자원 소모가 감소하여 자원의 효율성이 증대
단점
- 메모리 영역을 공유하기에 동기화 문제가 발생함으로 이에 대해 동기화 처리를 해줘야함
- 동기화 처리를 하기 위해 과도한 Lock의 사용으로 병목현상이 발생할 수 있음
- 구현이 멀티 프로세스보다 어려움
27-3) 파일을 읽어올 때 멀티 프로세스와 멀티 스레드 중 뭐가 더 빠른가
멀티 스레드가 더 빠르다.
메모리 영역을 공유함으로써 메모리가 절약되고 속도가 빠르다.
28. 스스로 진행한 프로젝트 중 기억에 남는게 있다면 설명해달라
29. 웹 브라우저 URL에 www.naver.com을 치고 나서 네이버 첫페이지가 표시되기까지 일어나는 일을 본인이 알고 있는 대로 최대한 상세하게 설명해보라. 10분동안 해도 좋다.
우선 크게 3단계로 구분할 수 있습니다.
첫번째로 입력한 텍스트의 정보를 확인합니다.
두번째로 네트워크를 호출합니다.
세번째로 렌더링 작업을 진행합니다.
step1. 주소창에 입력한 텍스트 정보 확인
대부분의 인터넷 브라우저는 자사의 주소창을 검색창과 동일하게 사용하고 있다.
브라우저는 사용자가 주소창에 어떤 텍스트를 입력했을 때,
브라우저 엔진의 UI 스레드를 활용해 해당 텍스트가 검색어인지 URL인지를 우선적으로 확인합니다.
만일 입력한 텍스트가 검색어이면, 브라우저는 검색 엔진의 URL에 검색어를 포함한 주소로 페이지를 이동시킵니다.
만일 입력한 텍스타가 URL이면, 브라우저 엔진에서 네트워크 호출을 수행합니다.
따라서 주소창에 naver.com을 입력한 경우 브라우저는 네트워크 호출을 수행하게 됩니다.
step2. 네트워크 호출
네트워크 호출이 필요한 이유는
브라우저가 사용자에게 네이버 라는 사이트를 화면에 보여주려면
네이버의 HTML 문서, CSS 문서 등 데이터를 미리 가지고 있어야 합니다.
하지만 현재 브라우저엔 이러한 정보가 없고, 이러한 데이터들은 네이버 서버 컴퓨터에 존재합니다.
그렇기 때문에 브라우저는 네이버 서버와의 네트워크 통신을 통해 이러한 데이터들을 가져와야합니다.
이 작업을 수행하기 위해선, 브라우저는 우선 네이버 서버가 있는 컴퓨터의 IP주소부터 파악할 필요가 있다.
따라서 네트워크 호출 과정은 크게 두가지 과정으로 나누어 볼 수 있다.
1. 네이버 서버의 주소를 알기 위해 네임 서버와 통신하기
2. 알아낸 주소를 바탕으로 네이버 서버와 통신해 필요한 데이터 응답받기
1의 과정
먼저 네이버 서버의 주소를 알아내기 위해, 클라이언트는 다음의 과정을 수행합니다.
1. 자신의 host 파일에서 도메인 네임에 대응하는 IP주소가 있는지 우선적으로 확인한다.
2. 만일 없다면, DNS에 네이버의 IP주소를 알려주세요 라는 요청을 보낸다
(여기서 도메인 네임이란 URL에서 naver.com에 해당하는 부분이다.)
2의 과정
이제 클라이언트는 네이버 서버의 IP주소를 알게 되어 네이버 서버와 통신할 수 있다.
클라이언트의 브라우저는 네이버 서버에 데이터를 요청하는 HTTP Request를 보낸다.
HTTP Request를 받은 네이버 서버는 클라이언트가 요청한 문서를 찾아 읽고 이를 바이트 형태(1 0)
으로 변환한 후, 클라이언트로 HTTP Response를 보낸다.
step3. 렌더링 작업
브라우저 엔진은 네이버 서버로부터 응답받은 데이터에 악성 바이러스가 있는지 우선 검사한다.
이 데이터는 바이트 형태의 텍스트 문서이므로, 브라우저 엔진이 읽을 수 없다.
따라서 브라우저 엔진은 렌더링 엔진에게 해당 데이터를 해석하고,
웹 페이지를 화면에 띄울 것을 요청한다.
요청을 받은 렌더링 엔진은 받은 데이터를 바탕으로 렌더링 프로세스를 수행하고, 이 과정이 끝나면
브라우저 엔진에게 작업 완료를 알린다.
그리고 화면에 네이버 페이지가 보여지게 된다.
-> 후에 시간 남으면 이거 참고해서 내용 더 추가
30. DOM이란?
웹 페이지나 웹 앱에 있는 HTML 요소들을 구조적으로 표현한 것
DOM은 앱 전체 UI를 나타내며 트리 데이터 구조로 표현된다.
30-1. DOM의 문제점
DOM은 트리 구조로 되어 있어서 이해하기 쉽지만, 노드 수가 많아질 수록 속도가 느려지고
업데이트에 잦은 오류를 발생시킬수 있다.
30-2. Virtual DOM
가상 DOM이란 DOM을 가볍게 만든 JavaScript 표현이라고 할 수 있다.
가상 DOM은 실제로 스크린에 랜더링하는 것이 아니기 때문에 DOM을 직접 업데이트 하는 것보다
상대적으로 빠르다.
30. 가상 dom의 단점은 무엇인가
가상 돔에서 사용하는 '비교' 알고리즘은 실제 DOM의 작업량을 줄인다.
하지만 비교 방식을 사용할 경우, 변경 사항을 식별하기 위해 모든 단계를 거쳐야 한다.
개발 과정에서 사소한 변경 사항이 굉장히 빈번하게 일어나는 것을 알 수 있고, 이렇게 UI의
각 요소를 비교하는 일은 오버헤드가 된다. 이러한 것이 단점이다.
31. Dynamic programming이란?
동적 계획법이라고 불리며, 큰 문제를 작은 문제로 나누어 푸는 문제를 일컫는 말이다.
31-1. 분할 정복과의 차이점
작은 문제에 대해 중복이 일어나는지 안일어나는지에 대한 차이.
분할 정복은 큰 문제를 해결하기 어려워서 단지 작은 문제로 나누어 푸는 방법.
특징은 작은 문제에서 반복이 일어나는 부분이 없다는 것.
그러나 동적프로그래밍은 작은 부분문제들이 반복되므로 이를 이용해 풀어나가는 방법
31-2. Memoization이란?
메모제이션은 앞서 설명한 동적 계획법에서 반복되는 것을 저장하는 것을 뜻함.
피보나치로 예를 들면 다음수열 = 이전수열 + 두단계 전 수열 임.
그렇기 때문에 이전수열 그리고 두단계 전 수열을 배열에 미리 저장을 하는 메모제이션하는 것.
32. garbage collection이란
동적 할당된 메모리 영역 가운데 어떤 변수도 가리키지 않는 메모리 영역을 탐지하여 자동으로 해체하는 기법.
장점은 프로그래머가 동적 할당한 메모리 영역을 관리하지 않아도 된다.
그렇기 때문에 메모리 누수가 일어나지 않는다.
단점
어떤 메모리를 해제해야 할지 결정하는데 사용되는 알고리즘에 의해 비용이 든다.
실시간 시스템에서 가비지 컬렉션을 사용하면 치명적인 오류를 발생할 수 있다.
33. database Index 추가의 장단점은?
데이터베이스 인덱스는 추가적인 쓰기 작업과 저장 공간을 활용해 데이터베이스 테이블의 검색 속도를
향상시키기 위한 자료구조이다.
데이터들에게 인덱스를 지정함으로써 지정한 인덱스 번호로 빠르게 데이터를 찾을 수 있다.
단점
인덱스 테이블이 생성되므로 메모리를 많이 소모하게 되고 select를 제외한 insert,update,delete에
대한 성능 저하가 있기 때문이다.
34. 비대칭 암호화란?
공개키 암호화라고 합니다. 두 개의 개별 암호화 대칭 키를 사용하여 데이터를 암호화하고 해독합니다.
RSA
35. Git의 장점은?
깃은 형상관리 도구 하나입니다. 하나의 프로젝트를 여러 사람들과 함께 효과적으로 협업할 수 있습니다.
36. 구조체와 클래스의 차이는?
1) 클래스
- 참조 타입이다.
- ARC로 메모리를 관리한다.
- 상속이 가능하다
- deinit을 사용해 클래스 인스턴스의 메모리 할당을 해제할 수 있다.
2) 구조체
- 값 타입이다
- 구조체 변수를 새로운 변수에 할당할 때마다 새로운 구조체가 할당된다
그래서 언제 클래스를 쓰고 언제 구조체를 쓰는 것이 좋을까요?
- 단순한 데이터 값을 보유하기 위해서는 구조체가 낫습니다.
- 메모리의 스택은 크기가 크지 않기 때문에 작은 값을 갖는 데이터를 처리할 때 구조체를 사용합니다.
- Objectice-C와 상호 운용성을 원할 때는 클래스를 사용합니다.
37. 동시 사용자 최대 100명, 채팅방 1개, 텍스트만 주고 받는 것이 기능의 전부인 최소 스펙의 채팅 서버를 데모가 가능한 정도의 안정성을 확보하는 수준으로 만들어야 한다. 어떤 언어로 몇줄 정도에 어느 정도 기간에 만들 수 있는가?
38. 디지털 시계 프로그램을 만들어야 한다. 초단위로 표시해야 한다. 어떻게 작성할 것인가? 그렇게 작성 하면 장점과 단점은 각각 무엇인가?
39. 전임자가 만든 어떤 프로그램이 있는데 생각보다 너무 느리게 동작하는 것 같다. 어떤 부분을 어떻게 보는 것이 좋을까?
- 중복하여 실행되는 부분이 있는지 확인한다.
- 연산이 필요하지 않은데 연산을 하고 있는지 확인한다.
40. 메모리, 디스크, 네트워크의 성능과 관련되어서 알고 있는 숫자들을 모두 말해 보라.
41. 압축이란 것은 어떻게 하는 것일까? 손실 압축과 비손실 압축의 차이는 무엇일까?
42. 피보나치 수의 함수 f(n)을 작성하는 여러가지 방법에 대해서 떠오르는대로 모두 얘기해 보라.
43. 데이터베이스에서 인덱스와 관련하여서 생각나는 기술적인 내용들에 대해서 모두 얘기해 보라.
44. 어떤 처음 접하는 프로그래밍 언어로 위의 b와 같은 서버를 만들어야 한다. 빠르게 해야 하는 상황이라면 공부 시간 포함해서 얼마나 걸릴 것 같은가?
45. 좋아하는 IDE에서 자주 사용 하는 기능들 또는 특별히 좋은 기능들에 대해서 얘기해 보라.
46. 이 앱을 써보고 생각나는 좋은점들, 문제점들, 기술적인 부분과 기술 외적인 부분 모두를 얘기해 보라.
0. 지금 사용 중인 스마트폰의 해상도는 얼마인가? 화면 캡처를 해서 bmp로 저장하면 용량이 어떻게 되는가? 그걸 png와 jpg로 저장하면 각각 용량이 어떻게 되는가? 동영상의 압축 원리는 무엇일까?
1. 한국의 gmail 사용자가 미국의 gmail 사용자에게 메일을 보냈다. 얼마 만에 도착 할까? 어떤 과정을 거칠까? 이에 대해 5분 이상 상세히 얘기할 수 있는가?
- gmail에서 이메일을 작성을 완료하고, 보내기 버튼을 누른다.
- 이메일 클라이언트가 SMTP 서버에 접속하고 MIME 포멧으로 메일을 건넨다.
- SMTP 서버에서 MTA는 수신자의 도메인 확인을 위해 DNS 서버를 찾는다
- DNS 서버에서 MX 레코드를 찾고, 수신자의 이메일 서버에 SMTP 프로토콜을 통해 메일을 전송한다.
- 수신자의 서버는 수신자의 계정을 확인하여 해당 사용자의 메일 계정으로 메일을 배달한다.
- 받는 사용자는 자신의 gmail에 접속하여 받은 메일을 확인한다.
2. 가상 메모리는 무엇인가? 페이지와 스왑은 무엇인가? 디스크와 메모리의 속도 차이는 어느 정도이고 그 원인은 무엇인가? SSD의 장점은 무엇인가? ->이거 위로 옮겨
페이지와 스왑은
일반적으로 컴퓨터의 프로세스가 사용하는 자원은 메인 메모리, 램이다.
프로세스를 사용하다 보면 메인 메모리가 부족하기 마련이다.
따라서 일부의 작업만 메인 메모리에 올리고 나머지는 보조 기억장치로 내보내게 된다.
이 과정을 스왑이라한다.
4. 10기가바이트짜리 파일을 C 드라이브에서 D 드라이브로 복사를 한다. 얼마나 걸릴까? A 폰에서 C 드라이브로 옮겨온다면? 만약 1메가바이트짜리 1만 개라면 얼마나 걸릴까? 카피를 동시에 여러 개 돌리면 더 빨라질까?
5. C 또는 C++에서 메모리 관련 버그에는 어떤 것이 있는가? 각각 디버깅은 어떻게 할 수 있는가. 자바 또는 다른 어떤 언어에서의 가비지 컬렉터의 역할은 무엇이고 그 원리는 무엇인가?
6. 암호에서 얘기하는 플레인 텍스트라는 것이 무슨 뜻인가? 비대칭 암호화, 그리고 인증서에 대해서 설명하라. 사용자의 비밀번호를 안전하게 보관하는 방법은 무엇인가?
10. Dynamic Programming, A* 알고리즘, B+ 트리에 대해서 아는 대로 설명하라.
11. 소스 관리 및 배포에 대해서 아는 대로 상세히 얘기하라.
12. Virtual Box, AWS, GCE에 대해서 아는 대로 상세히 얘기하라.
13. NoSQL, NodeJS 중에 아는 것에 대해서 아는 대로 상세히 얘기하라.
14. jQuery, AngularJS, React Native 중에 자신 있는 것에 대해서 상세히 설명하라.
15. Windows 또는 Linux와 다른 Android 또는 iOS의 특징에 대해서 상세히 얘기하라.
윈도우 운영체제는 마이크로소프트 사가 개발한 운영체제이다.
특징으로는 그래픽 사용자 인터페이스 제공,
선점형 멀티태스킹 방식 제공(동시에 여러 개의 프로그램을 실행하면서, 운영체제가 각 작업의 CPU 이용시간 제어,
자동감지 기능 제공(하드웨어 설치 시, 필요한 시스템 환경을 운영체제가 자동으로 구성) 등이 있다.
Mac 운영체제
- 애플이 유닉스를 기반으로 개발한 GUI 기반의 운영체제
15-1. 운영체제란?
- 운영체제는 사용자가 컴퓨터의 하드웨어를 쉽게 사용할 수 있도록 인터페이스를 제공해주는 소프트웨어이다.
- 운영체제는 한정된 시스템 자원을 효과적으로 사용할 수 있도록 관리 및 운영함으로써, 사용자에게 편리성을 제공한다.
- 운영체제는 컴퓨터 시스템과 사용자 간의 인터페이스 기능을 담당한다.
16. ASCII, Unicode, UTF-8에 대해서 아는 대로 상세히 얘기하라 -> 이것도 위로 옮기자
ASCII란?
Unicode란?
유니코드란, 숫자와 글자, 즉 키와 값이 1:1로 매핑된 형태의 코드이다.
아스키코드로 표현할 수 없는 문자들을 유니코드라는 이름 아래 전 세계의 모든 문자를 특정 숫자와 1:1로
매핑한 것이다. 한자를 제외하고는 거의 대부분의 문자가 유니코드에 담겨있다.
UFT-8이란?
유니코드를 위한 가변 길이 문자 인코딩 방식 중 하나입니다.
쉬운말로 글자마다 byte의 길이가 다릅니다.
가변을 구분하기 위해 첫 바이트에 표식을 넣었는데 2바이트는 110, 3바이트는 1110으로 시작한다.
스레드(thread) 와 프로세스(Process) 의 차이점
Program vs Process
객체 지향 프로그래밍(OOP) 의 정의와 특징
함수형 프로그래밍(FP) 의 정의와 특징
'Call by value' vs 'Call by reference'
동기 vs 비동기
메모리 구조
스택과 링크드리스트와 리스트의 차이점을 설명해 보세요.
64비트와 32비트의 차이
Mutable 객체 vs Immutable 객체.
일급 객체란 무엇일까요 ?
----
네트워크
REST API
서버와 통신해서 데이터를 어떻게 가져왔나요 ?
Alamofire 혹은 AFNetworking 등의 라이브러리 사용 경험이 있나요 ? 네트워크 연동 라이브러리를 왜 사용했으며, 장점과 단점을 설명할 수 있나요 ?
인터넷이 느리고 불안정한 지역에서 서버로 API를 호출하여 10만 개의 데이터를 리스트로 보여줘야 한다. 이 문제를 해결하는 과정 및 그 과정 중에 구현할 요소들과 단계별 고려사항은?
JSON 구조는 어떻게 생겼나요 ?
XML 과 JSON 의 차이점에 대해 설명해주세요.
OSI 7계층에 대해 설명해주세요.
delegate pattern이란
singleton pattern이란
'CS' 카테고리의 다른 글
[CS] iOS 면접 질문 정리 (0) | 2023.04.04 |
---|---|
[CS] 인텔리픽 모의면접 질문 정리 (0) | 2023.03.31 |
[CS] 자료구조 면접 정리 (2) | 2023.03.23 |
[CS] 운영체제 면접 정리 (1) | 2023.03.21 |