TIL 웹개발 - CS 모의 면접 정리
우선 CS 면접의 경험을 정리해보면, 왜 CS를 공부해야하는지 이제서야 알게 된 느낌이었다. 단순히 개념과 설명을 반복해서 표현하는게 아니라 각 개념들 간 관계를 알고 차이점까지 설명할 줄 알아야 실무에서도 적용할 수 있다. 주로 두 가지 개념에 대해 묻는다. 이렇게 두 가지를 물어보는 이유는 차이점이 존재하기 때문에 그 특징을 잘 설명하는 것이 중요하다. 배열, 연결리스트 자료구조에서 배열과 연결리스트는 모두 데이터를 저장하고 관리하는데 사용된다. 배열 연속적인 메모리 공간에 정하는 데이터 구조 고정 크기를 가지며 한번 선언되면 크기를 변경할 수 없다. → 이는 단점으로도 작용하는데 배열의 크기를 동적으로 변경할 수 없다. 인덱스를 사용해 데이터에 접근이 빠르다. → O(1)의 시간복잡도를 가진다. 삽입 및 삭제의 비효율성 → 배열 중간에 삽입하거나 삭제할 경우 나머지 요소들을 이동시켜야하므로 O(n)이 걸린다. 연결리스트 각 요소가 노드로 구성되고, 각 노드는 데이터와 다음 노드를 가리키는 포인터를 표함되는 데이터 구조 동적 크기로 필요에 따라 노드를 추가하거나 제거하여 크기를 동적으로 변경할 수 있다. → 각 노드는 효율적인 삽입/삭제 리스트의 중간에 요소를 삽입하거나 삭제하는데 O(1) 시간이 소요된다. → 반면 특정 위치를 찾는데 O(n)의 시간이 걸려 접근이 느리다. 비연속적 저장으로 메모리 활용이 유연하다. 프로세스와 스레드 프로세스 실행중인 프로그램의 인스턴스를 의미하며, 프로그램이 메모리에서 실행되는 상태를 말한다. 각 프로세스는 독립된 메모리 공간을 가지며, 다른 프로세스와 메모리 공간을 공유하지 않는다. 실행에 필요한 자원(파일, 메모리, CPU 등) 을 소유한다. 운영체제는 프로세스를 생성, 스케쥴링, 종료등의 작업을 관리한다.