Computer Science

    JVM, GC 알아보자 3

    JAVA에서 GC 도입이 가능했던이유 Weak generational hypothesis 가설 - 대부분의 객체는 금방 접근 불가능 상태가 된다. - 오래된 객체에서 최신의 객체로의 참조는 아주 적게 존재한다. GC의 종류 JVM 버전이 올라가며 다양한 GC 방식이 도입되었다. Serial GC Mark-Sweep-Compaction 알고리즘을 생각하면된다. 순차적으로 사용되지 않는 객체를 식별하여 지우고 압축 과정을 거친다. 디스크 조각모음처럼 동작한다고 생각하면된다. 싱글 스레드만 사용하는 GC Parallel GC Serial GC의 멀티 쓰레드 방식으로 멀티쓰레드를 사용함으로 성능이 향상되어 STW(Stop-the-world)가 줄어든다. Parallel Old GC Parallel GC를 업그레..

    JVM, GC 살펴보자 2

    JVM의 Runtime Data Area의 Heap 영역에 대해 알아보자 Heap 영역은 new 연산자로 생성되는 인스턴스, 배열 등을 저장하는 영역으로 GC가 주 타겟으로 삼는 영역이다. | Eden | S0 | S1 | Old | Permanent | Young Generation Eden 영역 생성된 객체가 처음 위치하는 영역으로 Eden 영역에서 GC가 발생한 뒤에도 장기적으로 살아남은 객체들은 S0로 이동된다. Eden영역이 가득차면 Minor GC가 발생한다. Survivor0, Survivor1 영역 Eden영역에서의 활동과 마찬가지로 MinorGC 발생시 S0영역에서 살아남은 객체들은 S1으로 이동된다. Old / Tenured Generation Old 영역 S0, S1 영역을 오가는 동..

    [리트코드]322. Coin Change

    class Solution: def coinChange(self, coins: List[int], amount: int) -> int: dp = [1e9] * (amount + 1) dp[0] = 0 for coin in coins: for i in range(coin, amount + 1): dp[i] = min(dp[i], dp[i - coin] + 1) return dp[amount] if dp[amount] != 1e9 else -1 사용언어 Python3 난이도 Medium 문제풀이과정 해당 문제를 보자마자 Dynamic..아.. DP를 떠올렸다.. 가장 대중적인 DP문제라고 생각한다. 만들어야하는 값을 DP 배열로 만든다. 0은 포함하지 않기에 +1 내가 가진 코인으로 해당 값을 만드는데 최소..

    [리트코드]172. Factorial Trailing Zeroes

    class Solution: def trailingZeroes(self, n: int) -> int: zero = 0 if n == 0: return 0 temp = math.factorial(n) while temp % 10 == 0: zero += 1 temp //= 10 return zero 사용언어 Python3 난이도 Easy 문제풀이과정 그냥 팩토리얼 메소드로 값을 구해서 해당 문제의 조건을 만족하는 부분을 찾기위한 로직을 구현했다. 다만 엄청나게 느리다. 다른 사람들의 풀이를 보아하니 마지막이 0인 조건을 찾는 과정들로 보인다. 그냥 진짜 수학문제.. Pass 해당 문제의 좋아요가 싫어요보다 정말 조금 많다.

    SOLID 5원칙 (좋은 객체지향 설계란.)

    CleanCode의 저자 로버트 마틴이 소개한 좋은 객체지향 설계의 5가지 원칙 SRP (Single responsibilty priciple) 단일 책임 원칙 - 하나의 클래스는 한가지 기능만 - 응집도는 높히고 결합도를 낮춰야한다. - 코드 변경 시 파급효과가 작도록 설계해야 한다. OCP (Open/close principle) 개방/폐쇄 원칙 - 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. - 추상화와 다형성 - 기존 구성요소는 변하지 않고 쉽게 확장이 가능한 설계를 해야한다. - 역할과 구현을 분리하자 LSP (Liskov subsitution priciple) 리스코프 치환 원칙 - 다형성에서 하위 클래스는 인터페이스 규약을 지켜야한다. - 프로그램의 정확성을 깨뜨리지 않고 하위 타입의 ..

    [리트코드]45. Jump Game II

    class Solution: def jump(self, nums: List[int]) -> int: current_end = 0 jump = 0 far = 0 for i in range(len(nums)-1): far = max(far, nums[i] + i) if i == current_end: jump += 1 current_end = far return jump 난이도 Medium 그리디나 dp문제 같다는 느낌을 받으며 풀이를 시작했다. 처음 있는 곳에서 다음 곳으로 가는 것을 고를때 다다음곳으로 갈수있는 범위가 가장 큰것을 고르려했다. 허나 생각처럼 구해지지 않고 예외 케이스에 계속 걸렸기에 답을 봤다. 위의 풀이는 문제 해설에 나온 풀이다. 그리디 알고리즘으로 풀었다고 하는데 솔직히 이해는 잘 ..

    [리트코드]1854. Maximum Population Year

    class Solution: def maximumPopulation(self, logs: List[List[int]]) -> int: max_year = -1e9 min_year = 1e9 max_po = 0 ye = 0 for i in range(len(logs)): if min_year > logs[i][0]: min_year = logs[i][0] if max_year < logs[i][1]: max_year = logs[i][1] for i in range(min_year, max_year): cnt = 0 for j in range(len(logs)): if logs[j][0]

    [리트코드]1002. Find Common Characters

    from collections import Counter class Solution: def commonChars(self, words: List[str]) -> List[str]: temp = Counter(words[0]) for i in range(1, len(words)): temp &= Counter(words[i]) return temp.elements() 난이도 Easy 파이썬의 Counter함수의 교집합을 사용해서 풀어냈다.

    JVM, GC 살펴보자 1

    웹 개발자 기술 면접의 단골 문제 중 하나인 JVM, GC에 대해서 살펴보자. 해당 회사가 JAVA 기반이라면 높은 확률로 물어본다. 경력의 경우는 별로 중요해보이지 않지만 신입 면접에 경우 필자도 JVM GC 설명을 해보세요 하는 질문을 받아봤고 많은 사람들이 받아본 문제 중 하나다. JVM 자바 버츄얼 머신의 약자로 자바로 만든 프로그램을 읽어들여 실행하는 것이다. OS와 JAVA 사이의 중간 역할을 하는 것으로 이로 인해 JAVA는 JVM만 실행가능하다면 OS와 상관없이 동작할 수 있다. JVM은 메모리 관리를 자동으로 해주는데 이것을 Garbage Collection(GC)라고 한다. (C와 다르게 메모리를 개발자가 관리하지 않아도 된다.) JVM의 구성 요소 Class Loader JVM으로 클..

    [리트코드]740. Delete and Earn

    class Solution: def deleteAndEarn(self, nums: List[int]) -> int: if not nums: return 0 freq = [0] * (max(nums)+1) for n in nums: freq[n] += n #print(freq) dp = [0] * len(freq) dp[1] = freq[1] for i in range(2, len(freq)): #print(freq[i], dp[i - 2], dp[i - 1]) dp[i] = max(freq[i] + dp[i-2], dp[i-1]) print(dp) 혼자서 풀어내지 못했다. 역시나 DP문제 나의생각방식 카운터로 모은다음에 곱해서 가장 큰 값을 기준으로 양옆보다 크면 더하고 양옆 없애버리고 아니면 그 다음 ..