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 |