기술면접 준비[JAVA]
[JAVA]
1~100까지 합 구하기
public class Ex01 {
public static void main(String [] args) {
int a;
int sum = 0;
for (a=1 ; a<=100;a++){
sum = sum + a ;
}
System.out.print("1부터 100까지 합 : "+sum);
}
1.Garbage Collenction 이란 무엇? 자바의 GC는 어떻게 동작?
주기적으로 jvm의 heap에 메모리를 점검하여 스택에서 참조되지 않는 객체를 메모리에서 해제하는 장치
장: 프로그래머가 동적으로 할당한 메모리 영역의 전체를 완벽하게 관리할 필요가 없다
단: 메모리 해제 시점을 추적해야 하므로, 이 적업은 오버헤드 된다. 할당된 메모리 해제 시점을 알 수 없다. GC타이밍이나 점유시간을 예측하기 어려움, 프로그램이 예측 불가능하게 일시정지 할 수 있다.
원리: GC가 stack의 모든 변수를 스캔하면서 각각 어떤 객체를 참조하는지 찾아서 마킹
Reachable Object(리스트 안에 객체, 스택) -> 힙(리스트) ->힙(객체)가 차조하고 있는 객체 마킹
(참조ok –reachable, 참조x – unreachable ) , 마킹 되지 않은 객체를 heap에서 제거한다
2. 자바의 기본형 데이터 타입에 대해 설명
: 기본형 변수 안에는 직접 값들을 넣을 수 있음, 스택 영역에 저장
1)정수형: byte(1byte), short(2byte), int(4byte), long(8byte)
2)실수형: float(4byte), double(8byte)
3)문자형: char(2byte)
4)논리형: Boolean(1byte)
3.자바의 참조형 데이터 타입에 대해 설명
기본형 타입을 제외한 모든 형태, 변수 안에는 값들을 저장하고 있는 객체를 가리키는 주소를 가지고 있습니다.
1. 배열(array), 2.열거(enum),3.클래스(class),4.인페이스(interface)
4.oop란 무엇?
Object Oriented Programming – 객체 지향프로그래밍
애플리케이션을 구성하는 요소들을 객체로 바라보고, 객체들을 유기적으로 연결하여 프로그래밍 하는 것, 객체들의 유기적인 관계를 통해서 프로세스가 진행
코드의 재사용성과 중복코드 제거를 목적으로 만들어짐
특성은 캡슐화/추상화/다형성/상속성
5.캡슐화? = 은닉화
변수나 메소드를 하나로 묶어 관련성있게 클래스를 구성
외부에 노출되길 꺼려지는 정보들을 숨김 (setter와 getter로 간접접근이 가능함)
6.다형성?
상속을 통해 기능을 변경 및 확장 코드의 재사용 가능 / 동적바인딩 : 런타임시점에서 형성된 객체타입을 기준으로 실행 될 함수를 결정하고 호출. 런타임시점(코드 실행 이후)에서 값이 결정된다 !
7.8상속?, 상속의 단점
두 클래스간에 부모클래스와 자식클래스의 관계로 이루어져 자식클래스에게 속성을 물려주는 것
부모클래스 즉 상위 클래스에 강하게 결합되어 변화와 대처에 어려움. 상속구조가 복잡 해 질수록 그 영향에 대한 예측이 어려움,
9.class와 instance ?
Class : 객체를 정의하고 구현하기 위한 설계도, 서로 연관 되어있는 변수와 메소드의 집합체
Instance : 설계도를 바탕으로 소프트웨어 세계에 실제로 구현 된 구체적인 실체
10.thread란 ? thread구현하기위한 인터페이스, 클래스
프로세스내에서 실제로 작업을 수행하는 주체
구현방법은 thread클래스를 상속받는 방법, runnable인터페이스를 구현하는 방법
11. static ?
클래스를 설계할 때 멤버변수 중 모든 인스턴스에 공통적으로 사용해야 하는 것에 static을 붙임
static변수가 붙으면 인스턴스를 할 필요가 없다. 또한 static메소드안에서는 인스턴스 변수를 사용할 수 없다. Static은 로드 될 당시 정해져 있고, 인스턴스는 로딩 후 런타임시점에서 값이 결정되기 때문에 시기상 같이 할 수가 없는 것!
12.오버로딩과 오버라이딩 차이
오버로딩: 같은 메소드명, 이지만 인자(매개변수의 개수나 타입)가 다른 함수를 정의하는 것을 의미 함
리턴 값만 다르다고 해서 오버로딩이 되는 것은 아니다! 매개변수가 중요함!
오버라이딩: 상속 받은 메소들의 내용만을 변경하는 것을 의미 함.
13. 추상클래스와 인터페이스
추상클래스(~이다/is a 관계): 부모 클래스에선 추상메소드를 선언, 자식클래스에서 상속받아 메소드를 완성하도록 하는 클래스, 오버라이딩이 목적인 클래스임(미완성 설계도 음… 밀가루 반죽이라고 생각하자! 자식에서 빵을만들지,국수를만들지 수제비를 만들지 결정해서 완성한다고 이해하면 쉬움)
인터페이스(~을 할 수 있는/has a 관계): 인터페이스도 기본 설계도이나 인터페이스에 정의된 메소드를 각 클래스의 목적에 맞게 기능을 구현하는 것 – 다중 상속을 구현하고자 할 때 사용(원래 상속이 1번밖에 안되는 한계를 극복하기 위해), 쉽게 말해 하는 일의 내용은 같음(메소드) 근데 객체의 타입이 다를 경우 인터페이스를 이용함. (추상클래스를 이미 상속받아 사용중인 class에서도 같은 일을 하는 class등을 묶어버린 것이 인터페이스! 독작이 필요한 클래스에만 따로 상속에 구애 받지 않고 묶는 거 )
14.제너릭?
클래스나 메소드 사용 시에 타입을 지정할 수 있도록 하는 방법.
즉, 데이터 형식에 의존하지 않고 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법이다.
클래스 내부가 아닌 외부에서 사용자에 의해 지정되는 것을 의미 (클래스나 메소드에서 사용 할 데이터 타입을 정의 할 때 결정하는 게 아니고 인스턴스를 생성 할 때나 메소드 호출할 때 결정하는 기법이다.)
15.배열과 ArrayList 차이점
크기(길이)의 가변성 여부가 가장 큰 차이,
Array는 고정길이(길이가 변수 선언 시 지정되어 있다.)
ArrayList 사이즈가 가변적이라 추가, 삭제가 가능함
16. 스택과 링크드리스트와 리스트의 차이점
스택: 아래서부터 위로 차곡차곡 쌓이는 자료구조, 제일 마지막에 들어간 자료가 제일 먼저 나온다. 자료구조를 scope할 시 전부 뽑아야 함
링크드리스: 배열처럼 순서가 있는 자료구조, 값을 추가하거나 뺄 때마다 크기를 조절해야 함
리스트: 아이템들 사이에 뭔가 끼워 넣을 수 있으나 그 index에는 접근이 불가함.
17. 자바 컬렉션 프레임워크의 표 인터페이스?
Set/list/Map: 배열의 문제점을 해결하고, 잘 알려져 있는 자료 구조를 바탕으로 객체들을 효율적으로 검색 추가 삭제 할 수 있게 java.util패키지에 컬렉션과 관련된 인터페이스와 클래스 등을 포함
18.접근 제어자의 종류와 특성
Public: 외부 클래스가 자유롭게 사용할 수 있음
Protected: 같은 패키지 또는 자식 클래스에서(상속받으면 다른 패키지라도 가능) 사용할 수 있음
Private: 외부에서 사용할 수 없음
Default: 같은 패키지 안에서만 사용할 수 있다.
19.hashCode()값이 모두 같으면?
Hash의 리턴 값이 모두 같아지는 것 임.. equals를 사용해서 같은 타입의 두 참조변수가 같은 지 비교할 때 사용,…??
20. Hashtable과 HashMap 차이?
21.객체의 직렬화? 직렬화 대상이 되기 위해 구현할 인터페이스 ?
직렬화: 현재 데이터의 상태를 영속적으로 저장하거나 다른 환경으로 전달하기 위해 정해진 포맷으로 변환하는 것 (자바 내부에서 사용되는 객체 또는 데이터를 외부 자바시스템에서도 사용 할 수 있게 byte 형태로 데이터를 변환 혹은 그 반대인 역직렬화도 아울러 뜻 함)
직렬화 방법 : java.io.Serializable 인터페이스를 상속 받아야 함
22.자바로 자판기를 설계
23.라이브러리와 프레임워크의 차이점
프레임워크: 뼈대나 기반구조가 있음. 특점개념들의 추상화를 제공하는 여러 컴포넌트나 클래스로 구성 되어있고, 재 사용률이 높고, 높은 수준의 패턴조직이다 전체적 흐름을 스스로 주도함(spring 프레임워크)
라이브러리: 단순 활용가능한(개발에 필요한 것들을 미리 구현해 놓은) 도구들의 집합으로 필요한 곳에서 호출해서 바로 사용할 수 있다. 사용자가 전체적 흐름을 만듦. (python의 pip설치하는 모듈)