본문 바로가기

Hanghae99

230214 TIL 모의면접 준비

1. 시간복잡도와 공간복잡도가 무엇인지 설명해주실 수 있을까요?

 

시간복잡도란? 코드로 로직을 짤때 입력값의 변화에 따라 연산횟수와 연산시간의 관계를 나타내는 척도입니다.

공간복잡도란? 어떠한 프로그램과 그 프로그램을 실행시킨 후 완료하는 데 필요로 하는 공간(=메모리)의 양과의 상관과계를 나타내는 척도

최근에는 대용량 시스템이 보편화되면서 공간복잡도에서는 제약이 적어졌고 시간복잡도를 우선 고려합니다.

 

2. 스택, 큐에 대해 설명해주실 수 있을까요?

 

스택과 큐는 자료구조의 개념을 말합니다. 스택은 쌓아놓는 형태로 후입선출(Last-In First-Out)의 특징을 가지고 선입선출(First-In First-Out)의 특징을 갖는 큐와는 다릅니다.

 

3. 배열, 링크드리스트를 비교하여 설명해주실 수 있을까요?

 

 배열과 링크드리스트는 모두 자료구조의 형태를 말합니다. 배열은 데이터들이 연속적으로 저장되어 있는 자료구조이고, 링크드리스트는 여러개의 노드들이 순차적으로 연결된 형태를 갖습니다. 배열은 연속적이기 때문에 인덱스를 통한 빠른 접근이 가능하지만 링크드리스트는 그렇지 않습니다. 반면에 링크드리스트는 노드로 연결되어 있어 삽입/삭제가 용이하지만 배열은 중간 데이터를 삭제하면 공간 낭비가 발생하는 단점이 있습니다.

 

4. CORS란 무엇이고 어떻게 허용할 수 있나요?

 

 CORS(Cross-Origin Resource Sharing) 이며, 브라우저에서 리소스가 다른 요청에 대해 제한하는 정책적인 기능을 말합니다. 리소스가 다르다는 것은 3가지 경우를 말합니다. 1. 프로토콜이 다른 경우, 2. host가 다른 경우, 3. port가 다른 경우 이 3가지가 모두 같다면 동일 출처입니다. 이 정책은 다른 출처에서 수신되는 요청의 접근을 제한하기 위해 만들어 졌습니다.

 가장 좋은 허용 방법은 서버에서 응답헤더에 허용할 출처를 담아 클라이언트에 응답하는 것이다. 그러나 임시방편이 필요하다면 3가지의 방법이 있습니다. 1. chrome 확장자를 사용하는것, 2. 프록시 서버를 이용하는 것. 3. 브라우저 자체에서 CORS 기능을 해제 하는것. 

 

5. 사용자 패스워드를 전송하고 보관하는 방법을 설명해주실 수 있을까요?

 

 사용자 패스워드는 중요한 개인정보이므로 단방향 해시함수로 암호화하여 db에 저장합니다. 단방향 해시 함수란 입력값을 알 수 없도록 문자와 숫자를 임의로 나열한 암호화된 메세지를 말하며 이는 복호화할수 없습니다. 

 

6. var, let, const 에 대해 설명해주실 수 있을까요?

 

 var, let, const는 모두 javascript의 변수 선언 방식입니다. 이 세가지 변수 선언 방식은 재선언과 재할당 가능여부에서 차이를 나타냅니다. var는 재선언이 가능합니다. 따라서 같은 변수명을 최초 선언한 후 다시 선언하여도 오류가 발생하지 않습니다. 따라서 코드양이 많아지는 경우 변수값이 바뀌는 경우가 생길 수 있습니다. 반면에 let과 const는 재선언을 하게 되면 오류가 발생합니다. 그러나 let은 재선언은 불가능 하지만 재할당이 가능합니다. 그말인 즉슨, let은 같은 변수앞에 선언자로서 사용은 불가하지만 한번 let으로 선언된 변수는 다른 값이 재차 할당이 가능하다는 것입니다. 반면에 const는 이것이 모두 불가합니다.

 

7. Promise란 무엇인지 설명해주실 수 있을까요?

 

  promis란 javascript에서 제공되는 기능으로 비동기 처리를 할때 사용됩니다. 어떤 값을 요청했을때 바로 return을 하지 않고 pending 상태가 되면서 다른 처리를 한 후에 마지막에 값을 제공하는 기능입니다.

 

8. Hoisting이란 무엇인지 설명해주실 수 있을까요?

 

자바스크립트에서 코드를 한줄씩 읽어 내려가며 실행하는 프로그램이 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다. 이 hoisting이 발생하는 이유는 자바스크립트만의 고유한 실행 원리때문이며, var로 선언한 변수는 hoisting으로 인하여서 변수의 값이 undefinde로 변수를 초기화할 수 있고 반면 let과 const는 호이스팅시 에러가 발생합니다. 다시 말하자면 선언 전에 참조하는 변수에 대하여 에러가 발생하는냐 undefined가 발생하는냐에 차이를 나타냅니다.

 

9. async/await 이란 무엇인지 설명해주실 수 있을까요?

 

 async와 await는 자바스크립트에서 promise를 좀더 편하게 사용하기 위한 문법입니다. 어떤 함수 앞에 위치하는 async는 promise를 반환합니다. async 함수 안에서 사용되는 await는 promise가 처리될 때까지 기다린 다음 함수를 실행해야 할때 사용합니다. 

 

10. 개발자로서 본인의 장단점과 근거가 되는 경험을 말씀해주실 수 있을까요?(협업 능력 제외)

 

  개발자로서 저의 장점은 카피능력입니다. 저는 흉내내기에 능합니다. 협업했던 동료의 코드 인터넷에 떠도는 코드 등등 잘 조합해서 제껄로 소화합니다. 하지만 이것은 단점이기도 합니다. 그렇기 때문에 기초가 부실합니다. 확실한 배경지식 없이 되는 코드가 작동하도록 카피해오기 때문에 왜 되는지, 왜 안되는지에 대해 알아보는데 시간이 오래걸립니다.

 

11. Arrow Function 이란 무엇인지 설명해주실 수 있을까요?

 

  자바스크립트 ES6에서 추가된 신문법입니다. arrow function은 함수 본연의 기능인 입출력기능을 직관적으로 잘 표현해줍니다. 또한 소괄호 및 중괄호 생략도 가능합니다. 또한 arrow function 은 일반 function과 달리 외부의 this를 내부에서도 사용할 수 있습니다.

 

12. ‘==’와 ‘===’ 연산자의 차이는 무엇인지 설명해주실 수 있을까요?

 

==는 Equal Operator이고,  ===는 Strict Equal Operator입니다. 따라서 == 는 양변의 값만 비교하는 반명 ===는 값과 타입까지 비교하여 bool값을 반환합니다. 

 

13. Virtual DOM이란 무엇이고 Real DOM과의 차이는 무엇인가요?

 

 Real DOM은 element의 자식노드가 추가되면 전체 문서가 갱신되지만 Virtual DOM은 버퍼 역활을 해줌으로서 Real DOM을 추상화한 DOM과 비교하여 변경점만 Real DOM에 적용하여 전체 문서가 갱신되지 않습니다.
 문법적인 차이도 조금 있는데 어떠한 element를 찾을때 document 즉 HTML 문서의 querySelector등으로 메소드로 찾는 Virtual DOM을 사용하는 React의 경우는 ref로 element를 찾습니다.

 

14. 즐겨 보는 테크 유튜버나 뉴스레터가 있다면 알려주실 수 있을까요?

 

 티타임즈TV 자주 봅니다.

 

15. useRef 에 대해 아는 만큼 설명해주실 수 있을까요?

 

 useRef는 특정 DOM을 선택하여 정보를 얻거나 조작해야할때 사용되는 React Hook입니다. useRef 는 .current 프로퍼티로 전달된 인자(initialValue)로 초기화된 변경 가능한 ref 객체를 반환합니다.