본문 바로가기

개발관련

[펌]신입 개발자 기술면접 준비

반응형

출처 : http://myeonguni.tistory.com/1496

 

[개발자취준][기술면접] 신입 프로그래머 기술(실무) 면접 준비(미작성)

 

 들어가기에 앞서 

    • 면접에 관련 되어 작성 된 여러 문서들을 참고해서 이번 기회에 정리해보고자 합니다.
    • 본 포스팅에서 다루는 (신입)프로그래머로서 갖추어야할 기본 소양의 목차는 다음과 같습니다.
    1. 데이터베이스 [1-19]
    2. 자료구조
    3. 운영체제
    4. 네트워크
    5. 보안관련
    6. 프로그래밍 기본
    7. 웹 프로그래밍
    8. 자바프로그래밍

 

 

 데이터베이스 

 

[1] PK, FK, ER모델이란?

    • Primary Key : 테이블에서 각 Row(행)을 유일하게 구분하는 Column-Key
    • Foreign Key : 하나의 테이블에 있는 Column(열)으로는 그 의미를 표현할 수 없는 경우, 다른 테이블의 Primary-Key Column의 값을 반드시 참조해야 하는 Column-Key
    • ER(Entity-Relation) 모델 : 개체-관계 모델, 데이터베이스를 설계할 때 사용하는 모델 중 하나

 

[2] 참조 무결성이란?

    • 관계 데이터베이스 관계 모델에서 관련된 테이블 간의 일관성(데이터 무결성)을 말한다. 
    • 사용자의 실수로 관련 데이터가 삭제되거나 수정되는 것을 막아준다.
    • 참조 무결성 제약 조건 : 기본 테이블에서 일치하는 필드가 기본키(PK)이거나 고유 인덱스를 갖고 있거나 관련 필드의 데이터 형식이 같아야 한다.

 

[3] DBMS란?

    • 다수의 컴퓨터 사용자들이 컴퓨터에 수록 된 수 많은 자료들을 쉽고 빠르게 추가, 수정, 삭제 할수 있도록 해주는 시스템
    • 데이터베이스 내의 정보를 검색하거나 정보를 저장하기 편리하고 효율적인 환경을 제공하는 것이 목적
    • * 대표적인 세 가지 기능 : 구성, 조작, 제어
    • 구성 : 데이터베이스에 저장될 자료의 구조와 응용 프로그램이 그것을 이용하는 방식을 정의(레코드 구조, 데이터 보형, 물리적 구조 등)
    • 조작 : 사용자 도구에 따라 데이터베이스에 저장된 자료를 검색, 갱신, 삽입, 삭제 할 수 있도록 지원
    • 제어 : 데이터베이스의 내용에 대한 일관성, 중복제거, 접근제어에 대한 기능을 지원

 

[4] RDBMS란?

    • 관계형 데이터베이스 관리 시스템, RDB를 관리하기 위한 소프트웨어 또는 그것이 설치된 시스템을 말한다.
    • RDBMS 종류 : Oracle DBMS, MySQL, MS Access 등
    • 모든 데이터를 2차원 테이블로 표현
    • 상호 관련성을 가진 테이블의 집합
    • 만들거나 이용하기도 비교적 쉽지만, 무엇보다도 확장이 용이하다는 장점을 가짐
    • SQL(Structured Query Language)은 데이터베이스와 통신하기 위한 언어

 

[5] DB에서의 Commit과 Rollback이란?

    • Commit : 작성한 쿼리문에서 Update, Delete, Insert를 수행했을 때, 그 쿼리문 수행결과에 대해 확정을 짓겠다는 뜻이다.
    • Rollback : 쿼리문 수행결과에 대해 번복을 함. 즉, 쿼리문 수행 이전으로 원상복귀 하겠다는 뜻이다(Commit 하기 전에 사용됨).

 

[6] DB Nomalization(정규화)란?

    • 논리적 데이터베이스 설계에 있어서 테이블들을 구조화하는 기법 중 하나
    • 자료의 손실이나 불필요한 정보의 도입 없이 데이터의 일관성 및 데이터 중복을 최소화하고 최대의 데이터 안정성 확보를 위한 안정적 자료구조로 변환하기 위해서 하나의 테이블을 둘 이상으로 분리하는 작업
    • 제1정규형(1NF) : 테이블의 각 셀의 값은 단일값을 가진다.
    • 제2정규형(2NF) : 주키가 합성키며 부분종속이 존재할 경우 2차 정규형의 대상이 된다.
    • 제3정규형(3NF) : 비주키 속성 간에 발생하는 함수적 종속(이전종속)이 발생하면 3차 정규형의 대상이 된다.

 

[7] DB Nomalization(정규화)의 목적은?

    • 저장 공간 최소화
    • 데이터 무결성 유지
    • 자료구조의 안정성 최대화

 

[8] SQL이란?

    • Structured Query Language의 약자로 구조화 질의어라고 한다.
    • 데이터 정의어(DDL)와 데디터 조작어(DML)을 포함한 데이터베이스 용 질의 언어(Query Language)의 일종으로 데이터베이스를 사용할 때 데이터베이스에 접근할 수 있는 데이터베이스 하부 언어를 뜻한다.

 

[9-14] 다음 테이블을 참고하여 질문에 해당하는 SQL문을 작성하여라

 

 

 

 

 이름(name)

 학번(num)

 폰번호(pnum)

 주소(address)

 이메일(email)

 성별(sex)

 홍길동

 10

 010-1111-1111

 서울시

 hong@com

 남

 명우니

 11

 010-2222-2222

 경기도

 myeong@com

 남

 유관순

 12

 010-3333-4444

 경상도

 yu@com

 여

 

 

 

 

 

[9] 테이블 생성 - 테이블 명은 'student'로 할 것

    • create table student (name varchar(10) not null, num int not null, pnum int not null, address varchar(10) not null, email varchar(10) not null, sex varchar(2) not null, primary key(num));

 

[10] 테이블 수정 - 대학교(university)를 추가하고 null 값을 허용하게 하라

    • alter table student add university varchar(10) null;

 

[11] 데이터 삽입 - 임의의 데이터 2개를 추가하라

    • insert into student (name, num, pnum, address, email, sex) values ('김사또', 11, 01022222222, '경기도', 'kim@com', '남');
    • insert into student (name, num, pnum, address, email, sex) values ('김카이', 13, 01022222222, '서울시', 'kim@com', '여');

 

[12] 데이터 수정 - 홍길동의 핸드폰 번호를 010-5555-5555로 변경하라

    • update student set pnum=01055555555 where name='홍길동';

 

[13] 데이터 검색

    • 전체 자료 조회 : select * from student;
    • 학번이 3번보다 이상인 사람들의 이름과 학번을 조회 : select name, num from student where = num >= 3 order by num desc;
    • 김자로 시작하는 학생의 이름을 조회 : select name from student where name like '김%';
    • * ORDER BY xx DESC (내림차순)
    • * ORDER BY xx ASC (오름차순)

 

[14] 데이터 삭제

    • 모든 자료(행) : delete from student;
    • 특정 자료(행) : delete form student where name='홍길동';

 

[15] DB Transaction(트랜잭션)이란?

    • 데이터의 무결성으로 인하여 데이터 작업 시에 문제가 생기면, 데이터 작업을 하기 이전 시점으로 모든 데이터를 원상복구 하는 것을 말한다.
    • 즉, 모두 실행되거나 모두 실행되지 않거나를 뜻한다.

 

[16] RDB에서 Join이 무엇인지에 대한 설명과 간단한 샘플 쿼리문을 작성해보아라

    • Join이란 2개 이상의 테이블에서 조건에 맞는 데이터를 추출하기 위하여 사용
    • Inner Join : 2개 이상의 테이블에서 교집합만을 추출
    • Left Join : 2개 이상의 테이블에서 from에 해당하는 부분을 추출
    • Right Join : 2개 이상의 테이블에서 from과 JOIN하는 테이블에 해당하는 부분을 추출
    • Outer Join : 아웃터 조인 또는 풀 조인이라고 불림, 2개 이상의 테이블에서 모든 테이블에 해당하는 부분을 추출
    • Inner) SELECT user.name, course.name FROM user INNER JOIN course ON user.course=course.id;
    • Left) SELECT user.name, course.name FORM user LEFT JOIN cource On user.course=course.id;
    • Right) SELECT user.name, course.name FORM user RIGHT JOIN cource On user.course=course.id;
    • Outer) SELECT user.name, course.name FORM user Outer JOIN cource On user.course=course.id;
    • * 가장 많이 쓰이는 Join은 Inner Join.

 

[17] DB에서 Index를 사용하는 이유는?

  • 인덱스(Index)는 데이터를 논리적으로 정렬하여 검색과 정렬 작업의 속도를 높이기 위해 사용된다.
  • 예를 들면, 책에서 가장 빨리 내용을 찾는 방법은 책의 뒤편의 색인을 보는 것.
  • 기본키에 대해서는 항상 DBMS가 내부적으로 정렬된 목록을 관리하기에 특정 행을 가져올 때 빠르게 처리된다. 하지만, 다른 열의 내용을 검색하거나 정렬시에는 하나하나 대조를 해보기 때문에 시간이 오래 걸린다(이를 인덱스로 정의해두면 검색 속도가 향상된다).
  • * 단점 : 인덱스를 사용하면 데이터를 가져오는 작업의 성능은 향상시킬 수 있지만 데이터 삽입, 변경 등이 일어날 떄 매번 인덱스가 변경되기 떄문에 성능이 떨어질 수 있다.
  • * 사용대상 : 데이터 필터링과 정렬에 사용되므로, 데이터를 특정한 순서로 자주 정렬한다면 인덱스를 사용하기에 적합 

 

[18] NoSQL이란?

  • NoSQL 데이터베이스는 관계형 데이터베이스(RDB) 보다 덜 제한적인 일관성 모델을 이용하는 데이터의 저장 및 검색을 위한 매커니즘을 제공한다.
  • 단순 검색 및 추가 작업을 위한 매우 최적화된 키-값(Key-Value) 저장 공간을 사용한다.
  • 빅데이터 시대에 따라 많은 양의 데이터를 효율적으로 처리하기 위해 등장하였다(분산처리, 빠른 쓰기 및 데이터의 안정성).
  • 분산형 구조를 통해 데이터를 여러 대의 서버에 분산해 저장하고, 분산 시에 데이터를 상호 복제해 특정 서버에 장애가 발생했을 때에도 데이터 유실이나 서비스 중지가 없는 형태의 구조를 갖고 있다.

 

[19] NoSQL이 기존 RDBMS와 다른 점은?

  • 스키마가 없다. 즉 데이터 관계와 정해진 규격(table-column의 정의)이 없다.
  • 관계 정의가 없으니 Join이 불가능하다(하지만 reference와 같은 기능으로 비슷하게 구현은 가능).
  • 트랜잭션을 지원하지 않는다.
  • 분산처리(수평적 확장)의 기능을 쉽게 제공한다.
  • * 대부분의 NoSQL DB는 분산처리기능을 목적으로 나왔기 때문에 분산처리 기능을 자체 프레임워크에 포함하고 있다.

 

 

 

 자료구조 

 

[20] 스택(Stack)에 대해 설명하시고 예제소스를 구현해보아라

  • 스택은 LIFO(Last In First Out)의 원리로 동작하는 선형적인 자료 구조이다. 데이터가 들어가고 나오는 입구가 하나뿐이므로 입구로 들어간 데이터가 스택에 차곡차곡 쌓여 있다가 들어간 반대 순서로 나온다.
  • 주로 계산중에 잠시 기억해야 하는 임시적인 자료를 관리하는 용도로 사용된다.
  • CPU도 여러 가지 정보를 저장하기 위해 스택을 사용하는데 이를 시스템 스택이라 한다. 
  • * 다음 예제는 배열로 정수형 스택을 구현한 것이다.

 

int *Stack;
int Size;
int Top;
 
void InitStack(int aSize)
{
     Size=aSize;
     Stack=(int *)malloc(Size*sizeof(int));
     Top=-1;
}
 
void FreeStack()
{
     free(Stack);
}
 
BOOL Push(int data)
{
     if (Top < Size-1) {
          Top++;
          Stack[Top]=data;
          return TRUE;
     } else {
          return FALSE;
     }
}
 
int Pop()
{
     if (Top >= 0) {
          return Stack[Top--];
     } else {
          return -1;
     }
}
 
void main()
{
     InitStack(256);
     Push(7);
     Push(0);
     Push(6);
     printf("%d\n",Pop());
     printf("%d\n",Pop());
     printf("%d\n",Pop());
     FreeStack();
}

 

[21] 큐(Queue)에 대해 설명하시고 예제소스를 구현해보아라

  • 큐는 FIFO(First In First Out)의 원리대로 동작하는 자료 구조이다. 동일한 자료의 집합을 다룬다는 면에 있어서는 스택과 비슷하지만, 가장 먼저 들어간 자료가 가장 늦게 나온다는 점이 다르다.
  • 넣은 순서대로 자료를 꺼내가므로 순서대로 처리해야하는 자료를 임시적으로 저장하는 용도로 흔히 사용한다.
  • 저장되는 자료의 타입이 동일하므로 배열 또는 연결리스트로 큐를 구현할 수 있다.
  • * 다음 예제는 배열로 정수형 큐를 구현한 것이다.

 

int *Queue;
int QSize;
int head,tail;
 
void InitQueue(int size)
{
     QSize=size;
     Queue=(int *)malloc(QSize*sizeof(int));
     head=tail=0;
}
 
void FreeQueue()
{
     free(Queue);
}
 
BOOL Insert(int data)
{
     if ((tail+1) % QSize == head) {
          return FALSE;
     }
     Queue[tail]=data;
     tail=(tail+1) % QSize;
     return TRUE;
}
 
int Delete()
{
     int data;
 
     if (head==tail) {
          return -1;
     }
     data=Queue[head];
     head=(head+1) % QSize;
     return data;
}
 
void main()
{
     int i;
 
     InitQueue(10);
     printf("빈 상태에서 삭제할 때 = %d\n",Delete());
     for (i=0;i<9;i++) {
          Insert(i);
     }
 
     printf("가득찬 상태에서 삽입 %s\n",Insert(100) ? "성공":"실패");
    
     for (i=0;i<9;i++) {
          printf("%d  ",Delete());
     }
 
     FreeQueue();
}

 

[22] 단순 연결리스트에 대해 설명하시고 예제소스를 구현해보아라

연결리스트는 동적배열과 같이 같은 타입의 데이터 여러 개를 저장할 수 있는 가변 크기를 가지는 자료구조이다. 하지만 동적배열과 달리 연결리스트는 요소들이 링크에 의해 논리적으로 연결되어 있어 링크를 따라가면 이전, 이후 요소들을 찾을 수 있다. 이러한 특징 때문에 삽입, 삭제를 할 때도 물리적인 메모리 이동없이 요소간의 링크만 조작하면 되므로 동적배열에 비해 속도가 빠르다는 차이점이 있다.

배열의 요소 하나는 자신이 기억할 데이터 값만을 가지는데 비해 연결리스트의 요소인 노드는 데이터 외에 연결 상태에 대한 정보인 링크를 추가로 가져야한다. 자기 다음의 요소가 누구인지를 스스로 기억하고 있어야 흩어져 있는 노드들의 순서를 알 수 있는데 이 연결 정보를 저장하는 것이 바로 링크이다. 이때 링크를 하나만 가지는 것을 단순 연결리스트(Single Linked List)라고 하고 두 개의 링크를 가지는 것을 이중 연결리스트(Double Linked List)라고 한다. 노드를 구성하는 데이터와 링크는 타입이 다르기 때문에 노드는 이형 타입의 집합인 구조체로 정의한다.

* 구조체로 정의된 노드

struct Node
{
     int value;     //데이터
     Node *next;    //링크
}

value 멤버는 노드가 기억하는 정보의 실체인 데이터이다. 배열 요소 타입에 제한이 없는 것처럼 연결 리스트가 저장하는 정보의 종류에도 제한이 없으므로 노드의 데이터는 임의 타입, 임의 개수로 정의할 수 있다. 여러 개의 변수들을 한꺼번에 가질 수도 있고 포인터나 배열 또는 다른 구조체를 노드에 포함시키는 것도 물론 가능하다. 위 예제 코드에서는 편의상 정수값 하나만을 노드에 포함시켰다.

next 멤버는 다음 노드에 대한 포인터를 가지는 링크이다. Node 구조체안에 다른 Node 구조체의 번지 정보가 포함되어 있는데 자신에 대한 포인터를 멤버로 가지는 가지 참조 구조체이므로 무한대가 되지는 않는다. 이 포인터가 가리키는 곳을 찾아가면 다음 노드가 저장된 곳을 알 수 있다. 노드들이 링크를 통해 서로의 위치를 기억함으로써 물리적으로 흩어져 있더라도 논리적으로는 한 덩어리의 정보가 될 수 있는 것이다(단, 어떤 노드가 연결리스트의 첫 번째 노드인지는 따로 저장해야 하는데 이를 머리(head)라고 한다).

 

 

 

[23] 이중 연결리스트에 대해 설명하시고 예제소스를 구현해보아라

 

[24] 순차검색(Sequential Search)에 대해 설명하시고 예제소스를 구현해보아라

 

[25] 이분검색에 대해 설명하시고 예제소스를 구현해보아라

 

[26] 재귀함수를 이용하여 피보나치수열을 구현해보아라

 

[27] 재귀함수를 이용하여 팩토리얼을 구현해보아라

 

[28] 버블 정렬에 대해 설명하시고 예제소스을 구현해보아라

 

[29] 선택 정렬에 대해 설명하시고 예제소스을 구현해보아라

 

[30] 삽입 정렬에 대해 설명하시고 예제소스을 구현해보아라

 

[31] 퀵 정렬에 대해 설명하시고 예제소스을 구현해보아라

 

[32] 싱글톤에 대해 설명하시고 예제소스을 작성해보아라

 

 

 

 운영체제 

 

[] 세마포어와 뮤텍스에 대해 각 설명하시고 차이점에 대해 설명해보아라

  • 세마포어(Semaphore) - 운영체계 또는 프로그램 작성 내에서 공유 자원에 대한 접속을 제어하기 위해 사용되는 신호이다. 공유 자원에 접근할 수 있는 최대 허용치만큼만 동시에 사용자 접근이 가능하다. 스레드들은 리소스 접근 요청을 할 수 있고 세마포어에서는 카운트가 하나씩 줄어들게 되며 리소스가 모두 사용 중 인 경우(카운트 0) 다음 작업은 대기를 하게 된다.
  • 뮤텍스(Mutex) - 상호배제, 제어되는 섹션에 하나의 스레드만을 허용하기 때문에 해당 섹션에 접근하려는 다른 스레드들을 강제적으로 막음으로써 첫 번째 스레드가 해당 섹션을 빠져나올 때 까지 기다린다. 대기열(큐) 구조라고 생각하면 된다.
  • 차이점 - 세마포어는 뮤텍스가 될 수 있지만 뮤텍스는 세마포어가 될 수 없다 / 세마포어는 소유 불가능이지만 뮤텍스는 소유가 가능하다 / 동기화의 갯수가 다르다

 

 보안 

 

[] 대칭키와 비대칭키에 대해 각 설명하시고 대표 암호화 알고리즘과 차이점에 대해 설명해보아라

 

 

 

 프로그래밍 기본 

 

[] C언어와 C++언어의 차이점에 대해 설명해보아라

  • * 데니스리치가 개발한 언어로 인간의 명령어를 컴퓨터가 이해할 수 있도록 기계어로 변환해주는 역할을 하는 프로그램이다.
  • C++은 C언어를 확장시킨 언어이며 C는 절차지향 패턴을 따르는 반면 C++은 객체지향 패턴을 따르고 있다.
  • C언어에서는 같은 이름을 가진 함수가 존재할 수 없지만, C++에서는 가능하다(중복함수).
  • C언어에서는 변수, 함수를 초기에 작성해야 하지만, C++에서는 중간에 어디서든 선언이 가능하다.

 

[] 자신이 알고 있는 언어에 대해서 모두 얘기해보아라

  • 저급어 : 어셈블리어, C
  • 중급어 : C++
  • 고급어 : JAVA, C#
  • 기타    : JAVASCRIPT, RUBY, PYTHON, VISUAL BASIC 등

 

[] OOP(객체지향)에 대해서 설명하고 절차지향 프로그래밍과의 차이점에 대해서 설명해보아라

  • 절차지향, 구조적 프로그래밍(C) : 초창기에 많이 사용한 방법으로 순차적 프로그래밍이라고도 한다. 해야할 작업을 순서대로 코딩을 한다. 구조적 프로그래밍에서는 함수 단위로 구성되며 기능별로 묶어놓은 특징이 있다.
  • 객체지향 프로그래밍(JAVA, C++, C#) : 주 구성요소는 클래스와 객체이다. 그리고 상속과 다형성을 특징으로 들 수 있다. 클래스를 활용하여 각각의 기능별로 구성이 가능하며, 이를 나중에 하나로 합쳐서 프로그램의 완성이 가능하다. 객체 별로 개발이 가능하기에 팀 프로젝트를 하기에도 유리한 장점을 가지고 있다. 또한 코드의 재사용이 가능하며, 오류 발생 가능성이 적고 안정성이 높다.

 

[] 스크립트 언어와 컴파일 언어를 나열하고 차이점을 설명해보아라

  • 스크립트 언어 : Javascript, Python, Ruby 
  • 컴파일 언어    : C, JAVA, C#, C++
  • 차이점 : 컴파일러의 존재 여부
  • * 컴파일 언어의 경우 컴파일러를 통해서 한번 컴파일 된 후에는 코드 수정 후 재 컴파일을 하기 전까지는 같은 결과를 나타내지만, 스크립트 언어의 경우 실행될 때 바로 해석하므로 코드 변경 시 실행 할 때 마다 결과가 바뀌게 된다.

 

[] 프로세스와 스레드의 차이를 설명해보아라

  • 프로세스 : 실행중인 프로그램을 나타낸다. 이는 CPU가 실행되고 있는 프로세스에 대해서 메모리 자원을 안정되게 분배해줘야 하며 이는 운영체제의 성능에 따라 결정된다.
  • 스레드 : 하나의 프로세스 내에서 할당 받은 자원을 공유하며 실행되는 독립적인 작업 단위이다. 즉, 스레드는 각자의 스택 메모리영역을 가지고 있으며 동일한 프로세스 내의 다른 스레드들과 전역 메모리를 공유한다. 따라서 CPU로부터 새로운 자원을 할당받지 않아도 되기 때문에 프로세스보다 실행 속도가 빠르다는 장점을 가지고 있다.

 

[] 스레드를 생성하는 방법과 스레드의 장 / 단점에 대해 설명하여라

  • 생성방법 : Runnable(인터페이스)로 선언되어 있는 클래스를 상속받거나 Thread 클래스를 상속받아 run() 메소드를 구현해주면 된다.
  • 장점 : 빠른 프로세스 생성, 적은 메모리 사용, 쉬운 정보 공유
  • 단점 : 교착 상태에 빠질 수 있다.

 

[] 동기화란 무엇이며 어떠한 경우에 사용하는가?

  • 다중 스레드에서 하나의 자료에 접근할 때 사용한다(static으로 선언되어 있거나 배열에 접근하는 경우).
  • 예를들면, 은행계좌에 있는 돈에 대하여 동시에 출금 요청(접근)이 가능하다면 한 쪽에서 출금 처리가 완료되기 전에 다른 쪽에서 출금을 요청하면 출금이 될수 있기 때문에 반드시 동기화 처리를 해서 작업이 일어나는 중에는 다른 쪽에서의 접근을 막아주어야 한다. 

 

[] 포인터의 개념에 대해 설명하고 이해할 수 있도록 풀어서 설명해보아라

  • 포인터란 메모리 주소를 저장하는 변수이다.
  • 예를 들면 주소를 지칭하고 있는 곳이다. 엘리베이터에서 포인터는 해당 층을 표시하는 버튼이며, 10층 버튼을 누르면 10층으로 이동하듯이 해당 위치를 가리키도 있는 변수이다.
  • * 포인터를 사용할 때 주의할 점은 어떠한 주소를 가리키고 있어야 사용이 가능하다.
 
[] 변수들이 메모리에 저장되는 영역에 대해서 설명해보아라
  • bss영역   : 전역 변수로 선언되었으나 초기화되지 않은 변수
  • stack영역 : 지역 변수, 객체의 지역 변수(프로그램에 의해서 자동적으로 호출되고 소멸되는 변수)
  • heap영역 : 객체, 객체의 인스턴스 변수(멤버변수, 사용자에 의해서 생성되는 변수 및 객체들)
 

[] call by reference와 call by value 방식의 차이점에 대해 설명하시고, 이를 활한 대표적인 코드를 작성해보아라

  • call by reference : 매개변수로 원래 주소 값을 전달하는 방식, 자바에서는 객체를 매개변수로 전달하였을 경우에 해당한다.
  • call by value      : 매개변수로 기본 데이터 형을 사용한다. 주어진 값을 복사하여 처리하는 방식으로 함수 내의 처리결과는 함수 밖의 변수에는 영향을 미치지 않는다(C언어의 Swap()).
  • * 코드 작성해서 추가할 것

 

[] 중복함수(Overloading)와 재정의(Overriding)의 차이점에 대해 설명하시고 대표적인 소스코드를 작성해보아라

  • Overloading : 같은 이름의 메소드(함수)를 여러 개 정의하는 것. 단! 매개변수의 타입이 다르거나, 개수가 달라야 한다. 리턴 타입이나 접근 제어자는 영향을 주지 않는다.
  • Overriding   : 상속에서 나온 개념. 클래스를 메소드의 하위 클래스에서 재정의 하는 것을 의미한다.
  • * 코드 작성해서 추가할 것

 

[] 다형성(polymorphism)에 대해 설명하시고 예제소스를 작성해보아라

 

 

[] volatile에 대해 설명하시고 예제소스를 작성해보아라

 

 

[] 재귀함수에 대해 설명하시고 대표적인 소스코드를 작성해보아라

  • 재귀함수란 함수 내에서 자기 자신을 다시 호출하는 형태
  • 장점 : 소스코드의 간결화가 가능하다.
  • 단점 : 연산 시간이 오래 걸린다. 또한, 잘못 작성 시 프로그램이 무한루프에 빠질 수 있다.
  • * 코드 작성해서 추가할 것

 

[] 디자인패턴을 사용하는 이유에 대해서 설명하시고, 대표적인 디자인 패턴 한 가지를 작성해보아라

  • 디자인패턴이란 여러 프로그래머들의 경험과 지혜를 모아서 공통적인 소프트웨어 디자인 문제를 해결하는데 도움이 될수 있게 만들어 놓은 것
  • 가장 대표적인 디자인패턴으로는 싱글톤이 존재. 싱글톤이란 전체 프로그램에서 단 1개의 객체를 생성하고 공유하는데 사용하는 패턴이다. 주로 Android에서 소켓 객체를 사용할 때 사용한다.
  • * 코드 작성해서 추가할 것

 

[] ORM이 무엇인지 설명해보아라

ORM이란 Object-Relational Mapping의 약자로써, 말 그대로 객체와 관계와의 설정이다. 

여기서 말하는 객체라는 것은 우리가 흔히 말하는 OOP(Object-Oriented Programming)의 그 객체를 이야기한다.

관계는 우리가 흔히 사용하고 있는 관계형 데이터베이스를 의미한다.

앞서 설명한 내용을 연결짓자면, 객체와 관계형 데이터베이스 간의 매핑을 지원해주는 개념을 ORM이라 불리며 이와 관련된 여러 Framework나 Tool이 존재하고 있다. 

....덧 붙여야함

 

[] UML이란?

  • Unified Modeling Language의 약자로 '객체 모델링 언어' 또는 '통합 모델링 언어'를 뜻한다.
  • 시스템 설계, 요구분석, 시스템 구현 등의 과정에서 사용되는 모델링 언어로 표기법의 표준화를 목적으로 한다.
  • 시스템에 대해 동일한 의미를 공유할 수 있게 하여 언어를 가시화 시킬 수 있고 시스템 구조와 모든 상세 내역에 대해 문서화하여 모델링하는 기능들을 제공하며, 다양한 모델링 도구로서의 다이어그램들로 이루어져 있다.

 

[] UML Diagram의 종류에 대해 나열하고 설명해보아라

  • 클래스 다이어그램 : 클래스 별로 연관관계를 나타내는 다이어그램
  • 유스케이스 다이어그램 : 행위자(Acter)와 UseCase로 구분되어 그려진다.
  • 상태 다이어그램 : 현재 상태를 나타내는 다이어그램
  • 시퀀스 다이어그램 : 시간의 흐름에 따라서 나타내는 다이어그램
  • 액티비티 다이어그램 : 처리과정, 수행되는 동안 일어나는 일을 나타낸다.

 

[] 프로젝트 관리 모형 종류에 대해 나열하고 설명해보아라

  • 폭포수 : 각 단계를 확실히 매듭 짓고 그 결과를 철저하게 검토 후 승인, 이전 단계로 돌아가기 어려움으로 확실하게 검토해야 함
  • 프로토타입 : 사용자의 요구 사항을 정확히 파악하고 결과물을 예측하여 만들어내는 모형물, 사용자에게 미리 보여줄 수 있지만 결과물과 조금 다를 수도 있고 단기간에 만들어야 한다.
  • 나선형 모델 : 가장 현실적인 모형으로 비교적 최신형태이다. 점진적으로 개발 과정이 순환하며 진행된다.

 

[] 아키텍처란?

  • 소프트웨어의 관점에서 본 하드웨어의 논리 규격을 나타낸다. 기능적 물리적 구조를 표현한다.

 

[] 프레임워크란?

  • 특정 형태의 소프트웨어 문제를 해결하기 위해 상호 협력하는 클래스 프레임과 인터페이스 프레임의 집합
  • 특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성되며, 컴포넌트들은 재사용이 가능하다.
  • 스켈레톤 코드라고도 불리는데, 특정한 틀을 만들어놓고 거기에 살을 붙여 놓음으로써 프로그램을 만들어 작업 시간을 줄여주는 것이다.
  • 장점 : 개발 시간을 줄일 수 있고, 오류로부터 자유로울 수 있다.
  • 단점 : 프레임워크에 너무 의존하면 개발 능력이 떨어져서 프레임워크 없이 개발하는 것이 불가능해질 수도 있다.

 

 

 웹 프로그래밍 

 

[] HTML5의 특징

    • DOCTYPE이 간편해짐 : <!DOCTYPE html>
    • 따옴표로 둘러싸지 않아도 됨
    • Input 태그에 email type을 쓰면 알아서 이메일만 입력받음
    • 시맨틱 태그의 사용(Header, Footer)
    • Audio, Video의 지원
    • 정규표현식을 사용가능(pattern="")

 

[] 웹의 흐름과 왜 CGI, 웹 어플리케이션 방식이 나왔는지에 대해서 설명하여라

    • 초창기에 HTML로 개발된 웹 페이지는 동적으로 데이터를 처리해 줄 수가 없었다.
    • 동적으로 DBMS를 통해서 데이터를 처리해주는 웹 페이지를 만들기 위해 CGI 방법이 나왔으며 이는 웹 서버가 프로그램을 바로 실행하는 방식(2-tier)이고, 웹 어플리케이션 방식은 중간에 웹 어플리케이션이 프로그램을 실행하는 방식(3-tier)이다.

 

[] WAS란?

 

    • Web Application Server의 약자이며, 주로 톰캣 IIS를 의미한다.
    • 동적인 웹 페이지를 구성할 때 사용된다.
    • 흔이 이제는 Web Server와 함께 불리며 이는 아파치가 가장 대표적이다.
    • * 주로 아파치+톰캣으로 설치와 배포가 된다.

 

 

 

 

 

[] 웹 서버에서 프로세스 방식과 스레드 방식에 대한 차이점을 설명하여라

    • 프로세스 방식의 경우 사용자가 웹 페이지를 요청할 때마다 서버는 계속해서 프로세스를 생성해주어야 한다.
    • 이에 반해 스레드 방식의 경우 새로운 할당이 필요없이 스레드를 생성해주면 된다.

 

[] 웹 컨테이너(Web Container)란?

    • 웹 서버의 내부에서 Servlet 클래스 또는 JSP 파일을 실행하기 위한 실행 환경을 제공하는 역할을 하는 것
    • Servlet과 JSP를 사용한 웹 서버는 크게 URL 주소의 해석을 맡아 주는 HTTP 서버와 Servlet 클래스 또는 JSP 파일의 실행 요청을 처리해주는 웹 컨테이너로 구성된다.

 

[] Servlet의 2가지 형식에 대해 설명해보아라

    • GenericServlet과 HttpServlet이 존재하며 이는 서로 부자 관계이다. 많이 쓰이는 것은 주로 HttpServlet이며, GenericServlet은 프로토콜로부터 독립된 Servlet이다.
    • Servlet은 내장객체가 존재하지 않는다. 따라서 일일히 만들어 줘야 하는데, 주로 View 부분은 JSP를 사용하고 Controller 부분은 Servlet을 사용한다.

 

[] Servlet의 라이프 사이클에 대해 설명해보아라

    • 1) 서버를 실행시키는 순간 서블릿의 생성자가 호출된다.
    • 2) 생성자를 호출해서 객체가 생성되면 초기화 작업을 한다(init() 메소드가 최초 한번만 자동으로 호출).
    • 3) 초기화 작업 후에는 Service 메소드가 호출이 된다(req, res를 통해 data get, login 구현 등의 작업이 일어남)
    • * Service 메소드는 클라이언트가 요청할 때마다 호출이 됨
    • 4) 마지막으로 서버가 종료되는 시점에 destory() 메소드를 호출한다(혹은 서버 재시작 시에 자원 반납을 위해 호출)

 

[] JSP란 무엇이고 사용하는 이유를 설명해보아라

    • 서블릿의 단점(복잡한코드)을 보완 한 스레드 기반의 웹 어플리케이션 개발 기술
    • 스크립트 코드 처리 방식
    • 자바 언어를 기반으로 하기 때문에 자바 코드를 그대로 사용 가능
    • 서블릿 / EJB 기능들과 잘 융합

 

[] Servlet과 JSP의 차이점에 대해 설명해보아라

    • Servlet : Container가 이해할 수 있게 구성된 순수 자바 코드로만 이루어진 것(HTML in JAVA)
    • JSP : HTML 기반에 자바 코드를 블록화하여 삽입한 것(JAVA in HTML)

 

[] 모델 1, 2 MVC 패턴에 대해 설명해보아라

    • MVC 패턴은 소프트웨어 개발에 사용될 세 가지 구성요소 또는 객체를 제안한다.
    • Model : 소프트웨어 응용과 그와 관련된 고급 클래스 내의 논리적 데이터 기반 구조를 표현(사용자 인터페이스에 대한 어떠한 정보도 가지고 있지 않음)
    • View : 사용자 인터페이스 내의 구성요소들을 표현하는 클래스들의 집합(사용자가 화면상에서 보고 응답할 수 있는 모든 것들)
    • Controller : Model과 View를 연결하고 있는 클래스들을 대표하며, 이들 간에 통신하는데 사용된다.

 

[] DAO와 DTO에 대해서 설명해보아라

    • DAO : Data Access Object로 직접 DB에 접근하는 부분을 코딩한다.
    • DTO : Data Transfer Object로 데이터들을 객체(모델)로 만드는 부분을 코딩한다.

 

[] request, response, session에 대해 설명해보아라

    • request : 클라이언트에서 전달된 파라미터 값을 전달 받을 때 사용하는 객체
    • response : 클라이언트의 요청에 대한 응답을 처리할 때 사용하는 객체
    • session : 클라이언트 세션 정보를 처리할 때 사용하는 객체

 

[] Session과 Cookie의 차이점과 사용용도에 대해 설명해보아라

    • (공통)사용이유 : 현재 우리가 인터넷에서 사용하고 있는 HTTP 프로토콜은 연결 지향적인 성격을 버렸기 때문에 새로운 페이지를 요청할 때마다 새로운 접속이 이루어지며 이전 페이지와 현재 페이지 간의 관계가 지속되지 않는다. 이에 따라 HTTP 프로토콜을 이용하게 되는 웹 사이트에서는 특정 방문자가 머무르고 있는 동안에 그 방문자의 상태를 지속적으로 유지시키기 위해 Session과 Cookie를 사용한다.
    • Session : 특정 웹 사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한 번의 방문을 의미한다. Cookie와는 다르게 개인 아이디와 비밀번호와 같은 웹 사이트의 데이터는 Client가 아닌 Server 측에 저장되거나 웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제 시 사라진다.
    • Cookie : 특정 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해주는 정보이다. 이러한 Cookie 정보는 인터넷 사용자가 특정 웹 서버에 접속할 때 생성되며, 개인 아이디 및 비밀번호, 방문한 사이트의 정보 등을 담은 임시파일로써 Server측이아닌 Client측에 텍스트파일로 저장되어 다음에 해당 웹 서버를 찾을 경우 웹 서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용된다.

 

[] GET방식과 POST방식의 차이점에 대해 설명해보아라

    • GET : 주소 뒤에 파라미터로 값이 붙어서 전달(보안X)
    • POST : 주소 뒤에 붙어오지 않고, 데이터 영역을 통해서 전달(보안O)

 

[] Statement와 prepareStatement의 차이점에 대해 설명해보아라

    • 동적으로 쿼리문이 생성된다면 Statement를 사용
    • 반대로 쿼리문이 변하지 않는다면(정적) preparedStatement를 사용

 

[] 웹 개발자로 지원한다면, back-end와 front-end의 차이점에 대해 설명해보아라

    • front-end의 경우 클라이언트와 연관된 곳을 개발한다.
    • back-end의 경우 클라이언트와 직접적인 개입보다는 기술적인 기능(서버측)을 개발한다.

 

[] XML이란?

    • XML(extensible markup language)의 약어로써, 구조화된 문서를 웹 상에서 구현할 수 있는 인터넷 프로그래밍 언어를 뜻한다.
    • HTML은 웹 상에 문서정보를 구현하는데 많은 역할을 해왔으나 날로 늘어가는 정보들을 좀 더 구조화된 형태로 표현하기에는 한계가 있었다. 반면 문서의 구조적인 정보를 갖고 있는 XML 문서는 웹 상에서 검색의 용이함과 체계적이고 일관적인 접근, 재가공의 용이함 때문에 HTML과 인터넷 문서 표준 포맷이 되었다.

 

 

[] 자바스크립트의 특징과 장 / 단점에 대해 설명해보아라

    • 이벤트 중심의 프로그래밍 언어
    • 인터프리터 언어(클라이언트의 웹 브라우저에 의해 해석되고 실행, 웹 브라우저에서 웹 문서(HTML)를 실행할 때 프로그램 코드가 해석)
    • HTML 문서 내에 기술되어지고 HTML 문서와 함께 수행되어지는 언어
    • HTML 문서에 삽입해서 사용하는 스크립트 언어
    • 객체 지향적 특성을 모두 가지고 있다고 말할 수는 없지만, 객체를 정의하여 사용할 수 있는 객체 기반의 언어
    • 장점 : HTML 문서 내에 작성할 수 있으므로 개발속도가 빠르고, 웹 브라우저에서 동작하는 스크립트 언어로 운영체제(플랫폼)의 제한을 받지 않는다.
    • 단점 : 웹 브라우저 상에서 소스 코드가 노출된다. 컴파일하지 않는 인터프리터 언어이므로 복사하여 그대로 사용할 수 있다. 객체와 객체 함수가 한정되어 있다.

 

[] Prototype이란?

 

[] AJAX란?

 

[] JSON이란?

 

[] JSONP란?

    • 특정 웹 페이지에서 도메인이 다른 웹 페이지로 데이터를 요청할 때 사용하는 Javscript 개발 방법론
    • 도메인이 다른 웹 페이지로 Ajax를 통한 데이터 요청 시 동일출처 원칙(Same-origin policy)을 회피하는 일종의 편법으로 dataType을 jsonp로 사용
    • <script> 요소를 사용(도메인이 다른 스크립트 파일이라 하더라도 Embed 할 수 있기 때문에 이 성질을 사용)

 

 

[] JSONP의 작동원리에 대해 설명해보아라

 

 

    • 1) 데이터를 요청할 페이지에 데이터를 받아 처리할 콜백 함수를 준비, 이후 <script> 요소를 생성하여 데이터 요청을 진행
    • 2) 데이터 요청을 받은 페이지에서는 콜백 함수를 실행하는 스크립트를 출력, 이때 콜백 함수의 인자에는 요청받은 데이터가 들어감

 

 

 

[] _proto_란?

    • 상위에서 물려 받은 객체의 프로토타입에 대한 정보(Prototype link라고도 함)

 

[] 프로퍼티란?

    • 생성자에 의한 객체 생성 시 메모리 낭비를 줄이기 위해 사용하는 메소드들의 집합

 

[] 스코프와 스코프체인이란?

 

[] 클로저란?

 

[] 자바스크립트로 클래스형 상속을 구현해보세요

 

[] 리터럴이란?

 

 

 

 

※ 네트워크

 

[] OSI 7 Layer와 각 계층에 대한 설명을 해보아라

    • OSI 7 Layer : 통신 접속에서 완료까지의 과정을 7단계로 정의한 국제 통신 표준 규약으로 다음과 같이 분류된다.
    • 1) 물리계층 : 전송하는데 필요한 기능을 제공. 장비로는 통신 케이블, 허브가 존재한다.
    • 2) 데이터링크계층 : 송/수신을 확인. MAC Address를 가지고 통신. 장비로는 브릿지와 스위치가 존재한다.
    • 3) 네트워크계층 : 패킷을 네트워크 간의 IP를 통하여 데이터를 전달. 장비로는 라우팅이 존재한다.
    • 4) 전송계층 : 두 호스트 시스템으로부터 발생하는 데이터의 흐름을 제공한다.
    • 5) 세션계층 : 통신 시스템 사용자간의 연결을 유지 및 설정한다.
    • 6) 표현계층 : 세션 계층 간의 주고받는 인터페이스를 일괄성 있게 제공한다.
    • 7) 응용계층 : 사용자가 네트워크에 접근할 수 있도록 서비스를 제공한다.

[] 이더넷 프로토콜에서 사용하는 이더넷 프레임의 구조에 대해 설명해보아라

    • 프레임 구조는 각 필드로 구성되어 있으며, 각 필드의 단위는 바이트이다. 각 필드는 헤더, 데이터, 트레일러 부분으로 구분되며 보다 세부사항은 다음과 같다.
    • 헤더 : Preamble(7) - STartDelimiter(1) - DesAddress(2or6) - SrcAddress(2or6) - Length(2)
    • 데이터 : Data(0~1,500)
    • 트레일러 : Pad(0~46) - Checksum(4)

 

 

 

 

 

 

 

 

----------------------- 

 

+ 16-12-14

 

----------------------- 객체지향 및 자바 관련

 

[] 객체지향 프로그래밍(Object-Oriented Programming, OOP) 개념 및 특징

  • 데이터를 객체로 취급하여 프로그램에 반영한다. 순차적으로 프로그램이 동작하는 기존의 절차지향 프로그래밍과는 다르게 객체와 객체의 상호작용을 통해 프로그램이 동작하는 것을 말한다.
  • 코드의 재사용성을 높인다.
  • 코드의 변경에 용이하다.
  • 직관적인 코드분석이 가능하다.
  • 개발속도를 향상시켜준다.
  • 상속은 객체지향 프로그래밍의 장점을 극대화 시켜준다.

 

[] JAVA의 특징

  • 자바가상머신(JVM)만 설치하면 컴퓨터의 운영체제에 상관없이 작동한다. 즉, 플랫폼에 독립적이다.
  • 기본 자료형을 제외한 모든 요소들이 객체로 표현 가능하다.
  • 객체지향개념의 특징인 캡슐화, 상속, 다형성이 잘 적용되어 있는 언어이다.
  • Garbage Collector가 메모리를 알아서 관리해준다. (Garbage Collection을 수행)
  • 멀티쓰레드(Multi-thread)를 지원한다.
 

[] Overloading(중복함수)

  • 같은 이름의 메소드를 여러개 정의하는 것
  • 매개변수의 타입이 다르거나 개수가 달라야 한다. (return type과 접근 제어자는 영향을 주지 않는다)

 

[] Overriding(재정의)

  • 상속에서 파생된 개념으로 상위 클래스(부모 클래스)의 메소드를 하위 클래스(자식 클래스)에서 재정의하는 것을 뜻한다.

 

[] Abstract Class(추상클래스)

  • 추상메서드를 하나 이상 가진 클래스이다.
  • 자신의 생성자로 객체 생성이 불가능하다.
  • 하위 클래스를 참조하여 상위 클래스의 객체를 생성한다.
  • 하위 클래스를 제어하기 위해 사용한다.

 

[] Interface(인터페이스)

  • 일종의 추상 클래스이다.
  • 오직 추상메소드와 상수만을 멤버로 갖는다.
  • Implements 키워드를 사용한다.
  • 상속의 관계가 없는 클래스간 서로 공통되는 로직을 구현하여 쓸 수 있도록 한다.
  • Extends(상속)는 하나의 클래스만 상속이 가능하나 Interface는 다중 상속이 가능하다.

 

[] Interface vs Abstract

  • 공통점
    • new 연산자로 인스턴스 생성이 불가능하다.
    • 프로토타입만 있는 메소드를 갖는다.
    • 사용하기 위해서는 하위 클래스에서 확장/구현 해야 한다.
  • 차이점
    • 사용하는 키워드가 다르다.
    • Abstract는 일반 메서드를 사용할 수 있지만, Interface는 메서드 선언만 가능하다.

 

[] Call by Reference

  • 매개 변수의 원래 주소에 값을 저장하는 방식(클래스 객체를 인수로 전달한 경우)

 

[] Call by Value

  • 인수로 기본 데이터 형을 사용. 주어진 값을 복사하여 처리하는 방식, 메소드 내의 처리 결과는 메소드 밖의 변수에 영향을 미치지 않는다.

 

[] Static

  • 클래스가 로딩될 때, 메모리 공간을 할당하는데 처음 설정된 메모리 공간이 변하지 않음을 의미한다.
  • 객체를 아무리 많이 만들어도 해당 변수는 하나만 존재한다. (즉, 해당 변수 자원을 공유한다. 객체와 무관한 키워드)

 

[] Garbage Collection

  • 시스템에서 더이상 사용하지 않는 동적 할당된 메모리 블럭을 찾아 자동으로 다시 사용 가능한 자원으로 회수한다. 이러한 Garbage Collection을 수행하는 부분을 Garbage Collector라 부른다.

 

[] Primitive type(원시 타입)

  • 변수에 값 자체를 저장한다.
    • 정수형 - byte, short, int, long
    • 실수형 - float, double
    • 문자형 - char
    • 논리형 - boolean
  • Primitive type은 Wrapper Class를 통해 객체로 변형할 수 있다.
    • int → Integer,  char → Character,  나머지 자료형들은 맨 앞 알파벳을 대문자로 치환하면 된다.

 

[] Reference type

  • 메모리상에 객체가 있는 위치를 저장
  • Class, Interface, Array 등이 이에 속한다.

 

[] Wrapper Class

  • Primitive type으로 표현할 수 있는 간단한 데이터를 객체로 만들어야 할 경우가 있는데 그러한 기능을 지원하는 클래스이다.

 

[] 접근제한자(public > protected > default > private)

  • public - 접근에 제한이 없다.
  • protected - 같은 패키지 내, 다른 패키지에서 상속받아 자손클래스에서 접근 가능
  • default - 같은 패키지 내에서만 접근 가능
  • private - 같은 클래스 내에서만 접근 가능

 



출처: http://myeonguni.tistory.com/1496 [명우니닷컴]

출처: http://myeonguni.tistory.com/1496 [명우니닷컴]

출처: http://myeonguni.tistory.com/1496 [명우니닷컴]

반응형

'개발관련' 카테고리의 다른 글

크로스 도메인 및 CORS에 관하여 정리  (0) 2018.06.01
Docker란?  (0) 2018.05.16
bitnami wordpress 데이터베이스를 AWS의 RDS로 옮기는 법  (0) 2018.04.03
나중에볼것 : PWA 관련  (0) 2018.03.27
fork란?  (0) 2018.03.27