신입 개발자 면접 | 신입 개발자, 면접은 이렇게 준비하세요! 205 개의 베스트 답변

당신은 주제를 찾고 있습니까 “신입 개발자 면접 – 신입 개발자, 면접은 이렇게 준비하세요!“? 다음 카테고리의 웹사이트 https://you.charoenmotorcycles.com 에서 귀하의 모든 질문에 답변해 드립니다: https://you.charoenmotorcycles.com/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 삼평동연구소 이(가) 작성한 기사에는 조회수 22,108회 및 좋아요 362개 개의 좋아요가 있습니다.

Table of Contents

신입 개발자 면접 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 신입 개발자, 면접은 이렇게 준비하세요! – 신입 개발자 면접 주제에 대한 세부정보를 참조하세요

코딩테스트를 통과한 신입 개발자분들을 기다리는 것은, 바로 면접!인데요,
#개발자 #면접 에서는 어떤 질문이 나올까요?
기본 질문부터 심화 질문까지, 낱낱이 공개합니다!

다음주, 개발자 취업 3종 세트의 마지막, ‘포트폴리오 편도 기대해주세요!
오늘도 개발 레벨업!을 위해 ‘구독 \u0026 좋아요’ 부탁드려요♥

신입 개발자 면접 주제에 대한 자세한 내용은 여기를 참조하세요.

신입 개발자 기술면접 준비하기 — baealex – BLEX

전산 기초. 개발상식. 객체 지향 프로그래밍이란 무엇인가? 절차지향 프로그래밍은 오로지 컴퓨터 관점에서의 프로그래밍 패러다임이라면 객체 …

+ 여기에 자세히 보기

Source: blex.me

Date Published: 1/11/2022

View: 2824

신입 개발자 기술면접 질문 정리 – 자바

신입 개발자 기술면접 질문 정리 – 자바 … 개발자가 .java 파일을 생성한다. build를 한다. java compiler의 javac의 명령어를 통해 바이트 …

+ 여기에 자세히 보기

Source: dev-coco.tistory.com

Date Published: 1/20/2021

View: 146

현직자가 말하는 신입 백엔드 개발 면접 질문 | 제로베이스

백엔드 신입 면접 질문이라고 제목에 써두었으나, 해당 질문은 특정 기업 출제 면접 질문이 아님을 우선 밝힙니다. N사 현직 백엔드 개발자에게 직접 자문을 구한 이 …

+ 여기를 클릭

Source: zero-base.co.kr

Date Published: 7/17/2022

View: 2596

신입 개발자 면접 후기 – 혼코딩

신입 개발자 면접 후기. ASHE SUN 2020. 12. 17. 11:15 … 운이 좋은 건지 코딩테스트와 면접을 보고 합격해서 2개월 간 교육을 듣게 되었다.

+ 여기에 표시

Source: zsunn.tistory.com

Date Published: 12/29/2021

View: 2538

gyoogle/tech-interview-for-developer: 신입 개발자 전공 지식 …

신입 개발자 전공 지식 & 기술 면접 백과사전 . Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.

+ 자세한 내용은 여기를 클릭하십시오

Source: github.com

Date Published: 6/12/2021

View: 3645

신입 개발자 면접 준비 (1) : 일반 면접 관련 예상 질문(개발 외)

“왜 우리 회사에서 일하고 싶습니까?” · “당신이 생각하는 이상적인 개발 환경이란 무엇입니까?” (최선을 다해 일하는 데 어떤 조건이 필요한가?) · 입사 후 …

+ 자세한 내용은 여기를 클릭하십시오

Source: coding-restaurant.tistory.com

Date Published: 8/27/2022

View: 212

기술면접대비 – 테크 피드 – 프로그래머스 커리어

신입 개발자 면접을 위한 지식 총정리. 면접 관련 준비 사항과 문제들을 끌어모아 정리합니다. 데이터구조는 정돈된 데이터의 집합으로 특정 방식으로 데이터를 넣고, …

+ 여기에 더 보기

Source: career.programmers.co.kr

Date Published: 3/19/2021

View: 5275

신입 웹 개발자 첫 면접에 한번에 합격한 후기 (2)

다시 마음을 가다듬고 천천히 찾아보다가 세 가지를 하기로 결정합니다. 회사 잡플래닛 후기에 나온 면접 질문 리스트를 다 뽑아서 대비하기; 신입 개발자 …

+ 여기에 표시

Source: gamung.tistory.com

Date Published: 10/28/2022

View: 3760

면접관은 도대체 무슨 생각을 할까? | 개발자 인성 면접 최신

신입 개발자 면접 질문 \u0026 질문 의도 …

+ 여기에 보기

Source: ko.maxfit.vn

Date Published: 12/17/2022

View: 5342

주제와 관련된 이미지 신입 개발자 면접

주제와 관련된 더 많은 사진을 참조하십시오 신입 개발자, 면접은 이렇게 준비하세요!. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

신입 개발자, 면접은 이렇게 준비하세요!
신입 개발자, 면접은 이렇게 준비하세요!

주제에 대한 기사 평가 신입 개발자 면접

  • Author: 삼평동연구소
  • Views: 조회수 22,108회
  • Likes: 좋아요 362개
  • Date Published: 2020. 5. 8.
  • Video Url link: https://www.youtube.com/watch?v=eG4apS_pl8U

신입 개발자 기술면접 준비하기 — baealex

문제는 이곳에서 발췌한 것과 제가 임의로 추가한 내용입니다. 아래에는 제가 아는 정도만 작성하였으며 지속적으로 추가할 예정입니다. 잘못된 지식에 대한 비판은 언제나 환영이며 적극적으로 수용하도록 하겠습니다.

전산 기초

개발상식

객체 지향 프로그래밍이란 무엇인가?

절차지향 프로그래밍은 오로지 컴퓨터 관점에서의 프로그래밍 패러다임이라면 객체지향은 인간이 구분할 수 있는 요소를 객체로 표현한 인간 중심적 프로그래밍 패러다임이다. 객체는 기억장소와 이 기억장소의 값을 변경할 수 있는 연산의 집합이 정의되면 객체를 선언할 수 있다. 많은 객체 지향 언어에서 객체는 클래스로 그룹화 된다. 생성된 클래스로 객체의 특정 예를 생성하는데 이를 인스턴스라고 부른다. 객체 간의 정보 교환이 모두 메시지 교환을 통해 일어난다. 객체 지향 프로그래밍은 4가지 특징을 가진다.

추상화 : 공통된 특성을 파악하고 불필요한 특성은 제거한다.

캡슐화 : 객체는 상태와 동작을 가지며 객체 스스로 상태를 책임지도록 한다.

상속성 : 상위 객체를 상속 받을 수 있도록 한다.

다형성 : 동일한 요청에 다른 방식으로 처리할 수 있도록 한다.

함수형 프로그래밍이란?

함수형 프로그래밍은 순수 함수의 조합으로 소프트웨어를 설계하는 방식을 말한다. 순수 함수란 함수의 동작으로 인해 부수 효과(메모리의 값을 직접 수정하는 행위)가 발생하지 않는 함수를 말한다. 객체 지향 언어의 유일한 단점은 객체가 상태를 가지고 있다는 것이다. 따라서 객체는 프로그래머가 의도하지 않은 상태를 가질수도 있다. 함수형 프로그래밍에서 모든 입력은 새로운 출력을 가지므로 부수 효과를 가지지 않는다. 함수형 프로그래밍이 언제나 높은 효율을 보이는 것은 아니다. 상황에 따라 다르며 특히 맵리듀스를 해야하는 상황이라면 효율적이다.

REST API란 무엇인가?

REST는 자원(Resource), 행위(Verb), 표현(Representations)으로 구성된 API 아키택쳐이다. 웹의 장점과 HTTP의 우수성을 적극 활용할 수 있는 아키텍처로 URI 를 통해서 자원을 명시하고 POST , GET , PUT , PATCH , DELETE 등의 Method 를 통해서 해당 자원의 행위를 지정한다. 코드의 재사용성을 높일 수 있으며 프론트엔드와 백엔드의 완전한 분업이 가능해지는 등 장점을 가진다.

TDD란 무엇이며 어떠한 장점이 있는가?

테스트 주도 개발(Test Driven Development), 테스트를 먼저 만들고 테스트를 통과하기 위한 코드를 작성하는 것을 의미하며 모듈화가 자연스럽게 잘 이루어지면서 개발이 진행된다. 테스트 커버리지가 높아져 리팩토링과 유지보수가 쉬워진다.

MVC 패턴이란 무엇인가?

모델(Model), 뷰(View), 컨트롤러(Controller)가 분리된 형태의 아키텍처이다. 세가지가 결합된 형태에서는 어플리케이션의 확장이 어렵다. 모델은 데이터 처리, 뷰는 사용자 인터페이스 처리, 컨트롤러는 비즈니스 로직을 처리하는 등 각각의 요소가 하나의 역할만 담당한다.

Git과 GitHub에 대해서

버전 관리를 위한 도구

Docker와 VM의 차이점

Dcoker는 하드웨어를 가상화하는 계층(Hyper-V)이 없으며, 호스트의 자원을 직접 이용하기 때문에 메모리 접근, 파일시스템, 네트워크 속도가 가상머신에 비해 월등히 빠르다.

자료구조

순차 자료구조 vs 연결 자료구조

순차 자료구조는 메모리 상에서 일렬로 나열된 데이터형이며 연결 자료구조는 메모리 상에서는 분산되어 있지만 하나의 노드가 다음 노드로 이어지는 포인터를 가지고 있어 연속적으로 접근이 가능한 데이터형이다. 삽입과 읽기를 비교해보면 아래와 같다.

데이터 삽입

순차 자료구조 : 마지막 인덱스에 데이터를 삽입하는 경우엔 항상 빠르다. 처음 혹은 중간에 삽입하는 경우 자리교환으로 인한 오버헤드가 발생하므로 느리다.

연결 자료구조 : 데이터를 어디에 삽입하던 해당 노드까지 엑세스하는 시간이 소요된다. 자료 추가시 연결된 노드의 링크만 교체하면 되므로 빠르다.

데이터 읽기

순차 자료구조 : 탐색하려는 위치를 알고 있다면 즉시 엑세스 할 수 있으므로 빠르다. 위치를 모른다고 하더라도 메모리 상에서 근접한 데이터의 접근이 더 빠르므로 연결 자료구조보다 빠르다.

연결 자료구조 : 위치를 알던 모르던 관계없이 헤더 혹은 테일부터 찾으려는 위치까지 탐색이 필요하며 메모리에서 노드가 분산되어 있으므로 순차 자료구조에 비해 느리다.

스택과 큐

스택은 가장 먼저들어 온 개체가 가장 마지막에 나가는(Last in first out, LIFO) 방식을 사용하는 자료구조이며 대부분은 팬케이크에 비유된다. 아래에서 위로 데이터를 쌓고 위에서 아래로 데이터를 지운다.

큐는 가장 먼저 들어온 개체가 가장 먼저 나가는(First in first out, FIFO) 방식을 사용하는 자료구조이며 대부분은 택시정거장에 비유된다. 뒤에서 데이터가 들어오고 앞으로 데이터가 지워진다.

트리

트리는 계층 구조로 구성된 자료구조이다. 트리의 모든 노드는 최대 하나의 부모 노드를 가진다. 부모 노드를 가지지 않는 최상위 노드를 루트 노드, 자식 노드가 없는 노드를 리프 노드라고 한다. 트리의 크기를 제한하면 트리의 연산이 단순해지고 명확해지는데 차수를 2개 이하로 정의한 것이 이진 트리이다. 이진 트리의 종류로는 스레드 이진 트리, 이진 탐색 트리, AVL 트리 등이 있다.

힙(Heap)

힙는 이진트리의 한 종류로 나열한 두 가지 조건이 성립하는 이진 트리를 의미한다.

완전 이진 트리여야 한다. 부모 노드와 자식 노드간에 크기 관계가 성립해야 한다.

루트 노드가 가장 크고 자식 노드가 부모 노드보다 작으면 최대 힙이라 부르고, 반대의 경우는 최소 힙이라 부른다. 힙은 최댓값과 최솟값에 접근하기 위해 사용하며 성능이 매우 빠르다.

그래프

정점과 에지로 이루어진 형태의 자료구조다. 에지의 방향성의 존재 유무에 따라서 유향 그래프와 무향 그래프로 분리되며, 에지가 가중치를 가지고 있다면 가중치 그래프라고 부른다. 그래프는 행렬과 연결리스트를 활용하여 구현할 수 있는데 행렬의 경우 정점의 존재 여부와 상관없이 항상 n^2 의 공간 복잡도를 가진다.

해쉬

해쉬는 임의의 크기를 가진 데이터를 고정된 크기의 값으로 변환시키는 것을 말한다. 해쉬를 이용하여 임의의 데이터를 숫자로 변경하는 해쉬 함수를 정의하면 배열의 인덱스를 원하는 데이터 값으로 저장하거나 찾을 수 있다. 기존에는 탐색을 위한 시간이 소모됨에 반해 해쉬를 이용하면 즉시 데이터에 엑세스 할 수 있다. 단, 다른 입력이 같은 입력을 생성하는 현상을 해시 충돌이라고 하는데 해시 함수는 해시 충돌을 염두하여 구현하는 것이 중요하다.

네트워크

GET, POST 방식의 차이점

GET : 클라이언트는 GET 요청시 URI 와 Header 에만 데이터를 담아서 전송할 수 있으므로 데이터 크기가 제한적이며 URI 에 포함된 데이터는 사용자에게 그대로 노출된다. GET 요청은 캐싱이 가능하므로 단순 조회이거나 데이터가 사용자에게 노출되어도 상관없다면 적극 활용하는게 좋다.

와 에만 데이터를 담아서 전송할 수 있으므로 데이터 크기가 제한적이며 에 포함된 데이터는 사용자에게 그대로 노출된다. GET 요청은 캐싱이 가능하므로 단순 조회이거나 데이터가 사용자에게 노출되어도 상관없다면 적극 활용하는게 좋다. POST : 데이터를 URI 와 Header 그리고 Body 에 담아서 전송할 수 있으므로 GET 방식보다 전송할 수 있는 데이터가 현저히 크다. Body 데이터는 일반 사용자에게 노출되지 않으므로 안정적으로 데이터를 전송할 수 있다.

TCP 3-way-handshake

Client는 Server에 접속 요청 메세지(SYN)을 전송하고 SYN_SEND 상태가 된다.

Server는 SYN 요청을 받고 Client에 요청을 수락(SYN+ACK)하고 SYN_RECEIVED 상태가 된다.

Client는 Server에게 수락 확인(ACK)를 보내고 Server는 ESTABLISHED 상태가 된다.

TCP와 UDP의 차이점

TCP : 신뢰성과 순차적인 전달이 필요한 경우 사용한다. TCP 서비스는 송신자와 수신자 모두가 소켓이라고 부르는 종단점을 생성함으로써 이루어진다. TCP는 멀티캐스팅이나 브로드캐스팅을 지원하지 않는다.

UDP : 비연결형 프로토콜이며 손상된 세그먼트의 수신에 대한 재전송을 하지 않는다. UDP를 사용하는 것에는 DNS가 있다. 사전에 설정이 필요하지 않으며 그 후에 해제가 필요하지 않다.

HTTP와 HTTPS의 차이점

HTTP의 문제점은 평문 통신이기에 도청이 가능하다는 것, 통신 상대를 확인하지 않기 때문에 위장이 가능하다는 것, 완정성을 증명할 수 없기 때문에 변조가 가능하다는 것이다. TCP/IP 구조의 통신은 패킷을 수집하는 것만으로도 도청할 수 있다. 이를 해결하는 방법으로 통신 자체에 SSL을 적용하거나 콘텐츠 자체를 암호화하고 복호화하는 처리를 진행할 수 있다. 통신 자체에 SSL이 적용된 통신을 HTTPS라 칭한다.

DNS round robin 방식

DNS를 이용해서 하나의 서비스에 여러 대의 서버를 분산 시키는 방법이다. 동일한 이름으로 여러 레코드를 등록 시키면 질의 할 때마다 다른 결과를 반환하며, 이 동작을 이용함으로써 여러 대의 서버에 처리를 분산 시킬 수 가 있다. 단점은 아래와 같다.

서버의 수 만큼 공인 IP 주소가 필요하다.

DNS 질의 결과 캐싱으로 인해 균등하게 분산되지 않는다.

서버가 다운되어도 확인이 어렵다,

웹 통신의 흐름

추후 추가 예정

운영체제

프로세스와 스레드의 차이

스케줄러의 종류

CPU 스케줄러

동기와 비동기의 차이

멀티스레드

프로세스 동기화

메모리 관리 전략

가상 메모리

캐시의 지역성

데이터베이스

사용하는 이유

인덱스

정규화

트렌잭션

Statement vs PrepareStatement

NoSQL

프로그래밍 언어

Java

JVM, GC의 원리

콜렉션

어노테이션

Access Modifier

Wrapper class

Multi-Thread 환경에서의 개발

자바를 잘 몰라서 일반적인 질문에만 답변을 해봤습니다.

제내릭

제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션에 컴파일 시 타입 체크를 해주는 기능이다. 클래스 내부에서 사용할 데이터 타입을 나중에 인스턴스를 생성할 때 확정하는 것을 제네릭이라 한다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.

파이널

원시 변수에 final 선언 시 immutable 하여 상수로 사용 가능하다. 객체 변수에 final 선언시 레퍼런스 변경이 불가능하다. 하지만 객체 자체는 mutable 하다. 메서드에 final 선언 시 override 가 불가능 하다. 클래스에 final 선언 시 상속이 불가능하다.

오버라이딩 오버로딩

오버로딩 : 같은 이름의 메소드를 여러 개 가지는 것이다. 이때 매개변수가 서로 달라야 한다.

오버라이딩 : 상속 시 부모 클래스의 메소드를 상속 받은 자식 클래스에서 재정의 하는 것이다.

Javascript

자바스크립트 이벤트 루프

이벤트 루프는 테스크 큐와 콜 스택을 수시로 감시하여 콜 스택에 처리할 함수가 없고, 테스크 큐에 처리할 함수가 존재하면 테스크 큐에 있는 함수를 콜 스택으로 전달하는 역할을 담당한다. 예를들어 setTimeout을 호출한 경우 WebAPI에서 처리한 뒤 프로그래머가 지정한 작업(콜백 함수)이 테스크 큐에 등록된다. 이후 이벤트 루프에 의해 콜 스택으로 전달되어 처리된다.

Prototype

자바스크립트는 프로토타입 기반의 객체 지향 프로그래밍을 지원하며, 자바스크립트의 대부분은 객체이고, 모든 객체는 부모 객체와 연결되어 있다. 이때 부모 객체를 프로토타입이라 한다. 자바스크립트에서는 프로토타입 체인을 이용하여 상속을 구현한다. 인스턴스의 프로퍼티 혹은 메서드를 호출한 경우 인스턴스에 해당 프로퍼티 혹은 메서드가 존재하지 않으면 프로토타입 내부 슬롯의 참조로 이동하여 과정을 반복한다.

프로토타입 프로퍼티는 함수 객체만 가지고 있으며 이는 생성될 인스턴스의 프로토타입을 가리킨다. 프로토타입 내부 슬롯은 모든 객체가 가지며 프로토타입 객체의 참조를 가진다. 대부분의 경우 프로토타입 체인의 종단점은 Object.prototype 이다.

Hoisting

자바스크립트는 소스코드를 실행하기 전에 소스코드 평가를 거쳐 실행 컨텍스트를 생성한다. 이 과정에서 변수 선언문과 함수 선언문은 우선적으로 렉시컬 환경에 등록된다. 변수 선언문의 경우 선언과 초기화가 동시에 이루어지며 함수 선언문은 함수 객체로 등록된다. 따라서 소스코드 상에서는 변수가 선언되기 전이지만 프로그래머는 변수에 접근할 수 있다. 이러한 현상을 호이스팅이라 한다. 단, var의 경우에만 초기화가 진행되어 undefined로 접근되며, let 또는 const로 선언한 변수는 호스이팅되지만 호이스팅이 되지 않은 것처럼 동작한다는 점에 유의해야 한다.

Closure

클로저는 함수형 프로그래밍에서 중요하게 사용되는 개념으로 MDN 문서에서는 클로저를 함수와 함수가 선언된 렉시컬 환경의 조합으로 정의하고 있다. 외부 함수가 존재하고 외부 함수에 변수와 중첩 함수를 선언했을때 중첩 함수에서 외부 함수의 변수를 참조하는 상태로 중첩 함수가 반환이 되는 경우 외부 함수의 렉시컬 환경은 중첩 함수에 의해서 유지된다. 이러한 중첩 함수를 클로저라 한다. 클로저는 다음과 같은 상황에서 주로 사용된다.

상태 유지

정보 은닉

전역 변수 억제

this에 대해서

객체는 상태와 동작을 가진 자료구조다. 동작은 상태를 변경할 수 있어야 한다. 그러려면 메서드는 객체를 참조할 수 있어야 하는데 이러한 자기 참조 변수를 대부분의 프로그래밍 언어에서는 this로 정의한다. 단, 자바스크립트에서 this는 언제나 자기 참조 변수를 의미하지 않는다. 문맥에 따라서 변한다.

일반 함수에서 this : 비엄격 모드에서는 전역 객체로 바인딩된다. 엄격 모드에서는 undefined이다. 생성자 함수에서 this : 미래에 생성될 인스턴스를 의미한다. 메서드에서 this : 자기 참조 변수를 의미한다. call, apply, bind로 호출된 함수에서 this : 첫번째 인자로 넘겨준 객체가 this로 바인딩된다. 이벤트 핸들러에서 this : 이벤트를 위임한 객체(e.currentTarget)로 바인딩된다.

Promise

ES6 에서 추가된 비동기 처리를 위한 패턴이다. 기존 콜백 패턴이 가졌던 콜백 지옥과 같은 가독성 문제나 예외 처리가 어려웠던 문제를 보완하며 비동기 처리 시점을 명확히 표현할 수 있는 이점이 있다.

Python

Generator

제네레이터는 이터레이터를 생성해 주는 함수이다. 이터레이터는 next() 함수를 이용해 데이터에 순차적으로 접근이 가능하다. 제네레이터 함수가 실행 중 yield 를 만날 경우 함수는 그 상태로 정지 되며 반환 값을 next() 를 호출한 쪽으로 전달한다. 이후 다시 제네레이터 함수가 실행되면 종료된 시점에서 다음 yield 까지 실행된다.

클래스를 상속했을 때 메서드 실행 방식

인스턴스의 메서드를 실행한다고 가정할 때 __getattribute__() 로 bound 된 method 를 가져온 후 메서드를 실행한다. 상속할때 왼쪽에 가까운 순서대로 우선순위가 높아진다.

GIL과 그로인한 성능 문제

GIL(Global Interpreter Lock)은 여러 스레드가 동시에 실행되는 걸 막는다. 덕분에 구현이 간단하고 레퍼런스 카운팅 오버헤드가 적다. 수행시간에 CPU의 영향이 큰 작업(압축, 정렬, 인코딩)을 멀티 스레드로 수행하면 GIL 로 인하여 싱글 스레드일 때와 별반 차이가 나지 않는다. 따라서 CPU의 영향이 큰 작업(CPU Bound)을 진행할 경우에는 멀티 프로세스를 활용하는 것을 권장하며 파일 입출력, 네트워크 같은 입출력이 많은 작업(IO Bound)에 멀티 스레드를 사용하는 것이 적합하다.

GC 작동 방식

파이썬은 객체를 레퍼런스 카운트를 통해 관리한다. 객체를 참조하는 횟수가 늘어날수록 해당 객체의 레퍼런스 카운트는 증가하고 참조 횟수가 줄어들수록 감소한다. 레퍼런스 카운트가 0이 되면 객체는 메모리에서 해제된다. 단, 레퍼런스 카운트가 0이 아닌 경우에도 자가 참조 혹은 삭제된 객체들이 순환 참조되어 도달할 수 없는 경우에도 메모리에서 해제된다.

가비지 컬렉터는 세대와 임계값을 통해 가비지 컬렉션의 주기를 관리한다. 0세대의 경우 메모리에 객체가 할당된 횟수에서 해제된 횟수를 뺀 값이 threshold 0 을 초과하면 실행된다. 다만 그 이후 세대부터는 조금 다른데 0세대 가비지 컬렉션이 일어난 후 0세대 객체를 1세대로 이동시킨 후 카운터를 1 증가시킨다. 이 1세대 카운터가 threshold 1 을 초과하면 그때 1세대 가비지 컬렉션이 일어난다. 2세대도 1세대와 같은 방식으로 동작한다. 즉 1세대의 가비지 컬렉션은 threshold 0 * threshold 1 주기로, 2세대 가비지 컬렉션은 threshold 0 * threshold 1 * threshold 2 주기로 발생한다.

새로운 객체가 만들어 질 때 파이썬은 _PyObject_GC_Alloc() 을 호출한다. 이 메서드는 객체를 메모리에 할당하고, 가비지 컬렉터의 0세대의 객체 할당 횟수를 증가시킨다. 그 다음 이 횟수가 threshold 0 보다 큰지, gc.enabled 가 true 인지, threshold 0 이 0이 아닌지, 가비지 컬렉션이 진행중이 아닌지 확인하고, 모든 조건을 만족하면 collect_generations() 를 실행한다. 이때 가장 오래된 2세대 부터 역으로 검사하여 가비지 컬렉션을 진행한다.

PyPy가 CPython 보다 빠른 이유

CPython 은 일반적인 인터프리터임에 반해 PyPy 는 JIT(Just In Time)를 겸비한 인터프리터이기 때문이다. JIT 는 인터프리터의 단점을 보완하기 위해 기계어 코드를 생성하면서 그 코드를 캐싱하여, 같은 함수가 여러 번 불릴 때 매번 기계어 코드를 생성하는 것을 방지한다.

메모리 누수가 발생할 수 있는 경우

메서드 기본 인자 값으로 mutable 객체를 사용하고 있는 경우

객체를 사용하고 있는 경우 클래스 내 __del__ 메서드를 재정의 하는 경우

Duck Typing

Duck typing이란 특히 동적 타입을 가지는 프로그래밍 언어에서 많이 사용되는 개념으로, 객체의 실제 타입보다는 객체의 변수와 메소드가 그 객체의 적합성을 결정하는 것을 의미한다. 하나의 외부 메서드를 통해서 서로 다른 객체의 인자의 같은 이름의 메서드를 호출할 수 있다.

분야별

프론트엔드

브라우저의 작동 원리

브라우저의 핵심적인 기능은 사용자가 참조하고자 하는 주소를 파싱하여 웹 서버에 요청하고 응답을 표현하는 일이다. 브라우저는 서버로부터 HTML , CSS , JavaScript , 미디어 파일을 응답받는데, HTML , CSS 는 브라우저 렌더링 엔진의 HTML 파서와 CSS 파서로 의해 각각 DOM 과 CSSOM 으로 파싱되어 렌더 트리로 결합된다. 브라우저는 결합된 렌더 트리를 화면에 출력한다.

JavsScript 는 HTML 파서가 script 태그를 만나면 HTML 파싱을 중단하고 자바스크립트 엔진에 제어 권한을 넘겨준다. 자바스크립트 엔진은 인라인 스크립트 혹은 src 애트리뷰트에 명시된 스크립트 파일을 로드하여 코드를 파싱한 뒤 실행한다. 실행이 완료되면 자바스크립트 엔진은 HTML 파서로 제어 권한을 다시 넘겨주어 HTML 파싱이 재게된다.

따라서 스크립트 태그의 위치에 따라서 렌더링 속도에 큰 영향을 미칠 수 있다. 이를 방지하기 위해 스크립트 태그를 바디 태그가 끝나기 직전에 선언하거나 스크립트 태그에 defer 속성을 부여할 수 있다. defer 속성이 붙은 스크립트 태그는 을 만난 시점에 스크립트가 실행되도록 한다.

스크립트의 defer 속성과 async 속성의 공통점은 HTML 파서가 파싱을 진행하는 동안 스크립트 파일의 fetch 가 병렬적으로 이뤄진다. 차이점은 defer 속성이 붙은 스크립트는 HTML 파싱이 끝난 시점에 실행되고 async 는 스크립트의 fetch 가 끝난 시점에 실행된다는 것이다.

Document Object Model

텍스트 파일로 만들어진 웹문서의 요소를 각각의 객체로 만들고 트리 구조로 구성한 것이 DOM 이다. 브라우저의 렌더링 엔진이 웹 문서를 로드한 후 파싱하여 브라우저가 이해할 수 있는 위와같은 구조로 메모리에 적재한다. DOM 은 자바스크립트를 통해 동적으로 변경할 수 있으며 변경된 DOM 은 렌더링에 반영된다.

CORS

브라우저는 보안상의 이유로 스크립트에서 시작된 교차 출처의 HTTP 요청을 제한한다. 예를들어 브라우저에서 제공되는 Fetch API 는 기본적으로 동일 출처 정책을 따른다. CORS(Cross Origin Resource Sharing)는 추가 HTTP 헤더를 사용하여 교차 출처의 리소스에 접근할 수 있도록 권한을 부여하도록 브라우저에 알려준다.

크로스 브라우징

대부분의 기기, 대부분의 브라우저에서 동등한 사용자 경험을 제공하는 것을 말한다. 고려해야 하는 크로스 브라우징 이슈는 다음과 같다.

자바스크립트의 파편화 (브라우저가 표준을 준수하지 않음) 브라우저에서 기능을 구현하는 방법이 다르거나 버그가 있을 때 지원하는 기술의 버전이 다른 경우 : 바벨과 같은 트렌스파일러를 사용하여 해결 할 수 있다. 사이트가 느리거나 제대로 표시되지 않음 : 애니메이션이 다수 포함되어 저사양 기기에서 느린 현상과 PC를 기준으로 레이아웃이 구성되어 모바일에서는 정상적으로 사이트를 사용할 수 없는 현상을 의미한다. 스크린 리더와 같은 보조기술을 사용하거나 키보드로만 인터넷을 이용하는 사용자

웹 성능 문제점

추후 추가 예정

서버 사이드 렌더링 vs 클라이언트 사이드 렌더링

컴퓨터가 해석할 수 있는 문서가 서버에서 완성되면 서버 사이드 렌더링(SSR), 클라이언트에서 완성되면 클라이언트 사이드 렌더링(CSR)이라 한다. React나 Vue와 같은 SPA 기반의 프레임워크에서는 CSR을 기반으로 만들 수 있지만 제공하는 기능을 활용하여 SSR이 가동하도록 구현할 수 있다. SSR의 주 목적은 초기의 빠른 로딩과 SEO 가 대표적이다.

CSS Methodology

OOCSS (Object-Oriented CSS) 소규모 모듈 형태의 CSS 클래스를 다수 생성하여 활용 자손 선택자의 사용을 지향 동일한 속성의 중복을 줄이는 것이 목표

BEM (Block, Element, Modifier) 스타일링 대상를 블럭과 요소, 수정자로 구분 Block__Element–Modifier 네이밍 규칙을 가짐 HTML 문서 상에서 역할을 정확하게 파악할 수 있음 개발자의 역량에 따라 가독성이 좌우되는 문제가 있음

CMACSS (Scalabel and Modular Architecture for CSS)

SUIT CSS

normalize.css vs reset.css

신입 개발자 기술면접 질문 정리 – 자바

반응형

💡 Java의 특징을 설명해주세요.

Java는 객체지향 프로그래밍 언어입니다.

기본 자료형을 제외한 모든 요소들이 객체로 표현되고, 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어입니다.

장점 JVM(자바가상머신) 위에서 동작하기 때문에 운영체제에 독립적이다. GabageCollector를 통한 자동적인 메모리 관리가 가능하다.

단점 JVM 위에서 동작하기 때문에 실행 속도가 상대적으로 느리다. 다중 상속이나 타입에 엄격하며, 제약이 많다.

💡 JVM의 역할에 대해 설명해주세요.

JVM은 스택 기반으로 동작하며, Java Byte Code를 OS에 맞게 해석 해주는 역할을 하고 가비지컬렉션을 통해 자동적인 메모리 관리를 해줍니다.

💡 Java의 컴파일 과정에 대해 설명해주세요.

개발자가 .java 파일을 생성한다. build를 한다. java compiler의 javac의 명령어를 통해 바이트코드(.class)를 생성한다. Class Loader를 통해 JVM 메모리 내로 로드한다. 실행엔진을 통해 컴퓨터가 읽을 수 있는 기계어로 해석된다.(각 운영체제에 맞는 기계어)

💡 Java에서 제공하는 원시 타입들에 무엇이 있고, 각각 몇 바이트를 차지하나요?

정수형 byte, short, int, long 실수형 float, double 문자형 char 논리형 boolean이 있고,

정수형 1, 2, 4, 8, 실수형 4, 8, 문자형 2, 논리형 1 바이트를 차지합니다.

💡 오버라이딩(Overriding)과 오버로딩(Overloading)에 대해 설명해주세요.

오버라이딩(Overriding)은 상위 클래스에 있는 메소드를 하위 클래스에서 재정의 하는 것을 말하고,

오버로딩(Overloading)은 매개변수의 개수나 타입을 다르게 하여 같은 이름의 메소드를 여러 개 정의하는 것을 말합니다.

💡 객체지향 프로그래밍(OOP)에 대해 설명해주세요.

모든 데이터를 객체취급하며, 처리요청을 받은 객체는 객체 그 안의 기능을 사용해 요청을 처리합니다.

특징으로는 캡슐화, 상속, 다형성, 추상화 등이 있고, 모듈 재사용으로 확장 및 유지보수가 용이합니다.

💡 try-with-resources에 대해 설명해주세요.

try-with-resources는 try-catch-finally의 문제점을 보완하기 위해 나온 개념입니다.

try( … ) 안에 자원 객체를 전달하면, try블록이 끝나고 자동으로 자원 해제 해주는 기능을 말합니다.

따로 finally 구문이나 모든 catch 구문에 종료 처리를 하지 않아도 되는 장점이 있습니다.

try-with-resources 알아보기

💡 불변 객체가 무엇인지 설명하고 대표적인 Java의 예시를 설명해주세요.

불변 객체는 객체 생성 이후 내부의 상태가 변하지 않는 객체를 말합니다.

Java에서는 필드가 원시 타입인 경우 final 키워드를 사용해 불변 객체를 만들 수 있고,

참조 타입일 경우엔 추가적인 작업이 필요합니다.

💡 참조 타입일 경우 추가적인 작업은 어떤게 있는지 설명해주세요.

더보기 참조 타입은 대표적으로 1.객체를 참조할 수도 있고, 2.배열이나 3.List 등을 참조할 수 있습니다. 1. 참조 변수가 일반 객체인 경우 객체를 사용하는 필드의 참조 변수도 불변 객체로 변경해야 합니다. 2. 배열일 경우 배열을 받아 copy해서 저장하고, getter를 clone으로 반환하도록 하면 됩니다. (배열을 그대로 참조하거나, 반환할 경우 외부에서 내부 값을 변경할 수 있음. 때문에 clone을 반환해 외부에서 값 변경하지 못하게 함) 3. 리스트인 경우에도 배열과 마찬가지로 생성시 새로운 List를 만들어 값을 복사하도록 해야 합니다. 배열과 리스트는 내부를 복사하여 전달하는데, 이를 방어적 복사(defensive-copy) 라고 합니다.

💡 불변 객체나 final을 굳이 사용해야 하는 이유가 있을까요?

더보기 불변 객체나 final 키워드를 사용해 얻는 이점은 다음과 같습니다. 1. Thread-Safe하여 병렬 프로그래밍에 유용하며, 동기화를 고려하지 않아도 된다. (공유 자원이 불변이기 때문에 항상 동일한 값을 반환하기 때문) 2. 실패 원자적인 메소드를 만들 수 있다. (어떠한 예외가 발생되더라도 메소드 호출 전의 상태를 유지할 수 있어 예외 발생 전과 똑같은 상태로 다음 로직 처리 가능) 3. 부수효과를 피해 오류를 최소화 할 수 있다. ※ 부수효과 : 변수의 값이 바뀌거나 객체의 필드 값을 설정하거나 예외나 오류가 발생하여 실행이 중단되는 현상 4. 메소드 호출 시 파라미터 값이 변하지 않는다는 것을 보장할 수 있다. 5. 가비지 컬렉션 성능을 높일 수 있다. (가비지 컬렉터가 스캔하는 객체의 수가 줄기 때문에 Gc 수행 시 지연시간도 줄어든다.)

💡 추상 클래스와 인터페이스를 설명해주시고, 차이에 대해 설명해주세요.

추상 클래스는 클래스 내 추상 메소드가 하나 이상 포함되거나 abstract로 정의된 경우를 말하고,

인터페이스는 모든 메소드가 추상 메소드로만 이루어져 있는 것을 말합니다.

공통점 new 연산자로 인스턴스 생성 불가능 사용하기 위해서는 하위 클래스에서 확장/구현 해야 한다.

차이점 인터페이스는 그 인터페이스를 구현하는 모든 클래스에 대해 특정한 메소드가 반드시 존재하도록 강제함에 있고, 추상클래스는 상속받는 클래스들의 공통적인 로직을 추상화 시키고, 기능 확장을 위해 사용한다. 추상클래스는 다중상속이 불가능하지만, 인터페이스는 다중상속이 가능하다.

추상클래스와 인터페이스의 차이

💡 싱글톤 패턴에 대해 설명해주세요.

싱글톤 패턴은 단 하나의 인스턴스를 생성해 사용하는 디자인 패턴입니다.

인스턴스가 1개만 존재해야 한다는 것을 보장하고 싶은 경우와

동일한 인스턴스를 자주 생성해야 하는 경우에 주로 사용합니다. (메모리 낭비 방지)

싱글톤 패턴(Singleton Pattern)알아보기

💡 싱글톤 패턴의 대표적인 예시를 간단하게 설명해주세요.

더보기 싱글톤 패턴의 대표적인 예시는 Spring Bean 입니다. 스프링의 빈 등록 방식은 기본적으로 싱글톤 스코프이고, 스프링 컨테이너는 모든 빈들을 싱글톤으로 관리합니다. 스프링은 요청할 때마다 새로운 객체를 생성해서 반환하는 기능도 제공한다. (프로토타입 빈, @Scope(“prototype”))

💡 가비지 컬렉션(Garbage Collection)에 대해 설명해주세요.

가비지 컬렉션은 JVM의 메모리 관리 기법 중 하나로 시스템에서 동적으로 할당됐던 메모리 영역 중에서 필요없어진 메모리 영역을 회수하여 메모리를 관리해주는 기법입니다.

💡 가비지 컬렉션 과정에 대해 설명해주세요.

더보기 GC의 작업을 수행하기 위해 JVM이 어플리케이션의 실행을 잠시 멈추고, GC를 실행하는 쓰레드를 제외한 모든 쓰레드들의 작업을 중단 후 (Stop The World 과정) 사용하지 않는 메모리를 제거(Mark and Sweep 과정)하고 작업이 재개됩니다. ++ GC의 작업은 Young 영역에 대한 Minor GC와 Old 영역에 대한 Major GC로 구분됩니다.

💡 객체지향의 설계원칙에 대해 설명해주세요.

SRP – 단일 책임 원칙 : 한 클래스는 하나의 책임만 가져야 한다. OCP – 개방-폐쇄 원칙 : 확장에는 열려있고, 수정에는 닫혀있어야 한다. LSP – 리스코프 치환 원칙 : 상위 타입은 항상 하위 타입으로 대체할 수 있어야 한다. ISP – 인터페이스 분리 원칙 : 인터페이스 내에 메소드는 최소한 일수록 좋다. (하나의 일반적인 인터페이스보다 여러 개의 구체적인 인터페이스가 낫다.) SRP와 같은 문제에 대한 두 가지 다른 해결책이다. DIP – 의존관계 역전 원칙 : 구체적인 클래스보다 상위 클래스, 인터페이스, 추상클래스와 같이 변하지 않을 가능성이 높은 클래스와 관계를 맺어라. DIP 원칙을 따르는 가장 인기 있는 방법은 의존성 주입(DI)이다.

객체지향 설계원칙 SOLID 자세히 알아보기

💡 자바의 메모리 영역에 대해 설명해주세요.

자바의 메모리 공간은 크게 Method 영역, Stack 영역, Heap 영역으로 구분되고, 데이터 타입에 따라 할당됩니다.

메소드(Method) 영역 : 전역변수와 static변수를 저장하며, Method영역은 프로그램의 시작부터 종료까지 메모리에 남아있다.

스택(Stack) 영역 : 지역변수와 매개변수 데이터 값이 저장되는 공간이며, 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다. LIFO(Last In First Out) 구조를 갖고 변수에 새로운 데이터가 할당되면 이전 데이터는 지워진다.

힙(Heap) 영역 : new 키워드로 생성되는 객체(인스턴스), 배열 등이 Heap 영역에 저장되며, 가비지 컬렉션에 의해 메모리가 관리되어 진다.

💡 각 메모리 영역이 할당되는 시점은 언제인가요?

더보기 Method 영역 : JVM이 동작해서 클래스가 로딩될 때 생성

Stack 영역 : 런타임시 할당

Heap 영역 : 컴파일 타임 시 할당 ※ 컴파일 타임 : 소스코드가 기계어로 변환되어 실행가능한 프로그램이 되는 과정 ※ 런타임 : 컴파일 타임 이후 프로그램이 실행되는 때

💡 클래스와 객체에 대해 설명해주세요.

클래스는 객체를 만들어내기 위한 설계도 혹은 틀 이라고 할 수 있고, 객체를 생성하는데 사용합니다.

객체는 설계도(클래스)를 기반으로 생성되며, 자신의 고유 이름과 상태, 행동을 갖습니다.

여기서 상태는 필드(fields), 행동은 메소드(Method)라고 표현합니다.

객체에 메모리가 할당되어 실제로 활용되는 실체는 ‘인스턴스’라고 부릅니다.

💡 생성자(Constructor)에 대해 설명해주세요.

생성자는 클래스와 같은 이름의 메소드로, 객체가 생성될 때 호출되는 메소드입니다.

명시적으로 생성자를 만들지 않아도 default로 만들어지며, 생성자는 파라미터를 다르게하여 오버로딩할 수 있습니다.

💡 Wrapper Class란 무엇이며, Boxing과 UnBoxing은 무엇인지 설명해주세요.

기본 자료형(Primitive data type)에 대한 객체 표현을 Wrapper class라고 합니다.

기본 자료형 → Wrapper class로 변환하는 것을 Boxing이라 하며,

Wrapper class → 기본 자료형으로 변환하는 것을 UnBoxing이라 합니다.

Wrapper클래스란?

💡 Synchronized에 대해 아는 대로 말해주세요.

여러 개의 쓰레드가 한 개의 자원을 사용하고자 할 때, 현재 데이터를 사용하고 있는 쓰레드를 제외하고 나머지 쓰레드들은 데이터에 접근할 수 없게 막는 개념입니다.

데이터의 thread-safe를 하기 위해 자바에서 Synchronized 키워드를 제공해 멀티 쓰레드 환경에서 쓰레드간 동기화를 시켜 데이터의 thread-safe를 보장합니다.

Synchronized는 변수와 메소드에 사용해서 동기화 할 수 있으며, Synchronized 키워드를 남발하게 되면 오히려 프로그램의 성능저하를 일으킬 수 있습니다.

💡 new String()과 리터럴(“”)의 차이에 대해 설명해주세요.

new String()은 new 키워드로 새로운 객체를 생성하기 때문에 Heap 메모리 영역에 저장되고,

“”는 Heap 안에 있는 String Constant Pool 영역에 저장됩니다.

https://www.journaldev.com/797/what-is-java-string-pool

💡 String, StringBuffer, StringBuilder의 차이를 설명해주세요.

String은 불변의 속성을 가지며, StringBuffer와 StringBuilder는 가변의 속성을 가집니다.

StringBuffer는 동기화를 지원하여 멀티 쓰레드 환경에서 주로 사용하며,

StringBuilder는 동기화를 지원하지 않아 싱글 쓰레드 환경에서 주로 사용합니다.

String, StringBuffer, StringBuilder의 차이와 장단점

💡 String 객체가 불변인 이유에 대해 아는대로 설명해주세요.

더보기 1. 캐싱 기능에 의한 메모리 절약과 속도 향상 – Java에서 String 객체들은 Heap의 String Pool 이라는 공간에 저장되는데, 참조하려는 문자열이 String Pool에 존재하는 경우 새로 생성하지 않고 Pool에 있는 객체를 사용하기 때문에 특정 문자열 값을 재사용하는 빈도가 높을 수록 상당한 성능 향상을 기대할 수 있다. 2. thread-safe – String 객체는 불변이기 때문에 여러 쓰레드에서 동시에 특정 String 객체를 참조하더라도 안전하다. 3. 보안기능 – 중요한 데이터를 문자열로 다루는 경우 강제로 해당 참조에 대한 문자열 값을 바꾸는 것이 불가능하기 때문에 보안에 유리하다.

💡 접근 제한자(Access Modifier)에 대해 설명해주세요.

변수 또는 메소드의 접근 범위를 설정해주기 위해서 사용하는 Java의 예약어를 의미하며, 총 4 가지 종류가 있습니다.

public – 접근 제한이 없다. (같은 프로젝트 내 어디서든 사용 가능)

protected – 해당 패키지 내, 다른 패키지에서 상속받아 자손 클래스에서 접근 가능하다.

(default) – 해당 패키지 내에서만 접근 가능

private – 해당 클래스에서만 접근 가능

💡 클래스 멤버 변수 초기화 순서에 대해 설명해주세요.

static 변수 선언부 : 클래스가 로드 될 때 변수가 제일 먼저 초기화 된다. 필드 변수 선언부 : 객체가 생성될 때 생성자 block 보다 앞서 초기화 된다. 생성자 block : 객체가 생성될 때 JVM이 내부적으로 locking( thread-safe 영역 )

💡 static에 대해 설명해주세요.

static 키워드를 사용한 변수나 메소드는 클래스가 메모리에 올라갈 때 자동으로 생성되며 클래스 로딩이 끝나면 바로 사용할 수 있습니다. 즉, 인스턴스(객체) 생성 없이 바로 사용 가능합니다.

모든 객체가 메모리를 공유한다는 특징이 있고, GC 관리 영역 밖에 있기 때문에 프로그램이 종료될 때까지 메모리에 값이 유지된 채로 존재하게 됩니다.

static 변수와 static 메소드

💡 static을 사용하는 이유에 대해 설명해주세요.

더보기 static은 자주 변하지 않는 값이나 공통으로 사용되는 값 같은 공용자원에 대한 접근에 있어서 매번 메모리에 로딩하거나 값을 읽어들이는 것보다 일종의 ‘전역변수’와 같은 개념을 통해 접근하는 것이 비용도 줄이고 효율을 높일 수 있습니다.

인스턴스 생성 없이 바로 사용 가능하기 때문에 프로그램 내에서 공통으로 사용되는 데이터들을 관리할 때 이용합니다.

💡 Inner Class(내부 클래스)의 장점에 대해 설명해주세요.

1. 내부 클래스에서 외부 클래스의 멤버에 손쉽게 접근할 수 있다.

2. 서로 관련 있는 클래스를 논리적으로 묶어서 표현함으로써, 코드의 캡슐화를 증가시킨다.

3. 외부에서는 내부 클래스에 접근할 수 없으므로, 코드의 복잡성을 줄일 수 있다.

💡 리플렉션(Reflection)이란 무엇인지 설명해주세요.

리플렉션이란 구체적인 클래스 타입을 알지 못해도 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API 입니다.

💡 리플렉션은 어떤 경우에 사용되는지 설명해주세요.

더보기 코드를 작성할 시점에는 어떤 타입의 클래스를 사용할지 모르지만, 런타임 시점에 지금 실행되고 있는 클래스를 가져와서 실행해야 하는 경우 사용됩니다. 프레임워크나 IDE에서 이런 동적인 바인딩을 이용한 기능을 제공합니다. intelliJ의 자동완성 기능, 스프링의 어노테이션이 리플렉션을 이용한 기능이라 할 수 있습니다.

💡 Error와 Exception의 차이를 설명해주세요.

Error는 실행 중 일어날 수 있는 치명적 오류를 말합니다. 컴파일 시점에 체크할 수 없고, 오류가 발생하면 프로그램은 비정상 종료 되며 예측 불가능한 UncheckedException에 속합니다.

반면, Exception은 Error보다 비교적 경미한 오류이며, try-catch를 이용해 프로그램의 비정상 종료를 막을 수 있습니다.

예외 처리(Exception) 알아보기

💡 CheckedException과 UnCheckedException의 차이를 설명해주세요.

CheckedException은 실행하기 전에 예측 가능한 예외를 말하고, 반드시 예외 처리를 해야 합니다. 대표적인 Exception – IOException, ClassNotFoundException 등

UncheckedException은 실행하고 난 후에 알 수 있는 예외를 말하고, 따로 예외처리를 하지 않아도 됩니다. 대표적인 Exception – NullPointerException, ArrayIndexOutOfBoundException 등

RuntimeException은 UncheckedException을 상속한 클래스이고, RuntimeException이 아닌 것은 CheckedException을 상속한 클래스 입니다.

CheckedException, UnCheckedException

💡 컬렉션 프레임워크에 대해 설명해주세요.

다수의 데이터를 쉽고 효과적으로 관리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미합니다.

자바 컬렉션에는 List, Set, Map 인터페이스를 기준으로 여러 구현체가 존재하고, 이에 더해 Stack, Queue 인터페이스도 존재합니다.

자바 컬렉션 프레임워크 알아보기

💡 List, Set, Map, Stack, Queue의 특징에 대해 설명해주세요.

더보기 List는 순서가 있는 데이터의 집합이며, 데이터의 중복을 허용합니다. 대표적인 구현체로는 ArrayList가 있고, 이는 Vector를 개선한 것입니다. 이외에도 LinkedList 등의 구현체가 있습니다. Vector, ArrayList, LinkedList, Stack, Queue

Set은 순서가 없는 데이터의 집합이며, 데이터의 중복을 허용하지 않습니다. 대표적인 구현체로는 HashSet이 있고, 순서를 보장하기 위해서는 LinkedHashSet을 사용합니다. (Map의 key-value 구조에서 key 대신 value가 들어가 value를 key로 하는 자료구조) HashSet, LinkedHashSet, TreeSet

Map은 키와 값이 한 쌍으로 이뤄져 있고, 키를 기준으로 중복을 허용하지 않으며, 순서가 없습니다. key의 순서를 보장하기 위해서는 LinkedHashMap을 사용합니다. HashMap, TreeMap, HashTable, Properties

Stack 객체는 직접 new 키워드로 사용할 수 있으며, Queue 인터페이스는 LinkedList에 new 키워드를 적용해 사용할 수 있습니다.

💡 Set과 Map의 타입이 Wrapper Class가 아닌 Object를 받을 때 중복 검사는 어떻게 할건지 설명해주세요.

hashCode() 메소드를 오버라이딩하여 리턴된 해시코드 값이 같은지를 보고 해시코드 값이 다르다면 다른 객체로 판단하고,

해시코드 값이 같으면 equals() 메소드를 오버라이딩하여 다시 비교합니다. 이 두 개가 모두 맞으면 중복 객체입니다.

💡 Vector와 List의 차이를 설명해주세요.

벡터는 데이터 삽입시 원소를 밀어내지만 리스트는 노드를 연결만 하기 때문에, 삽입 삭제 부분에서 리스트가 시간복잡도의 우위를 가집니다.

벡터는 랜덤부분접근이 가능하지만 리스트는 더블링크드리스트(노드가 양쪽으로 연결)로 되어있기 때문에 랜덤 접근이 되지 않습니다. 검색적인 측면에서는 벡터가 우위에 있습니다.

벡터는 리스트와 달리 항상 동기화되는 장점이자 단점을 가지고 있습니다. 멀티 쓰레드 환경에서 안전하게 객체를 추가하고 삭제할 수 있지만, 단일쓰레드 환경 일때도 동기화를 하기 때문에 List보다 성능이 떨어집니다.

💡 제네릭에 대해 설명해주시고, 왜 쓰는지 알려주세요.

제네릭은 데이터의 타입을 하나로 지정하지 않고 사용할 때마다 범용적이고 포괄적으로 지정한다는 의미입니다.

제네릭 타입을 사용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있어 에러를 사전에 방지할 수 있습니다.

제네릭 알아보기

💡 final / finally / finalize 의 차이를 설명해주세요.

final 은 클래스, 메소드, 변수, 인자를 선언할 때 사용할 수 있으며, 한 번만 할당하고 싶을 때 사용합니다. final 변수는 한 번 초기화되면 그 이후에 변경할 수 없습니다. final 메소드는 다른 클래스가 이 클래스를 상속할 때 메소드 오버라이딩을 금지합니다. final 클래스는 다른 클래스에서 이 클래스를 상속할 수 없습니다.

finally 는 try-catch와 함께 사용되며, try-catch가 종료될 때 finally block이 항상 수행되기 때문에 마무리 해줘야 하는 작업이 존재하는 경우에 해당하는 코드를 작성해주는 코드 블록입니다.

finalize는 Object 클래스에 정의되어 있는 메소드이며, GC에 의해 호출되는 메소드로 절대 호출해서는 안되는 메소드입니다. GC가 발생하는 시점이 불분명하기 때문에 해당 메소드가 실행된다는 보장이 없고, finalize() 메소드가 오버라이딩 되어 있으면 GC가 이루어질 때 바로 Garbage Collectiong 되지 않습니다. GC가 지연되면서 OOME(Out of Memory Exception)이 발생할 수 있기 때문에 finalize() 메소드를 오버라이딩하여 구현하는 것을 권장하지 않고 있습니다.

💡 직렬화(Serialize)에 대해 설명해주세요.

시스템 내부에서 사용되는 객체 또는 데이터를 외부의 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술이며, 반대로 직렬화된 바이트 형태의 데이터를 다시 객체로 변환하는 과정을 ‘역직렬화’라고 합니다.

(간단히) JVM의 메모리에 상주(힙 or 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술

💡 SerialVersionUID를 선언해야 하는 이유에 대해 설명해주세요.

JVM은 직렬화와 역직렬화를 하는 시점의 클래스에 대한 버전 번호를 부여하는데, 만약 그 시점에 클래스의 정의가 바뀌어 있다면 새로운 버전 번호를 할당하게 됩니다. 그래서 직렬화할 때의 버전 번호와 역직렬화를 할 때의 버전 번호가 다르면 역직렬화가 불가능하게 될 수 있기 때문에 이런 문제를 해결하기 위해 SerialVersionUID를 사용합니다.

만약 직렬화할 때 사용한 SerialVersionUID의 값과 역직렬화 하기 위해 사용했던 SVUID가 다르다면 InvalidClassException이 발생할 수 있다.

관련 포스팅

1. 신입 개발자 기술면접 질문 정리 – 자바

2. 신입 개발자 기술면접 질문 정리 – 데이터베이스

3. 신입 개발자 기술면접 질문 정리 – 자료구조

4. 신입 개발자 기술면접 질문 정리 – 알고리즘

5. 신입 개발자 기술면접 질문 정리 – 네트워크

6. 신입 개발자 기술면접 질문 정리 – 운영체제

7. 신입 개발자 기술면접 질문 정리 – 백엔드

8. 신입 개발자 기술면접 질문 정리 – 프로그래밍 공통/기타

개인적으로 정리하며 적었기 때문에 틀린 부분이 있을 수도 있습니다.

틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다.

반응형

현직자가 말하는 신입 백엔드 개발 면접 질문 | 제로베이스

수도코드 (한글버전)

1. 데이터와 다음 데이터의 값을 가진 노드를 생성한다.

1-1. 새 노드 생성시 다음값으로 null로 가리킨다.

1-2. 새 링크드 리스트 생성시 객체를 생성한다.

2. 링크드 리스트에 맞는 메소드함수를 구현한다.

2-1. append(data) :

2-1-1. 헤드가 없으면 헤드 노드를 생성하고 null을 가리킨다.

2-1-2. 만약 헤드가 null을 가리키면, 헤드가 새로 생성된 데이터를 가리키게 한다.

2-1-3. 만약 헤드가 다음 데이터를 가르키고 있으면 그 다음 데이터가 새로운 데이터를 가리키게 하고 데이터를 추가한다.

2-2. removeAt(location) : 데이터의 위치에 따라 데이터를 삭제한다.

2-2-1. 삭제하고자 하는 데이터의 이전 데이터가 삭제하고자 하는 데이터의 다음 데이터를 가리키게 하고 삭제할 데이터는 null을 가리키게 한다.

2-2-2. 만약 리스트의 첫번째를 삭제하려면 헤드를 다음 데이터로 바꾸고 삭제할 데이터를 삭제한다.

2-3. indexOf(data) : 데이터를 순서대로 따라가면서 인덱스를 더해준다. 일치하는 데이터를 찾으면 인덱스를 반환한다.

2-4. remove(data) : 데이터 값을 기준으로 삭제를 원할 때 인덱스의 값을 찾아 일치하는 값을 removeAt(index)로 삭제한다.

2-5. insert(location, data) : 원하는 위치에 데이터를 추가할 때 인덱스 값을 기준으로 위치를 찾고 데이터를 추가한다.

2-6. isEmpty() : 자료의 수가 0 이상이면 false를 반환한다.

2-7. length() : 리스트내 전체 자료의 수를 반환한다.

신입 개발자 면접 후기

반응형

대학 졸업하기 전 서울로 올라와서 Java 국비지원 학원을 6개월 동안 다니고, 학원 다니면서 학교를 졸업했다.

원래는 학원 수료하고 난 후 바로 취업을 하려고 준비했으나 개인적인 문제로 몇 개월 동안 본가에서 쉬면서 Python을 공부하기 시작했다.

첫번째 이유는 파이썬 문법을 처음 봤을 때 간단하고 읽기 쉬워서 그 부분에 매력을 느꼈고,

두 번째 이유는 요즘 파이썬이 국내나 해외에서 많이 떠오르는 언어라는 것을 들었기 때문이었다.

일단 뭐든 배워놓으면 쓸데는 있겠지 라는 생각으로 책을 사서 공부하기 시작했고, 얼마 지나지 않아서 AI 교육이 눈에 들어와서 되면 좋고 안되면 안 되는 거지라는 마인드로 신청을 했다.

운이 좋은 건지 코딩테스트와 면접을 보고 합격해서 2개월 간 교육을 듣게 되었다.

굉장히 짧은 시간이었지만 그동안 배운 내용을 이 블로그에 고스란히 담을 수 있던 소중한 시간들이었다.

AI 교육도 수료하고 바로 취업준비를 시작한 지 한 달째 면접을 5군데 정도 돌아다녔다.

보통 신입이면 코딩을 조금 할줄 안다고 해도 들어가면 다시 교육을 받기 때문에 기술면접은 깊게 파고들지 않는다.

70% 이상은 인성면접이라고 보면 될 것 같다. (회사 바이 회사로 많이 다를 수 있음)

1차 면접 (실무진 면접)

보통 내가 지원한 팀의 팀장이 같이 들어와서 이 사람이 우리 팀에 들어오면 잘 섞일 수 있을지에 대해서 물어보기 때문에 성격에 대한 좋은 인상 을 심어주는 것이 좋다.

을 심어주는 것이 좋다. 내가 수행했던 프로젝트에 대한 질문들이 많기 때문에 프로젝트에 대한 것은 무조건 다시 공부 하고 가야한다. 공부 안 하더라도 열심히 했다면 무리 없이 대답할 수 있을 것 같다.

하고 가야한다. 공부 안 하더라도 열심히 했다면 무리 없이 대답할 수 있을 것 같다. 왜 개발자가 되려고 했는지 나의 스토리를 잘 정리해서 놔두면 좋을 것 같다.

프로젝트 진행 했을 때 힘들었던 점과 극복한 경험 (단골 질문)

프로젝트 진행 중 의견 충돌이 날 때 해결 방법 (단골 질문)

내가 지원한 회사가 어떤 일을 하고 어떤 언어를 사용하는지 회사 사이트 들어가서 자세히 공부하는 것을 추천 (회사 지원동기)

내가 제출한 이력서와 자기소개서 내에서 질문 (성격의 장단점, 자신의 강점)

그 외의 이력서에 기재한 기술들에 대한 질문들과 아주 기본적인 지식에 대한 질문들이 있을 수 있다.

2차 면접 (임원 면접)

만약 임원중에 CTO(최고기술경영자)가 있다면 기술 질문이 들어올 수 있다. 방심은 금물

1차 면접에서 기술에 대한 검증은 끝났기 때문에 2차에서는 인성면접 위주로 본다.

다른 언어에 대한 두려움이 있는지 (다른 언어를 공부해야 하는 상황이 생길 경우)

5년 또는 10년 후 나의 모습 (단골 질문)

어떤 개발자가 되고 싶은지 (단골 질문)

살면서 힘들었던 경험

본인 역량보다 높은 일을 줘서 힘들 경우 어떻게 할 것인지 (단골 질문)

쉴 때 뭐하는지 – 답변시 답변에 대해서 무조건 다시 질문이 들어온다. (만약 책을 읽는다고 할 경우, 어떤 책을 주로 읽는지 최근에 읽은 책은 어떤 책인지 가장 기억에 남는 책은 어떤 책인지) (단골 질문)

(단골 질문)이라고 표시해놓은 부분은 2개 이상의 회사에서 들었던 질문이다.

모르는 부분은 당당하게 모른다고 말하는 것이 좋다. 이 사람이 알고 있는지 모르고 있는지 다 티가 나기 때문에 오히려 솔직하게 말하는 것이 좋다.

나는 5초 생각하다가 기억이 잘 안 나면 잘 모르겠습니다. 라고 답변을 했는데 말하고 생각날 때도 많았다.

오히려 솔직하게 말하는 이런 점이 플러스요인이 될 가능성도 높다.

자기소개는 지원한 직무에 맞게 준비하고, 만약 기술 블로그나 깃허브를 한다면 이력서에 첨부해놓는 게 좋다. (꾸준히 공부하고 정리해 놓는다는 증거)

반응형

gyoogle/tech-interview-for-developer: 👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

코딩맛집 :: 신입 개발자 면접 준비 (1) : 일반 면접 관련 예상 질문(개발 외)

728×90

개발자의 면접에서는 주로 지원자의 열정, 프로그래밍과 관련한 기본 지식, 동료와의 관계 등을 물어봅니다.

모든 것은 역지사지라고 본인이 사원을 뽑는 입장이라면 어떤 사람을 채택할 지 생각해 보는 게 제일 편합니다.

면접 후기를 참고하기 좋은 사이트로 해외사이트는 글래스 도어의 Interviews > Search interview questions 메뉴를,

국내 사이트로는 잡플래닛의 면접 후기를 참고하면 좋을 것 같습니다.

기술 면접 관련한 지식은 제가 작성한 다른 글 (아래 링크)를 참고해주세요.

신입 개발자 면접 준비 (2) : 기술 관련

자기계발, 열정

“왜 개발자가 되려고 하는가?” (또는 다른 분야로 바꾼 이유)

“어떤 개발자가 되고 싶은가?’

“개발을 기본적으로 좋아하는 지?”

-> 꾸준한 관심과 적성에 적합하다는 것을 입증할 근거 (블로그, 깃허브 등)가 있으면 좋다.

-> 꾸준한 관심과 적성에 적합하다는 것을 입증할 근거 (블로그, 깃허브 등)가 있으면 좋다. “성격의 장단점과 주위에서 어떻게 평가받고 있는 지 (단점을 고치려 노력한 부분도)”

“개발자로서의 본인의 비전은?”

“개발자가 되기 위해서 어떻게 공부하였는가”

“학습시 주로 이용하는 웹페이지나, 동영상 강좌 페이지는 어디인가”

“최근의 읽은 개발 관련 서적은 무엇인가”

“즐겨 보는 개발 관련 유튜브가 있는가”

“비전공자로써 갖고 있는 컴플렉스가 있는가”

“운영체제같은 컴퓨터공학(cs)에 대한 기초지식이 있는가”

“최근에 관심갖거나 공부 하고 싶은 개발 기술은 무엇인가”

“코딩에서 어떤 부분이 당신을 설레게 합니까? (일에 대한 열정)”

“실천하고 있는 열정 프로젝트가 있습니까?” (꾸준한 자기 계발)

-> 돈을 넘어 프로젝트에 대한 균형과 열정을 보여주는 것이 중요

커뮤니케이션

동료와 협업 시 갈등이 생겼을 때 해결하는 방법은? (소통능력)

-> 일의 우선 순위가 명확하게 잡혀 있는 지 확인하고 모두가 명확하게 인지했는지 확인, 방향성을 다시 확인하고 업무를 진행한다.

-> 사전에 명확한 설계. 개발 프레임워크를 설정, 코딩 표준을 정한다.

괜찮은 웹 프레임워크로는 Django, (새로운 솔루션의 빠른 배포, 파이썬)

Balsamiq은 새로운 모듈 추가만으로 손쉽게 기존 라이브러리 구축 가능

-> 일의 우선 순위가 명확하게 잡혀 있는 지 확인하고 모두가 명확하게 인지했는지 확인, 방향성을 다시 확인하고 업무를 진행한다. -> 사전에 명확한 설계. 개발 프레임워크를 설정, 코딩 표준을 정한다. 괜찮은 웹 프레임워크로는 Django, (새로운 솔루션의 빠른 배포, 파이썬) Balsamiq은 새로운 모듈 추가만으로 손쉽게 기존 라이브러리 구축 가능 “IT가 아닌 다른 업무를 맡은 동료와 효과적으로 커뮤니케이션하고 있다고 생각하나? ”

“비 IT직원에게 설명할 때 사용하는 언어와 용어를 보고 적절한 의사소통 능력을 나타내는 특정 프로젝트나 워크플로우에 관해 이야기하라.”

협업, 포트폴리오, 프로젝트

진행했던 프로젝트에서 담당했던 부분, 구현했던 기술은?

-> 면접 전 디테일한 부분도 꼭 훑어보기

“회사 기술 스택에 맞추어 단기간 내에 언어와 프레임워크를 학습해야 할 때, 어떻게 공부하고 해결할 것인가”

“포트폴리오 제작시에 비인기 라이브러리를 사용한 경험이 있는가”

“이러한 비인기 라이브러리에 대한 정보를 어디서 얻는가 왜 활용하였는가”

“지금까지 했던 프로젝트 중에서 자랑할 만한 사례? “(당신이 일하는 방식과 팀의 일원이 되어 성공을 정의하는 방식)

– > 최근 프로젝트 위주로 대답, 가치를 추가하고 다른 팀원을 도왔던 자신의 ‘역할’에 집중

“프로젝트에서 어려웠던 부분, 아쉬웠던 부분? “(객관적, 비판적 분석, 피드백을 받고 성장할 가능성) 그리고 어떻게 해결했나

“어떤 소스 컨트롤을 사용합니까?(백업 등)” (코딩의 나쁜 습관, 팀내에서의 경험 확인)

회사 관련

“왜 우리 회사에서 일하고 싶습니까?”

-> 제품의 특정 기능을 참조하고 자신의 기술이 역할 요구 사항에 부합한다는 점을 강조하라.

왜 당신이 문화와 양립할 수 있는지, 왜 회사의 사명이 당신에게 어떤 의미인지, 팀 내에서 어떻게 일하는가에 대해 이야기하라.

당신이 이 회사에 입사하고 싶다면, 면접관에게 ‘당신이 원한다’는 점을 확실히 보여줘라.

제품의 특정 기능을 참조하고 자신의 기술이 역할 요구 사항에 부합한다는 점을 강조하라. 왜 당신이 문화와 양립할 수 있는지, 왜 회사의 사명이 당신에게 어떤 의미인지, 팀 내에서 어떻게 일하는가에 대해 이야기하라. 당신이 이 회사에 입사하고 싶다면, 면접관에게 ‘당신이 원한다’는 점을 확실히 보여줘라. “당신이 생각하는 이상적인 개발 환경이란 무엇입니까?” ( 최선을 다해 일하는 데 어떤 조건이 필요한가?)

-> 자유롭게 코딩할 조용한 공간이 필요하다면 개방형 사무실이 적합하지 않을 수도 있다. 워크플로우에 가장 적합한 작업 환경을 고려하라. 당신은 두 사람이 하나의 컴퓨터를 사용해 소프트웨어를 개발하는 페어 프로그래밍(pair programming)을 좋아하나? 아니면 이를 도전으로 생각하나? 다기능 팀에서 어떻게 일하나? 코드를 테스트 할 때 어떤 도구를 사용하나? 동료가 당신의 코드를 검토하는 게 괜찮은가? 동료와 의사소통할 때 직접 말하나? 아니면 메시징 앱이나 구글 행아웃으로 하나?

최선을 다해 일하는 데 어떤 조건이 필요한가?) -> 자유롭게 코딩할 조용한 공간이 필요하다면 개방형 사무실이 적합하지 않을 수도 있다. 워크플로우에 가장 적합한 작업 환경을 고려하라. 당신은 두 사람이 하나의 컴퓨터를 사용해 소프트웨어를 개발하는 페어 프로그래밍(pair programming)을 좋아하나? 아니면 이를 도전으로 생각하나? 다기능 팀에서 어떻게 일하나? 코드를 테스트 할 때 어떤 도구를 사용하나? 동료가 당신의 코드를 검토하는 게 괜찮은가? 동료와 의사소통할 때 직접 말하나? 아니면 메시징 앱이나 구글 행아웃으로 하나? 입사 후 하고 싶은 업무 ?

-> 실제 진행 중인 프로젝트에 대해 언급하고 보완할 수 있는 아이디어나 역량 이야기하기

? -> 실제 진행 중인 프로젝트에 대해 언급하고 보완할 수 있는 아이디어나 역량 이야기하기 “우리에게 궁금한 점이 있습니까?”

-> 직무 내용 이외의 역할에 대한 세부 정보를 구하면 된다.

각 부서의 기능, 경영 구조, 프로젝트 진행 기회, 사회 문화적 요소, 워크플로우에 대해 질문해 팀에 관심을 보여라.

추진할 예정인 프로젝트와 성공한 후보자가 어떻게 그들에게 역할을 할 것인지도 물어보면 좋다.

-> 직무 내용 이외의 역할에 대한 세부 정보를 구하면 된다. 각 부서의 기능, 경영 구조, 프로젝트 진행 기회, 사회 문화적 요소, 워크플로우에 대해 질문해 팀에 관심을 보여라. 추진할 예정인 프로젝트와 성공한 후보자가 어떻게 그들에게 역할을 할 것인지도 물어보면 좋다. “(회사의) 제품이나 프로그램에서 가장 좋아하는 기능은?”

마무리하면서

면접 질문의 절반 이상은 이력서와 자소서에 있으므로 꼼꼼히 살피고 면접을 준비합니다.

간단한 자기소개 말도 준비해보고, 손코딩에 대한 간단한 준비도 해 두면 좋습니다. (공지없이 진행하는 경우도 있습니다)

기본적인 자료구조와 알고리즘 숙지는 필수입니다. 어설픈 거짓말보다는 필요한 부분에서는 솔직함이 좋습니다.

참고한 곳

728×90

신입 웹 개발자 첫 면접에 한번에 합격한 후기 (2)

반응형

신입 웹 개발자 첫 면접에 한번에 합격한 후기 (2)

해당 포스팅을 시작하기 전에 아래 포스팅을 안 보셨다면 먼저 봐주시길 바랍니다.

gamung.tistory.com/18

이번에는 면접 준비를 어떻게 했는지에 대해서 포스팅을 시작해보겠습니다.

면접 준비

태어나서 알바 면접 경력밖에 없는 저에게 첫 면접 기회가 찾아왔습니다. 코딩 테스트를 볼 때만 해도 ‘붙으면 좋고 안 붙으면 다시 도전하면 된다’라는 마음이 ‘제발 붙었으면 좋겠다’라는 간절함으로 바뀌었습니다.

하지만, 생애 처음 준비해보는 면접이라 무엇을 어떻게 하면 좋을지에 대해 아무것도 몰랐습니다. 시간은 정해져 있고 마음은 촉박해져만 가니 시야가 흐려지더군요. 다시 마음을 가다듬고 천천히 찾아보다가 세 가지를 하기로 결정합니다.

회사 잡플래닛 후기에 나온 면접 질문 리스트를 다 뽑아서 대비하기

신입 개발자 면접 준비 관련 책 하나를 파기

웹에 대한 기본개념 리마인드

잡플래닛 후기에 나온 면접 질문은 또 나올 수 있는 확률이 있으므로 메모장에 질문 리스트를 적었습니다.

또한 면접 질문에 대해 블로그에 나온 글보다는 실제 전문가가 쓴 책 한 권을 파는 것이 좋을 것 같아서 면접 준비 관련 책 하나를 동네 도서관에 빌려서 공부했습니다. 마지막으로는 웹에 대한 전반적인 개념에 대해서 학부시절 공부하던 것을 다시 리마인드 하였습니다.

정말 미친 듯이 하루에 14시간 정도를 투자하였습니다. 밥 먹을 때도 머릿속으로 정리를 하고 자는 시간 빼고 모든 의식을 면접 준비로 채워 넣었던 기억이 나네요. 좀 더 디테일하게 방법을 적어보자면 크게 인성, 기술 두 파트로 나누어서 준비를 했는데요. 인성이야 뭐 구글링 해서 준비해도 충분합니다. 문제는 기술인데요. 기술 같은 경우는 다시 지식, 스피킹(Speaking) 연습으로 또 나눠서 준비를 했습니다.

지식을 위해서 저는 개발 면접 관련 책을 도서관에서 빌려서 매일매일 분량을 정해놓고 1차 면접 전까지 총 2번을 훑었습니다. 또한 웹 개발자니까 HTTP, HTTPS와 같은 기본개념, 웹 통신 원리, 네트워크 기본, 데이터베이스 개념 등 기본개념을 한번 더 정리하는 것으로 준비했습니다.

스피킹을 위해서는 회사 잡플래닛 후기에 나온 질문 리스트들을 소리 내어서 스스로 질문해보고 나름의 답변으로 답하는 것으로 준비를 했습니다. 스피킹은 생각보다 중요합니다. 면접은 근본적으로 질문에 대한 답변을 전달하는 것인데 전달력이 부족하면 내가 아는 만큼 전달을 못하는 것이니 스피킹 연습은 중요합니다.

1차 면접 (인성, 기술)

하루하루 준비를 하다 보니 드디어 1차 면접이 다가왔습니다. 면접 대기실에서 대기할 때의 그 긴장감.. 아직도 잊히지가 않네요. 하여튼, 제 차례가 되어 면접을 보러 들어갔을 때 기억이 아직도 생생합니다. 면접 진행방식은 회사마다 다르겠지만 제가 본 곳은 면접관 두 분(인성, 기술)에 면접자 한 명이고 되게 편안한 분위기로 진행을 했습니다. 면접관분들이 면접자 긴장을 풀어주기 위해서 초반에 많이 노력하셨던 기억도 나네요.

분위기가 편해지니 곧바로 질문의 시간. 생각나는 질문 몇 가지만 파트별로 적어보면 다음과 같았습니다.

인성

프로젝트 경험이 많이 없으신데 이것을 어떻게 커버할 것이냐?

스스로 생각하는 자신의 장점과 단점, 단점을 보완하기 위한 노력은?

기술

HTTP와 HTTPS의 차이는?

프로세스와 스레드의 차이

Deadlock 해결방법

데이터베이스 관련 기본

인성면접은 예상했던 질문들이 나와서 순조롭게 대답했습니다. 그러나, 기술면접 같은 경우 저기에 쓰인 질문만 봤을 때는 어려워 보이는 게 없지만 질문에 답을 하면 꼬리를 무는 질문을 하여 좀 더 deep 하게 물었습니다.

예를 들어, Deadlock 해결방법에 대한 질문에 프로세스 kill을 한다고 답을 하면, 프로세스 kill을 하면 안 되는 가상의 상황을 면접관님이 제시를 하셔서 이럴 땐 어떻게 할 것인지를 물어봅니다. 또 그것에 대해 답을 하면 다른 방법은 없는지, 그것이 적합한 방법인지에 대해서 주관적인 생각을 물어봅니다.

이 부분은 전혀 준비를 하지 못했던 터라 대답을 못하거나 얼버무렸던 기억이 납니다. 지금 돌이켜 생각해보면 논리적으로 문제를 잘 접근해서 해결을 할 수 있는지를 보려고 하셨던 것 같습니다. 이런 경험으로 다시 한번 기본적인 base에 대해 중요하다는 것을 많이 느꼈지요.

면접을 보고 나오면서 드는 생각은 ‘아 망했다’였지만, 웬걸 합격 문자가 날아와서 기쁜 마음도 잠시 2차 면접인 임원면접 날짜를 통보받고 곧바로 준비하게 됩니다.

2차 면접 (임원면접)

1차 면접까지 붙으니 간절함은 더 해졌습니다. 임원면접에 대해 잡플래닛 후기를 보니 난이도가 어려움으로 되어있어서 1차 면접 준비하던 방법대로 준비를 하되, 좀 더 추가적으로 1차 면접의 문제점을 보완하기 위해 노력했습니다. 1차 면접에서 답을 못했던 질문들에 대해서 리스트를 적고 해당 질문에 대한 주관적인 생각을 적고 스피킹 했습니다. 주관적인 생각을 적은 이유는 인터넷에 쳐도 답이 안 나왔기 때문입니다. 또한 자료구조에 대한 공부도 했는데요. 제가 보던 면접 책에 나와있는 자료구조 관련 알고리즘 문제를 5번씩 풀어봤습니다. 참고로 면접 책은 ‘JAVA 프로그래밍 면접 이렇게 준비한다’를 봤는데 정말 도움됐습니다. 이렇게 2주 정도 준비 후에 임원면접을 보러 갔습니다.

임원면접은 인성 + 기술 두 가지를 좀 더 폭넓게 봤던 기억이 나네요. 기억나는 질문 몇 가지만 추려보자면 다음과 같았습니다.

인성

친구들한테 자주 듣는 말이나 별명이 있습니까?

학창 시절 기억에 남는 프로그래밍 활동은 뭐가 있습니까?

기술

기본적인 알고리즘 문제 몇 가지

제일 자신 있는 컴퓨터 공학 과목 선택 후, 그것에 대한 심도 있는 질문

브라우저에 특정 url을 쳤을 때 동작을 아는 데로 설명

인성면접은 준비한 데로 나와서 수월하게 대답하였고, 기술면접은 웹에 대한 전체적인 이해를 처음에 물어보다가 갑자기 제일 자신 있는 과목을 선택하라고 해서 네트워크에 대해 선택을 했습니다. 그리고 해당 과목에 대해 기본적인 수준의 문제부터 수박 겉핥기로 공부하면 모르는 질문까지 했습니다. 확실히 웹과 관련된 과목의 기본적인 지식에 대해서 학습하던 것이 많은 도움이 됐습니다. 예를 들면, 네트워크 관련해서 질문하실 때는 ARP란 무엇인지와 같은 학부시절에 잠깐 다뤘던 것들을 질문받았습니다.

면접 경험을 통해 웹 개발자라면 다음과 같은 지식은 알고 있어야 된다고 생각합니다. 생각나는 게 여러 가지 있긴 한데.. 필수적으로는 알아야 된다고 생각합니다.

프로토콜의 개념 (대표적으로 HTTP와 HTTPS 차이, TCP/UDP)

웹 통신이 어떻게 이루어지는지

임원면접을 본 후 2주 정도 시간이 흘러 결과 발표날.. 아직도 기억이 납니다. 오후 5시쯤 돼도 아무런 문자가 안 와서 떨어졌구나 생각하던 찰나에 합격 문자가 왔던 그 순간을 잊지 못합니다.

그때까지의 노력이 보상받는 느낌이 들면서 첫 면접만에 합격이라는 사실에 감사했던 추억이 떠오르네요. 사실, 제가 운이 좋다고 저는 스스로 생각합니다. 왜냐면, 회사가 원하는 인재상과 제 이미지가 어느 정도 부합했기에 뽑힌 것이니까요.

하지만, 저처럼 팀플 경험도 없고 그렇다고 컴공이 주전공도 아니고 자격증 하나 없는 사람도 이렇게 취업시장에서 취업을 한 사례가 있다는 것을 말씀드리고 싶습니다. 대신 자신의 약점(저는 부족한 플젝 경험)을 커버할만한 기본적인 지식에 대한 폭넓은 이해와 같은 커버할 강점은 하나씩 있어야 됩니다.

저 같은 경우는 학부시절 컴퓨터 관련 과목은 7개밖에 안 들었지만 각 과목이 운영체제론, 데이터베이스 기초, 네트워크 관련, 컴퓨터 구조등 원리와 기본을 다루는 과목이었고 공부도 나름 게을리하지 않았기 때문에 지식에 대한 자신감은 있었고 이것이 제 강점이었다고 스스로 생각했습니다. 혹시나 ‘이 정도 스펙으로 내가 취업이 될까?’라고 생각하시는 분들이 있으시다면 생각 말고 일단 도전해보세요. 어떤 회사에서는 당신을 원할 수도 있습니다. 일단 해보는 것이 가장 중요합니다. 일단 도전하면 저절로 간절해지고 노력을 하게 되니 지금 바로 취업시장에 도전해보세요. 긴 글 읽어주셔서 감사합니다.

반응형

면접관은 도대체 무슨 생각을 할까? | 신입 개발자 면접 질문 \U0026 질문 의도 \U0026 답변 예시 | 개발자 인성 면접 최신

We are using cookies to give you the best experience on our website.

You can find out more about which cookies we are using or switch them off in settings.

키워드에 대한 정보 신입 개발자 면접

다음은 Bing에서 신입 개발자 면접 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

See also  미국 공매도 숏 커버링 기간 | [최종원]공매도, 무차입공매도, 숏커버링, 숏스퀴즈, 미국 공매도 상환기간에 대해 알아보자 최근 답변 272개
See also  보험 사기 기소 유예 | 기소유예의 의미와 불이익 최근 답변 87개

See also  뉴욕 산부인과 추천 | [뉴욕임산부Vlog]미국에서 임신하면 어떤 진료를 받을까?초진부터 34주까지의 진료기록 파해쳐보자! 97 개의 자세한 답변

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 신입 개발자, 면접은 이렇게 준비하세요!

  • 코딩테스트
  • 개발자면접
  • 면접대비
  • 개발자채용
  • 프로그래머
  • 개발자
  • 초보개발자
  • 개발자취업

신입 #개발자, #면접은 #이렇게 #준비하세요!


YouTube에서 신입 개발자 면접 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 신입 개발자, 면접은 이렇게 준비하세요! | 신입 개발자 면접, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment