헷갈리는 기술면접 정리

강준호·2023년 12월 4일
0

기술면접

목록 보기
1/9

API 란?

  • 다양한 소프트웨어 프로그램이 서로 상호 작용하고 통신할 수 있도록 하는 중개자 역할

Restful API 란?

  • Get,Post,Put 등의 표준 HTTP 메소드를 통해 자원을 처리하도록 설계한 API

Restful 하게 API 를 디자인 한다?

  • 리소스와 행위를 명시적이고 직관적으로 분리
  • 메세지는 헤더와 바디를 명확하게 분리해서 사용
  • 서버와 클라이언트가 같은 방식을 사용해서 요청하도록 한다.

Restful API vs HTTP API

Restful API

  • 표준 HTTP 방법을 사용하며, 일반적으로 JSON 또는 XML 을 처리하며 확장성과 단순성을 위해 설계되었음.

HTTP API

  • HTTP를 통해 통신하는 모든 API
  • HTTP를 통해 모든 데이터 형식을 사용할 수 있으며 Restful API 보다 더 유연하며, 제약이 없다.

본질적으로 Restful API < HTTP API 이다. (부분집합)


객체지향 프로그래밍?

  • 인간 중심적 프로그래밍. 현실 세계 사물들을 객체로 보고 그 특징들을 뽑아와 프로그래밍 하는것

MVC 란?

  • 어플리케이션을 model,view, controller 로 나눠, 각각 맡은 바에만 집중 할 수 있게한 디자인 패턴.

CORS 에러란?

  • 웹 브라우저의 보안기능. 웹페이지가 웹페이지를 제공한 도메인과 다른 도메인에 요청하는 것을 방지합니다.

  • 웹페이지가 기존 출처와 다른 도메인에서 요청이 들어오면 이를 차단함.

해결방안

  • 서버 측에서 적절한 CORS 헤더를 추가함으로 해결. 도메인 요청을 허용하도록 설정.

네트워크

HTTPS란?

  • 컴퓨터 네트워크, 특히 인터넷을 통한 보안 통신에 사용되는 HTTP의 보안 버전입니다.
  • 사용자의 브라우저와 웹 서버 간에 교환되는 데이터를 암호화하여 도청, 변조 및 중간자 공격으로부터 데이터의 무결성과 기밀성을 보호합니다.
  • 이는 SSL/TLS 프로토콜을 사용하여 달성됩니다.

GET, POST 방식의 차이점

GET

  • GET 매개변수가 URL에 추가되어 표시됩니다.
  • 지정된 리소스에서 데이터를 요청하는 데 사용
  • GET에는 데이터 크기 제한이 있습니다.
  • GET 요청을 캐시할 수 있습니다.

POST

  • 지정된 리소스에 데이터를 제출하는데 사용
  • POST 매개변수는 요청 본문에 있으며 URL에는 표시되지 않습니다.
  • POST에는 데이터 크기 제한이 없습니다.
  • POST 요청은 일반적으로 캐시되지 않습니다.

데이터베이스

데이터베이스 정규화란?

  • 테이블간 데이터의 중복성과 종속성을 최소화하는 것.
  • 데이터 중복을 제거한다면 무결성을 유지할 수 있고, DB 저장 용량 또한 효율적으로 관리할 수 있다.

1정규화

  • 테이블이 원자 값을 갖도록 분리시키는것

2정규화

  • 테이블의 모든 속성이 완전히 기능적으로 종속되도록

3정규화

  • 2정규화에 서로 독립적인지 확인

DB 트랜잭션이란?

  • 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위.
  • 주요 속성은 ACID 라고도 불림

CRUD 란?

  • CRUD는 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete)를 의미합니다. 영구 데이터베이스나 데이터 저장 시스템의 기본 동작을 설명하는 데 사용되는 용어

RDBMS vs NoSQL

RDBMS

  • 데이터가 행과 열이 있는 구조화된 스키마.
  • 일관성 및 트랜잭션 좋음
  • MySQL

NoSQL

  • 스키마가 없음. 다양한 방식으로 데이터를 저장 가능
  • 확장성 좋음, 유연함
  • ex) MongoDB

Git vs Github

Git

  • 버전 제어에 사용하는 도구,시스템

Github

  • 코드를 원격 및 공동으로 저장하기 위해 Git을 이용한 호스팅 서비스

OS

프로세스 vs 쓰레드

프로세스

  • 실행중인 컴퓨터 프로그램의 인스턴스
  • 독립적인 실행

쓰레드

  • 운영체제에서 예약할 수 있는 가장 작은 처리단위.
  • 프로세스의 실행 단위
  • 병렬적인 실행

힙 vs 스택

  • 컴파일 시 크기를 알 수 없는 변수 및 오랫동안 지속되어야 하는 개체에 대한 동적 메모리 할당에 사용됩니다.

스택

  • 지역 변수 및 함수 호출 관리를 위한 정적 메모리 할당에 사용됩니다.

Spring

JDBC vs JPA

JDBC

  • 데이터베이스에서 쿼리를 연결하고 실행하기 위한 Java의 API
  • Java 코드로 SQL 쿼리를 작성.
  • SQL 쿼리를 직접 처리함으로 특정 작업의 성능이 더 높아질 수 있음

JPA

  • ORM(데이터베이스의 데이터를 객체에 매핑하는 방법)
  • 쿼리가 아닌 Java 객체로 직접 작업이 가능.

쿠버네티스란?

  • 복잡한 컨테이너화된 애플리케이션을 관리하고 자동화 및 확장성을 제공하는 강력한 도구

Nginx (cf. Tomcat, Apache)

  • 웹서버. 웹 컨텐츠를 제공하며, 역방향 프록시로 사용.
  • 높은 트래픽을 효율적으로 처리

애자일 방법론?

  • 협업과 고객 피드백에 초점을 맞춘. 소프트웨어 개발에 대한 유연하고 반복적인 접근 방식

스크럼 기법

  • 특정 역할과 구조화된 타임라인을 통해 작업을 작고 관리 가능한 증분으로 구성하는 Agile 내의 프레임워크

ZEP 면접

프로세스와 스레드 차이?

네, 프로세스와 스레드의 차이에 대해 설명드리겠습니다.

프로세스 (Process):
1. 정의: 프로세스는 실행 중인 프로그램의 인스턴스로, 운영체제에서 독립적으로 실행되는 작업 단위입니다.
2. 독립성: 각 프로세스는 독립적인 메모리 공간을 가지고 있으며, 다른 프로세스와 직접적으로 메모리를 공유하지 않습니다. 이로 인해 안정성이 높아지지만, 통신이 비교적 복잡합니다.
3. 자원: 프로세스는 운영체제에서 CPU 시간, 메모리 등 자원을 할당받습니다. 새로운 프로세스를 생성하는 데는 많은 오버헤드가 발생합니다.
4. 통신: 프로세스 간 통신(IPC, Inter-Process Communication)은 파이프, 소켓, 공유 메모리 등을 통해 이루어지며, 비교적 비용이 많이 듭니다.

스레드 (Thread):
1. 정의: 스레드는 프로세스 내에서 실행되는 더 작은 실행 단위로, 프로세스의 자원을 공유합니다. 하나의 프로세스는 여러 스레드를 가질 수 있습니다.
2. 공유: 같은 프로세스 내의 스레드들은 동일한 메모리 공간을 공유하기 때문에, 데이터 공유가 쉽고 빠릅니다. 하지만 이로 인해 동기화 문제가 발생할 수 있습니다.
3. 자원: 스레드는 같은 프로세스의 자원을 공유하기 때문에, 새로운 스레드를 생성하는 데 드는 비용이 상대적으로 적습니다.
4. 통신: 스레드 간 통신은 같은 메모리 공간을 사용하기 때문에 매우 빠르고 효율적입니다. 그러나 동기화 문제를 해결하기 위해 잠금(lock) 등의 기법을 사용해야 합니다.

요약하면, 프로세스는 독립적인 실행 단위로 각각의 메모리 공간을 가지며, 스레드는 프로세스 내에서 실행되는 경량화된 실행 단위로, 메모리를 공유하지만 동기화 이슈가 있을 수 있습니다. 프로세스는 안정성이 높고, 스레드는 효율성이 높습니다.

데드락이란 무엇이며 이것의 발생원인은?

데드락(Deadlock):
데드락은 두 개 이상의 프로세스나 스레드가 서로의 작업이 끝나기를 무한정 기다리는 상태를 말합니다. 이로 인해 시스템이 멈추고 아무런 작업도 진행되지 않는 상태가 됩니다.

데드락의 발생 원인:
데드락이 발생하기 위해서는 다음 네 가지 조건이 동시에 만족되어야 합니다. 이를 '교착 상태 발생 조건'이라고 합니다.

  1. 상호 배제 (Mutual Exclusion):

    • 자원은 한번에 하나의 프로세스만 사용할 수 있어야 합니다. 다른 프로세스가 그 자원을 사용하려면 반드시 그 자원이 해제될 때까지 기다려야 합니다.
  2. 점유와 대기 (Hold and Wait):

    • 최소한 하나의 자원을 점유한 상태에서 다른 자원을 요청하며 기다리는 프로세스가 있어야 합니다. 즉, 자원을 점유하고 있는 동안 다른 자원을 기다리는 상황입니다.
  3. 비선점 (No Preemption):

    • 자원을 강제로 빼앗을 수 없어야 합니다. 프로세스는 스스로 자원을 해제할 때까지 그 자원을 계속 가지고 있어야 합니다.
  4. 순환 대기 (Circular Wait):

    • 두 개 이상의 프로세스가 자원을 대기하면서 원형 대기 관계를 이루어야 합니다. 예를 들어, 프로세스 A가 자원 1을 가지고 있고 자원 2를 기다리고, 프로세스 B가 자원 2를 가지고 있고 자원 3을 기다리고, 프로세스 C가 자원 3을 가지고 있고 자원 1을 기다리는 상황입니다.

데드락의 예시:
가장 간단한 예시로는 두 개의 프로세스가 두 개의 자원을 점유하고 대기하는 상황을 들 수 있습니다.

  • 프로세스 A가 자원 1을 점유하고 자원 2를 요청합니다.
  • 프로세스 B가 자원 2를 점유하고 자원 1을 요청합니다.
    이 경우, 두 프로세스는 서로의 자원이 해제될 때까지 무한정 기다리게 되어 데드락 상태가 발생합니다.

데드락의 해결 방법:
데드락을 해결하거나 방지하기 위한 방법으로는 다음과 같은 기법들이 있습니다.
1. 데드락 예방(Prevention):

  • 네 가지 조건 중 하나 이상을 만족하지 않도록 시스템을 설계합니다.
  1. 데드락 회피(Avoidance):

    • 자원 할당 상태를 감시하고, 데드락이 발생하지 않도록 자원을 할당합니다. 은행원 알고리즘(Banker's Algorithm)이 대표적입니다.
  2. 데드락 탐지(Detection) 및 복구(Recovery):

    • 시스템에서 데드락이 발생하는지 주기적으로 검사하고, 데드락이 발생하면 이를 해결하기 위해 프로세스를 종료하거나 자원을 강제로 해제합니다.

이와 같은 방법들을 통해 데드락을 방지하거나 해결할 수 있습니다.

해쉬맵과 트리맵 차이?

HashMap:
1. 기본 구조: HashMap은 해시 테이블(Hash Table)을 기반으로 구현된 맵(Map)입니다. 키-값 쌍(key-value pair)을 해시 함수를 통해 저장합니다.
2. 순서 보장: HashMap은 저장된 요소의 순서를 보장하지 않습니다. 요소들이 추가된 순서와 상관없이 임의의 순서로 저장됩니다.
3. 성능: 평균적으로 O(1)의 시간 복잡도로 요소에 접근할 수 있습니다. 그러나 해시 충돌이 발생하면 최악의 경우 O(n)이 될 수 있습니다.
4. null 허용: HashMap은 하나의 null 키와 여러 개의 null 값을 허용합니다.
5. 용도: 빠른 검색, 삽입, 삭제가 중요한 경우에 사용됩니다.

TreeMap:
1. 기본 구조: TreeMap은 레드-블랙 트리(Red-Black Tree)라는 이진 검색 트리(Binary Search Tree)를 기반으로 구현된 맵입니다. 키-값 쌍을 정렬된 순서로 저장합니다.
2. 순서 보장: TreeMap은 키의 자연 순서(Natural Order) 또는 생성 시 제공된 비교자(Comparator)에 따라 요소의 순서를 보장합니다.
3. 성능: O(log n)의 시간 복잡도로 요소에 접근할 수 있습니다. 이는 트리 구조의 높이에 따라 성능이 결정됩니다.
4. null 허용: TreeMapnull 키를 허용하지 않습니다. null 값을 여러 개 허용할 수 있습니다.
5. 용도: 키를 정렬된 순서로 유지해야 하는 경우에 사용됩니다.

차이점 요약:

  • 구조: HashMap은 해시 테이블, TreeMap은 레드-블랙 트리 기반.
  • 순서: HashMap은 순서를 보장하지 않음, TreeMap은 키의 정렬된 순서를 보장.
  • 성능: HashMap은 평균 O(1) 접근 시간, TreeMap은 O(log n) 접근 시간.
  • null 허용: HashMapnull 키와 null 값을 허용, TreeMapnull 키를 허용하지 않음.

예를 들어, 데이터가 삽입된 순서나 정렬된 순서가 필요 없고 빠른 접근이 필요한 경우 HashMap을 사용하고, 키의 정렬된 순서가 필요하거나 범위 검색이 필요한 경우 TreeMap을 사용하는 것이 좋습니다.

브라우저에서 스토리지의 구성이 어떻게 되어있는지 아니? 쿠키도 있고 등

1. 쿠키 (Cookies)

  • 용도: 사용자 세션을 관리하고, 사용자 설정을 저장하며, 추적 및 인증 목적으로 사용됩니다.
  • 특징:
    • 서버와 클라이언트 간에 자동으로 전송됨.
    • 용량이 작음 (일반적으로 4KB 이하).
    • 만료 기간을 설정할 수 있음.
    • 특정 도메인과 경로에만 접근 가능.
    • 보안 설정 (Secure, HttpOnly, SameSite) 가능.

2. 로컬 스토리지 (Local Storage)

  • 용도: 클라이언트 측에서의 영구 데이터 저장.
  • 특징:
    • 키-값 쌍으로 데이터를 저장.
    • 각 도메인당 5MB 이상의 용량 제공.
    • 브라우저를 닫아도 데이터가 유지됨.
    • 동기적 API로 구성됨.

3. 세션 스토리지 (Session Storage)

  • 용도: 한 세션 동안 클라이언트 측 데이터 저장.
  • 특징:
    • 키-값 쌍으로 데이터를 저장.
    • 각 탭이나 창마다 별도의 스토리지를 가짐.
    • 브라우저 또는 탭이 닫힐 때 데이터가 삭제됨.
    • 동기적 API로 구성됨.

4. 인덱스드 DB (IndexedDB)

  • 용도: 클라이언트 측에서 대용량 데이터 저장 및 복잡한 쿼리 작업.
  • 특징:
    • 비관계형 데이터베이스.
    • 비동기적 API로 구성됨.
    • 구조화된 데이터 저장 가능.
    • 트랜잭션 지원.
    • 각 도메인당 수십 메가바이트 이상의 용량 제공.

5. 웹 SQL 데이터베이스 (Web SQL Database)

  • 용도: 클라이언트 측 데이터베이스 저장 (현재 표준에서 제외됨).
  • 특징:
    • 관계형 데이터베이스.
    • SQL 쿼리를 사용하여 데이터 저장 및 조회.
    • 대부분의 최신 브라우저에서 지원되지 않음 (Deprecated).

6. 서비스 워커 캐시 (Service Worker Cache)

  • 용도: 오프라인 웹 애플리케이션 지원 및 네트워크 요청 응답 캐싱.
  • 특징:
    • 캐시 스토리지를 통해 네트워크 요청을 가로채고 응답을 저장 및 제공.
    • 비동기적 API로 구성됨.
    • 서비스 워커의 생명주기와 연관됨.

7. 파일 시스템 API (File System API)

  • 용도: 클라이언트 측 파일 및 디렉토리 접근 (현재 표준에서 제외됨).
  • 특징:
    • 클라이언트 파일 시스템에 직접 접근.
    • 보안 및 권한 관리 필요.
    • 대부분의 최신 브라우저에서 지원되지 않음 (Deprecated).

요약

브라우저는 다양한 스토리지 메커니즘을 제공하여 웹 애플리케이션이 데이터를 저장하고 접근할 수 있도록 합니다. 각 스토리지 타입은 용도와 특성에 따라 선택적으로 사용됩니다. 쿠키는 세션 관리와 사용자 인증에 유용하고, 로컬 스토리지와 세션 스토리지는 키-값 쌍으로 데이터를 저장하는 데 적합합니다. IndexedDB는 대용량 데이터와 복잡한 쿼리를 필요로 하는 경우에 사용됩니다. 서비스 워커 캐시는 오프라인 지원 및 캐싱에 유용합니다.

프로젝트 소개해주시오

자신있는 언어는 자바인데 왜 네스트썼어

api 작성할때 내가 고려하는점

개발할때의 철학이 있는지

내 장점 약점

내가 했던 경험중 제일 이룰만한 성과가 무엇인지?

들었던 수업 중 가장 흥미있게 들은 수업을 소개해주세요

인턴십 중에 가장 얻어가고싶은것. 개발적으로

postgresql 왜 썼어 mysql과의 차이를 못느꼈어?

1. 기능과 확장성

PostgreSQL:

  • 기능성: PostgreSQL은 표준 SQL 준수와 더불어, 많은 고급 기능을 지원합니다. 예를 들어, 고급 쿼리, 윈도우 함수, 공통 테이블 표현식(CTE), 트리거, 뷰, 인덱스 등 다양한 기능이 포함되어 있습니다.
  • 확장성: 사용자 정의 함수, 데이터 타입, 연산자 등을 추가할 수 있는 확장성 높은 구조를 가지고 있습니다.
  • NoSQL 기능: JSON 데이터 타입 및 하둡 통합 등의 NoSQL 기능을 지원합니다.
  • ACID 준수: 트랜잭션의 원자성, 일관성, 격리성, 지속성을 완벽하게 지원합니다.

MySQL:

  • 쉬운 사용성: 상대적으로 사용이 쉽고, 많은 개발자들이 친숙하게 사용할 수 있습니다.
  • 다양한 스토리지 엔진: MySQL은 여러 스토리지 엔진(InnoDB, MyISAM 등)을 지원하여 유연성을 제공합니다.
  • 성능: 특히 읽기 작업에서 매우 빠른 성능을 보여줍니다. 읽기 성능이 중요한 웹 애플리케이션에서 자주 사용됩니다.
  • ACID 준수: InnoDB 스토리지 엔진을 사용할 경우 ACID 트랜잭션을 지원합니다.

2. 성능

PostgreSQL:

  • 쓰기 성능: 복잡한 쿼리와 대규모 데이터 처리에 강점을 가지고 있습니다.
  • 동시성 제어: 다중 버전 동시성 제어(MVCC)를 사용하여 동시성 처리 성능이 뛰어납니다.
  • 복잡한 쿼리 최적화: 복잡한 쿼리를 더 효율적으로 처리할 수 있는 고급 최적화 기능을 제공합니다.

MySQL:

  • 읽기 성능: 높은 읽기 성능을 제공합니다. 많은 웹 애플리케이션에서 높은 읽기 성능이 필요한 경우 많이 사용됩니다.
  • 간단한 쿼리 처리: 단순한 쿼리에서 매우 빠른 성능을 보여줍니다.
  • 스토리지 엔진에 따른 성능 차이: 스토리지 엔진에 따라 성능이 달라지므로, 용도에 맞는 엔진 선택이 중요합니다.

3. 커뮤니티와 지원

PostgreSQL:

  • 활발한 커뮤니티: 오랜 역사를 가지고 있으며, 활발한 커뮤니티 지원을 받습니다.
  • 문서화: 공식 문서가 매우 잘 되어 있어 학습과 문제 해결에 유용합니다.
  • 오픈 소스: 완전한 오픈 소스로, 모든 기능이 오픈 소스로 제공됩니다.

MySQL:

  • 광범위한 사용: 전 세계적으로 매우 널리 사용되고 있으며, 많은 호스팅 서비스에서 기본적으로 지원합니다.
  • 상업적 지원: Oracle이 인수한 이후, 상업적 지원과 엔터프라이즈 에디션을 제공합니다.
  • 다양한 도구: 다양한 GUI 관리 도구와 클라이언트가 제공되어 사용이 편리합니다.

4. 데이터 무결성 및 신뢰성

PostgreSQL:

  • 데이터 무결성: 강력한 데이터 무결성 검사를 지원합니다. 예를 들어, 외래 키, 검사 제약 조건, 고유 제약 조건 등을 통해 데이터 무결성을 보장합니다.
  • 안정성: 높은 안정성과 신뢰성을 제공하며, 중요한 데이터베이스 애플리케이션에 적합합니다.

MySQL:

  • 유연한 무결성: 무결성 검사 기능을 제공하지만, 스토리지 엔진에 따라 기능이 달라질 수 있습니다.
  • 유연성: 데이터 무결성보다 성능과 유연성을 중시하는 경우에 적합합니다.

5. 사용 사례

PostgreSQL:

  • 대규모 데이터 분석 시스템
  • 고성능 트랜잭션 시스템
  • 복잡한 데이터 모델이 필요한 애플리케이션
  • JSON 데이터 처리가 필요한 경우

MySQL:

  • 웹 애플리케이션
  • 블로그, 포럼 등 콘텐츠 관리 시스템(CMS)
  • 읽기 성능이 중요한 애플리케이션
  • 단순한 데이터베이스 요구사항

요약

PostgreSQL은 고급 기능과 확장성, 데이터 무결성에 강점을 가지고 있으며, MySQL은 쉬운 사용성, 높은 읽기 성능, 그리고 다양한 스토리지 엔진 선택의 유연성을 제공합니다. 프로젝트의 요구사항에 따라 적합한 데이터베이스를 선택하는 것이 중요합니다.

orm 쿼리를 작성해본적이 있나?


프로젝트 3개이상 한가지 자신있는 언어로
헬스케어 페이지

0개의 댓글

관련 채용 정보