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

분류 전체보기 500

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..

JVM Garbage Collection 정리

Garbage Collection (JDK 11 기준) Application의 동적 메모리 관리를 자동으로 수행하는 JVM 프로그램을 의미한다. Garbage는 "실행중인 프로그램의 어느 포인터로도 접근할 수 없는 객체"를 지칭한다. GC는 기본적으로 아래 네 단계를 거쳐 작업을 수행한다. 운영체제로부터 메모리를 할당받거나 반납한다. 메모리를 요청하는 프로르램에게 메모리를 할당한다. 애플리케이션이 사용하고 있는 / 사용하고 있지 않는 메모리 영역을 파악한다. 사용하지 않는 메모리 영역을 회수한다. 프로그래머가 메모리 관리를 직접 할 필요가 없다는 점에서 유용하고, 프로그래머가 메모리 관련해서 전혀 신경쓰지 않아도 자바 프로그램이 문제 없이 동작하는 경우도 많다. 하지만 프로그램의 규모가 커질 경우 "어떤..

[Python] 프로그래머스. 쿼드압축 후 개수세기

programmers.co.kr/learn/courses/30/lessons/68936 코딩테스트 연습 - 쿼드압축 후 개수 세기 [[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]] [4,9] [[1,1,1,1,1,1,1,1],[0,1,1,1,1,1,1,1],[0,0,0,0,1,1,1,1],[0,1,0,0,1,1,1,1],[0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1],[0,0,0,0,1,0,0,1],[0,0,0,0,1,1,1,1]] [10,15] programmers.co.kr 분할정복 문제. 백준 2630번 "색종이 만들기"와 정확히 똑같은 문제. 리턴 형식까지도 동일하다. www.acmicpc.net/problem/2630 2630번: 색종이 만들기 첫째 줄에..

JVM의 메모리 구조 및 할당과정

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

[Python] 프로그래머스. 3진법 뒤집기

programmers.co.kr/learn/courses/30/lessons/68935 코딩테스트 연습 - 3진법 뒤집기 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수 programmers.co.kr 단순구현 문제. 진법 변환하는 원리만 알면 풀 수 있다.

[Python] LeetCode 15. 3Sum

leetcode.com/problems/3sum/submissions/ 3Sum - 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 리스트에서 "합쳐서 0이 되는 세 숫자의 조합"을 리스트로 저장해 반환하는 문제. combinations로 모든 경우의 수를 조사할 경우 timeout이 발생한다. 투 포인터로 해결할 수 있는 문제. cf. 이 코드는 아래의 책을 참고했습니다. 파이썬 알고리즘 인터뷰 국내도서 저자 : 박상길 출판 : 책만 2020.07.15 상세보기