경력면접이라 기술질문이 많을거 같은데..너무나 약하다 기술질문에..그래서 대충이나라 정리해서 올려둬보자..
1. spring 프레임워크
- 간단히 말하면 개발을 좀더 편하고 안정적으로 하기위해 만든 툴
- aop(관점지향 프로그래밍, Aspect Oriented Programming)
-> 개발코드에선 비즈니스 로직에만 집중하고, 실행될 때 앞,뒤 원하는 지점에 공통적으로 반복되는 코드(로그,트랜잭션, 테스트 메소드등..) 들을 실행하게 하는 방식
- di(의존성 주입, dependency injection)
-> 객체를 직접 생성하는 것이 아니라 외부에서 생성 후 주입시키는 방식
- ioc(제어의 역전, inversion of control)
-> 객체를 사용자가 만드는게 아니라 스프링에게 위임하여 만들어 놓은 객체를 쓰는거
Ex) autowired
2. String, StringBuffer, StringBuilder 차이점이 무엇인가요
- 첫번째 차이점은 String은 불변하다는 특징을 가지고 있어서 수정을 하지못하고 새로운 String 인스턴스가 생성되고 전에 있던 String은 GC에 의해 사라지게 된다. 그래서 좋은 성능을 기대하기는 힘들다. (String 불변, StringBuffer, StringBuilder 가변)
- StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다는 점(thread-safe) 입니다. 참고로 String도 불변성을 가지기때문에 마찬가지로 멀티쓰레드 환경에서의 안정성(thread-safe)을 가지고 있습니다.
- 반대로 StringBuilder는 동기화를 지원하지 않기때문에 멀티쓰레드 환경에서 사용하는 것은 적합하지 않지만 동기화를 고려하지 않는 만큼 단일쓰레드에서의 성능은 StringBuffer 보다 뛰어납니다
- stringbuffer, stringbuilder는 append, delete등으로 가변적으로 이용 가능하다
3. jdbc?
- 자바에서 데이터베이스에 접속할 수 있도록 해주는 자바 api
4. 컬렉션 클래스에 제너릭 사용이유?
- 특정한 타입만 포함될 수 있도록 제한하고 잘못된 타입이 사용 될 수 있는 문제를 컴파일 타임에 잡아 낼 수 있어서
5. jvm?
- 자바를 실행하기 위한 가상 머신
- 컴파일러가 .java를 컴파일 하면 .class라는 바이트 코드로 변환되고 변환된 코드는 기계어가 아니라 운영체제에서 실행이 되지 않는데 이걸 해석해주는 것
6. 자바의 특징
1) oop
- 객체를 기준으로 코드를 조립?하여 만들어가는 방식
2) 가비지 컬렉션에 의한 메모리 자동 관리
- 더 이상 사용하지 않는 동적 할당된 메모리 블록이나 객체를 찾아 자동으로 회수
- 메모리가 부족해지면 os에 추가로 메모리를 요청할 때 실행
- 알고리즘
- 마킹 작업 : 사용중인것과 아닌 것을 식별
- 일반 삭제 : 참조되지 않는 객체를 제거
7. 자바의 메모리 영역
1) 메서드 영역 : static변수, 전역변수, 코드에서 사용되는 class..
2) 스택 영역 : 지역변수, 함수(메소드) 등이 할당되는 영역, LIFO
3) 힙 : new 연산자를 통해 동적할당된 객체들이 저장, 가비지 컬렉션에 의해 관리
8. 인터페이스, 추상클래스
- 인터페이스는 인터페이스에 정의된 메소드를 클래스의 목적에 맞게 기능을 구현하는 느낌
- 추상클래스는 자신의 기능을 하위 클래스에 확장 시키는 느낌
9. 컬렉션 프레임워크
1) List
- 순서가 있는 데이터의 집합으로 중복 허용
2) Set
- 순서가 없는 데이터의 집합으로 중복 허용 안됨
3) Map
- 키와 값의 쌍으로 이루어지는 데이터의 집합으로 순서가 없고, 키는 중복이 되지 않지만 값은 허용
10. 프로세스와 스레드의 차이
- 프로그렘 -> 프로세스 -> 스레드
- 프로그램 : 파일이 저장되있지만 메모리엔 올라가지 않은 정적인 상태
- 프로세스 : 운영체제로부터 자원을 할당받은 작업의 단위(프로그램을 실행)
-> 프로세스마다 각각의 독립된 영역을 code/data/stack/heap의 형식으로 할당받는다.
-> 한 프로세스는 다른 프로세스의 변수나 자료 구조에 접근 할 수 없다.
- 스레드 : 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
-> 프로세스 내에서 각각의 stack만 할당받고 나머지는 공유
-> 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행
-> 자바에는 프로세스가 존재하지 않고 스레드만 존재하며, 자바 스레드는 jvm에 의해 스케줄되는 실행 단위 코드 블록이다.
11. 멀티쓰레드
- 하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하나의 작업을 처리하도록 하는 것
12. 필터, 인터셉터
- 필터는 디스패처서블릿 전후, 웹 컨테이너가 관리
- 인터셉터는 컨트롤러 전후, 스프링 이 관리
13. 스프링 작동 원리?
1. 웹을 켠다
2. 브라우저==> 클라이언트
3. 클라이언트가 url을 매칭시켜서 View로 정보를 요청한다
4. view에서 해당 요청을 수행하려고 한다
5. 그러면 Dispatcher-servlet이 HandlerMapping을 동작시킴
6. 해당 url이 매핑된 Controller를 검색
7. 주입된 @Bean객체를 가지고 handlerMapping에 매핑되어 있는 Controller를 호출한다. (@Controller)
8. @RequestMapping("url") 그 Controller안에 요청(ex: url + .do )과 일치하는 url 메소드를 찾아서 Service -> DAO -> DB 순서로 클라이언트에서 받은 어떠한 데이터들을 가지고 이동해서 조건에 맞는 쿼리를 DB에서 수행한다.
9. 그 후 해당하는 자료를 다시 역순으로
DB -> DAO -> Service 순으로 Dto에 받아와서 Controller에 데이터를 반환해준다.
10. 이제 반환값으로 Controller에서 출력할 viewName을 반환한다.
11. 처리된 데이터를 ViewResolver에서 prefix경로의 viewName.suffix 형식이 있는지 확인한다.
12. 해당하는 View가 있으면 View에 가지고있는 데이터를 전달한다.
13. view는 받은 데이터를 다시 Dispatcher-Servlet에 전달해준다.
14. Dispatcher-Servlet은 받은 데이터를 클라이언트로 전달한다.
15. 최종 결과를 클라이언트에서 출력
14. Rest
- uri와 method를 이용해 객체화된 서비스에 접근하는 것
- 구성 : 리소스(접근할 대상), 메서드(http method, get, post, put, delete), 메시지
- get : 서버로부터 데이터 요청
- post : 서버의 데이터 추가, 작성 등
- put : 서버의 데이터 갱신, 작성
- delete : 서버의 데이터 삭제
- ex)
이름이 tom인 사용자를 생성한다
리소스 - 사용자
메소드 - 생성한다
메시지 - 이름이 tom인 사용자
15. REST API
- REST 기반 서비스 API
- 어플리케이션 간의 데이터 통신을 위한 어플리케이션 프로그래밍 인터페이스
- 동일한 uri의 행위에 맞게 메소드를 이용한다
- 명사를 사용, 리스트의 경우 복수형
16. get, post
1) get
- 길이제한이 있다(표준이 있다기보다, 브라우저마다 다르다)
- 요청 시 정보가 파라미터에 노출되어 보안에 취약
- 데이터를 요청할 때 사용
- 불필요한 요청을 제한하기 위해 캐시가 될 수 있다. Js, css, 이미지 등의 정적 컨텐츠는 브라우저에 요청을 캐시해두고 후에 동일한 요청이 발생되면 캐시된 정보를 사용한다.
2) post
- body에 데이터를 담아 보내고, 길이 제한이 없다.
- 보통 html form을 통해 전송
- 전송 내용이 눈에 보이지 않아 get보다는 보안에 좋다 생각할 수 있지만 개발자도구나 툴을 이용해 정보가 확인가능하므로 중요정보는 암호화하자
- 캐시되지 않는다.
17. http, https
1) http(HyperText Transfer Protocol)
- 인터넷 초기에 모든 웹사이트에서 사용
- 바이너리 테이터가 아닌 텍스트로 주고 받아 보안에 취약
2) https(http Secure)
- ssl을 통해 http의 보안적 문제를 보완
- 기밀성 : 인터넷과 같은 공공매체에서 두 참여자 간의 통신을 보호
무결성 : 변조되지 않은 정보로 목적지에 도달하게 한다. 웹사이트 변조 x
인증 : 웹사이트의 진위여부 확인
이전에 하던 업무에 대한 질문시
- 운영서비스중 나오는 유지보수와 더불어 고객사가 프로젝트 초반 요구한 것들에 대해 신규 개발을 하거나
기능을 더 나은 방향으로 고도화 하는 업무를 하였습니다.
- web/was가 하나의 서버에 있고 총 2개의 서버, 1개의 db서버 사용
- L4 스위치를 통해 vip를 두고 이중화하여 하나의 서버가 에러시 다른 서버에서 돌아가도록 함
- 라이선스 이슈로 세션클러스터링이 되지않아 반영을 위해 서버를 재가동할 때 걱정이 많았음
- oracle, tibero 사용
18. NoSQL vs RDBMS
- sql이란 데이터베이스 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어
- dbms는 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고, 관리해주는 소프트웨어
1) rdbms(relational database management system)
- 관계형 데이터베이스 관리 시스템
- 테이블끼리 관계를 맺고 모여있는 집합체로 외래키(foreign key)를 사용하여 다른 테이블끼리 join을 할 수 있는 것이 특징이다.
- 대표적인 예가 oracle, mysql, mssql 등등
2) nosql(Not Only sql)
- 테이블 간 관계를 정의하지 않음
- 데이터 테이블은 그냥 하나의 테이블이고, 관계가 정의되지 않아 join도 불가능
- 빅데이터의 등장으로 데이터와 트래픽이 기하급수적으로 늘어나 rdbms의 단점인 성능을 향상시키기 위해 장비가 좋아야하는 특징이 비용이 기하급수적으로 증가하기 때문에 비용을 고려하여 데이터의 일관성은 포기하고 여러 대의 데이터에 분산하여 저장하는 것을 목표로 등장했다
- 대표적인 예가 MongoDb
3) 장단점
1) RDBMS
- 장점
-> 정해진 스키마에 따라 데이터를 정확하므로 명확한 데이터 구조를 보장
- 단점
-> 테이블간 관계를 맺다보니 규모가 커지면 join문이 많은 복잡한 쿼리가 만들어 질 수 있다.
-> 성능향상을 위해서는 서버의 성능을 향상시켜야 하는 스케일업만을 지원하여 비용이 늘어난다.
-> 스키마로 인해 데이터가 유연하지 못하다
2) NoSQL
- 장점
-> 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가질 수 있다.
-> 데이터 분산이 용이하며 성능 향상을 위한 스케일업, 스케일아웃 또한 가능하다.
- 단점
-> 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경되면 모든 곳에서 수정해야 한다.
-> 스키마가 존재하지 않아 데이터 구조를 보장하지 않는다.
* Scale-up : 성능 향상을 위해 서버를 높은 사양으로 업그레이드
Scale-out : 성능 향상을 위해 서버를 추가하여 확장
19. index
- 정보의 검색 속도를 향상시키는 물리적인 자료구조
20. 트랜잭션
- 데이터를 다루는 논리적인 작업의 단위
- 트랜잭션 내에서 sql구문이 오류가 발생하면 그것이 1개 이상의 sql구문이 존재해도 모두 실행되지 않음
- 특성
1) 원자성 : 트랜잭션 내에 작업이 오류가 생기면 모두 실행이 안되고, 오류가 없다면 모두 실행된다.
2) 일관성 : 트랜잭션이 일어나기 전후의 상황은 일정해야 한다.
3) 고립성 : 트랜잭션이 수행 중 일 때 다른 트랜잭션의 간섭이 발생하면 안된다.
4) 지속성 : 정상적으로 완료되면, 데이터베이스의 데이터를 영구히 저장한다.
21. 교착상태
- 2개 이상의 트랜잭션이 특정 자원의 잠금을 가진 채 다른 트랜잭션이 소유한 특정자원의 잠금을 요구하면 아무리 기다려도 변경사항이 없는 상태
- 빈도를 낮추는 법
1) 트랜잭션을 자주 commit
2) 정해진 순서로 자원에 접근
역으로 질문할기회가 생기면..
1. 저 정도 년차에게 요구하는것
2. 함께 일할 팀의 규모?
3. 저를 채용하신다면 어떤 기대감같은것을 갖고 계신지
'면접 질문' 카테고리의 다른 글
웹 프로그래머 면접 예상 질문 (0) | 2018.07.17 |
---|