일단 씻고 나가자

23.04.05 본문

Study/닥치는 대로 주워 담기

23.04.05

일단 씻고 나가자 2023. 4. 6. 03:05

2023. 04. 05 수요일

 

- [DB] DATE 형태로 되어 있는 애트리뷰트를 특정 년, 년월 등으로 문자열로 뽑는 방법?

: WHERE TO_CHAR(DATE, ‘YYYY-MM-DD’) = ‘2023’

‘YYYY’ 등으로 특정 부분만 뽑을 수도 있다.

 

 

- [DB] 해당 값을 평균을 구하고 소수점 첫 번째 자리에서 반올림하는 함수?

: ROUND( AVG( 컬럼 명), 0 )

ROUND는 반올림 관련 함수이며, AVG는 평균을 구하는 함수,

ROUND의 두 번째 매개변수가 다른 값이라면 해당 자리에서 반올림한다.

 

 

- [Java] StringBuilder의 문자열의 특정 인덱스를 제거하는 방법 3가지?

: sb. deleteCharAt(int index); .delete(int start, int end); .setLength(int end);

 

 

- [DB] A, B 테이블이 x라는 컬럼을 공유한다고 할 때 조인하는 방법?

: WHERE A.x = B.x

 

 

- [Java] Set의 구현체 두 가지 종류와, 그 차이?

: Set에는 HashSet, TreeSet 두 가지가 있다.

 

Hash는 해시 알고리즘으로 검색 속도가 빠르지만,

저장 순서를 유지하려면 LinkedHashSet을 이용하면 된다. (Map도 가능)

 

Tree는 검색 속도가 느리지만

저장된 요소들을 key로 자동 정렬해서 저장한다.

(역순은 new TreeMap<String,Integer>(Collections.reverseOrder()))

자동 정렬되므로 tree.subSet(1, true, 10, true); 메서드를 이용할 수 있는데

해당 메서드는 1, 3번째 매개변수는 1부터 10까지의 값,

2, 4번째 매개변수는 1, 3번째 매개변수를 범위에 포함할 것인지에 관한 내용이다.

해당 true가 없다면 10은 포함되지 않는다. (1은 있든 없든 포함된다.)

https://thalals.tistory.com/16

 

 

- [Java] Thread 클래스를 extends 하지 않고 구현하는 방법과 생성? 인터페이스의 의의?

: Runnable 인터페이스를 implements하고 run 메서드를 override 하면 된다.

자바는 다중 상속을 지원하지 않기 때문에, 다른 클래스를 상속 받았을 시 Thread 클래스는 상속받지 못하므로 Runnable 인터페이스를 구현하여 다른 클래스를 상속받으며 Thread의 기능을 사용하면 된다.

해당 인터페이스를 구현한 클래스를 객체 생성하고 Thread의 생성자에 넣는다. (start() 이용)

 

 

- [Git] reset3가지 옵션? 각각의 차이?

working directory는 실제 작업을 한 작업 공간.

index는 파일을 add한 공간.

repositorycommit한 파일이 들어 있는 공간.

 

working directory는 파일 수정.

index는 수정한 파일을 add.

repositoryadd한 파일을 commit 했을 때 상태가 변화한다.

 

+) git reset ORIG_HEAD처럼 아무 옵션이 붙지 않는다면 기본값은 mixed이다.

 

 

- [Spring] Spring의 탄생 이전의 과정?

: 처음 웹 애플리케이션은 html로 시작했으나, 정적인 컨텐츠였고 모든 페이지마다 각각을 만들어야 하는 단점이 있었다.

 

그걸 보완하는 것이 CGI(Common Gateway Interface)였고, 각 요청을 프로세스 단위로 처리했다.

 

Servlet은 각 요청을 Thread 단위로 애플리케이션을 돌려서 더 가벼웠지만 유지보수가 어렵고 복잡할수록 코딩이 어려웠다.

 

EJB(Enterprise Java Beans)는 체계를 잡고 유지보수성을 늘렸으며, 데이터 저장 수정 시 안정적이고 트랜잭션 처리가 좋았다.

다만 매우 침투적인 코딩(EJB 전용 코드를 만들어야 했다)과 테스트가 어렵거나 불가능했고, 수행 속도가 아주 느렸다.

 

그때 로드 존스란 사람이 자신의 책에 샘플 코드를 올렸고, 해당 코드가 반응이 좋아 다른 사람들과 로드 존스가 협업하여 만든 것이 Spring Framework이다.

 

 

- 라이브러리와 프레임워크의 차이?

: 간단하게, 내 코드가 라이브러리를 사용하고, 프레임워크가 내 코드를 사용한다.

 

 

- 8*1 RAM을 두 개를 이어 붙이는 두 가지 방법? 이런 방식의 명칭?

: 8*2 구조를 하나의 주소와 data in으로 붙이게 되면 각 8자리의 RAM에 같은 자리에 있는 2bit씩 읽을 수 있게 된다.

 

그런 8*2 구조에, 주소를 1bit 더 붙이고 1-to-2 Decoder을 달게 되면 16*1 RAM 구조가 되며 16자리의 bit를 각각 하나씩 읽고 쓸 수 있는 구조가 될 수 있다.

 

이렇게 RAM을 여러 방법으로 이어 붙이는 방법을 N*M RAM array 방식이라고 한다.

+) 저장 단위는 byte, 네트워크 송수신은 bit 단위로 자주 쓴다.

 

 

- 우선순위 큐란? 구현 방식?

: FIFO인 큐와 달리, 우선순위에 따라 우선순위가 높은 데이터가 먼저 나오는 방식.

힙으로 구현 시에 최소 힙, 최대 힙의 삽입 삭제와 순서가 같다.

 

자바는 java.util.PriorityQueue 클래스를 제공한다.

단 비교 대상이 새로운 클래스일 땐 comparable 인터페이스를 implements 해주어야 한다.

PriorityQueue<Generic> pq = new PriorityQueue(); 방식으로 구현한다.

 

 

- 트라이란? 구현 방식?

: Trie. 문자열을 저장하고 빠르게 탐색하기 위한 정렬된 트리 형태의 자료구조.

첫 번째 문자를 기준으로 나누고, 또 두 번째 문자를 기준으로 나누어 하위 노드들로 단어를 만드는 방식.

가장 마지막 잎새 노드는 단어의 끝을 알리는 flag가 필요하므로 특수 처리해줌.

flag는 삭제 시 문자열 내부의 문자의 경우 flag를 없애는 것으로 이용함.

 

구성은 각 노드 클래스마다 HashMap<Character, Node>로 자식 노드를 가리키고,

해당 노드가 마지막인지 확인하는 boolean isTerminal이 필요하다.

'Study > 닥치는 대로 주워 담기' 카테고리의 다른 글

23.04.07  (0) 2023.04.08
23.04.06  (0) 2023.04.07
23.04.03  (0) 2023.04.04
23.03.31  (0) 2023.04.01
23.03.30  (0) 2023.03.31