간단한 인성과 그동안에 업무했던 방법들,
장점과 단점에 대해 인터뷰를 진행 했다.
가장 핵심은 C++ 관련 필기 문제를
풀었는데,
느낀점 2가지는
1. 아직도 부족한게 많구나.
2. 모든 개발자들이 이런것을 다알아야 하나?
그래서 이기회를 통해 영원히 머리속에
잊어버리지 않기 위해
찾아서 공부하고 정리 해보왔다.
그래도 모르면 주변의 10년이상
개발자 분들에게 여쭤봤다!
머리속으로만 기억해서 정확하지 않다 ㅎㅎ
아 그리고 문제들 다 영어로 나온다.
------------------------------------------------------
Q1
int number = ~0;
cout << number << endl;
'~'보수의 표현이다. 타입에 따라서 달라 질수 있겠지만
출력 값은 -1 이다.
---------------------------------------------------------
Q2 Argument와 Prameter의 차이점
Argument는 함수를 호출할 때 넘겨주는 값이며,
Prameter는 호출당한 함수 내부에서 넘어오는 값이다.
그래서 파라미터를 참조자와 포인터를 넘겨줄때와
그냥 변수로 넘겨줄때의 결과 다르다.
call by reference
call by value
개념을 한번 찾아볼것
----------------------------------------------------------
Q3 overloading과 override
overloading : 두 함수가 같은 이름을 갖고 있으나,
인자의 수나 자료가 다른 경우
override : 상속관계에 있는 상위 클래스의 함수의 이름과
같은 함수를 하위클래스에 재정의 하는 것을 말한다.
----------------------------------------------------------
Q4 dangling point
포인터가 여전히 해제된 메모리 영역을 가리키고
있는 것.
즉 댕글링 포인터가 가르키는 메모리는 유효하지 않다.
주로 발생되는 원인으로는
- 메모리 해제후, 해제된 메모리에 접근
- 함수 호출에서 자동 변수를 가르키는 포인터 반환
이런 원인으로 발생되는 문제는
- 메모리 접근시 예측 불가능한 동작
- 메모리 접근 불가 시 Segmentation fault
- 잠재적인 보안 취약점
--------------------------------------------------------
Q5 Increment/decrement operators, 과 side effects
Increment : 그냥 우리가 많이 쓰는
Int value = 1;
value++ 증감 연산자
value-- 감소 연산자
side effects : 함수 또는 표현식이 다른 곳을 수정하거나
입력 또는 출력 호출하는 것을 말한다.
void add (int x, int y)
{
return x + y;
}
int main()
{
int x = 1;
int value = add(x, ++x)
}
왼쪽을 먼저하면 1,2 =3 오른쪽을 먼저하면 2,2 =4
c++ 은 함수 인수를 평가하는 순서를 정의하지 않았기 때문에
----------------------------------------------------------------
Q6 volatitle
blink()
{
#define red 1
#define green 2
#define blue 3
volatile uint32_t* lamp = 0x11E03000;
*lamp = red;
*lamp = green;
*lamp = blue;
}
순서가 1 -> 2 -> 3 반드시 적 녹 청으로 해야할때
사용함
만약 volatile 없이 컴파일 하면
최적화로 인해
blink()
{
volatile uint32_t* lamp = 0x11E03000;
*lamp =3;
}
이됨
비슷한 어셈블리 명령어에는 배리어라는 명령어가 있음
----------------------------------------------------------------
Q7 sequence point
C 언어에서 모든 식의 계산(평가)이 완료되는 지점을 말한다.
대표적인 시퀀스 포인트는 " ; " 이지만
&&, ||, ,() 기
int i = 0;
i = i++;
비주얼 스튜디오에서는 이상 없이 컴파일 하지만
gcc에서는 -Wsequence-point 또는 -Wall옵션을 사용하여
경고를 내뿝니다.
i=i 한번, i++ 두번 계산 되서 의도를 모르겠다는 것이다.
그래서 올바른 코드는
int i = 0;
int j;
j = i++;
가장 정석이다.
----------------------------------------------------------------
Q8 declaration가 definition 차이
함수의 선언은 컴파일러가 함수가 호출되기전에 사용할 수
있도록 일종의 등록하는 것이라고 보면된다.
그래서 정의된 함수에 대한 정보를 제공한다.
함수의 정의는 실제 함수안에서 돌아가는 논리적 구조를
말한다.