면접 준비 JAVA

jodbsgh·2022년 4월 10일
0

🔥"면접 준비"

목록 보기
2/10

JAVA의 장단점에 대해 설명하시오

  • 장점
    가상머신으로 인해 이식성이 높다. 어떤 운영체제든 적용 가능하다.
    따라서 스마트폰에도 적용되고 범용성이 높다.

  • 단점
    컴파일링 과정이 늦다. 응답이 늦어 서버에 적합하지 않다.

  • 주의

  1. 멀티스레드 제공?
    요즘 나오는 언어는 멀티스레드를 제공한다. 따라서 장점이라고 하기는 어렵다.
  2. 서버에 왜 쓰면 안되나?
    서버에 적합하지 않다는 것이지 쓰면 안된다는 것은 아니다.

객체지향 언어란?

객체를 만들고 사용하는 언어로서 언어, 유지보수에 유리하다.
객체지향의 반대말은 절차지향 언어로서 실행 중간에 문제가 생길 경우 처음부터 다 수정해야 한다.
하지만, 객체지향은 문제가 있는 부분만 수정하면된다.
업그레이드 하기에도 더 쉽다.

자바가상머신이란?

메모리를 자동 관리해주고, 쉽게 다른 운영체제 이식이 가능한 개발환경이다.

클래스란?

객체의 설계도이다.
EX) 자동차 설계또, 붕어빵 틀
자동차, 붕어빵: 객체
자동차 스펙, 붕어빵의 크기: 필드값.

상속이란?

코드를 재사용하고, 상위 클래스의 필드값과 메소드를 하위 클래스가 쉽게 이용 가능하다.
아예 상속을 안받을 수는 있어도 골라서 받는 것은 안된다.

생성자란?

클래스와 이름이 동일한 메소드다. : 필드 초기화

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

  • 오버로딩
    짐을 쌓는 것, 생성자 변수 추가
  • 오버라이딩
    담벼락을 건너뛴다(단순한 해석). 상위 클래스의 필드값/메소드를 하위 클래스가 이용하는 것 (메소드를 추가의 개념보단. 빌려와서 수정의 개념이라고 할 수 있다)

추상클래스와 일반 클래스의 차이점?

객체화 가능여부에서 차이가 있다.
추상클래스는 객체화가 불가능하지만, 일반 클래스는 객체화가 가능하다.

추상클래스와 인터페이스의 차이점

  • 추상클래스
    클래스다. 필드값 설정/ 메소드 내부코딩이 가능
  • 인터페이스
    클래스가 아니다. 필드값 설정 불가능하다( 상수만가능), 메소드 이름만 지정 가능하다.

내부클래스란?

클래스 안의 클래스다( 중첩클래스)
필터, 어려운공식을 쉽게 가져다 쓸 수 있게 사용된다.

내부 클래스 앞에 static: 정적내부클래스
static을 붙이지 않고 메인 클래스에서 작업 후 사용하는 것: 인스턴스 내부 클래스
외부 클래스 ㅇ안 메소드, 안 내부 클래스 : 로컬 클래스 내부 클래스

익명 클래스

일회용 클래스라고도 함
메소드 상속받을 때 급하게 다르게 쓸 수 있다.
형식은 같되 안의 내용만 바꿀 수 있다.

List란

array의 불편한 점을 클래스화하여 보완한 것

  • array
    크기 지정 한 번 하면 끝이다. 다른 형을 넣지 못한다. 데이터 추가가 어렵다.
    generic이란? 형이 동일한 데이터만 받는 것

List와 get과 Map의 차이는?

  • List
    중복허용, arrayList, linkedList 가 있다.
  • set
    중복 허용x, hashset, treeset
  • map
    key는 중복을 허용하지 않지만, value는 중복을 허용한다. HashMap, TreeMap이 있다.

이진탐색트리란?(tree)

데이터가 저장될 때 부모노드의 값을 비교하여 작으면 왼쪽 크면 오른쪽에 저장된다.
이 때문에 한쪽만 저장이 되는 편중현상이 발생될 수 있다.
데이터 저장 알고리즘으로써 데이터 체계적 관리가 가능하지만, 편중되면 데이터 읽는 속도가 느려진다.

treeset과 hashset의 차이는

  • TreeSet
    하나의 형만 저장이 가능하다.
  • HashSet
    다른 형 저장이 가능하다.

TreeMap과 HashMap의 차이는?

  • TreeMap
    key는 이진탐색트리, key는 null 허용 x
  • HashMap
    key null을 1번만 허용해줌.

MVC패턴, 모델이란?

소프트웨어 개발 프로세스이다.
M: Model, (필드값)String name, int weight
V: view, GUI
C: Controller, 메소드

쓰레드란?

한 프로세스 내 작업 단위다.
하나의 프로세스는 수 많은 쓰레드가 존재한다.

데몬쓰레드란?

main 쓰레드 동작, 뒤에서 작동하는 쓰레드다. 단 main쓰레드 종료 때 같이 종료된다.
ex) 자동 저장...

동기화와 공유객체, 상태제어

ex)ABC 세 사람(스레드)가 그 책을 원한다.(동기화된 스레드)
가장 먼저 도착한 A가 책을 빌려갔다. (우선순위)
이기적인 A는 책을 1년동안 가지고 있었다.
화가난 도서관장은 A책을 뺏어와 B와 C중 먼저 온 사람에게 빌려주었다 (상태 제어)

공유객체: 한정된 객체.
동기화 스레드: 공유객체 원하는 스레드 중 우리가 동기화시킨 것, 가장 먼저 접근한 것에 모든 권한을 줌
상태제어: 특정도건 wait, notify

OOP란? 객체지향 언어다.

Object Oriented Programming

사용해본 IDE가 있는가?? 통합 개발 환경)

Eclipse, InteliJ

캡슐화/ 은닉화

getter/setter, 변수 private

접근제어자를 왜 사용할까?

  • 한 클래스 내부에 변수나 메소드의 사용 범위를 제한하는 것이다.

  • OOP의 캡슐화라는 특징 때문에 접근제어자를 사용.
    외부로부터 내부 구조를 숨겨서 안전성을 높이는 것,
    필요하지 않은 것들은 의존관계를 끊어 내어, 결합도를 낮추는 역할

private: 해당 클래스 내부에서만 접근 가능
default: 해당 패키지 안
protected: 해당 패키지 안, 외부에서 상속받을 때
public: 항상 가능

컬렉션 프레임워크

Iterable은
Iterator를 구현하면 된다. 그렇게 되면 Iterable은 Iterator를 반환하게 된다.

List

인덱스로 데이터를 관리하는 구조
ArrayList, LinkedList, Vector가 있다.

ArrayList와 Vector는 배열의 구조로 이루어져 있다.
이들의 배열 길이는 기본 10으로 설정되어 있는데, 데이터(객체 주소)를 추가하게 되면 자동적으로 늘어나게 된다.

하지만 이 과정에서 치명적인 문제가 하나 있다. 배열의 길이를 늘리는 과정에서 기존의 인덱스 값들을 복사하는 과정이 필요하기 때문에 길이가 늘어나게 될 수 록 비효율적인 특징을 지니고 있다.

반면, LinkedList의 경우 다음 객체의 주소정보를 가지고 있어 ArrayList나 Vector 처럼 연속적이지 않다. 따라서 객체의 연결된 주소값만 변경해주면 되기 때문에 객체의 수정이 ArrayList나 Vector에 비해서 효율적이다.

Set

순서와 Key가 중복되지 않는 자료구조

HashSet
HashCode라는 메서드를 통해서 Hash코드를 가져오고 equals()를 통해서 같은지 비교한다. 여기서 까지 같다면 그 데이터는 저장되지 않는다.

TreeSet
compareTo() 메서드를를 통해서 데이터를 비교하고 이진트리 자료구조로 저장한다.
추가와 삭제를 할 때 트리를 재배열해야 되기 때문에 시간이 오래걸린다. 검색의 경우는 트리의 Root에서부터 깊이 만큼 하기 때문에 시간복잡도가 logN만큼 걸린다. 따라서 삽입 삭제는 속도가 느리지만, 검색은 빠르다.

LinkedHashSet
HashSet과 비슷하지만, 내부 LinkedList에서 입력순서를 저장해서 입력순서를 확인할 수 있다.

Map

Collection과는 다른 구조로 되어 있다.
순서가 없고 Key와 Value로 저장하는 구조이다. 이 때 key는 중복이 되지 않지만 value는 중복이 가능하다.

자바 버전

자바에서는 6개월마다 새 제품을 출시하고,
3년마다 유지보수를 제공하는 LTS 버전을 출시한다.
Long Term Support
8, 11, 17 버전이 나와있다.

JAVA 8

  1. Lambda 식의 등장

  2. Stream의 등장
    병렬처리가 가능하다. 속도가 빨라진다.

  3. Interface의 추가 기능 등장
    default라는 메소드를 구현할 수 있게 되었다.

  4. Optional의 등장

JAVA 11

  1. String, File에 메서드가 추가되었다.

  2. Lambda var키워드를 사용할 수 있게 되었다.

  3. HttpClient가 추가되었다.

Generic

타입을 지정해줌으로서 컴파일단계에서 잠재적인 오류를 찾아낼 수 있게 해준다.

Wrapper

자료형은 기본형(primary)과 참조형(refrence)으로 구분된다.

  • heap
    객체들이 저장되는 공간

  • stack
    기본형 데이터들이 저장되는 공간

Wrapper class란
Primary의 타입을 Refrence타입으로 사용하여 객체로서 다루기 위해 사용되는 클래스

  • 특징1
    "==" 로 연산이 불가능하다.
    Primary의 경우 값을 비교하고
    Refrence의 경우 참조 주소를 비교한다.

따라서 "=="을 사용하지 않고 equals()를 이용해 비교해야 한다.

  • 특징2
    Immutable 오브젝트 특징을 갖는다. 따라서, 변경이 불가능하다.
Integer a = 1	//객체를 만들어 1을 a에 할당

a=2				// 1이 2로 변경되는 것이 아니라, 새로운 값이 할당됨
  • String이 경우
    "=="을 통해서 비교할 때, 리터럴로 생성할 경우 intern()메서드를 호출하여 StringPool에 같은 것이 있는지를 확인한 후 해당 주소를 가져오기 때문에 리터럴로 생성할 땐 비교가 가능하다.

1.자바 어플리케이션 실행 과정

바이트코드란 자바소스를 컴파일한 다음에 나오는 코드이다.
1. 자바 파일이 먼저 바이트 코드로 변환된다.
2. 클래스 로더가 JVM메모리에 두 번째로 바이트 코드를 업로드시킨다.
3. 실행 엔진이 JVM메모리에 있는 바이트 코드를 실행한다.

그때 그때 필요한 클래스들을 클래스 로더가 클래스를 로드해준다.

2.클래스 로드 과정

  1. 로딩 단계: .class 파일을 JVM 메모리에 로드한다.

  2. 링킹 단계:
    2-1 검증: 제대로 자바 규칙을 따르는지 검증
    2-2 준비: 이 클래스가 필요로하는 메모리를 미리 할당
    2-3 분석: 클래스가 참조하는 객체에 대해서 실제 메모리 주소값을 대입한다.

  3. 초기화 단계: 클래스 안에 static 변수의 값을 할당하고 초기화 하는 단계다.

3.클래스 로더

클래스 로더에 올려달라는 요청을 받으면 3가지 단계로 동작한다.

  1. 캐시에 해당 클래스가 있는지 확인한다. 즉, 이전에 로드된 클래스인지 확인

  2. 상위 클래스 로더에서 확인한다.

  3. 없다면 본인 클래스 로더에서 가져온다.

HTTP 상태 코드

  • 100번대 (정보) : 요청을 받았으며 프로세스를 계속한다.

  • 200번대 (성공) : 요청을 성공적으로 받았으며 인식하였고 수용하였다.

  • 300번대 (리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요하다.
    301번 VS 302번의 차이
    -301(영구이동) : 요청한 페이지를 새 위치로 영구적으로 이동했다. GET 또는 HEAD 요청에 대한 응답으로 이 응답을 표시하면 요청자가 자동으로 새 위치로 전달된다.
    -302(임시 이동) : 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만 요청자는 향후 요청 시 원래 위치를 계속 사용해야 한다.

  • 400번대 (클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없다.
    401번 VS 403번의 차이
    -401(권한 없음) : 이 요청은 인증이 필요하다. 서버는 로그인이 필요한 페이지에 대해 이 요청을 제공할 수 있다. 상태 코드 이름이 권한없음(Unauthorized)으로 되어 있지만 실제 뜻은 인증 안됨(Unauthenticated)에 더 가깝다.
    -403(Forbidden, 금지됨) : 서버가 요청을 거부하고 있다. 예를 들자면, 사용자가 리소스에 대한 필요 권한을 갖고 있지 않다. (401은 인증 실패, 403은 인가 실패 라고 볼 수 있다.)

  • 500번대 (서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패했다.

profile
어제 보다는 내일을, 내일 보다는 오늘을 🚀

0개의 댓글