Backend 언어/Java

Java 복귀 기념 영접 잡기 (주니어 자바 개발자를 위한 100가지 질문)

민초부 2023. 5. 31. 09:28
반응형

거진 5년 경력동안 노드 및 파이썬으로 경력 잘 쌓았고 이제 탈노드를 위해 진행 예정인 사이드프로젝트 백엔드 서버는 java로 구성하기로 마음 먹었다.

 

이를 위해 커리어리의 주니어 자바 개발자를 위한 100가지 질문에 대해 답을 정리하면서 영접을 잡아보고자 한다. (진행 중)

(고마워요 커리어리)

 

 

<<기초>>

  1. JDK와 JRE의 차이점은 무엇입니까?
    • JDK : Java Development Kit / JRE : Java Runtime Environment
    • JRE는 자바 실행 환경으로 실행시키는데 필요한 라이브러리 JVM(자바 가상 머신)이 포함되어있다. JDK는 JRE를 또 포함한 개념으로 개발자들이 개발할 때 필요한 도구들을 지칭하는 개념(개발할 때 실행도 시켜야하니 JRE가 포함되는 것)
  2. ==와 equals의 차이점은 무엇입니까?
    • equals는 값 자체를 비교하는 함수고 ==는 값이 아닌 주소값을 비교하는 연산자
  3. 두 객체가 동일한 hashCode를 가지면 Equals()가 참이어야 합니다, 그렇죠?
    • Nope. 주소가 hashCode는 단순 주소값일뿐 주소가 같아도 다른 객체가 같은 주소를 가지고 있을 수도 있다. 
  4. 자바에서 final의 기능은 무엇입니까?
    • typescript에서의 const같은 의미임. 재선언을 통한 변경이 불가능한 변수라는 것을 의미한다.
  5. 자바에서 Math.round(-1.5)는 무엇을 의미합니까?
    • 반올림하는거니깐 -1이요
  6. String은 기본 데이터 타입입니까?
    • Nope. 자바에는 기본 데이터 타입과 참조 타입이 있는데 기본 데이터 타입은 byte, short, int, long, float, double, char, boolean들이 있고 실제 값을 저장하며, 메모리에서 고정된 크기를 가집니다.
      반면에 참조 타입은 객체의 참조를 저장하며, 이 참조는 메모리의 객체를 가리킴. 참조 타입에는 클래스, 인터페이스, 배열 등이 있고 String은 클래스로, 참조 타입에 속합니다. (String이 특이하게 문자열 literal을 사용하여 클래스를 생성할 수 있는 것)
  7. 자바에서 문자열을 조작하는 클래스는 무엇이 있습니까? 각 클래스의 차이점은 뭘까요?
    • String, StringBuilder, StringBuffer 이렇게 3개가 있음 
    • String은 불변의 문자열 객체로 변경, 조작할 때마다 새로운 객체가 생성된다. StringBuilder는 가변의 문자열 객체로 조작 변경할 때마다 문자열 객체에서 바로 실행되어 변경된다. 하지만 여러 스레드에서 동시에 수정요청이 들어오면 문제가 발생할 수 있다. StringBuffer는 StringBuilder의 안전한 버전으로 여러 스레드에서 요청이 들어와도 안전하게 처리한다 하지만 이는 성능에 영향을 주기 때문에 싱글스레드 환경에서는 StringBuilder를 사용하는 것이 적합하다.
  8. String str ="i"와 String str = new String("i")가 동일합니까?
    • 위의 내용대로 new String("i")를 하면 새로운 객체를 생성하여 주소에 할당하기 때문에 ==를 하면 false로 나온다. 하지만 String a = "i" String b = "i" 로 하면 a == b는 true가 나온다. 동일한 문자열 리터럴을 사용하면 동일한 String 인스턴스를 참조하여 바라보게 한다. (String은 기본 데이터 타입이 아닌 참조 타입이니깐)
  9. 문자열을 반전시키는 가장 좋은 방법은 무엇인가요?
    • StringBuilder의 reverse를 사용한다.
  10. String 클래스의 일반적인 메서드는 무엇이 있나요?
    • 다양함.. length()부터 substring(), equals(), replace(), split() 등이 있다.
  11. 추상 클래스에서 추상 메서드는 필수적인가요?
    • Nope. 근데 추상 메소드를 가지고 있으면 추상 클래스로 반드시 선언해야함
  12. 보통의 클래스와 추상 클래스의 차이는 무엇인가요?
    • 일반 클래스는 new를 통해 직접 선언, 생성하여 사용할 수 있지만 추상 클래스는 선언, 생성을 바로 하지 못 한다. 그리고 extends, implements를 통해 상속할 수 있는데 추상클래스는 상속 시 보유한 method들을 하위 클래스에서 전부 구현되어야 한다. 이러한 특성 때문에 보통 추상 클래스는 일반 클래스에게 강제성을 부여하기 위해 사용된다.
  13. final은 추상 클래스를 수정할 때 사용할 수 있나요?
    • final은 보통 아래와 같은 뜻을 가진다.
    • 변수에 사용되면 변경 불가능한 변수 / method에 사용되면 override가 불가능한 메소드 / class에 사용되면 상속할 수 없는 최종 클래스
    • 이렇기 때문에 반드시 상속되어야 사용가능한 추상클래스에는 final 키워드는 사용할 수 없다. 

 

<<Container>>

  1. 자바 컨테이너란 무엇인가요?
  2. Collection과 Collections의 차이는 무엇인가요?
  3. List, Set, Map의 차이점을 말해주세요.
  4. HashMap과 Hashtable의 차이는 무엇인가요?
  5. 각각 어떤 상황에서 HashMap과 TreeMap을 선택하나요?
  6. HashMap 구현 원칙은 무엇인가요?
  7. HashSet 구현 원칙은 무엇인가요?
  8. ArrayList와 LinkedList의 차이점은 무엇인가요?
  9. Array에서 List로 전환하려면 어떻게 해야하나요?
  10. ArrayList와 Vector의 차이점을 말해주세요.
  11. Array와 ArrayList의 차이점을 말해주세요.
  12. Queue에서, poll()과 remove()의 차이는 무엇인가요?
  13. thread-safe한 컬렉션 클래스들은 무엇이 있을까요?
  14. iterator란 무엇인가요?
  15. iterator의 사용 목적은 무엇인가요? 어떤 특징이 있죠?
  16. iterator와 listIterator의 차이는 무엇인가요?

 

<<multi-threading>>

  1. 병렬과 동시성의 차이점을 말해주세요.
  2. 스레드와 프로세스의 차이를 말해주세요
  3. 데몬 스레드는 무엇인가요?
  4. 스레드를 만드는 방법을 나열해주세요.
  5. runnable과 callable의 차이는 무엇인가요?
  6. 스레드의 여러가지 상태에 대해 말해주세요.
  7. sleep()과 wait()의 차이는 무엇인가요?
  8. notify()와 notifyAll()의 차이는 무엇인가요?
  9. thread run()과 tnread start()의 차이는 무엇인가요? 
  10. 스레드 풀을 생성할 수 있는 여러가지 방법을 말해주세요.
  11. 스레드 풀의 상태에 대해 말해주세요.
  12. 스레드 풀에서 submit()과 execute()의 차이는 무엇인가요?
  13. 자바 프로그램에서 멀티 스레드 작업의 안전성을 어떻게 보장할 수 있을까요?

 

<<reflection & object copy>>

  1. reflection이란 무엇인가요?
  2. 자바 직렬화란 무엇인가요? 어떤 상황에서 필요한가요?
  3. 동적 프록시란 무엇인가요?
  4. 동적 프록시는 어떻게 사용하나요?
  5. 복사가 사용되는 이유는 무엇인가요?
  6. 객체 복사는 어떻게 할 수 있나요?
  7. 깊은 복사와 얕은 복사의 차이를 말해주세요.
 
반응형