목록분류 전체보기 (271)
DHistory
OverviewGarbage Collector는 사용하지 않는 자원의 메모리를 해제하여 프로그램 메모리를 확보합니다.GC(Garbage Collection)를 하게 되면 GC 관련 Thread을 제외한 모든 Thread를 멈춥니다.이를 Stop The World(STW) 라고 합니다. GC의 동작 과정Mark & Sweep Algorithm을 사용하여 어느 곳에서도 참조하고 있지 않는 객체를 GC 대상으로 선정하여 제거합니다. Mark: Root Space(Stack, Method Aread, Native Method Stack)에서 참조하는 객체를 마킹합니다.Sweep: 마킹되지 않은 객체를 Heap에서 제거합니다.Compact: 분산된 객체를 Heap의 시작 주소로 모아 메모리가 할당된 부분과 할당되..
개요대용량 데이터 검색을 진행함에 있어 ElasticSearch, MySQL FullText, MySQL Like의 성능을 비교를 했습니다.검색을 진행한 조건은 다음과 같습니다. 1. "abc" 로 시작하는 단어가 포함된 경우 → "def abcd gcf"2. "abc" 문자가 포함된 경우 → "def dabc gcf" Performance 비교는 hey를 활용하였습니다. Table Schema현재 데이터 건수는 275,684건이며 title에 index / fulltext 가 정의되어있습니다.Create Table: CREATE TABLE `post` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '(AI) ID', `title` varchar(100) COL..
개요SNS NewsFeed 조회 시 팔로잉 유저들의 최신 게시글을 조회해야합니다.팔로잉한 유저의 수가 1800명이고 각 유저들이 1000개씩 글을 작성했다고 가정합니다.게시글의 전체 데이터 개수는 1,800,000 건입니다. 팔로잉한 유저들의 게시글 중 최근 100개의 게시글을 조회를 진행해보겠습니다. 일반 쿼리 조회 구현 시 피드 목록 조회 시 비용이 비싼 쿼리를 조회해야합니다.(Post의 Dummy Data를 대규모 데이터로 넣기 위해선 시간이 오래 걸리므로 비싼 쿼리로 만들어 진행)@Service@RequiredArgsConstructorpublic class FeedService { private final PostRepository postRepository; private fina..
OverviewJIT Compiler는 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법입니다.처음 실행 시 interpret를 하면서 자주 쓰이는 코드를 캐시에 담아두었다가 재사용합니다.Runtime 시 적용되는 기술이며 interpret과 compile을 혼합하여 사용합니다.→ 처음 실행 시 interpret하면서 실행→ 다음 실행 시 캐싱된 기계어 파일을 읽음 (like compile) Interpret vs Static CompileInterpret: 실행 중인 프로그램 코드를 읽어가면서 기계어로 번역Static Compile: 실행하기 전에 프로그램 코드를 기계어로 번역 Java에서는 어떻게 사용할까? Compiler는 .java 파일을 .class 파일(bytecode)로 변..
문제https://www.acmicpc.net/problem/24481 풀이1. 시작점으로 부터 모든 노드의 깊이(depth)를 구하는 문제2. 깊이는 현재 노드의 깊이 + 1 예시5 4 11 22 33 42 5 코드import syssys.setrecursionlimit(130000)n, m, r = map(int, sys.stdin.readline().rstrip().split())edges = [[] for _ in range(n + 1)]visited = [-1] * (n + 1)for _ in range(m): x, y = map(int, sys.stdin.readline().rstrip().split()) edges[x].append(y) edges[y].append(x)fo..
문제https://www.acmicpc.net/problem/12933 풀이한 마리의 오리가 여러 번 소리를 낼 수 있습니다.녹음 중에서 여러 번 소리를 낸 오리를 찾아야합니다. 단, 녹음이 올바르지 않은 경우도 있습니다.1) q 로 시작하지 않는 경우2) k 로 끝나지 않는 경우3) 5의 배수가 아닌 경우 이 경우를 제외하고는 녹음이 제대로 되었습니다.방문하지 않은 문자열을 순차적으로 방문하여 울음 소리(quack)를 찾습니다. 예시 녹음: quqaquuacakcqckkuaquckqauckack오리 1: ____q_u__a___ck_______________오리 2: __q__u_ac_k_q___ua__ckq_u__ack오리 3: qu_a_______c___k__qu___a_ck___ 코드impor..
문제https://www.acmicpc.net/problem/1793 풀이문제가 상당히 이상하니 추가 조건을 확인 후 풀어야합니다. [추가 조건]1. n이 0인 경우 1 출력2. 1x2도 사용 가능 예제n이 1인 경우1x2 1개 n이 2인 경우2x2 1개, 2x1 2개, 1x2 2개 코드import sysd = [0] * (250 + 1)d[0] = 1d[1] = 1for i in range(2, 251): d[i] = 2 * d[i - 2] + d[i - 1]while True: try: n = int(sys.stdin.readline().rstrip()) print(d[n]) except: break
문제https://www.acmicpc.net/problem/9658 풀이d[n]: 돌의 수가 n 개인 경우 우승자상근이가 먼저 시작하기 때문에 "한 번"이라도 창영이가 마지막 돌을 가져가게 된다면 상근이의 승리 예시d[1] = 1 (상근 마지막돌, 창영 승)d[2] = 1 1 (창영 마지막돌, 상근 승)d[3] = 1 1 1 (상근 마지막돌, 창영 승) 3 (상근 마지막돌, 창영 승)d[4] = 1 3 (창영 마지막돌, 상근 승) 3 1 (창영 마지막돌, 상근 승) 4 (상근 마지막돌, 창영 승) 코드import sysn = int(sys.stdin.readline().rstrip())d = [False] * (n + 5)# Fa..
문제https://www.acmicpc.net/problem/1254 풀이1. 이미 팰린드롬인 경우 해당 문자열의 길이가 최소2. 앞에서 부터 하나씩 거꾸로 붙여나가며 팰린드롬 문자열 확인 예시abcd 코드import systext = sys.stdin.readline().rstrip()def palindrome(text): if text == text[::-1]: return len(text) for i in range(len(text)): temp_text = text + text[:i + 1][::-1] if temp_text == temp_text[::-1]: return len(text) + i + 1 # 무의미 ..
문제https://www.acmicpc.net/problem/17086 풀이1. 상어 주변은 미리 제외해야 함. : 재탐색을 진행하면 안되기 때문에 미리 주변을 제외해야한다. (핵심: 주변을 미리 제외하려면 Queue에 미리 넣어서 BFS 탐색을 진행)2. 상어로부터 먼 거리 확인 예시5 40 0 1 00 0 0 01 0 0 00 0 0 00 0 0 1 # 미리 제외0 2 1 22 2 2 21 2 0 02 2 2 20 0 2 1# 이후 채워지지 않은 거리 채우기3 2 1 22 2 2 21 2 3 32 2 2 23 3 2 1 코드import sysfrom collections import dequen, m = map(int, sys.stdin.readline().rstrip().split())sha..