본문 바로가기

Web

자주 묻는 Programming 질문들

오버로딩 vs 오버라이딩

...더보기

오버라이딩은 상위 클래스, 혹은 인터페이스의 메서드를 알맞게재정의 하는것.
오버로딩은 동일메서드에 대해 다른 인자를 받는 경우에 대해 중복정의하는것.

인터페이스 vs 추상클래스

...더보기

인터페이스는 함수의 구현을 강제하기 위해.
추상클래스는 해당 추상클래스를 상속받아서 기능을 이용하고 확장시키는데 있음.

가비지 컬렉터?

...더보기

언제 실행되는가?
JVM은 메모리를 부여받고 프로그램들을 실행하다가 **메모리가 부족해지는 순간**이 오면 OS에게 추가로 메모리를 요청한다.
바로 이 메모리를 더 달라고 요청하는 때에 가비지 콜렉터가 실행된다.
또한 서버의 경우 24시간 돌아가는데 이 때는 JVM이 한가할 때 가비지 콜렉터가 수행된다.

가비지컬렉터는 주로 주소를 잃어버려서 사용할 수 없는 메모리, 즉 이를 가비지라고 부르는데 이들을 제거한다


GET vs POST

...더보기

단순히봣을때 get은 주소값으로 변수를 보낸다. 그렇기 때문에 보낼 수 있는 양이 한정되어있고 그래서 원하는 값을 보낸다기보다는, 어떠한 값을 주소에 넣어서 요청할 때 주로 사요한다. POST방식은 from형태를 통해 보내므로 많은 양을 보내는데 적합하다. 어떤 값들을 요청한다. 게시판 리스트를 가져온다? 라고하면 GET이고 글을 작성한다고하면 POST.

REST

...더보기

Representatational State Transfer의 약자로서 자원의 이름을 구분하여 해당 자원의 상태를 주고받는다. GET, POST, PUT, DELETE 를 통해 CRUD 오퍼레이션을 수행한다.
별도의 인프라를 구성할 필요가 없고, 의도하는 바를 알아내기가 쉽다. 하지만 표준이 존재하지 않고 HTTP 메소드에 의존하므로 메서드 종류가 제한적이다.
어플리케이션 분리 및 통합에 필요함. 다양한 멀티플랫폼에서 접근할 수 있는 유용한 데이터.


해시 알고리즘 - 비밀번호

...더보기

단방향 해시함수의 다이제스트 사용
공격자가 전처리된 다이제스트를 많이 가지고 있다면 공격당할 가능성 있음. (레인보우 테이블) 또 해시함수가 속도가 빠르기때문에 수억개를 해볼 수 있다.
보완 기술 ( 솔팅 키 스트레칭)
소금치기는 암호마다 임의의 문자열을 삽입하여 다이제스트를 생성하는 것. 보통 32바이트 이상의 솔트를 사용함.
키스트레칭은 생성된 다이제스트에 N번의 해싱을 더하는것임.

해시

...더보기

쉬운건 나눗셈법, 자릿수 접기.
대표적인걸론 md5, sha(secure hash 알고리즘), ripemd-160, HMAC
충돌 시 “개방주소법”과 “분리연결법” 두가지가 있는데 개방주소법은 충돌이 많이일어나면 성능저하가 심각함.
오픈 해싱 vs 클로즈드 해싱(해시테이블 안에서 해결하는것.)

분리연결법 (체이닝)

...더보기

해시테이블의 해당 해시밸류가 있는 위치에 연결리스트를 만들어서 키값에 따라 오름차순으로 같은값들을 저장. 찾을때 역시 앞에서부터 .next 해가면서 찾는다.

은행원 알고리즘

...더보기

은행원 알고리즘은**’최소한 고객 한명에게 대출해줄 금액은 항상 은행이 보유하고 있어야 한다’**는 개념에서 나옵니다.

** 안전상태 (Safe State):** 시스템이 교착상태를 일으키지 않으면서 각 프로세스가 요구한 최대 요구량만큼 필요한 자원을 할당해 줄 수 있는 상태로 안전순서열이 존재하는 상태를 말합니다.
** 불안전상태 (Unsafe State):** 안전순서열이 존재하지 않는 상태를 말합니다. 불안전상태는 교착상태이기 위한 필요조건입니다. 교착상태는 불안전상태에서만 발생합니다. Unsafe state라고 해서 무조건 교착상태가 발생하는 것은 아닙니다.

  • 은행원 알고리즘의 단점?
    ...더보기
    - 할당할 수 있는 자원의 수가 일정해야 합니다.- 사용자 수가 일정해야 합니다.- 항상 불안전 상태를 방지해야 하므로 자원 이용도가 낮습니다.- 최대 자원 요구량을 미리 알아야 합니다.- 프로세스들은 유한한 시간 안에 자원을 반납해야 합니다.

데드락

...더보기

상호배제, 점유와 대기, 비선점, 순환대기
회피하는걸론 은행원 알고리즘이 있고
교착상태를 일으킨 프로세스를 종료하거나 할당된 자원을 해제해서 회복시키는 방법이 있다.
* 프로세스를 종료하는 방법
1) 교착 상태의 프로세스를 모두 중지
2) 교착 상태가 제거될 때까지 한 프로세스씩 중지
* 자원을 선점하는 방법
1) 교착 상태의 프로세스가 점유하고 있는 자원을 선점하여 다른 프로세스에게 할당하며, 해당 프로세스를 일시 정지 시키는 방법
2) 우선 순위가 낮은 프로세스, 수행된 횟수가 적은 프로세스 등을 위주로 프로세스의 자원을 선점한다.


디자인패턴

  1. 싱글톤패턴
    ...더보기
    한 클래스가 하나의 객체만 사용하는 것. 생성자를 private으로 은닉하고 getinstance를 통해서만 반환한다.객체는 클래스 내부에 private static 으로 존재하며, getInstance시 null값이면 새로 생성해서 반환한다.다중스레드에서 인스턴스가 한개 이상 생성될 수 있다. 해결방법은 아예 null값이 아니라 처음부터 값을 할당하던지 getInstance부분을 synchronized로 동기화시킨다.
  2. 커맨드 패턴
    ...더보기
    실행될 기능을 캡슐화. 하므로서 행위를 변경하거나 추가하고 싶을때도 기존 구성을 해치지 않으면서 확장가능. 원 클래스에 Command 인터페이스를 자료형으로 하는 커맨드 객체를 만들고. 생성자나 set메서드로 Command인터페이스를 구현한 다른 객체를 할당.
  3. 팩토리 패턴
    ...더보기
    Factory 클래스가 공장처럼 create 메서드를 갖고 스트링값을 입력받아서 알맞은 피자 객체를 반환함. 그리고 원래 클래스에서는 이 Factory객체의 create메서드를 통해 인자를 전달해서 객체를 초기화함.
  4. 템플릿-메소드 패턴
    ...더보기
    추상클래스를 통해서 상위클래스의 일부만 구현하고 남은 부분을 하위클래스에서 구현하도록 하는 알고리즘. 전체적인 레이아웃을 통일시키면서 하위에서 구현할 여지를 주면서 유연성을 준다.
  5. 스트레티지 패턴
    ...더보기
    객체마다 다를 수 있는 행위부분ㅇ르 캡슐화해서 교환하여 사용하는 패턴그래서 이것을 해결하기위해서 변경이 많은 부분은 인터페이스로 정의하고 인터페이스 변수를 자식클래스가 가지고 있는 방법으로 하면 자식클래스에서 인터페이스의 메서드를 부르게만 해놓아서 기능을 위임하는 방법을 사용하는 것이다.

'Web' 카테고리의 다른 글

[JavaScript] EventLoop와 비동기 동작  (0) 2019.07.31
Java 개발자 입장에서 보는 JavaScript  (0) 2019.07.16