오늘은 모의면접에 참여하였다. 야곰이 면접관이고, 나, 엘림, 제이콥 면접자인 1:3 화상면접이 줌으로 진행되었다.
면접을 보기 전에 계속 마음에 내키지 않았다. 나는 면접을 잘 못하고, 못하는 내 자신을 마주하는 것이 싫었기 때문이다. 그리고 역시나 모의면접을 못했다. 적지 않은 면접을 봤으면서 아직도 이 정도밖에 못한다는게 너무 고통스러웠다.
그래도 못하는 나를 이겨내려면 못하는 나를 제대로 봐야하기에, 야곰이 보내준 녹화본을 보면서 고통을 느껴가며 회고를 작성하기로 했다.
1분 자기소개
- 자기소개에서 부스트코스와 야곰 부트 캠프에 참여했다고 했는데, 두 과정에서 정확히 무엇을 배웠는지 구체적인 사례를 말해야한다.
- 그리고 자기소개 연습을 많이 해야한다. 준비 안된 티가 너무 난다. (버벅이고 자신이 없어보인다.)
지원 동기
- iOS를 선택한 이유
- 이 회사를 선택한 이유
- 지원한 회사의 서비스 사용 경험
- 조금 더 구체적으로 어떤 점이 마음에 들었는지 사례를 들어가면서 이야기 해라.
- 지원한 회사의 서비스 사용 경험
기술 질문
- WidgetKit이란 무슨 기술인가?
- 앱의 간단한 정보를 홈스크린에서 보여주는 위젯을 제작하기 위한 Framework.
- 위젯은 Timeline provider와 SwiftUI로 구성된 View로 이루어진다.
- Timeline provider은 TimelineEntry로 구성되며, 위젯의 내용을 시간대별로 제공한다. 이 시간대에 맞게 위젯이 업데이트 된다.
- SwiftUI와 UIKit의 차이.
- UIKit은 데이터 변화에 따라 UI를 업데이트 해주어야하는데 반해서, SwiftUI는 데이터와 UI요소가 연결되어있어서 데이터 변동에 따른 UI State를 직접 관리할 필요가 없다.
- UIKit의 구성요소는 Class인 반면에 SwiftUI는 struct이다. 그래서 SwiftUI의 퍼포먼스가 더 좋다.
- 함수형 프로그래밍이란?
- 함수형 프로그래밍은 함수 단위로 프로그래밍을 하는 방법이며, state와 mutable 데이터 사용을 지양한다. (Procedural Programming, Object-Oriented Programming, Imperative Programming, Declarative Programming 등과 차이점에 대해서도 알아놓으면 좋을듯…)
- Optional이 필요한 이유, 그리고 Unwrapping이 필요한 이유.
- 값이 없는 상황을 명시적으로 나타내고 처리하기 위하여 Optional이 필요하다. 만약 Optional이라는 개념이 없다면, 참조하는 값이 없는 상황이 발생했음에도 불구하고 이를 관리할 수 없어서 런타임에러가 발생한다. Unwrapping은 참조하려는 값이 존재할때만 다음 분기로 프로그램이 진행할 수 있도록 하여 안정적으로 프로그램이 작동하게 하려는 안전장치이다.
- Core Data와 다른 데이터베이스와의 차이.
- Core Data는 object graph를 다루는 프레임워크이다.
- Core Data는 인메모리 방식으로 데이터를 다룬다. 즉, 메모리에 로드해야 CRUD가 가능하다.
- Foundation Framework의 최상위 class는 무엇인가?
- Cocoa Touch
- 고차함수란?
- 매개변수로 함수를 전달받거나 함수를 반환하는 함수
- flatMap이란? compactMap과의 차이는?
- flatMap은 여러 시퀀스를 한개의 Array에 담아서 반환하는 함수. 예를 들어, 2차원 배열을 넣으면 1차원 배열로 만들어서 반환.
- compactMap은 시퀀스에서 nil을 제외한 값을 Array에 담아서 반환하는 함수.
- Extension이란?
- 기존에 존재하는 타입에 기존 코드의 수정 없이 새로운 기능을 추가하기 위해 사용되는 기능이다.
- Class와 Struct의 차이는? 언제 어떻게 무엇을 선택해서 사용해야하는가?
- 기본적으로 Struct를 사용한다.
- 상속이 필요할 경우 class를 사용한다.
- 데이터의 identity가 중요한 경우 class를 사용한다.
- Objective-C와의 상호 운용이 중요할때는 class를 사용한다. (이유는 모르겠다.)
- Heap 메모리 영역을 사용하는게 좋지 않은 이유는?
- 성능상 좋지 않다.
- Heap의 데이터 무결성을 보장하기 위해 Lock을 사용하기 때문에 느리다.
- Retain Cycle이란?
- 두 개의 객체가 서로를 강하게 참조하여, 메모리에서 해제될 수 없는 상태
- Memory Leak의 발생을 확인하는 방법, 그리고 해결하는 방법.
- Xcode의 Memory Graph Debugger 활용하기
- Command Line Tool 활용하기
- Retain Cycle이 발생하는 코드에 weak 키워드를 추가해준다.
최근에 본 기술 관련 Article이나 WWDC 영상이 있는지?
- 봤다는 사실 자체를 얘기하는게 아니라, 보고 알게된 내용을 구체적으로 설명해야한다.
- 괜히 봤다고 아는척 하려다가, 제대로 알지 못한다는 사실만 드러내게 되었다. 제대로 알지 못하면 말하지 말아야한다.
나의 총평
- 자신감있게 말해라.
- 말에 힘이 있어야하고,
- 발성을 더 크게하고,
- 버벅이지 말자
- 준비해라.
- 준비되어 있어야 자신감있게 얘기할 수 있다.
- 1분 자기소개를 제대로 준비하고,
- 프로젝트 경험에서 배운것을 복습을 제대로 하라.
야곰의 총평
- 공부를 했다고 하는데 어떻게 공부했는지, 느낀점 등 구체적인 근거가 없다.
- 자기소개 준비 안한거 티난다. 자기소개는 기본이다. 자기소개는 당연히 나오는 건데 준비 안했다는건 기본이 안되어있다는거다. 자기소개는 앞으로 면접의 방향이 결정되므로 내가 하고 싶은 이야기를 해야한다.
- 내가 지금 하는 말 속에 다음 질문이 담겨있다. 면접은 내가 만들어 가는 것이다. (한 수 앞을 내다보고 답변해라.)
- 회사의 서비스에 대한 구체적인 관심을 표현해라.
- 검색하거나 컨닝하지 말고 정면을 보고 이야기 해라. 모른건 모른다고 얘기해라.
- 질문의 의도가 명확히 파악된 후에 답변해라. 이해가 안되면 질문의 의도를 다시 물어봐도 된다.
- 회사가 개발한 앱, 서비스를 실행해보고 전체적으로 둘러보고 면접에 들어가라.
- 이력서, 자기소개서는 돌려쓰지 마라. 지원하는 회사에 맞게 수정해서 제출해야한다. 한 개의 회사를 타겟팅하고 서류를 준비해야지, 범용적으로 서류를 준비를 하지마라.
- 진심을 이야기하는 것보다 준비된 것을 이야기하는것(자신감있게 이야기하는것)이 중요하다. 자신감은 준비에서 나온다.
- 부스트코스, 야곰캠프 등 커리큘럼에 대한 간단한 설명을 추가해야한다. 면접관들은 그것이 무엇인지 모른다.
- 대답이 늦어질것 같으면, “죄송합니다 제가 좀 더 생각해보고 답변드릴게요 시간을 주세요” 이런식으로 얘기하고 고민을 해라.
- 마지막 질문이나 할 말을 할때, 내가 얼마나 이 회사에 관심이 있는지를 어필할 수 있는 질문을 해도 좋다.
- 면접관이 나를 면접하는 것도 있지만, 나도 면접관에 대해서, 그 회사에 대해서 면접을 본다는 자세로 질문을 해도 된다.
- 면접도 기술이다.
참고
- https://medium.com/mobil-dev/what-is-the-difference-between-swiftui-and-uikit-framework-a47b74b66c1c
- https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms
- 옵셔널이 필요한 이유: https://hashmap27.tistory.com/27
- Heap 메모리 사용이 성능상 좋지 않은 이유: https://zeddios.tistory.com/596
- Class vs Struct: https://developer.apple.com/documentation/swift/choosing_between_structures_and_classes
- Core Data vs Database: https://www.letmecompile.com/코어데이터core-data와-데이터베이스의-차이/
- Memory Leak 찾기: https://seizze.github.io/2019/12/20/iOS-메모리-뜯어보기,-메모리-이슈-디버깅하기,-메모리-릭-찾기.html