오늘은 개발자 면접질문에 대해 정리해보자. 통상적으로 여러회사 면접질문이 있지만 일단 나는
벡엔드쪽이기 때문에 관련 질문이 많을 것 같다. 어떠한 면접질문이 나온다 하고 딱! 예상하기는
힘들지만 통상적으로 많이 나올법한 것들을 준비할 수는 있을 것 같다. 생각나는대로 정리하였으
나 나올만한 문제 혹은 나왔던 문제들을 많이 정리하였다!
프로세스와 스레드의 차이점이 뭘까요?
- 자원을 할당받는 주체가 다릅니다
프로세스는 운영체제로부터 자원을 할당받아 실행하고
스레드는 프로세스로부터 자원을 할당받아 실행합니다- 또한 하나의 프로세스는 여러개의 스레드를 생성가능하며
각 스레드는 개별스택을 가지고, 프로세스의 전역 메모리 공간을 공유하며 프로그램을 실행합니다- 보통 프로세스는 코드/데이터/스택/힙 메모리 영역을 기반으로 실행하며,
- 스레드는 프로세스 안에서, 개별적인 스택을 가지고, 코드/데이터/힙 영역을 공유하며 실행합니다.
스크립트 언어와 컴파일 언어를 나열하고 차이점을 말해보세요
- 스크립트 언어로는 python, ruby, javascript 등이 있으며
컴파일 언어로는 C, C++, JAVA 등이 있다- 컴파일 언어는 컴파일러를 통해 사전에 컴파일 되어, 기계어 상태로 실행되므로 실행이 빠르다
또한 컴파일 단계에서 전체 코드를 기계어로 변환시 최적화를 하여 실행속도를 더 빠르게 할 수 있다- 반면 스크립트 언어는 컴파일 단계 없이, 실행 단계에서 한 줄 씩 기계어로 번역 후, 실행되므로 통상 컴파일 언어보다 실행이 느리다. 또한 전체코드에 대한 실행코드 최적화가 어렵다
동기식과 비동기식의 차이점과 장단점을 말해보세요
- 차이점은
동기식은 요청에 대한 응답을 기다린 후 응답이 오면 다음 요청을 처리하는 방식인 반면
비동기식은 요청에 대한 응답을 기다리지 않고 다음 동작을 진행한다는 점이다- 장단점은
동기식은 구성이 단순하고 순서대로 실행이 가능하지만 여러 일을 동시에 수행하는 멀티태스킹이 불가능하다
반면 비동기식은 동시에 여러 일을 수행할 수 있지만, 일정시간당 요청량이 많아질 경우 부하가 발생할 수 있으며 이를 위한 추가적인 처리가 필요할 수 있다
데이터베이스에서 인덱스를 사용하는 이유와 장단점은 뭘까요?
- 인덱스는 데이터를 논리적으로 정렬해서 검색과 정렬 속도를 높이기 위해 사용합니다
- 단, 데이터 삽입, 변경이 수시로 일어나면 매번 인덱스를 변경해야 하므로, '검색속도'를 높이기 위한 인덱스 사용은 신중해야 한다
JVM과 JAVA프로그램 실행과정에 대해 설명해보세요
- JVM이란 JAVA Virtual Machine의 약자로 자바프로그램을 자바 API를 기반으로 실행하는 역할을 합니다
- JAVA프로그램 실행 과정은
- 프로그램이 실행되면 JVM이 OS로부터 해당 프로그램이 필요로 하는 메모리를 할당받고
- 자바 바이트 코드로 변환된 클래스파일을 클래스 로더를 통해 JVM에 로딩합니다
- 로딩된 class파일은 execution engine을 통해 해석되고, 실행됩니다
- 필요시 garbage collection을 수행하여, 참조되지 않은 객체들을 삭제합니다
GC(Garbage Collection)이 필요한 이유를 설명해 보세요
- JAVA 프로그램은 메모리를 명시적으로 지정해서 해제하지 않기 때문에, Garbage Collection 을 통해 더 이상 필요없는 객체를 찾아 지우는 작업을 수행합니다