# 내가 이제부터 부셔나가야 할 부분들 # 뿌셔!
프로그래머의 역량
전공수준의 서버, 네트워크, 자료구조 등의 기본지식의 공고한 이해
주 개발언어와 관련 프레임워크
언어 구동 개발플랫폼의 이해
데이터베이스
필수지식
CS와 서버관련지식
- 컴퓨터 시스템(하드웨어, 소프트웨어)
- OS(유닉스, 리눅스)
- 네트워크와 인프라(서버와 네트워크, 통신)
- 자료구조와 알고리즘
- 데이터베이스(SQL을 기본으로 한 RDBMS의 구조와 활용, NoSQL의 활용)
필수 프로그래밍언어
백앤드
- 자바 Go 파이썬 C C++
프론트앤드
- 자바스크립트 타임스크립트 등을 기본으로 한 서버사이드 연동 플랫폼인 Node.js등이 같이 학습
취업을 위해 필요한 스킬셋
알고리즘과 코딩 테스트
개발 스택( 모바일 , 프런트앤드, 백앤드, 데이터베이스) 필수적인 프레임워크
기본적인 서버 인프라
꾸준하게 공부해야할 영역
소프트웨어 엔지니어링
기초수준의 시스템 디자인
데이터베이스와 ER다이어그램을 바탕으로 한 엔티티 디자인
개발언어와 연관된 주력 프레임워크와 에코시스템
# 코딩테스트 준비 전략
중- 하 수준
유료 동영상 강의로 기초를 습득 + 최근 나온 알고리즘 전문 도서 추천
가장 무난한 언어 : 파이썬 + 자바스크립트 / 회사가 쓰는 언어 추천
브라우저 내에서 개발언어 선택 + 컴파익 + 테스트 케이스를 돌려볼 수 있다.
실제 코딩 테스트가 주어졌을때 주로 쓴 개발 툴을 열어놓고 응시하면 시간을 아낄 수 있다.
개발 툴을 못 쓰게 하는 경우도 있으므로 비슷한 패턴 문제들을 빠르게 푸는 연습을 하자
1. 프로그래머스
2. 해커랭크
3. 리트코드
4. 코딜리티
5. 백준
기본적인 테스트 준비 + 감조차 없다면 예제를 보고 따라서 타이핑을 해보며 감을 익히자.
동영상 강의 로 감을 익히자 + 유데미와 인프런 같은 강의 플랫폼에서 알고리즘 강의
# 쉬운 문제 부터 계단식 # 말랑말랑한것 미니퀴즈 간단개념
프로젝트 오일러 https://projecteuler.net/about
수학기반의 퀴즈를 프로그램 코드로 푸는 사이트 / 우리나라 사이냅소프트가 한국판으로
https://euler.synap.co.kr 365개 정도의 문제가 있으니 퍼즐 푸는 느낌으로 예열
문자열 반전/ 문자열 회문인지 검사/ 문장에 쓰인 단어수 세는/ 주어진 숫자값이 소수인지/
메일 포맷과 같은 특정 포맷이 맞는지 검사/ 배열에서 가장 낮거나 높은값/ 두배열의 차이값 등을 응용
# 문자열반전하는 코드
main
ReverseStrings rs = new ReverseString();
System.out.println(rs.reverserStr("ABCdefg"));
private String reverseStr(String str) {
return new StringBuilder(str).reverse().toString();}} 내장함수 reverse
쓰지말라
main
String str = "ABCDefg";
char chars[] = str.toCharArray();
for(int i = chars.lenth-1; i>=0; i--){
System.out.print(chars[i]);
간단하지만 문자열 길이예 비례하여 성능이 저하된다.
역순으로 문자열을 더할 때 마다 전체 문자열 길이를 계산하기 떄문이다.
더 나은 처리 방식을 고민해야한다. StringBuffer 이나 StringBuilder로 처리하는 것이 더 나은 해법
#문자열 회문인지 확인(앞으로 읽으나 뒤로 읽으나 같은 단어 또는 문장인지 의미)
- 뒤로 부터 읽어서 원본과 같은지 비교
- 깃허브에서 풀이 참고
# 계산과 로직, 자료구조를 고려한 훈련
계산식이나 처리로직을 고민하는 영역을 포함한 자료의 구조등을 고려하여 프로그램을 작성하는 훈련이다.
예를 들어 계산이나 변환, 자료구조와 관련한 문제들을 제시했을때 문제의 특징을 파악하여 빠르게 풀어보는 훈련.
예 배열 numbers에 음수, 양수, 0 등의 숫자가 임의로 들어가있습니다. 유형별로 개수를 파악하여 비율로 표시하시요. 단 소수점은 6자리까지 표현합니다.
int[] numbers = { -22,33,-4,0,0,9,1,-2,11,0}
주어진 값이 이와 같다고하면 양수 음수 0의 갯수를 세서 각 비율을 소수점 6자리까지 표현
Arrays.stream사용
private static float[] itemCount(int[] numbers){
long positives = Arrays.stream(numbers).filter(num-> num>0).count();
long negatives = Arrays.stream(numbers).filter(num-> num<0).count();
long zeros= Arrays.stream(numbers).filter(num-> num=0).count();
float point = (float) numbers.lenth;
float positive = positives/ point;
float negative = negatives /point;
float zero = zeroes/point;
float[] results = {positive, negative,zero};
return results}
# 메인 메서드에서 input으로 받은 시간 값(am,pm)을 24시간 포맷으로 변경하시오 timeconversion.java
# 최소 10개 이상의 integer형 Array가 주어졌을 때 가장 작은 값의 index와 value를 출력하시오 arrayindexposition.java
# sns기능을 구현하는 프로그램을 작성할 때, 현재 읽고 있는 콘텐츠가 몇시간 전에 작성되어있는지 표기
# 팔로워 인원수에 따른 표기 달러표시 단위로 변환하기
#스택과 큐의 특징에 대해 설명하고 간단한 구현방법을 제시
스택 - 후입선출/ 리포/나중삽입먼저제거 데이터의 추가 데이터의 제거 맨 위의 항목을 반환 / 최상단 요소에만 접근가능
예시 웹브라우저의 뒤로가기, 함수 호출스택
큐 - 선입선출/ 피포/먼저삽입먼저제거 데이터삽입 가장앞에있는항목제거 첫번째값 확인/ 큐의 앞과 뒤에서 모두 데이터접근 예시 프린트 대기열, 메시지 큐등
# 프로그래밍 에디터의 코드 검사기(괄호 검사기) 소괄호 중괄호 대괄호는 짝이 맞아야 문법에러가 발생하지 않는다.
괄호들의 개수가 맞는지 검증. 입력받을 괄호들은 첫 입력 명령어로 들어오는 괄호의 라인수를 받고 두번째 입력 부터는 해당라인만큼 괄호가 들어옵니다. 첫라인에 4라는 숫자를 받으면 그 뒷줄부터는 괄호로 구성된 문장이 네줄 입력됩니다.
# 기초 훈련이 되었다면 실행속도에 대한 고민/ 해당 구현이 빠른지/ 더 빠르게 처리할 방법은 없는지- 시간 복잡도
시간복잡도를 감안한 효율적인 알고리즘 구현과 풀이로 빅오 표기법의 이해
O(1) 일정한 복잡도 혹은 상수 시간 복잡도라고 하며 입력값이 증가해도 수행시간 증가하지 않음
- 해시테이블에서 요소를 찾는경우
O(log n)로그 복잡도. 연산이 실행될 때마다 데이터 크기는 절반으로 감소 , 입력크기에 비례하여 로그에 시간이 소요
- 이진검색, 힙정렬
O(n) 선형 복잡도. 입력값에 비례해서 선형적으로 복잡도가 증가한다
- 원하는 값을 찾기 위해 검색 범위를 절반씩 줄여나감, 선형 연결 리스트에서 요소 탐색, 단일 loop등
O(nlogn) 선형 로그 시간 복잡도. 전체 데이터를 원소하나의 리스트 n개로 만들고 리스트를 두개씩 합치는 과정을 반복하여 연상
- 병합정렬, 퀵 정렬, 분할 정복 알고리즘( 분할 후 병합하는 경우)
O(n^2) 2차 복잡도. 입력값이 증가함에 따라 n의 제곱만큼 증가한다
- 버블정렬 선택정렬 2중for문
O(n^2) 지수시간 복잡도. 완전탐색과 같이 모든 가능한 조합을 시도하는 경우, 사용가능한 모든 경우의 수를 탐색하는 경우 가장느리다
...
# 테스트 고려하기
테스트코드 작성한다. 정상동작하는지. 예외케이스는 없는지 검증하는 단계이다.
메인메서드 안에서 검증진행 / Junit 이나 Spock등을 활용한 테스트 케이스를 작성하여 실제 다양한 검증 데이터를 통과
# 이직결심후 지원까지 끝냈으면 > 절대적 공부시간 부족 > 문제 미리준비 > 압박 > 평소에 해놓자!
# 코테의 유형
각종 문제은행 사이트를 통한 알고리즘과 코테 ( 주니어 )
과제 위주의 코딩 결과물을 검토하는 형태 ( 시니어 )
문제와 코드에서 오류 검출하기 ( 문법적 오류 검토/ 값에 대한 동등 비교/ 객체의 멱등비교가 맞는지 확인)
주어진 주석으로 프로그램 코드를 만들어낸 방식
# 어떻게든 다 풀어 내는것이 유리 # 왜 이런 자료 구조를 @ 왜 이런방식은 @ 더 좋은 방식은 없는가 > 기술면접에서 물어 볼 수 있음 의도를 쉽게 파악할수 있도록 구현하기
# CS지식 다시 정리 / 최단거리 알고리즘인 다익스트라 구현/ 페이징교체알고리즘 LFU LRU에 쓰이는 자료구조형/
DFS나 BFS에 쓰이는 자료구조/ 우선순위 큐/ 스택큐/ 리스트vsSet 등 자료구조의 특징부터 소트 알고리즘별 시간 복잡도 등응ㄴ 철저하게 구현해보고 설명도 직접 해봐야한다.
관련 책 등 정리된 자료를 읽어도 이해했다고 생각하지 말고 알고 있어도 유형을 다르게 물어보면 대답을 못하니까 설명할 수 있도록 코딩 /
CS주로 물어보는 개념
https://github.com/haru-note/tech-interview/tree/main/src/main/java/net/harunote/algorithm
tech-interview/src/main/java/net/harunote/algorithm at main · haru-note/tech-interview
콜랙션 프레임워크 강좌 예제. Contribute to haru-note/tech-interview development by creating an account on GitHub.
github.com
병합정렬 버블정렬 퀵정렬 힙정렬 삽입정렬
선형검색 이진검색 깊이우선 탬색(DFS) 너비우선탐색(BFS)
스택 큐 우선순위 큐 연결리스트 LinkedHashMap
LRU, LFU
# 큐와 우선순위 큐
코드 알기
큐는 리포/ 배열이나 리스트 연결리스트 등으로 구현 가능/ 공연장에 줄을 선 사람들 생각
연결 리스트를 이용하여 큐를 구현할 경우 데이터가 저장될 큐의 크기를 미리 지정하지 않아도 된다.
배열은 요소들을 추가하거나 삭제할 떄 크기가 초과되면 새로운 배열을 생성하고 기존요소를 복사해야한다.
반면 큐는 동적으로 크기를 늘리거나 줄일 수 있어서 메모리 관리가 효율적이다.
주요기능은 다음과 같다
Enqueue()
Dequeue()
-----------------------------------132페이지
'책 > 개발자 기술 면접 노트' 카테고리의 다른 글
개발자 기술 면접 노트_목차 (4) | 2024.10.22 |
---|