본문 바로가기

CS 이론12

Thread Pool에 적합한 Thread의 개수는 몇 개 일까? Thread가 많다고 무조건 좋지는 않다 일반적으로 1개의 요청에 1개의 Thread를 사용하는 Spring 같은 Framework를 사용한다면 Thread를 최대한 많이 할당하고 싶은 충동을 느낄 수 있습니다. 하지만 Thread는 논리적 단위라는 걸 기억해야 합니다. 결국 Thread가 돌아가는건 Process 위에서 결국 Process가 돌아가는 CPU Core 위에서 Thread를 실제로 실행하는 주체를 고려하지 않고 무작정 Thread 개수를 늘리기만 하면 Context Switching으로 인한 Overhead만 증가합니다. Core의 개수만큼 Thread? CPU-Bound한 작업이 대부분이라고 가정할 때, CPU 개수 만큼의 Thread를 두는게 좋습니다. 결국 Thread를 실행하는건 C.. 2023. 12. 25.
동적 계획법(Dynamic Programming) 알아보기 똑같은 계산을 계속 반복해야 하는 알고리즘에서 계산 값을 저장해 둬서 반복하지 않게 하는 방법 동적 계획법이라는 이름은 아마 정적으로 계획없이 똑같은 계산을 반복하는게 아니라 동적(적극적)으로 계획해서 계산을 줄이는 방법이라 그렇지 않을까 개인적으로 추측해 봅니다. 동적 계획법을 쓰던 안 쓰던, 정확성은 Brute-Force와 차이가 없습니다. 하지만, 훨씬 더 효율적입니다. 예시 : 피보나치 수열 구하기 피보나치 수열은 1, 1 부터 시작해서 그 전 2개의 항을 더한게 n번째 항인 수열입니다. 이 정의를 그대로 코드로 구현하면 아래와 같습니다. fun fibo(n: Int): Int { if (n 2023. 4. 15.
코딩 테스트에서 최대공약수(GCD), 최소공배수(LCM) 유클리드 알고리즘으로 구하기 코딩 테스트를 풀다 보면 의외로 최대 공약수, 최소 공배수를 구해야 할 일이 많습니다. 직접적으로 최대 공약수 / 최소 공배수를 구하라고 하는 문제도 있지만, 아래의 문제는 모두 간접적으로 최대 공약수 / 최소 공배수를 구해 푸는 문제들입니다. 기약 분수로 만들기 n개로 나눌때 모든 사람이 같은 개수를 가질 수 있게 하기 무식하게 최대 공약수 구해보기 두 수의 약수를 모두 구한다 공통된 약수만 남긴다 거기서 가장 큰 수가 최대 공약수! 최소 공배수는 최대 공약수만 구하면 자동으로 최소 공배수의 의미가 뭘까요? x, y의 최소 공배수라 하면, x, y 모두와 나누어 떨어지는 가장 작은 수 즉, 만약 아래와 같이 x, y가 이루어져 있다면 x, y의 최소 공배수는 a, b, c 3개의 숫자로 모두 나누어 .. 2023. 4. 7.
코딩 테스트 속도 높이기 : 내가 자주 쓰는 Java 문법 설탕(Syntax Sugar) 총정리 문법 설탕이 뭐야? 말하는건 똑같아도 짜증나게 말하는 사람이 있고, 듣기 좋게 말하는 사람이 있듯, 코드도 하는건 똑같아도 읽기 쉬운 코드가 있고 읽기 힘든 코드가 있습니다. 문법 설탕은 꼭 써야 하는건 아니지만 2가지 장점이 있어 알아두면 좋습니다. 1. 더 읽기 쉬운 코드를 쓸 수 있습니다. 2. 자주 쓰는 기능을 내가 직접 구현하지 않고 내장함수를 써 더 빠른 코딩이 가능합니다. 어떻게 활용할까? 우선, 문법 설탕이 아무리 코딩을 빠르게 해 주고 읽기 쉬운 코드를 만들어 준다고 해서 영어 단어 외우듯 외울 필요는 없다고 생각합니다. 대신, 저는 많이 써 보면 자연스럽게 적재적소에 활용할 수 있게 됐습니다. 자연스럽게 활용하기 위해 추천하는건 항상 코딩 테스트나 코드를 작성하고 리팩토링(Refacto.. 2022. 12. 14.
클라우드가 뭘까? IaaS, PaaS, SaaS 이건 또 뭘까? 아마존, 마이크로소프트, 구글까지. 미국의 빅테크 기업들이 클라우드 사업에 집중하고 있습니다. 클라우드가 뭐고, 뭐가 그렇게 좋길래 그럴까요? 이 외계어 같은 IaaS, PaaS, SaaS는 뭘까요? 클라우드(Cloud)가 뭔지 간단히 서버라는 말은 우리 일상생활 속에서도 많이 사용됩니다. 근데 서버가 정확히 뭘까요? 서버는 역할의 개념입니다. 서버는 우리가 쓰는 컴퓨터, 스마트폰과 크게 다르지 않습니다. 하지만 서버는 서빙(제공하는) 역할을 하는 컴퓨터를 말합니다. 우리가 웹 사이트에 접속하면 서버한테 웹 사이트 내용을 달라고 요구합니다. 문제는, 매우 많은 사람이 동시에 서버에 요청을 한다는 겁니다. 그래서 서버는 우리가 아는 컴퓨터보다 크고, 많고, 빠릅니다. 당연히 이런 서버를 관리하는건 돈도 많.. 2022. 10. 28.
인터넷을 이해해 보자 : OSI 7 계층? TCP/IP 4계층? 인터넷은 어떻게 동작할까요? 인터넷은 현대사회를 이루는 가장 핵심적인 기술이고, 우리의 문화와 삶을 바꿨지만 사실 본질은 매우 간단합니다. 곰곰이 생각해보면, 우리가 인터넷에서 하는 모든 일은 누군가가 다른 컴퓨터에 올려놓은 데이터를 보는 일입니다. 넷플릭스는 누군가가 넷플릭스 컴퓨터(서버)에 올려놓은 동영상을 보는 것이고, 구글은 누군가가 구글의 컴퓨터(서버)에 올려놓은 정보들의 묶음을 보는 것입니다. 근데 이상하다고 느끼실 수도 있습니다. 넷플릭스, 구글은 미국 회사인데, 한국이 미국과 연결되어 있다고? 그렇습니다. 전 세계 바다에는 해저케이블이라고 하는 케이블이 있고, 이 케이블은 전 세계에 있는 컴퓨터를 연결하고 있습니다. 해저케이블이 어디에서 어디로 연결되어 있는지 궁금하시다면 아래 링크에서 확.. 2022. 10. 27.
스텐포드 (Stanford) 대학교 컴공과는 어떤걸 배울까? 총 정리! 전공 필수 어느 대학이나 전공 필수라고 불리는, 그 전공이라면 반드시 들어야 하는 과목이 있습니다. 스텐포드 대학에서는 총 6개의 과목을 들어야 합니다. Systems CS106 Programming Abstraction - C++를 활용한 기초적인 컴퓨터 공학 지식(데이터 구조, 알고리즘, 프로그래밍 방법론 등 ) CS107 Computer Organization and Systems - UNIX 상에서 하드웨어에서 소프트웨어로의 구조 CS110 Principles of Computer Systems - 큰 스케일의 시스템 만들기(프로세스, 파일 시스템, 네트워킹) Theory CS103 Mathematical Foundations of Computing - 컴퓨터 과학을 공부하기 위해 필요한 수학 지.. 2022. 3. 2.
가변 배열(Dynamic Array), 리스트(List) 가변 배열(Dynamic Array), 혹은 리스트(List)는, 가장 기초적인 자료구조라 할 수 있는 배열을 개조해서 크기가 자동으로 조절되게 만든 자료구조입니다. 배열은 처음에 크기를 고정해야 합니다. 여러가지 이유가 있지만, 가장 큰 이유는 속도 때문입니다. 하지만 현실의 프로그래밍에서는 크기를 미리 정해두면 불편함이 많아서, 자동으로 크기가 조절되는 배열이 매우 유용합니다. 가변배열의 정의, 추상자료형 가변 배열 (리스트)은 말 그대로 크기가 변할 수 있는 배열입니다. 하지만 크기가 변한다는 것 이외에는 일반적인 배열과 똑같습니다. 우선, 가변 배열에 필요한 매소드가 어떤 것이 있을지 생각해 보면 좋을거 같습니다. 우선 가변 배열은 외부적으로는 크기가 정해져 있지 않고 유연하게 늘어나는 것 처럼 .. 2021. 5. 28.
모든 자료구조는 배열(Array)로 통한다 배열은 거의 대부분의 프로그래밍 언어가 가지고 있고, 많은 자료구조의 기초가 되는 중요하고 기본적인 자료구조이다. 배열은 프로그래밍을 조금이라도 한 사람이라면 이미 익숙한 경우가 많겠지만, 자료구조의 관점에서 다시 한번 배열을 들여다보자. 배열의 정의 배열은 데이터와 인덱스가 대응되도록 한 자료구조이다. 배열은 크기가 정해져 있고, 배열의 인덱스는 일반적으로 0에서 시작한다. 배열은 사실상 가장 간단한 자료구조 중에 하나이다. 배열은 단순히 데이터를 정해진 개수만큼 순서대로 배치한 것이기 때문에 이보다 더 간단하게 데이터를 배치할 방법은 없다. 하지만, 그만큼 제한이 많은 데이터 구조 중에 하나이다. 우선, 크기가 정해져 있기 때문에 정해진 크기가 다 차면 더 이상 데이터를 추가할 수 없고, 또 중간에 .. 2021. 5. 24.