전체 글(754)
-
[Java] 배운점
Distribute Architecture 1. 등록 2. 찾기 3. 요청 (객체의 직렬화) 받을 때, (객체의 역직렬화 필요) 4. 응답 (객체의 직렬화) 받을 때, (객체의 역직렬화 필요) 서비스를 등록하고 제공해주는 제3의 저장 장소(Registry) 필요 인덱싱이 중요 빠르게 검색할 수 있는 알고리즘이 필요 ex) DNS 데이터를 저장하는 공간(Repository) 서버, 클라이언트에 대한 정보는 프록시에서 받는다. JNDI initialcontext 플랫폼 독립적 런타임에 바이트코드로 바뀜 Java Runtime Environment(JRE) Web Container ex) tomcat web server ex) apache, engineX application server web applica..
2024.01.10 -
[CS] Hashing에 대한 나름의 이해
Hashing은 hash function을 이용하여 암호화하는 것이다. 특징으로는 세 가지가 있다. 1. One-way: 복호화가 불가능하다. 2. Deterministic: 같은 값의 해시는 같다. 3. Avalanche effect: 인풋값이 조금만 바뀌어도 해시값은 크게 변한다. 복호화가 왜 불가능할까? 챗지피티에 따르면 역함수가 없는 함수라고 한다. 무한한 입력에 대해 유한한 출력이기 때문이다. 아무튼 복호화가 안된다는 건 Hashing의 큰 장점이다. 이를 무너뜨리기 위한 방법으로는 대표적으로 다음과 같은 것들이 있다. 1. Brute Force Attack: 모든 값을 다 대입해서 일치하는 해시값을 찾아내는 방식이다. 128 bit 이상의 해시를 사용하면 뚫기 어렵지만 낮은 해시를 사용하면 뚫..
2024.01.10 -
[그 외] 생활의 불편함과 그 이유
네이버 지도 즐겨찾기 저장에 넣어놨는데 하루가 되어도 휴대폰 앱에서 갱신이 안됐다. 앱을 종료했다 다시 시작하니 갱신이 되었다. 왜일까? 무슨 원리 때문일까?
2024.01.08 -
[CS] producer-consumer pattern
producer는 생산하고 consumer는 사용하는 pattern이다. 크게 세가지 경우에서 사용된다. 1. foreground thread latency 2. loadbalance 3. backpressure manangement 1. foreground thread latency: IO나 UI 같이 입력을 받아오는 경우 시스템이 과부하되는 것을 막기 위해 queue에 저장하기만 하고 저장된 걸 다른 background threads가 가지고 오게 해서 입력을 받는거에만 집중할 수 있게 한다. 2. loadbalance: thread 간 작업을 공평하게 분배하기 위해서 사용하기도 한다. queue에 쌓인 것을 여유가 있는 thread가 하도록 하는 식으로 진행한다. 즉, 일이 없으면 일을 하는 것이다..
2024.01.07 -
[Java] Scanner vs BufferedReader
결과적으로 BufferdReader가 더 유리하다. 첫번째 이유는 BufferedReader는 Scanner의 데이터를 읽을때 발생하는 문제가 없다. Scanner의 문제 - nextX에 해당하는 7개의 메소드는 개행이나 공백 전까지만 읽는다. (nextInt(), nextFloat(), nextByte(), nextShort(), nextDouble(), nextLong(), next()) - nextLine은 개행까지를 읽는다. - 만약 다음과 같은 코드가 있다고 하자. import java.util.Scanner; class Solution { public static void main(String args[]) throws Exception { Scanner sc = new Scanner(Syst..
2024.01.07 -
[알고리즘] 창용 마을 무리의 개수
나의 풀이 - connected components를 찾는 문제였다. - 로직은 크게 두 단계이다. - 시작할 위치를 정하고 dfs를 돌린다. 이때 방문되는 노드는 모두 하나의 무리가 된다. - 이를 반복하며 모든 노드가 방문 상태가 될때까지 진행한다. - 메소드로 세분화하여 메소드를 구현하였다. import java.util.Scanner; import java.util.ArrayList; import java.util.HashMap; import java.io.FileInputStream; // 방문하지 않은 노드 중 하나를 잡아서 bfs를 실행, 이걸 하며 방문한 노드를 묶으면 하나의 무리가 된다. // 이를 모든 노드를 방문할 때까지 반복한다. class Solution { public stati..
2024.01.07