일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 직장인점심구독
- 식단
- 샐러드
- 식단일기
- Plating
- 코딩테스트 연습
- 프로그래머스
- 자바 암호화 알고리즘
- 자바 암호화
- 도커
- 신입 개발자 자바 면접
- 프로그래머스 코딩테스트
- 개발자 인턴
- docker image
- .dockerignore
- 신입 개발자 면접 질문
- Linux
- 자바 암호화 복호화
- 신입 개발자 면접
- 개발자 코딩테스트
- docker
- 개발자 면접 질문
- 자바 stream
- 플레이팅
- 셰프의찾아가는구내식당
- 개발자 정규직
- 신입 개발자 자바 면접 질문
- 개발자 채용연계형인턴
- 신입 개발자 필수 면접 질문
- 개발자 면접
- Today
- Total
달리는 두딘
[JAVA] 신입 개발자 면접 질문 리스트 - JAVA (2) 본문
동기화(syncronized)란?
synchronized 키워드는
멀티 쓰레드 환경에서 두개 이상의 쓰레드가 하나의 변수에 동시에 접근을 할 때 Race condition(경쟁상태)이 발생하지 않도록 함
Array와 List의 차이점을 설명하세요.
배열은 인덱스를 가진 데이터의 집합이고,
리스트는 인덱스 없이 순차적으로 저장된 데이터의 집합이다.
배열은 메모리에 연속적으로 저장되고,
리스트는 메모리에 분산 되어 저장된다.
배열은 랜덤 엑세스가 가능하지만 중간에 데이터 삽입/삭제가 어렵다.
하지만, 리스트는 랜덤 엑세스가 불가능하지만 중간에 데이터 삽입/삭제가 쉽다.
upcasting과 downcasting에 대해 설명해보세요.
upcasting은 서브타입의 인스턴스를 수퍼타입의 변수로 접근하는 것을 말합니다.
즉, 자식 클래스가 부모 클래스 타입으로 캐스팅 되는것을 뜻합니다.
downcasting은 서브타입 인스턴스를 참조하는 수퍼타입 변수를 재참조하는 것을 말합니다.
즉, 부모 클래스가 자식클래스 타입으로 캐스팅되는 것을 뜻합니다.
직렬화(serialization)이란?
자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술.
직렬화(serialization) 사용 이유?
자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 함
역직렬화란?
직렬화한 데이터를 본래의 객체로 되돌리는 변환
serialVersionUID 이유?
데이터를 통신 상에서 전송 및 저장하기 위해 직렬화/역직렬화를 사용한다.
serialVersionUID 속성을 사용하여 Serializable 클래스의 버전을 기억하여 로드 된 클래스와 직렬화 된 객체가 호환되는지 확인
autoboxing과 unboxing에 대해 설명해보세요.
Autoboxing은 자바 컴파일러가 primitive data type을 그에 상응하는 wrapper class 로 자동 변환 시켜 주는 것을 의미합니다.
예를 들면 int를 Integer 로, double 을 Double로 변환 시키는 것들을 의미합니다.
Unboxing은 자바 컴파일러가 wrapper class를 primitive data type으로 자동 변환 시켜 주는 것을 말합니다.
garbage collection이란?
쓰레기 수집(garbage collection 가비지 컬렉션)은 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능
JDBC와 MyBatis
- JDBC (Java Database Connectivity)
자바에서 데이터베이스에 접속할 수 있도록 하는 즉, 자바에서 DB에 연결하기 위해 제공되는 API로 SQL(MYSQL, Oracle)에 접근함.
1개의 클래스에 SQL 및 DB 연결, 자바 언어가 모두 존재하기 때문에 재사용성이 좋지 않음.
- myBatis
Mybatis는 자바 오브젝트와 SQL사이의 자동 매핑 기능을 지원하는 ORM(Object relational Mapping) 프레임워크이다.
SQL을 별도의 파일로 분리해서 관리하게 해준다.
Hibernate나 JAP(Java Persistence Api)처럼 새로운 DB프로그래밍 패러다임을 익혀야하는 부담 없이 SQL을 그대로 이용하면서 JDBC코드 작성의 불편함도 제거해주고 도메인 객체나 VO객체를 중심으로 개발이 가능하다는 장점이 있다.
JDBC를 통해 수동으로 셋팅한 파라미터와 결과 매핑을 대신 해주어 JDBC로 처리하는 작업보다 더 간편하게 작업이 가능하며, 코드량이 적어 생산성을 높여줌.
Primitive type과 Reference type
- Primitive type
변수에 값 자체를 저장(정수형, 실수형, 문자형, 논리형) – Wrapper Class를 통해 객체로 변환 가능
- Reference type
메모리상에 객체가 있는 위치를 저장
종류 – Class, Interface, Array 등
Wrapper Class
Primitive type으로 표현할 수 있는 간단한 데이터를 객체로 만들어야 할 경우가 있는데 그러한 기능을 지원
Singleton Design Pattern(싱글톤 디자인 패턴, 싱글톤 패턴)
클래스 인스턴스가 하나만 만들어지도록 하고, 그 인스턴스에 대한 전역 접근을 제공한다.
JAVA의 메모리 영역
- 메서드 영역
static 변수, 전역변수, 코드에서 사용되는 Class 정보 등이 올라간다. 코드에서 사용되는 class들을 로더로 읽어 클래스별로 런타임 필드데이터, 메서드 데이터 등을 분류해 저장한다.
- 스택(Stack)
지역변수, 함수(메서드) 등이 할당되는 LIFO(Last In First Out) 방식의 메모리
- 힙(Heap)
new 연산자를 통한 동적 할당된 객체들이 저장되며, Garbage 컬렉션에 의해 메모리가 관리되어 진다.
DAO와 DTO
- DAO(Data Access Object)
간단히 데이터베이스의 데이터에 접근을 위한 객체이다. 데이터베이스에 접근을 하기위한 로직과 비즈니스 로직을 분리하기 위해서 사용한다. DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다.
- DTO(Data Transfer Object)
VO(Value Object)로 바꾸어 말할 수 있는데 계층간 데이터 교환을 위한 JavaBean을 말합니다. 여기서 말하는 계층이란 Controller, View, Business Layer, Persistent Layer를 말하며 각 계층간 데이터 교환을 위한 객체를 DTO 또는 VO라고 부릅니다. 그런데 VO는 동일한 개념이지만 read only 속성을 가집니다.
String vs StringBuffer vs StringBuilder
- String
immutable(불변)
객체를 한 번 할당할시 메모리 공간에 변동이 없습니다.(할당시 Heap String Pool영역에 생성되어 그 값을 계속 사용합니다.)
동기화를 신경쓰지 않아도 됩니다.
엄청나게 많은 문자열을 선언 및 연산할 시 성능저하를 고려해야합니다.
- StringBuffer
mutable(가변)
각 메서드별로 Synchronized Keyword가 존재합니다.
멀티스레드 환경에서도 동기화를 지원합니다.(thread-safe)
- StringBuilder
mutable(가변)
동기화를 지원하지 않습니다.
StringBuffer VS StringBuilder
가장 큰 차이점은 동기화의 유무
- StringBuffer
동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다는 점(thread-safe) 입니다. 참고로 String도 불변성을 가지기때문에 마찬가지로 멀티쓰레드 환경에서의 안정성(thread-safe)을 가지고 있습니다.
- StringBuilder
동기화를 지원하지 않기때문에 멀티쓰레드 환경에서 사용하는 것은 적합하지 않지만 동기화를 고려하지 않는 만큼 단일쓰레드에서의 성능은 StringBuffer 보다 뛰어납니다.
statement와 preparedstatement 차이점
Statement와 PreparedStatement
SQL을 실행할 수 있는 객체
Statement
1. 단일로 사용될 때 빠른 속도를 지닙니다.
2. 쿼리에 인자를 부여할 수 없습니다.
3. 매번 컴파일을 수행해야 합니다.
PreparedStatement
1. 쿼리에 인자를 부여할 수 있습니다.
2. 처음 프리컴파일 된 후, 이후에는 컴파일을 수행하지 않습니다.
3. 여러번 수행될 때 빠른 속도를 지닙니다.
Statement와 PreparedStatement의 아주 큰 차이는 바로 캐시(cache)사용 여부이다.
Statement를 사용하면 매번 쿼리를 수행할 때마다 4단계를 거치게 되고(계속적으로 단계를 거치면서 수행)
PreparedStatement는 처음 한 번만 세 단계를 거친 후 캐시에 담아 재사용을 한다는 것이다. 만약 동일한 쿼리를 반복적으로 수행한다면 PreparedStatment가 DB에 훨씬 적은 부하를 주며, 성능도 좋다.
리플렉션(Reflection)이란?
리플렉션(Reflection)
객체를 통해 클래스의 정보를 분석해 내는 기법을 말한다
클래스의 구조를 개발자가 확인할 수 있고, 값을 가져오거나 메소드를 호출하는데 사용됩니다.
제네릭(generic)이란?
클래스에서 사용할 타입을 클래스 외부에서 설정하도록 만드는 것
제네릭으로 선언한 클래스는, 내가 원하는 타입으로 만들어 사용이 가능함
<안에는 참조자료형(클래스, 인터페이스, 배열)만 가능함
'지식노트' 카테고리의 다른 글
[JS] 회원가입 유효성 검사 (0) | 2022.05.04 |
---|---|
[JSP] EL과 JSTL (1) | 2022.05.04 |
[JAVA] 신입 개발자 면접 질문 리스트 - JAVA (1) (0) | 2022.04.29 |
[Javascript] var / let / const 차이 (1) | 2022.04.29 |
[Network] PORT와 DNS (1) | 2022.04.29 |