우선 CS 면접의 경험을 정리해보면, 왜 CS를 공부해야하는지 이제서야 알게 된 느낌이었다. 단순히 개념과 설명을 반복해서 표현하는게 아니라 각 개념들 간 관계를 알고 차이점까지 설명할 줄 알아야 실무에서도 적용할 수 있다.
주로 두 가지 개념에 대해 묻는다. 이렇게 두 가지를 물어보는 이유는 차이점이 존재하기 때문에 그 특징을 잘 설명하는 것이 중요하다.
1.
배열, 연결리스트
자료구조에서 배열과 연결리스트는 모두 데이터를 저장하고 관리하는데 사용된다.
•
배열
◦
연속적인 메모리 공간에 정하는 데이터 구조
◦
고정 크기를 가지며 한번 선언되면 크기를 변경할 수 없다. → 이는 단점으로도 작용하는데 배열의 크기를 동적으로 변경할 수 없다.
◦
인덱스를 사용해 데이터에 접근이 빠르다. → O(1)의 시간복잡도를 가진다.
◦
삽입 및 삭제의 비효율성 → 배열 중간에 삽입하거나 삭제할 경우 나머지 요소들을 이동시켜야하므로 O(n)이 걸린다.
•
연결리스트
◦
각 요소가 노드로 구성되고, 각 노드는 데이터와 다음 노드를 가리키는 포인터를 표함되는 데이터 구조
◦
동적 크기로 필요에 따라 노드를 추가하거나 제거하여 크기를 동적으로 변경할 수 있다. → 각 노드는
◦
효율적인 삽입/삭제 리스트의 중간에 요소를 삽입하거나 삭제하는데 O(1) 시간이 소요된다. → 반면 특정 위치를 찾는데 O(n)의 시간이 걸려 접근이 느리다.
◦
비연속적 저장으로 메모리 활용이 유연하다.
2.
프로세스와 스레드
•
프로세스
◦
실행중인 프로그램의 인스턴스를 의미하며, 프로그램이 메모리에서 실행되는 상태를 말한다.
◦
각 프로세스는 독립된 메모리 공간을 가지며, 다른 프로세스와 메모리 공간을 공유하지 않는다.
◦
실행에 필요한 자원(파일, 메모리, CPU 등) 을 소유한다.
◦
운영체제는 프로세스를 생성, 스케쥴링, 종료등의 작업을 관리한다.
◦
한 프로세스의 오류가 다른 프로세스에 영향을 미치지 않는다.
•
스레드
◦
프로세스 내에서 실행되는 작업의 단위
◦
프로세스는 하나 이상의 스레드를 가질 수 있으며, 이를 멀티스레딩이라고 한다.
◦
같은 프로세스 내의 스레드들은 메모리 공간(코드, 데이터, 힙)을 공유한다. → 각 스레드는 독립적인 스택을 가진다.
◦
스레드는 프로세스보다 생성 및 종료에 필요한 자원이 적다. → 경량 프로세스
◦
여러 스레드를 사용하여 병행 작업을 수행할 수 있어, 프로그램의 성능을 향상시킬 수 있다.
◦
스레드 간 통신은 같은 프로세스 내에서 이루어지기 때문에 프로세스 간 통신보다 빠르다.
프로세스 : 웹 브라우저, 텍스트 편집기, 시스템 유틸리티 등 각각 독립적으로 실행되는 프로그램 스레드 : 웹 브라우저 내에서의 탭들, 텍스트 편집기의 자동 저장 기능, 시스템 유틸리티의 배그라운드 작업 등 병행 처리가 필요한 작업
3.
TCP, UDP
우선 이 용어들은 네트워크와 관련된 것인데, 우리가 인터넷을 사용할 때 서버와 어떻게 상호작용하는지에 대한 내용이다. 패킷을 통해 데이터를 전송하는데 이 패킷을 어떻게 다루는지에 대한 규약이다.
•
TCP(Transmission Control Protocol)
◦
서버와 통신할때 syn, arc를 통해 신뢰성을 보장하는 연결지향적 프로토콜
◦
만약 분할된 패킷을 잃어버렸다면 서버에게 어떤 패킷이 없는지 알려주고 다시 전송을 받는다.
◦
UDP에 비해 속도가 느리다.
•
UDP(User Datagram Protocol)
◦
서버와 통신할때 TCP와 달리 일방향으로 주고 받는 비연결성 프로토콜
◦
패킷을 잃어버려도 서버에게 다시 알리지 않는다.
◦
TCP에 비해 속도가 빠르다.
◦
비디오 스트리밍에 자주 사용된다.
4.
HTTP , HTTPS
•
HTTP (HyperText Transfer Protocol)
◦
웹브라우저와 서버간에 데이터를 주고받기 위한 프로토콜
◦
일반 텍스트로 데이터를 전송하기 때문에 보안에 취약하다.
◦
보안이 필요하지 않은 웹사이트나 페이지에 주로 사용된다.
◦
포트번호: 기본적으로 포트 80을 사용한다.
•
HTTPS (HyperText Transfer Protocol Secure)
◦
HTTP에 SSL 또는 TLS라는 암호화 프로토콜을 추가하여 보완성을 높인 프로토콜
◦
HTTPS를 통해 주고받는 데이터는 암호화되어, 중간에 누군가가 데이터를 가로채더라도 내용을 읽을 수 없도록 보호
◦
금융 거래, 로그인 정보 입력 등의 민감한 데이터가 오가는 웹사이트에 주로 사용
◦
HTTPS는 포트 443을 사용한다.
5.
객체지향 프로그램의 특징
•
캡슐화
◦
객체의 속성과 데이터를 하나로 묶어 외부에서 객체의 내부 상태를 직접 접근하지 못하도록 보호하는 것 → 객체 내부의 세부 구현을 감추고, 외부에는 필요한 부분만 공개해 데이터의 무결성을 유지한다.
•
상속
◦
기존 클래스의 속성과 메소드를 새로운 클래스가 물려받아 재사용 하는 것 → 코드의 재사용성을 높이고 계층 구조를 형성한다.
•
다형성
◦
동일한 메소드나 연산자가 서로 다른 객체에서 다르게 동작하도록 하는 것
◦
주로 메소드 오버로딩과 메소드 오버라이딩을 통해 구현된다.
•
추상화
◦
복잡한 시스템에서 필요한 부분만을 모델링하여 표현하는 것
◦
구체적인 구현을 감추고, 필요한 기능만을 인터페이스로 제공함으로 써 복잡성을 줄이고 이해하기 쉽게 한다.
6.
SQL, NoSQL
•
SQL (Structured Query Language)
◦
관계형 데이터베이스 관리 시스템(RDBMS)로 데이터를 테이블 형태로 저장한다. 각 테이블은 행과 열로 구성되며, 데이터는 엄격하게 구조화되어 있다.
◦
데이터베이스 스키마(schema)를 사전에 정의해야 하며, 모든 데이터는 이 스키마를 따라야 한다.
•
NoSQL (Not only SQL)
◦
비구조화된 데이터로 테이블 기반이 아닌 다양한 데이터 모델(키-값, 문서, 그래프, 컬럼 패밀리 등)을 지원한다. → 비정형 데이터, 반정형 데이터 처리에 적합
◦
스키마가 없거나 굉장히 유연하다.
Subscribe to 'kyugntae-ai'
Subscribe to my site to be the first to receive notifications and emails about the latest updates, including new posts.
Join Slashpage and subscribe to 'kyugntae-ai'!