일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- programmers
- scala
- 스칼라
- OOM
- 동적프로그래밍
- Python
- redis
- dynamic programming
- DP
- docker
- codewars
- Java
- 파이썬
- 튜토리얼
- Linux
- boj
- 알고리즘
- HBase
- 리눅스
- go
- golang
- zookeeper
- 문제풀이
- 코드워
- Go언어
- 주키퍼
- gradle
- 프로그래머스
- 자바
- leetcode
- Today
- Total
목록전체 글 (111)
파이문
Zookeeper 주키퍼는 기본적으로 분산 시스템을 위한 코디네이터다. 주키퍼 주키퍼는 데이터를 디렉토리 구조로 관리하며 key-value 스토리지 처럼 key 로 접근 가능하다. 물론 value 를 사용하지 않아도 된다. 그럴 땐 임의로 "" 와 같이 빈 문자열을 넣어준다. 이러한 디렉토리 구조는 (당연하겠지만 tree 형태) 계층을 가지고 있고 각 데이터 노드를 znode 라고 부른다. 이러한 znode를 다루는 주키퍼 작업을 recipe 라고 부른다. 주키퍼의 쿼럼 주키퍼의 쿼럼은 적어도 하나의 앙상블 (서버군) 과 겹쳐야 하며 과반수가 넘어야 한다. 만약 서버가 5대라면 쿼럼은 3개여야 한다. 만약 5대의 앙상블 서버 들 중 2대만 쿼럼으로 지정한다면 아래와 같은 시나리오가 발생한다. 서버 s1,..
Split Brain 이란? 시스템의 두 부분 이상이 독립적으로 진행되어 시스템이 일관되지 않게 동작하는 것을 말한다. 분산 시스템에서 마스터-슬레이브 상태에서 네트워크 이상으로 인해 슬레이브는 마스터가 이상이 있다고 판단한다. 때로는 맞을 수도 있고 때로는 오탐일 수도 있다. 만약 잘못된 판단임에도 슬레이브 중 하나가 마스터로 선출이 되면 두 개의 마스터가 존재하게 된다. 이런 경우를 Split Brain 스플릿 브레인이라고 부른다.
Course Schedule 어떤 과목 A 가 주어질 때, 그 과목의 선수 과목 B가 존재하고 이를 [A, B] 라는 리스트로 표현합니다. 이처럼 과목과 그에 맞는 선수 과목의 리스트들이 존재할 때 주어진 목표는 해당 과목들을 모두 이수할 수 있는가? 에 관한 것입니다. 즉 [[A, B], [B, A]] 라고 문제에 주어진다면 A를 이수하기 위해선 먼저 B를 이수해야 하고 그 다음 값에선 B를 이수하기 위해선 A를 먼저 이수해야 합니다. 이럴 경우 A, B 둘 다 이수하지 못하므로 False 를 리턴하면 됩니다. 문제의 스토리는 이와 같은데 결국 해야 하는것은 방향성 그래프(Directed Graph) 에서 Cycle 을 찾는 문제입니다. 방향성 그래프에서 사이클을 찾는 방법은 DFS 와 BFS 가 있고..
주키퍼 standalone 모드 실행 삽질 (어떤 앙상블도 없음) 설치 버젼은 주키퍼 3.5.5 였고 1. 압축 파일을 풀어 zkCli.sh 를 실행 1.1 메인클래스 ZookeeperMain 을 찾을 수 없다 한다. 주키퍼 서버를 실행 안해서 그런건가 싶어서 (주키퍼 알못) 2. zkServer.sh 를 실행을 하였지만 아무런 에러도 없이 FAILED 가 떴다. 2.2 그래서 zkServer.sh start-foreground 로 실행하니 메인 클래스 org.apache.zookeeper.server.quorum.QuorumPeerMain 를 찾을 수 없습니다. 와 같은 에러가 나왔다. 3. 인터넷에서 찾아보니 apache-zookeeper-3.5.5.tar.gz 대신 apache-zookeeper-3..
Longest Substring Without Repeating Characters 주어진 문자열에서 중복 없는, 연속된 문자열을 만들 때 가장 긴 문자열의 길이를 리턴하는 문제입니다. medium 문제이지만, 크게 어렵지 않은 구현 문제입니다. 2중 for loop로 풀어보진 않았지만, 솔루션에 따르면 전부 다 탐색 해도 (brute-force) 풀수 있게 되어 있다고 합니다. 즉, 주어진 문자열을 다 순회하여서 중복이 있는지 없는지 확인해보며, 현재 길이가 가장 길게 갱신하면 됩니다. (하단 LeetCode solution 참조) public class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(); int ..
Add Two Numbers (https://leetcode.com/problems/add-two-numbers/) 두 개의 리스트 노드를 입력 받아, 각 리스트 노드의 값을 더한 새로운 리스트 노드를 생성하는 문제입니다. 일반적으로 생각할 때 단순히 두 개의 리스트 노드를 순회하면서 진행하면 될 것 같지만, 더할 때 10을 넘어가면 일반 덧셈 처럼 뒤 값에 해당 몫을 더해주어야 합니다. Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807. 위와 같은 예에서 가장 마지막 노드의 값이 7이 아닌 8인 이유도 그때문입니다. (Explanation 에서 설명하는 덧셈 로직과 같습니다.) 알고리즘 이라기 보다는..
맥에서 brew로 뭔가를 하는데 아래와 같이 에러가 떴다. Error: /usr/local is not writable. You should change the ownership and permissions of /usr/local back to your user account: sudo chown -R $(whoami) /usr/loca 그러면 아래 처럼 셸에서 사용하면 된다. /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 출처 https://github.com/Homebrew/brew/issues/3285
데이터 분산 방법에는 크게 두 가지가 있다. 바로 복제(replication) 와 샤딩(sharding) 이다. 복제(replication) 복제는 같은 데이터를 복사해 여러 노드에 분산하는 방법이다. 복제에는 크게 마스터-슬레이브 (master-slave) 와 peer-to-peer 두 가지 방법이 있다. 마스터-슬레이브 마스터-슬레이브의 경우 여러 노드에 데이터를 복제하여 사용하는 방법이다. 이 때 노드를 마스터 노드와 슬레이브 노드라고 부르며, 모든 쓰기는 마스터에서 행하고 읽기는 마스터나 슬레이브에서 처리 된다. 쓰기가 실행 될 경우, 데이터는 마스터에서 슬레이브로 복제된다. 읽기를 마스터 노드와 슬레이브 노드에서 처리하므로, 읽기가 많이 발생하는 작업에서 성능 효과를 얻게 된다. (더 많은 읽기..
xn-- 과 같이 시작하는 URL 을 사람이 볼 수 있는 문자로 변경하기 URL 가지고 놀다 보면 xn-- 으로 시작하는 문자를 볼 수 있다. 이를 punycode 라고 하는데 알아 보기가 힘들어서 파이썬으로 간단하게 사람이 볼 수 있는 (human readable) 문자로 변경 가능한 예제를 작성하였다. 아래 처럼 idna 로 decode 하면 된다. 그 전에 해당 문자열은 반드시 punycode 여야 하므로 netloc 만 따로 떼서 진행해야 한다. from urllib.parse import urlparse def get_human_readable_text(org): url = urlparse(org) if url.scheme != "": return url.netloc.encode("utf8")...