본문 바로가기
개발공부/JAVA Spring

[커리어리 글 공유] 주니어 자바 개발자를 위한 100가지 질문 (1)

by bzerome240 2023. 12. 4.

질문에 답하기~

 

조서희 / 주니어 자바 개발자를 위한 100가지 질문 1 | 커리어리

"주니어 자바 개발자를 위한 100가지 질문" 1편입니다. 주니어 자바 개발자를 위한 100가지 질문 (2)...

careerly.co.kr

 

1️⃣ 기초

📌 JDK와 JRE의 차이점은 무엇입니까?

JRE 자바 프로그램을 실행시키는데 필요한 런타임 환경

JDK 자바 프로그램을 개발하는데 필요한 것 ex) 컴파일러, 디버거, 개발도구

JVM 클래스라이브러리, 실행환경 등을 포함

📌 ==와 equals의 차이점은 무엇입니까?

==은 객체의 주소값을 비교한다.

equals도 객체의 주소값을 비교하는데,  문자열 타입을 비교할 수 있다.

📌 두 객체가 동일한 hashCode를 가지면 Equals()가 참이어야 합니다, 그렇죠?

hashCode는 객체의 해시 코드이기때문에 hashCode가 같다고해서 equals가 참은아니지만

equals가 True이면 hashCode는 같다.

📌 자바에서 final의 기능은 무엇입니까?

오직 한번만 할당할 수 있는 상태를 보장하는 선언자입니다.

📌 자바에서 Math.round(-1.5)는 무엇을 의미합니까?

반올림하는 것이다. -1

📌 String은 기본 데이터 타입입니까?

아니다. 문자열은 여러 문자로 구성된 데이터이며 이를 다루기위해 String 클래스를 제공한다.

기본 데이터 유형에는 정수, 실수, 문자, 불리언 등이 있다.

📌 자바에서 문자열을 조작하는 클래스는 무엇이 있습니까? 각 클래스의 차이점은 뭘까요?

String은 변경 불가능한 클래스로, 수정이 필요하지 않은 경우에 주로 사용

StringBuilder는 변경 가능한 클래스로, 문자열의 동적 수정이 필요한 경우 사용 / 단일 스레드 환경에서 사용

StringBuffer는 변경 가능한 클래스 , 문자열의 동적 수정이 필요한 경우 사용 / 멀티 스레드 환경에서 사용 / 동기화를 지원하여 스레드 안전성을 제공한다.

📌 String str ="i"와 String str = new String("i")가 동일합니까?

new를 사용하면 heap 메모리에 개별 객체가 만들어진다.

그냥 선언하면 String constant pool에 만들어진 하나의 객체를 참조한다.

📌 문자열을 반전시키는 가장 좋은 방법은 무엇인가요?

stringbuilder 클래스의 reverse()메소드를 사용하는 것

📌 String 클래스의 일반적인 메서드는 무엇이 있나요?

length(), charAt(), substring(), equals(), compareTo(), toUpperCase(), toLowerCase(), contains(), replace(), split(), trim()

📌 추상 클래스에서 추상 메서드는 필수적인가요?

아니다.

추상클래스는 인스턴스를 직접 생성할 수 없는 클래스이며 하나 이상의 추상 메서드를 포함한다.

추상메서드는 구현 없이 선언만 돼있는 메서드이며 이를 상속받은 구체적인 하위 클래스에서 반드시 구현해야 한다.

📌 보통의 클래스와 추상 클래스의 차이는 무엇인가요?

일반 클래스는 인스턴스를 직접 생성하여 사용할 수 있고 모든 메서드가 구현돼있다.

추상클래스는 인스턴스를 직접 생성할 수 없고 추상 메서드를 포함할 수 있다.

📌 final은 추상 클래스를 수정할 때 사용할 수 있나요?

사용할 수 있다.

final을 사용하면 추상 클래스를 확장할 수 없다. 하지만 추상 메서드는 오버라이딩하여 구현 가능하다.

 

2️⃣ Container

📌 자바 컨테이너란 무엇인가요?

객체들을 저장하고 관리하는 자료구조이다. 효율적으로 저장하고 검색하고 조작하는 기능을 제공한다.

📌 Collection과 Collections의 차이는 무엇인가요?

객체들의 그룹을 저장하기 위한 인터페이스

객체들을 추가, 제거, 검색, 순회하는 기능을 제공

📌 List, Set, Map의 차이점을 말해주세요.

세가지 다 collection 인터페이스의 주요 구현 유형이다.

List : 순서가 있는 객체들의 모음, 중복된 값을 허용한다.

Set : 중복된 값을 허용하지 않는 객체들의 모음

Map : 키와 값의 쌍으로 이루어진 객체들의 모음

📌 HashMap과 Hashtable의 차이는 무엇인가요?

둘다 Map 인터페이스를 구현한 클래스

동기화 - HashMap은 동기화를 지원하지 않는다. Hashtable은 스레드에 안전한 동기화된 메서드를 제공한다.

Null 허용- HashMap은 null을 키나 값으로 사용가능하다. Hashtable은 키나 값으로 null을 허용하지 않는다.

성능 - HashMap은 Hashtable보다 높은 성능을 가지며, 동기화가 필요하지 않은 경우에는 HashMap을 사용하는 것이 건장된다.

📌 각각 어떤 상황에서 HashMap과 TreeMap을 선택하나요?

정렬 - HashMap은 정렬되지 않은 순서로 요소를 저장한다. TreeMap은 키의 정렬을 유지한다.

성능 - HashMap은 빠른 검색 및 삽입 속도를 제공한다. TreeMap은 정렬된 키에 대한 작업에서 성능이 더 빠르다.

메모리 사용 - HashMap은 정렬에 필요한 추가 메모리를 사용하지 않는다. TreeMap은 키의 정렬을 위해 추가적인 메모리를 사용한다.

📌 HashMap 구현 원칙은 무엇인가요?

해시함수를 사용하여 키를 해시코드로 변환한다.

해시 충돌이 발생할 경우 충돌을 해결하기 위해 체이닝 기법을 사용한다.

키객체는 hashCode()와 equals() 메서드를 구현해야한다.

O(1)의 시간 복잡도를 가지는 효율적인 자료구조이다.

📌 HashSet 구현 원칙은 무엇인가요?

중복된 값을 허용하지 않는다.

Hashtable을 사용하여 요소를 저장하며, 고유한 값만을 저장하고 순서를 보장하지 않는다.

📌 ArrayList와 LinkedList의 차이점은 무엇인가요?

ArrayList는 배열을 사용하여 요소를 저장하고 인덱스로 직접 접근 가능하다. LinkedList는 노드의 연결 리스트로 요소를 저장하며 인덱스 접근은 선형 탐색을한다.

ArrayList는 요소의 삽입 삭제가 느리지만 인덱스 기반 작업 시 빠른 속도를 가진다. LinkedList는 요소의 삽입과 삭제가 빠르지만 인덱스 접근이 느리다.

ArrayList는 각 요소를 위한 고정된 크기의 배열을 사용하므로 메모리 사용이 적다. LinkedList는 각 요소에 대해 추가 메모리를 사용하여 노드를 유지해야하므로 메모리 사용이 더 크다.

📌 Array에서 List로 전환하려면 어떻게 해야하나요?

Arrays.asList() 메서드를 사용한다. <-> List.toArray() 메서드를 사용한다.

📌 ArrayList와 Vector의 차이점을 말해주세요.

ArrayList는 동기화를 지원하지 않는다. Vector는 스레드에 안전한 동기화 메서드를 제공한다.ArrayList는 더 빠른 성능을 제공한다. Venctor는 동기화 관련 오버헤드로 더 느리다.ArrayList는 요소가 추가될 때 자동으로 크기를 조정한다. Vector는 요소가 추가될 때 크기를 조정하기 위해 추가적인 오버헤드가 발생할 수 있다.

📌 Array와 ArrayList의 차이점을 말해주세요.

Array- 크기를 가지며 생성할 때 크기를 지정하고 그 크기 이상의 요소를 추가할 수 있다.- 특정한 데이터 타입만 저장할 수 있다.- 메모리 할당이 연속적이다.- 요소에 대한 접근, 수정이 빠르다.ArrayList- 크기를 동적으로 조정할 수 있다.- 제네릭을 사용하여 다양한 데이터 타입 요소를 저장할 수 있다. ex) 객체의 동적인 집합- 요소를 추가하거나 제거하는 메서드, 검색, 정렬 기능을 제공한다.- 메모리할당이 동적으로 이루어진다.- 성능 오버헤드가 발생할 수 있다. 그러나 미미하다. 유연성과 편의성 측면에서 더 많은 기능을 제공한다.

📌 Queue에서, poll()과 remove()의 차이는 무엇인가요?

둘 다 큐에서 가장 앞에 있는 요소를 제거하고 반환하는 함수

poll: 큐가 비었을 경우 null 반환

remove: 큐가 비었을 경우 NoSuchElementException 예외 발생

📌 thread-safe한 컬렉션 클래스들은 무엇이 있을까요?

멀티스레드 환경에서 동기화를 통해 스레드 안정성을 보장하는 클래스를 말하며,ConcurrentHashMap, ConcurrentLinkedQueue, CopyOnWriteArrayList 등이 있다.

📌 iterator란 무엇인가요?

컬렉션 요소들에 대해 반복하면서 순차적으로 접근하기 위한 인터페이스이다. 

📌 iterator의 사용 목적은 무엇인가요? 어떤 특징이 있죠?

컬렉션 내의 요소들을 순회하면서 접근하기 위함이 목적이다.

요소를 추가, 수정, 삭제하지 않으면서 안전하게 접근이 가능하다

📌 iterator와 listIterator의 차이는 무엇인가요?

iterator는 컬렉션 요소들을 단방향으로만 반복할 수 있습니다.

listiterator는 양방향으로 반복하고 요소를 수정할 수 있는 기능도 제공한다.

 

https://item.kakaocdn.net/do/7100fd9ddb4f8f7e8a8eafcb81a974f4f43ad912ad8dd55b04db6a64cddaf76d

 

3️⃣ multi-threading

📌 병렬과 동시성의 차이점을 말해주세요.

📌 스레드와 프로세스의 차이를 말해주세요..

📌 데몬 스레드는 무엇인가요?

📌 스레드를 만드는 방법을 나열해주세요.

📌 runnable과 callable의 차이는 무엇인가요?

📌 스레드의 여러가지 상태에 대해 말해주세요.

📌 sleep()과 wait()의 차이는 무엇인가요?

📌 notify()와 notifyAll()의 차이는 무엇인가요?

📌 thread run()과 tnread start()의 차이는 무엇인가요?

📌 스레드 풀을 생성할 수 있는 여러가지 방법을 말해주세요.

📌 스레드 풀의 상태에 대해 말해주세요.

📌 스레드 풀에서 submit()과 execute()의 차이는 무엇인가요?

📌 자바 프로그램에서 멀티 스레드 작업의 안전성을 어떻게 보장할 수 있을까요?

 

4️⃣ reflection

📌 reflection이란 무엇인가요?

📌 자바 직렬화란 무엇인가요? 어떤 상황에서 필요한가요?

📌 동적 프록시란 무엇인가요?

📌 동적 프록시는 어떻게 사용하나요?

 

5️⃣ object copy

📌 복사가 사용되는 이유는 무엇인가요?

📌 객체 복사는 어떻게 할 수 있나요?

📌 깊은 복사와 얕은 복사의 차이를 말해주세요.

 

 

 

 

 

728x90
반응형

댓글