F-Lab
🚀
상위 1% 개발자에게 1:1로 멘토링 받아 성장하세요

자바 기술 면접 대비하기 - 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에서 빅테크 기업 타이틀과 실력을 겸비한 멘토님들께 실력 향상을 위한 멘토링을 받을 수 있습니다.

 

개발 경험이 있는 취준생이거나 7년 이하 경력 개발자라면 충분히 멘토링을 받아 뛰어난 개발자로 성장하실 수 있습니다.

 

👉 F-Lab에 대해 알아보기

 

ⓒ F-Lab & Company

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

조회수

멘토링 코스 선택하기

  • 코스 이미지
    Java Backend

    아키텍처 설계와 대용량 트래픽 처리 능력을 깊이 있게 기르는 백앤드 개발자 성장 과정

  • 코스 이미지
    Node.js Backend

    아키텍처 설계와 대용량 트래픽 처리 능력을 깊이 있게 기르는 백앤드 개발자 성장 과정

  • 코스 이미지
    Python Backend

    대규모 서비스를 지탱할 수 있는 대체 불가능한 백엔드, 데이터 엔지니어, ML엔지니어의 길을 탐구하는 성장 과정

  • 코스 이미지
    Frontend

    기술과 브라우저를 Deep-Dive 하며 성능과 아키텍처, UX에 능한 개발자로 성장하는 과정

  • 코스 이미지
    iOS

    언어와 프레임워크, 모바일 환경에 대한 탄탄한 이해도를 갖추는 iOS 개발자 성장 과정

  • 코스 이미지
    Android

    아키텍처 설계 능력과 성능 튜닝 능력을 향상시키는 안드로이드 Deep-Dive 과정

  • 코스 이미지
    Flutter

    네이티브와 의존성 관리까지 깊이 있는 크로스 플랫폼 개발자로 성장하는 과정

  • 코스 이미지
    React Native

    네이티브와 의존성 관리까지 깊이 있는 크로스 플랫폼 개발자로 성장하는 과정

  • 코스 이미지
    Devops

    대규모 서비스를 지탱할 수 있는 데브옵스 엔지니어로 성장하는 과정

  • 코스 이미지
    ML Engineering

    머신러닝과 엔지니어링 자체에 대한 탄탄한 이해도를 갖추는 머신러닝 엔지니어 성장 과정

  • 코스 이미지
    Data Engineering

    확장성 있는 데이터 처리 및 수급이 가능하도록 시스템을 설계 하고 운영할 수 있는 능력을 갖추는 데이터 엔지니어 성장 과정

  • 코스 이미지
    Game Server

    대규모 라이브 게임을 운영할 수 있는 처리 능력과 아키텍처 설계 능력을 갖추는 게임 서버 개발자 성장 과정

  • 코스 이미지
    Game Client

    대규모 라이브 게임 그래픽 처리 성능과 게임 자체 성능을 높힐 수 있는 능력을 갖추는 게임 클라이언트 개발자 성장 과정

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