자바 기술 면접 대비하기 - 1편
F-Lab : 상위 1% 개발자들의 멘토링
안녕하세요! F-Lab의 대표멘토 Fitz라고 합니다.
IT서비스 기업과 빅테크 기업으로 취업/이직 준비를 하시는 분들을 위해 깊게까지 물어보는 기술면접을 대비하실 수 있도록 자료를 준비해보았습니다! 🔥
1편으로는 자바 편을 준비해보았는데요, 언뜻 보면 적어보이지만 토글을 펼쳐보면 더 많고 깊이있는 정보를 보실 수 있습니다.
많은 분들께 도움이 되길 바랍니다!
자바의 모든 클래스는 Object
클래스를 상속받습니다. 그리고 Object
클래스에는 equals()
와 hashCode()
라는 메소드가 선언되어 있습니다. 이 메소드들은 각각 어떤 역할일까요? 이 둘의 차이점은 무엇일까요?
검색 키워드
java
equals
hashcode
동일성
동등성
잘못 답변할 수 있는 케이스
"hashCode"는 객체의 메모리 주소를 리턴합니다.
꼬리질문
"hashCode" 를 잘못 오버라이딩하면 "HashMap" 등 hash 콜렉션의 성능이 떨어질 수가 있습니다. 어떤 케이스일 때 그럴 수 있을까요?
"HashMap"은 내부적으로 어떻게 구현되어있길래 그렇게 빨리 값을 탐색할 수 있을까요?
검색 키워드
HashMap 내부 LinkedList
("RedBlackTree" 관련한 내용도 나오면 좋습니다.)- IDE를 이용해 `HashMap` 의 구현 내용 들여다보기
꼬리질문
- 기존 "HashMap" 의 시간복잡도는 얼마이고, "hashCode" 를 잘못 오버라이딩 했을때의 시간복잡도는 얼마일까요?
StringBuilder
와 StringBuffer
의 차이는 무엇일까요?
검색 키워드
StringBuilder
StringBuffer
동기화
꼬리질문
왜 동기화(synchronized)가 걸려있으면 느린걸까요?
- 싱글 스레드로 접근한다는 가정하에선 "StringBuilder" 와 "StringBuffer" 의 성능이 똑같을까요?
System.out.println
메소드는 현업에서 절대 쓰지 말라고하는 메소드인데요. 그 이유가 무엇일까요?
검색 키워드
System.out.println 성능
Blocking IO
꼬리질문
이유를 찾아보셨으면, 왜 그것들이 성능을 저하시킬까요?
synchronized
키워드는 왜 현업에서 큰 성능 저하를 일으킬 수 있을까요?- Blocking IO는 왜 성능을 저하시킬 수 있을까요?
synchronized
가Blocking IO
와 만나면 어떻게 환장의 성능하락을 만들 수 있는걸까요?- 이 두 개가 만났을 때 스레드가 어떻게 동작할지, CPU 사용률은 어떻게 될지 시뮬레이션을 해보세요.
ArrayList
는 내부적으로 어떻게 구현되어있을까요?
검색 키워드
ArrayList의 내부 구현
꼬리질문
미리보기 방지
- 배열로 구현되어있다면 분명 크기가 꽉 차면 일반 배열처럼 예외가 발생할텐데
ArrayList
는 어떻게 무한히 데이터를 받을 수 있을까요?- IDE를 이용하여 내부 구현을 한번 구경해보세요
스레드는 왜 써야하는 것일까요?
꼬리질문
스레드를 쓰면 동시에 여러 일을 처리할 수 있으니 한 1만개정도 띄우면 너무 좋지 않을까요?
사실 좋지 않은데.. 왜 좋지 않을까요? 스레드를 사용하는데에 있어 어떤 비용이 들까요?
메모리
- 메모리 양은 얼마나 들까요?
컨텍스트 스위칭
컨텍스트 스위칭은 비용이 얼마나 들까요? CPU 사이클 단위로 말씀해주세요.
검색 키워드
컨텍스트 스위칭 CPU 사이클
java context switching cpu cycle
0이 들어있는 변수에 10개의 스레드가 동시에 접근해서 ++
연산을 하면 우리 예상과 다르게 10이 나오지 않습니다. 왜 그럴까요?
꼬리질문
++
연산은 구체적으로 어떤 행위들로 이루어져 있을까요?
꼬리 질문
이 문제를 해결하려면 어떻게 해야할까요?
synchronized
키워드는 이 문제를 어떻게 해결하는걸까요?
자바에서 동시성과 관련된 예약어를 모두 말씀해주세요.
- 1개가 아니라 2개입니다.
꼬리질문
미리보기 방지
volatile
키워드는 어떤 키워드일까요?
- 이 키워드는
가시성
을 보장해준다고 하는데, 이게 어떤 말일까요?volatile 가시성
을 검색해보세요
- volatile은 어떤 상황에 쓸 수 있을까요?
Blocking IO
와 Non-Blocking IO
의 차이를 말씀해주세요.
꼬리질문
Blocking IO
가 일어나면 스레드에는 무슨 일이 생길까요?
스레드가 멈춰있는 동안 CPU는 어떻게 될까요?
CPU가 쉬는 것을 막으려면 어떻게 해야할까요?
스레드를 늘리면 단점이 무엇일까요?
Non-Blocking IO
는 CPU 활용률이 어떨까요?
Serializable
은 무엇일까요?
꼬리질문
직렬화란 무엇인가요?
직렬화의 포맷엔 무엇무엇이 있을까요?
- JSON
- XML
ETC…
여기까지 준비해봤습니다. 긴 질문 보느라 고생 많으셨습니다.
감사합니다!
사수가 없어 성장하기 힘드신가요?
F-Lab에서 빅테크 기업 타이틀과 실력을 겸비한 멘토님들께 실력 향상을 위한 멘토링을 받을 수 있습니다.
개발 경험이 있는 취준생이거나 7년 이하 경력 개발자라면 충분히 멘토링을 받아 뛰어난 개발자로 성장하실 수 있습니다.
이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.