요약 기술적 문제 준비하기 알고 있어야 할 것들 핵심 자료구조, 알고리즘, 기본 개념 2의 승수(power of 2) 표 실제 문제 살펴보기 원하는 것이 무엇인가. 최적화 및 문제풀이 기술 #1: BUD를 찾으라 최적화 및 문제풀이 기술 #2: 스스로 풀어보라 DIY(Do Iy Yourself) 최적화 및 문제풀이 기술 #3: 단순화 일반화하라 최적화 및 문제풀이 기술 #4: 초기 사례(base case)로부터 확장하기(build) 최적화 및 문제풀이 기술 #5: 자료구조 브레인스토밍 메모 7. 기술적 문제 준비하기 이 책에 실린 문제를 만날 때마다 다음과 같이 하라 직접 풀도록 노력하라 답을 보지 않고 직접 풀려고 노력하라 공간과 시간 효율에 대해서 반드시 생각하라 코드를 종이에 적으라 코드를 작성하고..
요약 big-O 시간 복잡도 점근적 실행 시간을 의미 최선의 경우, 최악의 경우, 평균적인 경우 알고리즘에서는 최선의 경우를 고려하지 않는 경우가 많음. 공간 복잡도 알고리즘에서는 시간뿐 아니라 메모리 또한 신경 써야 함. 상수항은 무시하라 특수한 입력에 대한 시간 차이를 무시함 지배적이지 않은 항은 무시하라 여러 부분으로 이루어진 알고리즘 : 덧셈 vs. 곱셈 ex) for 문을 끊어서 하는가 중첩에서 하는가 상환 시간 전체 수행 시간이 일정하지 않을 때 분할 상환 개념을 이용 ex) ArrayList 삽입 시간 log N 수행 시간 ex) 원소의 개수가 절반씩 줄어든다. 재귀적으로 수행 시간 구하기 O(분기^깊이) 메모 6. big-O big-O : 알고리즘의 효율성을 나타내는 지표 혹은 언어 시간 ..
요약 면접 전에 탄탄 이력서 작성 필요 적절한 이력서 길이 고용 이력 프로젝트 주요 프로젝트 2~4개 정리 프로그래밍 언어와 소프트웨어 소프트웨어 회사에 적합한 소프트웨어를 신중히 선택 프로그래밍 언어 능숙한 언어가 2개혹은 그 이상은 있어야 함 낙인의 가능성에 대해 알고 있기 행동 문제 여러분의 단점은 무엇인가 진짜 단점 얘기하기 면접관에게는 어떤 질문을 해야 하나 순수한 질문 통찰력을 보여줄 수 있는 질문 열정을 보여줄 수 있는 질문 기술적 프로젝트에 대한 이해 행동 질문에 대한 대처 요령 구체적으로 답하고, 오만한 태도를 보이지 말라 세부사항은 최소한만 언급하라 팀이 아닌 여러분 자신에 초점을 맞춰라 구조적인 답변을 내놓으라 취했던 행동에 대해 논하라 여러분의 이야기를 되짚어 보자 그러니까, 당신에..
요약 특별한 상황에서의 면접 경력자 시스템 디자인은 경력 수준에 비추어 매겨짐. 테스터 혹은 SDET 명시적으로 테스트를 요구하지 않는다고 하더라도 “어떻게 테스트할까” 고민해봐야 함 PM 개발 책임자, 관리자 스타트업 면접관의 입장 여기에 있는 문제를 그대로 사용하지 말라 중간 이상의 어려운 문제를 출제하라 겁을 주는 문제는 피하라 지원자를 긍정적으로 대하라 행동 질문을 철저히 하라 지원자에게 조언하라 그들이 생각할 시간을 원한다면 생각할 시간을 주라 방식을 정하라 : 새너티 테스트, 수준, 전문가, 프락시 메모 3. 특별한 상황에서의 면접 경력자 어떤 회사가 신입 지원자에게 알고리즘을 물어 본다면 그 회사는 경력자에게도 알고리즘 문제를 물어 볼 가능성이 큼. 회사마다 다름 시스템 디자인은 경력 수준에..
요약 면접 과정 분석, 코딩, 기술적 지식, 컴퓨터 과학 기본, 경험, 문화, 의사소통 능력을 봄. 부정 오류는 괜찮다. 실력이 좋은 사람을 원한다. 몇 명을 놓치는 것은 괜찮다. 실력이 좋지 않은 사람을 뽑는 것을 두려워 함. 문제풀이 능력이 좋은 사람을 원함 머리가 뛰어남 → 회사에 가치있는 인재 기초적인 자료구조 알고리즘 지식은 유용함 지원자를 판단할 수 있는 척도가 됨. 회사별 면접 과정 마이크로 소프트 똑똑하고 기술에 열정적인 사람을 원함 아마존 규모 확장성을 고민하는 사람을 원함 구글 규모 확장성을 고민하는 사람을 원함 애플 자신의 생각을 명료하게 전달하는 사람을 원함 페이스북 기업가 정신을 가진 개발자를 원함 어떤 언어든 확장 가능한 시스템을 만들어나갈 개발자를 원함 팰런티어 뛰어난 사람을 ..
책너두 6기에 참여했다. 이번에는 코딩 인터뷰 완전분석이라는 책을 선택했다. 실무에 필수적인 내용이 아니었기에 미루거나 초반 부만 시도하다가 그만둔 책인데 이번 기회에 이 책을 다 읽어서 코딩 인터뷰에 대한 인사이트를 얻고, 문제에 대한 유연한 사고를 해보고자 이 책을 선택했다. 전반적인 내용 초반부는 면접, 인터뷰에 대한 요령 및 예시를 설명한다. 중반부는 면접 문제에 등장하는 자료구조, 알고리즘에 대한 내용이 주를 이룬다. 후반부는 지식 기반문제에 대한 내용으로 C, C++, JAVA 언어에 대한 내용, 데이터베이스, 스레드와 락에 대한 내용을 설명한다. 독서 전략 기존에 읽어 왔던 책과 확실히 다른 독서 전략이 필요하다. 코딩 인터뷰에 대한 내용이기 때문에, 단순히 책을 읽는 것을 넘어서서 문제를 ..
요약 실전 디자인 패턴 책임 연쇄 패턴 플라이웨이트 패턴 인터프리터 패턴 중재자 패턴 메멘토 패턴 프로토타입 패턴 비지터 패턴 메모 책임 연쇄 패턴 1개의 요청을 2개 이상의 객체에서 처리해야 한다면 책임 연쇄(Chain of Responsibility) 패턴을 사용하면 됨. ex) 스팸 메일, 팬 메일, 항의 메일, 신규 설치 요청 메일을 분류해야 함. 검출기를 써서 메일 분류하는 디자인을 만들어야 함. 책임 연쇄 패턴은 주어진 요청을 검토하는 객체 사슬을 생성함. 사슬 속에 속해 있는 각 객체는 자기가 받은 요청을 검사해서 직접 처리하거나 사슬에 들어있는 다른 객체에게 넘김 p637 참고 장점 요청을 보낸 쪽과 받는 쪽을 분리할 수 있음 객체는 사슬의 구조를 몰라도 되고 그 사슬에 들어있는 다른 객체..
요약 실전 디자인 패턴 패턴을 찾아 떠나기 사악한 안티 패턴 섬별하기 기타 패턴 브리지 패턴 빌더 패턴 메모 패턴을 찾아 떠나기 디자인 패턴의 정석 GOF 디자인 패턴 모든 기초 패턴을 찾을 수 있음. 패턴 교과서 패턴이라는 개념은 버클리 건축학과의 크리스토퍼 알렉산더가 처음으로 고안함. 전산학자가 아닌 건축가임. 디자인 패턴이 어떻게 시작되었는지 알 수 있음. 주거용 건축을 만드는 일이 확장성 좋은 소프트웨어를 만드는 것이 서로 얼마나 유사한지 깨달을 수 있음. 사악한 안티 패턴 섬별하기 안티 패턴(Anti-Pattern) : 어떤 문제의 나쁜 해결책에 이르는 길을 알려줌. 안티 패턴은 나쁜 해결책을 문서로 만들어두어 다른 개발자들이 똑같은 실수를 하지 않도록 방지할 수 있음. 안티 패턴의 요소 어떤 ..
요약 실전 디자인 패턴 디자인 패턴 분류하기 디자인 패턴 범주 알아보기 패턴으로 생각하기 최대한 단순하게 디자인 패턴은 만병통치약이 아님 패턴이 필요할 때 리팩터링과 패턴 꼭 필요하지 않은 패턴은 빼버리자. 지금의 디자인에서 디자인 패턴을 제거하는 일을 두려워하지 말자. 꼭 필요하지 않은 패턴을 미리 적용할 필요가 없음. 패턴을 대하는 마음가짐 전문 용어의 위력 되새기기 용어를 공유하는 5가지 방법 4인방과 함께하는 객체마을 여행 메모 디자인 패턴 분류하기 같은 그룹에 속하는 패턴끼리 비교하기 좋게 종류에 따라 분류할 필요성이 생김. 생성, 행동, 구조라는 3가지 범주로 용도에 따라 나눔. 디자인 패턴 범주 알아보기 생성 패턴(Creational Pattern) : 객체 인스턴스를 생성하는 패턴으로, 클..
요약 실전 디자인 패턴 디자인 패턴의 정의 자세히 살펴보기 메모 디자인 패턴의 정의 자세히 살펴보기 패턴은 반복적으로 등장하는 문제에 적용할 수 있어야 함. ex) 열쇠를 차 안에 두고 내렸다고, 차 유리를 깨는 방법을 반복적으로 적용할 수 있는 건 아님. 이 패턴은 다른 사람의 상황에서 동일하게 적용되어야 함. 패턴에는 이름이 있어야 함. 패턴을 단순하게 문제, 컨텍스트, 해결책만 가지고 기술되거나 문서화 되지 않음. 패턴을 기술하고 패턴 카탈로그에 수록할 때 사용할 수 있는 훨씬 훌륭한 방법이 있음. 패턴 카탈로그에는 일련의 패턴을 정해서 각각의 패턴을 다른 패턴과 비교하며 자세하게 설명함. ex) GoF 패턴 → 23개의 기본 디자인 패턴이 수록됨. 패턴이 기술되는 예 (p605참고) 패턴의 이름 ..
요약 실전 디자인 패턴 디자인 패턴의 정의 메모 CHAPTER 13. 패턴과 행복하게 살아가기 : 실전 디자인 패턴 디자인 패턴의 정의 📍 패턴(Pattern) : 특정 컨텍스트 내에서 주어진 문제의 해결책이다. 컨텍스트(context) : 패턴이 적용되는 상황을 뜻함. 반복적으로 일어날 수 있는 상황이어야만 함 문제(problem) : 컨텍스트 내에서 이뤄야 하는 목표를 뜻함. 컨텍스트 내의 제약 조건도 포함됨. 해결책(solutiuon) : 우리가 찾아내야 하는 것임. 제약조건 속에서 누가 적용해도 목표를 이룰 수 있는 일반적인 디자인을 뜻함. 이렇게 정의를 따지는 이유는? 패턴을 정의할 수 있어야 다양한 장점을 제공하는 패턴 카탈로그를 만들 수 있기 때문.
수강 목적 수강당시 웹 백엔드 2년차 개발자로 실무를 경험하고 있었다. 하지만, 컴퓨터 공학 전공자가 아닌, 비전공자였기 때문에 항상 기초 공부가 부족하다는 것을 실감하고 있었다. 예전부터 Pope 선생님의 유튜브를 즐겨 보며 마인드 컨트롤하곤 했는데, 더 늦기전에 POCU 아카데미의 강의를 하나씩 독파해나가고 싶었다. (POCU 로드맵 참고 : https://trello.com/b/C5DufaL5/pocu-%EB%A1%9C%EB%93%9C%EB%A7%B5-%EC%9B%90%ED%95%98%EB%8A%94-%EA%B8%B0%EB%8A%A5%EC%9D%84-%ED%88%AC%ED%91%9C%ED%95%98%EC%84%B8%EC%9A%94) 특히, "전문 프로그래머가 되기 위한" 이라는 말이 굉장한 호기심으..