ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹 개발 면접 예상 질문
    카테고리 없음 2013. 7. 19. 10:32

    이 포스트의 1차 목적은 제가 면접에 성공하는 것이지만 호호..

    JSP 웹 프로그래머 면접에 나올만한 걸 적어 봤어요...

    JSP가 JAVA 기반이라 그런지 JAVA에 대한 질문을 많이 하는 것 같아요.

    1. Object, Class, Instance를 각각 설명하세요.

    Object :

    1. 사전적인 의미로는 '실제로 존재하는 것' 입니다. 객체라고 부르고요..

    2. 뭔뜻이지 허허.. 포괄적인 의미로 모든 사물이나 개념을 말합니다. 눈에 보이든 안보이든 전부를 각각 객체라고 부른다는 것이지요..

    3. 예를 들어 사과, 책상, 자동차 등과 같은 것을 모두 객체라고 부릅니다.

    4. 사용이유는 객체가 가지고 있는 기능과 속성에 따라 달라집니다.

    Class :

    1. 객체를 정의해 놓은 것이라고 보면 됩니다. 객체를 생성하기 위해 사용 되지요.

    2. 클래스는 단지 객체를 생성하는데 사용 될 뿐 객체 그 자체는 아닙니다.

    3. 사용이유는 클래스를 한번만 잘 만들어 놓기만 하면, 매번 객체를 생성 할 때마다 어떻게 객체를 만들어야 할지를 고민하지 않아도 되기때문입니다. 특히 복잡하고 커다란 class라면 더욱 편리하겠지요.

    Instance :

    1. 의미상으로는 객체랑 비슷합니다.

    2. 인스턴스화 : class 로부터 객체를 만드는 과정을 클래의 인스턴스화라고 합니다. ( 붕어빵 a = new 붕어빵(); )

    3. 그 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 부릅니다.

    아주 조금 더 자세히 보려면~ : http://blog.naver.com/xerosda/30103384848

    2. 프로그램과 프로세스를 설명하세요.

    프로그램 :

    1. 사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 올바른 수행절차를 표현해 놓은 명령어들의 집합을 말합니다.

    2. 입력에서부터 출력에 이르는 모든 동작을계획, 제어하는 절차.

    프로세스 :

    1. 간단하게 말하면 '실행 중인 프로그램' 입니다.

    2. 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 되는 거에요.

    3. 프로세스는 수행에 필요한 데이터와 메모리등의 자원과 쓰레드로 구성되어 있어요.

    4. 쓰레드란 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것을 말해요.

    5. 그래서 프로세스에는 하나 최소한 하나 이상의 쓰레드를 가지고 있고 2개 이상을 멀티 쓰레드 프로세스라고 불러요.

    아주 조금 더 자세히 보려면~ : http://blog.naver.com/xerosda/30103392434

    3. Private, Public, Protected 을 각각 설명하세요.

    이 세가지 외에 없을경우(defalut)와 함께 총 네가지를 Access Modifier라고 부른다. 말 그대로 접근 방식을 제어 하는 방법이다.

    Public :

    1. 공용입니다. 즉, 모든 곳에서 사용 가능합니다.

    2. 어디서든 public 으로 선언된 멧소드나 변수를 호출하여 사용할수 있습니다.

    Private :

    1. 이것은 자신의 클래스안에서 선언된 변수나 멧소드는 외부에서 전혀 접근하지 못하게 하는겁니다

    2. 이경우는 부모클래스를 상속받은 자식클래스라고 할지라도 private 선언된 변수나 맷소드를 호출할수 없으며 오직 선언된 클래스 안에서만 사용가능합니다.

    Protected :

    1. 단어 뜻은 '보호' 입니다. 즉, 외부에서 접근 할 수 없게 만들때 사용합니다.

    2. 한마디로 선언한 클래스에서만 사용 가능합니다.

    3. 단 Protected가 선언되어있는 클래스를 상속하였을 경우에는 그 해당 변수나 멧소드를 선언되어진 클래스와 그 클래스를 상속한 클래스가 사용 할 수 있습니다.

    아주 조금 더 자세히 보려면~ : http://blog.naver.com/xerosda/30103413550

    4. 오버로딩과 오버라이딩의 차이를 설명하세요.

    오버라이딩이란?

    1. 사전적의미는 '~위에 덮어쓰다' 또는 '~에 우선하다' 입니다.

    2. 즉, 조상 클래스(super class)로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 합니다.

    3. 상속받은 메서드를 그대로 사용하기도 하지만, 자손 클래스(subclass) 자신에 맞게 변경해야 하는 경우가 많습니다. 이를 오버라이딩이라고 합니다.

    오버로딩이란?

    1. 오버로딩과 오버라이딩은 서로 이름때문에 혼동하기 쉽지만 사실 그 차이는 명백합니다.

    2. 오버로딩은 기존에 없는 새로운 메서드를 추가하는 것이고, 오버라이딩은 위에서 처럼 조상으로부터 상속받은 메서드의 내용을 변경하는 것이기때문입니다.

    3. 오버로딩은 메서드 이름이 같아도 매개변수가 다르다면 여러개를 선언할 수 있습니다.

    아주 조금 더 자세히 보려면~ : http://blog.naver.com/xerosda/30103411828

    5. Iterface를 설명하세요

    Interface란?

    1. 일종의 추상 클래스입니다.

    2. 추상 메서드처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없습니다. 오직 추상메서드와 상수만을 멤버로 가질 수 있으며, 그외의 다른 어떠한 요소도 허용하지 않습니다.

    3. 추상클래스가 완성되지 않은 '미완성 설계도' 라고 한다면, 인터페이스는 밑그림만 그려져 있는 '기본 설계도'라 할 수 있겠네요.

    Interface 특징 :

    1. 인터페이스의 멤버들은 모두 몸체가 없습니다

    2. 인터페이스의 멤버들은 Default로 모두 public입니다.

    3. 내부에 필드를 가질 수 없습니다

    4. 멤버에 어떠한 접근자, 한정자도 붙이지 않습니다.

    5. 인터페이스끼리 상속하면 더 큰 인터페이스가 됩니다.

    6. 인터페이스는 구현을 목적으로 합니다.

    7. 인터페이스도 상위 클래스의 역할을 할 수 있습니다. 상위 클래스의 이름으로 하위 객체의 함수를 호출합니다

    아주 조금 더 자세히 보려면~ : http://blog.naver.com/xerosda/30103407259

    6. Collection Framework에 대하여 설명하시오.

    1. 다수의 데이터를 쉽게 처리할 수 있는 표준화된 방법을 제공하는 클래스들 입니다.

    2. '데이터 군을 저장하는 Vector와 같은 클래스들을 표준화한 설계'를 뜻합니다.

    3. 핵심 인터페이스

    인터페이스

    특 징

    List

    순서가 있는 데이터의 집합. 데이터의 중복을 허용합니다.

    예) 대기자 명단

    구현 클래스 : ArrayList, LinkedList, Stack,Vector 등

    Set

    순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않습니다.

    예) 양의 정수집합, 소수의 집합

    구현 클래스 : HashSet, TreeSet 등

    Map

    키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터의 집합.

    순서는 유지 되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용 합니다.

    구현 클래스 : HashMap, TreeMap, Hashtable, Properties 등

    7. Vector와 ArrayList을 설명하고 차이점을 말하세요.

    1. Vector와 ArrayList는 컬렉션 프레임워크에서 가장 많이 사용 되는 컬렉션 클래스 입니다.

    2. 이 둘은 List인터페이스를 구현하기 때문에 데이터의 저장순서가 유지되고 중복을 허용한다는 특징이 있습니다.

    3. ArrayList는 기존의 Vector를 개선한 것으로 Vector와 구현원리와 기능적인 측면에서 동일하다고 할 수 있습니다.

    4. Vector는 기존에 작성된 소스와의 호환성을 위해서 계속 남겨두고 있을 뿐이기 때문에 가능하면 ArrayList를 사용하는 것이 좋습니다.

    간단하게 표로 정리하면..

    공통점

    차이점

    1. List 인터페이스를 구현합니다.

    2. 저장순서가 유지되고 중복을 허용합니다.

    3. 데이터의 저장 공간으로 배열을 사용합니다.

    1. Vector는 멀티쓰레드에 대한 동기화가 되어 있으나 ArrayList는 그렇지 않다.

    8. Stack과 Queue, LinkedList를 각각 설명하세요.

    Stack이란?

    1. 스택은 한 개 이상의 데이터를 저장할 수 있는 기억 공간입니다.

    2. 이런 면에서 보면 배열과 매우 유사하지만 아주 큰 차이점이 있습니다. 일반배열은 첨자로 어느 위치에나 데이터를 랜덤하게 저장할 수 있지만 스택은 항상 순차적으로 저장됩니다.

    3. 스택은 top라고 불리는 한쪽 끝에서만 삽입 삭제가 행해집니다. 즉, 반대쪽은 막혀있다고 보고 입출력을 하지 않습니다.

    4. 그래서 맨 처음(First)에 입력(Input)된 값이 가장 나중(Last)에 출력(Output)되고 가장 나중(Last)에 입력(Input)된 것이 가장 먼저(Fist) 출력(Output) 됩니다. Last Input First Output이고 약어로 LIFO라 부르거나 First Input Last Output이라 해서 약어로 FILO라고 부릅니다.

    구조

    메서드

    설 명

    push() pop()

    ↓ ↑

    4

    3

    2

    1

    pop()

    스택의 맨 위에서 객체를 제거하고 그 객체를 반환합니다.

    push(E item)

    스택의 맨위에 객체를 추가합니다.

    peek()

    스택의 맨 위에 있는 객체를 반환한다. 이 때 객체를 스택에서 제거하지는 않습니다.

    Boolean empty()

    현재 스택이 비어있는지를 확인합니다. isEmpty도 동일한 기능

    Queue란?

    1. 큐는 FIFO(First In First Out) 구조로 알려져 있는 자료구조입니다.

    2. 예를 들어 은행에서 업무를 보기 위해서 번호표를 뽑습니다. 먼저 번호표를 뽑은 사람이 먼저 일을 볼 수 있듯이 먼저 들어간 데이터가 먼저 나오게 되는 구조입니다.

    3. 스택의 입구가 하나라고 한다면 큐의 입구는 앞, 뒤 즉, 2개 입니다.

    구조

    메서드

    설 명

    offer()

    4

    3

    2

    1

    poll()

    boolean offer(E o)

    큐에 객체를 넣습니다.

    E poll()

    큐에서 데이터를 꺼내옵니다.

    만일큐가 비어있다면 null을 반환합니다.

    E peek()

    큐의 맨 위에 이쓴 객체를 반환합니다. 이 때 객체를 큐에서 제거하지는 않습니다. 그리고 큐가 비어있다면 null을 반환합니다.

    LinkedList이란?

    1. Queue 인터페이스를 구현한 클래스.

    2. 노드(node)와 링크(link)로 구성이 되어진 리스트입니다.

    3. 배열이 정적인 자료구조라고 불린다면 연결리스트는 동적인 자료구조입니다.

    4. 필요할 때마다 노드를 추가할 수 있고 없어지면 노드를 해제 시킬 수 있습니다.

    5. 하지만 그만큼 속도와 코딩의 가 독성이 떨어집니다.

    9. EJB의 장단점을 설명하세요.

    EJB의 장점

    1. 정형화된 비즈니스 계층을 제공합니다. 비즈니스 계층에 대하여 논리적인 분리뿐만 아니라 물리적인 분리까지 가능하도록 지원하고 있습니다.

    2. 선언적인 트랜잭션 관리와 같이 Non EJB 아키텍처에는 지원하기 힘들었던 기능을 EJB 컨테이너가 제공합니다.

    3. EJB는 다양한 클라이언트에 대한 지원이 가능합니다. EJB는 웹 UI 계층뿐만 아니라 Swing과 같은 GUI 클라이언트도 지원하는 것이 가능합니다.

    4. 분산 기능을 지원하는 겅이 가능합니다.

    5. 최근에는 드문 경우지만 비즈니스 객체를 여러 서버에 분산시키는 것이 가능합니다.

    EJB의 단점

    1. 가장 큰 문제점은 실행 속도의 문제입니다. 분산 환경을 지원하기 위하여 객체를 직렬화하는 과정 때문에 실행 속도의 저하가 발생합니다.

    2. 개발 사이클의 소스 수정, 빌드, 배포, 테스트와 같이 복합한 과정을 거치기 때문에 개발 생산성이 저하되는 결과를 가져옵니다.

    3. EJB는 EJB 컨테이너가 종속적이기 때문에 개발한 후 EJB 컨테이너에 배포한 다음에 테스트를 진행해야 합니다. 이는 테스트를 어렵게 만들며, 테스트의 어려움으로 인해 제품의 질(Quality)이 저하되는 결과를 초래합니다.

    4. EJB의 실행 속도 문제를 해결하기 위한 방법으로 EJB를 위한 변형된 패턴들이 나타나면서 객체 지향 적으로 개발하는데 제약사항이 됩니다.

    5. EJB 자체 스팩이 가지고 있는 실행 속도가 떨어진다는 문제로 인해 EJB 컨테이너를 만드는 대형 벤더들 나름대로 자신들만의 기능들을 추가함으로써 EJB 컨테이너 사이의 이식성(Portability)이 떨어집니다.

    10. SI 가 뭔지 아시고 오셨나요?

    SI(System Integration), 즉, 시스템 통합 서비스 사업으로 말 그대로 고객의 기존 전산시스템을 통합거나 새로운 시스템을 구축하여 업무의 프로세스를 획기적으로 개선하는 작업이며, 이 작업을 통해 고객은 생산비 절감과 품질제고 등의 효과를 얻을 수 있습니다.

    11. statement와 preparestatement 란 뭘까요?

    Statement

    1. Statement 인터페이스는 Connection 객체에 의해 프로그램이 리턴되는 객체에 의해 구현되는 일종의 메소드 집합을 정의합니다.

    2. Statement 객체는 Statement 인터페이스를 구현한 객체를 항상 인수가 없는 Connection 클래스의 createStatement()메소드를 호출함으로써 얻어집니다.

    3. 일단 Statement 객체를 ㅅ생섷아면 Statement 객체의 executeQuery()메소드를 호출하여 SQL질의를 실행시킬 수 있습니다. 메소드 인수로는 SQL 질의의 문장을 담은 String 객체를 전달합니다. Statement객체는 단순한 질의문을 사용할 경우에 좋습니다.

    PrepareStatement

    1. PrepareStatement 객체는 Connection 객체의 PrepareStatement()메소드를 사용해서 생성합니다.

    2. SQL문장이 미리 컴파일되고, 실행 시간 동안 인수값을 위한 공간을 확보할 수 있다는 점에서 Statement 객체와는 다릅니다.

    3. 동일한 질의문을 특정 값만 바꾸어서 여러 번 실행해야 할 때, 많은 데이터를 다루기 때문에 질의문을 정리해야 할 필요가 있을때, 인수가 많아서 질의문을 정리해야 될 필요가 있을 때 사용하면 유용합니다.

    4. Statement 객체의 SQL은 실행될 때 매번 서버에서 분석되어야 하는 반면, PrepareStatement 객체는 한 번 분석되면 재사용이 용이합니다.

    각각의 인수에 대해 위치홀더(placeholder)를 사용하여 SQL 문장을 정의할 수 있게 해줍니다. 위치홀더는 물음표(?)로 표현됩니다.

    PrepareStatement 객체의 장점

    1. Statement 객체와 PrepareStatement 객체 중에 무엇을 사용하는 것이 좋은가? 라는 답은 PrepareStatement 객체입니다.

    2. 동일한 질의문 특정 값만 바구어서 여러 번 실행해야 할 때, 많은 데이터를 다루기 때문에 질의문을 정리해야 할 필요가 있을 때, 인수가 많아서 질의문을 정리해야 될 필요가 있을 때 좋습니다.

    3. 미리 컴파일되기 때문에 쿼리의 수행 속도가 Statement 객체에 비해 빠릅니다.

    4. Statement 객체는 쿼리 실행시 작은따옴표(')가 들어 있으면 작은따옴표를 두 개(' ')로 표시해야 합니다. 예를 들어<She's gone>의 경우 <She''s gone>이라 표시해야 합니다. 그러나 PrepareStatement 객체는 작은 따옴표의 문제를 쿼리 실행시 자동으로 처리하므로 신경쓸 필요가 없습니다.

    아주 조금 더 자세히 보려면~ : http://blog.naver.com/xerosda/30104577227





    << 기타 질문들 >>

    1. 개발환경을 스스로 구축해 본적이 있는가?


    2. 지금껏 문자열을 다루면서 가장 곤란했던 경험을 이야기하고 해결과정을 설명하시오(한글문제 포함)


    3. 가장 최근에 수행했던 프로젝트에 대하여 설명하고, 어려웠던 점, 보람찼던 점, 팀원들에 대하여 이야기하시오..


    4. 자신이 프로그램 한것중에 가장 기억에 남았던 부분을 설명하세요.(기능적으로 말고,구현과 업무관점에서)


    5. 자신의 코딩스타일은 어떻습니까?


    6. 소프트웨어를 만든는데 있어서 가장 비중을 크게 해야될 부분은 어디라고 생각하시나요?


    7. 향후 web개발에 대해서 어떻게 생각하시나요?


    8. web2.0 이 뭐라고 생각하세요?



    출처 : http://blog.naver.com/xerosda/30103391840

    저작자 표시 비영리 변경 금지
    Posted by #주년#

    댓글

COPYRIGHT 2010 EpoNg. ALL RIGHTS RESERVED.