제네릭이란? 
데이터 타입을 외부에서 사용자가 결정하는 것으로, 컴파일타임에 에러를 검출할 수 있고 타입안정성을 보장합니다. 

AOP?
관점지향 프로그래밍을 뜻하고. 다른클래스들간 비슷한 기능들을 모듈화해줘서 관심사를 분리하는 것을 말합니다.

DI?
의존성 주입을 말합니다.객체들 간의 의존성을 줄이기 위해 사용.

클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않는다. 그러기 위해서는 인터페이스만 의존하고 있어야 한다.
런타임 시점의 의존관계는 컨테이너나 팩토리 같은 제3의 존재가 결정한다.
의존관계는 사용할 오브젝트에 대한 레퍼런스를 외부에서 제공(주입)해줌으로써 만들어진다.

장점
1.의존성이 줄어든다.
2.재사용성이 높은코드가 된다.
3.테스트하기 좋은코드가 된다.
4.가독성이 높아진다.

주입방법
1.생성자 주입-> 권장되는 방식.
2.수정자 주입 ->언제 어디서든 변경가능하므로 위험.->개방폐쇄원칙 위배
3.필드 주입->프레임워크 의존적이므로, 객체지향적이지 않음.

POJO
:오래된 방식의 간단한 자바 오브젝트. 특정'기술'에 종속되지 않음.

Bean: 스프링컨테이너가 관리하는 자바 객체.

스프링 필터와 인터셉트의 차이:
필터는 dispatch sevlet에 가기전 요청이 실행. 인터셉트는 컨트롤러로 가기전 요청이 실행.

프로세스란? 운영체제로부터 자원을받아 실행되는 프로그램.
영역: 힙,스택,코드,데이터 영역

힙은 동적 메모리할당
스택: 매개변수,지역변수
코드: 코드영역
데이터: 전역,스태틱변수
쓰레드란? 프로세스내 실행 흐름단위.

멀티프로세스
장점 : 안정성이 높다 (독립된 구조기 때문에)
단점 : 여러 프로세스를 왔다갔다 하는 컨텍스트 스위칭으로 인한 성능저하

멀티쓰레드
장점 : 응답시간 단축, 자원소모 감소
단점 : 미묘한 시간차나 변수 공유함으로써 오류 발생 가능


스프링 프레임워크 장단점

장점: 프레임워크이므로 일정수준이상 품질 가능, 유지보수가 쉬움.
단점: 기능이 많아 익히기 어렵다. 무겁다.

Stateless 프로토콜
커넥션을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성
->데이터 유지가 필요한경우 쿠키,세션을 사용.

쿠키: 클라이언트에 저장.
세션: 서버에 저장.


====

AWS Lambda
->aws에서 제공하는 서버리스 컴퓨팅 플랫폼. ->서버를 신경쓸필요없이 코드만 신경쓰면되는 장점.

AWS:아마존이제공하는 클라우드 서비스.

ec2-> 가상의 공간에 내 컴퓨터를등록하는것.(웹호스팅서버)

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼.
컨테이너는 일종의 가벼운 가상머신 역할로 독립적으로 프로세스가 동작한다.

=========
RESTful API란?
자원을 URI로 표현하고, 자원에 대한 행위를 HTTP Method(GET, POST, PUT, DELETE)

GET과 POST의 차이

GET은 간단한 데이터를 URL에 넣는 방식.(보안x)데이터를 헤더에포함.캐싱o
(조회)

POST는 URL에 변수 노출하지않고 요청. 데이터가 바디.(보안o),데이터 길이 제한x캐싱x
(생성)

=======



MSA?
MicroService Architecture :
작고,독립적으로 배포 가능한 서비스로 구성된 프레임워크.
!! API를 통해 상호작용할 수 있다. end point를 API형태로 외부에 노출하고 세부 사항은 모두 추상화한다.
단점: 모놀리식에 비해 복잡하다.통합 테스트가 어렵다. 실제 운영환경에서 배포가 어렵다.


Monolithic Architecture:
부분장애->전체 서비스 장애
서비스 변경이 어렵고,수정 시 장애 파악 힘듬.
배포시간 오래 걸림.
한프레임워크와 언어에 종속적.

MVC패턴
모델 뷰 컨트롤러 3가지로 나눠서 역할분담을하는 패턴. 

데드락?
프로세스가 서로 자원을 점유하기위해 무한대기하는 현상.

상호배제 : 한번에 프로세스 하나만 자원 사용가능
비선점 자원점유 프로세스가 다른자원점유한 프로세스르 대기하는 프로세스가 존재.
점유 대기: 점유한 자원은 강제로 뻇을수 없다.
순환 대기: 서로 순환전으로 자원을 점유대기하는것을말합니다.


=================================
자바자바자바자바자바자바자바자바ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

클래스: 객체를 만들때 사용하는 틀. 

객체: 소프트웨어 세계에 구현해야할 대상

인스턴스: 클래스로 구현한 객체 하나하나를 말하는 것. 객체가 메모리에 할당되고 사용될때를 일컫음.

객체는 클래스의 인스턴스이다.


인스턴스화란?
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 한다.
어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.

string: 불변한다. 수정시 객체를 새로만드므로 메모리 비효율적.

buffer: 동기화를 지원하여 멀티쓰레드환경에서 안전.

builder:동기화를 지원하지않아서쓰레드 위험. 단일쓰레드 환경은 stringbuffer보다 뛰어남.

static 변수: 같은 곳의 메모리 주소를 보기 때문에 공유 개념.
static 메서드: 객체 생성없이 클래스의 메서드 호출가능.

java의 main메서드가 static인 이유? 객체의 존재 여부에 관계없이 쓰기위해.

JVM의 동작과정

자바파일이 실행되고 자바컴파일러가 자바코드를 바이트코드로 변환
JVM이 변환된 바이트 코드를 런타임데이터 영역으로 클래스로더가 옮겨줌.
실행엔진이 바이트코드를 실행한다. 

Heap:동적메모리 
method: 클래스,메서드,static변수 정보 관리
stack: 매개변수 지역변수
native method stack: 자바코드외 언어
pc register: 실행 스레드 주소, 명령

se: 자바 스탠다드 에디션, 초보자 입문자들 사용
ee: 웹프로그래밍 기능 탑재.
me:휴대폰과같은 메모리한정된곳에서 동작



컬렉션 프레임워크
배열 문제점해결하며,데이터를 효율적으로 관리할 수 있는 자료구조들을 모아놓은것.

Vector와 ArrayList의 차이
-벡터는 한 번에 하나씩 쓰레드에서만 접근 가능
-어레이리스트는 동시에 여러 쓰레드에서 접근 가능

JSP와 서블릿

서블릿:자바 플랫폼에서 웹 앱을 개발할 때 사용하는 핵심기술
서버에서 웹페이지 등을 동적으로 생성하거나 데이터 처리 수행 위해 자바로 작성된 프로그램.
Servlet은 JAVA코드안에 HTML태그가 삽입되어 만들어지며 확장자는 .java

JSP
HTML내부에 JAVA코드를 삽입하는 형식이 JSP입니다. 다시말해 서블릿의 단점을 보완해서 만든 서블릿 기반의 스트립트 기술.

MVC패턴에서는 View는 JSP, Controller는 Servlet을 사용

public
public이 붙은 변수나 메서드는 같은 프로젝트 안에서 사용 가능합니다.

default
접근 제어자가 아무것도 붙지 않은 변수나 메서드는 default 상태로, 같은 패키지 안에서만 사용 가능합니다.

protected
protected가 붙은 변수나 메서드는 다른 패키지에서는 사용이 불가능합니다. 다만, 상속 관계일 때는 다른 클래스에서 사용 가능합니다.

private
private이 붙은 변수나 메서드는 같은 클래스 내에서만 사용 가능합니다

객체지향 프로그래밍 4가지 특징
상속
다형성
캡슐화
추상화

객체지향 설계 5대 원칙
S단일책임 원칙:클래스가 수행하는 서비스는 하나의 책임에 집중되어야합니다.
O개방폐쇄 원칙: 확장에는 자유롭고(재사용) 수정에는 닫혀있어야합니다. 
L리스코프 치환법칙 : 서브타입은 언제나 기반타입으로 교체할 수 있어야합니다.
I 인터페이스 분리원칙: 한 클래스는 자신이 사용하지않는 인터페이스는 구현하지 말아야 한다.
D 의존성 역전 원칙: 추상을 매개로 메세지 주고 받음으로써 관계를 최대한 느슨하게 만드는 원칙입니다.

직렬화란?
자바코드를 바이트(byte) 형태로 데이터 변환하는 기술

Wrapper Class?
기본 자료타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스

 == 연산자는 비교하고자 하는 두개의 대상의 주소값을 비교하고, String클래스의 equals() 메소드는 비교하고자 하는 두개의 대상의 값 자체를 비교.

Call by Value:값을 전달.
Call by Reference: 주소값을 비교.

자바 11 특징
1. String, File 클래스에 몇 가지 메소드 추가
2. 람다표현식에 var 키워드 사용 가능하도록 기능 추가
3. Http Client 추가
기존에는 아파치 라이브러리를 사용했는데, 11부터는 자바 표준 Http Client API가 생겼고, 성능이 이전 것보다 개선되었습니다.
====================
스프링

스프링이란?
자바의 오픈소스 애플리케이션 프레임워크 중 하나로, 스프링의 기본철학은 특정 기술에 종속되지 않고 객체를 관리할 수 있는 프레임워크를 제공하는 것 입니다. 그래서 컨테이너로 자바 객체를 관리하면서 의존성 주입과 제어의 역전을 통해 결합도를 낮추게 됩니다.

IOC?
제어권이 사용자에게 있지 않고, 프레임워크에 있어서 필요에 따라 사용자의 코드를 호출.
인스턴스의 생성부터 소멸까지 개발자가 아닌 컨테이너에서 대신 관리하게 됩니다.

DI?
객체간의 의존관계를 미리 설정해두면 스프링 컨테이너가 의존관계를 자동으로 연결해줍니다. 

필터와 인터셉트 차이
필터는 디스패쳐서블릿에 도달하기전에 요청을 처리하며
인터셉트는 컨트롤러에 도달전에 요청을 처리합니다.

필터는 웹컨테이너가 관리, 인터셉트는 스프링컨테이너.

ORM
객체와 테이블을 연결해주는 기술입니다. 

JPA
자바에서 제공하는 ORM 기술 표준 API입니다.

iBATIS 
iBATIS는 SQL에 기반을 둔 데이터베이스와 자바,닷넷 등을 연결해주는 역할을 하는 영속성 프레임워크이다.
 이러한 연결은 프로그램의 소스코드에서 SQL 문장을 분리하여 별도의 XML 파일로 저장하고 이 둘을 서로 연결해주는 방식으로 작동한다.개발자가 작성한 SQL 명령어와 자바 객체를 매핑해주는 기능을 제공하며, 기존에 사용하던 SQL 명령어를 재사용할 수 있다. 

Persistence Layer
데이터 베이스에 접근하는 계층이다. Business의 요청 처리에 따라 데이터베이스에서 데이터를 저장하거나 조회하거나 삭제하는 등의 로직을 수행한다. Spring의 Repository가 이 계층에 해당한다.


MVC패턴이란?
모델,뷰,컨트롤러로 역할을 분리하여 처리한다.
결합도가 낮은 코드가 되어 유지보수하기 좋음.

JPA에서 Entity 설계시 주의할점
Setter사용금지.
연관관계는 지연로딩으로 사용.

DTO를 사용하는 이유
Entity 내부 구현을 캡슐화 할 수 있다.
DB Layer, View Layer 역할 분리.
순환참조 예방가능.

N+1문제는
지연로딩으로 인해 쿼리 하나를 수행할때 조회결과가 100개일 시, 101번 
쿼리가날라가는것.
페치조인을 사용해서 해결가능.

생성자 인젝션을 사용하는 이유?
외부 수정 불가. ->final 사용가능.
의존성문제가 발생x.테스트 코드작성 용이.

=============================================

DBMS란?
DBMS는 데이터베이스 내 데이터에 접근하도록 도와주는 시스템입니다. DBMS는 크게 질의처리기와 저장시스템으로 이루어져 있습니다.

RDBMS:관계형 데이터베이스로 
2차원 행열 테이블 형태로 데이터를 관리합니다. 
복잡,무결성이 중요한 데이터에 적합.
수평적 확장이 어렵다. 수직확장만 지원

NoSQL
Key-value 형태로 데이터가 구성되어있습니다. 
수평적 확장이 자유롭지만, 중복데이터 처리를 따로 관리해야합니다. 
읽기 작업이 많이 일어나고,막대한 데이터를 다뤄야 해 수평 확장이 필요한 경우 사용.
변경에유연하고 ,데이터 양이 많거나 샤딩이 필요하면.



트랜잭션:DB작업단위. 모두 수행되거나 모두 수행되지 않아야 한다.
A원자성: 작업은 모두 수행되거나 모두 수행되지 않아야 한다.
C일관성: 트랜잭션 수행 전후로 일관성을 유지해야한다.
I 고립성: 트랜잭션 작업이 다른 트랜잭션에 영향을 미치지 않는다.
D지속성: 트랜잭션 수행 후 데이터는 영구히 저장된다.

이상현상
삽입이상
삭제이상
수정이상

인덱스란?
데이터베이스 검색을 효율적으로 하기위해 사용하는 자료구조.
인덱스에 의해 데이터들은 항상 정렬된 상태.
보통 B+트리를 사용하며, 검색은 O(1)로 해쉬 인덱스가 제일 빠르지만, 동등연산만 가능하므로
리프노드의 데이터가 링크드리스트로 이루어진 B+트리가 부등호 연산을사용할 수 있어 적합하다.

정규화란?
테이블간 데이터 중복성을 없애는 것이 목표. 데이터 무결성을 유지할수 있고, db저장용량을 줄일 수 있다.

1정규화
컬럼들을 원자값으로 분해

2정규화 1정규화를 만족하고 기본키이외 속성이 완전함수 족송이도록 분해한다.

3정규화 2정규화를 만족하고 이행적 종속이 없도록 분해

BCNF정규화 3정규화를 만족하고 모든 결정자가 후보키가 되도록 분해.


DBMS란?
DBMS는 데이터베이스 내 데이터에 접근하도록 도와주는 시스템입니다. DBMS는 크게 질의처리기와 저장시스템으로 이루어져 있습니다.

데이터 정의어(DDL, Data Definition Language) : 스키마를 정의하거나, 수정 또는 삭제하기 위해 사용하는 언어. 데이터 정의어로 정의된 스키마는 데이터 사전에 저장되고, 삭제나 수정이 발생하면 이 내용도 데이터 사전에 반영된다. Create, Alter, Drop 등이 있다.

데이터 조작어(DML, Data Manipulation Language) : 데이터의 삽입, 삭제, 수정, 검색 등의 처리를 요구하기 위해 사용하는 언어. Select, Insert, Delete, Update 등이 있다.

데이터 제어어(DCL, Data Control Language) : 내부적으로 필요한 규칙이나 기법을 정의하기 위해 사용하는 언어. Commit, Rollback, Grant, Revoke 등이 있다. 

스키마(schema)란스키마는 데이터베이스에 저장되는 데이터 구조와 제약조건을 정하는 것을 의미한다. 

옵티마이저
SQL문의 요구사항 처리하기위한 최적의 실행방법을 결정하는 dbms핵심엔진.

트리거
DML(데이터 조작어)가 수행됐을때 데이터베이스에서 자동으로 동작하도록 작성된 프로그램.

Hint
SQL튜닝의 핵심 부분. 일종의 지시구문. 
액세스경로, 조인 순서, 옵티마이저 목표 변경이 가능.

UML
Unified Modeling Language의 약자로 ‘객체 모델링 언어’ 또는 ‘통합 모델링 언어’를 뜻합니다. 시스템 설계, 요구분석, 시스템 구현 등의 과정에서 사용되는 모델링 언어로 표기법의 표준화를 목적으로 합니다.

Oracle과 MySQL의 차이점에 대해 설명하시오.
Oracle은 대규모 트랜잭션 로드를 처리하고 성능을 최적화하기 위해 여러 서버에 대용량 DB분산 절차적 언어를 통해 DB에 내장된 프로그램의 작성을 지원합니다. MySQL은 단일 DB로 제한되어 있어, 매일 수백만번 액세스하는 대용량 DB에는 부적합합니다. DB를 이전 상태로 복원하는데 도움이 되는 저장점이 없고 COMMIT과 ROLLBACK만 존재합니다. 

 
==================
네트워크

JSON과 XML 공통점

데이터를 저장하고 전달하기 위해 고안되었다
기계 뿐아니라 사람도 쉽게 읽을 수 있다.
계층적인 데이터 구조를 가진다
다양한 프로그래밍 언어에 의해 파싱될 수 있다
XMLHttpRequest 객체를 이용하여 서버로부터 데이터를 전송받을 수 있다.

JSON(JavaScript Object Notation)
브라우저 통신을 위한 속성-값 또는 키-값 쌍으로 이루어진 데이터 포맷

XML(eXtensible Markup Language)
HTML과 매우 비슷한 문자 기반의 마크업 언어이다
HTML처럼 데이터를 보여주는 목적이 아닌 데이터를 저장하고 전달하는 목적으로 만들어졌다.
XML 태그는 HTML 태그 처럼 미리 정의 되어 있지 않고, 사용자가 직접 정의할 수 있다

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

면접 준비(1)  (0) 2022.10.02

+ Recent posts