
역순으로 되어있는 자리수마다 나뉘어져 있는 링크드리스트의 노드를 하나씩 순회하며 값을 더하고 그 결과를 반환하는 문제이다. 풀이 class Node { int val; Node next; Node (int val, Node next) { this.val = val; this.next = next; } Node (int val) { this.val = val; } } public class Problem { public Node makeListNode(int[] arr) { Node pointer, dummy = new Node(0); pointer = dummy; for (var i : arr) { pointer.next = new Node(i); pointer = pointer.next; } retur..
자바에는 다음과 같은 3종류의 변수가 존재한다. 변수의 종류와 상관없이 모든 객체는 heap 영역에 저장된다는 설명은 아래에서 생략한다. 전역 변수 자바에는 엄밀히 말해서 전역 변수 (Global Variables)는 존재하지 않는다. 대신 전역 변수를 사용하기 위해서는 class는 public으로 변수에는 public static 키워드를 사용하여 선언하여 사용한다. static으로 선언된 변수는 클래스가 어떤 방식으로든 한번 선언된 이후에 메모리에 적재되고 그 이후에 애플리케이션이 종료될 때까지 메모리에 존재하게 된다. (애플리케이션을 맨 처음에 실행했을때 메모리에 적재되는 것이 아니다.) 이를 통해 전역 변수'처럼' 사용할 수 있게 구현할 수 있다. 자바 8 이전에는 PermGen 영역(a.k.a ..

토폴로지 문제를 풀던 중 다른 사람의 직관적인 풀이를 발견하여 기록해둔다. 모든 노드간 연결을 List 형태의 그래프로 저장한다. 각 노드를 돌면서 DFS를 시행하고 만약 cycle이 내부에서 발견된다면 return false를 한다. (e.g. 0을 수행하기 위해서 1이 필요하고 1을 수행하기 위해서 0이 필요한 경우가 동시에 발견될 경우) DFS의 상태값을 (미방문, 방문중, 방문끝) 을 나타내는 enum을 통해 관리한다. class Solution { //미방문, 방문중, 방문끝 enum Status { VISITING, VISITED; } private boolean dfs(List graph, Status[] visited, int i) { //다시 방문한 노드가 VISITING 상태라면 cyc..

TreeNode의 node들이 주어졌을때 오른쪽에서 바라봤을때 보이는 값만 List로 출력하는 문제이다. recursion과 depth를 이용하여 문제를 풀어야겠다는 아이디어는 구했으나 depth를 어떻게 적용할 수 있을지 감을 잡지 못해 다른 사람의 풀이를 참고하였다. 핵심 아이디어 코드는 다음과 같다. if (depth == answer.size()) answer.add(node.val); rightSide(node.right, depth + 1); rightSide(node.left, depth + 1); root 레벨에서부터 값을 차례대로 넣기 때문에 depth == answer.size()라는 조건이 성립한다. 같은 레벨일 때는 항상 최우측부터 체크하여 좌측으로 차례대로 방문을 하고 해당 레벨의..
자바 8 람다, 스트림 Optional 키워드 사용 가능 Date와 Time API 자바 11 인터페이스에 private 메서드 가능 (자바 9) 이외에 컬렉션, 스트림, Optional에 몇몇 메서드 추가 (자바 9) G1 GC가 디폴트 GC로 설정 (자바 9) var 키워드 사용 가능 (자바 10) OpenJDK가 Oracle JDK로 통합됨 자바 17 record 키워드 사용 가능 (자바 14) NullPointerException이 어떤 변수에 의해 발생했는지 설명 (자바 14) sealed 키워드 사용 가능 (자바 15) ZGC 도입 (자바 15) 각 버전별 상기 내용 이외에도 많은 기능이 추가되었지만 중요하다 생각되는 내용만 정리하였음. 레퍼런스 https://intrepidgeeks.com/..
직렬화 직렬화란 서로 다른 머신(PC, 스마트폰 등)끼리 객체를 주고받기 위한 방법으로 객체를 바이트스트림으로 변환하여 네트워크를 통해 데이터를 주고받는 것이 가능해진다. 직렬화의 필요성 CPU나 RAM과 같은 리소스를 공유하는 하나의 머신 내에서 객체를 주고받아야 한다고 가정해보자. 이때 객체는 프로세스 RAM의 힙 영역에 저장되어 있고 프로세스의 RAM은 OS의 커널에서 가상화하여 제공한 것이므로 커널의 IPC를 통해 해당 값에 쉽게 접근하여 사용할 수 있다. 단지 메모리 주소를 아는 것만으로도 객체에 접근이 가능하다는 뜻이다. 하지만 리소스를 공유하지 않는 서로 다른 머신에서 네트워크를 통해 객체를 주고받아야 한다면 어떻게 해야할까? 메모리의 주소값을 주고받더라도 해당 주소값은 서로 다른 머신끼리는..

현재 인터넷상의 URI를 중요도가 아닌 사용 빈도로 나눠 pseudo 그림으로 나타내자면 다음과 같다. 식별할 수 있는 어떤 값이든 URI가 될 수 있지만 식별이 가능하다고 해서 해당 URI가 가르키는 자원에 곧바로 접근이 가능한 것은 아니다. URN urn:isbn:0-486-27557-4은 URI이면서 URN이지만 URL은 아니다. 이름을 통해 해당 URN이 로미오와 줄리엣이라는 도서를 나타내는 URI라는 것은 알았지만 URI나 URN을 알았다고 해서 실제로 존재하는 어떤 자원에 접근할 수는 없기 때문이다. URN의 문법은 여기에서 확인할 수 있다. 'URN 문법'의 URL은 https://datatracker.ietf.org/doc/html/rfc2141 이지만 'URN 문법'의 URN은 RFC 2..
트랜잭션 격리 수준 트랜잭션의 격리 수준은 A라는 트랜잭션이 수행되고 있을때 B라는 트랜잭션에서 A가 다루고 있는 내용을 변경하거나 조회할 수 있도록 설정하는 것을 의미한다. 트랜잭션이 보장하는 ACID 4가지 특성 중 Isolation(격리성)의 trade-off에 대해서 다루는 내용이다. 이때 트레이드오프하는 두 가지 요소는 격리성과 동시성이다. 동시성이 높아지면 성능은 높아지지만 데이터의 정합성이 낮아지고 격리성이 높아지면 성능은 낮아지지만 데이터의 정합성이 올라간다. 격리 수준에는 아래와 같이 총 4가지 단계가 존재하며 옆의 숫자는 임의로 붙인 숫자로 높을수록 해당 기능이 강화된다. 동시성 3 격리성 0 (READ UNCOMITTED) WRITE-LOCK X READ-LOCK X CRUD 전부 가..

발단 이전부터 오픈소스에 기여해보고 싶다는 생각을 항상 하고 있던 중에 동기/비동기에 대해 공부를 하면서 기여를 할 수 있는 기회가 생겼다. 비동기 아키텍처의 핵심인 메인 루프와 스레드 풀에 대해 자세히 설명되어 있는 node.js의 공식 문서가 한국어 번역이 되어 있지않은 것을 확인하였다. 500줄에 가까운 문서였지만 해당 문서를 번역하면서 공부할 수 있는 내용이 많을 것이라는 확신이 들어 꽤 긴 시간을 할애하여 번역을 하기로 결심했다. 과정 Issue와 PR 확인 오픈소스에 기여하기로 결심하였다면 가장 먼저 해야할 것은 이미 누군가가 해당 이슈를 다루고 있는지 확인하는 것이다. 해당 프로젝트 리포지토리에 들어가 이슈 탭과 PR 탭을 확인하며 해당 내용을 다루고 있는지 먼저 확인을 한다. 본인은 번역하..
완전 깡구현 문제. 터진 공간을 찾아 위에서부터 블럭을 끌어와 채우는 방식이 평소에 생각해보지 못 한 방식이라 재밌었다. 이번에도 역시 2차원 배열을 다룰때 인덱스때문에 꽤 애를 먹었는데 0, 0에서 시작하는 순회 이외에 다른 방식으로 순회하는 방법 연습을 더 해야할듯하다. import java.util.*; class Solution { char[][] matrix; List yList = new ArrayList(); List xList = new ArrayList(); void squareFinder(int i, int j) { var pos = matrix[i][j]; if (pos == matrix[i + 1][j] && pos == matrix[i][j + 1] && pos == matrix[..
- Total
- Today
- Yesterday
- lunarvim
- 루나빔
- 배포
- RequestBody
- JavaScript
- RequestParam
- 도커
- 레디스
- ModelAttribute
- RequestPart
- Dap
- IDE
- neovim
- 아키텍처
- vim
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |