분류 전체보기

=> 스프링 시큐리티 강의를 듣다가 서블릿 필터 단에서 동작하는 시큐리티 빈 추가 키워드가 나와 정리해본다.1. SpringApplication.run(...) 호출 시 public ConfigurableApplicationContext run(String... args) { Startup startup = SpringApplication.Startup.create(); if (this.properties.isRegisterShutdownHook()) { shutdownHook.enableShutdownHookAddition(); } DefaultBootstrapContext bootstrapContext = this.create..
· 알고리즘
https://www.acmicpc.net/problem/1365 이 문제는 가장 긴 증가하는 부분 수열만 알면 아주 쉽게 풀리는 문제다.이분 탐색은 항상 인덱스 처리가 너무 어렵다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import java.util.StringTokenizer;public class Main { /** * N - 가장 긴 증가하는 부분 수열의 크기 */ static int N; static int[] nums; static List norma..
1. Nested Loop Join=> 우선, JOIN을 최적화하기 위해서는 NLJ에 대해 알아야 한다.=> Nested Left Join은 2개의 조인된 테이블이 있다고 가정했을 때,=> 인덱스로 조인 조건을 필터링(?)해 더 빠르게 찾도록 최적화한다.=> 아래 쿼리로 NLJ에 대해 조금 더 알아보자.SELECT *FROM employees e, dept_emp deWHERE e.emp_no=de.emp_no;1-1. CREATE INDEX index1 ON employees(emp_no) + CREATE INDEX index2 ON dept_emp(emp_no)=> 두 테이블에 인덱스가 존재한다.=> 이때는, 옵티마이저가 통계 정보를 이용해 적절히 드라이빙 테이블을 선택한다.=> 사용자가 이때, 그리..
· MySQL
1. NLJ(스트리밍/파이프라인 방식)=> 인덱스를 탈 수 있는 쿼리에서는 옵티마이저는 무조건 NLJ 방식을 사용한다.=> NLJ는 Nested Loop Join으로 그냥 루프를 돌려 조인을 수행한다고 보면 된다.1-1. NLJ는 비교적 중요하다 볼 수 있어, 별개의 글을 남긴다.https://icanchangeworld.tistory.com/168 우선, JOIN을 최적화하기 위해서는 NLJ에 대해 알아야 한다.=> Nested Left Join은 2개의 조인된 테이블이 있다고 가정했을 때,=> 인덱스로 조인 조건을 필터링(?)해 더 빠르게 찾도록 최" data-og-host="icanchangeworld.tistory.com" data-og-source-url="https://icanchangewor..
· 알고리즘
https://www.acmicpc.net/problem/1082진짜 어려운 문제다.어렵다기보단, 예외 케이스가 많이 나올 수 있는 문제였다. 0이 맨앞에 올 수 없다는 거에서 막혔다. 그리디 전략은1. 일단 가장 큰 자릿수가 가장 큰 수이기에 가장 작은 가격을 가진 번호로 max 자릿수를 구한다.=> 가장 작은 가격을 가진 번호가 0일 때, 최소 하나(맨 앞 자릿수)는 0이 아닌 수가 들어가야하기에, 두번째 작은 가격을 가진 수를 구한다.(여기서, 조금 복잡해진다.)2. 큰 번호 부터 정렬한다.3. 만약, 이 큰 번호를 샀을 때, 자릿수가 줄어든다면, 이는 버린다.4. 즉, 자릿수에 맞게 살 수 있는 큰 번호부터 사는 것이 이 문제의 그리디 전략이다. import java.io.*;import java..
=> 동시성 문제는 비교착상태, 교착상태 이 두 가지로 나뉜다.1. 비교착 상태 문제1-1. 원자성 위반 오류=> 원자성 위반 오류는 문맥 교환이 발생하지 않을 것이라 생각하여 발생한다.=> 단순 +1 연산이라도, OS 단에서는 3가지의 명령으로 또 나뉠 수 있다.=> 이러한 과정을 생각하지 못했을 때 발생하는 오류가 원자성 위반 오류이다.Thread 1=> if 문으로 NULL이 아님을 확인한다.=> fputs 함수는 proc_info를 참조한다.Thread 2=> proc_info를 NULL로 한다. => 이제 이 과정을 섞어보자.=> 실제로 문맥 교환은 언제 어디서 일어날 줄 모른다.Thread 1=> if 문으로 NULL이 아님을 확인한다.Thread 2=> proc_info를 NULL로 한다...
· 알고리즘
https://www.acmicpc.net/problem/16235이 문제는 개극혐이다.그냥 구현이다. 클래스를 나누고 메서드를 나누면 쉽게 풀린다.다만, 시간이 엄청 오래걸린다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class Main { /** * 봄 => 나이만큼 양분먹음, 나이 1증가, 여러개의 나무 가능, 양분못먹으면 죽음 * => 나이대로 정렬이 필요 특정 시점부터 여름 적용 필요 * 여름=> 죽은 나무 양분됨. 죽은나무 나이/2가 양분으로 추가됨 * => 봄에서 한 번에 처리 * 가을=..
=> CPU 사용량이 많은 서비스나 로직 등을 실행할 때, 스핀을 통한 락 프리 알고리즘을 사용하게 되면, CPU 사용량이 증가하고, 스핀 시간동안 시간을 낭비하게 된다.=> 어차피 오랜 시간 CPU를 하나의 쓰레드가 잡고 사용할 때는, 그 연산에 집중할 수 있게, 다른 쓰레드를 블록함으로 정합성도 챙 기고, 스핀으로 인한 시간 낭비를 제거함으로 더 효율적으로 연산을 처리할 수 있다.=> 이때, I/O와 같은 CPU 처리가 아닌 처리가 있다면, 블록을 통해 CPU 처리를 멈추고, 디스크 드라이버 처리로 전환한다.=> 이어서, 다른 쓰레드가 락을 획득 후 CPU 처리를 한다.=> 락은 임계 영역의 동시성을 책임진다.1. 뮤텍스와 컨디션 변수, 모니터 락=> 위에서 언급한 것처럼 뮤..
쥐4
'분류 전체보기' 카테고리의 글 목록 (2 Page)