일반적인 이분탐색은 비내림차순, 비오름차순 으로 정렬된 상태가 아니고,아래와 같이 공통된 값 없이 하나씩만 존재하는 경우이다. 이분탐색에 필요한 left, right값을 아래와 같이 정의하고,left = -1 (배열을 벗어난 가장 왼쪽에 가까운 값)과right = n (배열을 벗어난 가장 오른쪽에 가까운 값) while문은 left +1 = right 가 되는 시점에 멈추게 되고, left는 항상 target보다 작은 값 중 최대 값을 가리킴right는 항상 target 이상인 값 중 최소 값을 가리킴이므로, 최종적인 right값을 반환한다. int left = -1;int right = n;binarysearch(left, right);public static int binarysearch(int ..
메모리 구조목차메모리 구조메모리코드 영역데이터 영역힙 영역스택 영역오버플로우JVM 런타임 데이터 영역pc 레지스터네이티브 메서드 스택스택 영역메서드 영역힙 영역 (java 7이전 vs java8이후)정리메모리 구조위 그림과 같이, 프로그램이 실행되기 위해서 운영체제(OS)가 프로그램의 정보를 메모리에 로드해야 한다.그래야 메모리에 올라온 명령어와 데이터들을 CPU가 처리할 수 있다.할당받은 대표적인 메모리 공간은 코드영역, 데이터 영역, 힙 영역, 스택 영역 으로 구성되어 있다. 🧐 그렇다면, 왜 이렇게 메모리 공간은 체계적으로 나뉘어져 있을까?많은 이유와 이점이 있는데, 추려보았다.CPU가 메모리에 빠르게 접근하고, 프로그램이 효율적으로 실행되도록 한다.한 프로그램이 다른 프로그램의 메모리를 침범하면..
유니온 파인드유니온 파인드에 대해 간단히 설명하면, Union: 서로 다른 두 개의 집합을 하나의 집합으로 병합하는 연산을 말한다. 이 자료구조에서는 상호 배타적 집합만을 다루므로 Union 연산은 합집한 연산과 같다.Find: 하나읜 원소가 어떤 집합에 속해있는지를 판단한다. [백준 1717 문제] 일반적인 union, find 알고리즘은 아래와 같다.int find(int num){ if (parent[num] == num) return num; return find(parent[num]); //재귀 형태로 구현 } void union(int num1, int num2){ num1 = find(num1);//가장 부모 num2 = find(num2);//가장 부모 ..
안녕하세요. 코딩 신생아 입니다.2달 전에 oauth 구글 로그인과 네이버 로그인의 구조적인 차이로 인한 pr 리뷰 후, 임시방편으로 두 개의 로그인 방식마다 따로 DefaultOAuth2UserNaver , DefaultOAuth2UserGoogle 클래스를 따로 만들어 해결하는 방법을 제시하였는데, 이를 해결할 수 있는 좀 더 나은 방법을 찾기 위해 spring security , jwt 기본으로 돌아가 보려고합니다. 우선, spring security가 무엇이고 개념에 대해 차근차근 정리해보겠습니다. spring security란 스프링 시큐리티는 스프링 기반의 어플리케이션의 인증, 인가, 권한 을 담당해주는 하위 프레임워크이다. 스프링 시큐리티는 필터 기반으로 동작하는데,DelegatingFil..
안녕하세요. 코딩 신생아 입니다.오늘은 Grafana + Loki + Prometheus로 모니터링 서버 구축을 해보았는데요. 해당 부분들을 어떻게 구축했는지 써보려 합니다. Grafana , Loki , Prometheus Grafana, Loki, Prometheus 란?Prometheus : 모니터링 및 경고 툴킷으로, metrics형태로 데이터를 제공한다.Loki(from promtail) : promtail로 로그 데이터를 파일 형태로 수집하여 관리하고, 이를 받은 Loki가 로그 데이터를 집계하여 제공한다.Grafana : 데이터를 시각화하는 툴로, Prometheus, Loki 등에서 수집한 데이터를 시각화한다.Prometheus, Loki는 데이터 수집, Grafana는 데이터 시각화로..