JAVA 51

# Level1 - 크레인 인형 뽑기

[문제] 인형이 담긴 2차원 배열 board와 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 집어 올린 인형은 바구니에 쌓이게 되고 인형은 순서대로 쌓이게 됩니다. 이 때, 바구니에 똑같은 인형이 연속해서 담기면 똑같은 인형 두개는 터트려져 사라집니다. 그럼 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution 함수를 완성해주세요. [내 풀이] 인형이 담기는 순서가 항상 보장되고, 인형이 터지는 조건은 크레인이 잡은 인형과 바구니에 가장 마지막에 담긴 인형이 같을 때라는 조건이 핵심이므로 큐가 아닌 스택을 사용하였다. 사실 실무에서 stack을 써본적은 없는데 peek()과 pop()의 차이도 확실히 알게 되었다. publ..

JAVA/Argorithm Test 2020.10.27

# Java - ScheduledExecutorService 와 Springboot 의 @Scheduled 예제

특정 주기마다 어떤 동작을 수행(스케줄링)하는 프로그램을 작성할 때, 구현 방법은 다양할 것이다. 그 중에서 오늘은 ScheduledExecutorService 와 Springboot의 @Scheduled 를 이용한 스케줄링 방법에 대해 알아보려고 한다. 1. ScheduledExecutorService 먼저 ScheduledExecutorService는 Java 1.5부터 지원되는 스케줄링이 가능한 Executor 서비스로 인터페이스이며, 구현체로 ScheduledThreadPoolExecutor() 가 있다. ScheduledExecutorService는 3가지의 지연 스케줄링 방식을 지원한다. /** * 지정된 dealy 시간만큼 지연 후에 1번의 command를 실행한다. * * @param co..

JAVA/SpringBoot 2020.05.08

# Java Concurrency In Practice - Chapter3

Sharing Object 2 장 초반에 올바른 동시 프로그램 작성은 주로 변경 가능 공유 상태에 대한 액세스 관리에 관한 것이라고 언급했습니다. 이 장에서는 여러 스레드가 안전하게 액세스 할 수 있도록 객체를 공유 및 게시하는 기술에 대해 설명합니다. 이 둘은 스레드 안전 클래스를 구축하고 java.util.concurrent 라이브러리 클래스를 사용하여 동시 애플리케이션을 안전하게 구성하기위한 토대를 마련합니다. 우리는 동기화 된 블록과 메소드가 어떻게 동작이 원자 적으로 실행되도록 하는지를 보았지만 동기화는 원 자성 또는 "중요한 부분"에 대한 경계라는 일반적인 오해입니다. 동기화에는 또 다른 중요하고 미묘한 측면이 있습니다 : 메모리 가시성. 우리는 다른 스레드가 객체를 사용할 때 한 스레드가 객..

JAVA/Concurrency 2020.02.15

# Java Concurrency In Practice - Chapter 2

Thread Safety Java 동기화의 기본 메커니즘은 synchronized 키워드이지만 "synchronized (동기화)"라는 용어에는 volatile 변수, exclusive locking (명시적 잠금) 및 atomic 변수의 사용도 포함된다. 이 규칙이 적용되지 않는 "특별한"상황이 있다고 생각하려는 유혹을 피해야한다. Java의 동기화 메커니즘을 사용하지 않더라도 테스트를 통과하고 프로그램이 작동하고 수년 동안 성능이 좋을 수 있지만, 그 프로그램은 여전히 동기화 문제로 인해 언제든지 중단 될 가능성이 있는 위험한 프로그램일 것이다. 여러 스레드가 적절한 동기화없이 동일한 변경 가능 상태 변수에 접근하면 프로그램은 예기치 않게 동작할 것이다. 이런 문제를 해결하기 위한 세가지 방법이 존재..

JAVA/Concurrency 2020.02.13

# Java Concurrency In Practice - Chapter 1

Introduction 1.1 간략한 동시성의 역사 (A (Very) Brief History of Concurrency) 리소스 활용 (Resource utilizatio) 프로그램은 입력 또는 출력과 같은 외부 작업을 기다려야하며 대기하는 동안 유용한 작업을 수행 할 수 없다. 이 대기 시간을 사용하여 다른 프로그램을 실행하는 것이 더 효율적일 것이다. 공평 (Fairness) 여러 사용자 및 프로그램이 시스템 리소스에 대해 동일한 소유권을 주장 할 수 있다. 한 프로그램을 실행 한 다음 그 프로그램이 완전히 종료된 후, 다른 프로그램을 시작하는 것보다 세밀한 시간 슬라이싱을 통해 컴퓨터 자원을 공유하는 것이 좋다. 편의 (Convenience) 단일 프로그램이 모든 작업을 수행하도록 작성하는 것보다..

JAVA/Concurrency 2020.02.03

# Java Concurrency and Multithreading Tutorial - Concurrency vs Parallelism

Concurrency(동시성) 및 Parallelism(병렬 처리)라는 용어는 종종 다중 스레드 프로그램과 관련하여 사용된다. 그러나 Concurrency과 Parallelism은 정확히 무엇을 의미하며, 이 두 용어는 어떻게 다른가? Concurrency Concurrency는 응용 프로그램이 둘 이상의 작업을 동시에 진행하고 있음을 의미한다. 컴퓨터에 CPU가 하나만 있으면 응용 프로그램이 동시에 두 개 이상의 작업을 진행하지 못할 수 있지만, 응용 프로그램 내부에서 한 번에 두 개 이상의 작업이 처리되고 있다. 대신 CPU는 작업이 완료 될 때까지 다른 작업간에 전환한다. 내부에서 단일 스레드만 실행하더라도 동시 응용 프로그램을 가질 수 있다. CPU가 작업이 완료될 때까지 작업간 전환을 반복하며 ..

JAVA/Concurrency 2020.01.31

# Java Concurrency and Multithreading Tutorial - Multithreading Benefits

Multithreading Benefits 멀티 스레딩의 가장 중요한 이점은 아래와 같다. Better CPU utilization Simple program design in some situations More responsive programs More fair division of CPU resources between different tasks Better CPU Utilization 로컬 파일 시스템에서 파일을 읽고 처리하는 응용 프로그램을 상상해봐라. 디스크에서 파일을 읽는데 5초가 걸리고 처리하는데 2초가 걸린다고 할 때, 두 개의 파일을 읽으면 총 14초가 소요된다. 디스크에서 파일을 읽을 때 대부분의 CPU 시간은 디스크가 데이터를 읽을 때까지 대기한다. 그 시간 동안 CPU는 거의 ..

JAVA/Concurrency 2019.12.31

# Java Concurrency and Multithreading Tutorial

Java Concurrency는 Java 플랫폼에서의 멀티스레딩, 동시성 및 병렬 처리를 다루는 용어이다. Java Concurrency Tutorial에서는 멀티스레딩, 동시성 구성, 동시성 문제점, 비용 등 Java 멀티스레딩 관련 이점의 핵심 개념을 다룰 것이다. What is Multithreading? 멀티스레딩은 동일한 응용 프로그램 내에 여러 실행 스레드가 있음을 의미한다. 스레드는 응용 프로그램을 실행하는 별도의 CPU와 같다. 따라서 다중 스레드 응용 프로그램은 여러 CPU가 동시에 코드의 다른 부분을 실행하는 응용 프로그램과 같다. 단, 스레드는 CPU와 같지는 않다. 일반적으로 단일 CPU는 여러 스레드간에 실행 시간을 공유하여 지정된 시간동안 각 스레드 간에 전환이 일어나며, 응용 ..

JAVA/Concurrency 2019.12.30

# Intellij SpringBoot 기동 error # Failed to parse configuration class

얼마 전부터 SpringBoot를 본격적으로 공부하기 시작했는데, 오늘 황당한 경험을 했다. 이 문제가 IDE별로 차이가 발생하는 문제인지는 모르겠으나, 필자의 개발툴은 Intellij를 사용하고 있다. 먼저 에러 로그와 상황을 보자. # error log org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [개발 환경] - Intellij - multi module gradle - SpringBoot 위 같이 개발 환경을 구성하고 main class를 작성했을 뿐인데, 저런 에러가 발생했다. [해결방안] main class를 package 안에 위치 시켜라. 에러가 깔끔히 사라..

JAVA/Error 2019.11.05