1. 웹 서버(WS)와 웹 애플리케이션 서버(WAS)에 대해 설명해주세요.
웹 서버는 HTML 이미지 등 정적인 콘텐츠를 제공하여 사용자가 웹 페이지를 빠르게 볼 수 있게 합니다. 대표적으로 Apache와 Nginx가 있습니다.
웹 애플리케이션 서버는 동적인 콘텐츠를 생성하고 비즈니스 로직을 처리하여 사용자 맞춤형 응답을 제공합니다. 대표적으로 Tomcat과 JBoss가 있습니다.
WS는 정적 파일을 제공하고, WAS는 동적 처리를 담당합니다. 이렇게 역할을 분담하면 서버 자원을 효율적으로 사용할 수 있습니다.
2. Tree와 Heap에 대해 설명해주세요.
Tree는 비선형 자료구조이며, 계층적 관계를 표현하기에 적합합니다.
Heap은 최댓값 또는 최솟값을 찾아내는 연산을 쉽게 하기 위해 고안된 구조로, 각 노드의 키값이 자식의 키값보다 작지 않거나(최대 힙) 그 자식의 키값보다 크지 않은(최소힙) 완전이진트리입니다.

3. Array와 LinkedList의 장/단점에 대해 설명해주세요.
Array는 인덱스로 해당 원소에 접근할 수 있어 찾고자 하는 원소의 인덱스 값을 알고 있으면 O(1)에 해당 원소로 접근할 수 있습니다. 즉, 속도가 빠르다는 장점이 있습니다.
하지만 삽입 삭제의 과정에서 각 원소들을 shift 해줘야 하는 비용이 생겨 이 경우 시간 복잡도는 O(n)이 된다는 단점이 있습니다.
이 문제점을 해결하기 위한 자료구조가 linkedlist입니다. 각각의 원소들은 자기 자신 다음에 어떤 원소인지만을 기억하고 잇기 때문에 이 부분만 다른 값으로 바꿔주면 삽입과 삭제를 O(1)로 해결할 수 있습니다.
하지만 LinkedList는 원하는 위치에 한번에 접근할 수 없다는 단점이 있습니다. 원하는 위치에 삽입을 하고자 하면 운하는 위치를 Search 과정에 있어서 첫번쨰 원소부터 다 확인해봐야 합니다.
간단히 정리하면,
Array는 검색이 빠르지만, 삽입, 삭제가 느리다.
LinkedList는 삽입, 삭제가 빠르지만, 검색이 느리다.
4. 프로세스와 쓰레드의 차이점에 대해 설명해주세요.
프로세스는 실행 중인 독립된 프로그램 단위로 각자 별도의 메모리 공간을 사용합니다. 반면에 쓰레드는 하나의 프로세스 내에서 실행되는 작은 작업 단위로, 같은 메모리와 자원을 공유합니다. 프로세스는 서로 간섭 없이 독립적으로 동작하지만, 쓰레드는 함께 작업을 처리하여 효율성을 높입니다.