공부하고 기록하는, 경제학과 출신 개발자의 노트
반응형

분류 전체보기 565

Java8 Stream - Optional - Date 정리

인프런 '더 자바- 자바8' 백기선님 강의내용 정리 Stream 정의: 연속된 데이터를 처리하는 Operation 모음. Collection이 데이터를 모아놓은 자료구조라면, Stream은 이걸 토대로 데이터를 원하는 방식으로 처리하는 것. 따라서 데이터 저장소의 개념이 아니다. 특징 Function in Nature. 원본 데이터를 변경하지 않는다. Stream stringStream = names.stream().map(String::toUpperCase); Stream으로 어떤 연산을 수행한 결과는 stream 객체이고, 원본은 바뀌지 않는다. 스트림으로 들어온 데이터는 한 번만 처리 (반복문 개념이 아님) seamless하게 들어오는 데이터 처리 가능. (무제한으로 데이터가 들어오면, 무한히 처리..

[Python] LeetCode 3. Longest Substring without repeating characters

leetcode.com/problems/longest-substring-without-repeating-characters/ Longest Substring Without Repeating Characters - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 중복 문자열 없는 가장 긴 부분문자열 구하기. 슬라이딩 윈도우 + 투 포인터로 해결이 가능하다. 아래 풀이는 이 책의 코드를 참고했다. 파이썬 알고리즘 인터뷰 국내도서 저자 : 박상길 출판 : 책만 2020..

Java Reflection 정리

인프런 '더 자바 - 코드를 조작하는 다양한 방법' 백기선님 강의내용 정리 Reflection 코드를 조작하는 다양한 방법 중 하나. 정의된 클래스 / 메소드 / annotation 정보를 확인하고 참조하기 인스턴스를 생성하고, 필드값을 변경하며, 메소드를 실행할 수 있는 방법. 스프링부트 프로젝트 생성. dependency에 스프링 웹 추가. BookService와 BookRepository라는 두 개의 컴포넌트를 생성하고, BookService에 Autowired로 BookRepository를 추가한 뒤 BookServiceTest 코드를 아래처럼 작성한다. package com.inspirit941.thejavaspringreflection; import org.junit.jupite..

[Python] LeetCode 739. Daily Temperature

leetcode.com/problems/daily-temperatures/ Daily Temperatures - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 각각 현재 날짜를 기준으로, 현재보다 더 온도가 높은 날이 있기까지 며칠이 걸리는지를 구하는 문제. stack을 사용해서 풀 수 있는, 백준 '오큰수' 와 완전히 동일한 문제. [Python] 백준 17298. 오큰수 스택을 사용해 풀 수 있는 문제. _ = input() # len(arr) 값과 똑같아서..

[Python] LeetCode 234. Palindrome Linked List

leetcode.com/problems/palindrome-linked-list/ Palindrome Linked List - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 링크드 리스트가 주어졌을 때, 값이 좌우대칭인 Palindrome인지 판별하는 문제. 사실 Deque를 쓰면 매우 간단한 문제다. Deque까지 쓰지 않더라도, 리스트로 값을 저장할 수만 있다면 리스트 파싱으로도 쉽게 해결할 수 있다. 링크드 리스트의 특징을 살린 방법인 Runner를 적용해..

Java Concurrent Programming - Executors, Callable, Future, CompletableFuture

백기선님의 인프런 더 자바8 강의 내용 정리. Concurrent Programming 이전까지의 자바 Concurrent Programming을 알아야 한다. 자바의 기본 Concurrent Programming Concurrent 소프트웨어 동시에 여러 작업을 할 수 있는 SW 자바에서는 멀티프로세싱, 멀티쓰레드 둘 다 가능하다. 이 중 멀티쓰레드를 다룸. package com.inspirit941.java8to11; public class testConcurrentProgramming { static class MyThead extends Thread { @Override public void run() { System.out.println("Thread: " + Thread.currentThrea..

[Python] LeetCode 121. Best time to buy and sell stock

leetcode.com/problems/best-time-to-buy-and-sell-stock/ Best Time to Buy and Sell Stock - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 한 번의 거래로 낼 수 있는 최대 이익을 계산하는 문제. 저점에 사서 고점에 팔아야 최대 수익이 남는데, 저점에서 먼저 산 뒤, 이후 최고점에서의 차액이 가장 커야 한다. 선후관계가 있다는 소리. 카데인 알고리즘을 활용하면 O(n)에 풀어낼 수 있다고 한다. ..

Java 함수형 인터페이스 - Lambda 표현식 - 메소드 레퍼런스 정리

함수형 인터페이스 추상 메소드가 하나만 있는 인터페이스 자바8에서부터 @FunctionalInterface Annotation을 지원. static과 default로 선언하고 구현한 함수는 '추상 메소드'가 아니므로 괜찮다. 함수형 프로그래밍을 하기 위해서는 해당 언어에서 함수(메소드)가 First Class Object여야 한다. 해당 함수는 Pure Function이어야 한다. 는 전제조건이 필요하고, 자바는 함수를 First Class Object로 취급하므로 프로그램 언어의 제약은 없다. cf. 함수형 인터페이스와 lambda는 자바에서 지원하는 문법일 뿐, 함수형 프로그래밍을 강제하는 게 아니다. First Class Object? 아래의 조건을 만족하는 객체를 First Class Object..

[Python] LeetCode 238. Product of Array Except self

leetcode.com/problems/product-of-array-except-self/ Product of Array Except Self - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 배열을 입력받아, output[i]가 num[i]를 제외한 나머지 모든 요소의 곱셈 결과가 되도록 output을 생성하는 문제. 나눗셈을 사용하지 말라는 제약조건 때문에, 원소를 전부 곱한 다음 num[i]로 나누는 식의 접근이 불가능하다. 아래 코드는 이 책을 참고하여..

JVM의 ClassLoader 정리

JVM 구조 JVM은 다섯 가지 컴포넌트로 구성되어 있다. 클래스 로더 시스템 : 컴파일 결과로 만들어진 .class 바이트코드 파일을 읽어들여 메모리에 배치. 로딩, 링크, 초기화 세 가지 과정을 거친다. 메모리 Runtime Engine: 바이트코드를 읽어들이는 인터프리터가 작동하는 영역. 바이트 코드를 기계어로 변환하면서 Line by Line 실행하는 방식. 여기 인터프리터가 기계어 코드를 실행할 때, 한 번 변환한 바이트코드를 또 변환하는 대신 실행한 코드를 저장하는 영역이 있다. 그게 Code Cache (JIT Compiler라고도 부른다). 프로그램 실행속도를 향상시키는 용도. Garbage collection. Native Method interface Native Method libra..

반응형