// AVL 트리 import java.util.LinkedList; import java.util.Queue; class Node { int key; int height; Node left; Node right; public Node(int key, Node left, Node right) { this.key = key; this.height = 0; this.left = left; this.right = right; } } class AVLTree { Node head; public int height(Node node) { // 노드가 null일 때 높이는 -1 if (node == null) { return -1; } return node.height; } // LL 케이스 public Node ..
분류 전체보기
class Node2 { int data; Node2 left; Node2 right; public Node2(int data, Node2 left, Node2 right) { this.data = data; this.left = left; this.right = right; } } class BinarySearchTree2 { Node2 head; public BinarySearchTree2(int data) { this.head = new Node2(data, null, null); } public Node2 addNodeRecursive(Node2 cur, int data) { if (cur == null) { return new Node2(data, null, null); } if (data < ..
GROUP BY GROUP BY구는 자르기와 집약이라는 두 개의 기능으로 구분된다. -> GROUP BY는 필드로 테이블을 자르고, 잘라진 조각 개수 만큼의 레코드 수에 대한 작업 결과를 출력함. SELECT address, COUNT(*) FROM Address GROUP BY address; -- 결과 address | count ---------------- 서울시 | 3 인천시 | 2 부산시 | 1 -> address라는 필드의 레코드 종류가 3가지라면 3가지로 잘리고, 집약되어 3개의 레코드만 출력됨! PARTITION BY PARTITION BY를 사용하는 윈도우 함수는 자른 후에 집약하지 않음. -> 잘려진 레코드의 종류별로 작업이 처리되나, 출력 결과는 집약되지 않으므로 기존 레코드 개수만..
안녕하세요. 이번 게시글에서는 클라이언트가 요청을 보냈을 때 WAS에서 일어나는 작업에 대해 알아보도록 하겠습니다. 특히 디버거를 사용해서 직접 코드를 살펴보며 자세히 알아볼게요~! 먼저 클라이언트에 요청이 일어난 후 내부적으로 진행되는 순서를 아래와 같이 그려보았습니다.. 저번 게시글에 그렸던 그림과 약간 차이가 있죠? 저번 게시글이 틀렸었습니다.. Connector와 ThreadPool을 별도의 모듈로 표현했었는데, Connector내부에 ThreadPool이 존재하는 것이었습니다.. (이전글 수정은 나중에...) - 각 모듈의 사양을 구분하기 위해서 Connector(Coyote) 모듈은 노란색, ServletContainer(Catailna)는 파란색, Spring은 초록색으로 표현했습니다. - ..
class Node { int data; Node left; Node right; public Node(int data, Node left, Node right) { this.data = data; this.left = left; this.right = right; } } class BinarySearchTree { Node head; public BinarySearchTree(int data) { this.head = new Node(data, null, null); } public void addNode(int data) { Node cur = this.head; Node parent = cur; while (cur != null) { if (data == cur.data) { System.out.p..
1. 직접 프록시 객체 작성 - 데코레이터 패턴 - 직접 작성하므로 프록시 대상 클래스마다 클래스 구현 필요.. public class UserServiceTx implements UserService{ UserService userService; // 타겟 오브젝트 PlatformTransactionManager transactionManager; public void setTransactionManager( PlatformTransactionManager transactionManager){ this.transactionManager = transactionManager; } public void setUserService (UserService userService){ this.userService..
이번 게시글에선 WAS가 어떻게 실행되고, 요청을 처리하는지 알아보겠습니다. 또한, 그 과정에서 WAS에 배포된 Spring 프로젝트를 어떻게 구동시키는지도 함께 알아보시죠,, WAS가 뭐야? - Tomcat… 우리는 면접 단골 문제로 web server와 web application server의 차이점에 대해서 외운 적이 분명히 있습니다.. web server는 정적 컨텐츠를 다루고, web application server는 동적 컨텐츠를 다룬다고 말이죠.. 그 후, 실무에서 WAS를 접할 땐 종종 이런식으로 접하게 됩니다. WAS 그거 스프링 서버 아냐? 톰캣? 아~ 그 고양이 그림~? 톰캣이 스프링 아니야? 응 아냐… 톰캣과 스프링은 분명 다른데 어디까지고 톰캣이고 스프링인지, 또한 각자의 구분..
// 각각의 엣지에 가중치가 있는 포화 이진 트리가 있다. // 루트에서 각 리프까지의 경로 상 가중치 합을 각각 같게 하고, // 모든 가중치들의 총합이 최소가 되도록 하는 프로그램을 작성하세요. - 포인트 1. 엣지를 트리로 보기 - 포인트 2. 후위 순회하기.. - 포인트 3. 차이를 더해주기 ==> += Math.abs(x - y); - 포인트 4. 높이로 포화이진트리 담을 배열의 길이 구하기 --> 정답 풀이 케이스에서 활용 ==> Math.pow(2, h + 1); public class MyCode { // 후위 순회 --> 트리 문제 풀때 무슨 순회인지 먼저 파악하기 ! public static void solution(int h, int[] w) { // 후위 순회.. // 엣지를 노드..
class Node { char data; Node left; Node right; Node(char data, Node left, Node right) { this.data = data; this.left = left; this.right = right; } } class BinaryTree2 { Node head; BinaryTree2(char[] arr) { // 배열로 노드 구성한 후, 링크트 리스트 엮는 방식 -> 노드를 idx로 접근... Node[] nodeList = new Node[arr.length]; // 노드타입 배열 먼저 구성하기 !! for (int i = 0; i < nodeList.length; i++) { nodeList[i] = new Node(arr[i], null, n..
주어진 인덱스가 idx 일 때 ( 수정 필요..?) 부모 노드의 인덱스 : idx = (idx / 2) - 1; 왼쪽 자식 노드의 인덱스 : idx = idx * 2 + 1; 오른쪽 자식 노드의 인덱스 : idx = idx * 2 + 2; - 재귀적으로 호출하여 출력하는 구조 주의 ! - 전위 순회 : 먼저 출력 (preOrder) - 중위 순회 : 중간에 출력 (inOrder) - 후위 순회 : 마지막에 출력 (postOrder)class BinaryTree { char[] tree; BinaryTree(char[] arr) { tree = arr.clone(); } public void preOrder(int idx) { // 전위 순회 int left = idx * 2 + 1; int right =..