일반적인 이분탐색은 비내림차순, 비오름차순 으로 정렬된 상태가 아니고,아래와 같이 공통된 값 없이 하나씩만 존재하는 경우이다. 이분탐색에 필요한 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);//가장 부모 ..
ALU와 제어장치 ALU (Arithmetic Logic Unit)레지스터를 통해 피연산자를 받아들이고, 제어장치로부터 수행할 연산을 알려주는 제어신호를 받아들여 다양한 연산을 수행한다. 연산 후에 ALU는 결과값은 바로 메모리에 저장되지 않고 일시적으로 레지스터에 저장하고 연산결과에 대한 추가적인 상태 정보인 플래그(flag)를 플래그 레지스터로 내보낸다.제어장치 제어장치가 무엇을 받아들이고, 무엇을 내보내는지 하나씩 살펴보자.제어장치가 받아들이는 정보제어장치는 클럭 신호를 받아들인다.제어장치는 '해석해야 할 명령어'를 받아들인다.제어장치는 플래그 레지스터 속 플래그 값을 받아들인다.제어장치는 제어 버스로 전달된 제어 신호를 받아들인다.제어장치가 내보내는 정보cpu 내부에 전달하는 제어 신호cpu 외부..
안녕하세요. 코딩 신생아 입니다.2달 전에 oauth 구글 로그인과 네이버 로그인의 구조적인 차이로 인한 pr 리뷰 후, 임시방편으로 두 개의 로그인 방식마다 따로 DefaultOAuth2UserNaver , DefaultOAuth2UserGoogle 클래스를 따로 만들어 해결하는 방법을 제시하였는데, 이를 해결할 수 있는 좀 더 나은 방법을 찾기 위해 spring security , jwt 기본으로 돌아가 보려고합니다. 우선, spring security가 무엇이고 개념에 대해 차근차근 정리해보겠습니다. spring security란 스프링 시큐리티는 스프링 기반의 어플리케이션의 인증, 인가, 권한 을 담당해주는 하위 프레임워크이다. 스프링 시큐리티는 필터 기반으로 동작하는데,DelegatingFil..