그럼에도 불구하고

👨‍💻

[면접 준비] 프론트엔드 전반적인 질문 및 CS 본문

이모저모/면접 준비

[면접 준비] 프론트엔드 전반적인 질문 및 CS

zenghyun 2023. 9. 27. 21:57

Start!

🧑🏻‍💻 프론트엔드

⭐️ 🧑🏻‍💻 사용자가 URL 입력한 화면이 출력되기까지의 과정을 설명해 주세요.

  1. 사용자가 URL을 입력하면 웹 브라우저에서 URL의 유효성을 판단합니다.
  2. URL이 유효하지 않으면 웹 브라우저는 입력한 내용을 검색하게 되고, URL이 유효하면 DNS 서버에 연결할 IP를 요청합니다.
  3. DNS 서버에서 IP 주소를 받으면 3-way 핸드셰이킹으로 TCP 통신을 위한 가상 회선을 연결합니다.
  4. HTTP 연결 요청을 서버에 보내면, 이에 대한 응답을 받고 웹 페이지 화면을 출력합니다.

⭐️ 🧑🏻‍💻 브라우저 렌더링 과정에 대해 설명해 주세요.

  1. HTML 파일과 CSS 파일을 파싱 해서 각각 Tree를 만듭니다. (DOM Tree, CSSOM Tree 생성) 
  2. 두 Tree를 결합하여 Rendering Tree를 만듭니다. (Style)
  3. Rendering Tree에서 각 노드의 위치와 크기를 계산합니다. (Layout Reflow)
  4. 계산된 값을 이용해 각 노드를 화면상의 실제 픽셀로 변환하고, 레이어를 만듭니다. (RePaint)
  5. 자바스크립트 실행 및 이벤트 처리를 합니다.
  6. 리플로우와 리페인트 최적화 합니다.
  7. 레이어를 합성하여 실제 화면에 나타냅니다. (Composite)

📌 Parsing (파싱)이란 무엇인가요? 

브라우저가 코드를 이해하고 사용할 수 있는 구조로 변환하는 것을 의미하며, 파싱 결과는 보통 노드 트리, 파싱 트리, 문법 트리라고 부릅니다. 

🧑🏻‍💻 Webpack, Babel, Polyfill에 대해 설명해 주세요.

Webpack, Babel, Polyfill 모두 웹 개발에서 자주 사용되는 도구 및 기술로, JavaScript 코드의 번들링, 변환 및 호환성을 향상 시키는 데 사용됩니다. 

📌 Webpack?

Webpack은 모듈 번듈러로, 여러 개의 JS 파일 및 다른 종속성 파일을 하나의 번들 파일로 결합할 때 사용합니다.

Webpack의 기능으로는 코드 스플리팅, 모듈 로딩, 번들 최적화, CSS 번들링, 이미지 및 리소스 관리 등이 있습니다.

📌 Babel?

Babel은 JavaScript 코드 변환 도구로, 최신 버전의 JavaScript 문법을 이전 버전으로 변환하여 여러 브라우저 및 환경에서 호환성을 확보합니다. 주로 ES6(ES2015) 이상의 문법을 ES5로 변환하는 데 사용합니다.

📌 Polyfill?

Polyfill은 브라우저 호환성을 향상시키기 위해 사용되는 코드 조각이나 라이브러리입니다. Polyfill은 오래된 브라우저에서 지원하지 않는 기능을 구현하거나 대체하여 웹 애플리케이션이 다양한 환경에서 동작할 수 있도록 합니다. 

⭐️ 🧑🏻‍💻 리플로우, 리페인트에 대해 설명해 주세요.

리플로우(Reflow)와 리페인트 (Repaint)는 웹 페이지의 레이아웃과 시각적 표현을 업데이트하는데 관련된 프로세스입니다. 

이 두 프로세스는 웹 브라우저가 웹 페이지를 렌더링 할 때 발생하는 중요한 작업입니다. 

 

👉 리플로우(Reflow)

  • 리플로우는 웹 페이지의 레이아웃을 계산하고 업데이트하는 프로세스입니다. 레이아웃은 요소의 크기, 위치, 여백 등과 관련이 있습니다.
  • 리플로우는 웹 페이지의 초기 렌더링, 윈도우 크기 변경, 요소의 크기 또는 위치 변경, 폰트 크기 변경 등과 같이 레이아웃에 영향을 미치는 변경 사항이 발생할 때 발생합니다.
  • 리플로우가 발생하면 브라우저는 해당 요소 및 해당 부모와 자식 요소의 크기와 위치를 다시 계산하고, 이에 따라 레이아웃을 조정합니다. 이 프로세스는 비용이 많이 들며, 성능에 영향을 줄 수 있습니다.

👉 리페인트 (Repaint)

  • 리페인트는 웹 페이지의 시각적 표현을 업데이트하는 프로세스입니다. 리페인트는 레이아웃 변경 없이 요소의 스타일 변경(색상, 배경, 텍스트 스타일 등)과 같은 시각적 속성 변경에 의해 발생할 수 있습니다.
  • 리페인트는 리플로우보다 비교적 가벼운 작업이며, 웹 페이지의 시각적 업데이트를 담당합니다.
  • 리페인트가 발생하면 브라우저는 화면에 나타내는 요소의 시각적 모습을 다시 그립니다.

이러한 리플로우와 리페인트 작업은 웹 페이지의 성능에 영향을 미칩니다.

⭐️ 🧑🏻‍💻 REST가 무엇인지 설명해 주고, 장단점에 대해 알려주세요.

REST (Representational State Transfer)는 웹에서 데이터를 주고받기 위한 아키텍처입니다.  URI로 자원을 명시하고, HTTP 메서드로 CRUD 연산을 합니다. 그리고 HTTP를 따르는 모든 플랫폼에서 별도의 인프라 구축 없이 REST를 사용할 수 있습니다. 그래서 웹 외에도 iOS, 안드로이드 등 다양한 플랫폼과 디바이스가 등장하면서 범용으로 사용할 수 있다는 장점이 부각되고 있습니다. 하지만 HTTP 메서드를 사용해야 해서 사용 가능한 연산이 한정적이라는 단점이 있습니다. 

 

👉 REST : 자원을 명시해 연산을 수행하고 상태를 주고받는 것 

👉 CRUD

  • Create - POST
  • Read - GET
  • Update - UPDATE
  • Delete - DELETE

📌  REST API가 무엇인가요?

REST API는 REST를 기반으로 한 API를 뜻합니다. REST API는 자원, 행위, 표현으로 구성됩니다. 

REST API에서 자원의 식별은 URI로 하고, 자원에 대한 행위(처리)는 HTTP 메서드로 나타냅니다. 그리고 전달되는 데이터는 JSON 또는 XML 등으로 표현합니다.

 

👉 REST API 작동 방식

  1. 클라이언트가 URI로 식별한 자원에 대해 HTTP 메서드를 사용해 REST API로 요청합니다.
  2. REST API가 HTTP 요청 메시지에 실려 서버에 전달됩니다.
  3. 서버에서는 수신한 HTTP 요청 메시지를 바탕으로 요청 사항을 확인해 처리하고 HTTP 응답을 반환합니다. 응답에는 요청에 대한 처리 성공 여부와 정보를 포함합니다.
  4. 응답 메시지는 자원에 대한 정보를 JSON 또는 XML 등의 형태로 포함하고 있습니다. 클라이언트는 형태의 정보를 수신합니다.

⭐️ 🧑🏻‍💻 CORS에 대해 설명해 주세요.

CORS는 Cross Origin Resource Sharing의 약자입니다. CORS에 대해 설명하기 전에 SOP (Same Origin Policy)에 대해 알아야 합니다.

 

origin protocol host 합친 것입니다.

 

즉, SOP는 같은 origin 끼리만 데이터를 송수신하고자 하는 동일 출처 정책입니다.

 

클라이언트에서 도메인이 다른 서버에서 제공하는 API를 사용하는 일이 많아졌는데, 이 동일 출처 정책을 지키기 위해 나온 것이 CORS입니다.

CORS는 한 도메인 또는 origin의 웹 페이지가 다른 도메인 (도메인 간 요청)을 가진 리소스에 액세스 할 수 있게 하는 보안 메커니즘입니다.

 

예를 들어, 리액트로 개발 중인 클라이언트 서버와 서버 간의 origin이 다르게 되면 CORS 에러가 발생하게 됩니다. 

대표적인 해결 방법으로는 CRA (Create React APP)에서는 package.json에서 Proxy 설정을 하여 해결합니다

⭐️ 🧑🏻‍💻 쿠키와 세션에 대해 설명해 주세요. 

쿠키와 세션 모두 HTTP 통신의 특징인 비연결성과 무상태의 단점을 보완하기 위해 사용합니다. 쿠키는 브라우저에 저장되는 키와 값이 들어 있는 데이터 파일입니다. 이는 서버에서 클라이언트에 대한 정보를 저장하지 않아도 쿠키를 이용해 정보를 재사용할 수 있게 합니다. 예를 들어, 웹 사이트의 로그인 인증 정보, 온라인 쇼핑몰의 장바구니 정보 등이 있습니다. 

 

세션은 쿠키와 비슷하게 데이터를 저장하는 방식이지만 키와 값은 클라이언트에, 데이터는 서버에 저장해서 쿠키보다 보안에 강하다는 특징이 있지만, 사용자가 많아질수록 서버 메모리를 많이 차지합니다.

🧑🏻‍💻 JWT 뭔가요

JWT는 JSON 웹 토큰으로 인증 및 권한 부여의 목적으로 사용됩니다. 

JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 

  • 헤더 (Header) : 서명을 생성하는 데 사용되는 토큰 유형 및 해싱 알고리즘에 대한 정보가 포함되어 있습니다.
  • 페이로드(Payload) : 토큰이 전달하는 클레임 또는 데이터가 포함됩니다.
  • 서명(Signature) : 전송 중에 토큰이 변조되지 않았는지 확인하는 데 사용됩니다.

JWT는 일반적으로 웹 애플리케이션 및 API에서 클라이언트와 서버 간에 사용자 데이터를 안전하게 전송하는 수단으로 사용됩니다. 토큰은 서버에서 생성되어 저장되는 클라이언트로 전송됩니다. 그런 다음 클라이언트는 각 후속 요청과 함께 토큰을 전송하여 서버가 사용자 이름과 암호를 계속 확인하지 않고도 사용자를 인증하고 권한을 부여할 수 있도록 합니다.

 

JWT는 독립형으로 설계되었으며 세션 데이터의 서버 측 스토리지가 필요하지 않으므로 분산 시스템에서 보다 확장 가능하고 사용하기 쉽습니다.

https://velog.io/@leemember/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-%EA%B8%B0%EC%88%A0-%EB%A9%B4%EC%A0%91-%EB%8B%A8%EA%B3%A8-%EA%B0%9C%EB%85%90%EB%93%A4-%EC%A0%95%EB%A6%AC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-CS-%ED%8E%B8-%EA%B7%B8-%EC%99%B8-%EC%A7%88%EB%AC%B8

왼쪽이 토큰 정보이고, 오른쪽이 토큰 암호를 복호화시켜 나온 정보입니다.

📌 JWT 토큰을 쿠키에 저장했을 초래할 있는 취약점에 대해 설명해 주세요

 XSS(Cross-Site Scripting) 취약점이 있어, 해커가 악의적인 스크립트를 삽입하여 쿠키에 저장된 JWT를 탈취하고 다른 사용자처럼 웹 애플리케이션에 로그인할 수 있습니다.

 

또한, JWT 토큰을 쿠키에 저장하면, 브라우저는 해당 도메인에 대한 모든 요청에 자동으로 쿠키를 첨부합니다. 이는 원치 않는 동작을 유발할 수 있으며, CSRF 공격에 취약할 수 있습니다.

📌  XSS CSRF 무엇인가요? 그리고 차이점에 대해 설명해 주세요 

👉 XSS ( 사이트 간 스크립팅 : Cross-Site-Scripting )

웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점으로 발생되는 공격입니다.

https://dar0m.tistory.com/246

👉 CSRF ( Cross- Site-Request-Forgery )

사용자가 자신의 의지와는 무관하게 공갹자가 의도한행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말합니다.

https://dar0m.tistory.com/246

👉 차이점

XSS는 공격 대상이 Client이고, CSRF는 Server 입니다.

 

XSS는 사용자가 특정 웹사이트를 신용하는 점을 노린 것이라면, 

CSRF는 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것입니다. 

 

XSS는 사이트변조나 백도어를 통해 클라이언트에 대한 악성 공격을 시도합니다.

CSRF는 요청을 위조하여 사용자의 권한을 이용해 서버에 대한 악성 공격을 시도합니다.

⭐️ 🧑🏻‍💻 크로스 브라우징에 대해 설명해 주시고, 해결해 경험이 있다면 말해주세요

크로스 브라우징(Cross-Browsing)은 웹 개발에서 중요한 개념으로, 다양한 웹 브라우저와 버전에서 웹 사이트 또는 웹 애플리케이션이 일관된 방식으로 작동하도록 보장하는 작업을 의미합니다. 웹 브라우저는 다양한 엔진과 렌더링 엔진을 사용하며, 이로 인해 웹 페이지가 다르게 렌더링되거나 동작하는 문제가 발생할 수 있습니다. 

 

크로스 브라우징을 고려하는 주요 작업 및 고려 사항은 다음과 같습니다.

  • HTML,CSS 및 JavaScript 표준 준수 
  • 브라우저 특정 CSS 및 JavaScript 대응 ( CSS webkit )
  • 폴리필 사용
  • 미디어 퀴리 및 반응형 디자인 
  • 접근성 고려 ( 장애인을 고려한 태그 사용 ) 

⭐️ 🧑🏻‍💻 객체 지향 프로그래밍이 무엇인가요? 

객체 지향 프로그래밍(OOP, Object-Oriented Programming)은 소프트웨어 개발 패러다임 중 하나로, 현실 세계의 객체(Object)와 그 객체들 간의 상호 작용을 모델링하고 프로그래밍하는 방법론입니다. OOP는 소프트웨어의 구조화와 재사용성을 증가시키며 코드의 가독성과 유지 보수성을 향상시키는 데 도움을 줍니다.

📌 객체 지향 프로그래밍의 주요 특징 

객체(Object): 현실 세계의 개념 또는 사물을 프로그래밍에 적용한 것으로, 데이터와 그 데이터를 조작하는 메서드(함수)로 구성됩니다. 객체는 클래스(Class)를 기반으로 생성됩니다.

클래스(Class): 객체의 설계도 또는 템플릿으로, 객체를 생성하기 위한 구조와 행위(데이터와 메서드)를 정의합니다. 클래스는 객체를 생성하기 위한 틀로서 다수의 객체를 생성할 수 있습니다.

캡슐화(Encapsulation): 객체의 상태(데이터)와 행위(메서드)를 하나로 묶고, 외부에서 직접 접근하지 못하도록 보호합니다. 객체의 내부 구현은 숨기고, 외부에 필요한 인터페이스만 제공합니다.

상속(Inheritance): 클래스 간의 상속 관계를 통해 부모 클래스(슈퍼 클래스)의 특성을 자식 클래스(서브 클래스)가 상속받을 수 있습니다. 이로써 코드의 재사용성을 증가시키고 계층 구조를 형성할 수 있습니다.

다형성(Polymorphism): 다양한 객체가 동일한 인터페이스를 사용하거나 동일한 메서드를 호출할 수 있는 능력을 가리킵니다. 다형성은 인터페이스를 통해 구현되며, 메서드 오버라이딩(Overriding)과 메서드 오버로딩(Overloading)을 통해 구현됩니다.

👉 장점


모듈화(Modularity): 코드를 객체 단위로 모듈화하므로 유지 보수가 쉽고 코드 재사용성이 높습니다.

코드 가독성 및 유지 보수성: 객체 지향 프로그래밍은 현실 세계 개념을 모델링하므로 코드의 가독성이 높고 유지 보수가 쉽습니다.

재사용성: 클래스와 객체의 재사용을 통해 개발 시간을 단축하고 효율적으로 코드를 작성할 수 있습니다.

확장성(Scalability): 객체 지향 프로그래밍은 새로운 클래스와 객체를 추가하거나 기존 클래스를 수정하여 소프트웨어를 확장하기 쉽습니다.

설계의 용이성: 객체 지향 설계는 현실 세계의 개념을 반영하므로 프로그램의 설계와 구조를 용이하게 만듭니다.

👉 단점

복잡성: 큰 규모의 시스템에서 객체 지향 프로그래밍은 복잡성을 증가시킬 수 있습니다.

성능 저하: 일부 상황에서는 객체 지향 프로그래밍이 프로그램 실행 속도를 늦출 수 있습니다.

학습 곡선: 객체 지향 프로그래밍은 초기 학습 곡선이 높을 수 있으며, 올바른 객체 지향 설계를 위한 경험이 필요합니다.

객체 지향 프로그래밍은 프로그램의 구조와 설계를 개선하며 유지 보수성과 재사용성을 증가시키는 데 도움이 되는 중요한 개념입니다. 그러나 프로젝트의 특성과 요구사항에 따라 객체 지향을 적절히 활용해야 합니다.

⭐️ dependencies devDependencies 차이에 대해 설명해 주세요.

dependencies와 devDependencies는 Node.js 및 JavaScript 프로젝트에서 사용되는 두 가지 종류의 종속성(의존성)을 관리하는 데 사용되는 용어입니다.

 

dependencies의 경우 애플리케이션과 직관되어 있는, 화면에 영향을 미치는 라이브러리 같은 것을 설치하고, devDependencies의 경우 webpack, js-compress, sass 등 개발을 할 때 도움을 주는 개발용 라이브러리를 설치합니다.

 

devDependencies 있는 라이브러리는 배포시 설치되지 않습니다.

🧑🏻‍💻 네트워크

⭐️ 🧑🏻‍💻 HTTP에 대해 설명해 주세요.

HTTP (HyperText Transfer Protocol)는 데이터 전송을 위한 클라이언트-서버 구조의 요청 / 응답 프로토콜로, TCP/IP 4계층에서 응용 계층에 속합니다. HTTP는 비연결성과 무상태라는 두 가지 특징이 있습니다. 첫 번째로 비연결성은 클라이언트의 요청에 대해 서버가 응답한 후 연결을 끊는다는 것입니다. 이를 보완하기 위해 HTTP Keep Alive를 사용합니다. 두 번째로 무상태는 서버에서 클라이언트의 상태에 대한 데이터를 저장하지 않는다는 것입니다. 이러한 단점을 보완하기 위해 쿠키와 세션을 사용합니다. 

 

👉 TCP/IP 4계층

(왼쪽에서 오른쪽으로 갈수록 하단)

HTTP : 응용 계층 -> 전송 계층 -> 인터넷 계층 -> 네트워크/인터페이스 계층 

HTTPS : 응용 계층 -> 보안 계층 -> 전송 계층 -> 인터넷 계층 -> 네트워크/인터페이스 계층 

📌 HTTP Keep Alive에 대해 설명해 주세요.

HTTP Keep Alive는 클라이언트와 서버 간에 연결을 유지하기 위한 하나의 방법입니다. HTTP Keep Alive는 HTTP 프로토콜의 연결을 정해진 시간 동안 유지하는 방식으로, 정해진 시간이 끝나면 연결을 해지합니다. 이런 방식을 통해 클라이언트와 서버 간에 불필요한 연결과 해체의 반복을 줄일 수 있습니다.

📌 HTTP HTTPS 차이점에 대해 설명해 주세요.

HTTP와 HTTPS는 인터넷상에서 데이터를 송수신하기 위한 클라이언트-서버 구조의 통신 프로토콜입니다. 

 

HTTP와 달리 HTTPS에는 보안 계층의 암호화 프로토콜인 SSL/TSL가 있어서 전송하려는 데이터를 암호화해 보호할 수 있습니다. 이런 특징은 인터넷 쇼핑이나 인터넷 뱅킹등 민감한 정보를 사용하는 웹 사이트에서 중요한 요소입니다. 

📌 HTTPS에서 사용하는 암호화 방식에 대해 설명해 주세요.

HTTPS는 보안 계층의 암호화 프로토콜인 SSL/TLS에서 암호화가 이뤄집니다. 사용하는 암호화 방식으로는 대칭 키 암호화 방식과 공개 키 암호화 방식이 있습니다. 

대칭 키 암호화 방식은 데이터의 송신자와 수신자 모두 대칭 키를 이용해 데이터를 암호화 및 복호화하는 방식입니다. 반면, 공개 키 암호화 방식은 공개 키로 데이터를 암호화하고 비밀 키로 데이터를 복호화하는 방식입니다. SSL/TSL에서는 대칭 키로 데이터를 암호화하는데, 이때 대칭 키가 공개되므로 데이터가 유출되는 것을 막기 위해 대칭 키를 공개 키 암호화 방식으로 암호화합니다.

📌 HTTP Status Code 대해 설명해 주세요.

HTTP Status Code ( HTTP 상태 코드 )는 클라이언트의 요청에 대한 서버의 상태를 알려 주는 코드로, 세 자리 숫자로 표현 할 수 있습니다. 그리고 코드의 시작 숫자로 의미를 알 수 있습니다.

  • 1xx : 클라이언트로부터 요청을 받아 처리 중 
  • 2xx : 요청을 성공적으로 처리함
  • 3xx : 요청을 처리하기 위해 추가 처리 필요
  • 4xx : 클라이언트 오류
  • 5xx : 서버 오류 

🧑🏻‍💻 자료구조

 

🧑🏻‍💻 배열과 연결 리스트의 차이점을 설명해 주세요.

배열과 연결 리스트는 데이터를 저장하기 위한 자료구조로, 데이터 저장 방식에 큰 차이가 있습니다. 배열은 연속된 메모리 공간에 데이터를 저장합니다. 그래서 특정 인덱스의 데이터에 한 번에 접근할 수 있어서 읽는 속도가 빠릅니다. 하지만 데이터 삭제 또는 삽입 시 요소들의 인덱스를 수정해야 해서 비교적 시간이 오래 걸립니다. 반면에 연결 리스트는 노드를 이용해 메모리 공간에 데이터를 불연속적으로 저장합니다. 각 노드는 데이터와 다음 노드의 주소 값을 저장하고 있어서 다른 노드에 접근할 수 있습니다. 배열과 달리 인덱스가 없으므로 한 번에 특정 데이터에 접근할 수 없지만, 데이터의 삽입과 삭제 시 노드가 기리키는 주소 값만 변경하면 되어서 속도가 빠르다는 장점이 있습니다.

 

🧑🏻‍💻 스택은 어떤 경우에 주로 사용하나요?

스택은 데이터가 쌓이는 구조로 후입선출의 특징이 있습니다. 그래서 주로 마지막에 수행한 작업으로 돌아가야 할 때 자주 사용합니다. 예를 들어, 웹 브라우저에서 뒤로가기 버튼을 눌러 앞에 열었던 페이지를 다시 열거나 작업 프로그램에서 실행 취소 기능을 수행해 마지막 상태로 돌아가야 하는 상황이 있습니다. 이외에도 프로그램을 실행할 때 함수를 수행한 후 돌아가야 하는 주소 값을 저장하는 용도로 사용하기도 합니다.

 

🧑🏻‍💻 큐를 스택으로 구현하는 방법에 대해 설명해 주세요.

큐는 선입선출, 스택은 후입선출 방식이므로 스택 2개를 사용해 큐를 구현할 수 있습니다. 우선 데이터 전체를 첫 번째 스택에 넣습니다. 이때 데이터는 역순으로 뒤집히게 됩니다. 이 데이터를 다시 두 번째 스택에 넣으면 마지막 데이터부터 첫 번째 데이터 순으로 쌓이게 됩니다. 따라서 두 번째 스택에서 pop 연산을 하면 선입선출을 구현할 수 있습니다. 

 

🧑🏻‍💻 우선순위 큐가 무엇인가요?

우선순위 큐는 우선순위가 높은 데이터부터 꺼내는 자료구조로, 각 요소가 우선순위를 가집니다. 우선순위 큐를 활용해 정렬하거나 다익스트라 알고리즘을 구현할 때 사용합니다. 우선순위 큐는 주로 힙을 이용해 구현합니다.

 

🧑🏻‍💻 힙이란 무엇인가요?

힙은 완전 이진 트리의 한 종류로, 최대 힙과 최소 힙이 있습니다. 최대 힙은 부모 노드가 자식 노드의 값보다 크다는 조건을 갖습니다. 최소 힙은 부모 노드가 자식 노드의 값보다 작습니다. 최대 힙과 최소 힙을 이용해 최댓값과 최솟값을 빠르게 찾을 수 있어서 우선순위 큐를 구현하거나 힙 정렬을 하는데 주로 사용합니다. 

 

🧑🏻‍💻 이진 탐색 트리, 포화 이진 트리, 완전 이진 트리의 차이점은 무엇인가요?

👉 이진 트리 : 자식 노드의 개수가 최대 2개인 트리 

 

3가지 모두 이진 트리이지만, 서로 다른 특징이 있습니다. 먼저 이진 탐색 트리는 모든 노드에 대해 왼쪽 서브 트리는 해당 노드보다 작은 값을 가지고, 오른쪽 서브 트리는 해당 노드보다 큰 값을 가집니다. 포화 이진 트리는 트리의 마지막 레벨까지 모든 노드가 채워져 있습니다. 마지막으로 완전 이진 트리는 트리의 마지막 레벨을 제외한 나머지 레벨에 모든 노드가 채워져 있으며, 마지막 레벨은 왼쪽에서 오른쪽으로 노드가 채워져 있습니다.

 

🧑🏻‍💻 트리와 그래프의 차이점은 무엇인가요?

그래프는 정점과 간선으로 구성된 자료구조입니다. 방향 그래프와 무방향 그래프 모두 존재하며, 사이클은 있을 수도, 없을 수도 있습니다. 또한, 계층 관계가 없습니다. 반면에 트리는 그래프의 한 종류로, 방향성이 있으면서 사이클이 존재하지 않습니다. 또한, 계층 관계가 있어서 부모 노드와 자식 노드라는 관계성과 루트 노드라는 개념이 존재합니다.

 

🧑🏻‍💻 BFS ( 너비 우선 탐색 ) 과 DFS ( 깊이 우선 탐색 ) 의 차이점은 무엇인가요?

두 그래프 모두 탐색을 수행할 때 사용합니다. BFS는 너비 우선 탐색으로, 하나의 노드에서 시작해 가까운 노드들을 먼저 탐색합니다. 큐로 구현할 수 있고, 비가중치 그래프에서 각 노드까지의 최단 거리를 알 수 있습니다. DFS는 깊이 우선 탐색으로, 하나의 노드에서 시작해 최대 깊이까지 탐색을 수행합니다. 스택 또는 재귀 함수로 구현할 수 있습니다. 

 

🧑🏻‍💻 해시 테이블이란 무엇인가요?

해시 테이블은 키와 값을 저장하고 있는 자료구조입니다. 해시 함수로 키에 대한 해시를 얻을 있는데, 해시는 해시 테이블에서 값이 저장되어 있는 인덱스입니다. 해시 테이블은 O(1)이라는 빠른 시간 안에 해시 함수를 통해 원하는 값에 접근할 있는 특징이 있습니다. 하지만 서로 다른 키를 넣었을 동일한 값이 나오는 해시 충돌이 발생할 있다는 단점도 있습니다.

'이모저모 > 면접 준비' 카테고리의 다른 글

[면접 준비] React  (0) 2023.09.27
[면접 준비] HTML / CSS  (0) 2023.09.27
[면접 준비] JavaScript / TypeScript  (0) 2023.07.14
Comments