전반적으로 정답을 다 얘기했지만 디테일이 부족했고 생각이 정리가 안돼 답을 전달하는데 많이 부족했다 느껴 연습이어서 다행이었던 기술면접이었다.
배열(Array)과 링크드 리스트(Linked List)는 데이터 저장을 위한 대표적인 자료구조이다. 하지만 이 두 자료구조는 구조와 동작 방식에서 여러 차이점이 있다.
배열:
arr[5]를 호출하면 6번째 요소에 바로 접근할 수 있다.링크드 리스트:
배열은 빠른 접근이 필요하고 크기가 고정된 상황에 적합하고, 링크드 리스트는 빈번한 삽입과 삭제가 필요한 경우에 유리하다.
TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 인터넷에서 데이터를 전송하는 데 사용되는 두 가지 주요 프로토콜이다. 이들은 서로 다른 특성과 용도를 가진다.
TCP:
UDP:
TCP는 신뢰성이 중요할 때, UDP는 속도가 중요할 때 사용된다. 둘 다 네트워크 통신에서 중요한 역할을 한다.
HTTP(Hypertext Transfer Protocol)와 HTTPS(Hypertext Transfer Protocol Secure)는 웹에서 데이터를 주고받는 프로토콜이다. 이 둘은 기본적으로 동일한 역할을 하지만, 보안 측면에서 큰 차이가 있다.
HTTP:
HTTPS:
HTTPS는 HTTP에 보안 계층을 추가한 프로토콜로, 데이터 전송의 기밀성과 무결성을 보장한다. 이는 현대 웹에서 필수적인 요소이다.
객체지향 프로그래밍(OOP)은 소프트웨어 개발의 중요한 패러다임 중 하나로, 데이터와 데이터를 처리하는 메서드를 객체로 묶어 관리하는 방식이다. OOP의 네 가지 주요 개념은 다음과 같다.
추상화(Abstraction):
캡슐화(Encapsulation):
private으로 선언하고, 필드에 접근하기 위한 메서드를 제공하여 객체의 내부 상태를 보호할 수 있다.상속(Inheritance):
Animal 클래스를 상속받아 Dog 클래스와 Cat 클래스를 구현할 수 있다.다형성(Polymorphism):
draw() 메서드를 호출할 때, Shape 클래스의 객체가 Circle인지 Rectangle인지에 따라 다르게 동작할 수 있다.이 네 가지 개념은 객체지향 프로그래밍의 핵심 원리로, 복잡한 시스템을 이해하고 설계하는 데 중요한 역할을 한다.
상속(Inheritance)과 다형성(Polymorphism)은 객체지향 프로그래밍(OOP)에서 중요한 개념이지만, 그 목적과 사용 방식에서 차이가 있다.
상속:
Animal 클래스를 상속받아 Dog 클래스와 Cat 클래스를 만들 수 있다. 두 클래스는 공통적으로 move()와 같은 메서드를 사용할 수 있다.다형성:
Shape 클래스를 상속받은 Circle 클래스와 Rectangle 클래스가 있다면, draw() 메서드는 각 클래스에서 다르게 구현될 수 있다. 하지만 외부에서는 동일한 draw() 메서드를 호출하여 다양한 형태의 도형을 그릴 수 있다.상속은 코드 재사용을 통해 개발 효율성을 높이는 데 중점을 두고, 다형성은 객체의 유연성과 확장성을 강조한다. 둘 다 객체지향 프로그래밍의 중요한 요소이다.
SQL과 NoSQL은 데이터베이스 관리 시스템(DBMS)의 두 가지 주요 유형이다. 각각의 특성과 사용 사례에서 큰 차이가 있다.
SQL:
NoSQL:
SQL은 정형화된 데이터와 복잡한 쿼리가 필요한 환경에 적합하고, NoSQL은 비정형 데이터와 대규모 분산 시스템에 적합하다. 두 데이터베이스 유형은 각각의 장단점이 있으며, 용도에 따라 선택적으로 사용된다.
JOIN은 두 개 이상의 테이블에서 데이터를 결합하여 조회하는 SQL 연산이다. JOIN에는 여러 종류가 있으며, 각 종류에 따라 결과가 달라진다.
INNER JOIN:
SELECT A.name, B.department
FROM employees A
INNER JOIN departments B ON A.department_id = B.id;이 쿼리는 employees 테이블과 departments 테이블을 department_id를 기준으로 결합하여, 일치하는 데이터만 반환한다.LEFT (OUTER) JOIN:
SELECT A.name, B.department
FROM employees A
LEFT JOIN departments B ON A.department_id = B.id;이 쿼리는 employees 테이블의 모든 행을 반환하며, departments 테이블에 일치하는 데이터가 없으면 NULL 값을 반환한다.RIGHT (OUTER) JOIN:
SELECT A.name, B.department
FROM employees A
RIGHT JOIN departments B ON A.department_id = B.id;이 쿼리는 departments 테이블의 모든 행을 반환하며, employees 테이블에 일치하는 데이터가 없으면 NULL 값을 반환한다.FULL (OUTER) JOIN:
SELECT A.name, B.department
FROM employees A
FULL JOIN departments B ON A.department_id = B.id;이 쿼리는 employees와 departments 테이블의 모든 데이터를 결합하며, 일치하지 않는 경우 NULL로 반환한다.CROSS JOIN:
SELECT A.name, B.department
FROM employees A
CROSS JOIN departments B;이 쿼리는 employees와 departments의 모든 가능한 조합을 반환한다. 즉, 각 직원마다 모든 부서와의 조합을 결과로 반환한다.JOIN 연산은 여러 테이블에서 데이터를 결합하고, 관계를 기반으로 데이터를 조회하는 데 필수적이다. 각각의 JOIN 유형은 특정 시나리오에서 적합하게 사용된다.
서브쿼리(Subquery)와 JOIN은 모두 SQL에서 데이터를 조회하는 방법이지만, 사용 방식과 목적에서 차이가 있다.
서브쿼리:
SELECT name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);이 쿼리는 전체 직원의 평균 급여보다 높은 급여를 받는 직원의 이름을 반환한다. 서브쿼리는 평균 급여를 계산하고, 상위 쿼리는 그 값을 사용해 필터링한다.JOIN:
SELECT A.name, B.department
FROM employees A
INNER JOIN departments B ON A.department_id = B.id;이 쿼리는 직원의 이름과 부서를 반환한다. JOIN은 employees와 departments 테이블을 결합하여 일치하는 데이터를 반환한다.서브쿼리는 쿼리 내에서 데이터를 필터링하거나 계산된 값을 반환하는 데 사용되고, JOIN은 여러 테이블에서 관련 데이터를 결합하여 조회하는 데 사용된다. 각각의 기법은 상황에 맞게 선택적으로 사용되며, SQL 쿼리 작성 시 필수적인 도구이다.