기술 면접 준비-기본

JAVA 관련 예상 질문

1. 객체지향에 대해 설명해보세요

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

캡슐화

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

상속

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

추상화

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

다형성

  • 하나의 참조변수로 여러 타입의 객체를 참조 할 수 잇는 것 (조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는 것)

2. 오버로딩 & 오버라이딩 차이?

  • 오버로딩(Overloading) : 같은 이름의 메소드 를 여러 개 가지면서 매개변수의 유형과 개수가 다름
  • 오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의 해서 사용

오버로딩 조건

  • 메서드의 이름이 같아야 한다
  • 매개변수의 개수 or 타입이 달라야한다. (리턴타입은 오버로딩 구현과 관계 없다)

오버라이딩 조건

  • 선언부가 같아야 한다 (이름 / 매개변수 / 리턴타입)
  • 접근제어자를 좁은 범위로 변경할 수 없다
  • 조상클래스의 메서드보다 많은 수의 예외를 선언할 수 없다

3. 접근제어자

  • 멤버 or 클래스에 사용되어, 외부로부터의 접근을 제한 (클래스 / 멤버변수 / 메서드 / 생성자)

public

: 접근 제한 없음

protected

: 같은 패키지 & 다른 패키지의 자손클래스에서 접근 가능

default

: 같은 패키지 내에서만

private

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


4. 클래스 / 추상클래스 / 인터페이스 차이

  • 클래스 : 설계도 , 추상클래스 : 미완성 설계도 , 인터페이스 : 밑그림
  • 인스턴스 생성여부
    • 클래스 : 인스턴스 생성 o
    • 추상클래스 / 인터페이스 : 미완성 이기 때문에 인스턴스 생성 x
  • https://devham76.github.io/java/java-interface/

★질문★ ) 인터페이스와 추상클래스의 차이점을 외관, 목적, 특징에 따라 설명해주세요

인터페이스 (밑그림-동일한동작)

  • 외관
    • interface , implements
    • 모든 메서드가 추상 메서드 + 상수 (java8 이후부터는 default,static메서드를 가질수있다)
  • 목적
    • 함수의 껍데기만 있는 인터페이스의 함수를 강제로 구현하게 한다
    • 해당 인터페이스를 구현한 객체들에 대해서 동일한 동작을 보장한다
    • 개인작업이 가능하게 해줘서 프로그래밍 시간을 단축 시킬 수 있다
  • 특징
    • 다중 구현 가능

      추상클래스 (미완성 설계도-이용/확장)

  • 외관
    • class extends
    • 추상메서드(구현코드가 없는 메서드)를 포함한 클래스
  • 목적
    • 추상 클래스를 상속받아 기능을 이용하거나 확장시킨다
    • 상속 받은 클래스가 자신의 기능에 맞게 메서드를 재구현 한다 (책임 위임)
  • 특징
    • 다중 상속 불가능 (다중 상속의 모호성)
    • car와 plane 두 클래스 모두 drive()메서드를 가지고 있다면 어떤걸 실행해야 될지 모호해진다.
      class MyVehicle extends car, 	plane{
          @Override
          public void goTo(){
              super.drive();
          }
      }
    
    • interface는 다중 구현이 된다 (구현되어있지 않은 추상메서드만 있다)
      class car implements vehicle,engine{
          @Override
          public void drive(){
              @doSomething
          }
      }
    

5. 프로세스/쓰레드

  • 프로세스 : 공장 / 쓰레드 : 일꾼

    프로세스

    : 실행중인 프로그램 . 자원(resources)과 쓰레드로 구성

    쓰레드

    : 프로세스 내에서 실제 작업을 수행하는 단위 . 모든 프로세스는 하나의 쓰레드를 가지고 있다

    멀티쓰레드

  • 하나의 프로세스에 하나 이상의 쓰레드를 생성하여 실행
  • 하나의 프로그램에 하나 이상의 작업수행

데이터베이스 SQL문 관련 예상 질문과 문제

select문 만드는 방법
SELECT 컬럼명
FROM 테이블명
WHERE 조건식
ORDER BY 컬럼명 OR 표현식(ASC OR DESC);

*WHERE 절에 쓰이는 연산자*
- 논리 비교 연산자 : != <> ^=
- SQL비교 연산자 :
1. NOT BETWEEN ~ AND ~
2. NOT IN
3. NOT LIKE (% 사용할 경우 결과도 알아야함)
4. IS NOT NULL
GROUP BY와 HAVING 절
SELECT 컬럼명, GROUP 함수
FROM 테이블명
WHERE 조건식
GROUP BY 컬럼명
HAVING 조건식
ORDER BY 컬럼명이나 표현식 // 제일 마지막에 위치 !!

// 문제 1.  지역별로  개의 부서가 있는지 나타내시오.
SELECT name, count(region_id)
FROM s_dept
GROUP BY site_name

// 문제 2.  부서별로 평균 급여를 구하되 평균 급여가 2000 이상인 부서를 나타내시오.
SELECT dept_id, AVG(salary)
FROM s_emp
GROUP BY dept_id
HAVING AVG(salary) >= 2000

JOIN

서브 쿼리(SubQUERY)

: 하나의 SELECT문 안에 포함되어 있는 또 다른 SELECT 문장

INDEX

  • RDBMS에서 대용량의 데이터가 있을때 특정 데이터를 검색하기위해 테이블을 FULL SCAN하는것이 아니라, 인덱스가 적용된 컬럼의 테이블을 따로 저장하고 그것을 검색해서 검색 효율을 높이는 방법
  • DELETE, INSERT, UPDATE에서는 성능 좋지 않다.
  • CREATE INDEX index_category ON book_store(category)
    • book_store테이블의 category컬럼에 index_category라는 인덱스 생성

JSP & JAVA SCRIPT 관련 질문

request 객체 / response 객체란?

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

GET & POST 방식의 차이

  • GET : URL로 값을 보내기 때문에 보안에 취약 하고 길이 제한이 있다
  • POST : 값을 전송하지만 URL에 노출되지 않아 보안에 강하고 많은 양의 데이터 를 보내는데 적합하다

쿠키(Cookie) & 세션(Session)의 특징

  • 공통점 : 데이터를 저장하는 용도로 쓰임
보안 속도  
쿠키 물리적인 형태로 저장, 보안에 취약 빠르다
세션 서버에 보관, 보안에 좋다 느리다

비동기식 & 비동기식 일처리

  • 동기식 : 순차적으로 일을 스스로 끝내 나가는 방식으로 작업 당 페이지 이동이 있는 경우 이다
  • 비동기식 : 해야 할 일을 위임하고 기다리는 방식으로 ajax를 이용하여 구현 할 수 있는데 페이지 이동없이 고정된 화면에서 어떠한 처리가 이뤄지는 것을 말한다

static vs final

static

  • 메모리에 한번 할당되어 프로그램이 끝날 때 까지 유지된다><.b>
  • static이 붙은 변수들은 객체들이 다 같이 공유하는 데이터를 의미한다.

  • static이 붙은 메소드들은 객체들의 데이터와 관계없는 완벽하게 공통적인 로직을 정의할 때 사용한다.
  • static이 붙은 메소드를 보면 무조건 ‘객체와 무관하다.’혹은 ‘객체의 영향 받지 않는 메소드

  • 따라서 static 메소드에서는 인스턴스 변수나 객체의 메소드를 사용할 수 없다.

static을 쓰는이유

  • 인스턴스에 공통적으로 사용해야하는 것에 static을 붙인다
  • 전역으로 자주 사용할 메서드를 static메서드로 만들어 사용한다

final

  • final은 마지막, 최종적이라는 의미로 java에서 final 키워드는 상수나 메소드,클래스를 정의한 뒤 변경하지 못하게 할때 사용한다.

static final vs final

  • static final : 클래스이름없이도 사용가능
  • final : 객체생성없이 사용불가능

static final

static은 알다시피 클래스 변수이다. 그러므로 static final은 객체가 아닌 클래스에 존재하는 단 하나의 상수이다. 즉 객체마다 값이 바뀌는 것이 아닌 클래스에 존재하는 상수이므로 선언과 동시에 초기화를 해 주어야하는 클래스 상수이다.

public class SamsungTV
{
	static final String corpName="samsung";  //선언과 동시에 초기화
  public void turnOn(){
    //
  };

}

정규식 핸드폰 구현

- 핸드폰번호 정규식
var regExp = /^\d{3}-\d{3,4}-\d{4}$/;
- 일반 전화번호 정규식

var regExp = /^\d{2,3}-\d{3,4}-\d{4}$/;

필기로 나올수 있는 질문

  • 정렬 알고리즘 손코딩
  • 문자열 뒤집기(포인터) 손코딩
  • tcp 응용계층 아닌 것은
  • 디버깅하기(5개 버그유발하는 부분 찾아 고치기), 인터페이스와 추상클래스 공통점과 차이점, null포인터, void 포인터, DB 쿼리문
  • 스프링, IoC DI
  • JAVA의 Collections에 대한 질문,
  • Process와 Thread의 차이,
  • Thread와 ThreadLocal의 차이,
  • 싱글톤 패턴, 팩토리 패턴에 관한 질문

면접시 나올수 있는 질문

- 자기소개, 다양한 분야에 일할 수 있는데 괜찮은지, IoT란 무엇이라고 생각하는가(low level에서), NoSQL 써봤는지, 소켓통신 해봤는지, 형상관리 툴 뭐뭐 썼는지, 일정관리하는 툴 뭐뭐 써봤는지, 파이썬 어느정도 하는지, 본인이 생각하는 Java 스킬, Spring framework 쓰고 안쓰고 차이, DB 어떤거 써봤는지, 공백기 때 뭐해봤는지, 따로 독학으로 공부(개발관련)한 것 있는지, 궁금한 거 말해보기 등등

> Apache & Tomcat server

  • Apache : 웹서버(정적인 데이터) / 80
  • Tomcat : WAS(웹 어플리케이션 서버) / 8080 / 톰캣에서 아파치 기능을 일부 포함하고 있다 -> 아파치 톰캣

Reference