CS 지식 정리하기

Kim Ju Young·2022년 5월 18일
0

공부

목록 보기
1/2
post-thumbnail

시작하기 전에

CS 지식을 쌓고, 컴퓨터를 더 잘 알아가기위해 위 글을 쓴다. 매일같이 배워가는 것들을 위 글에 기술해 놓을 것이며, 천천히 지식을 늘려가보자. 필자는 백엔드 개발자이고, Java와 C#을 위주로 기술할 것이다.

카테고리

자료구조

자료구조는 프로그램의 기본 개념이다. 웹 개발자들이 쓰는 DTO클래스, 활성레코드들도 자료구조라고 할 수 있으며, Java의 컬렉션은 모두 이 자료구조다.

Priority Queue(우선순위 큐)

[Java] Priority Queue 매개변수에 람다식 쓰는 이유가 뭐야?
우선순위 큐는 큐이면서도 값이 추가될 때마다 오름차순으로 정렬시켜주는 자료구조다.

자료가 추가/삭제될 때마다 걸리는 시간복잡도는 O(logN)으로 매우 효율적인 편이다. 자료가 추가/삭제 시 정렬되야하는 문제에서 애용된다.

알고리즘

선형탐색

평소에 쓰는 이중for문이나 for문을 사용해 배열을 순차적으로 탐색하는 단순한 알고리즘이 선형탐색이다. 시간복잡도가 O(N^2)일 확률이 높아 자료범위가 매우 많을 때는 적당하지 않다.

이분탐색

이분탐색은 배열이 정렬 되있어야하며 선형탐색보다 구현은 복잡하지만, 더 빠르다. 시간복잡도는 O(logN)이다. 시간복잡도가 좋지만, 제약사항으로 정렬이 되어야한다는 걸 항상 기억한다.

그래서, 다음과 같은 경우에 쓴다.

  1. 배열이 이미 정렬되어있는 경우
  2. 탐색을 여러번 해야하는 경우

문제 모음
10816 - 숫자카드2

투포인터 알고리즘

연속성을 가진 배열에서만 쓸 수 있지만, 그저 반복문을 이용해서 더한다면 시간복잡도가 O(N^2)인 알고리즘들을 O(n)으로 줄일 수 있는 강력한 알고리즘.

문제 모음
3273 - 두 수의 합

슬라이딩 윈도우 알고리즘

문제 모음
10025 - 게으른 백곰

데이터통신

데이터통신에서 가장 많이 쓰이는 지식은 OSI 7계층이나 IP계층과 MAC이라고 생각한다. AM이나 FM등 기본지식과 상용에서 쓰이는 FHSS 방식등은 통신학교 때 배운 지식으로 차근차근 작성하려 한다.

네트워크

UDP와 TCP 차이

UDP-그리고-TCP
UDP는 비연결형 프로토콜로 데이터를 전달해주지만 데이터를 보낼 때 데이터의 전달 및 중복 방지가 보장되지 않는다.

TCP는 연결형 프로토콜로 데이터 전달시 3-way handshaking과정을 통해 연결을 설정하고 흐름제어 및 혼잡제어가 가능하다.

둘의 차이를 설명해 줄 땐

  1. 연결형/비연결형
  2. 3-way handshaking
  3. 흐름제어와 혼잡제어

이 세가지를 위주로 설명하면 이해가 편하다.

운영체제

개발자에게 가장 핫한 운영체제는 Windows, Mac, Linux(Unix)로 볼 수 있다.

Windows

가정집 컴퓨터에 있는 대표적인 운영체제는 Windows라고 단언할 수 있다. 편리한 GUI환경, 대부분의 상용 프로그램이 돌아가는 좋은 운영체제다. 하지만, 개발자에게 좋은 운영체제냐고 물어본다면 그건 아닐 수도 있다.

아닐수도 있는 이유는 무엇일까?

Windows Server는 라이센스료가 비싼 서버 중 하나다. 그리고 굳이 서버를 돌릴 정도의 개발자가 GUI환경이 필요하지 않은 점도 한 몫 할 것이다. 그런 이유로 사업가들은 대체로 서버를 돌릴 때, Linux를 선호하게 된다.

컴파일러

C, C++, Java언어를 배울 때, 소개 부분에 꼭 나오는 것이 컴파일러다.

Python같은 스크립트 언어들은 인터프리터를 사용하여 컴파일러에 대해 자세히 설명하진 않는다.

컴퓨터 그래픽스

Canvas

컴퓨터 그래픽하면 Canvas 밖에 잘 모른다. 이건 어떤 지식들이 있는건지 차근차근 잘 알아가야겠다.

보안

서버개발자도 보안에 대해 민감할 수 밖에 없다. 클라이언트와 주고받는 데이터들은 보호되어야하며, 아무리 Post 방식을 이용한다한들 Packet을 뜯어 body을 본다면 데이터를 읽을 수 있다.

그래서 이 데이터를 읽지 못하게 AES256 방식을 사용하거나 암호화하면 해커들이 그 정보를 읽기 매우 어렵게 할 수 있다.

상용 데이터들은 특정 시간 이상만 버티면 되는 암호화의 특성상, 암호화를 살짝 알아두는 건 웹 개발자들에게 매우 유용하게 쓰일 수 있다.

마무리하며

역시 공부는 아무리해도 모자라서, 이렇게 공부를 정리해둔게 나중 큰 힘을 발휘하리라 믿는다.

profile
호호선생

0개의 댓글