본문 바로가기

공부/기술면접

기술면접준비

반응형

http://blog.ejunghyun.com/133

 

CS(Computer Science) 상식


XML Experience


XML - XML Schema vs. DTD

XML구조 정의에는 2가지가 있다.

DTD(Document Type Definition)

: 자체 문법(EBNF)를 사용한다.

: 간결하다

: 제한된 데이터 형만 지원함 (문자열로 모두 표현, 날짜/숫자 등 표현 불가)

: 값의 제한 및 데이터 형에 대한 제한이 불가능

: namespace를 제공하지 않음

: 재사용성 확장성 부족


Schema

: DTD의 단점을 극복하기 위해서 만든 구조 정의 언어

: XML문법을 사용한다.

: 다양한 기능

: XML문서이기 때문에 프로그램적으로 파싱/컨트롤이 가능하다.

: 다양한 Data 타입 지원

: 확장 가능

: namespace 지원

: xsd 확장자를 갖는다


XML - XML namespace 란?

XML문서에서 element나 attribute의 이름으로 쓰일 수 있는 이름들의 집합.

논리적인 이름 구분을 위해 사용됨.


일반적으로는 한 개의 xml 문서에 한개의 마크업 언어로 만들지만, 재사용을 위하여 혼용이 필요한 경우가 있다.

이미 활용되고 있는 문서를 다른 곳에서 사용하려고 할 때, 그렇게 할 수 있는 기반이 있어야 하고 그 기반이 namespace이다.


XML - DOM이란? SAX란?

Dom(Document Object Model)

XML문서의 효율적 관리(쿼리 수정, 추가, 삭제 등)을 하려고 할 때, 응용 프로그램이 메모리 내에서 XML문서를 자유롭게 이용하게 하기 위한 XML문서의 tree구조를 말한다.


SAX(Simple API for XML)

XML문서를 애플리케이션에서 사용하기 위한 API.

XML파일을 해석하기 위해 DOM대신 사용된다. DOM에 비해 단순한 인터페이스를 갖고 있으며, 처리해야할 파일이 많거나 큰 경우에 적합하다. 데이터 내용을 조작할 수 있는 기능은 상대적으로 적다.

이벤트 중심의 인터페이스로, 프로그래머가 이벤트를 설정해 놓으면 SAX는 그 이벤트가 일어났을 때 제어권을 가지고 상황을 처리한다.



Extreme Programming Experience

켄트 백 등이 제안한 소프트웨어 개발 방법. 10~12개 정도의 구체적인 실천 방법을 정의. 비교적 적은 규모의 인원의 개발 프로젝트에 적용하기 좋다. 개발 문서 보다는 소스코드에, 조직적인 개발 움직임 보다는 개개인의 책임과 용기에 중점을 두는 경향이 크다.


XP - Test Driven Development(테스트 주도개발)

분석/설계 기술

개발의 모든 활동을 구조화 하는 기술

자동화된 테스트로 개발을 이끌어 가는 개발 방식

작성할 프로그램에 대한 테스트를 먼저 작성하고 버그를 발생시킨 후, 그것을 통과할 수 있도록 코드를 완성하는 방식


XP - Unit Test란? (단위테스트)

메소드나 클래스 처럼 작은 단위의 코드를 테스트 하는 것


XP - Pair Programming 개념 및 장점

두 사람이 하나의 컴퓨터를 사용하여 번갈아가며 개발하는 익스트림 프로그래밍 방법론

계속적으로 같이 사용해야할 클래스나 메소드, 모듈 등 무엇이 되었든 다른 사람과 공유해야 할 필요가 있는 코드 부분의 구조를 잡을 때 진정으로 장점이 발휘되는 것 같다. 따로 작성을 해서 중복 코드를 만들거나, 나중에 재사용시 따로 설명을 할 필요가 없다. 그리고.. 내가 발견하지 못한 코드의 오류를 빨리 찾을 수 있다. (내 눈은 내가 짠 코드의 문제만 못 찾아내는 매의 눈이므로..)

또.. 아예 뭘 어떻게 해야 할지 모르겠을 때, 도움을 받거나 줄 수 있다. 말을 하면서 코딩을 하기 때문에, 스스로 좀 더 체계적으로 개발을 하게 되고, 개발을 하는 도중에 바로바로 문제점을 찾아 수정할 수 있다.



Design Pattern Experience


DP - Factory Pattern 이란?

팩토리를 쓰면 객체 생성을 캡슐화 할 수 있다.

애플리케이션의 구상 클래스에 대한 의존성을 줄여줌으로써 느슨한 결합을 도와준다.

구상 클래스가 아닌 추상 클래스/인터페이스에 맞춰서 코딩할 수 있게 해주는 강력한 기법


Simple factory pattern

클라이언트와 구상 클래스를 분리시키기 위한 간단한 기법으로 활용 가능


factory method pattern

추상 클래스에서 팰토리 메소드를 위한 인터페이스를 제공.

서브 클래스에서 실제 팩토리 메소드 내용을 구현하고 생성하는 일을 수행.

어떤 서브 클래스를 호출하느냐에 따라 다른 인스턴스가 생성 됨.


abstract factory pattern

인터페이스를 이용하여 연관된 또는 의존하는 객체를 구상 클래스를 지정하지 않고도 생성할 수 있다.


DP - Singleton Pattern의 쓰임새는?

언제나 객체가 한개인 것을 보장. 객체를 메모리에 한번만 올리는 패턴.

여러 곳에서 다른 목적으로 동일한 상태의 객체를 동시에 접근해야 할 때 사용.

싱글톤 패턴으로 구현한 클래스는 프로그램 어느곳에서든 전역으로 접근 가능.



UML이란? 장점은?

UML(Unified Modeling Language)

쉽게 말해서 소프트웨어나 서비스를 여러 각도나 기준에 맞고 이해하기 쉽도록 가시화 해놓은 설계도 같은 것. 소프트웨어 개발 과정에서 산출되는 산출물들을 명시, 개발, 문서화 하기 위한 모델링 언어. 개발에 사용하기 위한 여러 다이어그램들을 정의한다. 다이어그램들을 사용하여 소프트웨어 개발과정의 산출물들을 가시화하고, 개발자들이나 고객과의 의사소통을 원활하게 하도록 한다.


Web Service 란?

인터넷 친화적인 프로토콜(HTTP, SNMP)상에서 표준적인 XML 메시징 시스템을 사용하여 다른 운영체제와 다른 프로그래밍 환경에서도 소프트웨어 컴포넌트를 엑세스 할 수 있는 기술이다. 표준적인 웹 프로토콜을 통하여 플랫폼 독립적으로 프로그램을 액세스 하는 애플리케이션 로직.


IPv4에서 IPv6로 갈 수 밖에 없는 이유는?

기본적인 이유는 IPv4의 주소공간 부족. IPv6의 경우 헤더가 단순해져서 라우터가 라우팅을 더 빠르게 처리할 수 있다. 더 많은 주소공간이 필요한 대다, 빠른 처리 속도가 필요한 이 시점에 IPv6사용이 불가피하다.


IPv6가 IPv4보다 얼마나 더 많은가?

IPv4는 32비트 주소체계. 2의 32승 개의 주소를 만들 수 있다. 약 43억개 정도.

IPv6는 128비트 주소체계. 2의 128승 개의 주소 만들 수 있다.

얼마나 더 많냐고?

개수 만큼 많다.

AMSS에서 IPv6를 위해서는 얼마나 바뀌어야 하는가?


Ubiquitous Computing 등의 동향에 대한 견해?



Java 언어 관련


Interface란?

비슷한 역할을 하는 여러 클래스를 구현 하기 위한 설계도나 가이드 정도. 인터페이스를 상속한 클래스는 인터페이스에서 정의한 메소드들을 반드시 구현해야 한다. 고정된 틀에 얽매이지 않고, 공통된 틀인 인터페이스에 의존하여 그 인터페이스를 상속하여 구현한 클래스에 접근할 수 있다.


Abstract keyword란?

하위 클래스에서 반드시 오버라이딩을 해 줘야 하는 키워드. 메소드나 클래스에서 쓸 수 있음.


Interface vs. Abstract Base Class 용도는?

인터페이스

멤버 변수 정의 불가. 멤버 상수는 정의 가능. 추상메소드만 가능.

같은 분류에 속하여 비슷한 일을 하는 객체의 경우 공통된 틀에 맞게 구현이 되도록 인터페이스를 implements 하는 것이 좋다.


추상클래스

멤버 변수 정의 가능. 추상 메소드, 구현 메소드 모두 가능.

다양한 구현을 하는 중에, 공통적으로 쓰이는 메소드나 변수는 추상 클래스로 묶어서 상속하면 코드 중복을 막을 수 있다.


언제 Friend를 사용해야 하나?

- friend라는 키워드를 함수 선언 앞에 사용.

- 객체의 private 멤버에 direct로 접근 가능함.

- 캡슐화를 깨는 기술이므로 주로 연산자 오버로딩 시 사용.

- 사용해 본 경험 없음


동기화 객체에 대하여 설명하시오

synchronized 키워드가 붙은 객체. 해당 객체가 실행되는 동안에 동기화를 보장하는 것. 서버에서 다중스레드를 사용하여 요청을 처리할 경우, 제일 먼저 요청한 녀석이 동기화 객체로부터 모든 일을 마치고 나올 때까지, 스레드에 붙어 줄줄이 번호표를 뽑고 기다리도록 한다. 동기화 구문이 커지면 작업 수행 속도가 느려질 수 있다. 폭 넓은 관점에서는 안전하다고 생각할 수 있지만 잘못된 방법으로 동기화를 할 경우 의도와 다르게 동작하는 경우가 발생한다. 적재적소에 알맞은 구문의 크기로 동기화를 해야 한다.


Inner Class란? 용도는?

클래스 내에 선언된 클래스. 두 클래스가 서로 긴밀한 관계 일때 내부 클래스를 사용한다. 두 클래스 간에 서로 쉽게 접근할 수 있다는 장점과 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다는 장점이 있다. 특별히 공유되어야 할 클래스가 아닌 경우에는 내부 클래스를 활용하는 것도 좋을 듯.


Reflection이란? 경험, 용도?

객체를 통해 클래스 정보를 분석하는 것을 말한다. 보통 어떤 메소드가 클래스에 정의되어 있는지 알아내기 위해 사용함. 사용해 본 적은 없다.


AWT vs. Swing 기술적인 차이점?

AWT(Abstract Windows Toolkit)

오리지널 자바 GUI 툴킷. 모든 자바 버전에서 제공하는 표준. 매우 안정적. 따로 무언가 설치할 필요 없고 자바 런타임 환경이 있는 곳 어디에서나 사용할 수 있다. 제한된 GUI 컴포넌트, 레이아웃 매니저, 이벤트를 가진 매우 단순한 툴킷.


Swing

AWT의 단점을 해결하기 위한 시도로 만들어짐. AWT를 기반으로 구현됨. AWT 이벤트 모델을 사용하고 colors, images, graphics같은 클래스를지원한다. 자바에 완벽하게 이식 가능하고 고급 그래픽 애플리케이션도 갖추고 있다.


C언어보다 Java언어가 나은 점은?

JVM이 있기 때문에 어느 플랫폼에서도 호환이 가능하다.

표준 라이브러리가 폭넓게 개발되어 있어서 사용이 편하다.

객체지향성 언어로써 재사용성이 뛰어나서 코드가 간결하고 구현하기 쉽다.

캡슐화, 인터페이스 등의 사용으로 보안성이 뛰어나다.


J2ME vs. J2SE/J2EE 차이점 및 특징?

Java 7, Java 8의 new feature?

J2ME에서 Profile, Configuration이란?

최근 표준화 동향에 관해 알고 있는 것이 있는가?



알고리즘


알고리즘은 어떤 작업을 수행하기 위하여 단계별로 작성된 명령들의 집합.


다음의 조건을 만족 해야 한다.

1. 입력 조건 - 외부에서 입력이 제공될 수 있다.

2. 출력 조건 - 적어도 하나 이상의 출력이 생성되어야 한다.

3. 명확성 - 각 명령은 모호하지 않고 명확해야 한다.

4. 유한성 - 어떠한 경우라도 알고리즘이 수행되면 유한개의 스텝 이내에 반드시 종료 되어야 한다.

5. 알고리즘은 실용적으로 그 문제를 해결할 수 있도록 시간과 공간적인 면에 있어서 효율적이어야 한다.


정렬 알고리즘의 종류

  • 거품정렬(bubble sort): 바로 옆 원소끼리의 비교, 대입만 하는 알고리즘.
  • 선택정렬(Selection sort): 가장 큰/작은 값부터 차례대로 리스트의 끝으로 옮겨서 정렬하는 방법으로 실제 상황에서 가장 코딩하기 쉽고 직관적인 알고리즘.
  • 삽입정렬(Insertion sort): 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘
  • 쉘 정렬(Shell sort): 삽입 정렬을 응용하는 방식. 임의로 몇 개의 구분으로 나누어서 삽입정렬 후, 다시 합치고 또 임의로 나누어서 삽입정렬 하는 방식. 하지만 삽입정렬과 비교할 수 없을 정도로 O(n log n) 알고리즘에 버금가는 성능을 자랑하는 알고리즘.
  • 퀵 정렬(Quick sort): 실제로 코딩을 해보면, 퀵 정렬이 코드가 가장 긴데, 실행 시간은 퀵 정렬이 다른 알고리즘들보다 기막힐 정도로 W짧다. 중간값 이라는 뭔가 적당한 값을 선택해야 하고, 최악의 경우 시간 복잡도가 O(n^2)에 메모리 복잡도가 O(n)이 될 가능성까지 있기는 하다.
  • 병합정렬(Merge sort): O(n log n)인 정렬 알고리즘 중에 가장 간단하고 쉽게 떠올릴 수 있는 방법. 퀵 정렬이 큰 리스트를 반씩 쪼갠다 면, 이 방법은 이미 정렬이 된 리스트를 하나 둘씩 합쳐서 작업을 수행하며 이 알고리즘은 소요 시간이 데이터 상태에 별 영향을 받지 않고, 시간 복잡도가 O(n log n) 인 알고리즘 중에 유일하게 안정성이 있다는 데 의미를 둘 수 있지만 병합 정렬의 큰 결점은 데이터 전체 크기만 한 메모리가 더 필요하다는 점들 들 수 있습니다.
  • 힙 정렬: 처음에는 나무 아래에서 위(뿌리)로 각 원소들을 최대 값 힙 조건에 맞게 정리한뒤에나무뿌리에 있는 자료를 차례차례 나무 뒤로 옮기면서 힙을 정렬된 배열로 바꿀수 있습니다. 메모리가 전혀 필요없다는 게 힙 정렬의 큰 장점이지만 수행속도가 동급인 알고리즘들에 비해서는 약간 낮은편입니다.
  • 네 자리 수가 있으면, 백 자리, 십 자리, 일자리 순으로 차례차례 정렬을 한다는 게 기본 전략이며 이 정렬 법은 비교 연산을 하지 않으면서, 무엇보다도 시간 복잡도가 O(n)입니다. 물론 데이터 전체 크기에 기수 테이블 의 크기만 한 메모리가 더 필요하지만. 기수 정렬은 정렬 방법의 특수성 때문에 부동 소숫점 처럼 특수한 비교연산이 필요한 데이터에는 적용할 수 없습니다.


퀵소트를 재귀함수를 쓰지 않고 작성해보세요
확률적으로 진정한 random에 가까운 rand함수를 작성해보세요


DS - heap sort란?

DS - balanced tree중에서 하나 설명?

DS - computational complexity? O()


 


Network 관련


network에서 blocking과 non-blocking의 차이는? 용도는?


Big endian vs. little endian?


Port란? 개념?


Well-known port?


TCP vs. UDP 차이점?


Hash란? 용도?


Tree 형태의 자료구조를 프로그램에서 사용해 본적이 있는가?


busy wating에 대하여 설명하고 이를 회피하는 방법에 대하여 설명해보세요.


서버를 작성할때 CS(lock)를 어떻게 하면 최대한 줄일수 있을지 설명해보세요.



개발환경 관련


선호하는 개발 언어 및 환경

UNIX/LINUX 사용 경험

Scrpt Language like perl, python, etc.

Makefile

Regular expression이란?

Call by reference, Call by value?

Variable Argument like printf()

Static Function의 의미는?

#ifdef

Malloc()함수란?

Heap이란?

Scanf, printf의 차이점

malloc vs. calloc

Virtual 이란?



기타


IIS의 구동메커니즘을 설명하시오

데이터 베이스 인덱스의 구조를 설명해보세요

세그먼트 디스크립터의 종류와 구조에 대하여 설명해보세요

SQL 인젝션을 막을수 있는 방법은 무엇이 있을까요

object file과 library의 차이

module의 개념. 모듈화?

OOP 언어에서 class와 object의 차이는?

interface와 implementation의 차이?


OO - 객체지향의 개념 및 특징, 장점은?

OO - 다형성이란?

OO - Overload와 Override의 개념을 각각 기술하라


OS - process state transition diagram

OS - process 와 thread의 차이점

OS - Critical Section (임계영역)

OS - deadlock 개념, 해결책/회피책

OS - semaphore

OS - iNode

OS - best fit/first fit/worst fit


DB - 트랜잭션

DB - B(+) Tree


Pointer와 Array의 공통점과 차이점

Pointer와 Reference의 차이점과 사용 용도


(a-1) xor a == 0 이 의미하는 바는?

반응형