전체 글

주로 개발에 대한 이야기들 Spring Kotlin k8s DB
동기화와 비동기화 - 동기화 방식은 한 자원에 대해 동시에 접근하는 것을 제한하는 방식이다. - 다시말해서, 순서를 지키겠다는 말이다. - 비동기화 방식은 한 자원에 대해 동시에 접근이 가능하다 동기화 - System Call이 끝날 때까지 다른 쓰레드의 접근을 막아버리는 것이다. - 한마디로, nextLine()에서 입력을 받을 때까지 대기하는 것과 같다. 비동기화 - System Call이 왔든 말든 상관없이 계속 호출할 수 있다. - Call Back 함수를 통해 결과를 가져온다! * 동기화의 차이? - 결과물을 가져오는 시점이 달라진다!!! Java의 Synchronized 키워드 - 한마디로 Java에서의 멀티 쓰레드에서의 접근을 막는다!! 입니다. 1 2 3 4 5 6 7 8 9 10 11 1..
이론? 현업? - 학사 과정에서 배우는 코딩은 정말 구현 위주의 수업이다. - 이것이 항상 전부라는 생각하는 개발자들이 많고 나 또한 그렇게 생각해왔다. ** 그냥 돌아가기만 하고, 서비스만 되면 되는거 아니에요???? * 정말 그게 그럴까? - 처음부터 완벽하게 짜면 좋지만, 그런 사람은 거의 없기에 - 대.다.수 의 코드가 수정작업에 들어간다. - 만약, 급한일이 생겨서 다른 부서로 옮기거나, 동료 개발자가 그 코드를 고치는 일이 생긴다면? - 코드를 읽을 수 없다....... @-@ - 눈으로 디버깅으로 능한 정도가 아니면 절대 불가능하다. 우리는 좀 더 정성껏 작성할 필요가 있다 - 원활한 코드 커뮤니케이션(?)을 위하여 이미 정해진 규칙이 있다. - Java Code Convention - 정말..
JVM? - JVM : Java Virtual Machine, 자바 가상 머신 - 어떤 OS에서 동작할 수 있다는 이식성이 있으며, 스택기반으로 이루어져 있다! JVM은 다음과 같은 2가지 기능을 제공한다. ① 메모리 관리 ② Garbage Collection Why JVM? - Java 프로그램을 설계할 때, 알 수 없는 버그나 오류가 발생한 경우 빠른 디버깅을 위해 - 프로그래머가 동작과정을 숙지하고 있어야 한다 JVM 구조 Class Loader - 클래스 로더, Runtime시에 동적으로 클래스를 로드하여 링크를 통해 배치하는 작업을 수행하는 역할! - Java는 컴파일 타임에 클래스를 참조하는게 아니라 Runtime에 참조한다!! Execution Engine - Class Loader가 Run..
Insertion Sort? - 가장 기본적인 정렬방법 중(Bubble Sort, Selection Sort)와 같이 시간복잡도 O(N^2)를 가진다. - 안정적인 정렬 방법이다. - 최선의 경우 O(N), 최악의 경우 O(N^2)이다. - N의 크기가 작을수록 O(N^2)의 정렬 방법이 효율이 좋다 * Why ? - Quick, Merge의 경우 Function Call 에 들어가는 비용이 더 커지므로! 시간복잡도에 대한 고찰 - 최선의 경우 : 주어진 key값에 대하여 한번만 비교하고 끝날 때!!!! ( 땡기는 작업 X ) - 최악의 경우 : 주어진 key값에 대하여 모든 원소를 비교해야 할 때!! 정렬 순서 1. 0번째 index는 제외하고, 1번째부터 index를 시작한다! 2. 해당 범위내에 마..
QuickSort? - 말 그대로 빠른 정렬이다. - 퀵 소트는 평균적인 시간복잡도는 O(NlogN), 최악의 경우 O(N^2) 이다. - 따로 메모리를 저장하여 정렬하지 않아서 공간복잡도는 O(1)이다! - 이러한 불규칙적 성질 때문에 불안정 정렬이라 한다. - 일단 이론이 굉장히 어려우므로 바로 설명을 가보도록 하자 과정 1. 리스트 안에 있는 한 요소(pivot)를 고르자! 2. pivot을 기준으로 큰 값은 오른쪽, 작은 값은 왼쪽으로 정렬하자~! 3. pivot의 왼쪽 부분과 오른쪽 부분을 다시 재귀로 정렬하자! 4. 단 리스트의 크기가 0, 혹은 pivot 자신만 있을 때 (1) 이면 하지 않는다! Quick 정렬에 대한 고찰 - 파티션을 나누는 과정이 MergeSort와 동일하게 2분할이다...
MergeSort? - 대표적인 분할정복 정렬 알고리즘 중의 하나 cf> 분할정복(Divide And Conquer) ? : 문제를 작은 2개의 문제로 분리하여, 해결하고 결과를 합치는 전략이다. - 메모리를 잡아먹는 특징 때문에, 안정성이 많이 보장되는 정렬 알고리즘이다. - 시간복잡도는 O(NlogN), 공간복잡도는 O(N) 이다. ++ 배열을 1개로 될 때까지 각각을 n/2로 줄이니 당연히 logN 이다. ++ 합칠 때는 총 N번의 비교연산이 들어가므로 N*logN 이 되는 시간복잡도이다! - 보통 정렬의 공간복잡도는 O(1)인데, 병합정렬의 경우 복사할 배열이 새로 필요하다! 언제 써야될까? 1. 많은 데이터를 정렬할 때, 여분의 메모리가 충분할 때! 2. 반대로, 많은 데이터를 정렬하고 싶은데 ..
huisam
천천히 올바르게