상세 컨텐츠

본문 제목

자바 면접 예상 질문

Etc

by husks 2014. 11. 20. 23:36

본문

반응형

URL & URI

URI는 인터넷 상의 자원을 식별하기 위한 문자열의 구성쯤으로 해석 될 수 있겠다. 

http://en.wikipedia.org/wiki/URL 

URI의 한 형태인 URL은 인터넷 상의 자원 위치를 나타낸다. 

URL는 URI의 한 형태로, 바꿔 말하면 URI는 URL을 포함 하는 개념이다. 

(URI > URL) 

인터넷 상의 자원의 위치와 식별자. 

언듯 보면 같은 것을 의미하는 듯 하다. 

하지만 '자원의 위치'라는 것은 결국은 '하나의 파일 위치'를 나타내는 것임을 명심하자. 

http://img0.gmodules.com/ig/images/korea/logo.gif 

이와 같은 형식은 logo.gif라는 인터넷상의 자원 위치를 의미 한다. 

이는 URI이면서도 URL라고 말할 수 있다. 

다음은 어떠한가. 

http://endic.naver.com/endic.nhn?docid=1232950 

http://endic.naver.com/란 서버에 위치한 endic.nhn파일은 query string인 docid의 값에 따라 여러가지 결과를 나타낸다. 

여기서 URL은 endic.nhn의 위치를 표기한 http://endic.naver.com/endic.nhn 까지이다. 

내가 원하는 정보에 도달 하기위해서는 ?docid=1232950라는 식별자(Identifier)가 필요한 것이다. 

결국 위의 http://endic.naver.com/endic.nhn?docid=1232950 주소는 URI이긴 하지만 URL은 아니다. 

또다른 예를 들면, 

http://endic.naver.com/endic.nhn?docid=1232950 

http://endic.naver.com/endic.nhn?docid=1232690 

위 두 주소는 같은 URL이고 다른 URI라고 할 수 있다. 

(이건 좀 억지긴 하지만 개념을 이해하기 바란다.) 


Forwarding VS Redirect

JSP/Servlet에서는 현재 작업중인 페이지에서 다른 페이지로 이동하는데 두 가지 방식을 가지고 있다. 
포워딩(Forwarding)과 리다이렉트(Redirect)로 둘 다 다른 웹 페이지로 이동하지만 처리 형태가 다르다.

포워딩(Forwarding)
Web Container 차원에서 페이지 이동만 있다. 실제로 웹 브라우저는 다른 페이지로 이동했음을 알 수 없다. 그렇기 때문에, 웹 브라우저에는 최초에 호출한 URL이 표시되고 이동한 페이지의 URL 정보는 볼 수 없다. 동일한 웹 컨테이너에 있는 페이지로만 이동할 수 있다. 현재 실행중인 페이지와 Forwad에 의해 호출될 페이지는 request와 response 객체를 공유한다.




리다이렉트(Redirect)
Web Container는 Redirect 명령이 들어오면 웹 브라우저에게 다른 페이지로 이동하라고 명령을 내린다. 그러면 웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동한다. 다른 웹 컨테이너에있는 주소로 이동이 가능하다. 새로운 페이지에서는 request와 response객체가 새롭게 생성된다.

Forwarding 

- 요청을 Forwarding할때 해당 요청은 서버의 다른자원(Servlet 또는 JSP) 에 전달된다. 이때는 다른 자원에서 요청을 처리할 것을 클아이    언트 에 알리지 않는다. 이러한 방식의 처리는 웹 컨테이너 안에서만 일어나고, 클라이언트는 알수 없게된다. 포워딩은 리 다이렉트와는    다르게 객체를 요청에 담고, 해당 요청을 사용할 다음 자원에 전송한다.  

   따라서 클라이언트는 포워딩이 발생한 사실을 알지 못한다. 포워딩은 클라이언트와 통신 없이 서버에서만 처리되기 때문에 리다이렉트     보다 나은 성능을 보여준다.

 

Redirect

- 클라이언트의 요청을 처리 한 후, 컨테이너는 sendRedirect() 메소드가 호출되면서 브라우저에 응답을 보낸다. 이 응답에는 브라우저가    웹 컨테이너 의 응답을 받은 후 다시 요청을 보낼 새로운 URL을 포함한다. 여기에서 하나의 요청이 종결된다 새로 부여받은 URL 로 브      라우저에서 완전히 새롭게 요청하기 때문에 이전의 요청 스코프에 저장되어 있는 객체는 새로운 요청 전에 소멸된다.

   Redirect 는 추가적으로 발생한 왕복 처리 때문에 Forwarding보다 느리다. 기억해야 할 것은 최종적으로 수행하는 작업은 새로운 요청 

   에 의한 것이고, 이것을 클라이언트가 알고 있기 때문에 브라우저 창의 주소가 처음 요청한 주소가 아니고 최종 주소 값으로 변한다. 또      한 하나의 요청에 담겨있던 객체들은 소멸되어 다음 작업까지 전달되지 않는다  


abstract, interface

http://silverktk.tistory.com/134

http://jejoong76.blog.me/70128890389


추상클래스란 무엇인가? 

클래스를 설계도에 비유한다면 추상클래스는 미완성 설계도에 비유할 수 있다. 미완성 설계도란, 단어

의 뜻 그대로 완성되지 못한 채로 남겨진 설계도를 말한다. 클래스가 미완성이라는 것은 멤버의 개수에

관계된 것이 아니라, 단지 미완성 메서드(추상메서드)들 포함하고 있다는 의미이다. 미완성 설계도로

완성된 제품을 만들 수 없듯이 추상클래스로 인스턴스는 생성활 수 없다. 추상클래스는 상속을 통해서

자손클래스에 의해서만 완성될 수 있다. 


인터페이스란 무엇인가? 

인터페이스는 일종의 추상클래스이다. 인터페이스는 추상클래스처럼 추상메서드를 갖지만 추상클래스

보다 추상화 정도가 높아서 추상클래스와는 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으

로 가질 수 없다. 오직 추상메서드와 상수만을 멤버로 가질 수 있으며, 그 외의 어떠한 요소도 허용하지

않는다. 추상클래스를 부분적으로만 완성된 '미완성 설계도'라고 한다면, 인터페이스는 구현된 것은 아

무것도 없고 밑그림만 그려져 있는 '기본 설계도'라고 할 수 있다. 인터페이스는 인터페이스로부터만

상속받을 수 있으며, 클래스와는 달리 다중상속, 즉 여러개의 인터페이스로부터 상속을 받는 것이 가능

하다. 


오버로딩 오버라이딩

http://hyeonstorage.tistory.com/185


프로시저

http://todduf.blogspot.kr/2012/03/in-sql-out-program-inout-sql-program.html


다형성

http://blog.naver.com/ljc727/110177349221


가변인자

http://ljsk139.blog.me/220001871535


GC

http://helloworld.naver.com/helloworld/1329


1~5세대 언어

http://devcrack.blogspot.kr/2013/02/1-5_7.html


멀티쓰레드

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=943947&ref=488394

http://ra2kstar.tistory.com/131

http://blog.kangwoo.kr/58


백터

http://hyeonstorage.tistory.com/208

http://dynamide.tistory.com/953


기본키, 외래키

http://ynebula38.tistory.com/65


having

http://energ.tistory.com/entry/The-HAVING-Clause

http://www.gurubee.net/lecture/1032


자바의 데이터 타입인 Primitive Type과 Reference Type에 대해 설명하세요

Primitive Type은 변수에 값 자체를 저장하며 Reference Type은 메모리상에 객체가 있는 위치를 저장한다.

Primitive Type의 종류는 boolean, byte, char, short, int, float, long, double 총 8가지 이며

Reference Type 종류는 클래스타입, 인터페이스타입, 배열타입, 열거타입이 있다. 


다형성이란 무엇인가? 

여러가지 데이터를 다룰 수 있는 특성을 뜻한다.

조상클래스의 인스턴스를 이용하여 자손타입의 클래스를 다룬다거나,

메서드 오버로딩을 통하여 동일 이름의 메서드를 이용하여 다양한 형태의 파라미터를 다루는 것을 뜻한다. 


멀티 쓰레드의 장단점은 무엇인가?

두 가지 이상의 작업을 동시해 실행 할 수 있어 자원을 효율적으로 이용할 수 있으나

dead lock 및 동기화에 대한 철저한 검증이 필요하다. 


 Java 콜렉션의 대표 인터페이스는 무엇인가? 

http://huskdoll.tistory.com/76

 List

 순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다.
 구현클래스 - ArrayList, LinkedList, Stack, Vector

 Set

 순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다.
 구현클래스 - HashSet, TreeSet

 Map

 키와 값의 쌍으로 이루어진 데이터의 집합으로 순서는 유지되지 않으며, 키는 중복을 허용하지 않고,

 값은 중복을 허용한다.
 구현클래스 - HashMap, TreeMap, HashTable, Properties


접근제어자의 종류와 특성에 대하여 설명하라. 

private - 같은 클래스 내에서만 접근이 가능하다.

default - 같은 패키지 내에서만 접근이 가능하다.


protected - 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다.


public - 접근 제한이 전혀없다.

접근 허용 범위는 아래와 같다

public > protected > default > private 


객체의 직렬화란 무엇인가? 
객체를 데이터 스트림으로 만드는 것을 뜻한다.
객체에 저장된 데이터를 스트림에 쓰기위해 연속(serial)적인 데이터로 변환하는 것을 말한다.
반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역직렬화라고 한다.
직렬화가 가능하게 하기위해서는 java.io.Serializable인터페이스를 구현하면 된다.
직렬화하고자 하는 객체의 클래스에 직렬화가 안 되는 객체에 대한 참조를 포함하고 있다면,
제어자 transient를 붙여서 직렬화 대상에서 제외하도록 할 수 있다. 


Wrapper 클래스란 무엇인가? 

http://hyeonstorage.tistory.com/168

primitive 타입으로 표현할 수 있는 간단한 데이터를 객체로 만들어야 할 경우가 있는데 그러한

기능을 지원하는 클래스를 뜻하며 각 primitive 타입에 대응하는 Wrapper 클래스는 아래와

같다.

byte       => Byte

short      => Short

int         => Integer

long      => Long

char      => Character

float      => Float

double  => Double

boolean => Boolean 


객체지향 언어(Object Oriented Language)의 장점은 무엇인가?

  - 코드의 재사용성이 높아 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.

  - 코드의 관리가 용이하여 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

  - 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을

     제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.


Thread를 구현하기 위한 두 가지 방법은 무엇인가? 

java.lang.Thread 클래스를 상속받거나 java.lang.Runnable 인터페이스를 구현한다.


NIO란 무엇인가? 

기존 자바IO의 단점을 보완한 New IO(NIO) 패키지로써 nonblocking IO를 지원한다.

Buffer클래스를 도입하여 기존에 단순배열로만 처리해야 했던 많은 부분들을 좀 더 


효율적이고 편리하게 다룰 수 있도록 지원한다.

기존의 스트림은 단방향이었으나 Channel을 도입하여 읽기, 쓰기, 읽고쓰기 등의 세가지

형태의 작업방식을 지원하며, 운영체제에서 제공하는 다양한 네이티브 IO서비스를 이용

가능하게 지원한다.

버퍼, 채널과 함께 셀렉터를 이용하게 함으로써 단 한개의 쓰레드만으로 수천에서 수만명의 


동시 사용자를 처리 할 수 있는 서버를 만들 수 있게 지원한다.


REST 서비스란 무엇인가? 

확장성 생성 언어(XML) 파일로 된 웹 페이지를 읽어 원하는 정보를 수집하는 기능. 웹 페이지를 만드는 사람은 주기적으로 내용을 개정하고 사용자는 그 페이지의 URL만 알면 웹 브라우저로 읽어 정보를 얻을 수 있다. 하이퍼텍스트 전송 규약(HTTP)과 XML을 포함한 웹 기술 및 프로토콜을 사용하는 구조적 형태로서 단순 객체 접근 프로토콜(SOAP)보다 사용이 간편하고, 사이트 내용을 기술하는 RSS(RDF Site Summary)의 정보 편집 기능과 유사하다. RSS는 자원 기술 개념(RDF)을 사용한다. 


CI란 무엇인가? 

continuous integration의 약자로 말 그대로 지속적인 통합을 말한다.

개발이 완료되는 시점에 단위기능들을 통합하는것이 아닌 개발과 동시에 통합을 진행함으로써 


소프트웨어의 품질을 향상시키는것을 목표로 한다. 


DI란 무엇인가? 

Dependency Injection의 약자로 의존성을 주입하는 것을 뜻한다.


설정 파일을 통해 객체간의 의존관계를 설정함으로써 외부 Assembler가 객체간의 의존 관계를 정의하게 되며, 객체는 직접 의존하고 있는 객체를 생성하거나 검색할 필요가 없어지므로 코드의 관리가 쉬워진다. 


AOP란 무엇인가? 

Aspect Oriented Programming을 뜻하며 다양한 곳에서 자주 사용되는 공통 관심요소를 단일 기능으로 뽑아내어 코드의 중복을 줄이고 관리의 효율성을 높이는 것을 목적으로 한다.

로깅이나 로그인등의 기능을 예로 들 수 있다. 


http://ejunghyun.com/133 (개인정리)


TCP, UDP

http://ddiri01.tistory.com/28


Statement, PreparedStatement

http://hongal.tistory.com/87


String, StringBuilder, StringBuffer

http://hongsgo.egloos.com/2033998

http://java.ihoney.pe.kr/75


http://kumbange.tistory.com/265 (개인정리)


pstmt.executeBatch()

한건씩 insert 하는것이 아니다 많은 건을 메모리에 저장후 한번에 insert 하는 거죠 

대용량일수록 성능차이가 어마어마 하죠 

http://blog.naver.com/geerark/100008948983


reflection

http://seongih7.blog.me/220155959576


옵티마이져


트랜젝션의 4가지 특성


시퀀스와 캐쉬


오라클의 커서



트리거란?

데이터베이스 내에서 트리거가 가지는 조건 테이블에 어떤 이벤트(UPDATE, INSERT 등)가 발생할 때마다, 트리거가 생성될 때 정의된 BEGIN ~ END사이의 문장들을 먼저 처리하여 사용자가 원치않는 테이블의 변경작업을 방지할 수 있는 방법



PL/SQL


인덱스를 써야 하는 이유에 대해서 설명하시오 

인덱스의 장점 : select 속도가 빨라진다. 

단점 : insert, update 시에 인덱스를 수정하므로 추가적인 I/O 발생이 생긴다. 

너무 많은 인덱스를 잡아두면 성능에 문제가 생길수도 있다. 


VIEW에 대해서 설명하시오 

가상 테이블 


TRIGGER에 대해서 설명하시오 

insert, delete, update 등의 데이터 변환이 일어날때 DB에서 자동으로 액션이 발생할수 있게 해주는거 


TRANSACTION에 대해서 설명하시오 

여러개의 작업이 발생할때 하나의 단위로 묶어 일괄 실행, 일괄 취소 할수있게 해주는것. 

중간에 에러가 나면 없던일로 처리할 수 있다. 


INNER JOIN 과 LEFT JOIN의 차이점을 설명하시오 

inner join 교집합. 서로 동일한게 있을 때만 결과가 나온다. 

left join 왼쪽 테이블을 주 테이블로 잡고 오른쪽 테이블을 매치시킨다. 오른쪽 테이블에 데이터가 없어도 나오게 된다. 


중급 


스토어드 프로시져가 일반 쿼리보다 빠른 이유를 설명하시오 

쿼리가 매우 길 경우 데이터 전송 시간을 줄일 수 있다. 

미리 컴파일 되어 있으므로 DB 분석기에서 쿼리 분석할 시간을 줄여준다. 

가능할 경우 내부캐쉬를 사용한다. 


MAX, MIN 함수가 실행비용이 높은 이유를 설명하시오 

데이터 내부 정렬이 발생하므로. 


ORDER BY 가 부하를 주는 이유를 설명하시오 

데이터 내부 정렬이 발생하므로. 

위와 동일한 질문이다. 데이터가 DB에서 어떻게 가공되느냐 하는 부분을 알고 있는게 중요하다. 


고급 

오라클과 MS-SQL의 NULL 처리의 차이점에 대해서 설명하시오 

오라클 null은 아예 데이터가 없는 상태, 인덱스를 태우거나 정렬등의 작업이 불가능하다. 

MS-SQL : 공백(null) 데이터가 DB에 들어가 있는 상태이다. 


일반 인덱스와 클러스터드 인덱스의 차이점에 대해서 설명하시오 

클러스터드 인덱스 : 데이터의 순서와 인덱스 순서가 완전히 정렬되어 있다. 한개만 만들수 있다. 속도가 빠르다. 


NESTED LOOP JOIN, SORT MERGE JOIN, HASH JOIN 에 대해서 설명하시오 

nested loop : 순차적 조인. A에서 결과를 찾아내면서 이를 만족하는 데이터를 B에서 순차적으로 찾는다. 

sort merge : 동시적 조인. A에서 결과를 만들고 B에서 결과를 만들면서 두개를 비교한다. 

hash join : sort merge에서 디스크 대신 메모리의 hash table을 사용한다. 


인덱스 생성시 주의할 점 및 생성 기준에 대해서 설명하시오 

분포도가 낮은 필드를 가지고 생성한다. 

너무 크기가 큰 필드를 인덱스로 잡지 말자. 


웹프로그래밍 공통 질문 


초급 

ASP,JSP와 자바스크립트의 차이점에 대해서 설명하시오 

ASP : 서버에서 실행 

자바스크립트 : 클라이언트에서 실행 


쿠키와 세션의 차이점에 대해서 설명하시오 

세션 : 서버에서 저장 관리 

쿠키 : 사용자 컴터에 저장 


get, post의 차이점에 대해서 설명하시오 

get : 주소표시줄에 데이터가 붙어서 이동. 최대 2kb까지 가능 

post : 데이터가 안보임. 


세션에 DB연결을 집어넣어 사용하면 안되는 이유를 설명하시오 

세션에 DB연결을 넣으면 사용자 수만큼 DB연결이 유지되므로 DB가 뻗음 


HTTP 404, 500 에러에 대해서 설명하시오 

404 : 페이지를 찾을 수 없음 

500 : 내부 서버 에러 


ASP 관련 질문 


초급 

option explicit 란 무엇인지 설명하시오 

이걸 사용하면 변수를 쓰기전에 반드시 선언해야 한다. 


세션과 어플리케이션의 차이점에 대해서 설명하시오 

세션 : 사용자별로 생기는 데이터 

어플리케이션 : 서버에서 관리되는 고유 데이터 


ASP의 제어문과 루프문에는 어떤것이 있는가 

if, for, while, select case, do 


중고급 

server.transfer에 대해서 설명하시오. 

response.redirect와 비슷하나 제어권, 클라이언트 공유의 차이가 있다. 


request의 네가지 컬렉션에 대해서 설명하시오 

request.querystring 

request.form 

request.cookie 

request.serverVariables 


JSP 관련 질문 


중고급 

JSP 기본 객체에 대해서 설명하시오. 

out, request, response, session


Statement, PreparedStatement, CollableStatement 의 차이점에 대해서 설명하시오. 

Statement : 일반 DB연결하고 데이터 가져오는거 

PreparedStatement : 쿼리를 미리 컴파일해두고 값만 대입하여 사용하는거. 

CollableStatement : 자바에서 스토어드 프로시져 쓸때 사용함. 


동적 include와 정적 include의 차이점에 대해서 설명하시오. 

정적 include : 소스 컴파일 전에 아예 소스에 들어와서 함께 컴파일 

동적 include : 소스가 실행될때 include 된걸 실행시켜서 결과만 가져옴 


MVC모델이란 무엇이며 이를 웹페이지에서 구현하는 방법에 대해서 설명하시오. 

Model - View - Control 모델 : 입출력 및 제어부를 구분하여 처리하자는 개념. 

반응형

관련글 더보기

댓글 영역