NVIDIA 와 면접을 봤습니다.
여름에 internship을 구하고 있는데 오늘 NVIDIA와 2번째 interview를 했습니다.
둘다 전화 인터뷰였는데, 첫번째는 문제들도 풀만했고 꽤 잘했습니다. 물어본것들이 aligned_malloc을 구현하라, 그것을 free하는것을 구현하라, semaphore, mutex, volatile keyword 등등 이었는데, 대부분 잘 대답했고 예정 시간보다 40분 정도를 더 인터뷰하고 끝나고 나서 거의 된줄 알았습니다. 느낌도 좋았구요.
근데 역시 4학년이고 걔네들도 internship뿐만 아니라 full-time으로도 쓸만한 사람을 구하는지 2번째 인터뷰를 하자고 그러네요..
그래서 오늘이 두번째 인터뷰하는날이었는데 오늘 컨디션난조인지 정말 제대로 못했습니다. 아는것도 버벅거리면서 설명하고 얘기하면서도 계속 패닉만 하고.. 인터뷰는 첫번째와는 달리 너무 금방끝났습니다. 절대 좋은 sign이 아니죠. 그리고 끝나면 됐다 안됐다 그런 느낌이 있는데 오늘은 정말 "안됐다"라는 생각이 팍 들더군요....
programming 질문은 linked list에서 cyclic을 찾는것과 set_val이라는 macro를 만드는것인데, set_val(value, bit_offset, newvalue)에서 예를 들어 value = 0, bit_offset = 1, new_value = 3, 이러면 set_val은 원래값 0의 1번 bit에 3(binary로 11이겠죠) 쓰는것입니다. 그러면 값은 binary로 110 이 됩니다. 처음엔 쉽다고 생각했는데 이런 경우가 또 있더군요 binary로 value = 101, bit_offset = 1, new_value = 101 가 있으면 값은 1011 이 되어야 합니다.
더 어려울것 같았던 첫번째 문제는 금방풀었습니다. (코드가 궁금하시면 알려주세요), 근데 쉬울것 같았던 2번째 문제는 뭐 하는것 마다 이상하게 안되는겁니다.. 분명 깔쌈하게 할수 있는 방법이 있을것 같은데 하는것마다 잘 안되고, 결국 다음과 같은 코드를 제출했습니다. (email로 제출)
#define set_val(x,y,z) \ ({u32 tmp = z; (tmp |= (tmp >> 1) | (tmp >> 2), tmp |= (tmp >> 2), \ tmp |= (tmp >> 4), tmp |= (tmp >> 8), tmp |= (tmp >> 16), \ (u32) x & ~(tmp << y) | (z<<y));})
근데 이것을 만드는데 생각보다 시간을 너무 많이 썼고, 별로 마음에 드는 답도 아닙니다..
이것보다 어떻게 좋게 만들수 있을까요?
interview했던 group은 SLi 라고 여러개의 GPU묶는 드라이버를 개발하는곳이었습니다. 배울것도 많고 그래서 정말 가고 싶었는데... 아무래도 오늘 2번째 면접때문에 Santa Clara에 여름에 가는것은 거의 포기상태입니다.
ㅠㅠ
기분이 구린 날입니다.
아아 저도 정말 동경하고 가고싶어하는 회산데면접을 보신분이 있다는 것
아아 저도 정말 동경하고 가고싶어하는 회산데
면접을 보신분이 있다는 것에 우선 놀랍고
그 내용에 제가 답변할 꺼리를 찬찬히 생각해보니
아득히 절망이 밀려오네요 공부 열심히 해야겠습니다 ㅠ.ㅜ
C++, 그리고 C++....
죽어도 C++
두번째 문제를 함수로 짜본다면...[code:1]int fun
두번째 문제를 함수로 짜본다면...
매크로로는
가 되겠죠...
물론 val=10101, off=1, newvalue=101일 경우 위값은 1011이 됩니다만 11011을 요구한다면 정말 난감하죠-_-;
위쪽 mask를 구하기가 어려우니까요.
그리고 #define 문으로 정의된 매크로함수에서 변수는 항상 괄호로 싸는게 원칙이죠.
변수안에 수식을 집어넣게되면 매크로내 연산자와 우선순위문제때문에 엉뚱한 결과 내놓는경우 많거든요.
Written By the Black Knight of Destruction
[quote="Necromancer"]매크로로는[code:1]
[Excuse me for posting this up in English, I can't type Korean with this computer.]
That's exactly why I spent so much time on this one. I made an assumption that if val=10101, off=1, newvalue=101 and the result should be 11011, not 1011. So, there goes my ugly looking macro. :-)
p.s. brackets were deliberately omitted since it will make it look even uglier ;-)
Re: NVIDIA 와 면접을 봤습니다.
offset 밑부분은 value 에서 가져오고...
offset 윗부분은 newvalue 에서 가져옴 되지 않나요?
함수로 구현해본다면...
정도겠고... 매크로라면...
이렇게 하면 되지 않을까 싶습니다 :)
흠흠 막상 쓰는동안 masterQ 님이 다신 답변을 보니까 --;; 그냥 무조건 저렇게 하면 되는게 아닌가보군요... 밤에 잠도 안오고 심심한 김에 --;; 다시 짜봤습니다;;;
대강 위 정도로 코드를 작성하고 21 1 5 를 입력으로 넣어보니 잘 동작하는군요 8)
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
아싸! Offer 받았습니다~! (정확히 하면 offer를 보낼 주소와
아싸! Offer 받았습니다~! (정확히 하면 offer를 보낼 주소와 references 를 달라고 하네요)
사실 고민했던 그 문제의 답은 제가 틀렸던것 같습니다. 가정 자체가 잘못되었던것 같아요. 저의 macro는 3번째 argument에 0을 넣어버리면 아무런 변화도 없게 됩니다. 그럼 0을 넣었을때의 올바른 처리를 생각해보니 가정을 너무 어렵게 세워놓고 문제를 풀었던것 같네요.
결국 Necromancer님이 올리셨던 답이 원하는 답이었을것 같습니다.
어쨌거나 결과가 좋아서 기분이 좋습니다!! 일주일동안 결과가 어떻게 나올까 무지하게 고민 많이했었는데.. 이번 여름은 Santa Clara에서 보낼것 같습니다! (비자 문제가 잘 해결된다면요..!) 축하해주세요~~ ^- ^
p.s. 흠... 월드컵은 한국에서 보는게 좋은데....
축하 드립니다. 오기 전에 회사측과 숙소와 차량에 대한 언급 그리
축하 드립니다.
오기 전에 회사측과 숙소와 차량에 대한 언급 그리고 한국에서 올때/갈때의 비행기표 등에 대한 것도 사전에(오퍼 확정 후에 또는 그 쯤에) 메일로 확답을 받는것 잊지 마세요.
----
I paint objects as I think them, not as I see them.
atie's minipage
오홍.. 축하드립니다. :lol:
오홍.. 축하드립니다. :lol:
---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/