2020-02-26 TIL

할 일 목록

  • 웹지탱 시험 & 스터디
  • 코어 자바 9 공부
  • 웹지탱 독서
  • 알고리즘 한 문제 풀기

완료하지 못한 목록

  • 알고리즘 한 문제 풀기

완료 목록

  • 웹지탱 시험 & 스터디
  • 코어 자바 9 공부
  • 웹지탱 독서

5Fs

1. Fact

웹을 지탱하는 기술 시험

1. POST의 용도 3가지를 설명하시오. (141~145p)

  • 리소스 작성
  • 리소스에 데이터 추가
  • 다른 메소드가 지원하지 못하는 그외의 처리

2. 리소스 작성시 POST와 PUT 중에 POST를 쓰는게 적절한 이유는 무엇인가? (149p)

  • put 으로 작성할 경우 URI의 결정권이 클라이언트에게 있기 때문이다. 또 put을 사용할 경우 덮어 씌워 지는 경우가 있기 떄문에 따로 체크를 해야한다.

3. HEAD의 사용 용도는 무엇인가? (151p)

  • 리소스의 헤더만 얻어오는 용도이다. 바디는 없다.

4. 다음 요청과 응답의 의미는 각각 무엇인가? (152p)

요청
OPTIONS /list/item1 HTTP/1.1
Host: Example.com

응답
HTTP/1.1 200 OK
Allow: GET, HEAD, PUT, DELETE
  • item1 리소스가 갖는 메소드를 요청한 것이고, get, head, put ,delete가 있다고 응답한다.

5. 멱등성, 안전에 대해서 각각 설명하시오. (157p)

  • 동일한 수행을 여러번 해도 매번 같은 결과값이 나오는 것을 멱등성이라 하며 안정성은 내부의 데이터가 변경되지 않음을 의미한다.

6. 멱등성과 안전을 기준으로 GET, HEAD, PUT, DELETE, POST를 분류하시오. (158p)

  • 멱등성 : get, head, put, delete
  • 멱득성 안정성 : get, head
  • 둘다 안됨 : post

7. GET을 바르게 이용하고 있는지 판단하는 기준은 무엇인가? (164p)

  • get을 이용하여 리소스를 변경하지 않아야 하며, 데이터를 조회하기 위해서만 사용해야한다.

8. 현재 토마토 가격은 100원이다. PUT으로 토마토 가격을 갱신할 때 다음 PUT 사용은 어떤 부분이 잘못됐는가? 또한 올바른 표현은 무엇인가? (165~167p)

PUT /tomato HTTP/1.1
Host: example.com
Content-Type: text/plain; charset=utf-8

+50
  • 변경된 후의 값을 사용해야 한다. 저렇게 현재 값에 +50을 처리하는 방식은 멱등성을 보장하지 않는다.

9. 스테이터스 코드 1xx, 2xx, 3xx, 4xx, 5xx의 분류와 의미를 설명하시오. (173~174p)

  • 1 요청 처리중
  • 2 요청처리 성공
  • 3 리다이렉트
  • 4 클라이언트 문제
  • 5 서버문제

10. 스테이터스 코드에서 첫 번째 숫자를 이용한 분류 방식의 장점을 모두 설명하시오. (174~175p)

  • 나중에 현재 상태 코드를 기반으로 추가하더라도 클라이언트에선 문제가 생기지 않아 확장성에 용이하다.

11. 다음 응답 코드의 문제점은 무엇인가? (189p)

HTTP/1.1 200 OK
Content-Type: application/xml

<error>
  <code>1001</code>
  <message>file not found</message>
</error>
  • 상태코드를 오용하고 있다. 403 을 반환해야한다.

12. HTTP에서 기술되는 일시는 어떤 표준시를 따르는가? (196p)

  • GMT (Greenswich M?? time)

13. UTF-8로 선언된 xml 문서의 경우 Content-Type 헤더에 들어갈 알맞은 값은 무엇인가? (200~201p)

  • Content-Type : application/xml, chatset:UTF-8

14. Content Negotiation이란 무엇인가? (202p)

  • accept 헤더에서 사용되며,클라이언트가 처리할 수 있는 미디어타입, 문자셋, 언어 등을 서버에게 보내는 용도로 사용하며, q값을 넣어 우선순위를 정해서 협상할 수 있음.

15. 다음 2개의 메시지에 있는 10은 각각 몇 바이트인가? (205~206p)

Content-Length: 10
Transfer-Encoding: chunked
Content-Type: Text/plain; charset=utf-8

10
The brow fox ju
  • 10
  • 16

16. WWW-Authenticate: Basic realm="Example.com 를 클라이언트 입장에서 해석하시오. (207~208p)

  • WWW-Authenticate 헤더에 의해 서버가 제공하는 인증 방식이 basic인걸 알 수 있고, realm은 서버상에 이 리소스가 속한 URI 공간의 이름이다.

17. URI Space를 설정하는 이유는 무엇인가? (208p)

  • URI에서 패스 이하를 가리키는 것이다.
  • 클라이언트는 동일한 URI 공간에 속한 리소스에는 같은 인증정보를 송신할 수 있다고 가정하게 되어 401 Unauthorized가 반환되는 것을 피할 수 있다.

18.SSL/TLS에서 제공하는 3가지 기능에 대해서 설명하시오. (211p)

  • 암호화 : 공통키 암호 기반
  • 인증 : 공개키 증명서에 기반
  • 변경감지 : 해시 공통 키에 기반.

19.ExpiresCache-Control의 유효기간 표시법 차이는 무엇인가? (221p)

  • 절대 시간으로 표시
  • 현재로 부터 상대시간

20.조건부 GET If-Modified-SinceIf-None-Match 은 어떻게 구분하여 사용하는가? (226p)

  • Etag를 이용한 If-None-Match를 사용하는걸 권장하며, Etag 헤더가 없고 Last-Modified 헤더밖에 없을 경우 If-Modified-Since 헤더를 사용한다.

21. Pipelining이란 무엇인가? (227p)

  • 지속적 접속에서 클라이언트가 응답을 기다리지 않고 같은 서버에 여러 요청을 송신하는것.

코어 자바9

할당

밑의 코드는 오른쪽에 있는 값을 설정하며 이전 값을 교체한다.

x = expression;

연산자 뒤에 =를 붙인 복합 할당 연산자는 연산자의 왼쪽과 오른쪽을 결합한 후 결과를 왼쪽에 할당한다.

amount -=10;

amount = amount - 10;
기본 계산

덧셈 +, 뺄셈 -, 곱셈 *, 나눗셈 / 로 나타내며, 수학에서 나오는 우선순위를 따른다. 나눗셈을 할때 operand의 type이 서로 다르다면 더 높은 수의 체계를 사용하여 표현한다. 17.0 / 5 = 3.4 이지만, 17/5는 3이다. 피연산자 모두가 정수라면, 결과값도 정수로 표현하며 나머지는 버린다.

모든 정수를 0으로 나눌 경우 예외가 일어난다. 이 예외를 잡지 않으면 프로그램을 종료한다.

부동 소수점을 0으로 나누면 예외가 일어나지 않고, 결과로 무한대 값이 나온다.

% 연산자는 나머지를 반환한다.

증가 연산자와 감소연산자가 존재한다. ++의 위치에 따라 서로 다른 값이 된다. 뒤에 연산자가 위치하면 증가 이전의 값을 반환하며 앞에 위치하면 증가 이후의 값을 반환한다.

n++;
n--;
수학 메서드

자바에는 숫자를 제곱수로 만드는 연산자가 없으므로 Math.pow를 사용한다. 밑의 표현은 x의 y제곱을 나타낸다.

Math.pow(x,y)

x의 제곱은 구하는 메서드 squareRoot라고 한다.

Math.sqrt(x);

위와 같은 메서드를 static 메서드라고 하며 메서드 아에 static이 붙으며 클래스로 동일하다. 위의 Math.pow나 Math.sqrt는 정적 메서드이기 때문에 인스턴스를 사용해서는 호출이 불가능하다. 사실 Math의 생성자는 private으로 설정되어져 있기 때문에 인스턴스를 생성할 수 없다.

Math 함수에는 삼각함수나, 로그함수도 존재하며, Math.Pi나 Math.E(자연로그의 밑 값 e를 나타내며 약 2.718)같은 상수도 존재한다.

계산이 오버플로되면 잘못된 값을 리턴하는데 Math함수를 이용하면 오버플로가 났을 경우 예외를 잡아내거나 프로그램을 종료할 수 있다. 3*10억은 의도하지 않은 값이 나오는데 Math.multiplyExact(10억 * 3)을 했을 경우 예외를 잡거나 프로그램을 종료. 이것 이외에도 subtractExact, incrementExact 등이 존재한다.

수학 메서드는 다른 몇가지 클래스에도 존재하며 예를들어 Integer와 Long클래스에는 부호 없는 값을 다루는 compareUnsigened, dividedUnsigned, remainderUnsigned메서드가 존재한다.

추가적인 내용

자바의 목표중 하나는 portability(이식성)이다. 어떤 가상 머신에서 실행하더라도 계산 결과가 같아야 한다. 많은 최신 프로세서는 64 비트보다 큰 부동소수점 레지스터를 사용해 계산 과정에서 발생할 수 있는 오버플로 위험을 줋이고 부동소수점의 정밀도를 높힌다. IEEE의 규정을 따르는 float과 double은 32(지수 8비트), 64(지수 11비트) 비트를 사용하지만, double, float-exponent value set을 지원하여 사용할 수 있는 비트수를 늘렸다. 하지만 플랫폼 어떤 플랫폼은 지원하지 않는 경우도 있기 때문에 서로 플랫폼마다 다른 결과값을 불러올 수 있다. 그를 방지하고자 strictfp 제어자를 추가하여, IEEE에서 제공하는 부동소수점 방식을 사용하도록 지정하여 해결할 수 있다.

예를들어 다른 플랫폼에서 Double.MAX_VALUE를 쳐보면, 서로 다른 MAX값을 얻는것을 볼 수 있다.

2.Feelings

  • 언어를 공부하면서 왜 이렇게 되는지 깊게 공부해보았는데 컴퓨터 전공 시간에 배웠던 내용들이 모두 사용되어서 그때 공부 열심히 할껄 후회했다..
  • 그래도 하나 하나 깊게 파보면서 이게 논리적으로 왜 이렇게 되는지 직접 확인 하면서 공부하니까 재미있고 명확한 느낌을 받았다.

3.Findings

  • 모든 수는 디지털 코드(0,1)로 표현할 수 있다. integer 또한 모두 다 비트로 표현이 가능하다. integer의 최솟값(0x80000000) 부터 최댓값(0x7fffffff) 까지 공부보았다.
  • 또 최솟값(0x80000000)에서 -1 을 더해주면 최댓값(0x7fffffff)으로 전환된다는 것을 알게되었다.
  • 최댓값(0x7fffffff)에서 +1을 더하면 최솟값(0x80000000)으로 전환된다는 사실을 알게 되었다.
  • 1의 보수와 2의 보수에 대해서 알게 되었다.
  • 자바에서 제공하는 다양한 operator를 공부했다.

    • ^ 베타적 비트합 : 두개를 비교하여 같으면 0 다르면 1
    • & AND
    • | OR
    • ~ 비트 부정

4.Future Action Plan

  • 내일도 겸손하게 공부를 해야겠다.
  • 공부하면서 기초적인 필요한 부분을 정리해야겠다.
  • 부동 소수점에 대해서 정리한다.
  • Expressions, Statements, and Blocks 정리
  • 코어자바 46페이지에 Math가 제공하는 메서드 좀 더 보기.

5.FeedBack


Written by@Zero1
This blog is for that I organize what I study and my thinking, feeling and experience.

GitHub