개발자로 전향중

[면접 기출] CS 기출 문제4 본문

CS

[면접 기출] CS 기출 문제4

hovinee 2022. 2. 3. 09:35

11. <a href>가 무슨 뜻인가요?

 

hypertext reference 의 줄임말이다.

그 하이퍼텍스트가 참조하고 있는 것이 어떤 것인지 알 수 있다.

<a href = 블라블라~~

앞에 그렇다면 a 는 왜 적냐??

사실 a 라는 태그가 href 라는 속성을 쥐고 있는 녀석이거든.
a 태그에 속해있는 속성중에 하나가 href 인것!!

href 는 a태그의 부하들 중 하나였던 거다!!

a태그의 부하들로는 target, title 등이 있다..

 

12. call by reference가 무슨 말인가요?

1. call by value (값에 의한 호출)

  • 함수가 호출될 때 메모리 공간 안에서는 임시의 공간이 생성된다. 그리고 함수가 종료되면 해당공간은 사라진다. 
  • 함수 호출시 전달되는 변수의 값을 복사하여 함수의 인자로 전달한다.
  • 복사된 인자는 함수 안에서 지역적으로 사용하는 변수이다.
  • JAVA의 경우 함수에 전달되는 인자의 데이터 타입에 따라서 (기본자료형 / 참조자료형 ) 함수 호출 방식이 달라짐
    • 기본 자료형 : call by value 로 동작 (int, short, long, float, double, char, boolean)
    • 참조 자료형 : call by reference 로 동작 (Array, Class Instance) 

2. call by reference (참조에 의한 호출)

  • 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다. (함수 종료시 사라짐)
  • call by reference 참조에 의한 호출방식은 함수 호출시 인자로 전달되는 변수의 레퍼런스를 전달한다. (해당 변수를 가르킨다.) 
  • 함수 안에서 인자의 값이 변경되면, 함수 호출시에 있던 변수들도 값이 바뀐다. 

 

13. Event Listener가 무슨 말인가요?

이벤트 리스너(event listener)

이벤트 리스너란 이벤트가 발생했을 때 그 처리를 담당하는 함수를 가리키며, 이벤트 핸들러(event handler)라고도 합니다.

지정된 타입의 이벤트가 특정 요소에서 발생하면, 웹 브라우저는 그 요소에 등록된 이벤트 리스너를 실행시킵니다.


이벤트 리스너 등록

작성된 이벤트 리스너는 먼저 해당 객체나 요소에 등록되어야만 호출될 수 있습니다.

객체나 요소에 이벤트 리스너를 등록하는 방법은 다음과 같습니다.

 

1. 이벤트의 대상이 되는 객체나 요소에 프로퍼티로 등록하는 방법

2. 객체나 요소의 메소드에 이벤트 리스너를 전달하는 방법

 

14. OOP에서 상속이 무슨 말인가요?

상속(inheritance)이란?

상속(inheritance)이란, 클래스를 정의할 때 기존 클래스가 가지고 있는 것들-필드들, 메소드들 등-을 물려받는 것을 말합니다. 상속받는 클래스는 이미 구현된 것들을 기존 클래스로부터 물려받고 이들은 재사용됩니다. 소프트웨어 재사용 (software reuse) 라는 개념은 여기에서 적용됩니다. 상속받는 클래스는 그 외에 자신만의 필드들과 메소드들이 추가됩니다. 이는 상속으로부터 클래스의 특성이 확장됨을 뜻합니다.

상속 관련 용어들

클래스 C1이 있고, 이를 상속받는 클래스 C2를 구현했다고 가정해 봅시다. 이 때 C1을 부모 클래스 (parent class)기반 클래스 (base class) 또는 상위 클래스 (super class) 라고 부릅니다. 그리고 C2는 자식 클래스 (child class)파생 클래스 (derived class)하위 클래스 (subclass) 라고 합니다.

상속의 장점

앞에서 소프트웨어 재사용을 살짝 언급했습니다 .이것이 바로 상속의 장점입니다. 소프트웨어를 개발할 때에는 이를 구성하는 모듈들을 처음부터 새로 만들기도 합니다. 하지만, 기존의 것으로부터 확장하는 방식으로 개발되기도 합니다. 만약 이미 존재하는 클래스의 특징을 갖는 다른 클래스들을 만들려면, 상속을 적용하는 것이 좋습니다. 특히 메소드들의 경우 이미 검증을 받은 것들은 (그것들을 수정하지 않는다는 전제 조건 하에) 또 받을 필요가 없습니다. 이는 개발 시간과 검증 시간을 줄이는데 도움이 됩니다.

 

15. non-blocking call이 뭔가요?blocking 모드 

 

어떤 시스템 콜을 호출하였을 때 네트워크 시스템이 동작을 완료할 때까지 그 시스템 콜에서 프로세스가 멈춤

소켓 생성시 디폴트 blocking 모드

listen(),connect(), accept(), recv(), send(), read(), write(), recvfrom(), sendto(), close()

block 될 수 있는 소켓 시스템 콜

I/O시 처리가 될 때까지 기다려야 함. 비 동기적인 작업 수행 불가능

일 대 일 통신을 하거나 프로그램이 한가지 작업만 하면 되는 경우는 blocking 모드로 프로그램을 작성할 수 가능

 

Non-blocking 모드

소켓 관련 시스템 콜에 대하여 네트워크 시스템이 즉시 처리할 수 없는 경우라도 시스템 콜이 바로 리턴되어 응용 프로그램이 block되지 않게 하는 소켓 모드

통신 상대가 여럿이거나 여러 가지 작업을 병행하려면 nonblocking 또는 비동기 모드를 사용하여야 한다.

 

non-blocking 모드를 사용하는 경우에는 일반적으로 어떤 시스템 콜이 성공적으로 실행될 때까지 계속 루프를 돌면서 확인하는 방법(폴링)을 사용한다.

 

 

 

정리 .....

 

동기 : 순서 있게 일한다. 

 

비동기: 신호를 보내고, 받는다. (무순서)

 

Blocking

- 리턴값에 신뢰성이 있다. 대신에 기다려야 한다.

- 어떤 시스템 콜을 호출 하였을 때 네트워크 시스템이 동작을 완료 할 때까지 시스템 콜에서 프로세스가 멈춤.

 

Non_Blocking 

- 네트워크가 즉시 처리 할 수 있으면 해당 결과를 리턴  ( 바로 리턴하는 대신 신뢰성을 보장하지 못함)

- 리턴값을 대게 -1, false 를 리턴한다.

- 결과 확인은 위한 반복적인 작업(폴링)으로 CPU 낭비를 초래한다.

 

 

 


<노컷님 정리>


* 더 쉬운 예(프린터를 예로 들어서, 문서 10개를 print시킬때)
1. sync : 문서를 작성하고 print시킨다. 다 프린트 되서 나올때까지 기다려서 확인.
          그 다음 문서를 print시키고, 다 나올때까지 확인.(당연 절라 느림)
          (거기다 사람(application)이 계속 기달리고 있어야 함...시간 아깝죠?^^)
2. async : 문서를 print시키라고 마구 시킨다.(프린터야 죽어나든 말든..)
           글구 사람(application)은 코딩작업을 마무리 하던가, 데브피아에 답변을
           올리던가...일을 하다가 printer가 일이 끝나면, 삐~~(신호음)을 울려주고
           그때서야 프린트가 잘 됐나 한번 봐준다^^
          (사람(application)을 부릴땐 이렇게 시켜야 효율적으로 일하겠죠?^^)
          (실제로 쓰이고 있는 방식입니다.)
3. non-blocking방식 : 프린트 시키고 딴짓하다가 프린트가 나오기 시작하면,
          다 끝날때까지 기다림(sync보단 효율적이고, async보단 더 느리고)
          (recv함수를 쓰는 동안은 기다리니깐요)

동기는 프로그래밍하기가 좋고, 비동기는 좀 더 까다로운 대신 기능이 좋죠^^

덧. async가 네트워크 속도가 빠른 건 아닙니다(확인하고 보내는 시간이 없으니 조금 
더 빠르긴 하지만...프린트를 1000장을 시킬때, 완료될때까지 걸리는 시간은 그렇게 
차이가 안나죠, 문제는 사람(application)이 하루종일 기달리고 있느냐, 하루종일 딴
일하고, 마지막에 확인만 해주느냐의 차이인 것이죠.^^

출처: https://hoonihoon.tistory.com/entry/동기-비동기방식-blocking-nonblocking함수 [후니훈의 모바일 세상]