본문 바로가기

분류 전체보기

Netty 서버(feat. 단일 스레드 이벤트 루프, 비동기,스프링은 비동기/Blocking..) 스프링 부트는 Spring [React] Web 사용 시, 톰캣이 아닌 Netty 서버를 자동으로 내장 서버로 등록을 한다. 이것은 [싱글 스레드 이벤트 루프 기능과] [비동기 기능]을 지원하는 서버이다. https://effectivesquid.tistory.com/65 Netty의 스레드 모델 Netty는 비동기 네트워크 프레임워크 입니다. 이번 글에서는 이 비동기 프레임워크가 어떻게 동작하는지 살펴 보겠습니다. Netty는 Channel에서 발생하는 이벤트들을 EventLoop가 처리하는 구조입니다. effectivesquid.tistory.com 자세한 내용은 위 사이트를 참조 (톰캣도 단일 스레드 이벤트 루프와 비공기 기능을 지원하지만, 스프링 부트가 자동으로 Netty 서버로 등록을 해버린다... 더보기
MongoDB의 장점(Feat. NoSQL...) Boar의 각 행이 누구의(어떤 user)의 데이터인지를 알기 위해서는 위와 같이 user 정보를 적어 주는 방법이 있다. 그러나 이 방법은 RDBMS의 [데이터 중복]을 최소화한다는 철학에 반한다. 그래서 FK를 이용하여 테이블들끼리 서로 참조하게 만든다. RDBMS의 장점 1. 데이터 중복 최소화 2. 데이터 변경 시, 해당 ROW만 변경하면 된다.(변경 용이) MongoDB와 같은 NoSQL은 컬렉션(List, 그중에서도 ArryaList 배열이라고 생각하면 됨)을 사용해서 저장을 한다. (Table 개념x,여담으로 MongoDB는 JavaScript로 만들어 져 있다.) (참고로, {id : 1, username : ssar, phone : 010-222}을 하나의 [JSON Object]라고 부.. 더보기
벨만-포드 알고리즘(가중치가 음수일 때의 최단경로) https://www.acmicpc.net/problem/1865 1865번: 웜홀 첫 번째 줄에는 테스트케이스의 개수 TC(1 ≤ TC ≤ 5)가 주어진다. 그리고 두 번째 줄부터 TC개의 테스트케이스가 차례로 주어지는데 각 테스트케이스의 첫 번째 줄에는 지점의 수 N(1 ≤ N ≤ 500), www.acmicpc.net import java.io.*; import java.util.*; // 벨만-포드에 대해서는 https://velog.io/@kimdukbae/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B2%A8%EB%A7%8C-%ED%8F%AC%EB%93%9C-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-Bellman-Ford-Algorithm .. 더보기
플로이드 - 워샬 알고리즘 https://www.acmicpc.net/problem/11404 [모든] 정점과 정점 사이의 최단 거리를 알고 싶을 때 사용 (시간 복잡도 O(N^3)으로 그렇게 성능이 좋지 않다) 11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net import java.io.*; import java.util.*; public class Main { private static int n,m; private static BufferedReader br = new BufferedReader(new InputStreamReader.. 더보기
0-1 BFS 특징 1. 가중치가 0과 1로만 이루어 져 있을 때에만 사용이 가능 2. 일반적인 큐가 아닌 데큐(Deque)를 사용해야 한다. 알고리즘의 핵심 포인트 1. 가중치 그래프이므로, 기존의 BFS로 최단 경로를 구할 때와 같이 [깊이]가 아닌, [가중치의 최소합]이 최단 경로의 길이가 된다. 2. 위 1의 [가중치의 최소합]을 구하기 위하여, a) 가중치의 합이 0인 경로... b) 가중치의 합이 1인 경로.. c) 가중치의 합이 2인 경로.. -> 가중치의 합이 0인 경로부터 시작하여 , +1씩하여 1인 경로를 탐색한다. 3. 데큐(Deque)로부터 removeFirst()를 한 노드가 target 노드이면 알고리즘 종료! 아래의 문제를 기준으로, 그림을 그려보았다. https://www.acmicpc.n.. 더보기
다익스트라 알고리즘 다익스트라 알고리즘은 최소 비용 신장 트리(MST)와는 달리 방향 그래프만 아니라, [무방향] 그래프에서도 적용이 가능하다. import java.io.*; import java.util.*; public class Main { private static final int INF = 10000; //다익스트라 최단 경로 // 1. 하나의 시작 정점을 두고, 다른 모든 정점을 목적지로 하여 최단 경로를 구하는 것이다 // -> 모든 정점을 시작점으로 두고, 다른 모든 정점까지의 최단 경로는 [플로이드-워샬] 알고리즘으로 구한다. // 2. 가중치가 있는 가중치 그래프를 전제로 한다.(가중치가 없으면, BFS로 최단 경로 구하면 됨) // -> 시작 노드에서 목적지 노드까지의 가중치의 합이 최소인 경로가 최.. 더보기
for:each문은 조회(read)만 가능(write 불가능) LinkedList queue = new LinkedList(); for(LinkedList queue:queues) // for:each 문은 조회(read)만 가능하다. queue = new LinkedList(); // 에러! 아래와 같이 수정을 해야 한다. for(int x = 0;x < queues.length;x++) queues[x] = new LinkedList(); 더보기
컬렉션 사용 시, equals(), hashCode() 오버라이딩 공식 https://incheol-jung.gitbook.io/docs/q-and-a/java/hashcode-equals hashCode()와 equals() - Incheol's TECH BLOG #define RUNTIME_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct, manageable, product_rw, lp64_product) \\ develop(bool, InlineObjectHash, true, \\ product(intx, hashCode, 5, \\ incheol-jung.gitbook.io 위 사이트 참조 더보기