공부 기록들

    로또 구현 피드백 정리

    로또 구현 피드백 정리 Custom Exception 생성 시에 어떤 값으로 인해 예외가 던져졌는지 보여주자 계산 과정에서 double를 리턴한다고 해당 계산 재료를 미리 double로 던져두면 혼동이 생길 수도 있으니깐 int로 일단 받고 나중에 (double)로 캐스팅하는 것이 좋다. 이번 구현을 통해 사용해본 것 일급 컬렉션 Enum 사용법 TreeSet Stream 원시 값 포장

    [모던 자바 인 액션 스터디] 3장 람다 표현식

    3주간 스터디를 진행하게 됐다. 안그래도 이전에 쭉 정리했던 자바 인 액션 책을 다시 읽어보려던 참이었는데 타이밍 맞게 스터디가 있어 참여하게 됐다. 나름 간단하게 정리하려고 노력했다. 람다 표현식 정리 람다 표현식은 익명 함수를 단순화한 것 Comparator byWeight = new Comparator () { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()); } }; => Comparator byWeight = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()); 다음과 같이 익명 함수를 단순화 시킨다. 어디에서 람다를 사용..

    자동차 경주 1차 피드백 정리

    자동차 경주 1차 피드백 정리 개행문자 대신 line.seperator() 를 사용하자. OS마다 개행문자가 다르기 때문이다. private boolean isvalid(String name) { name.equals(""); } //위의 코드 보다는 private boolean isValid(String name) { "".equals(name); } //위 코드를 사용해서 NPE를 최소화하자 View로 뽑아낼 것을 toString() 메서드에 정의하게 되면, View에 관한 노출 정책 변경이 일어날 때 마다 도메인의 toString()을 수정해야한다. 따라서 View는 View에서 그려주고 toString()은 객체의 정보를 잘 나타낼 수 있도록 바꾸는 것을 지향한다. Pattern을 매번 생성하는 ..

    개인적인 알고리즘 문제 풀이 팁 기록

    투 포인터 두 점을 이동하면서 하는 알고리즘인데, n^2 형식으로 나오면 별로 좋지않다. 두 점을 어떻게 잡고 시작하느냐가 포인트인데 증가와 감소가 이루어 질 수 있도록 잡아야 한다. 1 2 3 4 배열이 있고 해당 배열의 각 2개를 뽑아서 더해서 m 값에 가깝도록 한다고 하면 왼쪽 점을 1 오른쪽 점을 4에 두고 시작하게 되면 왼쪽 점을 올리면 더한 값의 증가가 이루어지고, 오른쪽 점을 내리면 더한 값의 감소가 이루어질 것이다. 그런데 만약 덧셈이 아니라 뺀 값이 m에 가깝도록 한다면?? 기존과 같이 왼쪽 점을 1 오른쪽 점을 4에 둔다면 왼쪽점을 증가시키면 뺀 값의 감소가 이루어지고 오른쪽 점을 감소시켜도 뺀 값의 감소가 이루어 질것이다. 이럴 때에는 한 쪽에 두 점을 같이 놔야한다. 왼쪽 점을 1 ..

    웹 캐싱 기법

    웹 캐싱 기법 웹캐싱 캐싱 기법은 저장장치 계층 간의 속도 차이를 완충시켜주기 위해 컴퓨터 구조, 운영체제, 데이터베이스 등의 분야에서 각각 캐시 메모리, 페이징 기법, 버퍼링 기법 등으로 널리 연구되어왔다. 웹캐싱이란 웹 사용자에 의해 빈번히 요청되는 데이터를 사용자와 지리적으로 가까운 웹캐시 서버에 보관해 빠른 서비스를 가능하게 하는 기법을 말한다. 웹캐싱 기법은 웹서버 또는 웹 사용자 차원에서의 캐싱뿐 아니라 웹캐싱만을 전담하는 프록시서버에 의해 광범위하게 이루어지고 있다. 프록시서버는 통상적으로 일개 그룹의 웹 사용자에 대한 서비스 지연시간을 줄이기 위해 사용되며, 궁극적으로는 네트워크의 대역폭 절약과 함께 웹서버의 부하를 줄이는 역할도 담당하게 된다. 이와 반대로 웹서버 쪽에는 역방향 프록시캐시..

    디스크 관리

    디스크 관리 디스크는 컴퓨터 시스템의 대표적인 2차 저장장치이다. 디스크의 구조 디스크 외부에서는 디스크를 일정한 크기의 저장공간들로 이루어진 1차원 배열처럼 취급하게 된다. 이 일정한 크기의 저장공간을 논리블록이라고 하며, 디스크에 데이터가 저장될 때에는 논리블록 단위로 저장되고, 디스크 외부로 입출력이 일어날 때에도 논리블록 단위로 전송된다. 논리블록에 저장된 데이터를 접근하기 위해서는 배열을 접근하는 것처럼 해당 블록의 인덱스 번호를 디스크에 전달해야 한다. 그러면 디스크 컨트롤러는 해당 논리블록이 저장된 물리적 위치를 찾아 요청된 데이터에 대한 입출력 작업을 수행하게 된다. 이때 각 논리블록이 저장되는 디스크의 물리적인 위치를 섹터라고 부른다. 즉 논리블록 하나가 섹터 하나와 1대1로 매핑되어 저..

    가상 메모리

    가상메모리 프로그램이 CPU에서 실행되려면 실행에 당장 필요한 부분이 메모리에 올라와 있어야 한다. 한편 여러 프로그램이 동시에 수행되는 시분할 환경에서는 한정된 메모리 공간을 여러 프로그램이 조금씩 나누어서 사용한다. 따라서 운영체제는 어떤 프로그램에게 어느 정도의 메모리를 할당할 것인가 하는 문제에 당면하게 된다. 운영체제는 모든 프로그램들에게 같은 크기의 메모리를 할당하는 것이 아니라 몇몇 프로그램들에게 메모리를 집중적으로 할당하고 시간이 흐르면 회수하는 방식을 사용한다. 그 이유는 프로세스의 빠른 수행을 위해 프로그램마다 최소한 확보해야 하는 메모리의 크기가 존재하기 때문이다. 운영체제는 CPU에서 당장 수행해야 할 부분만을 메모리에 올려놓고 그렇지 않은 부분은 디스크의 스왑 영역에 내려놓았다가 ..

    메모리 관리

    메모리 관리 컴퓨터 내에서는 byte 단위로 메모리 주소를 부여하기 때문에 32 비트 주소 체계를 사용하면 2^32 바이트만큼의 메모리 공간에 서로 다른 주소를 할당할 수 있다. 컴퓨터상의 주소는 32비트를 그대로 사용하지 않고 효율적인 운영을 위해 연속된 일련의 영역을 행정구역처럼 묶어서 사용한다. 보통 4KB(2^12byte) 단위로 묶어서 페이지라는 하나의 행정구역을 만든다. 페이지 하나의 크기가 2^12 바이트이므로 페이지 내에서 바이트별 위치 구분을 위해서는 12비트가 필요하다. 따라서 총 32비트의 주소 중 하위 12비트는 페이지 내에서의 주소를 나타내게 된다. 이번 장은 메모리를 어떠한 행정구역으로 나누어 관리하고 어떻게 물리적 메모리에 올라가서 주소를 할당받는지 본다. 주소 바인딩 프로그램..