본문 바로가기

기술면접

기술면접 대비 (계속 추가)

1. JAVA

JAVA는 네트워크상에서 쓸 수 있도록 미국의 선 마이크로 시스템즈가 개발한 객체 지향 프로그래밍 언어

JAVA의 특징

a. 자바가상머신(JVM)만 설치하면 컴퓨터의 운영체제에 상관없이 작동한다.(즉, 운영체제에 독립적)

b. 기본 자료형을 제외한 모든 요소들이 객체로 표현

c. 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어

d. Garbage Collector를 통한 자동적인 메모리 관리

e. 멀티쓰레드(Multi-thread)를 지원

 

 

2. OOP(객체지향 프로그래밍, Object-Oriented Programming)

OOP란 Object-Oriented Programming의 약어로써 객체지향 프로그래밍을 의미

- 데이터를 객체로 취급하여 프로그램에 반영한 것이며, 순차적으로 프로그램이 동작하는 기존의 것들과는

다르게 객체와 객체의 상호작용을 통해 프로그램이 동작하는 것을 말한다.

- 캡상추다(캡슐화 / 상속 / 추상화 / 다형성)으로 코드의 재사용성을 높이고 코드의 관리가 용이하고 제어자와 메서드를 이용하여 데이터를 보호하는데 좋으며 코드의 중복을 제거하여 코드의 불일치로 인한 오류를 방지할 수 있다.

 

* 캡슐화 : 데이터 보호 / 불필요한 부분을 감출 수 있다. (접근 제어자 / 인터페이스 등)

* 상속 : 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것 (class 자손클래스 extends 조상클래스 {...})

* 추상화 : 추상클래스 / 추상메서드 / 인터페이스를 예로 설명

* 다형성 : 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것 ( 조상타입의 참조변수로 자손타입의 개체를 다룰 수 있는 것 )

 

 

3. Object

Object(객체)는 OOP에서 데이터(변수)와 그 데이터에 관련되는 동작(함수). 즉 절차, 방법, 기능을 모두 포함한 개념

 

 

4. Overloading vs Overriding

- 오버로딩 & 오버라이딩 차이는?

: 오버로딩은 하나의 클래스에 같은 이름의 메소드를 여러개 정의하는 것을 말하며,

오버라이딩은 상위 클래스(부모 클래스)의 메소드를 하위 클래스(자식 클래스)에서 재정의하는 것을 말한다.

 

* 오버로딩 조건

ⓐ 메서드의 이름이 같아야 한다.

ⓑ 매개변수의 개수 or 타입이 달라야 한다. (리턴타입은 오버로딩 구현과 관계 없다)

* 오버라이딩 조건

ⓐ 선언부가 같아야 한다(이름 / 매개변수 / 리턴타입)

ⓑ 접근제어자를 좁은 범위로 변경할 수 없다.

ⓒ 조상클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

 

 

5. Servlet, JSP

Servlet - Container가 이해할 수 있게 구성된 순수 자바 코드로만 이루어진 것(Html in JAVA)

JSP(Java Server Page) - html기반에 JAVA코드를 블록화하여 삽입한 것(JAVA in Html)

 

 

6. JDBC

Java Data Base Connection의 약자로 JAVA 언어를 통해 데이터 베이스에 접근 할 수 있는 프로그래밍을 의미

 

 

7. Get과 Post 방식

Get 방식

- 클라이언트에서 서버로 데이터를 전달할 때, 주소 뒤에 "이름"과 "값"이 결합된 스트링 형태로 전달

- 주소창에 쿼리 스트링이 그대로 보여지기 때문에 보안성이 떨어진다.

길이에 제한이 있다.(=전송 데이터의 한계가 있다.)

Post방식보다 상대적으로 전송 속도가 빠르다.

 

Post 방식

- 일정 크기 이상의 데이터를 보내야 할 때 사용한다.

- 서버로 보내기 전에 인코딩하고, 전송 후 서버에서는 다시 디코딩 작업을 한다.

- 주소창에 전송하는 데이터의 정보가 노출되지 않아 Get방식에 비해 보안성이 높다.

속도가 Get방식보다 느리다.

- 쿼리스트링(문자열) 데이터 뿐만 아니라, 라디오 버튼, 텍스트 박스 같은 객체들의 값도 전송가능.

 

Get과 Post 차이점

- Get은 주로 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용

- Post는 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용.

- Get을 사용하면 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩되어 URL에 붙는다.

- Post방식은 전달되는 데이터가 보이지 않는다.

- Get방식은 전달되는 데이터가 255개의 문자를 초과하면 문제가 발생할 수 있다.

- 웹서버에 많은 데이터를 전달하기 위해서는 Post 방식을 사용하는 것이 바람직하다.

 

 

8. Session과 Cookie

Session과 Cookie 사용 이유

- 현재 우리가 인터넷에서 사용하고 있는 HTTP프로토콜은 연결 지향적인 성격을 버렸기 때문에 새로운 페이지를 요청할 때마다

 새로운 접속이 이루어지며 이전 페이지와 현재 페이지 간의 관계가 지속되지 않는다. 이에 따라 HTTP프로토콜을 이용하게 되는 

 웹사이트에서는 웹페이지에 특정 방문자가 머무르고 있는 동안에 그 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용한다.

 

Session

- 특정 웹사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한번의 방문을 의미한다.

- Session에 관련된 데이터는 Server에 저장된다.

- 웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라진다.

- Cookie에 비해 보안성이 좋다.

 

Cookie

- 사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복할 수 있는 방법

- 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해 주는 정보이다.

- Cookie는 인터넷 사용자가 특정 웹서버에 접속할 때, 생성되는 개인 아이디와 비밀번호, 방문한 사이트의 정보를 담은 임시 파일로써,

  Server가 아닌 Client에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 웹서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용된다.

- Cookie는 Client PC에 저장되는 정보기 때문에, 다른 사용자에 의해서 임의로 변경이 가능하다.(정보 유출 가능, Session보다 보안성이 낮은 이유)

 

Q. 보안성이 낮은 Cookie 대신 Session을 사용하면 되는데 안하는 이유?

A. 모든 정보를 Session에 저장하면 Server의 메모리를 과도하게 사용하게 되어 Server에 무리가 감

 

 

9. MVC 패턴

MVC란?

- 객체지향프로그래밍에서 Model, View, Controller를 분리하여 사용하는 소프트웨어 디자인 패턴이다.

 

MVC 구성요소

Model - 데이터를 담고 있는 객체. 자바 빈즈(DTO,DAO)를 뜻하며, DB의 테이블과 대응하는 경우가 많다.

View - UI를 담당한다. 클라이언트 측 기술인 Html, Css, Javascript 등으로 만들어진 컨테이너이다.

Controller - 프로그램의 흐름을 제어하는 역할이다. 데이터를 컨트롤하고 Model과 View 사이를 중재한다.

 

MVC 패턴 모델1과 모델2의 차이

Model1은 뷰와 컨트롤러를 JSP로 구현한다. 장점은 개발속도가 빠르고 단점은 가독성이 떨어지고 재사용이 힘들다.

Model2는 클라이언트의 요청처리와 응답처리, 비즈니스 로직처리하는 부분을 모듈화 시킨 구조이다.

뷰는 JSP, 컨트롤러는 서블릿으로 작성되어 클라이언트의 요청을 서블릿으로 구현된 컨트롤러가 받아 파라미터를 서비스 객체로 전달하여 처리하고 그 결과를 뷰에 전달한다. 

장점- 각 컴포넌트의 재사용이 높아진다

*  컴포넌트: 프로그래밍의 한 부분을 의미하며 재사용이 가능한 최소 단위

 

자세한 내용은 여기 참고- https://hsp1116.tistory.com/9

 

10. Interface, Abstract

 

Interface

일종의 추상 클래스

- 오직 추상메서드와 상수만을 멤버로 갖는다.

Implements 키워드를 사용

- 상속의 관계가 없는 클래스간 서로 공통되는 로직을 구현하여 쓸 수 있도록한다.

- Extends는 하나의 클래스만 상속 가능하나 Interface는 다중 상속이 가능하다.

 

Abstract

추상메서드를 하나 이상 가진 클래스

자신의 생성자로 객체 생성 불가능

- extends 키워드를 사용

- 하위 클래스를 참조하여 상위 클래스의 객체를 생성

- 하위 클래스를 제어하기 위해 사용

 

Interface vs Abstract

공통점 

- new 연산자로 인스턴스 생성 불가능.

- 프로토타입만 있는 메서드를 갖는다.

- 사용하기 위해서는 하위클래스에서 확장/구현 해야 한다.

차이점

- 사용하는 키워드가 다르다. (Interface - implements  , Abstract - extends)

- Abstract는 일반 메서드를 사용할 수 있지만, Interface는 메서드 선언만 가능하다.

- 인터페이스는 클래스가 아니지만 추상 클래스는 클래스다

 

(더 자세한 내용은 여기 클릭)

 

11. Call by Reference, Call by Value

Call by Reference - 매개 변수의 원래 주소에 값을 저장하는 방식. 

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

 

 

12. Static의 의미 

- 클래스가 로딩될 때, 메모리 공간을 할당하는데 처음 설정된 메모리 공간이 변하지 않음을 의미

- 객체를 아무리 많이 만들어도 해당 변수는 하나만 존재(객체와 무관한 키워드)

 

 

13. Framework

- 특정 형태의 소프트웨어 문제를 해결하기 위해 상호 협력하는 클래스프레임과 인터페이스 프레임의 집합

- 특정한 틀을 만들어놓고 거기에 살을 붙여 놓음으로써 프로그램을 만들어 작업시간을 줄여주는 것이다. 

- 프레임워크는 특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성된다.

- 프레임워크는 이렇게 추상적인 개념들이 문제를 해결하기 위해 같이 작업하는 방법을 정의한다.

- 프레임워크 컴포넌트 들은 재사용이 가능하다.

- 프레임워크는 좀 더 높은 수준에서 패턴을 조작한다.

* 프레임워크가 중요한 이유는 객체지향 개발을 하게 되면서 개발자의 취향에 따라 다양한 프로그램이 나오게 되었다.

 프로그램 개발에 투입되는 개발자도 점점 늘어남에 따라 전체 시스템의 통합성, 일관성이 부족하게 되었기 때문이다. 

 그래서 개발자의 자유를 제한하기 위해 프레임워크를 도입했다.

 

프레임워크가 가져야할 특징

a. 개발자들이 따라야할 가이드라인을 가진다.

b. 개발할 수 있는 범위가 정해져 있다.

c. 개발자를 위한 다양한 도구들이 지원된다.

 

프레임워크의 장/단점

장점 - 개발 시간을 줄일 수 있고 오류로부터 자유로울 수 있다.

단점 - 프레임워크에 너무 의존하면 개발 능력이 떨어져서 프레임워크 없이 개발하는 것이 불가능해지는 점이다.

 

 

14. Garbage Collection(가비지 컬렉션)

시스템에서 더이상 사용하지 않는 동적 할당된 메로리 블럭을 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것으로 

시스템에서 가비지컬렉션을 수행하는 부분을 가비지 컬렉터라 부른다.

 

 

15. Primitive type과 Reference type

Primitive type - 변수에 값 자체를 저장 

정수형 byte, short, int, long

실수형 float, double

문자형 char

논리형 boolean

Primitive type은 Wrapper Class를 통해 객체로 변형할 수 있다.

예) int→Integer, char→Character(int와 char를 제외한 Primitive type의 다른 자료형들은 맨 앞 알파벳을 대문자로 바꿔주면 된다. float→Float)

Reference type - 메모리상에 객체가 있는 위치를 저장

종류 - Class, Interface, Array 등

 

 

16. Wrapper Class

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

 

 

17. Spring Framework(스프링 프레임워크)

자바(JAVA) 플랫폼을 위한 오픈소스(Open Source) 애플리케이션 프레임워크(Framework)

자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크

자바로 된 프레임워크로 자바SE로 된 자바 객체(POJO)를 자바EE에 의존적이지 않게 연결해주는 역할

 

스프링 특징 간단히

- 크기와 부하의 측면에서 경량.

제어 역행(IoC)이라는 기술을 통해 애플리케이션의 느슨한 결합을 도모

관점지향 프로그래밍(AOP)을 위한 풍부한 지원

- 애플리케이션 객체의 생명 주기와 설정을 포함하고 관리한다는 점에서 일종의 컨테이너(Container)라고 할 수 있음

 

스프링 특징 자세히

a. 경량 컨테이너로서 자바 객체를 직접 관리.

   각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.

b. 스프링은 POJO(Plain Old Java Object) 방식의 프레임워크.

   일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 

   존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다.

c. 스프링은 제어의 역행(IoC : Inversion of Control)을 지원.

   컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.

d. 스프링은 의존성 주입(DI : Dependency Injection)을 지원

   각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.

e. 스프링은 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원

   트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.

f. 스프링은 영속성과 관련된 다양한 서비스를 지원

   iBatis나 Hibernate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.

g. 스프링은 확장성이 높음.

   스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이하다.

 

 

18. Thread

Thread(쓰레드) - 프로세스내에서 동시에 실행되는 독립적인 실행 단위를 말함, 장점으로는 자원을 많이 사용하지 않고 구현이 쉬우며 범용성이 높다

Process(프로세스) 운영체제에서 실행중인 하나의 프로그램(하나 이상의 쓰레드를 포함한다.)

 

Thread와 Process 차이

이 프로세스 내에서 실행되는 각각의 일을 스레드라고 한다. 프로세스 내에서 실행되는 세부 작업 단위로 여러 개의 스레드가 하나의 프로세스를 이루게 되는 것이다.

 

 

19. 접근제한자(public > protected > default > private)

public 접근 제한이 없다.(같은 프로젝트 내에 어디서든 사용가능)

protected 같은 패키지 내다른 패키지에서 상속받아 자손클래스에서 접근 가능 

default 같은 패키지 내에서만 접근 가능

private 같은 클래스 내에서만 접근 가능

 

 

20. 소켓 통신(TCP/UDP)

TCP(Transmission Control Protocol)

연결형 서비스 제공

높은 신뢰성 보장

- 연결의 설정(3-way handshaking)

- 연결의 해제(4-way handshaking)

데이터 흐름 제어, 혼잡 제어

- 전이중, 점대점 서비스(양방향 송수신 서비스)

UDP(User Datagram Protocol)

비연결형 서비스 제공

신뢰성이 낮음

데이터의 전송 순서가 바뀔 수 있음

- 데이터 수신 여부 확인 안함(3-way handshaking과 같은 과정 X)

- TCP보다 전송속도가 빠름

 

 

21. Stack, Queue

STACK

LIFO(Last In First Out)의 후입선출 구조

- push();를 이용한 데이터 입력, pop();을 이용한 데이터 출력

- 예) 시스템 스택 : 함수의 호출과 복귀 순서는 스택의 구조를 응용하여 관리

- 역순 문자열 만들기, 수식의 괄호 검사, 수식의 후위 표기법 변환

QUEUE

FIFO(First In First Out)의 선입선출 구조

- enQueue();를 이용한 데이터 입력, deQueue();를 이용한 데이터 출력

- 예) 우선순위가 같은 작업 예약(인쇄 대기열), 선입선출이 필요한 대기열(티켓 카운터)

* Linear Queue(선형큐)는 메모리 재사용이 불가능 이러한 문제점을 보완하여 Circular Queue(원형 큐)가 나옴

 

 

22. Singleton Design Pattern(싱글톤 디자인 패턴, 싱글톤 패턴)

애플리케이션이 시작될 때 어떤 클래스가 최초 한 번만 메모리를 할당하고(static) 그 메모리의 인스턴스를 만들어 사용하는 패턴. (인스턴스가 필요한 경우 똑같은 인스턴스를 여러 개 만드는 것이 아니라, 동일 인스턴스를 사용하게 한다.)

주로 Android에서 소켓 객체를 사용할 때 사용한다.

* 장점

ⓐ 고정된 메모리 사용으로 new 인스턴스를 사용하기 때문에 메모리 낭비를 막음

ⓑ static(전역) 인스턴스이기 때문에 다른 클래스에서 데이터를 공유하기 쉬움

* 단점

너무 많은 사용은 다른 클래스들 간의 결합도가 높아져 수정, 테스트가 어려워질 수 있다.

 

자세한 설명 참조 (https://commin.tistory.com/121)

 

23. Database에서 Index란?

인덱스는 데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조를 일컫는다.

인덱스는 테이블 내의 1개의 컬럼, 혹은 여러 개의 컬럼을 이용하여 생성될 수 있다.

고속의 검색 동작뿐만 아니라 레코드 접근과 관련 효율적인 순서 매김 동작에 대한 기초를 제공한다.

인덱스를 저장하는 데 필요한 디스크 공간은 보통 테이블을 저장하는 데 필요한 디스크 공간보다 작다.

 

 

24. POJO (Plain Old Java Object)

 

클래스들은 extends, implements 를 많이 사용해왔다.

이렇게 할 경우, 각 클래스 간의 의존도가 생기기 때문에 추후에 다른 api로 바꾸던가 코드를 수정해야할 때 수정해야하는 부분이 많아지는 등 여러가지 불편한 점이 발생한다.

 

결국 extends, implements를 없애고 대신 어노테이션을 사용함으로써 의존도를 낮췄다.

 

"getter / setter를 가진 단순한 자바 오브젝트"는 POJO이다.

"getter / setter를 가진 단순한 자바 오브젝트"는 분명 의존성도 없고, 테스트도 용이하며 추후 수정이 편리하니 POJO로 볼 수 있을것 같다.

이와 같은 개념을 가지고 EJB (Enterprise JavaBeans)를 대체할 POJO 기반 프레임워크가 나왔고 그것이 하이버네이트와 스프링이라고 한다.

 

서버 기반의 자바 기술인 J2EE -> 단점 - 많은 사용자의 처리요구를 빠르게 안정적이면서 확장 가능한 형태로 유지하기위해 필요한 로우레벨의 기술적인 (트랜젝션 처리, 상태관리, 멀티쓰레딩, 리소스풀링, 보안등) 처리가 요구됨 -> EJB 등장 -> 단점 - 객체지향적인 특징(상속,다형성) 포기해야 됐음 -> 둘 다를 충족시킬 POJO 기반 프레임워크인 Spring 등장

 

POJO관련 잘 정리된 글 - https://limmmee.tistory.com/8

 

 

25. 교착상태

- 멀티 스레드 중 스레드간에 대기 상태가 종료 되지 않아 무한정 대기만 하는 비정상적인 상태를 의미 

 

 

26. 컨테이너란

클라이언트 들이 요청을 하면 웹서버가 받는다.. APS나 PHP는 IIS, APache서버가 해석하지만.

JAVA는 오직 JVM만이 해석할 수 있다. 그래서 자바를 해석할수 있는 녀석이 따로 필요한데 이것이 컨테이너이다.

ex) 톰캣 - 클라이언트와 서블릿간의 요청과 답변을 전달해준다 (서블릿 관리)

 

* 웹컨테이너란

웹 서버의 내부에서 Servlet 클래스 또는 JSP 파일을 실행하기 위한 실행 환경을 제공하는 역할을 하는 것

 

 

27. String, StringBuffer, StringBuilder의 차이점

셋 모두 문자열을 저장하고 관리하는 클래스입니다.

String은 불변하고 StringBuffer와 StringBuilder는 가변적이라는 특징이 존재합니다.

- String은 인스턴스가 생성되면 그 메모리공간이 절대 변하지 않아

문자열 연산이 있는 경우 새로운 객체를 만들어서 오버헤드가 발생할 수 있습니다.

따라서 문자열 연산이 적고 조회가 많을 때 멀티쓰레드 환경에서 사용하는 것이 좋습니다.

- StringBuffer는 멀티쓰레드 환경에서 Synchronized 키워드가 가능하므로 동기화가 가능합니다.

- StringBuilder는 동기화를 지원하지 않기 때문에 멀티쓰레드 환경에서는 적합하지 않습니다 .그래서 연산처리가 더 빠릅니다.

  public final class StringBuffer
    public synchronized StringBuffer append(String str) {
        super.append(str);
        return this;
    }


    public synchronized StringBuffer append(boolean b) {
        super.append(b);
        return this;
    }  


    [...]
}

 

 

28. java의 메모리 영역 

: 메소드 영역 / 스택 영역 / 힙 영역

(메소드) 바이트 코드와 전역변수, static 변수

(스택) 매개변수, 지역변수 / 사용이 끝나면 바로 소멸됨. 컴파일 시 메모리 할당

(힙) new로 생성된 객체 / 호출이 끝나도 사라지지 않으며 프로그램 실행 시 동적으로 할당

 

 

29. Servlet에 대해 답변해 보세요.

Servlet: 자바 플랫폼에서 웹 앱을 개발할 때 사용하는 핵심기술입니다. 컨트롤러와 뷰의 역할 분담이 가능해진다. 자바 API를 모두 사용할 수 있으며 다양한 서버 환경에서 실행 가능합니다. 스레드를 기반으로 합니다.

 

Servlet Container: Servlet을 서버에서 실행하기 위한 서버 프로그램입니다. 서버는 서블릿 자체를 직접 실행할 수 없기 때문입니다. JVM을 내장하고 있습니다.

 

 

30. 서블릿의 라이프 사이클에 대해 설명하세요.

 

1) 서버를 실행시키는 순간 서블릿의 생성자가 호출된다.

2) 생성자를 호출해서 객체가 생성되면 초기화 작업을 한다(init() 메소드가 최초 한번만 자동으로 호출).

3) 초기화 작업 후에는 Service 메소드가 호출이 된다(req, res를 통해 data get, login 구현 등의 작업이 일어남)

* Service 메소드는 클라이언트가 요청할 때마다 호출이 됨

4) 마지막으로 서버가 종료되는 시점에 destory() 메소드를 호출한다(혹은 서버 재시작 시에 자원 반납을 위해 호출)

 

 

(이해 안된다면 아래 참조)

- init()

컨테이너는 서블릿 인스턴스를 생성한 다음 init() 메소드를 호출한다. 이 메소드는 service()메소드 전에 실행되어야 한다. 클라이언트의 요청을 처리하기 전에 서블릿을 초기화할 기회를 주는것이다. 초기화할 코드가 있다면 init()메소드를 재정의 할 수 있다 (데이터베이스에 대한 접속, 다른 객체에 서블릿을 등록하는 등)

- service()

최초 클라이언트의 요청을 받았을때, 컨테이너는 새로운 스레드를 생성하거나 스레드 풀로부터 서블릿을 가져와서 서블릿의 service() 메소드를 호출한다. 클라이언트의 HTTP 메소드(GET, POST 등)를 참조하여 doGet() / doPost() 혹은 다른 메소드를 호출할지 판단한다. 재정의는 하지 않으며 doGet()/ doPost() 를 재정의하여 HttpServlet의 service()가 이를 실행하도록 한다.

- destroy()

서블릿 엔진이 off될 때 호출되는 메소드. 서블릿 종료 시 모든 자원을 반납하는 작업을 수행한다.

 

 

31. Boxing과 UnBoxing

 

-Boxing : 기본 자료형을 Wrapper 클래스의 객체로 변경하는 과정

Integer age = new Integer(30);

 

-Unboxing: 각각의 객체를 기본 자료형으로 변경하여 사용하는 과정

int age2 = age.intValue();

 

 

32. 트랜잭션 동시성 제어

동시에 실행되는 트랜잭션 수를 최대화 하면서도 입력, 수정, 삭제, 검색 시 데이터의 무결성이 유지될 수 있도록 노력하는 것을 말한다.

 

 

33.  WAS(Web Application Server)

DB 조회, 로직처리가 요구되는 컨텐츠와 같은 동적 컨텐츠(db..)를 제공하기 위해 만들어진 애프리케이션 서버

JSP, Servlet을 실행시킬 수 있는 소프트웨어 = 컨테이너

대표적인 예 : 톰캣, Jeus, Jboss

 

 

34. 웹 서버(Web Server)

클라이언트가 서버에 페이지 요청을 하면 요청을 받아 정적 컨텐츠(html,img,js..)를 제공하는 서버

클라이언트에서 요청이 올 때 가장 앞에서 요청에 대한 처리를 한다.

대표적인 예 : apache, nginx

 

 

35. WAS와 웹 서버의 차이

동적 컨텐츠 처리 수행가능 여부

 

WAS는 정적, 동적 컨텐츠 처리 모두 가능하지만 정적처리를 WAS가 하게 되면 부하가 많이 걸려서 좋지 않다. 

* 톰캣(WAS)에는 아파치(웹서버)의 기능(웹서비스데몬, Httpd)을 포함하고 있다.

 

 

36. 톰캣 앞에 아파치를 두는 이유

- 보안 문제 때문에 web 외부망 was 내부망 따로 둔다

- 정적 컨텐츠 제공보다는 로드밸런싱(부하분산) 역할을 하는 경우가 많다. 또 포트에 따른 권한 및 보안 이슈 때문에 구성하는 경우도 있다.  

 

 

37. 컬렉션 프레임워크 핵심 인터페이스

List : 순서 O / 중복 O (ArrayList / LinkedList / Stack / Vector 등)

Set : 순서 X / 중복 X (HashSet / TreeSet 등)

Map : (key, value)로 이루어짐. key 중복 X / value 중복 O (HashMap / TreeMap 등)

* 컬렉션과 배열의 차이 : 배열은 하나의 타입만 저장이 가능하고, 컬렉션은 다양한 타입의 저장이 가능하다. 또한 배열은 고정된 크기이며, 컬렉션은 가변적 크기이다.

 

 

38. request 객체 / response 객체란?

request 객체는 클라이언트에서 넘어오는 데이터를 전달받기 위한 객체이며 response는 서버에서 클라이언트로 데이터를 전달하기 위한 객체이다.

 

 

39. 비동기식 / 동기식 설명

동기적 일처리는 순차적으로 일을 스스로 끝내 나가는 방식으로 작업 당 페이지 이동이 있는 경우이며,

비동기식 일처리는 해야 할 일을 위임하고 기다리는 방식으로 a-jax를 이용하여 구현할 수 있는데 페이지 이동 없이 고정된 화면에서 어떠한 처리가 이뤄지는 것을 말한다.

 

 

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

스크립트 언어 : Javascript, Python, Ruby 

컴파일 언어: C, JAVA, C#, C++

차이점 : 컴파일러의 존재 여부

 

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

 

 

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

생성방법 : Runnable(인터페이스)로 선언되어 있는 클래스를 상속받거나 Thread 클래스를 상속받아 run() 메소드를 구현해주면 된다

- 장점 : 빠른 프로세스 생성, 적은 메모리 사용, 쉬운 정보 공유

- 단점 : 교착 상태에 빠질 수 있다.

* 교착상태 - 다중프로그래밍 체제에서 하나 또는 그 이상의 프로세스가 수행 할 수 없는 어떤 특정시간을 기다리고 있는 상태.

 

 

42. 변수들이 메모리에 저장되는 영역에 대해서 설명해보아라

- bss영역   : 전역 변수로 선언되었으나 초기화되지 않은 변수 (Block Started by Symbol) 

- stack영역 : 지역 변수, 객체의 지역 변수(프로그램에 의해서 자동적으로 호출되고 소멸되는 변수)

- heap영역 : 객체, 객체의 인스턴스 변수(멤버변수, 사용자에 의해서 생성되는 변수 및 객체들)

 

 

43. 웹 서버에서 프로세스 방식과 스레드 방식에 대한 차이점을 설명하여라
- 프로세스 방식의 경우 사용자가 웹 페이지를 요청할 때마다 서버는 계속해서 프로세스를 생성해주어야 한다.
- 스레드 방식의 경우 새로운 할당이 필요없이 스레드를 생성해주면 된다.

 

 

44. JSTL 과 EL 을 설명하라

 

JSTL (Jsp Standard Tag Library) 

JSP는 자신만의 태그를 추가할 수 있는 기능을 제공하고 있는데요. 

<jsp:include>나 <jsp:usebean>과 같은 커스텀 태그처럼 연산이나 조건문이나 반복문인

if문, for문, DB를 편하게 처리할 수 있는것이 JSTL입니다.

 

JSTL의 Core에서 c를 이용해 <%= if%>문을 <c:if>, <%=for%>문을 <c:forEach>로 대체하여 사용합니다

 

 

EL (Expression Language)

<%= %> , out.println()과 같은 자바코드를 더 이상 사용하지 않고 좀더 간편하게 출력을 지원하기 위한 도구.

<%= abc %>를 ${abc}로 간단하게 사용할 수 있게 하였습니다.

영역은 (page → request → session → application) 순이다.

 

45. 기본 약자들

HTML : HyperText Markup Language

 

46. 하이브리드 앱이란?

빠른 개발 속도, 저렴한 가격, IOS/Android 멀티 프랫폼 지원.

하이브리드 앱 - 네이티브 언어를 사용하지 않고 Javascript 등의 언어를 이용하여 개발을 진행하고

React 같은 프레임워크를 이용한다.

 

 

47. ThreadSafety란?

 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바로 나오는 것

 

 

48. 웹 취약점을 고려하기 위해서는?

SQL Injection - 웹에서 DB에 Query 시 입력된 데이터의 유효성을 검증하지 않아, 개발자가 의도하지 않는 동적 쿼리를 생성하여 DB정보를 열람하거나 조작할 수 있는 보안 취약점

 

SQL Injection을 막기 위해서 저장 프로시저를 사용할 수 있습니다.

저장 프로시저는 사용하고자 하는 Query에 미리 형식을 지정하는 것을 말합니다. 지정된 형식의 데이터가 아니면 Query가 실행되지 않기 때문에 보안성을 크게 향상 시킵니다.

 

  String query = “SELECT * FROM tb_user WHERE uId= ?” 

  stmt = conn.prepareStatement(query);
  stmt.setString(1, uId);

 

 

49. 컴퓨터 조립 방법

1) 메인보드에 CPU 장착

2) CPU 쿨러 장착

3) RAM 장착

4) 케이스에 메인보드 장착

5) 그래픽카드 장착

6) SSD, HDD(하드) 장착

7) 파워 장착

8) 조립 완성 및 BIOS 테스트 - (BIOS 화면 진입: f10키 연타하면 진입 가능)

9) 윈도우 설치

10) 드라이버 부스터(Software로 모든 부품들 공통으로 드라이버 설치해주기

 

 

50. REST API란? 장점은?

REST API ( Representational State Transfer ) 는 자원(resource)의 표현(representation)에 의한 상태 전달입니다.

 

- 클라이언트/서버 구조를 가져서 클라이언트는 유저와 관련된 처리를, 서버는 REST API를 제공함으로써 각각의 역할이 확실하게 구분되고 일관적인 인터페이스로 분리되어 작동할 수 있게 합니다.

- REST는 HTTP의 특성을 이용하기 때문에 무상태성(stateless)을 갖습니다. 

즉, 서버에서 어떤 작업을 하기 위해 상태정보를 기억할 필요가 없고 들어온 요청에 대해 처리만 해주면 되기 때문에 구현이 쉽고 단순합니다.

- HTTP라는 기존 웹 표준을 사용하는 REST의 특징 덕분에 기본 웹에서 사용하는 인프라를 그대로 사용 가능합니다.

 

 

51. 형상관리와 버전관리의 차이점

 

형상관리 안에 버전관리가 포함되어 있다.

 

a. 형상관리

-sw 개발 및 유지보수 과정에서 발생하는 각종 결과물(형상)에 대한 변경사항을 체계적으로 관리하기 위한 활동이다.

-SVN이나 Git 같은 버전 관리 시스템을 이용하는 것

-소스 코드와 다양한 프로그램 자원 뿐만 아니라 SW 생애주기에 걸친 모든 정보를 포함

-소프트웨어 형상 관리의 한 요소가 바로 버전 관리 시스템

 

b. 버전관리

- CVS, 마이크로소프트의 VSS, IBM의 Rational Clearcase, Git

 

 

52. 라이브러리와 프레임워크의 차이점

 

* 라이브러리 – 독립성을 가진 최소단위(메소드 단위)의 기능이다.

- 재 사용 가능한 최소 단위

- 기능을 사용하기 위해 다른 기능이 필요하지 않아야 한다.

 

라이브러리와 프레임워크의 차이는 제어 흐름에 대한 주도성이 누구에게 있는가에 있습니다.

즉, 어플리케이션의  Flow(흐름)을 누가 쥐고 있느냐에 달려 있습니다.

라이브러리를 사용하는 애플리케이션 코드는 애플리케이션 흐름을 직접 제어합니다.

단지 동작하는 중에 필요한 기능이 있을 때 능동적으로 라이브러리를 사용할 뿐입니다.

반면에 프레임워크는 거꾸로 애플리케이션 코드가 프레임워크에 의해 사용되는 것입니다. 보통 프레임워크 위에 개발한 클래스를 등록해두고, 프레임워크가 흐름을 주도하는 중에 개발자가 만든 애플리케이션 코드를 사용하도록 만드는 방식입니다. 프레임워크에는 분명한 제어의 역전 개념이 적용되어 있어야 합니다.

애플리케이션 코드는 프레임워크가 짜놓은 틀에서 수동적으로 동작해야 합니다.

 

 

53. alz로 압축하거나 hwp로 문서를 작성하여 외국에 전송하면 안 되는 이유를 설명하시오.

외국에서 해당 형식이 표준이 아니기 때문이다.

 

 

54. 다음은 javadoc의 String.replaceAll 메소드에 대한 설명이다. 우리말로 해석하시오.

Replaces each substring of this string that matches the given regular expression with the given replacement.

- 영어로 된 문서를 보고 이해할 수 있는지 평가

 

 

55. 다음 소스코드를 읽고 무엇을 하는 프로그램인지 설명하시오.

char[] arr = someString.toCharArray(); // 해당 문자열로부터 캐릭터 배열을 선언
StringBuffer sb = new StringBuffer(); 
int size = 0; 
for(char c : arr) { //arr에서 문자 하나씩 뽑는 for each
  size += (c > 255) ? 2 : 1; // 조건(아스키코드 255보다 크면 2)에 따라 2 또는 1 을 증가시킨다 
  sb.append(c);  // 뽑은 단어는 String buffer에 누적 
   if(size >= 80) // 위의 조건식 따라 사이즈에 누적 
 { break; } 
}
 return sb.toString();

 

 

56. 다음 javascript 소스코드가 어떻게 동작할지 서술하시오.

function f() {
    for ( var i = 0; i < 3; i++ ) {
        setTimeout( function() {
            alert( i );
        }, 1000);
    }
}
f(); // f를 실행한다

 

 

57. 빈칸에 들어갈 말을 서술하시오.

(-----------------------) is a programming paradigm that uses "objects" – data structures consisting of data fields and methods together with their interactions – to design applications and computer programs. Programming techniques may include features such as data abstraction, encapsulation, modularity, polymorphism, and inheritance. Many modern programming languages now support (-----------------------)

 

답- OOP

 

 

58. 다음 주어진 div 클래스를 정의하시오

너비 250, 높이 300

<div class="hello">안녕하세요</div>
<style type="text/css">
.hello {

}
</style>

 

.hello {
	width:250px;
	height: 300px;
	background-color: black;
}

 

 

 

 

 

 

 

 

 

 

 

출처 (참조블로그)

https://m.blog.naver.com/writer0713/220700687650  

https://banksalad.com/contents/

https://hahahoho5915.tistory.com/16 

https://preamtree.tistory.com/42

https://blog.naver.com/PostView.nhn?blogId=vnemftnsska2&logNo=221428722368&from=search&redirect=Log&widgetTypeCall=true&directAccess=false

https://myeonguni.tistory.com/1496