~ 2019 유물

기술 면접 답변(11~20)

수빈2 2019. 11. 4. 19:02

11. byte padding

 - 메모리를 읽을 때 접근하기 쉽게 하기 위해 구조체의 데이터의 주소를 균등하게 나누는것

 - 구조체 내의 가장 큰 자료형이 기준

 - 구조체내에 구조체가있을 경우 부모 구조체의 기준따름

 - #pragma_pack 지시문을 이용해 크기 정할 수 있음

 

12. .NET FrameWork의 구성

 - 닷넷 프레임워크 : 윈도우 프로그램 개발 및 실행환경

 - 구성 : 가상머신 공용언어런타임(CLR) + .NET Framework 클래스 라이브러리

 - 공용언어런타임(CLR) :  C#이나 vb닷넷으로 작성된 코드를 컴파일하면 각언어의 컴파일러들이 중간언어라는 동일한 형태의 결과물을 만들어내고 이 결과물을 공용언어런타임이 기계어로 변환한다.

  또한, 메모리관리나 스레드 관리 등의 서비스를 제공하므로 프로그래머가 CPU의 자세한 부분까지 신경쓰지 않아도 됨.

 - 라이브러리 : 공용언어런타임을 제외한 나머지 요소들 4가지로 구성. 개발할때 필요한 기능들을 미리 패키지화 한것

 - ASP.NET : 웹구현을 위해 사용되는 기능들을 패키지화한것 

 - Windows Form : 윈도우 응용프로그램 개발을 위해 사용되는 기능

 - ADO.NET : 데이터와 데이터서비스에 접근할 수 있는 기능

 - Base Class Library : 공통적으로 사용하는 기능

 

13. virtual 함수에 대해 설명하라

 - virtual 함수 : virtual 키워드를 앞에 붙여 인터페이스만 제공하고 정의는 하지 않는다.

   상속관계에서 오버라이딩할 수 있음 -> 각각 자식들이 구현한대로 -> '다형성'

 - 순수가상함수 : 함수에다가 =0이라고 붙여서 작성하고 '구현코드 없이' 인터페이스만

 - 추상클래스 : 순수가상함수가 1개라도있으면 추상클래스 ->객체를 만들 수 없음

 

14. 소멸자에 virtual을 쓰는이유

 - 생성자 호출 순서 : 부모 -> 자식

 - 소멸자 호출 순서 : 자식 -> 부모

 - virtural 없을 때, 부모 포인터로 소멸자 호출시 부모만 소멸됨 즉, 참조형식의 소멸자만 호출 됨.

    -> virtual을 사용해 자식클래스에서 재정의 될 수 있음을 명시해줌

 

15. 포함과 상속의 차이점

 - 포함 : 말그대로 클래스안에 클래스가 있는 것

 - 상속 : 자식클래스가 부모클래스의 모든것을 물려 받아 사용하거나 재정의 가능

 - 즉 상속은 코드를 재활용하는 것이고 포함은 클래스의 일부로서 구성하는 것

 - (추가보충필요)

 

16. 메모리 단편화를 해결할수있는 기법 -> 책빌려와서 더추가하기

 - 메모리단편화(Fragment) : 메모리에 빈공간이나 자료가 여러개의 조각으로 나뉘는 현상

 - 내부 단편화 : 할당된 크기가 커서 내부에서 사용하지 않는 부분이 있는것

 - 외부 단편화 : 남은 메모리공간이 연속적이지 않아서 크기가큰 프로세스가 메모리를 사용하지 못하는 경우

 - 외부 단편화 해결  - 페이징 기법 : 가상메모리를 고정된 크기로 page를 나누고, 물리 메모리를 똑같은 크기로 frame을 나눠서 관리한다. 가상메모리의 주소와 물리메모리의 주소를 매핑해놓은 page table을 사용해 page mapping을 한다. -> 연속되지 않은 공간 사용가능 ->외부단편화 해결! but page내에 비어있는 공간이 있어 내부 단편화를 일으킴

 - 내부 단편화 해결 - 세그멘테이션 기법 : 가상메모리 사용, 내부단편화 해결, 외부단편화 존재

 - 방법 : 

 - 메모리 풀

 

17. 멀티 코어를 활용할 수 있는 프로그래밍 기법

 - 멀티스레드, 멀티프로세스

 

18. STL에서 erase와 remove의 차이점 보충필요

 - erase는 해당하는 값 하나만 지우고, 데이터와 공간 모두 지워짐

 - remove는 조건이 맞는 경우 다 지우고 공간은 지워지지않고 데이터만 지워짐

 

19. List 클래스 구현, 추가/삭제 함수 구현

 

20. 절차지향과 객체지향의 차이

 - 절차지향 : 컴퓨터가 따라야할 절차를 구현, 알고리즘 강조, 컴퓨터 처리 구조와 비슷하므로 상대적으로 빠름. 유지보수 불편함 

 - 객체지향 : 데이터와 수행 동작 구현, 데이터 강조, 코드 재사용, 유지보수 용이, 상대적으로 느림

 

+ 상속관계에서 virtual 있고 없고 차이 테스트

#include <iostream>
using namespace std;
class Parent {
public :
	Parent() {
		cout << "Parent()\n";
	}
	~Parent() {
		cout << "~Parent()\n";
	}
	void func1() {
		cout << "Parent func1()\n";
	}
	virtual void func2() {
		cout << "Parent func2()\n";
	}
};

class Child : public Parent {
public :
	Child() {
		cout << "Child()\n";
	}
	~Child() {
		cout << "~Child()\n";
	}
	void func1() {
		cout << "Child func1()\n";
	}
	virtual void func2() {
		cout << "Child func2()\n";
	}

};
int main() {
	Parent  *p = new Child(); // Parent() Child()
	p->func1(); //Parent func1()
	p->func2(); //Child func2();
	delete p; //~Parent()  -> virtual없어서 ~Child()안됨

	cout << "\n"; 

	Parent *p2 = new Parent(); //Parent()
	p2->func1(); //Parent func1()
	p2->func2(); //Parent func2()
	delete p2; //~Parent()

	cout << "\n";

	Child *p3 = new Child(); //Parent() Child()
	p3->func1(); // Child func1()
	p3->func2(); // Child func2()
	delete p3; // ~Child() ~Parent()
}

 

내일 책빌려와서 더추가하기..

'~ 2019 유물' 카테고리의 다른 글

할일  (0) 2019.12.07
기술 면접 답변(31~40)  (0) 2019.11.12
기술 면접 답변(21~30)  (0) 2019.11.06
기술 면접 답변(1~10)  (0) 2019.10.31
기술 면접 질문 모음  (0) 2019.10.30