java 30

[Java] 멀티 쓰레드(Multi Thread)

1. Main Thread 모든 Java Application은 main thread 가 main 메소드를 실행하면서 시작된다. 이러한 메인 쓰레드안에서 싱글 스레드가 아닌 멀티 스레드 애플리케이션은 필요에 따라 작업 스레드를 만들어 병렬로 코드를 실행할 수 있다. Multi Thread는 메인 스레드가 종료되어도 실행 중인 Thread가 하나라도 있으면 프로세스는 종료되지 않는다. 2. Thread 생성 2.1 Thread 클래스로부터 직접 생성 java.lang.Thread 클래스로부터 작업 스레드 객체를 직접 생성하려면 Runnable을 매개 값으로 갖고 있는 생성자를 호출한다. Runnable에는 run() 메소드 하나가 정의되어 있으며, 구현 클래스에서 run()을 재정의하여 실행할 코드를 작성..

Study/Java 2021.09.14

[Spring] @ModelAttribute

@ModelAttribute Client가 전송하는 multipart/form-data 형태의 Http body와 Http 파라미터들을 Setter를 통해 객체에 1대 1 바인딩하는 역할이다. URI path, 요청 파라미터, 세션 등 다양한 곳에서 선언 가능하다. 바인딩 에러를 직접 다루고 싶은 경우 BindingResult 타입을 추가할 수 있으며, @Validate 어노테이션을 통해 매개변수에 대한 검증을 할 수 있다. 객체 먼저 Dante 객체를 선언하여 지역변수를 선언하고 Getter와 Setter를 작성한다. (여기서는 Getter, Setter는 생략) public class Dante { private String deadLift; private String squat; private St..

Study/Spring 2021.09.08

[Spring] Dispatcher Servlet

DispatcherServlet 에서 dispatcher란 "보내다, 급파하다" 라는 뜻을 가지고 있다. 디스패처 서블릿의 역할은 이처럼 Http 프로토콜 요청이 들어오는 가장 앞 단에서 컨트롤러에게 클라이언트의 요청을 전달하고, 컨트롤러가 리턴한 결과값을 View에 전달하여 알맞은 응답을 생성하도록 하는 Front Controller 이다. Spring Framework 의 유일한 프론트 컨트롤러인 DispatcherServlet 은 Spring MVC의 핵심 요소이다. 먼저 web.xml 쪽을 살펴보자. contextConfigLocation /WEB-INF/spring/root-context.xml org.springframework.web.context.ContextLoaderListener ap..

Study/Spring 2021.08.24

[Spring] Request Mapping - httpMethod

@RequestMapping 어떠한 메소드를 지정하지 않으면 http의 모든 메소드를 허용한다. Http method 종류 GET, POST, PUT, DELETE, PATCH 등... GET 특정한 리소스 가져오도록 요청 오직 데이터를 받기만 함 캐싱 사용 가능 *멱등성(Idempotent) POST 리소스 생성 및 수정 요청 요청 바디에 데이터 포함 캐싱 사용 불가능 PUT 특정 리소스를 현재 메시지의 값으로 생성하거나 만약 존재한다면 기존 리소스 덮어쓰기 Post와의 차이 POST의 URI는 보내는 데이터를 처리할 리소스 PUT 의 URI는 보내는 데이터에 해당하는 리소스 -> PUT은 리소스의 위치를 알고 URI를 지정해야 한다. 멱등성(Idempotent) PATCH 리소스를 부분적으로 변경 D..

Study/Spring 2021.08.15

프로그래머스 / 비밀지도(Java)

문제 설명 암호화된 비밀 지도를 해독하기 위해 지도 1과 지도 2를 합쳐야 한다. 입력 형식 입력으로 지도의 한 변 크기 n과 2개의 정수 배열 arr1, arr2가 들어온다. 1 ≦ n ≦ 16 arr1, arr2는 길이 n인 정수 배열로 주어진다. 정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. 즉, 0 ≦ x ≦ 2n - 1을 만족한다. 매개변수 값 n 6 arr1 [46, 33, 33 ,22, 31, 50] arr2 [27 ,56, 19, 14, 14, 10] 출력 ["######", "### #", "## ##", " #### ", " #####", "### # "] 내가 생각한 해별 방법 1. arr1과 arr2의 값을 이진수로 바꾼다. 2. 이진수를 비트 연산(OR)하..

Study/Algorithm 2020.11.16

프로그래머스 / 캐시 (JAVA)

문제 설명 캐시 크기에 따른 실행시간 측정 프로그램을 작성하는 것이다. 조건 1 : 캐시 교체 알고리즘 LRU(Least Recently Used)를 사용한다. 조건 2 : cache hit일 경우 실행시간은 1이다. 조건 3 : cache miss일 경우 실행 시간은 5이다. 조건 4 : 영문자로만 구성되어 있으며, 대소문자 구분을 하지 않는다. LRU 알고리즘 : 가장 오랫동안 사용되지 않은 데이터를 삭제하고 새로 추가 LFU 알고리즘 : 가장 적은 참조 횟수를 가진 데이터를 삭제하고 새로 추가 내가 생각한 해결 방법 가장 오랫동안 사용하지 않은 데이터를 삭제하는 것이기 때문에 큐를 사용하면 될것이라 생각하였다. 큐는 FIFO방식으로 그전에 cache가 hit 된다면 앞에 있는 데이터를 삭제하고, m..

Study/Algorithm 2020.11.04

프로그래머스 / 뉴스 클러스터링(JAVA)

문제 뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브는 사용자들이 편리하게 다양한 뉴스를 찾아볼 수 있도록 문제점을 개선하는 업무를 맡게 되었다. 개발의 방향을 잡기 위해 튜브는 우선 최근 화제가 되고 있는 카카오 신입 개발자 공채 관련 기사를 검색해보았다. 카카오 첫 공채..'블라인드' 방식 채용 카카오, 합병 후 첫 공채.. 블라인드 전형으로 개발자 채용 카카오, 블라인드 전형으로 신입 개발자 공채 카카오 공채, 신입 개발자 코딩 능력만 본다 카카오, 신입 공채.. 코딩 실력만 본다 카카오 코딩 능력만으로 2018 신입 개발자 뽑는다 기사의 제목을 기준으로 블..

Study/Algorithm 2020.11.03

프로그래머스 / 짝지어 제거하기(Java)

문제 설명 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다. 예를 들어, 문자열 S = baabaa 라면 b aa baa → bb aa → aa → 의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다. 제한사항 문자열의 길이 : 1,000,000이하의 자연수 문자열은 모두 소문자로 이루어져 있습니다. ..

Study/Algorithm 2020.10.13

프로그래머스 / 영어 끝말 잇기(Java)

문제 1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다. 이전에 등장했던 단어는 사용할 수 없습니다. 한 글자인 단어는 인정되지 않습니다. 다음은 3명이 끝말잇기를 하는 상황을 나타냅니다. tank → kick → know → wheel → land → dream → mother → robot → tank 위 끝말잇기는 다음과 같이 진행됩니다. 1번 사람이 자신의 첫 번째 차례에 tank를 말합니다. 2번 사람이 자신의 첫 번째 차례에 kic..

Study/Algorithm 2020.10.08

프로그래머스 / 폰켓몬 (Java)

문제 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. 홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다. 예를 들어 연구실에 총 4마리의 폰켓몬이 있고, 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번 폰켓몬 한 마리, 2번 폰켓몬 한 마리가 있음을 나타냅니다. 이때, 4마리의 폰켓몬 중 2마리를 고르는 방법은 다음과 같이 6가지가 있습니다. 첫 번째(3번), 두 번째(1번) 폰켓몬을 선택 첫 번째(3번), 세 번째(2번) 폰켓몬을 선택 첫 번째..

Study/Algorithm 2020.10.08