F-Lab
로그인
🚀
상위권 IT 회사로 취업/이직하고 싶으신가요?

자바 기술 면접 대비하기 - 1편

writer_thumbnail

F-Lab : 상위 1% 개발자들의 멘토링

 

안녕하세요! F-Lab의 대표멘토 Fitz라고 합니다.

 

IT서비스 기업과 빅테크 기업으로 취업/이직 준비를 하시는 분들을 위해 깊게까지 물어보는 기술면접을 대비하실 수 있도록 자료를 준비해보았습니다! 🔥

 

1편으로는 자바 편을 준비해보았는데요, 언뜻 보면 적어보이지만 토글을 펼쳐보면 더 많고 깊이있는 정보를 보실 수 있습니다.

 

많은 분들께 도움이 되길 바랍니다!

 

 



 

자바의 모든 클래스는 Object 클래스를 상속받습니다. 그리고 Object클래스에는 equals()hashCode() 라는 메소드가 선언되어 있습니다. 이 메소드들은 각각 어떤 역할일까요? 이 둘의 차이점은 무엇일까요?

검색 키워드

  • java equals hashcode
  • 동일성 동등성

잘못 답변할 수 있는 케이스

"hashCode"는 객체의 메모리 주소를 리턴합니다.
반론받을 수 있는 답변 : 그럼 우리가 "hashCode"를 오버라이드 했을때에도 메모리 주소를 리턴하게 할 수 있을까요? 자바에서는 개발자가 직접 메모리에 접근할 수 있나요?

꼬리질문

"hashCode" 를 잘못 오버라이딩하면 "HashMap" 등 hash 콜렉션의 성능이 떨어질 수가 있습니다. 어떤 케이스일 때 그럴 수 있을까요?
"HashMap"은 내부적으로 어떻게 구현되어있길래 그렇게 빨리 값을 탐색할 수 있을까요?

검색 키워드

  • HashMap 내부 LinkedList ("RedBlackTree" 관련한 내용도 나오면 좋습니다.)
  • IDE를 이용해 `HashMap` 의 구현 내용 들여다보기

꼬리질문

  • 기존 "HashMap" 의 시간복잡도는 얼마이고, "hashCode" 를 잘못 오버라이딩 했을때의 시간복잡도는 얼마일까요?


 



 

StringBuilderStringBuffer의 차이는 무엇일까요?

검색 키워드

  • StringBuilder StringBuffer 동기화

꼬리질문

왜 동기화(synchronized)가 걸려있으면 느린걸까요?
  • 싱글 스레드로 접근한다는 가정하에선 "StringBuilder" 와 "StringBuffer" 의 성능이 똑같을까요?


 



 

System.out.println 메소드는 현업에서 절대 쓰지 말라고하는 메소드인데요. 그 이유가 무엇일까요?

검색 키워드

  • System.out.println 성능
  • Blocking IO

꼬리질문

이유를 찾아보셨으면, 왜 그것들이 성능을 저하시킬까요?
  • synchronized 키워드는 왜 현업에서 큰 성능 저하를 일으킬 수 있을까요?
  • Blocking IO는 왜 성능을 저하시킬 수 있을까요?
  • synchronizedBlocking IO 와 만나면 어떻게 환장의 성능하락을 만들 수 있는걸까요?
    • 이 두 개가 만났을 때 스레드가 어떻게 동작할지, CPU 사용률은 어떻게 될지 시뮬레이션을 해보세요.


 



 

ArrayList 는 내부적으로 어떻게 구현되어있을까요?

검색 키워드

  • ArrayList의 내부 구현

꼬리질문

미리보기 방지
  • 배열로 구현되어있다면 분명 크기가 꽉 차면 일반 배열처럼 예외가 발생할텐데 ArrayList 는 어떻게 무한히 데이터를 받을 수 있을까요?
    • IDE를 이용하여 내부 구현을 한번 구경해보세요


 



 

스레드는 왜 써야하는 것일까요?

꼬리질문

스레드를 쓰면 동시에 여러 일을 처리할 수 있으니 한 1만개정도 띄우면 너무 좋지 않을까요?
사실 좋지 않은데.. 왜 좋지 않을까요? 스레드를 사용하는데에 있어 어떤 비용이 들까요?
메모리
  • 메모리 양은 얼마나 들까요?
컨텍스트 스위칭
컨텍스트 스위칭은 비용이 얼마나 들까요? CPU 사이클 단위로 말씀해주세요.

검색 키워드

  • 컨텍스트 스위칭 CPU 사이클
  • java context switching cpu cycle


 



 

0이 들어있는 변수에 10개의 스레드가 동시에 접근해서 ++ 연산을 하면 우리 예상과 다르게 10이 나오지 않습니다. 왜 그럴까요?

꼬리질문

++ 연산은 구체적으로 어떤 행위들로 이루어져 있을까요?

꼬리 질문

이 문제를 해결하려면 어떻게 해야할까요?
  • synchronized 키워드는 이 문제를 어떻게 해결하는걸까요?


 



 

자바에서 동시성과 관련된 예약어를 모두 말씀해주세요.
  • 1개가 아니라 2개입니다.

꼬리질문

미리보기 방지
volatile 키워드는 어떤 키워드일까요?
  • 이 키워드는 가시성을 보장해준다고 하는데, 이게 어떤 말일까요?
    • volatile 가시성 을 검색해보세요
  • volatile은 어떤 상황에 쓸 수 있을까요?


 



 

Blocking IONon-Blocking IO 의 차이를 말씀해주세요.

꼬리질문

Blocking IO 가 일어나면 스레드에는 무슨 일이 생길까요?
스레드가 멈춰있는 동안 CPU는 어떻게 될까요?
CPU가 쉬는 것을 막으려면 어떻게 해야할까요?
스레드를 늘리면 단점이 무엇일까요?
Non-Blocking IO는 CPU 활용률이 어떨까요?


 



 

Serializable 은 무엇일까요?

꼬리질문

직렬화란 무엇인가요?
직렬화의 포맷엔 무엇무엇이 있을까요?
  • JSON
  • XML

ETC…


 



 

여기까지 준비해봤습니다. 긴 질문 보느라 고생 많으셨습니다.

감사합니다!

ⓒ F-Lab & Company

이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.

조회수

해당 블로그 콘텐츠는
로그인 후 볼 수 있어요!

F-Lab
소개채용멘토 지원
facebook
linkedIn
youtube
instagram
logo
(주)에프랩앤컴퍼니 | 사업자등록번호 : 534-85-01979 | 대표자명 : 박중수 | 전화번호 : 0507-1315-4710 | 제휴 문의 : info@f-lab.kr | 주소 : 서울특별시 강남구 테헤란로 113, 705호 | copyright © F-Lab & Company 2020