본문 바로가기
나는

잉카인터넷 면접을 보고와서

by 엔돌슨 2010. 2. 9.
반응형

2010년 2월 8일 잉카인터넷 면접을 보고 왔습니다.

지원분야는 nProtect 제품군 (게임가드, 웹스캔, spyzero 등)이였습니다.
경력1년이상을 원하는 거 같았습니다.

저의 경우 C++언어만큼은 잘한다고 생각했지만, 옛날 이야기인듯합니다.
다음에서 검색하니 이전 자바분야에 지원했던 면접자의 면접내용이 나오더군요.

잉카인터넷의 경우 보안회사인만큼 관련 솔루션도 많고 보안쪽에 대한 기본적인 관심이 있어야 할겁니다.

예를 들면 이전 면접자가 들었던거 처럼 ActiveX을 대체할 수 있는 기술이라던지?
기본적인것을 생각하고 갔는 데 코딩테스트가 있었습니다.

작은 소회의실에서 자신이 자신있는 언어로 스택을 구현해보라고 했죠
솔찍히 기억나지 않았습니다.


인터넷을 찾아보니 정말 잘나오던군요. 간단히 말로 설명하고 구현한 코드에 대해서 이야기드렸죠.
코딩능력보다는 스타일을 본다고는 했지만 좋은 점수는 받기 힘들거라고 생각했죠.

그리고 경력/신입 모두 다 수습기간이 있다고 하네요. 경력도 수습이 있다니!!
3개월 기본 연장6개월가능하다고 합니다. 아무래도 제대로된 사람을 뽑아야 하니깐 수긍을 했습니다.

그외 웹보안의 4대요소에 대해서도 생각을 해봐야 할거 같습니다.

면접을 보고 회사를 나오면서 생각했습니다.
코딩을 잘한다는 건 뭘 의미할까요?

문제에 대한 해결능력이 있는가? 코딩스타일이 가독성이 있는가?
STL, 템플릿 등등을 잘쓰는가?

제생각에는 자신이 얼마나 노력을 계속하면서 발전가능을이 있는가!
문제에 대한 집요한 노력으로 해결하는 의지일거 같습니다.





Stack의 개념

- 밑이 막힌 통 즉 입출구가 같기 때문에 먼저 들어간 것이 밑에 나중에 들어간 것이 위에 있는 구조(LIFO : Last In First Out)
- 조작방법
  ∙ top  : 스택의 상단   ∙ push : 스택의 상단에 값 하나를 넣는 것
  ∙ pop  : 스택에서 값을 하나 빼내는 것

/* 배열을 사용한 Stack */
#include<stdio.h>
#define MAX 10
int stack[MAX];
int top;
void init_stack(void){
 top = -1;
}
int push(int t){  
 if(top>=MAX-1){
  printf("\n Stack overflow.");
  return -1;
 }
 stack[++top] = t;
 return t;
}
int pop(void){  
 if(top<0){
  printf("\n Stack underflow.");
  return -1;
 }
 return stack[top--];
}
void print_stack(void){
 int i;
 printf("\n 스택내용 출력 : ");
 for(i=top; i>=0; i--)
  printf("%-3d", stack[i]);
}
void main(void){
 int i;
 init_stack();
 printf("\n스택에 Push 3, 4, 5, 6, 7, 8\n");
 push(3);
 push(4);
 push(5);
 push(6);
 push(7);
 push(8);
 print_stack();
 printf("\n\nPop한번 실행 ");
 i = pop();
 print_stack();
 printf("\n pop한 값 : %d\n", i);
 printf("\n스택에 push 1, 2, 3, 4, 5");
 push(1);
 push(2);
 push(3);
 push(4);
 push(5);
 print_stack();
 printf("\n\n현재스택 꽉 차있는데 push 6");
 push(6);   //오버풀로우 에러
 print_stack();
 printf("\n\n스택 초기화");
 init_stack();
 print_stack();
 printf("\n\n현재스택 비어있는데  pop");
 i = pop();
 print_stack();
 printf("\n pop 한 값 : %d\n", i);
}
/* 연결 리스트를 사용한 Stack */
#include<stdio.h>
#include<malloc.h>
typedef struct _node{
 int key;
 struct _node *next;
} node;
node *head, *tail;
void init_stack(void){
 head = (node*)malloc(sizeof(node));
 tail   = (node*)malloc(sizeof(node));
 head->next = tail;
 tail->next = tail;
}
void clear_stack(void){
 node *t, *s;
 t = head->next;  //첫 노드 t에 물림
 while(t != tail){  //끝 노드까지 루프
  s = t;  //노드 삭제위해 s에 물림
  t = t->next; //t는 다음 노드로 감
  free(s);  //물린 노드 삭제
 }
 head->next = tail; //스택 비움
}
int push(int k){
 node *t;
 //메모리 부족한 경우 에러 발생
 if((t = (node*)malloc(sizeof(node))) == NULL){
  printf("\n 메모리 부족...");
  return -1;
 }
 t->key = k;
 t->next = head->next; //t를 머리에 삽입
 head->next = t;
 return k;
}
int pop(void){
 node *t;
 int i;
 if(head->next == tail){  //스택 비어있는지
  printf("\n Stack underflow");
  return -1;
 }
 t = head->next;
 i = t->key;
 head->next = t->next; //head->next 노드 제외
 free(t);  //t를 삭제
 return i;  //삭제된 값 리턴
}
void print_stack(void){
 node *t;
 t = head->next;
 printf("\n linked stack 내용 : ");
 while(t != tail){
  printf("%-3d", t->key);
  t = t->next;
 }
 printf("\n");
}
void main(void){
 int i;
 init_stack();
 printf("\n스택에 Push 3, 4, 5, 6, 7, 8");
 push(3);
 push(4);
 push(5);
 push(6);
 push(7);
 push(8);
 print_stack();
 printf("\nPop한번 실행 ");
 i = pop();
 print_stack();
 printf(" pop한 값 : %d\n", i);
 printf("\n스택에 push 1, 2, 3, 4, 5");
 push(1);
 push(2);
 push(3);
 push(4);
 push(5);
 print_stack();
 printf("\n현재스택에 push 6");
 push(6);  
 print_stack();
 printf("\n스택 초기화하고 내용 출력 ");
 clear_stack();  //스택을 모두 비운다.
 print_stack();
 printf("\n현재스택 비어있는데  pop");
 i = pop();
 print_stack();
 printf(" pop 한 값 : %d\n", i);
}