신입 개발자 기술면접 질문 리스트

Wonjun Seo·2023년 9월 19일
0

운영체제

시스템의 자원과 동작을 관리하는 소프트웨어[프로세스, 저장장치, 네트워킹, 사용자, 하드웨어 관리]


메모리 구조: 코드, 데이터, 힙, 스택

Code는 소스코드가 들어갑니다. Data는 전역변수, 정적변수가 할당됩니다.
Heap은 사용자가 직접 관리하는 영역으로 데이터가 동적으로 할당되는 공간입니다.
Stack은 함수의 호출 정보, 지역변수, 매개변수들이 저장되게 됩니다.


TCP, UDP

TCP는 신뢰성 있는 통신을 위해 사용하는 프로토콜로 신뢰성이 높지만, UDP보다 속도가 느립니다.
3way, 4way handshake로 서버와 클라이언트가 1:1로 통신을 합니다. 흐름 제어와 혼잡 제어가 이루어집니다.
UDP는 비연결형 프로토콜로 손상된 데이터에 대해서 재전송하지 않습니다. 신뢰성이 낮지만 TCP보다 속도가 빨라 실시간 스트리밍 같은 서비스에 주로 이용합니다. 1:1, 1:N, N:M으로 연결이 가능합니다.


절차지향과 객체지향의 차이

절차지향: 수행되어야 할 연속적인 계산과 과정을 포함하고 있는 프로그래밍

객체지향: 강한 응집력과 약한 결합력을 위해 현실세계의 객체라는 개념을 이용한 프로그래밍


객체지향 프로그래밍

객체 지향 프로그래밍은 컴퓨터 프로그래밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.


객체지향 프로그래밍의 장단점

장점

  • 코드 재사용이 용이
  • 유지보수가 쉬움
  • 대형 프로젝트에 적합

단점

  • 처리속도가 상대적으로 느림
  • 객체가 많으면 용량이 커질 수 있음
  • 설계시 많은 시간과 노력이 필요

클래스와 인스턴스(객체)의 차이

클래스: 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성(attribute)과 행위(behavior)를 변수와 메서드로 정의한 것으로 객체를 만들기 위한 메타정보라고 볼 수 있다.

인스턴스(객체): 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터


컴파일 과정

  • 자바 소스 코드를 작성
  • 자바 컴파일러가 자바 소스 파일을 컴파일
  • 컴파일된 바이트 코드를 JVM의 클래스 로더에 전달
  • 클래스 로더는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여 JVM의 메모리에 올림
  • 실행 엔진은 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행

Call by value / Call by reference

1. call by value(값에 의한 호출)
함수가 호출될 때 메모리 공간 안에서는 임시의 공간이 생성된다. 그리고 함수가 종료되면 해당 공간은 사라진다.

함수 호출시 전달되는 변수의 값을 복사하여 함수의 인자로 전달한다.

복사된 인자는 함수 안에서 지역적으로 사용하는 변수이다.

Java의 경우 함수에 전달되는 인자의 데이터 타입에 따라서 (기본 자료형/참조 자료형) 함수 호출 방식이 달라짐
기본 자료형: call by value로 동작 (int, short, long, float, double, char, boolean)
참조 자료형: call by reference로 동작 (Array, Class Instance)

2. call by reference(참조에 의한 호출)
함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시공간이 생성된다.

call by reference에 의한 호출방식은 함수 호출 시 인자로 전달되는 변수의 래퍼런스를 전달한다. 함수 안에서 인자의 값이 변경되면, 함수 호출시에 있던 변수들도 값이 바뀐다.


추상 클래스, 인터페이스의 차이

추상 클래스는 클래스 안에 추상 메서드가 하나 이상 포함되거나 abstract로 정의된 경우를 말하고,
인터페이스는 모든 메서드가 추상 메서드인 경우입니다.

추상 클래스는 그 추상 클래스를 상속받아서 기능을 이용하여 확장할 수 있고,
인터페이스는 함수의 껍데기만 있으며, 그 함수의 구현을 강제하기 위해서 사용됩니다.


Spring Framework

자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크 입니다.
동적인 웹 사이트 개발을 위한 여러가지 서비스를 제공하고, 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부표준 프레임워크의 기반 기술입니다.


Spring Framework의 특징

DI(의존성 주입)
: 의존성 주입은 필요한 객체를 직접 생성하는 것이 아닌 외부로부터 객체를 받아 사용하는 것입니다.

Spring AOP(관점지향 프로그래밍)
: 트렌젝션, 로깅 보안 등 여러 모듈, 여러 계층에서 공통으로 필요로 하는 기능의 경우 해당 기능을 분리해 관리할 수 있습니다.

IoC(제어의 역전)
: 컨트롤의 제어권이 개발자가 아니라 프레임워크에 있는 것으로, 객체의 생성부터 모든 생명 주기의 관리까지 프레임워크가 주도하는 것을 의미합니다.


Spring AOP와 OOP 비교

AOP는 관점지향 프로그래밍으로 애플리케이션의 핵심적인 기능과 부가적인 기능을 분리해 Aspect 라는 모듈을 만들어 설계하고 개발하는 방법입니다.

OOP는 객체지향 프로그래밍을 의미합니다.

공통적 기능을 모든 모듈에 적용하기 위한 방법으로 상속을 이용하는데 Java는 다중 상속이 불가합니다.
그리고 기능 구현 부분에서 핵심 코드와 공통 코드가 섞여있어서 보기에도 불편하고 효율성이 떨어집니다. 이러한 이유로 AOP가 등장했습니다.


동기/비동기 차이

동기는 요청과 결과가 동시에 이루어지는 것을 말합니다.
설계가 간단하고 직관적이지만, 결과가 주어질 때까지 아무것도 하지 못하고 대기해야 한다는 단점이 있습니다.

비동기는 동기와 반대로 요청과 결과가 동시에 일어나지 않습니다.
동기보다 복잡하지만, 결과가 주어지는 시간이 걸리더라도 그 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있다는 장점이 있습니다.


RestFul API

자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미한다. URL을 통해 자원을 명시하고 HTTP Method를 통해 해당 자원에 대한 CRUD를 적용하는 것을 의미한다.


MVC

Model: 내부 비즈니스 로직에 해당합니다.
백그라운드 로직으로써 처리되는 알고리즘, 데이터, DB와 상호작용 등을 담당합니다.

View: 사용자 인터페이스(UI)를 의미합니다.
요청에 대한 처리 결과를 View를 통해 클라이언트에게 화면을 통해 보여줍니다.

Controller: Model과 View 사이에서 중계자 역할을 수행합니다.
클라이언트의 요청을 처리하고 흐름 제어를 담당합니다.


JPA N+1문제

연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터의 개수(N) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상을 말한다.

해결 방법

  • Fetch Join
  • @EntityGraph
  • Batch Size

GET vs POST의 차이

GET은 클라이언트에서 어떠한 리소스부터 정보를 요청하기 위해 사용되는 메서드입니다. 데이터를 읽거나 검색할 때 주로 사용됩니다.

POST는 리소스를 생성, 업데이트 하기 위해 서버에 데이터를 보낼 때 사용되는 메서드 입니다. GET과 다르게 전송해야 되는 데이터를 body에 담아서 전송되며, content-Type에 요청 데이터 타입 표시에 따라 결정된다.


가비지 컬렉션 (GC)

JVM에서 메모리를 관리해주는 모듈 입니다. Heap 메모리를 재활용하기 위해서 더 이상 참조되지 않는 객체들을 메모리에서 제거하는 모듈입니다.


프로세스와 스레드 차이점

프로세스는 운영체제로부터 자원을 할당 받는 작업의 단위

스레드는 할당받은 자원을 이용하는 단위

애플리케이션 하나가 프로세스이고, 이 안에서의 분기 처리가 스레드를 의미합니다.


멀티 프로세스와 멀티 스레드

멀티 프로세스는 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하는 것이다.
장점으로는 하나의 프로세스가 잘못 되어도 프로그램은 작동한다는 것이고, 단점은 context switching 비용이 발생한다는 것이다.

멀티 스레드는 프로그램을 여러 개의 스레드로 구성하고 스레드가 작업을 처리하는 것이다.
장점은 시스템 자원 소모 감소, 처리 비용 감소, 스레드간 자원 공유가 있고, 단점은 동기화 이슈와 하나의 스레드의 오류로 전체 프로세스에 문제가 발생한다는 것이다.


HTTP 란?

웹 상에서 클라이언트와 서버간에 요청/응답으로 데이터를 주고 받을 수 있는 프로토콜


HTTP 상태코드

1xx (Information): 서버가 요청을 받았으며, 조건부 응답이라 작업을 계속 진행함

  • 101 Switching Protocols: 클라이언트가 요청에 Upgrade 헤더를 포함한 경우, 서버에서 프로토콜을 변경할 것임을 알려주는 응답 코드

2xx (Success): 요청을 성공적으로 받았으며 인식했고 수용함

  • 200 OK: 요청이 성공적으로 처리됐음을 알리는 응답 코드

3xx (Redirection): 요청 완료를 위해 추가 작업 조치가 필요함

4xx (Client Error): 클라이언트에 오류가 있음을 나타냄

  • 400 Bad Request: 잘못된 문법으로 서버가 요청을 이해하지 못했음을 알리는 코드
  • 401 UnAuthorized: 클라이언트에서 보낸 요청이 서버에서 요구하는 어떠한 인증 프로세스에 적합하지 않았음을 알리는 응답 코드
  • 403 Forbidden: 클라이언트가 콘텐츠에 접근할 권리가 없음을 알리는 응답코드. 401과 다른 점은 서버가 클라이언트가 누구인지 알 때 보냄
  • 404 Not Found: 클라이언트가 보낸 요청에 해당하는 리소스를 서버에서 찾을 수 없을때 보내는 응답 코드. 요청은 유효하지만 리소스가 존재하지 않음을 의미

5xx (Server Error): 클라이언트의 유효한 요청을 서버 문제로 인해 처리하지 못했음을 나타냄

  • 500 Internal Server Error: 서버에 오류가 발생하여 요청을 수행할 수 없음
  • 503 Service Unavailable: 서버에 요청이 과부하가 되어 처리할 수 없는 상태가 되었거나, 서버가 중단된 상태일 때

RDB와 NoSQL

RDBMS는 정해진 스키마가 존재하고, NoSQL는 정해진 스키마가 없다는 것이 가장 큰 차이입니다. NoSQL은 정해진 스키마가 없을 때 데이터 구조 변화가 자유롭고 데이터 분산이 용이하다는 장점이 있지만, 데이터 중복이 발생하거나 데이터 변경 시에 연산이 오래 걸린다는 단점이 있습니다.


트랜잭션(Transaction)

트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 수행되어야할 일련의 연산들을 의미한다.

트랜잭션의 특징(ACID)

  • Atomicity(원자성): 트랜잭션이 데이터베이스에 모두 반영되던지, 아니면 전혀 반영되지 않아야 한다.
  • Consistency(일관성): 트랜잭션의 작업 처리 결과는 항상 일관성이 있어야 한다.
  • Isolation(독립성): 동시에 실행되는 트랜잭션은 서로에게 영향을 미치지 않아야 한다.
  • Durability(지속성): 트랜잭션 완료 시 결과가 영구적으로 반영되어야 한다.

https://timotimo.tistory.com/33

https://javanewbie.tistory.com/48

https://sedangdang.tistory.com/309

0개의 댓글