전체 글
-
주니어 개발자의 2020년 회고ETC 2021. 1. 4. 15:28
벌써 2020년이 빠르게 지나갔다. 다니던 스타트업을 그만 두고 3월부터 본격적으로 취준을 시작해서, 입사까지 딱 1년이 걸린 것 같다. 이런저런 일도 많고 다양한 선택의 기로에서 비록 후회 없는 선택을 하는것은 매우 힘든 일이었지만, 어쨌든 하나의 경험이니 기록으로 2020 a to z를 남기고자 한다. 취업 준비 인생에 있어서 가장 큰 변화를 가져온 선택이었다. 기존에 다니고 있던 스타트업을 아예 퇴사하고 0부터 시작하는 마음으로 취업 준비를 시작했기 때문이다. 서울이 연고지가 아니었을 뿐더러 일정한 소득이 없이 준비를 해야한다는 불안감도 있었고, 언제 다시 취업할지 모른다는 가장 큰 두려움이 존재했다. 이후 퇴사(1월 말) 정확히 1주일 뒤에 코로나가 심각하게 확산되어 상반기에 꽤나 피눈물을 흘렸던..
-
Java StringDevelop/Java 2020. 11. 13. 08:41
String 문자열의 생성 일반 객체를 생성할 경우 ⇒ new 키워드를 사용한다. String은 new가 없어도 바로 값 할당이 가능하다. 이를 문자열 리터럴이라고 한다. new 연산자는 생성된 값을 heap에 할당하고, 리터럴 연산자는 String Constant Pool에 할당한다. Java7부터는 Heap으로 할당한다. 이전에는 Perm 영역에 Constant Pool이 존재했다. Java 8부터 Perm영역이 삭제되었다. Heap은 GC의 대상이라, 참조를 잃을 경우 다시 메모리로 반환된다. String 1 = "aaa"; String 2 = "aaa"; //1과 2는 String constant pool 내의 같은 객체를 참조한다. String 3 = new String("aaa"); Strin..
-
Kafka Cluster TutorialDevelop 2020. 11. 11. 13:58
kafka-cluster-tutorial Create simple kafka cluster easily! Download Apache Kafka my version is 2.12-2.3.0 Start Server Before start kafka, we need to start zookeeper first. config files #zookeeper / kafka config files $ vi config/zookeeper.properties $ vi config/server.properties start zookeeper & kafka $ bin/zookeeper-server-start.sh $ bin/kafka-server-start.sh you can see messages {: width="10..
-
Redis Cluster TutorialDevelop 2020. 11. 11. 13:57
Redis-cluster-tutorial Redis (REmote Dictionary Server)? 메모리 기반의 key-value 구조로, data를 관리하는 시스템이다. read / write가 빠르다는 장점을 가지고 있으며, Memcached와 유사한 구조를 가지고 있다. Memchached의 특징 처리 속도가 빠르다. Data는 Memory에만 저장된다. Cache이므로, 만료일을 지정하여 그 이후에는 자동으로 Data가 사라진다. LRU(Least Recently Used)알고리즘으로, 저장소 메모리를 재사용한다. → Redis는 Disk에도 저장되어 데이터 복구가 가능하고, 메모리를 재사용하지 않고 명시적으로 Data를 제거하여 사용한다. 또한, 다양한 자료구조 (String, List, S..
-
Call By Value / Call By ReferenceComputer Science 2020. 11. 11. 13:56
[Programming] Call By Value / Call By Reference 면접에서 단골 질문으로 등장하는 문항이었다. 대충 알고 있다고 생각 했지만, 정확히 코드를 작성하고 설명하는데에 어려움이 있음을 느껴 업데이트 한다. Call by value : 값에 의한 호출. 함수가 호출될 때, 메모리 공간 간에서는 함수를 위한 별도의 임시 공간이 생성된다. (종료 시 사라짐) 함수 호출 시 → 전달 되는 변수 값을 복사해서 → 함수 인자로 전달한다. 복사된 인자는 함수 안에서 지역적으로 사용되기 때문에, local value 속성을 가진다. 따라서 함수 안에서 인자 값의 변경이 일어나도, 외부 변수 값은 변경되지 않는다. void func(int n){ n = 20; } void main(){ i..
-
CacheComputer Science/Operating System 2020. 11. 11. 13:55
[OS] Cache Processor가 아무리 빨라도, 메무리가 느리면 효율이 떨어진다. 이를 개선하기 위해 캐시를 사용한다. 캐시에 자주 사용하는 Data를 담아두고, 필요시 processor가 메인 메모리 대신 캐시로 접근해서 처리 속도를 높인다. Principle of Locality 자주 사용하는 것에 대한 판단 기준은 시간 지역성과 공간 지역성이 존재한다. 시간 지역성 : 최근 접근한 data에 다시 접근한다. 공간 지역성 : 최근 접근한 data의 주변 공간에 다시 접근한다. Cache의 종류 L1 Cache Instruction cache : 메모리의 text 영역을 다룬다. data cache : text 영역을 제외한 모든 data를 다룬다. L2 Cache : 용량이 큰 캐시 L3 Ca..
-
Prim AlgorithmAlgorithm 2020. 11. 11. 13:54
[Algorithm] Prim Algorithm Kruskal과의 차이 : 프림 알고리즘은 한 정점을 기점으로 확장한다. (kruskal은 간선의 가중치 중심) Time Complexity pq에 간선은 각각 1번씩 삽입/삭제된다. O(ElogE) / Insert : O(logE) , Delete : O(logE) Flow 하나의 정점을 선택하여 최소 신장 트리에 추가한다. 최소 신장 트리에 포함된 정점과 최소 신장 트리에 포함되지 않은 정점을 연결하는 간선 중, 비용이 가장 작은것을 최소 신장 트리에 추가한다. ⇒ 해당 간선의 최소 신장 트리에 포함되지 않은 정점도 추가한다. 간선이 V-1개가 될 때까지 2를 반복한다. Implementation : 프림 알고리즘은 Heap으로 구현해야 Time Com..
-
Kruskal AlgorithmAlgorithm 2020. 11. 11. 13:54
[Algorithm] Kruskal Algorithm greedy하게 최소 신장트리를 구성한다. Greedy? 그 당시 순간에 최적의 선택을 하는것. 전체적인 관점으로 최종 결정이 최종이라는 보장은 없다. Time Complexity O(ElogE) : 간선 E개를 퀵정렬같은 알고리즘으로 정렬할 경우 신장트리 주어진 방향성이 없는 그래프의 subgraph들 중에서 모든 정점을 포함하는 트리. 조건 모든 정점을 포함한다. 트리구조이다. ( 사이클이 없고, 연결된 그래프이다. 그래프의 정점이 V개일때, 간선은 V-1개이다 ) SubGraph : 주어진 그래프에서 일부 정점과 간선만을 선택해서 만든 새로운 그래프. 최소 신장 트리 : 간선의 합이 최소인 트리 ( 동일한 그래프에서 여러가지로 나타낼 수 있다.)..