결론부터 말하면 면접 전형 불합격했다...! 서류전형 합격해서 엄청 좋아했는데 이렇게 결과를 보니까 괜히 씁쓸하다.
자소서랑 포트폴리오도 열심히 쓰고 면접 준비도 열심히 했는데 이런 결과가 있어서 정말 아쉬웠다. 기대가 크면 실망도 큰 법인데 그럼에도 불구하고 기대를 많이 한 거 같다.
면접 질문
H사 (서울 종로구, 코테 x) 비대면 면접
- 자기소개
- 지원동기
- 회사에 바라는 점, 얻어가고 싶은 점
실무 경험을 쌓으며 기술적 역량을 기르고 싶다. 또한 실제로 사용자에게 서비스를 제공하며 사용자 중심 사고를 기르고 싶다. 이런 식으로 이야기 했다.
- 프로젝트 하면서 힘들었던 점
갈등 소통 해결한 문제를 말했다. (기술적인 부분의 어려움 얘기를 원하신 듯하다. 나도 말하고 아차 싶었다. 그래서 다음 질문을 이어서 한 거라고 생각한다.)
- 실제 기술적인 부분에서 힘들었던 점
기술적인 것보단 구현 과정에서 조건에 따른 경우의 수가 많아서 힘들었다는 이야기를 했다... 내가 준비한 내용은 이게 아니었는데 가장 아쉬운 답변이다.
내가 실제로 준비한 답변
오픈소스 프로젝트 과목을 수강하면서 어려움을 겪은 경험
open api 사용하며 시간 지연 문제 발생 -> 리팩토링을 통해 해결한 방법 추가 설명
사진 업로드 시 시간 지연 -> aws s3 사용 계기
지금부터 기술 질문 폭탄이었다.
- 리팩토링이란
코드의 기능이나 구조를 변경하지 않고 코드를 개선하고 버그를 수정하는 것이다.
- 리팩토링 방법 아는 거 있는지?
-> 답변 아예 못했다.
- 데이터 정규화란?
이상 현상을 제거하기 위해 테이블을 분리하는 것입니다. 이상 현상에는 갱신 이상, 삭제 이상, 삽입 이상이 있다.
- 인덱스 정하는 방법
-> 답변 정확하게 못했다.
- 클러스터형 인덱스: 인덱스로 지정한 열을 기준으로 행 데이터를 정렬하는 방식으로 한 테이블 당 하나만 존재합니다.
- 비클러스터형 인덱스: 데이터 자체는 정렬되지 않고, 인덱스 값을 기준으로 정렬하여 새로 공간을 만듭니다. 테이블 당 여러 개 생성할 수 있습니다.
- 다중 열 인덱스: 두 개의 이상의 열로 구성된 인덱스이다.
- 디자인패턴이란?
디자인패턴이란 소프트웨어 개발에서 자주 발생하는 문제에 대해 반복적으로 사용되는 해결책을 재사용 가능한 형태로 정리한 것
- 디자인 패턴 예시 말하고 한가지 골라서 설명
-> 파사드, 어댑터, 프록시 패턴이라고 말한 다음 파사드 패턴 설명한다고 했지만 제대로 못했다. 부족한 부분은 더 공부하겠다고 했더니 회사 CTO께서 나름대로 설명 잘 한 거 같다고 말씀하셨다. 난 그래서 면접 나쁘지 않게 본 줄 알았지...ㅎ
- 행위 패턴
- 옵저버 패턴: 객체 간 일대다 의존성 정의해서 한 객체의 상태가 변하면 다른 객체들에게 자동으로 알림을 보내도록 하는 패턴
- 메멘토 패턴: 객체 상태를 저장하고 이를 이후에 복원할 수 있도록 하는 패턴
- 구조 패턴
- 어댑터 패턴: 호환되지 않는 인터페이스를 함께 동작하도록 만들어 객체 간 인터페이스 호환성을 제공하는 패턴
- 파사드 패턴: 복잡한 서브 시스템에 대해 단순한 통합 인터페이스를 제공해 클라이언트가 서브 시스템과 쉽게 상호작용할 수 있도록 해주는 구조
- 생성 패턴
- 싱글톤 패턴: 클래스의 인스턴스가 하나만 생성되도록 보장하는 패턴으로, 전역적인 접근이 가능한 유일한 객체를 생성함
- 팩토리 메서드 패턴: 객체 생성을 서브 클래스로 미루는 패턴으로 객체 생성 로직을 캡슐화하여 유연한 객체 생성을 지원
- Junit, mokito -> junit 편리, 불편
-> 편리한 점으로 순서를 정해서 단위 테스트할 수 있어서 좋았다고만 말했다. 불편한 점은 없었다고 했다. 이 질문에서 좀 당황해서 제대로 답변 못 한 거 같다.
예외 처리와 관련된 단위 테스트도 수행할 수 있어서 편리했다.
테스트 메서드만 따로 실행했을 때는 테스트를 성공했는데 테스트 파일을 전체적으로 실행하면 테스트 순서에 영향을 받아 자꾸 실패를 했었다. 그래서 테스트 순서 지정을 하지 못해 불편함을 겪었다. 그러나 junit5에 테스트 순서 기능이 포함되어 이런 문제를 해결할 수 있음을 알게 되었다. 이 기능을 활용해 테스트 순서를 정할 수 있었다. TestMehodOrder, Order 어노테이션으로 정할 수 있다
- rest api란?
-> 분명히 아는 개념이고 면접 준비할 때도 공부한 내용인데 말을 못 했다...
rest기반의 api, rest란 http uri를 통해 자원 명시, http method를 통해 자원 처리하도록 설계된 아키텍처
http method → het, post, put, patch, delete
- n+1문제, 해결방법
-> 유일하게 잘 대답한 것 같은 질문이다. 열심히 답변 준비했는데 물어보는 순간 속으로 앗싸!!
하위 엔티티들을 첫 쿼리 실행 시 모두 가져오는 것이 아니라 지연 로딩을 통해 프록시가 들어온 상태에서 하위 엔티티를 실제로 사용할 때 조회 쿼리가 다시 실행되어 발생하는 문제이다. 이를 해결하는 방법은 fetch join을 통해 모든 엔티티를 한 번에 가져오는 것이다. 또는 in 쿼리를 사용해 batch size를 지정해서 해결할 수 있다..
- 개발 언어, IDE, DB IDE(?) 써본 거 있는지? Ec2 공부는 따로 프로그램 사용한 거 있는지
인텔리제이, 데이터그립 사용하고 ec2는 맥이라 따로 프로그램 사용하진 않았다고 얘기했다. 개발 언어? 개발 기술? 비대면이라 잘 안 들렸다... 그래서 그냥 스프링 부트라고 말했다.
- 회사에 대한 질문 마지막 하고 싶은 말
질문 2개했다. 회사 앱을 실제로 사용하면서 생긴 궁금증, 사내에 진행되고 있는 교육 프로그램이 있는지
M사 (서울 영등포구, 코테 o) 대면 면접
면접을 보러 갔더니 대표님이 안 계셔서 다른 직원 2분께서 갑작스럽게 면접을 진행하게 되었다.
- 자기소개
- 가장 최근 프로젝트 설명
- 이외에 다른 프로젝트 한가지 설명
- 실제 배포를 한 프로젝트인지?
- 리눅스 할 줄 아는지?
- 자료구조 멘토링은 어떻게 진행한건지?
- 데이터베이스 설계 과정 (이슈? 설명?)
데이터베이스 설계 과정 연관관계 다대다에서 중간 테이블로 풀어서 했다고 설명했다. 일어서서 칠판에 그리면서 설명해보라길래 당황했지만 어찌저찌... 하긴 했다.
- api 내용
프론트-백 주고 받은 내용 말했다.
- 회사 질문
이전 회사와 동일한 맥락으로 2가지 질문했다.
기술 질문 뿐만 아니라 코테 문제 풀이에 대한 질문은 하나도 없었다. 오로지 포트폴리오 위주로 질문했다.
코딩테스트 후기
코딩테스트 문제가 영어라서 너무 당황스러웠던 게 가장 큰 후기가 아닐까... 싶다. 총 5문제를 6시간동안 풀었다. 작년에는 12시간을 줬던 거 같다. 그래도 6시간정도면 적당했던 것 같다. 문제 난이도는 대기업 코테에 비하면 쉬운 편이라고 생각한다. 마지막 문제는 좀 까다로웠던 거 같다.
1. Meeting Scheduler (50점)
- 회의 시작 시간, 종료 시간을 통해 최소 회의실 개수를 구하는 문제이다.
- 문제 풀이: 시작 시간, 종료 시간을 각각 오름차순으로 정렬하고 회의실을 재사용할 수 있는지 없는지 검사하고 최소 회의실 개수를 구했다.
- 가장 비슷한 유형의 문제: https://www.acmicpc.net/problem/1931
1931번: 회의실 배정
(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.
www.acmicpc.net
2. Duplicated Products (50점)
- 각 제품의 정보를 주고 몇 개의 중복이 발생하는지 구하는 문제이다.
- 문제 풀이: 각 제품의 정보 (이름-가격-가중치)를 하나의 문자열로 만든 후 HashSet에 저장한다. Set의 특징은 중복을 허용하지 않으므로 같은 제품이 이미 존재하는지 검사해서 중복 개수를 구했다.
- 가장 비슷한 유형의 문제: https://www.acmicpc.net/problem/3052
3052번: 나머지
각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.
www.acmicpc.net
3. Product Defects (75점)
- 가장 큰 정사각형 구하기 문제였다. 주어지는 배열에 1 혹은 0인 원소가 들어있고 1로 구성된 가장 큰 정사각형의 크기를 찾는 문제였다.
- 문제 풀이: 동적 프로그래밍으로 풀었다.각 셀의 값은 현재 셀의 상, 좌, 대각선 위치의 값 중 가장 작은 값에 1을 더한 것이다. 동시에 가장 큰 정사각형의 크기를 갱신해나가며, 답을 구했다.
- 가장 비슷한 유형의 문제: https://school.programmers.co.kr/learn/courses/30/lessons/12905
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
4. Programmer String (75점)
- Programmer String이란? 'programmer'라는 단어를 형성하도록 재배열할 수 있는 문자를 포함하는 Sub String입니다. 이 정의에서 'programmer', 'grammproer', 'prozmerqgram' 문자열은 모두 프로그래머 문자열로 분류된다.
- 문제 풀이:
- 만약 현재 문자가 programmer 리스트에 있는 문자라면, 해당 문자를 programmer 리스트에서 제거한다.
- 만약 programmer 리스트가 비어있다면, 현재까지의 인덱스가 가장 왼쪽 프로그래머 문자열의 마지막 인덱스이므로 저장해둔다.
- 이후 문자열을 역순으로 순회하면서 동일한 방법으로 가장 오른쪽 프로그래머 문자열의 시작 인덱스인를 찾는다.
- 두 개의 값으로 가장 오른쪽과 가장 왼쪽 프로그래머 문자열 사이에 있는 인덱스의 수를 구한다.
- 가장 비슷한 유형의 문제: https://www.acmicpc.net/problem/5582
5582번: 공통 부분 문자열
두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오. 어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다. 예를 들
www.acmicpc.net
그나마 유사한 문제를 선택했지만 좀 애매하다. 부분 문자열 관련된 문제를 풀어보면 좋을 것 같다!
5. Coloring House (100점)
- 짝수 개의 집을 화가는 최대 세 가지 색을 사용하여 집을 칠해야 한다. 이때 다음 조건이 충족되어야 한다:
- 인접한 두 집의 색이 같지 않아야 한다.
- 양쪽 끝에서 같은 거리에 있는 집은 같은 색으로 칠해서는 안 된다. - 문제 풀이:
- 양쪽 끝 같은 위치에 있으면 동일한 색이 불가능하다는 조건을 고려해서 n/2개의 집을 색칠하는 경우만 따졌다.
- 이후 반복문을 사용하여 두 번째 집부터 중간 집까지의 경우를 계산한다.
- 이때 이전 집의 색칠 가능한 경우의 수를 모두 누적해 구간합을 먼저 구하고 이 값을 이용한다.
- 3가지 색깔을 a, b, c라 가정했을 때 현재 집에서 a를 칠할 경우 바로 앞에 있는 집에서 b, c를 칠한 경우를 합하여 계산했다.
- 결과 구하기
- 중간 집의 색칠 방법의 수를 더하고 3을 곱하여 색상의 조합을 모두 고려합니다.
- 모듈러 연산을 한 후에 값을 반환하도록 했다.
- 가장 비슷한 문제: https://www.acmicpc.net/problem/1149
1149번: RGB거리
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나
www.acmicpc.net
댓글