본문으로 바로가기

기술면접

category 면접 2019. 12. 18. 12:51

JAVA의 특징

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

OOP(객체지향 프로그래밍)

  • OOP란 ?
    • 데이터를 객체로 취급하여 프로그램에 반영한 것
    • 객체와 객체의 상호작용을 통해 프로그램이 동작하는 것
  • OOP특징
    • 객체지향 프로그래밍은 코드의 재사용성이 높다.
    • 코드의 변경이 용이
    • 직관적인 코드 분석
    • 개발속도 향상
    • 상속을 통한 장점 극대화

Object(객체)

  • OOP에서 데이터(변수)와 그 데이터에 관련된 동작(함수)

Overloading vs Overriding

  • Overloading(오버로딩)
    • 같은 이름의 메소드를 여러개 정의하는 것
    • 매개변수의 타입이 다르거나 개수가 달라야 한다.
    • return type과 접근 제어자는 영향을 주지 않음
  • Overriding(오버라이딩)
    • 상속에서 나온 개념
    • 상위 클래스(부모 클래스)의 메소드를 하위 클래스(자식 클래스)에서 재정의

자바의 메모리 영역

  • 메서드 영역
    • static 변수, 전역변수, 코드에서 사용되는 Class 정보 등이 올라간다.
    • 코드에서 사용되는 Class들을 로더로 읽어 클래스별로 런타임 필드데이터, 메서드 데이터 등을 분류해 저장한다.
  • 스택(Stack) 영역
    • 지역변수, 함수(메서드) 등이 할당되는 LIFO(Last In First Out)방식의 메모리
  • 힙(Heap) 영역
    • new 연산자를 통한 동작할당된 객체들이 저장되며, 가비지 컬렉션에 의해 메모리가 관리되어 진다.

Servlet, JSP

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

JDBC

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

Get과 Post 방식

  • Get 방식
    • 클라이언트에서 서버로 데이터를 전달할 때, 주소 뒤에 '이름'과 '값'이 결합된 스트링 형태로 전달
    • 주소창에 쿼리 스트링이 그대로 보여지기 때문에 보안성이 떨어진다.
    • 길이에 제한이 있다.(= 전송 데이터의 한계가 있다.)
    • Post방식보다 상대적으로 전송 속도가 빠르다.
  • Post 방식
    • 일정 크기 이상의 데이터를 보내야 할 때 사용한다.
    • 서버로 보내기 전에 인코딩하고, 전송 후 서버에서는 다시 디코딩 작업을 한다.
    • 주소창에 전송하는 데이터의 정보가 노출되지 않아 Get방식에 비해 보안성이 높다.
    • 속도가 Get방식보다 느리다.
    • 쿼리스트링(문자열)데이터 뿐만 아니라, 라디오 버튼, 텍스트 박스 같은 객체들의 값도 전송가능
  • Get과 Post 차이점
    • Get은 주로 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용
    • Post는 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용
    • Get을 사용하면 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩되어 URL에 붙는다.
    • Post방식은 전달되는 데이터가 보이지 않는다.
    • Get방식은 전달되는 데이터가 255개의 문자를 초과하면 문제가 발생할 수 있다.
    • 웹서버에 많은 데이터를 전달하기 위해서는 Post방식을 사용하는 것이 바람직하다.

Requst 전송 방식

  • Get 방식
    • URL의 쿼리문자열에 데이터를 같이 전달하는 방식
    • 데이터 길이에 제한이 있고, 보안에 취약하다.
  • POST 방식
    • 헤더에 데이터를 넣어 보내기 때문에 보안에 조금 더 유리하고 데이터 길이에 제한이 없다.
    • Get에 비해 다소 느리다.
  • DELETE 방식
    • RESTFUL에서 삭제 기능을 할 때 주로 사용된다.
  • PUT/PUSH
    • RESTFUL에서 수정 작업을 할 때 주로 사용된다.

RESTFUL이란?

  • 해당 URL만 보더라도 바로 어떤 작업을 하는지를 알 수 있도록 하나의 데이터는 하나의 URL을 갖도록 작업하는 방식

Session과 Cookie

  • Session
    • 특정 웹사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 방문을 의미한다.
    • Session에 관련된 데이터는 Server에 저장된다.
    • 웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라진다.
    • Cookie에 비해 보안성이 좋다.
  • Cookie
    • 사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복할 수 있는 방법
    • 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해 주는 정보
    • 인터넷 사용자가 특정 웹서버에 접속할 때, 생성되는 개인 아이디와 비밀번호, 방문한 사이트의 정보를 담은 임시 파일
    • Server가 아닌 Client에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 웹서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용된다.
    • Cookie는 Client PC에 저장되는 정보기 때문에, 다른 사용자에 의해서 임의로 변경이 가능하다.(정보 유출 가능, Session보다 보안성이 낮은 이유)
  • 보안성이 낮은 Cookie 대신 Session을 사용하면 되는데 안 하는 이유
    • 모든 정보를 Session에 저장하면 Server의 메모리를 과도하게 사용하여 Server에 무리가 감

MVC 패턴

  • MVC란?
    • 사용자 인터페이스를 성공적이며 효과적으로 데이터 모형에 관련된 일을 시키기 위한 방법론 또는 설계 방식 중 하나이다.
    • 목적 코드의 재사용에 유용한 것은 물론, 사용자 인터페이스와 응용프로그램 개발에 소요되는 시간을 현저하게 줄여주는 형식이라고 많은 개발자들이 평가하고 있다.
  • MVC 구성요소
    • Model
      • 소프트웨어 응용과 그와 관련된 고급 클래스 내의 논리적 데이터 기반 구조를 표현, 이 목적 모형은 사용자 인터페이스에 관한 어떠한 정보도 가지고 있지 않다.
    • View
      • 사용자 인터페이스 내의 구성요소들을 표현(사용자에게 보여지는 화면)
    • Controller
      • Model과 View를 연결하고 있는 클래스를 대표
      • Model과 View 내의 클래스들 간 정보 교환하는 사용

Interface, Abstract

  • Interface
    • 일종의 추상 클래스
    • 오직 추상메서드와 상수만을 멤버로 갖는다.
    • Implements 키워드를 사용
    • 상속의 관계가 없는 클래스간 서로 공통되는 로직을 구현하여 쓸 수 있도록 한다.
    • Extends는 하나의 클래스만 상속 가능하나 Interface다중 상속이 가능하다.
  • Abstract
    • 추상메서드를 하나 이상 가진 클래스
    • 자신의 생성자로 객체 생성 불가능
    • 하위 클래스를 참조하여 상위 클래스의 객체를 생성
    • 하위 클래스를 제어하기 위해 사용
  • Interface VS Abstract
    • 공통점
      • new 연산자로 인스턴스 생성 불가능.
      • 프로토타입만 있는 메서드를 갖는다.
      • 사용하기 위해서는 하위클래스에서 확장/구현 해야 한다.
    • 차이점
      • 사용하는 키워드가 다르다.
      • Abstract는 일반 메서드를 사용할 수 있지만, Interface는 메서드 선언만 가능하다.

Call by Referece, Call by Value

  • Call by Referce
    • 매개 변수의 원래 주소에 값을 저장하는 방식
    • 클래스 객체를 인수로 전달한 경우
  • Call by Value
    • 인수로 기본 데이터형을 사용
    • 주어진 값을 복사하여 처리하는 방식
    • 메소드 내의 처리 결과는 메서드 밖의 변수에 영향을 미치지 않는다.

Static의 의미

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

Framework

  • 특정 형태의 소프트웨어 문제를 해결하기 위해 상호 협력하는 클래스 프레임과 인터페이스 프레임의 집합
  • 특정한 틀을 만들어놓고 거기에 살을 붙여 놓음으로써 프로그램을 만들어 작업시간을 줄여주는 것이다.
  • 프레임워크는 이렇게 추상적인 개념들이 문제를 해결하기 위해 같이 작업하는 방법을 정의한다.
  • 프레임워크 컴포넌트 들은 재사용이 가능하다.
  • 프레임워크는 좀 더 높은 수준에서 패턴을 조작한다.
  • 프레임워크가 중요한 이유는 객체지향 개발을 하게 되면서 개발자의 취향에 따라 다양한 프로그램이 나오게 되었다. 프로그램 개발에 투입되는 개발자도 점점 늘어남에 따라 전체 시스템의 통합성, 일관성이 부족하게 되었기 때문이다. 그래서 개발자의 자유를 제한하기 위해서 프레임워크를 도입했다.
  • 프레임워크가 가져야 할 특징
    • 개발자들이 따라야 할 가인드라인을 가진다.
    • 개발할 수 있는 범위가 정해져 있다.
    • 개발자를 위한 다양한 도구들이 지원된다.
  • 프레임워크의 장점/단점
    • 장점
      • 개발 시간을 줄일 수 있고 오류로부터 자유로울 수 있다.
    • 단점
      • 프레임워크에 너무 의존하면 개발 능력이 떨어져서 프레임워크 없이 개발하는 것이 불가능해지는 점이다.

Garbage Collection(가비지 컬렉션)

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

Primitive type과 Reference type

  • Primitive type
    • 변수에 값 자체를 저장
    • Wrapper Class를 통해 객체로 변형할 수 있다.
  • Reference type
    • 메모리상에 객체가 있는 위치를 저장

Wrapper Class

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

박싱과 언박싱

  • 박싱
    • 원시형을 Wrapper Class로 변환하는 것
  • 언박싱
    • Wrapper Class를 원시형으로 변환하는 것

Thread

  • 쓰레드
    • 프로세스내에서 동시에 실행되는 독립적인 실행 단위를 말함
    • 장점으로는 자원을 많이 사용하지 않고 구현이 쉬우며 범용성이 높다.
  • 프로세스
    • 운영체제에서 실행중인 프로그램(하나 이상의 쓰레드를 포함한다.)
  • Thread 단점
    • 교착상태에 빠질 수 있다.
    • 교착상태 : 다중프로그래밍 체제에서 하나 또는 그 이상의 프로세스가 수행할 수 없는 특정 시간을 기다리고 있는 상태
  • Thread와 Process 차이점
    • 프로세스는 여러 분야에서 '과정'또는 '처리'라는 뜻으로 사용되는 용어로 컴퓨터 분야에서는 '실행중인 프로그램'이라는 뜻으로 쓰인다.
    • 이 프로세스 내에서 실행되는 각각의 일을 쓰레드라고 한다. 프로세스 내에서 실행되는 세부 작업 단위로 여러 개의 스레드가 하나의 프로세스를 이루게 되는 것이다.

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

  • public
    • 접근 제한이 없다.(같은 프로젝트 내에 어디서든 사용가능)
  • protected
    • 같은 패키지 내, 다른 패키지에서 상속받아 자손클래스에서 접근 가능
  • default
    • 같은 패키지 내에서만 접근 가능
  • private
    • 같은 클래스 내에서만 접근 가능

소켓 통신(TCP/UDP)

  • TCP(Transmission Control Protocol)
    • 연결형 서비스 제공
    • 높은 신뢰성 보장
    • 연결의 설정(3-way-handshaking)
    • 연결의 해제(4-way-handshaking)
    • 데이터 흐름 제어, 혼잡 제어
    • 전이중, 점대점 서비스(양방향 송수신 서비스)
  • UDP(User Datagram Protocol)
    • 비연결형 서비스 제공
    • 신뢰성이 낮음
    • 데이터의 전송 순서가 바낄 수 있음
    • 데이터 수신 여부 확인 안함(3-way-handshaking과 같은 과정 X)
    • TCP보다 전송속도가 빠름

Satck, Queue

  • STACK
    • LIFO(Last In First Out)의 후입선출 구조
    • push();를 이용한 데이터 입력, pop();을 이용한 데이터 출력
    • ex) 시스템 스택, 역순 문자열 만들기, 수식의 괄호 검사, 수식의 후위 표기법 변환
  • QUEUE
    • FIFO(First In First Out)의 선입선출 구조
    • enQueue();를 이용한 데이터 입력, deQueue();를 이용한 데이터 출력
    • ex) 우선순위가 같은 작업 예약(인쇄 대기열), 선입선출이 필요한 대기열(티켓 카운터)
    • Linear Queue(선형큐)는 메모리 재사용이 불가능 이러한 문제점을 보완하여 Circular Queue(원형큐)가 나옴

Singleton Design Patter(싱글톤 디자인 패턴, 싱글톤 패턴)

  • 클래스 인스턴스가 하나만 만들어지도록 하고, 그 인스턴스에 대한 전역 접근을 제공한다.

Database에서 Index란?

  • 테이블에 대한 동작의 속도를 높여주는 자료 구조
  • 테이블 내의 1개의 컬럼, 혹은 여러 개의 컬럼을 이용하여 생성될 수 있다.
  • 고속의 검색 동작뿐만 아니라 레코드 접근과 관련 효율적인 순서 매김 동작에 대한 기초를 제공한다.
  • 인덱스를 저장하는 데 필요한 디스크 공간은 보통 테이블을 저장하는 데 필요한 디스크 공간보다 작다.
  • 데이터베이스에서 테이블과 클러스터에 연관되어 독립적인 저장 공간을 보유하고 있는 객체
  • 사용자는 데이터베이스에 저장된 자료를 더욱 빠르게 조회하기 위하여 인덱스를 생성하고 사용
  • DB에서 자료를 검색하는 두 가지 방법
    • FTS(Full Table Scan)
      • 테이블을 처음부터 끝가지 검색하는 방법
    • Index Scan
      • 인덱스를 검색하여 해당 자료의 테이블을 액세스하는 방법

MySQL vs Oracle

  • NULL값 확인 함수

    • Oracle에서는 NVL()함수를 사용
      • ex) SELECT NVL(user_id) FROM USER
    • MySQL에서는 IFNULL()함수를 사용
      • ex) SELECT IFNULL(user_id) FROM USER
  • 현재날짜시간 확인 방법

    • Oracle에서는SYSDATE를 사용
      • ex) SELECT SYSDATE FROM DUAL
    • MySQL에서는 NOW()함수를 사용
      • ex) SELECT NOW() FROM DUAL
  • 날짜포멧 변환방법

    • Oracle에서는 날짜를 문자열로 변경시 TO_CHAR()함수를 사용
      • ex) SELECT TO_CHAR(REG_DATE,'YYYYMMDD HH24MISS') FROM DUAL
    • MySQL에서는 DATE_FORMAT()함수를 사용
      • ex) SELECT DATE_FORMAT(REG_DATE, '%Y%m%d%H%i%s') FROM DUAL
      • 형식에 쓰는 대소문자에 따라 다른 값이 나올 수 있다.
        • %Y는 4자리년도(2019), %y는 2자리년도(19)
  • 요일변환의 숫자범위

    • Oracle은 일, 월, 화, 수, 목, 금, 토를 1, 2, 3, 4, 5, 6, 7로 인식
      • ex) SELECT TO_CHAR(SYSDATA, 'D') FROM DUAL
      • 결과값 : 오늘이 수요일인 경우 4를 반환
    • MySQL은 일, 월, 화, 수, 목, 금, 토를 0, 1, 2, 3, 4, 5, 6로 인식
      • ex) SELECT DATE_FORMAT(NOW(), '%w') FROM DUAL
      • 결과값 : 오늘이 수요일인 경우 3을 반환
    • 보통 일, 월, 화, 수, 목, 금, 토를 0, 1, 2, 3, 4, 5, 6으로 쓰기 때문에 ORACLE인 경우 결과값을 -1해서 반환하는 경우가 많다.
  • 문자와 문자 합치는 방법

    • Oracle에서는 문자와 문자를 합칠 때 '||'을 사용
      • ex) SELECT user_id FROM USER WHERE user_id LIKE '%' || 'hong' || '%'
    • MySQL에서는 문자와 문자를 합칠 때 CONCAT()함수를 사용
      • ex) SELECT user_id FROM USER WHERE user_id LIKE CONCAT('%','hong','%')
  • 형변환방법

    • Oracle에서는 TO_CHAR, TO_NUMBER을 사용하여 형을 변환
      • ex) SELECT TO_CHAR(4885) FROM DUAL
    • MySQL에서는 CAST를 사용하여 형을 변환
      • ex) SELECT CAST(4885 AS CHAR) FROM DUAL
  • 페이징처리

    • Oracle은 ROWNUM을 이용하여 WHERE에서 BETWEEN으로 1~10번째자료를 나타냄
      • ex) SELECT * FROM (SELECT ROWNUM, A.* FROM (SELECT * FROM BOARD) A) WHERE ROWNUM BETWEEN 0 AND 10
    • MySQL은 LIMIT를 사용하여 1~10번째자료를 나타냄
      • ex) SELECT * FROM BOARD LIMIT 0, 10
  • 시퀀스사용시 다음번호 불러오는 방법

    • ORACLE은 시퀀스명.NEXTVAL을 사용
    • MySQl은 시퀀스명.CURRVAL를 사용