IT 기술면접(일반) 예상문제: CS 일반, 개발 상식, 네트워크

개발 이론 요약 깃허브

 

OOP의 특징

  • 상화 – 각 객체들의 공통된 특성을 뽑아내는 것을 의미합니다.
  • 슐화 – 데이터를 은닉하고 데이터의 기능을 노출시키지 않는 의미입니다.
  • 속성 – 하나의 클래스가 가진 특징(데이터, 함수)을 그대로 다른클래스에 물려줄 수 있는 특성입니다.
  • 형성 – (상위 클래스로부터) 같은 함수를 받아도 각자 다른 일을 하는 것을 의미합니다.

 

OOP 5대 원칙

  1. 단일 책임 원칙(Single responsibility principle): 클래스는 하나의 책임만 가지며, 그 클래스는 캡슐화되어야 합니다.
  2. 개방 폐쇄 원칙(Open/closed principle): 클래스 등의 확장에 대해선 열려있어야 하고, 수정에 대핸 폐쇄적이어야 합니다.
  3. 리스코프 치환 원칙(Liskov substitution principle): 상위 클래스의 자리에 하위 클래스를 위치시켜도 정상 동작하여야 합니다.
  4. 인터페이스 분리 원칙(Interface segregation principle): 클라이언트는 자신이 사용하지 않는 메소드에 의존하면 안됩니다.
  5. 의존관계 역전 원칙(Dependency inversion principle): 상위 모듈은 하위 모듈에 의존해선 안되고, 둘 다 추상화에 의존해야 합니다.

 

현실에 상황을 예로 들어 OOP의 개념으로 설계과정을 설명해달라

컴퓨터와 스마트폰 등 전자기기의 공통점을 뽑아 상위 클래스로 ‘전자기기’라는 카테고리를 만드는 것이 추상화 작업입니다. 사용자에게 연산 결과를 보여준다면 내부 동작 방식에 대해서는 노출되지 않으며 알 필요도 없는 것이 캡슐화입니다. 그리고 전자기기가 가진 특성을 컴퓨터 클래스, 스마트폰 클래스로 물려주는 것이 상속성입니다. 같은 입력 과정이라도 컴퓨터는 물리키보드로 입력받고, 스마트폰은 가상 터치 키보드로 입력받는 등 다르게 수행하는 것이 다형성입니다.

 

함수형 프로그래밍

함수형 프로그래밍은 선언형 프로그래밍에 속합니다. 기본적으로 기존 명령형 프로그래밍은 ‘어떻게 구현하겠다’ 에 집중돼 있었다면 함수형 프로그래밍은 ‘무엇을 구현하겠다’에 초점이 맞추어져 보다 함수를 수학적으로 사용하여 설계가 가능합니다.

 

순수함수

순수함수란 함수형 프로그래밍에 필요한 개념으로써 두가지의 조건을 만족해야 합니다. 동일한 입력에는 항상 같은 값을 반환하여야 하고, 함수의 실행은 프로그램의 실행에 영향을 미치지 않아야 합니다. 이와 같은 특성을 이용하여 테스트를 하기 수월하다는 점이 함수형 프로그래밍이 새로운 패러다임으로 등장했다고 볼 수 있습니다.

 

OOP와 함수형 프로그래밍의 가장 큰 차이점

함수형 프로그래밍의 일급 객체는 함수 자체가 일급객체가 됩니다. 객체지향 프로그래밍에서는 객체, 클래스 등이 일급 객체가 됩니다. 객체지향은 객체의 특성에 의거하여 접근대상을 제어하고 내부에 있는 데이터를 제어하는 등 제어에 목적이 집중되어있는 반면 함수형 프로그래밍은 입력값이 있으면 출력값이 나오고 프로그램에 영향을 주지 않는다는 간단한 개념으로 상태의 변형을 주지 않습니다.

 

Binary Search Tree

이진 탐색과 연결리스트를 결합한 형태로써 이진탐색의 효율적 탐색능력 + 연결리스트의 입출력의 용이함을 결합하여 고안된 자료구조의 방법입니다. 시간복잡도는 일반적으로 O(h), 최악의 경우 O(n)

 

Graph에서 다른 노드를 참조하는 구조를 코드로 구현?

객체의 키를 노드로 하고 그 밸류값을 연결되는 노드로 하면 구현할 수 있습니다.

Thread와 Process의 차이점

프로세스는 운영체제로부터 자원을 할당받아 실행되며, 스레드는 프로세스로부터 자원을 할당받아 실행됩니다. 하나의 프로세스 안에서 여러 스레드를 실행하는 것이 가능합니다. 일반적으로 프로세스는 코드/데이터/스택/힙 메모리 영역을 기반으로 실행됩니다. 스레드는 프로세스와 별개의 독립된 스택을 사용하며 나머지는 프로세스와 공유합니다.

 

네트워크 서버에서 트래픽 과부하가 발생할 경우 어떻게 할 것인가?

트래픽 로그를 확인하고 어느 서버에서 과부하가 발생하는지 확인한 후, 서비스의 병목 지점을 찾습니다. 일시적인 현상이라면 WAS를 Scale out(서버를 여러 대 추가)하고, 지속적인 과부하인 경우 Scale up(서버의 사양을 업그레이드) 합니다.

 

Delegate, Lambda 식

대리자는 특정 매개 변수 목록 및 반환 형식이 있는 메서드에 대한 참조를 나타내는 형식입니다. 대리자를 통해 메서드를 매개 변수로 전달할 수 있습니다. 대리자를 사용하여 콜백 메서드를 정의할 수 있습니다.
 람다 식은 대리자 또는 식 트리 형식을 만드는 데 사용할 수 있는 익명 함수입니다. 람다 식을 사용하여 인수로 전달되거나 함수 호출 값으로 반환되는 로컬 함수를 쓸 수 있습니다.

 

API (Application Programming Interface)

API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체입니다. API는 서버와 데이터베이스에 대한 출입구 역할을 하며, 애플리케이션과 기기가 원활하게 통신할 수 있도록 도와주며, 모든 네트워크 접속을 표준화하는 역할을 합니다. 이러한 표준화 과정을 통해 개발과정을 간소화시키며, 개발자들 간 협업을 용이하게 합니다.

 

자바에서 직렬화 (Serialization)

직렬화란 자바의 객체를 네트워크 상에서 주고받게 하기 위하여 메모리에 저장된 객체를 바이너리 형식으로 변환하는 것을 뜻합니다. 이렇게 변환된 직렬화된 객체는 하드디스크에 저장하거나 네트워크 상으로 전송하여 다른 컴퓨터에서 사용하도록 할 수 있습니다.

 

HTTPS란?

기존 HTTP가 위변조에 취약하다는 점을 보완하기 위해 암호화나 인증 구조를 더한 것을 HTTPS(HTTP Secure)라고 부릅니다. HTTPS는 새로운 애플리케이션 계층의 프로토콜이 아니며 HTTP 통신을 하는 소켓 부분을 SSL(Secure Socket Layer)이나 TLS(Transport Layer Security)이라는 프로토콜로 대체하는 형태입니다.

(+) 공통 키 방식(대칭키)와 공개 키 방식(비대칭키)을 혼용하여 정보를 암호화합니다.

 

HTTP의 보안상 문제점

HTTP는 암호화되지 않은 방법으로 데이터를 전송하기 때문에 서버와 클라이언트가 주고받는 메시지를 감청하는 것이 매우 쉽습니다. 예를 들어 로그인을 위해서 서버로 비밀번호를 전송하거나, 또는 중요한 기밀문서를 열람하는 과정에서 악의적인 감청이나 데이터의 변조 등이 일어날 수 있다는 것입니다.

 

Base64

Base64란 8비트 바이너리 데이터(예를 들어 실행파일이나, ZIP파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 스트링으로 바꾸는 인코딩 방식을 가리키는 개념입니다.

 

정렬 알고리즘의 시간복잡도

Docker

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다. 컨테이너는 격리된 공간에서 프로세스가 동작하는 기술입니다. 가 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줍니다. 

 

안정 정렬 (stable sort)

정렬을 할 때 동일한 값이 있는 경우 그 값들의 순서가 바뀌지 않음을 보장하는 정렬기법을 통틀어 안정 정렬이라고 합니다.

 

개수 정렬 (counting sort)

일정 범위의 숫자들을 해당 숫자에서 가장 큰 숫자의 길이의 배열을 생성하고 배열의 주소값을 숫자, 배열의 원소를 그 숫자의 개수로 사용하는 정렬 기법입니다.

 

기수 정렬 (radix sort)

동일한 자릿수를 가진 숫자들을 각각의 자릿수를 기준으로 정렬하여 시간 복잡도를 O(n)으로 줄이고자 할 때 사용하는 정렬입니다. 안정 정렬이 필요합니다.

문의 | 코멘트 또는 yoonbumtae@gmail.com


카테고리: etc.


0개의 댓글

답글 남기기

Avatar placeholder

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다