커리어 빌딩

2020-11-11
  • job
  • 생각

    • 좋은 회사란?
    • 어떤 개발자가 되고싶은지?
    • 이직을 성공햇는데 여기도 내 생각과 다르다면?
    • SI 기업이 아닌 자체 서비스를 가진 IT 기업에서 일하고 싶다
    • 기술의 중요성을 알고, 기술은 사람에게서 나오는 것을 알며, 중요함을 알기 때문에 학습과 성장을 게을리하지 않는다
    • 보고 배울 선배들이 많고, 알게된 기술을 공유하는 문화가 있으며, 개선에는 리스크가 따르는 것을 알고 있어야 한다

    자랑하고싶은것

    자동화에 관심이 많고, 팀에서 사용하는 도구를 개발해서 조직에 기여함

    • 크롬 플러그인 (단어검색/pdf 지원)
    • 공공기관 재택 스케줄러 (근무요일그룹, 그룹별 재택자)
    • 연계 솔루션 테스팅 툴 (상대 기관 모사)
    • 프로세스 모니터링 (리눅스/윈도우)
    • 운영 모니터링 툴 (java swing)
    • 멀티 스레딩 이미지 리사이져 (팀 보안 증빙 이미지 일괄 작업)
    • 레가시 파일 연계 대체 프로토타입 (netty 기반)
    • 테스트 유틸 (JUnit 테스트 환경 활성화, JUnit3 -> 4, Annotation 기반 설정)
    • 데이터(웹크롤링, 파일) 정리 모듈 등

    반대로 내가 뽑고 싶은 개발자

    • 테스트 케이스 작성을 잘 하는
    • 중복코드를 만들지 않는
    • 가독성, 성능을 생각하는
    • 단순 개발자가 아닌 사용자 측면에서 생각하는
    • 문제가 생겻을때 근본적인 해결책을 제시하는
    • 리팩토링을 하는
    • 고집이 있지만 꺽을줄도 아는
    • 로우레벨관점 생각도 할 수 있는
    • 좋은 개발자에대해 고민하는
    • 신기술에 관심이 있는, 학습을 꾸준히 하는

    SI 의 단점

    • 개발 문화가 좋지 않다.
    • 요구사항 변화가 빈번하게 일어나는 현실이 프로세스에 반영되지 않는다.
    • 납기가 가장 중요하기 때문에, 장기적인 유지보수 시야를 가지지 않는다.
    • 돌아가기만 하면 되는 것이 우선이기 때문?
    • 변화에 대한 리스크를 감당하기 힘들다
      • 개선이나 리팩토링을 하기 힘들다 -> 수정에 대한 리스크를 받아들이기 힘들기 때문에
      • 신기술 도입을 하지 않으니, 신기술에 대한 학습이 이루어지지 않는다

    경력기술서

    • 기존프로젝트 사용기술 및 개인포인트
    • 트러블슈팅
    • 깊게파본기술

    기술 정리

    알고리즘 기본

    • 정렬
      • 버블, 삽입, 힙, 머지, 퀵, 팀
    • dfs, bfs
    • dynamic
    • brute force

    문제풀이

    [Python/C++ 기본 문법 → 코드업 기초 100제 → BOJ 그리디/탐색 유형 문제 풀이 → 특정 기업 대상의 기출 문제 풀이]

    • 코드업: http://codeup.kr/
    • BOJ: https://www.acmicpc.net/
    • 프로그래머스: https://programmers.co.kr/

    ETC

    • 부동소수점
    • argument, parameter
    • encoding
      • UTF-8
        • 유니코드를 encoding 하는 방식
        • 가변인코딩 방식, 2byte -> 110 으로 시작, 3byte -> 1110 으로 시작
        • a 는 1byte, 는 3byte

    MSA

    • docker?
    • k8s?
    • service mesh
    • api gateway
    • message queue (kafka..)
    • transaction
      • Two Phase Commit
      • Choreography-based SAGA
        • Choreography
        • Orchestration

    database

    • 동시성 제어(낙관/비관)

    유니코드에 대해서 설명해보세요.

    1바이트를 사용하는 아스키만으로는 전세계의 문자를 표현할 수 없어서 나온 코드표. 여러 코드표가 존재하며 널리 사용되는 UTF-8 은 1-4바이트 가변이다.

    maven 과 gradle 의 lifecycle 에 대해서..

    프로세스와 스레드의 차이점

    • 프로세스
      • 운영체제로부터 시스템 자원을 할당 받는 단위
      • 최소 1개의 스레드가 존재
      • 프로세스간 통신을 사용해야함 (파일, 파이프, 소켓통신)
    • 스레드
      • 프로세스 내의 실행 흐름
      • stack 영역만 할당 받고 heap, data, code 영역은 공유한다.
    • 멀티 프로세스
      • 어떤 한 프로세스에 문제가 생겨도 다른 프로세스로 확산되지 않는다
      • 멀티 프로세스 간 컨텍스트 스위칭 비용이 크다
    • 멀티 스레딩
      • 프로세스가 하나이므로 시스템 자원 소모가 줄어든다
      • 스레드 사이의 컨텍스트 스위칭이 빠르다
      • 스레드간 통신 부담이 적다
      • 하지만 설계/디버깅이 까다롭고
      • 자원공유로인한 동기화 문제가 생긴다
      • 하나의 스레드에 문제가 생기면 다른 스레드도 영향받는다

    참고