Skip to content

eomcs/eomcs-interview

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 

Repository files navigation

기술 면접 주요 질문

  • 개발 회사의 개발 팀장은 하루 종일 개발하고 관리하는 것도 벅차다.
  • 그런 중에 새 팀원을 뽑기 위해 인터뷰 질문을 제대로 준비할 수 있을까?
  • 그렇다고 아무 질문이나 대충 던져서는 입사 지원자의 실력을 제대로 평가할 수 없다.
  • 여러 분이 인터뷰를 진행하는 사람이라면 어떻게 하겠는가?

나라면,

  • 정보처리기사 책에서 주요 키워드를 뽑거나 정보처리기사 문제를 뽑아 내겠다.
    • 정보처리기사 시험 문제는 컴퓨터 공학 등 관련 학과 전공자가 4년간 배우는 내용을 엄선하여 총 정리한 것이기 때문이다.
  • 코딩 시험이라면 codefights.com 사이트의 문제를 뽑아 내겠다.
    • 10줄 안팎의 간단한 코드이면서 프로그래밍의 기본 실력을 제대로 테스트할 수 있는 문제이기 때문이다.
  • 용어 위주의 개념과 약자된 용어의 정확한 단어를 물어본다.
    • 개발을 잘하는 사람을 뽑고 싶으면 경력자를 뽑으면 된다.
    • 신입에게 바라는 것은 기초가 탄탄한가이다.
    • 기초가 탄탄해야 향후 발전성이 크기 때문이다.

결론,

  • 정보처리기사 시험을 보지 않더라도, 입사 시험을 위해 정보처리기사 시험 준비를 하라! 어차피 입사하면 자격증을 따야 한다.
  • codefights.com 또는 그와 유사한 사이트를 참고하라.
  • 용어와 약자의 원래 단어를 노트에 써서 늘 암기하라. 나중에 공부할 때도 도움이 된다.
  • 개발자를 위한 인터뷰 관련 책과 알고리즘 책은 한, 두권 쯤 읽어 둬라.

자바

추상 클래스와 인터페이스의 공통점, 차이점 및 용도

[공통점]
- 추상 메서드를 가질 수 있다.
- 서브 클래스에 메서드 구현을 위임한다.
- 직접 인스턴스를 생성할 수 없다.

[차이점 및 용도]
추상 클래스
- 추상클래스는 서브 클래스들에게 공통 속성 및 메서드를 상속 해주는 용도이다.
- 클래스 변수, 인스턴스 변수를 정의할 수 있다. 메서드를 구현할 수 있다.
- 상속의 기법 중에 일반화(generalization)를 통해 추출한 수퍼 클래스를 보통 추상 클래스로 선언한다.
- 특정 기능에 대해서는 추상 메서드로 선언하여 서브 클래스에게 구현을 강요한다.

인터페이스
- 인터페이스는 사용자(caller)와 피사용자(callee) 사이의 호출 규칙을 정의할 때 사용하는 문법이다.
- 따라서 모든 메서드는 공개된 추상 메서드이다. (public abstract)
- 또한 모든 변수는 상수 이다. (public static final)

오버로딩과 오버라이딩 의미와 사용 예

[오버로딩(Overloading)]
- 파라미터의 타입이 다르거나 개수가 다르더라도 같은 기능을 하는 메서드에 대해 같은 이름을 부여하여
  프로그래밍의 일관성을 제공하는 것.
- 예) FileOutputStream 클래스의 write() 메서드
      write(int b), write(byte[] bytes), write(byte[] bytes, int offset, int len) 

[오버라이딩(Overriding)]
- 상속 받은 메서드를 그 클래스의 역할에 맞게 재정의 하는 것.
- 예) Object 클래스의 equals()와 hashCode(), toString() 재정의.
      toString() --> 객체의 내용을 출력하도록 재정의
      equals()   --> 같은 내용일 때 true를 리턴하도록 재정의.
      hashCode() --> 같은 내용일 때 같은 해시값을 리턴하도록 재정의. 

프리미티브 타입과 레러펀스 타입의 형변환 차이

[프리미티브 타입(primitive type) 형 변환]
- byte, short, char, int, long, float, double 끼리 형 변환 가능하다.
- 숫자 값을 boolean으로 또는 boolean 값을 숫자로 형 변환할 수 없다.
- 형 변환하려는 타입의 임시 메모리를 만들어 값을 저장한다.
- 큰 값을 작은 메모리에 담을 때 값이 짤릴 수 있다.

[레러펀스 타입(reference type)]
- 레퍼런스 타입의 형 변환은 인스턴스의 실제 타입을 알려주는 용도로 사용한다.
- 실제 타입이 아닌 타입으로 형 변환할 때 예외가 발생한다.

클래스 변수, 인스턴스 변수, 지역 변수

[클래스 변수]
- 클래스가 로딩될 때 준비되는 변수.
- 클래스가 메모리에 유지되는 동안 이 변수도 유지된다.
- 인스턴스들이 공유하는 데이터를 저장할 때 사용.
- 변수는 기본 값(숫자는 0, 논리 값은 false, 참조 변수는 null)으로 자동 초기화된다.

[인스턴스 변수]
- 인스턴스를 생성할 때 Heap영역에 준비되는 변수.
- 가비지가 되었을 때 가비지 컬렉터에 의해 제거된다.
- 인스턴스 마다 개별적으로 유지해야 할 데이터를 저장할 때 사용.
- 변수는 기본 값(숫자는 0, 논리 값은 false, 참조 변수는 null)으로 자동 초기화된다.

[로컬 변수]
- 메서드가 호출되거나 블록({})을 시작할 때 준비되는 변수.
- 메서드 호출이 끝나거나 블록을 나갈 때 제거된다.
- 메서드가 호출되거나 블록을 실행할 때 마다 독립적으로 유지해야 하는 데이터를 저장할 때 사용.
- 로컬 변수는 자동으로 초기화 되지 않기 때문에 변수의 값을 조회하기 전에 초기화시켜야 한다.

배열과 연결 리스트의 차이

[배열]
- 구현이 쉽다. 
- 연속된 메모리 공간에 값을 저장하기 때문에 순차적으로 값을 조회할 때 빠르다.
- 또한 인덱스를 이용하여 임의 위치에 바로 접근할 수 있어 검색이 빠르다.
- 단점은 값을 삽입하거나 삭제할 때 배열의 값들을 이동시켜야 하기 때문에 비효율적이다.  
- 또한 초기 생성할 때 고정 크기를 갖기 때문에 배열의 크기를 늘리거나 줄일 수 없다.

[연결 리스트]
- 배열보다 구현이 복잡하다.
- 노드와 노드 간의 연결을 통해 데이터를 저장하기 때문에 가변 크기를 갖는다.
  따라서 메모리를 효율적으로 이용할 수 있다.
- 값을 삽입하거나 삭제하기 쉽다. 
- 단점은 순차적으로 조회할 때 노드를 따라가며 값을 꺼내기 때문에 속도가 느리다.
- 또한 노드 단위로 값이 분산되어 있어 배열보다 조회 속도가 느리다. 

데이터베이스

데이터, 정보, 데이터베이스, DBMS

[데이터]
- 현실 세계에서 관찰이나 측정을 통해 수집한 가공하지 않은 단순한 값.
- 예1) 이름, 나이, 전화번호, 이메일 등 단순 회원 데이터
- 예2) 주문 물품, 가격, 결재 유형 등 주문 데이터
- 예3) 날씨 장비를 통해 얻은 현재 습도 및 온도

[정보]
- 데이터를 가공하여 의사 결정에 도움을 줄 수 있는 형태로 만든 결과 값.
- 예1) 날씨 데이터를 계산하여 얻은 비올 확률
- 예2) 구입 데이터를 바탕으로 고객에게 추천할 제품
- 예3) 사내 게시글 등록, 조회, 답변을 통해 계산한 커뮤니케이션의 핵심 허브 역할자

[데이터베이스]
- 특정 조직의 업무를 수행하는 데 필요한 상호 관련된 데이터들의 모임이다.

[DBMS]
- 데이터베이스를 이용하여 데이터를 저장하고 관리하는 소프트웨어이다.
- 데이터베이스에 저장된 데이터를 바탕으로 보다 효과적으로 정보를 얻을 수 있도록 돕는 역할을 한다.

select, from, where, group by, having, order by 실행 순서

1. from       <-- 테이블 선택 
2. on         <-- 조인 조건에 일치하는 항목을 찾아
3. join       <-- 레코드와 레코드를 조인한다.
4. where      <-- 조인 결과에서 조건에 해당하는 레코드 선택한 다음
5. group by   <-- 특정 컬럼을 기준으로 값이 같은 레코드를 그룹으로 묶는다.
6. having     <-- 묶은 그룹의 값이 조건과 일치하는 것만 골라낸다.
7. select     <-- 결과에서 추출할 컬럼을 선정한다.
8. distinct   <-- 특정 컬럼을 기준으로 겹치는 레코드가 있으면 제거한다. 
9. order by   <-- 최종적으로 특정 컬럼에 대해 정렬한 다음 결과를 추출한다.

DB 트리거란 무엇인가?

- 데이터를 입력하거나 삭제, 변경하기 전/후에 자동으로 실행하는 작업이다.
- 데이터 상태 관리를 자동화하는 데 사용한다.
- 예)
  데이터를 조작하기 전/후에 기록을 남기는 작업
  데이터 조작 전에 조건을 검사하여 작업의 유무를 결정하는 작업
  데이터 조작에 필요한 값을 준비시키는 작업

inner 조인과 outer 조인

[inner join]
- 조인 조건을 만족하는 row에 대해서만 결과로 추출한다.

[outer join]
- 조인 조건에 일치하지 않는 row도 결과로 추출한다.
1) left outer join
   조인할 때 왼쪽에 위치한 테이블을 기준으로 결과를 추출한다.
   기준이 되는 왼쪽 테이블의 데이터는 모두 결과로 추출한다.
2) right outer join
   조인할 때 오른쪽에 위치한 테이블을 기준으로 결과를 추출한다.
   기준이 되는 오른쪽 테이블의 데이터는 모두 결과를 추출한다.
3) full outer join
   조인 조건에 맞는 row 뿐만아니라, 
   조인되지 않은 왼쪽, 오른쪽 테이블의 모든 row를 결과로 추출한다.

DDL / DML / DCL

- SQL 문법을 기능에 따라 부르는 이름이다.
[DDL]
- Data Definition Language 의 약자이다.
- 데이터베이스를 구축하거나 변경할 때 사용하는 SQL 문법이다.
- 주로 데이터베이스의 스키마 객체(테이블, 뷰, 시퀀스, 트리거 등)를 생성, 변경, 삭제할 때 사용한다. 
- 예1) 테이블 생성
    create table student(no int, name varchar(100));
- 예2) 테이블 변경
    alter table student add column email varchar(100) not null;
- 예3) 테이블 삭제
    drop table student;

[DML]
- Data Manipulation Language 의 약자이다.
- 테이블에 데이터를 입력하거나 변경, 삭제, 검색할 때 사용하는 SQL 문법이다.
- 예1) 데이터 입력
    insert into student (1, '홍길동', 'hong@test.com');
- 예2) 데이터 변경
    update student set email='hongkd@test.com' where no=1;
- 예3) 데이터 삭제
    delete from student where no=1;

[DCL]
- Data Control Language 의 약자이다.
- 데이터를 보호하거나 관리하기 위해 사용하는 SQL 문법이다.
- 보통 데이터 사용 권한이나 역할을 허가하거나 취소할 때 사용한다.
- 예1) scott 사용자에게 student 테이블의 데이터를 삭제할 수 있는 권한을 부여.
    grant delete on student to scott;
- 예2) scott 사용자에게 부여된 student 테이블의 데이터를 삭제하는 권한을 최소.
    revoke delete on student to scott;
- 예3) scott 사용자에게 student 테이블에 대한 select 권한을 부여하고, 이 권한에 대해 관리자 역할 도 부여한다.
       관리자 역할까지 부여 받으면 scott 사용자는 이 권한을 다른 사용자에게 허락할 수 있다.  
    grant select on student to scott with grant option;

무결성

- 삽입, 삭제, 갱신을 한 후에도 데이터베이스에 저장된 데이터가 정해진 제약조건을 항상 만족해야 함을 의미.

[개체 무결성]
- 모든 테이블은 기본 키를 가져야 하며, 기본 키로 선택된 컬럼들은 NULL 값을 가질 수 없으며 중복 될 수 없다.

[참조 무결성]
- 외래 키 컬럼은 참조하는 테이블의 기본 키 값을 가져야 하며 제약 조건에 따라 NULL 값을 가질 수 있다.

JSON

[특징]
- JavaScript Object Notation 의 약자이다.
- 자바스크립트에서 객체를 표현할 때 사용하는 문법을 가져와서 
  범용으로 사용할 수 있도록 만든 개방형 표준 포맷이다. 
- 데이터를 저장하거나 프로그램 사이에 데이터를 교환할 때 주로 사용한다.

[장점]
- 텍스트로 작성하기 때문에 사람과 소프트웨어 모두 읽고 쓰기 쉽다.
- 특정 프로그래밍 언어나 플랫폼에 종속되지 않기 때문에
  프로그램 및 시스템 간에 데이터를 교환하기 쉽다.
- 자바스크립트 문법에서 따왔기 때문에 
  기본적으로 자바스크립트 객체로 즉시 변환해 사용할 수 있다.

[단점]
- 메타 데이터로 인해 바이너리 형식 보다 데이터 크기가 크다.
- 바이너리 형식에 비해 데이터 파싱 속도가 느리다.
- 데이터의 형식이 노출됨으로 악의적인 변경을 검증하기가 쉽지 않다.

AJAX

[특징]
- Asynchronous JavaScript and XML 의 약자이다.
- 웹브라우저에서 웹서버와 비동기로 데이터를 교환하기 위해 만든 기술이다.

[장점]
- 전체 페이지를 갱신하지 않고 일부 화면만 갱신할 수 있어 
  화면 깜박임이 줄고, 네트워크 오버헤드가 적어진다.
- 웹서버는 데이터만 공급하고 UI 생성은 웹브라우저에게 맡김으로써
  서버의 실행 부하를 줄이고 클라이언트의 자원을 충분히 활용할 수 있다.
- 또한 수신하는 데이터의 양이 적어짐으로 통신으로 인해 낭비되는 시간 및 비용을 줄일 수 있다.

[단점]
- 비동기 방식으로 인해 소스 코드가 복잡해지고, 디버깅이 어렵다.
- 동일-출처 정책(same-origin policy)으로 인해 
  HTML 문서를 받은 서버로만 비동기 요청을 해야 하는 제약이 있다.

MVC 아키텍처 패턴

- Model-View-Control 의 약자이다.
- UI와 비즈니스 로직을 분리하여 서로 영향을 끼치지 않고 쉽게 고칠 수 있게 만들기 위한 아키텍처 패턴이다.
- 모델은 애플리케이션 데이터를 다루는 일을 한다.
- 뷰는 UI를 생성하는 일을 한다.
- 컨트롤은 클라이언트 요청을 처리하는 일을 한다.
  1) 클라이언트로부터 요청을 받으면 적절한 모델을 이용하여 데이터를 처리하고,
  2) 클라이언트가 요구하는 결과를 생성할 적절한 뷰를 선택한 다음에
  3) 뷰에서 출력할 데이터를 가공하여 전달하는 일을 한다.

HttpServletRequest와 HttpServletResponse 인터페이스

- 서블릿 컨테이너는 클라이언트 요청을 받게 되면 그 요청을 처리할 
  서블릿 객체를 찾아 사전에 약속된 대로(Servlet 인터페이스 규칙에 따라)
  service() 메서드를 호출한다.
- 이 때 service() 메서드에 넘겨주는 파라미터가 이 객체들이다.
- HttpServletRequest는 클라이언트의 요청과 관련된 기능을 다루는 객체이고,
  HttpServletResponse은 클라이언트에게 응답하는 것과 관련된 기능을 다루는 객체이다.

Servlet 인터페이스의 init(), service(), destroy() 호출 순서

1) 클라이언트 요청을 들어오면 서블릿 컨테이너는 그 요청을 처리할 서블릿 객체를 찾는다.
2) 서블릿 객체가 없다면 서블릿 객체를 만든 후에 
   그 서블릿이 사용할 자원을 준비시킬 목적으로 init()를 호출한다.
3) 서블릿 객체에게 일을 시키기 위해 service()를 호출한다.
4) 웹 애플리케이션을 정지시키면 서블릿들이 사용한 자원을 해제시키기 위해,
   서블릿 컨테이너는 각각의 서블릿 객체에 대해 destroy() 메서드를 호출한다.
- init()는 서블릿 객체를 만들 때 한 번, destroy()는 웹 애플리케이션을 종료할 때 한 번 호출된다.
- service()는 요청이 있을 때 마다 호출된다.

HTML UI 객체의 위치를 조정할 때 사용하는 CSS 스타일 : position과 float

[position 스타일]
- absolute : absolute나 fixed 조상의 위치를 기준으로 UI 객체의 위치를 조정한다.
- relative : 현재 위치를 고수하면서 좌/우/위/아래로 위치를 조정한다.
- fixed : 웹 브라우저의 클라이언트 영역의 절대 좌표를 기준으로 위치를 조정한다.

[float 스타일]
- left : 현재 위치에서 공중부양하여 좌측으로 정렬한다.
- right : 현재 위치에서 공중부양하여 우측으로 정렬한다. 

자바 배열과 자바스크립트 배열의 차이

[자바 배열]
- 크기가 고정된다. 한 번 생성되면 변경될 수 없다.
- 배열 선언할 때 지정한 타입의 값만 넣을 수 있다.

[자바스크립트 배열]
- 크기가 가변적이다. 인덱스를 지정하는 만큼 크기가 커진다.
- 자바의 연결리스트(LinkedList)와 유사하게 동작한다.
- 어떤 타입의 값이라도 넣을 수 있다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published