일단 씻고 나가자

23.03.15 본문

Study/닥치는 대로 주워 담기

23.03.15

일단 씻고 나가자 2023. 3. 16. 00:46

2023. 03. 15 수요일

 

- [Java] StringTokenizer란 무엇이며 생성자? 주요 함수?

: 해당 문자열을 구분 문자에 의하여 나누어 토큰으로 저장하는 클래스로서 Iterator와 비슷하다. StringTokenizer st = new StringTokenizer(나누려는 문자열, 구분 문자); 로 생성.

(+ StringjoinString.join(이어줄 구분 문자, 이을 문자열); 로 파라메타의 위치가 반대.)

 

주요 함수로는 int countTokens(); / boolean hasMoreTokens(); / String nextToken(); 으로 Iterator와 비슷하다.

 

 

- 투 포인터란? 이중 for문과의 차이?

: 투 포인터는 두 개의 포인터를 만들고, 각각이 가리키는 원소에 의미를 부여하여 해결하는 알고리즘. 두 개의 포인터가 움직이는 횟수의 합이기 때문에, 2N의 시간으로 많은 경우에 O(n^2)O(n)의 시간복잡도로 떨어트린다.

두 개의 포인터는 단일 방향, 다른 방향, 하나는 단방향 다른 하나는 양방향의 경우가 있다.

 

 

양쪽 끝단에서 left, right 포인터를 잡고, 양쪽 합인 sumtarget보다 작으면 left를 오른쪽으로 이동, 크면 right를 왼쪽으로 이동. (단 정렬이 되어 있어야 한다.) 이런 경우는 target이 오직 한 쌍의 합으로만 이루어질 때 가능하다.

 

시간복잡도로 100,000이 넘어가면 쓰지 말라는 걸 감지해야 한다.

예를 들어 for문은 O(n)이고, 이중 for문은 O(n^2)인데

제한 배열 길이가 1000 이하 0 이상이라면 100,000이 넘어가므로 안 됨. (time limit)

for문의 시간복잡도를 보려면 가장 안쪽 for문을 주의 깊게 보자.

그 이하라면 된다.

 

+ O(n log n)sort (자바에서 제공하는 sort. 퀵정렬)

 

 

- 슬라이딩 윈도우란? 슬라이딩 윈도우를 잘 사용하는 방법?

: 투 포인터의 하위 개념으로, 배열에서 n개의 원소를 하나의 창문으로 보고 그대로 창문을 옮겨가며 보는 기법이다. 예를 들어 창문이 3이라면 (0, 1, 2) -> (1, 2, 3)으로 이동한다.

이 기법은 겹치는 부분을 잘 이용해야 한다. 예를 들어 창문 구간의 합을 매번 구하라는 문제라면, (0, 1, 2) -> (1, 2, 3) 예시에서 12는 겹치므로 0을 빼주고 3을 더하면 된다.

 

 

- 시간복잡도란? 각 상황의 예시와 설명?

: Big O, 오메가, 세타가 있으며 입력 크기와 연산량의 함수 관계.

O( 2^n / n^2 / n log n / n / log n / 1 ) 등이 있다.

O : 최악의 상황을 가정하고 연산량을 계산.

오메가 : 최선의 상황을 가정하고 연산량을 계산.

세타 : 최악과 최선의 평균량으로 연산량을 계산.

 

 

- [Java] 링크드 리스트에서, 맨 앞의 인덱스를 꺼내고 바로 제거하는 함수는?

: LinkedList.pollFirst();

 

 

- [Java] toStringString.valueOf(String) 의 차이점은?

: toString은 매개변수가 null일 경우 Exception을 발생시키고, 매개변수가 특정 자료형이 아니어도 문자열을 반환하지만, valueOf는 매개변수가 null이라면 문자열로 “null”을 반환시킨다.

 

 

- 데몬 (daemon)이란?

: 사용자가 직접 제어하지 않고, 따라서 인터페이스가 없는, 백그라운드에서 항시 실행되며 여러 작업을 하는 프로그램. 윈도우의 서비스 같은 개념이며 (=‘시스템 프로세스’), 프로그램 이름 뒤에 d가 붙는다.

 

이름의 유래는 열역학에 영향을 끼치며 보이지 않는 곳에서 일을 하는 맥스웰의 도깨비에서 따왔다고 한다.

 

자바의 데몬 스레드는 우선순위가 낮은 스레드로, 사용자의 애플리케이션을 보조하는 역할을 하는 스레드다. JVMGarbageCollection이 있으며, 프로그램이 종료될 때 JVM은 데몬 스레드의 종료를 기다리지 않고 죽인 후 셧다운한다. 따라서 종료 시 수행되어야 할 특별한 작업은 데몬에 넣지 않는 것이 좋다.

https://haruhiism.tistory.com/9

https://hbase.tistory.com/285

 

 

- 스프링에서 컴포넌트 스캔 이외의 방법? 해당 어노테이션?

: 직접 사용자가 빈을 등록하는 방법이 있고, 방법은 원하는 위치에

클래스를 만들고 @Configuration 어노테이션을 붙인 후, 빈에 등록할 함수에 @Bean 어노테이션을 붙여준다. Autowired처럼 특정 클래스가 다른 클래스의 객체를 매개변수로 요구한다면, 같은 위치에서 @Bean 처리된 함수에 return new 필요한 객체; 를 하고 매개변수로 함수 자체를 넣어주면 된다. 이를 생성자 주입이라 한다.

 

, Controller 어노테이션과 컨트롤러는 어쩔 수 없다. 어차피 스프링이 관리하니까.

 

추가로 실무에서는 컴포넌트 스캔을 주로 활용하지만, 자바 빈을 활용하는 방법은 repository의 교체에서 타 클래스의 코드를 건들지 않고 바꿀 수 있게 해준다.

 

 

- DI3가지 종류는? 특징?

생성자 주입 : 요즘 권장하는 스타일. 애플리케이션 조립 시점에 한 번 실행됨.

필드 주입 : 필드를 더 이상 수정할 수 없으므로 추후 수정이 불가능.

setter 주입 : 필드를 만들고 수정하는 방식인데, 접근하려면 public으로 열려 있어야

되므로 보안상의 문제가 발생한다.

추가로, 어떤 개발자든 호출할 수 있으므로 주의. (막을 수 없음.)

 

 

- [Java] 자바의 Date 클래스의 한계와 그걸 보완한 클래스는? Deprecated?

: Date 클래스는 JDK 1.0 버전부터 함께했으며, API를 보면 현재는 생성자를 포함한 많은 함수가 Deprecated라 적혀 있다. Deprecated는 더 이상 지원하지 않는 기능이므로 사용을 자제하라는 뜻으로서, 지역화(국가별 현재 날짜와 시간)를 반영하지 못하여 이를 해결하기 위해 나온 클래스가 Calender 클래스이다.

 

 

- [Java] 컬렉션 프레임워크의 주요 세 클래스와 상속 관계?

 

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

23.03.17  (0) 2023.03.21
23.03.16  (0) 2023.03.17
23.03.14  (2) 2023.03.15
23.03.13  (0) 2023.03.14
23.03.10  (0) 2023.03.13