본문 바로가기

취업준비

기술 면접 준비 (1)

반응형

java 기반 서비스 백엔드 개발

- 백엔드 개발자는 프론트엔드, 백엔드의 완전한 분리 구조를 지향하는 업무 스타일의 개발 방식로서 백엔드의 DBAPI서버 개발을 맡는다. MVC에서 Model, Controller가 백엔드의 소관이다.

- 백엔드 개발자는 기존 개발자라 불리는 스펙과 방식이 약간 다르다. 뷰단은 화면단이 아닌 API개발이 주가 된다. 프론트에서 전달된 데이터의 포맷이나 데이터베이스 입출력 및 다양한 비즈니스 프로세스를 프로그래밍 코드로 구현하는 역할을 한다. 데이터베이스, 웹 서버, 네트워킹 등 웹 서버의 인프라에 대한 이해가 필요하다.

- API(Application Program Interface) : 라이브러리는 함수들의 집합이라 할 수 있는데 미리 만든 함수를 모아 놓은 곳을 말합니다. 도서관에서 필요한 책을 빌리듯 라이브러리에서 필요한 함수를 찾아 쓸 수 있습니다.

 

프레임 워크

소프트웨어개발을 수월하게 하기 위해 소프트웨어의 구체적 기능들에 해당하는 부분의 설계와 구현을 재사용 가능하도록 협업화된 형태로 제공하는 소프트웨어 환경을 말한다.

 

Spring Framework

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

[ 특징 ]

- 경량 컨테이너로서 자바 객체를 직접 관리한다. 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.

- 스프링은 제어 반전(IoC : Inversion of Control)을 지원한다. 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.

- 스프링은 의존성 주입(DI : Dependency Injection)을 지원한다. 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.

- 스프링은 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원한다. 따라서 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.

- Aspect Oriented Programming 관점 지향 프로그래밍. JAVA에서는 다중상속이 불가능 하기 때문에, 핵심기능과 공통기능을 분리시켜놓고 공통기능을 개발자의 코드 밖에서 필요한 시점에 적용하는 프로그래밍 방법

- 스프링은 확장성이 높다. 스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이하다.

[ 주요 모듈 ]

제어 반전 컨테이너 (IoC)

제어 반전(IoC: Inversion of Control) 컨테이너는 스프링의 가장 중요하고 핵심적인 기능으로서 자바의 반영(reflection)을 이용해서 객체의 생명주기를 관리하고 의존성 주입(Dependency Injection)을 통해 각 계층이나 서비스들간의 의존성을 맞춰준다. 이러한 기능들은 주로 환경설정을 담당하는 XML 파일에 의해 설정되고 수행된다.

관점 지향 프로그래밍 프레임워크 (AOP)

스프링은 로깅이나 보안, 트랜잭션 등 핵심적인 비즈니스 로직과 관련이 없으나 여러 곳에서 공통적으로 쓰이는 기능들을 분리하여 개발하고 실행 시에 서로 조합할 수 있는 관점 지향 프로그래밍(AOP)을 지원한다. 기존에 널리 사용되고 있는 강력한 관점 지향 프로그래밍 프레임워크인 AspectJ도 내부적으로 사용할 수 있으며, 스프링 자체적으로 지원하는 실행시(Runtime)에 조합하는 방식도 지원한다.

모델--컨트롤러 패턴 (MVC)

스프링은 웹 프로그램밍 개발 시 거의 표준적인 방식인 Spring MVC라 불리는 모델--컨트롤러(MVC) 패턴을 사용한다. DispatcherServletController 역할을 담당하여 각종 요청을 적절한 서비스에 분산시켜주며 이를 각 서비스들이 처리를 하여 결과를 생성하고 그 결과는 다양한 형식의 View 서비스들로 화면에 표시될 수 있다.

 

AJAX

- javaScript를 사용한 비동기 통신, 클라이언트와 서버간에 XML 데이터를 주고받는 기술

- 비동기적인 웹 애플리케이션의 제작을 위해

표현 정보를 위한 HTML, CSS

동적인 화면 출력 및 표시 정보와의 상호작용을 위한 자바스크립트, DOM

웹 서버와 비동기적으로 데이터를 교환하고 조작하기 위한 XML, JSON

의 조합을 이용하는 웹 개발 기법

 

트랜잭션

- 데이터베이스 처리의 기본단위

 

Primary keyforeign key의 차이

- 기본키는 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성.

- 외래키는 참조되는 릴레이션의 기본키와 대응되어 릴레이션간에 참조관계를 표현.

 

데이터베이스 정규화

- 데이터베이스 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스. 제대로 조직되지 않은 테이블들과 관계들을 작고 잘 조직된 테이블과 관계들로 나누는 것이다.

- 1, 2, 3, BCNF, 4, 5 정규화

 

데이터베이스 설계

- 사용자의 요구사항을 제대로 파악해서 요구사항 명세서를 토대로 DB를 설계하는 것이 가장 중요

 

JVM, JRE, JDK

- JVM (Java Virtual Machine) : 자바 소스코드로부터 만들어지는 자바 바이너리 파일(.class)을 실행할 수 있다. 또한, JVM은 플랫폼에 의존적이다. 즉 리눅스의 JVM과 윈도우즈의 JVM은 다르다. , 컴파일된 바이너리 코드는 어떤 JVM에서도 동작시킬 수 있다.

JVM은 다음과 같은 역할을 한다.

바이너리 코드를 읽는다.

바이너리 코드를 검증한다.

바이너리 코드를 실행한다.

실행환경(Runtime Environment)의 규격을 제공한다. (필요한 라이브러리 및 기타파일)

 

- JRE (Java Runtime Environment) : JREJVM 이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고 있다. JREJVM의 실행환경을 구현했다고 할 수 있다.

 

- JDK (Java Development Kit) : JDKJRE + 개발을 위해 필요한 도구(javac, java)들을 포함한다

 

소팅의 종류

- 선택정렬, 삽입정렬, 버블정렬, 합병정렬, 퀵정렬

자바 라이브러리

- 자주 사용되는 함수를 모아 놓은 것. 편리함을 위해서 만들어 진 것.

- java.lang (Object, String, Integer, System) / java.io / java.util (Date, Calendar, Scanner) / java.net / java.awt / java.applet

 

추상화 하는 이유 설명

- 실체 클래스의 공통적인 부분을 추출해 어느 정도 규격을 잡아놓은 추상적인 클래스이다. 실체클래스는 실제 객체를 생성할 정도의 구체성을 가지는 반면 추상클래스는 아직 메서드와 내용이 추상적이기 때문에 객체를 생성할 수 없게 만들었다.

- 추상클래스와 실체클래스는 상속관계에 있다.

- 필드와 메소드 이름을 통일하여 유지보수성을 높이고 통일성을 유지할 수 있다.

- 실체클래스 구현시, 시간 절약 - 규격에 맞는 실체클래스 구현

- https://limkydev.tistory.com/188

 

가비지 컬렉션, 소멸 시점 설명

- 메모리가 부족할 때 가비지를 자동으로 정리해주는 프로그램을 말한다. 프로그램을 실행하다 보면 가비지가 발생하는데 이것은 유효한 메모리가 아니다. 정리되지 않은 채로 남아있는 메모리들은 사용되지도 않는데 자리만 차지하고 있게 된다. 그래서 JVM의 가비지 컬렉터는 사용되고 있지 않은 메모리를 다른 용도로 사용할 수 있게 '메모리 해제'를 시켜는 프로그램이다.

- JVM은 메모리를 부여받고 열심히 프로그램을 실행하다가 메모리가 부족해지는 순간이 오면 OS에게 추가로 메모리를 요청한다. 바로 이 때 메모리를 더 달라고 요청하는 순간에 가비지 콜렉터가 실행된다. 또한, 서버 프로그램인 경우에는 24시간 내내 돌아가는데 이 때 JVM이 한가할 때(idle time) 가비지 컬렉터가 실행된다. JVM이 종료되면 당연히 사용하던 모든 메모리는 OS에게 반납된다.

- 시스템에서 더 이상 사용하지 않는 동적 할당된 메모리 블럭을 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것으로 시스템에서 가비지컬렉션을 수행하는 부분을 가비지 컬렉터라 부른다.

 

자바 이론

- JAVA는 네트워크상에서 쓸 수 있도록 미국의 선 마이크로 시스템즈가 개발한 객체 지향 프로그래밍 언어

- 자바가상머신(JVM)만 설치하면 컴퓨터의 운영체제에 상관없이 작동한다.(, 운영체제에 독립적)

- 기본 자료형(int, double, long, char, boolean) 을 제외한 모든 요소들이 객체로 표현

- 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어

- Garbage Collector를 통한 자동적인 메모리 관리

- 멀티쓰레드(Multi-thread)를 지원

 

ArrayList, LinkedList, Vector

- 모두 List 인터페이스를 구현하는 클래스들이다.

- ArrayList : 길이가 유동적. 중간에 데이터를 추가하거나 삭제할 경우에는 인덱스가 한칸씩 뒤로 밀리거나 당겨진다.

- Vector : ArrayList와 동일한 구조를 갖는다. 차이점이 있다면 Vector는 자동 동기화를 보장하므로 멀티 스레드 환경에서 안정적으로 사용이 가능하다. 하지만 단일 쓰레드에서는 ArrayList가 성능이 더 좋다.

- LinkedList : 구조가 ArrayListVector와 다르다. 위의 컬렉션들은 인덱스로 데이터를 관리하지만 LinkedList는 인접한 곳을 링크하여 체인처럼 관리한다. 중간에 데이터를 삭제하거나 삽입할 때에는 인접한 곳의 링크만 변경하면 되기 때문에 속도가 빠르다.

- http://blog.naver.com/PostView.nhn?blogId=heartflow89&logNo=220991199432&parentCategoryNo=&categoryNo=28&viewDate=&isShowPopularPosts=false&from=postView

 

동기화, 비동기화

- 동기 : 말 그대로 동시에 일어난다는 뜻. 요청과 그 결과가 동시에 일어난다는 뜻인데 바로 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 한다.

- 비동기 : 동시에 일어나지 않는다라는 뜻. 요청과 결과가 동시에 일어나지 않는다.

- 동기와 비동기는 상황에 따라서 각각의 장단점이 있다. 동기방식은 설계가 매우 간단하고 직관적이지만 결과가 주어질 때까지 아무것도 못하고 대기해야 한다는 단점이 있다. 비동기방식은 동기보다 복잡하지만 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있는 장점이 있다.

 

디자인 패턴 아는 것

- 싱글톤 디자인 패턴 : 클래스 인스턴스가 하나만 만들어지도록 하고 그 인스턴스에 대한 전역 접근을 제공한다. 전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하며 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴

- 템플릿 메소드 패턴 : 템플릿을 만들어주고 특정 메소드를 안에 채워 넣기만 하면 되는 디자인 패턴

- 스트래티지 패턴 : 상속받은 객체마다 다를 수 있는 메소드를 캡슐화해 교환하며 사용하는 패턴

- 팩토리 메소드 패턴 : 객체 생성을 직접하지 않고 하위 클래스가 어떤 객체 생성을 할지 결정하도록 위임하는 디자인 패턴

- https://jeong-pro.tistory.com/98

 

객체 지향 (OOP : Object-Oriented Programming)

- 데이터를 객체로 취급하여 프로그램에 반영한 것이며, 순차적으로 프로그램이 동작하는 기존의 것들과는 다르게 객체와 객체의 상호작용을 통해 프로그램이 동작하는 것을 말한다.

- 객체지향 프로그래밍은 코드의 재사용성이 높다.

- 코드의 변경이 용이 직관적인 코드분석 개발속도 향상

 

 

스택과 큐 알고 있는 데이터구조 하나에 대해 설명하기 자료구조에 대해 아는 것

- 스택 : LIFO 후입선출 구조. push를 이용한 데이터 입력, pop을 이용한 데이터 출력

- : FIFO 선입선출 구조. edQueue를 이용한 데이터 입력, deQueue를 이용한 데이터 출력

- 그래프 : 정점과 간선으로 이루어진 자료구조로 정점은 각각의 자료를 뜻하고 정점과 정점을 잇는 선을 간선이라고 한다.

- : 최댓값 및 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된 완전이진트리를 기본으로 한 자료구조. 최대 힙, 최소 힙

- 트리 : 그래프의 일종으로, 여러 노드가 한 노드를 가리킬 수 없는 구조이다. 간단하게는 회로가 없고, 서로 다른 두 노드를 잇는 길이 하나뿐인 그래프를 트리라고 부른다. (방향성이 있는 비순환 그래프)

 

가상 함수

- 객체지향프로그래밍의 다형성에서 중요한 부분인데, 상속하는 클래스 내에서 같은 시그니처의 함수로 오버라이딩 될 수 있는 함수 또는 메소드.

 

List 와 배열의 차이

- 배열 : 데이터의 크기가 정해져 있고, 추가적인 삽입 삭제가 일어나지 않으며 검색을 필요로 할 때 유리

- List : 데이터의 크기가 정해져 있지 않고, 삽입 삭제가 일어나며 검색이 적은 경우에 유리

 

프로세스와 쓰레드

- 쓰레드 : 프로세스내에서 동시에 실행되는 독립적인 실행 단위를 말함, 장점으로는 자원을 많이 사용하지 않고 구현이 쉬우며 범용성이 높다

- 프로세스 : 운영체제에서 실행중인 하나의 프로그램(하나 이상의 쓰레드를 포함한다.)

 

0으로 나누는 프로그래밍을 하면 어떻게 되나?

- ArithmeticException

 

자바와 c언어의 차이

- C언어 순차(절차)지향 언어 : 순서대로 읽으면서 진행 / 처리속도가 빠르다.

- JAVA 객체지향 언어 : 개발하려는 것을 기능별로 묶어 모듈화 함으로써 같은 기능을 중복으로 연산하지 않고, 재활용한다. / VM을 거치기 때문에 연산이 느리다. -> OS에 맞는 언어로 해석되기 전에 JVM에 맞게 먼저 해석되어야 한다. OS에 맞는 JVM만 있으면 어떤 OS든 맞게 만들 수도 있고 실행할 수도 있다.

 

[JAVAC++의 차이]

- C++C소스 코드와의 하위 호환성 / JAVA는 다른언어와 호환성 X

- C++은 다중상속을 지원하고 JAVA는 지원하지 않는다.

- C++friend 키워드를 지원하고 JAVA는 그렇지 않는다. classfirend 키워드를 붙이면 private, protected area에 접근을 할 수 있다.

- JAVAinterface를 지원하고 C++은 지원을 안한다.

- Garbage Collection C++ 수동 java는 자동. C++은 소멸자를 통해 해제해야한다.

- C++은 연산자오버로딩을 지원하지만, JAVA는 지원하지 않는다. 예를들어 * 연산을 재정의하여 객체와 객체를 *연산 처리 할 수 있다.

- JAVA는 익명클래스를 지원하지만 C++은 지원하지 않는다.

 

객체지향 질문. 캡슐화, 상속, 다형성...

- 다형성 : 같은 타입 이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질을 말한다. 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있도록 해준다. 다형성 개념이란 어떤 한 요소에 여러 개념을 넣어 놓는 것으로 일반적으로 오버라이딩(같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는 것)이나 오버로딩(같은 이름의 메소드가 인자의 개수나 자료형에 따라서 다른 기능을 하는 것)을 의미한다. 다형 개념을 통해서 프로그램 안의 객체 간의 관계를 조직적으로 나타낼 수 있다.

- 캡슐화 : 실제 구현 내용 일부를 외부에 감추어 은닉한다.

- 상속 : 상속은 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능이다. 상속을 통해서 기존의 클래스를 상속받은 하위 클래스를 이용해 프로그램의 요구에 맞추어 클래스를 수정할 수 있고 클래스 간의 종속 관계를 형성함으로써 객체를 조직화할 수 있다.

 

오버로딩과 오버라이딩의 차이

- 오버로딩 : 같은 이름의 메소드를 여러개 정의하는 것. 매개변수의 타입이 다르거나 매개변수의 개수가 달라야한다.

- 오버라이딩 : 부모 클래스의 메소드를 하위 클래스에서 재정의 하는 것.

 

데드락

- 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태로, ‘교착 상태라고도 하며 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생.

- 멀티 프로그래밍 환경에서 한정된 자원을 사용하려고 서로 경쟁하는 상황

- 어떤 프로세스가 자원을 요청 했을 때 그 시각에 그 자원을 사용할 수 없는 상황이 발생할 수 있고 그 때는 프로세스가 대기 상태

- 발생조건

상호배제 : 자원은 한 번에 한 프로세스만이 사용할 수 있어야 한다.

점유대기 : 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.

비선점 : 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다.

순환대기 : 프로세스의 집합 {P0, P1, ,Pn}에서 P0P1이 점유한 자원을 대기하고 P1P2가 점유한 자원을 대기하고 P2Pn-1Pn이 점유한 자원을 대기하며 PnP0가 점유한 자원을 요구해야 한다.

 

 

MVC 패턴

- Model View Controller 개발할 때 3가지 형태로 역할을 나누어 개발하는 방법론.

Model 은 어플리케이션이 무엇을 할지 정의. 논리적 데이터 기반구조를 표현

View 는 화면에 무엇을 보여줄지를 표현. 사용자 인터페이스

Controller 는 데이터와 사용자 인터페이스 요소들을 잇는 다리 역할. 이벤트 처리부분

 

반응형

'취업준비' 카테고리의 다른 글

기술 면접 준비 (2)  (0) 2020.07.19
면접 질문 정리 (2019.11.19)  (0) 2019.11.23
IT 기술 면접 질문 정리 (웹)  (2) 2019.05.06