- 자바의 데이터 타입인 기본형에 대해서 말하시오.
정수형 - byte, short, int, long
실수형 - double, float
bool형 - boolean
각 데이터 형간에는 형변환이 가능하며, 큰 값에서 작은 값으로 캐스팅 시에는 값 손실이 있으므로, 반드시 (데이터형)을 표기하고 형변환 하여야 함 - 자바의 데이터 타입인 reference Type에 대해서 설명하시오.
기본형을 제외한 나머지 모두가 reference Type.
데이터 타입과는 달리, 참조값을 통해 해당 객체에 직접적으로 접근할 수 있음. - 접근 제어자의 종류와 특성에 대해 설명하시오.
Public (어디서든 접근이 가능)
Default (같은 패키지 내 혹은 상속 받은 클래스 내에서 접근 가능)
Protected (같은 패키지 내에서만 접근 가능)
Private (같은 클래스 내에서만 접근 가능) - 프로세스와 스레드란?
- 프로세스 - 실행되고 있는 프로그램의 개체. CPU 시간이나 메모리 등 시스템 장원이 할당되는 독립적인 개체. 다른 프로세스와 상관 없이 독립적으로 자원을 할당 받음.프로세스 간의 통신을 위해선 파이프, 파일, 소켓 등을 사용하여 통신하여야 함
- 쓰레드 - 프로세스 안에 존재하여, 프로세스의 자원을 공유하는 개체
흔히 경량 프로세스라고 부름
각 쓰레드는 별도의 레지스터와 스택을 갖고, 힙 영역은 공유함
- 뮤텍스와 세마포어
- 프로세스 혹은 쓰레드 간의 통신 시에 shared memory 등을 쓰는 경우 하나의 자원에 두 개 이상의 프로세스 혹은 쓰레드가 접근하는 경우에 문제가 발생.
이를 제어하기 위해 쓰레드에서는 뮤텍스를 사용하며, 프로세스에서는 세마포어를 사용 함 - 뮤텍스
- 상호배제라고도 하며, Critical Section을 가진 스레드의 Running time이 서로 겹치지 않도록 각각 단독으로 실행하게 하는 기술
synchronized 또는 lock을 통해 해결
- 상호배제라고도 하며, Critical Section을 가진 스레드의 Running time이 서로 겹치지 않도록 각각 단독으로 실행하게 하는 기술
- 세마포어
- 리소스 상태를 나타내는 간단한 카운터
공유 리소스에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근하여 사용할 수 있음.
- 리소스 상태를 나타내는 간단한 카운터
- 프로세스 혹은 쓰레드 간의 통신 시에 shared memory 등을 쓰는 경우 하나의 자원에 두 개 이상의 프로세스 혹은 쓰레드가 접근하는 경우에 문제가 발생.
- 쓰레드를 구현하기 위한 방법?
- Runnable 인터페이스 구현
- run 함수를 반드시 구현해야 함.
- Thread 생성자의 매개변수로 입력
- Thread 클래스를 상속
- Thread 클래스를 상속 받아서 구현.
- 자바는 다중 상속이 안되므로 이외의 클래스를 상속 받을 수 없음
- Runnable 인터페이스 구현
- synchronized에 대해 설명 하시오.
- 쓰레드가 하나의 자원을 공유함에 따라 데이터 일관성의 문제가 생기는데, synchronized 처리를 해줌으로써, 하나의 쓰레드만 접근할 수 있도록 함
- 쓰레드가 하나의 자원을 공유함에 따라 데이터 일관성의 문제가 생기는데, synchronized 처리를 해줌으로써, 하나의 쓰레드만 접근할 수 있도록 함
- Static 키워드
- 인스턴스 변수 혹은 인스턴스 메소드를 클래스 변수 혹은 클래스 메소드로 변경시킴
모든 인스턴스 간에 공유하는 변수 혹은 메소드가 됨
- 인스턴스 변수 혹은 인스턴스 메소드를 클래스 변수 혹은 클래스 메소드로 변경시킴
- 클래스와 인스턴스의 차이
- 클래스는 빵을 찍어 내는 틀과 같고, 인스턴스는 빵
클래스에서 정해진 기능과 모양에 맞추어 인스턴스가 생성됨
- 클래스는 빵을 찍어 내는 틀과 같고, 인스턴스는 빵
- 객체지향과 절차지향의 차이점
- 절차지향 - 순차적인 처리가 중요시 됩니다. 프로그램 전체가 유기적으로 연결되어 있어 하나의 코드 변경이 전체에 영향을 미칠 수 있음. 코드 사이즈를 최소화하고, 가장 빠르게 동작하는게 우선이면 절차지향 프로그래밍 언어를 사용
- 객체 지향
개발하려는 기능을 묶어 모듈화, 모듈을 재활용하기 때문에 같은 기능을 반복적으로 연산하지 않고 재사용률이 높음. 업그레이드가 쉬위며, 디버깅이 쉬움
절차 지향에 비해 상대적으로 느림
- 자바와 C의 차이점
- 자바는 One Source, Multi use 소스 하나를 가지고, 자바를 설치할 수 있는 플랫폼이라면 어떤 플랫폼에서도 소스 변경없이 사용 가능
메모리 관리를 JVM 내 GC를 통해 이루어지므로 시스템 안정성이 높음
자동으로 해주는 만큼 성능이 떨어지는 단점이 있음
- 자바는 One Source, Multi use 소스 하나를 가지고, 자바를 설치할 수 있는 플랫폼이라면 어떤 플랫폼에서도 소스 변경없이 사용 가능
- JAVA에서의 OOP
- 캡슐화 - 객체 외부에서 개채 내부 정보를 직접 접근하거나 조작할 수 없고, 외부에서 접근할 수 있도록 정의된 메소드를 통해서만 관련 데이터에 접근할 수 있음
내부 정보가 은폐되어 변경이 발생할 때 오류 발생이 적으며, 재사용이 용이함 - 상속 - 이미 작성된 클래스를 이어 받아, 새로운 클래스를 생성하는 기법
코드의 재활용성이 커짐 - 다형성 - 하나의 객체가 여러 개의 자료형 타입을 가질 수 있는 특성
ex) Tiger tiger = new Tiger();
Animal animal = new Tiger();
Predator predator = new Tiger();
Tiger 클래스, Animal 클래스에 선언된 함수에만 접근이 가능함
다형성이 없다면 각 클래스 객체 별로 연산을 해주어야 하나, 다형성으로 인해 하나로 묶을 수 있으므로 편리해짐
- 캡슐화 - 객체 외부에서 개채 내부 정보를 직접 접근하거나 조작할 수 없고, 외부에서 접근할 수 있도록 정의된 메소드를 통해서만 관련 데이터에 접근할 수 있음
-
추상클래스와 인터페이스에 대해 설명하시오.
- 인터페이스 - 클래스가 아닌, 다른 구조체 사용(interface).
다중 상속이 가능하며, 구현을 명시한 클래스에서는 반드시 구현해야 함
껍데기만 표현되어 있음 - 한 개 이상의 추상 메소드를 가진 클래스. 다중 상속이 불가능
클래스 앞에 abstract가 붙으며, 실제 메소드 추가도 가능
상속 받은 클래스에서 구현을 강제하지 않음
- 인터페이스 - 클래스가 아닌, 다른 구조체 사용(interface).
- 인스턴스 변수, 전역 변수, 로컬 변수
- 전역/클래스 변수
- 모든 인스턴스가 공통된 영역을 공유함
- 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 경우에 클래스 변수로 선언
- 인스턴스 변수
- 클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어짐
- 인스턴스는 독립적인 저장공간을 가지므로 인스턴스 별로 서로 다른 값을 가질 수 있음
- 지역 변수
- 메서드 내에 선언되며, 메서드 내에서만 사용가능
- 메서드가 종료되면 소멸되는 변수
- 변수 초기화 순서
- 클래스 변수 -> 인스턴스 변수 -> 지역 변수
- 변수 저장 영역
- Method Area - 클래스에 대한 데이터와 클래스 변수 저장
- Heap - 인스턴스가 생성되는 공간, 인스턴스의 정보들을 저장
- 호출 스택 - 메서드의 작업에 필요한 메모리 공간을 제공, 메소드가 종료되면 할당되었던 메모리 공간이 반환됨
- 전역/클래스 변수
- 오버로딩과 오버라이딩의 차이
- 오버로딩 - 똑같은 함수에 매개변수를 변경하여 선언하는 법
- 오버라이딩 - 부모 클래스로 부터 상속 받은 메소드의 내부 구현 로직을 변경하는 방법
- 자바 제너릭이란?
- 프로그래머가 의도하지 않은 객체가 저장될 수 없더록 타입을 지정하는 것
- 프로그래머가 의도하지 않은 객체가 저장될 수 없더록 타입을 지정하는 것
- 인터프리터와 컴파일러
- 리팩토링이란?
- 중복된 메서드를 하나로 합치고, 이동하는 것을 말함
- 중복된 메서드를 하나로 합치고, 이동하는 것을 말함
- instanceOf 명령어
- 특정 객체가 특정 클래스의 객체 인지 확인할 때 사용하는 내부 명령어
- 교착상태(데드락)
데드락은 두 개 이상의 프로세스나 쓰레드가 서로 자원을 기다리면서 무한히 기다리게 되는 상태를 말합니다.- 데드락을 피하는 방법
- 상호 배제: 하나의 자원을 특정 시기에 하나의 프로세스/쓰레드만 소유할 수 있는 형태
- 자원 점유: 하나의 자원을 소유하고 다른 프로세스 혹은 쓰레드의 자원을 요청하는 상태
- 선취 불가능: 하나의 프로세스/쓰레드에게 주어진 자원은 해당 프로세스/쓰레드가 스스로 놓기 전에는 놓게 만들 수 없는 상태
- 순환 대기: 두 개의 프로세스/쓰레드의 경우, A->B, B->C, C->A에게 서로 자원을 요청하고 기다리는 상황으로 서로 꼬리를 물고 기다리는 상황
- 4가지 중 하나라도 불충족하면 데드락이 발생하지 않음.
연간된 자원을 순차적으로 realese하는 방안과 전체를 제거하는 방안이 있음
- 데드락을 피하는 방법
- 멀티 프로세싱과 멀티 프로그래밍
- 멀티 프로세싱
- 여러 개의 CPU가 여러 개의 프로세스를 동시에 처리하는 방법
- 멀티 프로그래밍
- 한개의 CPU가 여러 개의 프로세스를 동시에 처리하는 방법
- 멀티 프로세싱
출처: http://manducku.tistory.com/44 [Manducku`s Code]
'Web Programming > java-jsp' 카테고리의 다른 글
Jsoup parser 크롤링 (0) | 2018.08.30 |
---|---|
java 경력 기술 면접 질문 리스트 (0) | 2018.08.29 |
신입 자바 개발자 면접 질문 (0) | 2018.08.29 |
Codility 자바 코딩실력 검증 (0) | 2018.08.29 |
java 소수 구하기 + 실행시간 단축 (0) | 2018.08.29 |