-
RTOS Embedded SW쪽은 일단 코딩 질문들이 간단합니다. 자주 나왔던 질문들을 리트 코드에서 찾아봤어요.
계속 강조하지만 중요한건 코딩보다 설명하고 상대방을 이해 시키는 능력입니다. 일대일로 내가 짜는 코드를 실시간으로 보면서 코딩을 하고 있기 때문에, 코딩을 하면서 상대방에게 계속 설명을 해야 되고, 상대방이 뭐 이것 고쳐보자, 저것 최적화 해보자 라고 얘기하면 실시간으로 고쳐야 합니다.
첫째도 영어, 둘째도 영어, 셋째도 영어예요.첫번째로 간단하게 bit 조작하는 문제 많이 냅니다.
예를 들어서 unsigned int에서 1의 개수 구하기.
Number of 1 Bits
https://leetcode.com/problems/number-of-1-bits/두번째로 String으로 된 숫자를 Integer로 변환하기, 또는 그 반대
String to Integer (atoi)
https://leetcode.com/problems/string-to-integer-atoi/세번째로 Array Sort하기
최적화 하지 말고 그냥 풀어보기,
잘 풀면, 아마 최적화 할 수 있는 방법으로 풀어보라고 하겠죠. Merge Sort 알고리즘 하나 공부하심 될 것 같아요.
Sort an Array
https://leetcode.com/problems/sort-an-array/네번째로 Queue
아무 Queue나 디자인 해보고 설명해 보라고,, ㅠㅠ
보통 Circular Queue 많이 쓰니까, Circular Queue 디자인 해서 잘 설명할 수 있으면 될 것 같습니다.
C++로 짰더니, 무슨 언어 쓴거냐고 물어보더라고요. OTL
Design Circular Queue
https://leetcode.com/problems/design-circular-queue/다섯번째로 Linked List 관련 문제
비슷한 문제를 leetcode에서 못 찾았네요. 아래가 그나마 비슷함.
Delete Node in a Linked List
https://leetcode.com/problems/delete-node-in-a-linked-list/실제 문제는 다음과 같았습니다. 이것도 처음 list node 정의부터 해야 되겠죠. 한번 짜보세용.
Singly Linked List를 하나 만들고, M값과 N값을 받아서, list에서 M개 건너뛰고 N개 지우고, 다시 M개 건너뛰고 N개 지우는 코드를 짜 보기
예를 들어 Linked List에 Value 값이 1, 2, 3, 4, 5, 6, 7, 8, 9 이렇게 저장되어 있고, M이 2 N이 1이면 다음과 같은 결과값이 나와야 함.
1 2 4 5 7 8그리고 몇몇 질문들,, 한번 댓글로 답을 달아봐 주세요.
문제는 답을 맞추는게 중요한 것이 아닙니다. 인터뷰어가 뭘 알고 싶어하는지 숨은 의도를 찾아내야 되요. 기대 이상의 대답을 할 수 있어야 해요. 보통 그 팀에서 개발하면서 생길 수 있는 문제들이나 필요한 것들을 물어보는 경우가 있더라고요.1. 배열에 1부터 49까지 순서 상관없이 저장되어 있는데, 그 중 한 숫자가 빠졌다. 그 숫자를 찾아내는 방법은?
2. 배열에 1부터 49까지 순서 상관없이 저장되어 있는데, 그 중 두 숫자가 빠졌다. 그 두 숫자를 찾아내는 방법은?
본인이 짠 알고리즘의 time complexity랑 space complexity를 이야기 하고, 그것을 줄일 수 있는 알고리즘으로 optimize 해보기
3. 다음과 같은 코드를 주고, 눈으로 보고 답을 이야기 해보라는 경우가 있었습니다.
void main(){
uint32_t num = 0x12345678;
uint8_t* uc_ptr;
uint32_t * ui_ptr = #uc_ptr = (uint8_t*) ui_ptr;
uc_ptr++;
printf(“0x%x\n”, *uc_ptr);
}
어떤 답변을 해야 할까요? 댓글 달아주시면 정답을 알려주겠습니다. 코드는 제가 대충 생각나는대로 적은겁니다.4. 다음 코드는 Int로 된 숫자를 Sring으로 변환해서 return하는 코드이다. 잘못 된 부분이 무엇일까?
예 unsinged int 값이 45896이면 string “45896”으로 return 해야 됨.
char* ConvertInt2Str(uint32_t num){
char String[12];
char* str = String;while(num){
i = num % 10;
*(str++) = i + ‘0’;
num = num / 10;
}
return str;
}5. String으로 8진수, 16진수, 10진수 등의 숫자를 받아서 integer 값으로 변환하시오.
첫번째 parameter는 string, 두번째 parameter는 첫번째 숫자의 진수
예 int Str2Int(“3456”, 10) // 3456 return
int Str2Int(“45”, 16) // 4*16+5 return
int Str2Int(“34”, 8) // 3*8+4 return아마 이 쉬운 문제들 빨리 빨리 잘 풀고 나면, 좀 더 어려운 문제를 더 냈을 지도 모르겠지만, 워낙 코딩해 놓고도 설명하는데 애를 먹어서 참 힘들었네용.
그리고 중간 중간 Embedded System에 관한 질문들을 툭툭 던집니다.6. RTOS가 뭔지 설명해 보시오.
7. RTOS에서 Task Switching이 일어날 때 OS가 하는 일이 무엇인지 설명해 보시오.
8. Mutex에 대해서 설명해 보시오.
9. Lower priority task가 mutex를 가지고 있는데 high priority task가 해당 mutex를 가지려고 할 때 발생할 수 있는 문제점 설명
10. heap에 대해서 설명해 보시오. (데이터 구조의 heap이 아니라 메모리 영역에 stack, heap을 이야기 하는 것임)
11. heap을 잘못 썼을 때 생길 수 있는 문제점 설명 (memory leakage)
이런 질문들은 단순한 개념을 답변해주는 것보다는 그 외에 본인이 개발하면서 실제 그런 문제들이 언제 일어났었고 어떻게 해결했는지, 또는 그 문제들을 방지하기 위해서 어떤 방법을 사용했는지 잘 설명하면 좋을 것 같아요.