CS 지식을 쌓고, 컴퓨터를 더 잘 알아가기위해 위 글을 쓴다. 매일같이 배워가는 것들을 위 글에 기술해 놓을 것이며, 천천히 지식을 늘려가보자. 필자는 백엔드 개발자이고, Java와 C#을 위주로 기술할 것이다.
자료구조는 프로그램의 기본 개념이다. 웹 개발자들이 쓰는 DTO클래스, 활성레코드들도 자료구조라고 할 수 있으며, Java의 컬렉션은 모두 이 자료구조다.
[Java] Priority Queue 매개변수에 람다식 쓰는 이유가 뭐야?
우선순위 큐는 큐이면서도 값이 추가될 때마다 오름차순으로 정렬시켜주는 자료구조다.
자료가 추가/삭제될 때마다 걸리는 시간복잡도는 O(logN)으로 매우 효율적인 편이다. 자료가 추가/삭제 시 정렬되야하는 문제에서 애용된다.
평소에 쓰는 이중for문이나 for문을 사용해 배열을 순차적으로 탐색하는 단순한 알고리즘이 선형탐색이다. 시간복잡도가 O(N^2)일 확률이 높아 자료범위가 매우 많을 때는 적당하지 않다.
이분탐색은 배열이 정렬 되있어야하며 선형탐색보다 구현은 복잡하지만, 더 빠르다. 시간복잡도는 O(logN)이다. 시간복잡도가 좋지만, 제약사항으로 정렬이 되어야한다는 걸 항상 기억한다.
그래서, 다음과 같은 경우에 쓴다.
문제 모음
10816 - 숫자카드2
연속성을 가진 배열에서만 쓸 수 있지만, 그저 반복문을 이용해서 더한다면 시간복잡도가 O(N^2)인 알고리즘들을 O(n)으로 줄일 수 있는 강력한 알고리즘.
문제 모음
3273 - 두 수의 합
문제 모음
10025 - 게으른 백곰
데이터통신에서 가장 많이 쓰이는 지식은 OSI 7계층이나 IP계층과 MAC이라고 생각한다. AM이나 FM등 기본지식과 상용에서 쓰이는 FHSS 방식등은 통신학교 때 배운 지식으로 차근차근 작성하려 한다.
UDP-그리고-TCP
UDP는 비연결형 프로토콜로 데이터를 전달해주지만 데이터를 보낼 때 데이터의 전달 및 중복 방지가 보장되지 않는다.
TCP는 연결형 프로토콜로 데이터 전달시 3-way handshaking과정을 통해 연결을 설정하고 흐름제어 및 혼잡제어가 가능하다.
둘의 차이를 설명해 줄 땐
이 세가지를 위주로 설명하면 이해가 편하다.
개발자에게 가장 핫한 운영체제는 Windows, Mac, Linux(Unix)로 볼 수 있다.
가정집 컴퓨터에 있는 대표적인 운영체제는 Windows라고 단언할 수 있다. 편리한 GUI환경, 대부분의 상용 프로그램이 돌아가는 좋은 운영체제다. 하지만, 개발자에게 좋은 운영체제냐고 물어본다면 그건 아닐 수도 있다.
아닐수도 있는 이유는 무엇일까?
Windows Server는 라이센스료가 비싼 서버 중 하나다. 그리고 굳이 서버를 돌릴 정도의 개발자가 GUI환경이 필요하지 않은 점도 한 몫 할 것이다. 그런 이유로 사업가들은 대체로 서버를 돌릴 때, Linux를 선호하게 된다.
C, C++, Java언어를 배울 때, 소개 부분에 꼭 나오는 것이 컴파일러다.
Python같은 스크립트 언어들은 인터프리터를 사용하여 컴파일러에 대해 자세히 설명하진 않는다.
컴퓨터 그래픽하면 Canvas 밖에 잘 모른다. 이건 어떤 지식들이 있는건지 차근차근 잘 알아가야겠다.
서버개발자도 보안에 대해 민감할 수 밖에 없다. 클라이언트와 주고받는 데이터들은 보호되어야하며, 아무리 Post 방식을 이용한다한들 Packet을 뜯어 body을 본다면 데이터를 읽을 수 있다.
그래서 이 데이터를 읽지 못하게 AES256 방식을 사용하거나 암호화하면 해커들이 그 정보를 읽기 매우 어렵게 할 수 있다.
상용 데이터들은 특정 시간 이상만 버티면 되는 암호화의 특성상, 암호화를 살짝 알아두는 건 웹 개발자들에게 매우 유용하게 쓰일 수 있다.
역시 공부는 아무리해도 모자라서, 이렇게 공부를 정리해둔게 나중 큰 힘을 발휘하리라 믿는다.