기술 면접 준비-기본
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 / 톰캣에서 아파치 기능을 일부 포함하고 있다 -> 아파치 톰캣