728x90

분류 전체보기 166

Coding Interview - 1

Coding Interview - 1 문제 정수 배열 a 와 b 가 주어졌을때, a 와 b 에서 각각 하나씩 집은 뒤 더해서 v 를 만들 수 있으면 true 를 리턴하고, 아니면 false 를 리턴해라 ## CASE1 a = [1, 2, 3] b = [10, 20, 30, 40] v = 42 ## CASE2 a = [0,0,-5,30212] b = [-10, 40, -3, -9] Solution (Brute-Force) fun solution(a: IntArray, b: IntArray, v: Int): Boolean { for (firstNum in a) { val meetsCondition = v - firstNum for (secondNum in b) { if (meetsCondition == se..

Algorithm 2022.08.30

브라우저를 눌렀을때 발생하는 일

브라우저를 눌렀을때 발생하는 일 현재 우리는 여러 Application(Google Chrome, FireFox 등등) 을 통해서, 웹 싸이트를 쉽고 간단하게 돌아다닐 수 있다. 우리가 주소창에 www.google.com 을 입력했을때, 과연 어떤 일이 일어나게 될까? 기저 기반의 지식 해당 Process 를 이해하기 위해서는 우리가 알고있으면 좋은 여러가지 OSI 7 Layer, IP, MAC Address 등등 알면 좋은 컴퓨터 과학 지식들이 존재한다. 일단 이를 먼져 공부하고 알아보자. MAC Address 우리의 전자기기 장치에는 MAC Address 라는 고유한 ID 가 부여되어 있다. 이러한 고유한 ID 를 부여한 이유는 무엇일까? OSI 7 Layer 의 Data Link Layer 에서는 ..

CS 2022.08.28

HashTable vs Binary Search Tree

HashTable vs Binary Search Tree Criteria Binary Search Tree HashTable Time Complexity(Insertion / Deletion / Searching) O(nlogN) O(1) Sorted Order 데이터가 삽입시 부터 정렬되어 있음. 중위 순회를 하면 정렬된 데이터가 나옴. 데이터가 랜덤한 형태로 저장되어 있음(해시값 이용). 만약 Sort 하려면 추출해서 Sort 해야함 Hash Function X O(1) 시간에 수행하기 위해서는 적절하게 키를 생성해내는 Hash Function 이 필요 Collsion X 충돌 발생시 Chaining 이나, Open Address 방법을 이용 Input Data Size 딱히 Input Size 를 ..

Algorithm 2022.08.27

TDD 로 알고리즘 풀이

TDD 테스트 주도 개발 (Test Driven Development) 로 기능에 대한 테스트를 먼져 작성한 뒤 테스트가 통과할 수 있는 코드를 작성하는 것을 뜻한다. 예전에는 이러한 방법이 단순히 더 느리다고만 생각했는데, 요즘 드는 생각은 TDD 로 하는 방법이 일반 방법보다 때로는 빠를때도 많다는 것이 내 의견이다. 사람들이 TDD 책을 읽지 않고 단순히 테스트 먼져 적으면 되는거 아니야? 라고 해서 TDD 를 시작하게 되면 당연하게도 TDD 가 느리네 라고 생각할 수 밖에 없다. 그래서 켄트백과 최범균님의 책을 읽고나서 내가 느낀 경험을 바탕으로 TDD 를 하는 방법을 적어보려고 한다. Know-how 일단 켄트백의 TDD 책을 읽어보면 테스트를 쉽게 할 수 있는 작은 기능을 찾는게 가장 중요하다..

Algorithm 2022.08.22

Coroutine DeepDive - 1

Coroutine Deep Dive - 1 Purpose 이 게시글은 일단 코루틴을 사용하는데 좀 더 이해도를 높이기 위해 작성된 글이다. 대부분의 내용은 코루틴 라이브러리를 보고 작성되었으니, 어느정도 신뢰하여도 좋다. What is Coroutine? 코루틴은 일시중단이 가능한 연산의 인스턴스 이다. 여기서 인스턴스라는 말이 중요한데, 일단 이해하지 말고, 왜 인스턴스라고 하지? 라는 고민을 가지고 이 글을 읽어줬으면 한다. 밑에서 다 설명할 것이다. 일시 중단 된 지점으로 부터 후에 다시 재 실행될 수 있으며, 이때 특정 Thread 에 Bound 되어 있는 것이 아닌, 일시중단을한 Thread 와 다른 Thread 가 와서 작업을 재개할 수도 있다. Coroutine use cases Corout..

Kotlin 2022.08.18

JVM GC 정리

Java GC 정리 서론 Lazily Initialization 이 왜 Memory 상에서 유리한지? 이론적으로 설명하기는 쉽지만 실제로 이를 Monitoring 하는 도구로 수치를 보여주고, 이를 설명하기 위해서는 GC 를 다시 재 정리 할 필요가 있다고 느꼈다. 그래서 GC 를 재 정리 하려고 한다. Garbage Collection 이란? 일단 Garbage Collector 에 대해 알기 전에 Garbage Collection 에 대해 조금 알아보자. Garbage Collection 이란 runtime 에 사용하지 않는 객체의 메모리를 회수해 오는 것을 뜻한다. 보통 C 와 같이 Memory 를 managing 하는 언어에서는 이를 free() 와 같은 키워드를 이용하여 회수한다. 따라서 C 언..

Java 2022.08.17

WebFlux 에서 ResponseBody 에 Mono, Flux 를 사용하는 이유

최근 Reactive Programming 에 조금씩 관심을 기울여서 보고 있는데 강의를 보다가 하나 궁금한점이 생겼다. 아래 코드를 보면 Flux, Mono Type 으로 Return 하거나 RequestBody 에서 부터 받아서 사용하는데 이게 도대체 무슨차이지? 라는 생각이 들었다. Kotlin Coroutine 이나 JavaScript 의 Promise Model 을 공부하면서 느낀건 결국 Reactive 세상에서 가장 중요한건 아래의 두가지라는 생각이 들었다. Thread 의 Blocking 을 최소화 하는 코드를 작성해라. Lazily 하게 값이 evaluate 되어야 한다. 위의 두가지가 제일 중요하기에 Fully Non-Blocking 이라고 불리는 Web-Flux 에서 Response 에..

Spring 2022.08.11

CPS Style

CPS Style 들어가기에 앞서 이 글에서는 이를 이해하기 위해 알아야 할 기초 개념들을 내가 알고 있는 CS 지식으로 설명하려고 한다. 여담이지만, 이 글의 깊이가 사실 내가 컴퓨터를 이해하고 있는 깊이와 비슷하다고 생각해도 좋다.. 그래서 잘못된 부분이 있으면 피드백해주면 정말 고마울 것 같다. 틀린 내용이 있을 수도 있습니다. (틀린 내용이 있다면 댓글로 알려주세요~! FeedBack 은 언제든지 환영입니다.) 개인적으로 EventLoop 나 상세 구현체는 구현하지는 않았다. 개념을 설명하는데 구현하기에는 너무 어렵고 복잡성을 높일 수 있다고 판단했다. CPS Style? CPS Style 은 suspend 의 개념을 익히기 위해서 반드시 알아야 하는 개념 중 하나라고 생각한다. 일단 CPS 의 ..

Kotlin 2022.07.31

Bit Operation 간단 정리

Bit Operation CD 같은 곳을 자세히 보면 굴곡 같은게 져있음을 확인할 수 있는데, 이를 빛으로 확인해서 어떤 값이 저장되어 있는지 확인할 수 있다. 예를 들면 긴줄은 1, 짧은 줄은 0 이라 해서 어떤 값을 표현할 수 있다는 것이다. Integer Integer 값을 저장하기 위해서 Java 에서는 4 Byte 의 저장공간이 필요하고 이는 Bit 로 표현하면 32 bits 에 해당한다. Int i = 8 을 저장한다면 다음과 같이 저장될 것이다. 즉 Integer 가 표현할 수 있는 가짓수는 (0,1)^32 - 1 에 속하게 되므로 2^32 - 1 에 속한다. 즉 4,294,967,296 가짓수의 수가 표현 가능하다. 하지만 보통 음의 정수를 표현해야 하므로 맨앞의 비트를 부호 비트로 두게 ..

CS 2022.07.28
728x90