Background Image
조회 수 45386 추천 수 55 댓글 19
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 수정 삭제
큐브리드 제품개발부 채용공고를 내면서 큐브리드 면접문제를 몇가지 예시로 보였는데, 관심있으신 분들이 있어서, 여기에 올려 봅니다. 답을 올려주시면 채용까지 이어질 수도 있으니... ^^ 참고로, http://www.okjsp.pe.kr/seq/95256 에 가시면 좀더 상세한 대화도 보실 수 있습니다.

================ 채용공고 ============================================

오라클과 경쟁하는 국산 DBMS 업체 큐브리드에서 실력있는 개발자를 구합니다.

회사와 제품 소개는 큐브리드 홈페이지(http://www.cubrid.com )와 홍보영상(http://www.cubrid.com/download/cubrid_intro.wmv )을 참조하세요.

학력, 연령, 성별, 경력, 전공에 관계없이 지원하실 수 있습니다.
단 3시간의 면접만 통과하시면 됩니다.
거의 대부분 지원분야의 핵심경쟁력을 검증하는 데 활용됩니다.

제품개발부서는 PM팀(프로그램 관리), 개발팀, QA팀으로 이루어져 있고,
- PM팀은 커뮤니케이션 능력, 결과 중심의 업무태도를,
- 개발팀은 문제 해결, 코딩 기술을,
- QA팀은 테스팅과 코딩 기술을 집중적으로 면접합니다.

아래에 팀별로 면접 질문 예제를 만들어 보았습니다.
원하는 팀의 질문에 "나는 이렇게 하겠다!"는 아이디어를 가지고 대화를 시작할 수 있습니까?
그렇다면, 저희 회사에 지원하셔서 실력을 보여주시길 바랍니다.


면접은 대화식으로 진행하여 정답 보다는 과정을 봅니다.
그리고, 인터넷에서 "Microsoft Interview Questions"을 검색하시면,
저희 회사가 면접에서 활용하는 문제의 대략 유형을 찾을 수 있습니다.

Joel Test에서 12점 만점을 유지하고 있는 큐브리드의 개발 프로세스.

실력있는 분이라면 대졸신입이라도 연봉 5천만원 드릴 수 있습니다.
회사홈페이지를 통하여 온라인지원하시기 바랍니다.

(PM팀)
1. 고객의 요구사항에 대하여 개발, QA, 기술지원팀의 입장이 첨예하게 대립할 때가 있습니다. 이럴 때 어떤 프로세스를 통하여, 어떤 기준으로 문제를 해결하겠습니까?
2. 큐브리드 고객이 배너광고 응용 개발을 위해 DBMS SQL에 무작위추출 (random sampling) 질의 기능이 있으면 좋겠다고 합니다. 어떻게 제품 명세를 만들겠습니까?
(개발팀)
1. tic-tac-toe 게임 모두 아시죠? NxN 보드 tic-tac-toe 게임을 개발하는데, 플레이어가 현재 놓은 위치가 게임을 끝내는지 아닌지를 판별하는 함수를 만들어 보세요. 예를 들어, bool IsWinningMove(int **board, int row, int column) 함수를 만드는 것입니다.
2. 전체 개수를 미리 알 수 없는 number stream에서 무작위로 1000개를 추출하려고 합니다. 추출된 것이 stream의 특정 지역에 집중되면 안될 것이고, 전체 개수를 미리 알 수 없으니, 전체를 디스크에 저장할 수도 없을 것입니다.
(시험팀)
1. 윈도우의 notepad의 save 기능을 시험하기 위한 플랜을 작성하여 보세요.
2. QA팀이 제품의 마지막 릴리스를 인증하는데, 개발팀에서 발생시킨 오류 때문에 인증기간이 늦어질 뿐만 아니라, 인증기간에 대한 예측성이 떨어져 릴리스 일정관리가 힘들어지고 있습니다. QA팀으로서 개선안을 제시해보십시요.
  • ?
    진창훈 2007.05.04 20:22
    저 문제를 못풀어도 가르치면 쓸만하겠다라고 생각된다면 채용하기도 하나요?
    알고리즘쪽은 약해서 문제가 상당히 어렵네요 ^^;
  • ?
    진창훈 2007.05.04 20:34
    갑자기 난 생각인데 게시판 하나 만들어서 http://www.okjsp.pe.kr/seq/95256 처럼 묻고 답하면서 채용할때 도움되게 하는것도 괜찮을듯 싶네요.
  • ?
    김평철 2007.05.04 22:07
    진창훈님, 예, 문제는 예시일 뿐입니다. 배우는 속도, 열정 등이 훨씬 중요합니다. 어차피, 우리는 배우면서 큽니다. 개발자가 어제 푼 문제를 오늘 또 풀지 않지요. 그것이 개발의 매력이기 합니다. 따라서, 저희는 현재의 전공/학력보다 가능성을 높이 평가합니다. 지원하시길 바랍니다.
    아, 그리고, 두 번째 댓글의 아이디어 감사합니다. 그렇지 않아도, 이런 코너를 만들어, 채용의 새로운 방법으로 정착시키는 것을 생각하고 있었습니다.
  • ?
    진창훈 2007.05.04 22:37
    아직은 저런 문제 합격하기엔 공부를 더 해야할것 같구요...^^;;;
    제가 채용공고를 다른 개발자 사이트에도 올렸는데 다들 재밌겠다, 지원하고 싶다라는 반응을 보이네요 ^^;

    모쪼록 모든 개발자들이 원하는 회사로 거듭나시길 바랍니다 ^^
  • ?
    박광배 2007.05.04 22:59
    두번째 것도 함수를 만드는 것인가요?
    저도 지원하고 싶지만 합격할지는 미지수이지만 한번 도전해 보고 싶습니다. 평소에 이런 부분에 대해서 별로 해본적이 없어서요^^
  • ?
    진창훈 2007.05.05 01:07
    이 글때문에 각종 개발자 사이트, db사이트 마다 난리네요 ㅋㅋㅋ
  • ?
    김평철 2007.05.05 07:10
    예, 나도 방금 네이버에서 검색하니 여기저기 관심이 엄청나군요. 이렇게 유능하고 열정을 가진 개발자들이 많은데, 아직 우리나라 SW 회사들의 개발자 조직문화는 걸음마 수준인 것을 보면 저희도 각성해야 한다는 생각이 듭니다. 좋은 경험이었습니다.
    진창훈님, 박광배님, 꼭 지원하셔서 도전해보시기 바랍니다. 지금까지 보여준 열정만으로도 한단계 통과입니다. ㅎㅎㅎ
  • ?
    관리자 2007.05.05 21:33
    전화면접은 3시간의 정식면접 비용을 줄이기 위해 선택적으로 수행하고 있습니다. 이번에 모이게 될 이력서의 양에 따라 유동적으로 판단하게 될 것입니다.
  • ?
    PE 2007.05.06 07:17
    델마당에 달아주신 댓글 보고, 인턴쉽에 큰 관심이 있어서 그런데, 똑같이 채용 지원에 "인턴쉽 지원" 으로 지원하면 되는지요?
    아니면, 따로 다른 절차를 밟아야 하나요?
    개인적으로 DBMS 관계된 쪽으로 관심이 많습니다. 상당히 매력적인 분야라고 생각하고 있습니다.
  • ?
    김평철 2007.05.06 09:02
    예. 그렇게 하시면 됩니다. 특히, 자기소개서에 지원목적을 기술하시면 채용검토에 큰 도움이 될 것입니다.
  • ?
    박광배 2007.05.08 00:15
    CTO 께서 이렇게 직접 모든 사이트에 다 댓글을 달아주시는 거 보면 작은거 하나라도 소홀히 하지 않는 좋은 분위기의 회사 같습니다^^ 지원해서 같이 일하고 싶습니다.
  • ?
    archi 2007.05.10 04:26
    잡코리아를 통해서 몇 일전에 지원했었는데... 오늘 오후에 규브리드에서 전화면접을 봤으면 한다고 전화가 왔네요. :-)
    지원하신 분들은 다 온건가요? ㅡㅡ;
    제가 좋은 대학을 나온 것도 아니고, 프리만 한지라 경력 관리도 잘한 편은 아닌데.. 저에게 까지 연락이 온 것으로 보면...
    개발자 한명 한명에게 신경써 주시는 정성이 대단하십니다.
    초심을 잃지 않는 큐브리드가 되었으면 합니다. ^^

    오후에 시간적인 여유(?)가 있어서 javascript 버전으로 "tic-tac-toe"게임을 간단하게 만들어 보았습니다.
    게임 만든다고, 퇴근 시간이 30분 딜레이 되었네요. ㅋㅋ
    소스 복사해서 html파일로 만들어서 실행하면 됩니다.

    소스 ------------------------------------------------------------------------------------
    <html>
    <head>
    <title>tic-tac-toe</title>
    </head>
    <body>

    <script>
    var isGameOver = false;
    var isOrder = true;
    var borderSize = 0;

    function gameStart() {

    isGameOver = false;
    borderSize = f.boardSize.value;
    var inner_html = "<table border=''1'' width=''"+(borderSize*20)+"'' height=''"+(borderSize*20)+"''>";

    if ( isNaN( borderSize ) ) {
    return ;
    }

    for ( var i=0; i<borderSize; i++ )
    {
    inner_html += "<tr>";

    for ( var k=0; k<borderSize; k++ ) {
    inner_html += "<td width=''20'' height=''20'' id=''_" + i + k + "'' onClick=''boardClick( this," + i + ", " + k + " )''> </td>";
    }

    inner_html += "</tr>";
    }

    board.innerHTML = inner_html + "</table>";
    }

    function boardClick( pointOBJ, row, col ) {

    if ( pointOBJ.style.background != "" || isGameOver )
    {
    return ;
    }

    if ( isOrder )
    {
    pointOBJ.style.background = "black";
    isOrder = false;
    }
    else
    {
    pointOBJ.style.background = "red";
    isOrder = true;
    }

    if ( isWinningMove( pointOBJ.style.background, row, col ) )
    {
    alert ( pointOBJ.style.background + "가(이) 승리하였습니다." );
    isGameOver = true;
    }
    }


    function isWinningMove ( bg, row, col ) {

    // 가로 검증
    if ( isWinningMoveRow( bg, row, col ) )
    {
    return true;
    }

    // 세로 검증
    if ( isWinningMoveCol( bg, row, col ) )
    {
    return true;
    }

    // 대각선 검증
    if ( isWinningMoveVirgule( bg, row, col ) )
    {
    return true;
    }

    return false;
    }

    function isWinningMoveRow ( bg, row, col ) {
    for ( var i=0; i<borderSize; i++ )
    {
    if ( eval("_" + String( row ) + String( i ) + ".style.background") != bg )
    {
    return false;
    }
    }

    return true;
    }

    function isWinningMoveCol ( bg, row, col ) {
    for ( var i=0; i<borderSize; i++ )
    {
    if ( eval("_" + String( i ) + String( col ) + ".style.background") != bg )
    {
    return false;
    }
    }

    return true;
    }

    function isWinningMoveVirgule ( bg, row, col ) {

    var isI = true;

    if ( row == col )
    {
    for ( var i=0; i<borderSize; i++ )
    {
    if ( eval("_" + String( i ) + String( i ) + ".style.background") != bg )
    {
    isI = false;
    }
    }

    if ( isI )
    {
    return true;
    }
    }
    if ( ( borderSize - 1 ) == ( row + col ) )
    {
    for ( var i=0; i<borderSize; i++ )
    {
    if ( eval("_" + String( i ) + String( borderSize-1-i ) + ".style.background") != bg )
    {
    return false;
    }
    }

    return true;
    }

    return false;
    }
    </script>

    <form name="f">
    <li /> 크기 : <input type="text" name="boardSize" value="5" />
    <input type="button" onClick="gameStart();" value="Game start..." />
    </form>

    <div id="board"></div>

    </body>
    </html>
  • ?
    김평철 2007.05.10 09:34
    후니님, 이미 말씀드린 바와 같이 전화면접은 선택적입니다. 모든 접수에 대하여 채용결과를 통지하니 좀 더 기다려 보심이 좋을 것 같군요.
  • ?
    박광배 2007.05.10 21:10
    어제 전화면접 봤습니다. 처음 보는 전화면접이어서 많이 버벅거리고 생각도 잘 안떠오르고...
    그래도 후회는 없습니다. 제가 할 수 있는 범위내에서는 다 했습니다. 기술적인 질문을 받았을때 인터넷을 검색해보고 책을 뒤져서 대답해보고 싶었지만 그런 것은 비겁한 것 같아서 저의 능력 한도내에서 대답했습니다. 어떤 결과가 나오더라도 받아들일 것입니다.^^
  • ?
    진창훈 2007.05.16 04:28
    박광배님, 결과나오면 저한테도 알려주세요 ^^;
  • ?
    kkong 2007.05.25 21:06
    시험팀에 관심을 가지고 있습니다. 그런데 코딩실력은 반드시 필요한건가요? 전공은 개발이지만 주로 품질쪽이나 외적 부분과 관련된 업무를 주로 해와서.. 코딩쪽은 잘 모르는데... ^^; 그래도 도전해 볼 수 있는건가 해서요 ^^
  • ?
    김평철 2007.05.26 09:47
    시험팀도 개발팀과 마찬가지로 코딩실력은 보유하고 있어야 합니다. 다만, 개발팀도 그렇듯이 면접에서 특정 언어를 요구하지는 않습니다. 어떠한 언어든 하나의 프로그래밍 언어로 고급 수준의 코딩 실력을 갖추고 있다면 다른 언어로 같은 수준의 코딩실력을 갖추는 것은 한달도 걸리지 않기 때문입니다.

    또 한가지 말씀드리고자 하는 것은 저희 시험팀은 90% 이상 자동화 시험에 의존합니다. 따라서, 시험팀의 업무는 시험을 수행하는 것이 아니라, 자동적으로 시험을 수행하는 프로그램을 개발하는 것이 주업무입니다. 이러한 이유로 코딩실력은 매우 중요하다고 할 수 있습니다.

    또 한가지 말씀드릴 것은, 큐브리드는 지금 당장 활용 가능한 기술을 가진 인력보다는 성장가능성에 더 높은 비중을 둡니다. 따라서, 면접은 열정, 배우는 속도, 문제 해결 능력 등에 집중하게 됩니다. 코딩실력도 같은 맥락에서 판단하게 될 것입니다.
  • ?
    후니 2007.05.30 07:13
    OKJSP에 나온
    확률을 이용한 문재 2번 풀이법에
    확률은 어디까지나 확률에따라 분포가 좌우되니
    어느정도 분포를 보장받는 방법을 한번 생각해 봤습니다.

    선택 위치에대한 조정을 하면
    분표 편차를 좀더 줄일수 있을거 같지만
    뭐 그정도까지는 할 필요 없을듯 해서
    이정도에서 만족해야겠습니다.

    import java.util.Arrays;
    public class StreamDistribute
    {
    static int array_range = 1000;
    static int stream_range = 200000;
    static long min_mid = -1;
    static int min_pos = -1;
    static long num_stream = 0;
    static long num_array [] = new long[array_range+1];
    static long mid_array [] = new long[array_range-1];

    public static void main(String[] args)
    {
    System.out.println("Hello World!");
    distribute();
    // printNum();
    // printMid();
    averageMid();
    }
    static long getNum(long num){
    return ++num;
    }
    static void distribute(){
    long temp_num = 0;
    num_array[0] = num_stream;

    for (int i=1;i<array_range+1 ;i++)
    {
    num_stream = getNum(num_stream);
    num_array[i] = num_stream;
    }
    num_stream=getNum(num_stream);
    initMid(-1, -1);
    //printMid();;
    for (int i = (int)num_stream;i<stream_range+1 ;i++ )
    {
    //System.out.println(i+"번째 입력,입력수: " + num_stream+" ");
    temp_num = num_stream - num_array[num_array.length-2];
    //System.out.println("temp_num = num_stream - num_array[num_array.length-2] : "+temp_num+" = "+num_stream+" - "
    //+num_array[num_array.length-2]);
    //System.out.println("temp_num>min_mid " + temp_num+">"+min_mid+" "+(temp_num>min_mid));
    if (temp_num>min_mid)
    {
    initArray(num_stream,temp_num);
    }

    for(int j = 1;j<num_array.length;j++)
    {
    //System.out.print(num_array[j]+",");
    }
    //System.out.println();
    //printMid();;
    //System.out.println();
    num_stream=getNum(num_stream);
    }
    }
    static void initMid(int pos,long min){
    if(pos<0){
    for (int i = 0;i < num_array.length-2;i++ )
    {
    mid_array[i] = num_array[i+2]-num_array[i];
    }
    min_mid = 2;
    min_pos = array_range-1;
    }
    else{
    for (int i = pos-2;i < num_array.length-2;i++)
    {
    if(i>-1){
    mid_array[i] = num_array[i+2]-num_array[i];
    //System.out.println(i+": "+ mid_array[i]+",");
    }
    }
    //System.out.println("min : "+min);
    long ll_temp = num_array[num_array.length-1];
    for(int y = mid_array.length-1;y>-1;y--){
    if(mid_array[y]<min){
    min_pos = y+1;
    min_mid = mid_array[y];
    break;
    }
    else if(mid_array[y]>=min&&mid_array[0]>=min){
    //System.out.println(ll_temp);
    if(mid_array[y]>ll_temp){
    for(int z = y;z>-1;z--)
    {
    if(min_mid>mid_array[z]){
    min_pos = z+1;
    min_mid = mid_array[z];
    ll_temp = min_mid;
    //System.out.println("gg");
    continue;
    }
    }
    break;
    }
    else if(mid_array[y]==ll_temp){continue;}
    else {
    min_pos = y+1;
    min_mid = mid_array[y];
    ll_temp = min_mid;
    //System.out.println("gg");
    }
    //break;

    }
    }
    //System.out.println("min : "+(min)+", min_pos : "+min_pos+", min_mid : "+min_mid);
    for(int z = mid_array.length-1;z>-1;z--)
    {
    if(min_mid>mid_array[z]){
    //System.out.println(z);
    //printMid();;
    System.exit(1);
    }
    }


    }
    }
    static void initArray(long num,long temp){
    int pos = min_pos;
    //System.out.println("min_pos : "+min_pos);
    for (int i = min_pos;i < num_array.length -1 ; i++)
    {
    num_array[i] = num_array[i+1];
    }
    num_array[array_range] = num;
    initMid(pos,temp);
    }
    static void printMid(){
    for(int j = 0;j<mid_array.length;j++)
    {
    System.out.print(j+":"+mid_array[j]+", ");
    }
    System.out.println(" mid_array");
    }
    static void printNum(){
    for(int j = 0;j<num_array.length;j++)
    {
    System.out.print(j+":"+num_array[j]+", ");
    }
    System.out.println(" num_array");
    }
    static void averageMid(){
    long avg = 0;
    for(int j = 0;j<mid_array.length;j++){
    avg+=mid_array[j];
    }
    avg = avg/mid_array.length;
    System.out.println("평균 편차 : "+avg+", 기대 편차 : "+ (stream_range/array_range*2));
    Arrays.sort(mid_array);
    System.out.println("최소 편차 : "+mid_array[0]+", 최대 편차 : "+mid_array[mid_array.length-1]);
    }
    }
  • ?
    후니 2007.05.30 10:07
    참 길게 느껴진 2주였습니다.
    결과도 나왔고
    문재들에대한 궁금증도
    마침 다 해소가 됬네요.

    좋은 사람 뽑으시길 기원합니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
43 게시판 검색이 이상합니다. 1 손님 2007.06.13 16376
42 큐브리드 7.0을 설치하면서.. 1 나비스 2007.05.31 15744
41 웹사이트 오픈에 따른 개선사항 수렴합니다. 6 admin 2007.05.23 16456
» 큐브리드 면접 문제들... 19 김평철 2007.05.04 45386
39 Mysql 그리고 큐브리드... 1 들뿔 2007.04.11 44531
38 제로보드 XE의 개발 관련 진행 사항 공유 6 정병주 2007.03.16 16311
37 오라클의 이노베이스 인수 이후 '마이SQL'은? 6 정병주 2007.03.13 15038
36 제안합니다. 4 홍기선 2007.03.07 14590
35 그누보드 웹사이트의 큐브리드 게시판 생성 ^^ 5 정병주 2007.02.26 18809
34 소프트웨어 시장의 변화 SaaS (Software-as-a-Service)대하여 7 김수향 2007.02.16 18266
33 단일 문화의 비용 - The cost of monoculture 3 정병주 2007.01.30 13802
32 CentOS 기반의 큐브리드 RPM 버전 8 정병주 2007.01.29 17983
31 MMORPG "브리스톨탐험대" 티저 사이트 오픈 정병주 2007.01.27 14412
30 온라인게임용 DBMS로서의 큐브리드..? 2 정병주 2006.12.27 14794
29 CUBRID 에 바란다. 4 초보대왕 2006.12.26 13177
28 웹2.0 사이트, 국내엔 어떤 것들이 있나? 정병주 2006.12.13 13684
27 공개SW 유지보수 유료화 권고 정병주 2006.12.12 13948
26 cubsql 이라는 오픈소스 프로젝트를 시작했습니다 ㅎㅎ 8 신기배 2006.11.21 15694
25 pdo 모듈 지원은 안하시나요? 1 송승일 2006.11.21 13976
24 소프트웨어라이센스의 변화양상 정병주 2006.11.21 12684
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 Next
/ 14

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales