면접 대비 CS 질문 요약 (7~12)

나무에물주기·2022년 12월 18일
1
post-thumbnail
post-custom-banner

면접 대비 CS 질문 (7~12)

7. HTTP 통신이란?

  • HTTP (Hyper Text Transfer Protocol)이란 브라우저와 서버가 통신 할 수 있도록 만들어주는 여러 프로토콜 가운데 한 종류로 웹 브라우저와 웹 서버 사이에 HTML문서를 주고받는데 쓰이는 통신 프로토콜
  • 초기에는 HTTP 파일을 전송하기 위한 목적으로 만들어졌으나 현재는 JSON, Image 파일 등 또한 전송할 수 있습니다.
  • 일반적으로 전송 계층 프로토콜로 TCP를 사용하고, 네트워크 계층 프로토콜로 IP를 사용합니다. 이 두 계층을 합쳐서 TCP/IP라는 이름으로 부릅니다. TCP/IP에서는 IP 주소를 사용해서 통신할 컴퓨터를 결정하고, 포트 번호를 사용해서 해당 컴퓨터의 어떤 프로그램과 통신할지를 결정합니다.

8. GET과 POST 메소드

GET과 POST는 HTTP 메소드로 클라이언트에서 서버로 무언가를 요청할 때 사용한다.

  • GET이란 : GET은 클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용되는 메소드이다.
  • POST란 서버상의 데이터 값이나 상태를 바꾸기 위해서 사용한다.

  • GET은 Idempotent, POST는 Non-Idempotent하게 설계되었다.
  • GET으로 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다. 따라서 GET은 설계원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 하기 때문에 주로 조회를 할 때 사용한다
  • POST는 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다. 이에 따라 POST는 서버의 상태나 데이터를 변경시킬 때 사용한다.

9. TCP 프로토콜

  • TCP란 OSI 7Layer 중 4계층인 전송계층에 속하는 중요 프로토콜로 네트워크 망에 연결된 컴퓨터의 프로그램 간 데이터를 순서대로, 에러없이 교환할 수 있게 하는 역할을 수행한다.
  • 특징 1. 연결 지향 프로토콜 : 물리적으로 전용회선이 연결되어 있는 것처럼 가상의 연결 통로를 설정하여 통신하는 방식으로 가상 회선 방식을 사용한다, 논리적인 연결통로를 통해 데이터를 주고받음으로써 데이터의 전송 순서를 보장해준다. (순서 제어), 스트림 기반의 전송 방식을 사용한다, 데이터를 임의의 크기로 나누어 연속해서 전송하는 방식을 사용한다.
  • 특징 2. 신뢰할 수 있는 프로토콜 : 흐름제어(상대방이 받을 수 있을 만큼만 데이터를 효율적으로 전송한다), 오류제어(데이터의 오류나 누락없이 안전한 전송을 보장, 오류 또는 누락 발생 시 재전송을 수행하여 이를 보정), 혼합제어(네트워크의 혼잡 정도에 따라 송신자가 데이터 전송량을 제어하는 것을 말한다, 혼합정도에 대한 판단 기준은 데이터의 손실 발생 유무로 판단한다, 전송한 데이터에 누락이 발생하면 네트워크가 혼잡한 상태로 판단하여 전송량을 조절한다)
  • 특징 3. 연결 설정 과정(3-Way Handshake) 사용

10. 댕글링 포인터

  • 댕글링 포인터란 헤제된 메모리 영역을 가리키고 있는 포인터를 의미한다.(Dangling Pointer, 허상 포인터)
  • 동적 할당 된 포인터를 free하면 메모리 영역은 해제되지만, 포인터는 삭제되지 않고 계속 남아있어 오류를 발생시킬 수 있다.
// 예시
int *ptr = (int * )malloc(sizeof(int));
*ptr = 5;
printf("*ptr: %d\n", *ptr);
free(ptr); // ptr은 댕글링 포인터
  • 문제점 : 메모리 접근시 (포인터 역참조) 예측 불가능한 동작, 메모리 접근 불가시 Segmentation fault 발생, 잠재적인 보안 위험, 전체적인 프로그램 진행 오류
  • 해결법 : free후 포인터를 NULL로 처리, 추후의 초기화 없이 포인터가 다시는 사용되지 않게 처리

11. float 오차 (부동 소수점 오차)

  • 컴퓨터에서 실수를 저장하는 방식으로 부동 소수점 방식(Floating Point)을 사용한다.
  • 부동 소수점 방식은 정수와는 다르게 2진수로 표현할 방법이 없기 때문에 소수점 n번 째 자리 아래에서 반올림을 해서 표현한다. (정확한 표현 불가능) 때문에 컴퓨터는 그 값과 가장 근사한 값을 반환하고 이때 부동소수점의 부정확성이 나타난다.
  • 해결법 : BigDecimal 자료형을 사용한다 (자원을 많이 사용한다는 단점 발생)

12. 오버로딩과 오버라이딩

  • 오버로딩(Overloading) : 같은 이름의 메소드 여러개를 가지면서 매개변수의 유형과 개수가 다르도록 지정 하는 방식
/* 정수타입(1, 2, 3) 변수 a, b를 이용하여 평균값을 계산하는 함수 */
void average(int a, int b)
{
	int avg = 0;
	avg = (a * b) / 2;
    
	printf(정수값 %d와 %d의 평균은 %d 입니다.\n", a, b, avg);
}

 

/* 실수타입(1.5, 2.3, 3.1) 변수 a, b를 이용하여 평균값을 계산하는 함수 */
void average(float a, float b)
{
	float avg = 0;
	avg = (a * b) / 2;

	printf(실수값 %f와 %f의 평균은 %f 입니다.\n", a, b, avg);
}
  • 오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의 해서 사용하는 방식
#include <stdio.h>

class Parent
{
 public:
    void outA(int a)
    {
        printf("%d\n",a);
    }
};

    

class Child: public Parent
{
public:
    void outA(int a)
    {
        printf("%d\n",a+a);
    }
};

void main()
{
    Child a;
    Parent b;
    a.outA(10);
    b.outA(10);
}
profile
개인 공부를 정리함니다
post-custom-banner

0개의 댓글