Spring 정적 리소스 캐시 관리
·
Back-End/Spring
기존에 정적리소스(css,js 등)을 수정하고 운영서버에 업로드하면 기존 사용자들에게는 최신 버전의 리소스가 적용되지 않는 문제가 있어서 파일을 수정할 때마다 해당 파일을 사용하는 부분에 finger-print 이용하여 강제로 불러오게 했었다.ex)하지만 수정한 파일이 많으면 아무래도 수정할 부분이 많아서 일일이 다 찾아서 수정하기가 쉽지 않았다. 그래서 etag를 이용한 정적 리소스 캐시 관리방법을 생각하게 되었다. 스프링과 apache-tomcat 환경에서 정적리소스 캐시관리를 하기 위해선 여러 방법이 있는데 나는 Etag를 사용했다. 우선 정적 리소스에 대해 cache-control을 설정하는 클래스를 만들어야 된다. etag와 캐시 정책에 대한 정보는 아래글에 자세히 나와있다.https://vel..
옵션 거래 간단 요약
·
공기업 준비
어디에도 설명이 이해하기 쉽게 돼있는 곳이 없어서 직접 정리해봤다.정도로 요약할 수 있는데 사실 빼먹은 내용이 많다. (프리미엄 발생 조건 등)어떤 느낌인지 이해만 하고 추가로 공부하는 것을 추천.다음은 풋옵션 매도와 커버드콜의 그래프이다.풋옵션 매도 = 커버드콜(기초자산 매수 + 콜옵션)이라는 사실을 알 수 있다.
[패캠] 완전탐색 & 시뮬레이션
·
코테
완전탐색 : 모든 경우의 수를 시도함.- 문제해결의 가장 기본적인 방법이자 100%의 정답률 보장.브루트 포스라고도 함. Brute : 날것의, 무식한Force : 힘 별도의 최적화 없이, 효율성을 고려하지 않는 풀이방법 - 효율을 생각하지 않기 때문에 문제의 크기가 작으면 유용.- 문제의 크기가 클 수록 시간/공간복잡도가 늘어나 적용이 어려울 수 있음. 시뮬레이션 : 문제에서 주어진 상황을 그대로 진행하며 해결해보는 기법- 문제의 조건을 체계적으로 수행하기 위한 구현력이 필요
백준 5179번 : 우승자는 누구?
·
코테
import java.io.*; import java.util.*; import java.util.stream.Collectors; class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); int n = Integer.parseInt(br.readLine()); List list = new ArrayList(); for (int i = 0; i < n; i++) { S..
[Docker] Unexpected wsl error 해결
·
DEVOPS
대충 이런 오류가 떴었는데 아래 명령어를 실행하고 재부팅했더니 해결됐다. wsl --update netsh winsock reset 아래 게시물을 참고했다. https://mukstory97.tistory.com/48 An unexpected error was encountered while executing a WSL command. Common causes include access rights issues, which occur after 발생 Error An unexpected error was encountered while executing a WSL command. Common causes include access rights issues, which occur after waking th..
[이코테] 탐색 알고리즘 DFS/BFS
·
코테
DFS depth-first Search의 약자. 깊이 우선 탐색이라고도 부르며, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘. 먼저 그래프의 기본 구조를 알아야 하는데, 그래프는 노드와 간선으로 표현되며 이때 노드를 정점이라고도 함. 그래프 탐색이란? 하나의 노드를 시작으로 다수의 노드를 방문하는 것. 두 노드가 간선으로 연결되어 있다면 '두 노드는 인접하다' 라고 표현 프로그래밍에서 그래프는 크게 2가지 방식으로 표현할 수 있음. 인접 행렬 인접 리스트 인접 행렬 2차원 배열에 각 노드가 연결된 형태를 기록하는 방식. 연결된 그래프를 인접 행렬로 표현할 때 파이썬에서는 2차원 리스트로 구현. 연결이 되지 않은 노드끼리는 무한의 비용이라고 작성함. 실제 코드에선 정답이 될 수 없는 큰 값 중에서..
백준 18111번 : 마인크래프트
·
코테
정말 어려운 문제였다. 오랬동안 코테를 풀지 않아서 감이 떨어졌을 수도 있지만 그 점을 감안하더라도 체감상 매우 어려웠다. 코드를 설명하자면, 입력을 배열로 받고 최대 높이인 256까지 for loop을 돌면서 연산을 수행하는데, 이때 숫자를 i라고 하자. 그리고 입력받은 배열을 다시 loop를 돌린다. 이때 숫자는 n이라고 가정한다. 만약 n > i 라면 인벤토리에 n - i만큼의 값을 추가하고 걸린시간을 의미하는 sum 변수에 2초 * n에서 i를 뺀 값 만큼을 더한다. n < i 라면 인벤토리에서 블럭을 i - n만큼 빼서 걸린시간을 1초 * i - n값만큼 더한다. 입력받은 배열의 loop가 끝나면 인벤토리에 0 이상의 블럭이 남아있고 걸린시간이 최소거나 최소이고 최대 블럭이 더 클 때 최대블럭값..
[이코테] 꼭 필요한 자료구조 기초
·
코테
탐색 탐색이란 ? 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정. 프로그래밍에서는 그래프, 트리 등의 자료구조 안에서 탐색을 하는 문제를 자주 다룸. 대표적으로 DFS, BFS가 있음. 사전 지식: 스택, 큐, 재귀함수 자료구조 데이터를 표현하고 관리하고 처리하기 위한 구조. 다음의 두 핵심 함수로 구성 삽입(Push): 데이터를 삽입 삭제(Pop) : 데이터를 삭제 오버플로 : 데이터가 이미 가득찬 상태에서 삽입 시 발생 언더플로 : 데이터가 없는 상태에서 삭제 시 발생 스택 박스 쌓기에 비유할 수 있음. (아래 -> 위로 쌓음) 아래에 있는 박스를 치우기 위해선 위에 있는 박스 먼저 내려야 함. = 후입선출 큐 대기 줄에 비유할 수 있음. (먼저 온 사람이 먼저 들어감) = 선입선출 재귀 함수 ..
백준 1195번 : 킥다운
·
코테
전에 실패했던 문제였는데 그리디에 자신감이 붙어서 다시 한번 시도해봤다! if문의 순서만 바꾸면 되는 간단한 문제였다.. 원리는 두개의 배열을 입력받고 더 긴 배열에 앞부분부터 더 작은 배열의 길이 - 1 만큼 0을 추가하는 것이다. 그 다음에 0을 제거해 나가면서 맞물리지 않는 부분이 있는지(같은 인덱스에 있는 두 배열의 값의 합이 3을 넘는지) 체크를 한 후 조건을 만족하면 현재의 길이를 리스트에 저장한 후 마지막에 가장 짧은 길이를 찾아서 출력한다. import java.io.*; import java.util.ArrayList; import java.util.List; class Main { public static void main(String[] args) throws IOException {..
백준 1700번 : 멀티탭 스케쥴링
·
코테
골드1문제가 어느 정도 난이도인지 감을 잡기 위해서 한번 도전해봤다! 같은 티어대 문제중에선 쉬운편 인 것 같다. 역시 원리는 간단하다. n개 플러그에 꽂을 k개의 수를 입력받고 플러그에 꽂혀있는 수를 저장할 리스트에 초기값으로 중복되지 않은 3개의 값을 넣어준다. 그리고 k개의 수를 반복문을 돌면서 비교하는데 이때 꽂혀있는 플러그를 뽑는 조건은, 1. 이후에 사용할 일이 없을때 2. n개의 플러그 중에 가장 마지막에 사용할때 이렇게 된다. 이 두가지 조건만 구현해주면 간단하게 풀 수 있다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public ..