1. 자기소개서 쓰기 + 글쓰기
사실 경력자가 자기소개서를 써야 하는지 의문이다.
자기 소개서 보다는 진행한 프로젝트에서 일어난 일이나, 처리 방법 등에 대하여 자세히 쓰는 게 도움이 될 거라 생각한다.
하지만 면접관의 생각은 다르다
자기 소개서 조차 제대로 준비하지 않은 사람이 회사 지원을 하는 것을 이해 못하는 면접관도 있다.
사람이 모두 다르기 때문에 가능하면 기본적인 것들은 준비하는 것이 여러모로 좋다.
2. 기초지식 - JAVA 개발자 기준
1) JAVA 기초
A. 메모리 영역
메소드 영역, 힙 영역, 스택 영역, native 메소드 영역에 대한 대략적인 이해
B. 객체 지향이란?
캡슐화, 상속, SOLID 에 대하여 한 번쯤 읽어보면 좋다.
C. 간단한 프로그램을 손으로 짜보자
손으로 코드를 짜는 연습을 몇 번 해보면, 나중에 문법에 대한 질문이 나올 경우 기억 쉽게 날 것이다.
접근 제어자, 반복문, 분기문 등을 숙지하고 간단한 프로그램을 손으로 짜보자
추가
문제 풀이 사이트를 이용해보자.
https://codility.com
문제 풀이 사이트에서 알고리즘 문제를 풀어보면 많은 도움이 됩니다.
D. 데이터형 별 사이즈와 2의 거듭제곱
정도현님이 주신 추가 내용 - 좋은 말씀 감사합니다.
회사에 따라 다르지만, 성능을 중시하고 큰 데이터를 다루는 회사의 경우 데이터형의 사이즈와 2의 거듭제곱도 32까지 암기 필요
자바의 데이터 형별 비트수 참조
2의 거듭제곱 참조
A. 생성 패턴(Creation pattern) : 객체의 생성과정에 관여하는 패턴
추상 팩토리(Abstract factory) : 비슷한 클래스 군을 생성하는 패턴
팩토리 메소드(Factory method) : 객체를 생성하는 부분을 클래스화 하고 변경이나 수정시 하나의 클래스에서만 수정
싱글톤(Singleton) : 클래스의 인스턴스가 하나만 생성되게 보장, 전역으로 설정되어 어디서든 접근 가능
빌더(Builder) : StringBuilder와 같이 .append() 호출시 처리 후 자신을 다시 리턴
B. 구조 패턴(Structral Pattern) : 클래스나 객체의 합성에 관한 패턴
어답터(Adapter) : 돼지코(220V => 110V)와 같이 인터페이스를 이용한 호환을 처리
데코레이터(Decorator) : 객체에 데코레이션을 하나씩 추가하는 패턴
퍼사드(Facade) : 복잡한 서브 시스템에 대하여 간단하게 인터페이스를 제공
프록시(Proxy) : 객체에 대한 접근을 제어하는 용도로 대리인이나 대변인에 해당하는 객체를 제공
C. 행동 패턴(Behavioral Pattern) : 상호작용하는 방법과 책임을 분산하는 패턴
옵서버(Observer) : 하나의 클래스의 상태가 변경되었을 때, 변경된 사항을 등록된 클래스들에게 전달
전략(Stategy) : 행동을 캡슐화하고 위임을 통해서 어떤 행동을 할지 결정
템플릿 메소드(Templet Method) : 구체적인 처리를 하위 클래스에 위임
명령(Command) : 명령을 클래스로 만듦.(예-리모컨)
3) 알고리즘 & 정렬
알고리즘은 물어보는 곳도 있지만, 물어보지 않는 곳도 있다.
실제로 쓰기보다는 기초 지식에 대한 것이고 면접관도 기본적인 부분밖에 모르는 경우가 많다.
가장 많이 나오는 질문은 O(빅오)와 정렬 알고리즘이다.
O(빅오)는 시간 복잡도의 표현법으로 다음과 같이 표기한다.
상수 형태 : O(1)
로그 형태 : O(log n)
선형 : O(n)
선형 로그 형태 : O(n log n)
다차 형태 : O(n²), O(n³)
지수 형태 : O(2n), O(3n) 여기서 N은 제곱수이다.
팩토리얼 : O(n!)
일반적으로 위로 갈수록 알고리즘이 매우 빨라지며, 아래로 갈수록 n의 값이 커질 때마다 급격하게 알고리즘의 수행 시간이 증가한다.
출처 : 나무 위키
가장 많이 문의하는 것이 정렬 알고리즘이다. 다음을 참고하자
정렬 관련 참고 자료 1
정렬 관련 참고 자료 2
눈으로 보는 정렬 알고리즘
4) Spring Framework
IoC(Inversion of Control) - 제어의 역전
IoC에서는 객체가 자신이 사용할 객체를 직접 생성하거나 가져오지 않는다. 또한 객체 자신이 어떻게 생성되고 사용은 지 알 수 없다. 모든 객체는 제어 권한을 위임받은 특별한 객체에 의해서 만들어지고 사용된다.
DL(Dependency Lookup) - 의존성 검색
저장소에 저장되어 있는 객체에 접근하기 위하여 개발자들이 컨테이너에서 제공하는 API를 이용하여 객체를 검색한다.
DI(Dependency Injection) - 의존성 주입
각 계층/클래스 사이에 필요로 하는 의존 관계를 컨터에너가 자동으로 연결하여 주는 것
의존관계를 빈 설정(Bean Definition) 정보를 기반으로 컨테이너가 자동으로 연결해 주는 것으로, DL 사용시 컨터이너 종속성이 증가하기 때문에 DI를 사용
Setter Injection, Constructor Injection, Method Injection 이 있다.
5) DBMS
인덱스(INDEX)
인덱스는 원하는 데이터를 쉽게 찾을 수 있도록 돕는 책의 찾아보기와 유사한 개념이다.
상세 내용 참조
옵티마이저(Optimizer)
DB엔진 내부의 프로그램으로 DB 엔진 코어이다.
SQL을 가지고 처리 절차를 생성하고 실행 가능한 수행 모듈로 만들어 실행 후 결과를 리턴 한다.
규칙 기준 옵티마이저-인덱스 구조, 비교 연산자 우선순위를 기준으로 최적의 경로 선택
비용 기준 옵티마이저-처리방법이 나열되어 있으면 가장 적은 비용이 드는 방법 선택(다양한 통계 정보 참조)
추가 내용 참조
힌트(HINT)
액세스에 결정적인 영향을 미치는 것은 수립된 실행계획이다.
실행계획은 다음의 대한 영향을 받는다.
1. SQL 형태
2. 테이블 및 인덱스 구조
3. DBMS 버전
4. 통계 정보
힌트는 실행계획에 대한 사용자 정의를 설정하는 것이다. 다만, DBMS는 무조건 힌트를 따르지 않는다.
추가 힌트 참조
파티션(Partition)
대용량의 Table이나 Index를 파티셔닝 한다는 것은 하나의 Object를 여러 개의 세그먼트로 나눈다는 의미이다. 즉 하나의 테이블이나 인덱스가 동일한 논리적 속성을 가진 여러 개의 단위(partition)로 나누어져 각각이 PCTFREE, PCTUSED, INITRANS, MAXTRANS, TABLESPACE, STORAGE PARAMETER 등 별도의 물리적 속성을 갖는 것이다.
특히 관리해야 할 데이터가 늘어나면 성능과 스토리지 관점에서 문제가 생길 수 있는데, 이를 해결할 수 있는 효율적인 방법 가운데 하나가 곧 파티셔닝이다. 파티셔닝은 보통 다음과 같은 장점을 갖고 있다.
◆ 데이터 액세스 시(특히 풀 스캔 시) 액세스의 범위를 줄여 성능을 향상시킨다.
◆ 물리적으로 여러 영역으로 파티셔닝해 전체 데이터의 훼손 가능성이 줄어들고 데이터 가용성이 향상된다.
◆ 각 파티션 별로 백업, 복구 작업을 할 수 있다.
◆ 테이블의 파티션 단위로 디스크 I/O를 분산해 부하를 줄일 수 있다.
추가 내용 참조
Mysql의 경우 샤딩이라고 합니다.
샤딩 내용 참조
6) Front Side
Html, css, JavaScript, Jquery, AngularJS, REACTJS 등의 내용에 대하여 아는 만큼 준비한다.
7) 모바일
안드로이드, IOS, 모바일 서버 등의 내용에 대하여 아는 만큼 준비한다.
3. 회사 고르기
경력이 있고, 돈을 원한다면 계약직 또는 프리랜서를 추천합니다.
스킬 향상이나, 재미있는 일을 원한다면 스타트업을 추천합니다.
편한 일을 원하시면 유지관리 업무를 추천드립니다.
4. 면접 시 주의 사항
업체 정보
가끔 면접관 중에 이력서도 읽고 오지 않는 사람이 있다.
이런 사람이 예의가 없듯이 지원한 회사에 대한 정보를 아무것도 모른다면,
이 또한 지원자의 예의가 아니다.
10분 정도만 시간 내서 면접 전에 회사 정보에 대한 것을 숙지 하자.
모르면, 모른다 라고 이야기 하자.
모르는 것을 아는 것처럼 이야기하는 것은 정말 바보 같은 행동이다.
건방지지 않게 그렇다고 비굴하지 않게.
벼는 익을수록 고개를 숙인다고 한다.
가끔 면접관이 잘못된 이야기를 할 경우가 있다.
그럴 경우 면접관과 논쟁을 하기보다는 우회하는 방법을 선택하자.