본문 바로가기

전체 글

(424)
[네트워크] 세션과 토큰에 관하여.. (feat. 쿠키) / Session, Token, Cookie, Network 네트워크의 토큰과 세션에 관하여.. 면접에서 나온 질문인데, 분명 기술 질문 관련해서 정리하면서 몇번 읽었던 내용이었지만, 실제로 접하며 느낀 적이 없어서 그런가 깔끔하게 대답을 못해서 다시 정리한다. 세션과 토큰이 나온 배경 HTTP 의 stateless 특성 때문에, 로그인 등의 상태를 유지해야 하는 경우를 보완하기 위해 나옴. 세션이란? 통신을 하기 위해서 서로 연결된 순간부터 통신을 마칠 때 까지의 기간 즉, HTTP 세션이란 클라이언트가 웹서버에 연결된 순간부터 통신 종료 까지의 기간 쿠키를 기반으로 동작한다. (여기서 쿠키는, 세션에 앞서 stateless 문제를 해결하기 위해 나왔다) 보안 문제 등으로 세션 아이디만 쿠키에 넣어 왔다갔다 할 수 있도록 세션을 만들었다. 쿠키만 있을 때에는 쿠..
Deadlock 데드락에 관하여.. 멀티쓰레드 사용 시, 멀티쓰레드 사용 시, 데드락에 관하여.. 데드락의 발생 조건 데드락을 해결을 위한 방법들 데드락의 발생 조건 아래 4가지 조건을 동시에 충족하면 데드락이 발생한다. 1. Mutual Exclusion(상호배제, mutex - 자원에 대한 동시접근 불가) 한번에 여러 프로세스(혹은 쓰레드)가 한 자원에 접근하지 못하도록 막음 (만약 동시에 자원 접근이 가능하다면 애초에 다른 프로세스가 다 쓰길 기다릴 필요가 없다) 2. Hold and Wait(점유대기) 자원을 가지고 있는 상태에서 다른 프로세스가 쓰는 다른 자원을 기다리는 상태 3. No Preemption(선점불가) 다른 프로세스가 이미 점유한 자원을 강제로 뺏어오지 못함 우선권이 우선한다는 뜻의 "선점" 4. Circular Wait(환형대기, 순환..
Java 의 final keyword 에 관하여.. 자바의 final 키워드에 관하여.. 인터뷰에서 버벅대서 정리한다. 자바에서 final 키워드를 사용할 수 있는 곳에는, class, method, variable 에 사용할 수 있다. 사용하는 이유는? Immutable (불변) -> 따라서 쓰기가 불가하다. (read-only) 1. 클래스를 상속받을 수 없도록 만든다. 2. 메서드를 override 가 불가하도록 만든다. 3. 변수를 read-only 상수로 만든다. 가독성을 해치지 않는 범위에서 써야한다고 하는데, 개인적으로는 불변해야 하는 엔티티를 정확히 지정해주고 명시해준다는 점에서 가독성이 더 좋아지는 경우가 있다고 본다. 그리고.. 상속해서 공통으로 사용하는 변수의 경우 등, 변하지 않아야 하는 내용에 붙여서 버그를 방지할 수 있다. 요새는..
[LeetCode] 7. Reverse Integer (코딩테스트, 릿코드, tech interview) 프로그래밍 처음 시작할 때, 막 풀었던 것보다 코드도 깨끗해지고 퍼포먼스도 훨씬 올라가서 나름 좋았다. 3번에 걸쳐서 리팩토링 했고, 최대 퍼포먼스 뽑아냄 하지만 개인적으로는 2번째 코드가 좀 더 정리하면 가장 읽기 편할 것으로 보여서 좋아보인다. package algorithm_sites.leetcode; public class LC_0007_ReverseInteger { public int reverse_3(int x) { if (x == 0) { return 0; } boolean isPositive = x > 0; int result = 0; int pop; try { while (x != 0) { pop = x % 10; x /= 10; if (isPositive && result > (Inte..
[LeetCode] 1. Two Sum (코딩테스트, 릿코드, tech interview) 릿코드 하나씩 공부하면서 열심히 풀기로 1, 2, 3 세번에 걸쳐서 퍼포먼스를 올렸고, 거의 최대치로 나옴 Process // 1. Input // 2. Iterate all with hashmap (i) // 2.1. Check target-nums[i] // 2.1.1. If so -> return answer // 3. Finish package algorithm_sites.leetcode; import java.util.*; public class LC_00001_TowSum { public int[] twoSum_1(int[] nums, int target) { if (nums.length == 2) { return new int[] {0,1}; } for (int i = 0; i < nums...
[프로그래머스] SQL 동명 동물 수 찾기 (GROUP BY) SELECT 조회할 것1, 개수(조회할 것2) as 조회해서 만들 컬럼이름 FROM 조회할 테이블 GROUP BY 어느 기준으로 개수 묶어서 보여줄지 (그룹핑) HAVING 그룹핑한 내용 중에서 보여줄 기준선 ORDER BY 정렬할 컬럼과 정렬 오름내림 기준
[Codility] MaxNonoverlappingSegments, 코딜리티 그리디 greedy 문제는 다음과 같다. 풀이 방법으로 생각했던 것은 다음과 같다. 모든 세그먼트를 하나의 평면으로 통합시키면, 중복은 전부 연결이 된다. 이 때 떨어져있는 세그먼트들의 수를 세면 된다. 통과되는 답은 다음과 같다. 계속 50프로만 되다가 다른 블로그를 보고 참고했는데.. public class MaxNonoverlappingSegments { public static void main(String args[]) { int count = solution(new int[] {1, 3, 7, 9, 9, 10}, new int[] {5, 6, 8, 9, 10, 10}); System.out.println(count); } public static int solution(int[] A, int[] B) { if (..
[프로그래머스] 전화번호 목록, 알고리즘 문제풀이, Hash, 해시 이전에 파이썬으로 풀었던 방식은, 정렬 후에 두개의 for 문을 사용하되 해당 순서의 길이보다 긴 것들만 찾아보는 식으로 풀었었다. 21년 3월 효율성 테스트케이스 추가되면서 안되는 듯해서 연습하다가 java로 다시 풀었다. Hash 문제라서 HashSet을 사용했는데, 단어 하나하나에서 각 전체의 substring을 구하는건 비효율적으로 보였으나, 문자열 자체를 비교하는 것 보다는, substring 에서 잘라낸 문자열을 hash 에 있는지 없는지 확인하는 것으로 찾는 것이 더 빨랐다. package algorithm_sites.programmers; import java.util.HashSet; public class hash_02_phone_number_prefix { public static vo..