:::: 개발 ::::/::: 회사 업무:::

경력 이직 기술 면접 준비중

nayha 2014. 4. 8. 17:47

일단 여기서는 쉽게 요약 정리하면,

빅 엔디안값은 왼쪽-> 오른쪽 순서로 읽고, 리틀 엔디안값은 반대로 오른쪽->왼쪽 순서로

읽으면 된다는 점이다. 그리고 네트워크 상에서 표준으로 이용되는 프로토콜은

네트워크 바이트 오더인 빅 엔디안으로 생각하자.


그리고 세마포어란.. 역시 데드락을 피하기 위한 기술 중에 하나인데요..


세마포어란 임계구역에 접근 하기 위한 열쇠 같은거라고 생각하면 됩니다..

예를 들어 화장실이 있다고 합시다.

이 화장실에 들어가기 위해서는 반드시 열쇠가 있어야 하고 이 열쇠는 단 하나 밖에 없으며

화장실에는 한명씩만 들어갈 수 있습니다.

이럴 때 여러명을 사람이 화장실을 이용하려면

일단 한명이 열쇠를 가지고 화장실을 이용하고 나오면

그 사람에게 열쇠를 받아 다음 사람이 이용하고

이렇게 한사람씩 돌아가면서 화장실을 쓸 수 있죠..

이때 화장실은 임계구역이 되고.. 열쇠는 세마포어가 되는겁니다..

그리고 누군가 열쇠를 가지고 도망가버린다면..

아무도 화장실을 사용하지 못하는.. 상태가 되버리죠.

이런게 바로 데드락입니다


상속의 단점

상속을 쓰게되면 가독성이 떨어집니다. 또한 관계가 느슨해질수 있는 것을 엄한 상속으로 조여지게 만들어 버릴수 있습니다. 

하나만 건드려도 연쇄작용으로 여기저기 문제가 터져나온다는거죠


리펙토링은 앞에서 말한 관계를 완화시켜주고 가독성 높여주고 확장성, 유연성을 높여주는 작업



겍체지향 장점

클래스에 하나의 문제 해결을 위한 데이터를 모아 놓은 데이터형을 사용함으로써 응집력을 강화시키고, 

클래스간에 독립적으로 디자인함으로써 결합력을 약하게 만들 수 있다


List,Set,Map의 차이점

List : 객체들이 들오온 순서대로 참조를 유지하기 위한 목적. 

수집의 순서가있으며, 동일한 데이터의 중복 입력이 가능.

순차적으로 대량의 데이터를 억세스하거나 입력할 때 유리한 방식.

 

Map : Key & Value의 형태로 입력이 되며, 키 값을 입력하면 해당하는 value

값을 획득. 수집의 순서를 기억하지 않으며, 동일한 데이터를 Key값으

로 사용할 수 없다. (물론 key값이 틀리고 value값이 동일한 건 가능.)

다수의 데이터에서 원하는 특정 데이터에 접근할 때 유리한 방식.

 

Set : 중복데이터를 불허하는 것을 제외하고는 큰 특징이 없습니다.

입력되는 당시의 순서에는 따르지 않으나... 

순차적인 접근을 위해서는Iterator로 접근하게 됩니다.

  

List 계열 : AbstractList, ArrayList, LinkedList, Vector

Map 계열 : AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap,

                RenderingHints, TreeMap, WeakHashMap

Set 계열 : AbstractSet, HashSet, LinkedHashSet, TreeSet


쓰레드 개념

http://alecture.blogspot.kr/2011/05/thread.html


멀티 프로세스는 그냥 IPC (Inter Process Communication) 를 통해서 통신합니다. 

간단한 느낌으로 네트워크 패킷을 주고 받듯이 시스템에서 제공하는 호출을 OS를 통해서 주고 받는 것이죠. 

대용량 데이터는 Shared Memory (Memory Mapped File) 같은 것을 이용해서 공유하기도 합니다. 


멀티쓰레드 대비 장점은 프로세스가 분리되어서 하나가 죽더라도 서비스에 영향이 적고 리소스 리턴이나 메모리 회복도 훨씬 간단하다는 거죠. 

단점은.. 윈도우에서는 상대적으로 많이 무겁다? 유닉스 계통은 프로세스가 훨씬 가벼워서 멀티 프로세스가 아직도 많이 쓰이고 있죠.



클래스 상속이라는것은 A라는 클래스안에 a,b,c라는 메서드가 있다고할때, B라는 클래스가 A클래스를 extends하게되면 A클래스 안에있는 a,b,c메서드를 B클래스에서 사용할수있는거고요..

A라는 인터페이스를 안에 a,b,c라는 메서드가 있을때 B라는 클래스에서 A클래스를 implements하게되면 B클래스에서 a,b,c메서드를 구현해줘야합니다.

[출처] [자바 초보]클래스 상속과 인터페이스의 차이점이 무엇인가요? (남궁성의 코드초보스터디(java, c언어)) |작성자 베르기



다르곳에 사시는 할머니께 꽃을 사서 보내는것을 절차적프로그래밍방법과 객체지향적프로그래밍방법두가지로 서술하시오


아마 절차지향적방법으로는 순서대로 나열하면 될것같내요.


1.샵으로 이동 2.꽃을 고름 3.꽃을 구매 4.우체국으로 이동 5.꽃을 할머니사는곳에 보냄. 



물품구매를 위한 Shop클래스를 생성후 buy(String 구매물품) 으로 메서드 정의. 

보내기위한 클래스 Send클래스 생성후 send(String 지역,String 수단) 메서드 정의. 

이렇게 해놓으면 객체지향적으로 꽃이아닌 다른물품을 다른지역에 살고있는 사람에게 보낸다하더라도 코드를 재사용



Call by value : 

우리말로하면 바로 "값에 의한 호출"이란 뜻으로, 어떤 함수를 호출할때에 전달인자로 그 데이터 값 자체를 전달하는 호출 방법이다.


void swap(int a, int b){

int tmp;

tmp = a;

a = b;

b = tmp;

}


void main(){

int a =5;

int b =3;


swap(a,b);

printf( a , b);


}

Call by reference : 

우리말로 "참조에 의한 호출"라는 뜻으로, 어떤 특정한 데이터 값이 아닌 그값에 대한 정보를 전달하는 호출방법이다.


swap(int *a,int *b){

int tmp;

tmp = a;

*a= *b;

*b = tmp;

}


void main(){


int a = 3;

int b = 5;

swap(&a,&b);

printf(a,b);


}


스프링 장점


저는 Spring을 쓰는 이유의 가장 큰 것은 DI(의존성주입), IoC(제어 역전), Test 때문이라고 생각합니다. 

보통 클래스 내부에서 new 로 객체의 인스턴스를 받아서 사용하는 방식은 모듈간의 강한결합을 불러옵니다. 

그래서 변경이나 확장 등에서 자유롭지 못하게 됩니다. 

하지만 생성자, setter 등으로 외부에서(스프링에 의해 객체의 생명주기가 관리됨:IoC) 생성된 객체의 인스턴스를 받아서 사용만(의존관계에 있는 객체가 외부로 부터 받음:DI)하는 구조로 개발을 해 놓으면 변경이 있을때 해당하는 부분의 클래스만 변경이 가능합니다. 

이런 구조를 가능하게 하는 것이 인터페이스를 사용했을때 가능한데요. 

Spring을 사용하면 그런 인터페이스를 먼저 만들고, 그에 대한 구현체를 만드는 페턴이 자연스레 됩니다. 

그렇게 되면 모듈 단위의 테스트를 하기에도 매우 쉽습니다. 

하지만 반대로 생각하면 특정기능을 너무 많은 인터페이스와 구현체로 쪼개는 결과를 불러와서 관리하기 어렵다는 말도 나올 수 있는데요. 

단점이 주는 어려움보다 장점이 주는 편리함이 더 크기때문에 Spring은 앞으로도 많은 인기를 얻을 것 같습니다


1. 보안도 이유가 되지만 JSP->JSP는 모델1 방식이고, DispatcherServlet을 거쳐서 JSP(단지 View 종류가 JSP인 경우)로 되는 것이 모델2 방식입니다. 

서블릿에 의해서 흐름의 제어가 가능하기 때문에 JSP 페이이지를 일일이 찾아다니면서 수정할 필요도 없어지고, 비즈니스로직에서 처리한 결과를 다양한 View Layer에서 표현이 가능합니다. 

특히 Spring에서 ContentNegotiatingViewResolver를 사용하면 하나의 Controller에서 JSON, XML, HTML 등등의 여러가지 View로 출력할 수 있습니다.


2. Controller에서 바로 DAO로 접근해서 업무를 처리할 수도 있습니다. 

하지만 그러면 Controller에 비즈니스 로직이 들어가므로 Layer를 나눠놓은 이유가 희석됩니다. 

Controller는 최소한의 로직(Form에서 받은 내용의 검증, 비즈니스 로직 호출, View로 전달)만 넣는 것이 좋습니다. 

또한 트렌젝션을 묶을 단위가 Controller가 되면 안되므로 중간에 비즈니스 로직이 있는 Layer를 두어야 합니다.


3. 보통 getter, setter만 있는 클래스를 DTO(Data Transfer Object) 또는 VO(Value Object)라고 하는데 이를 쓰지 말고 Map을 써서 하는 프로젝트도 많이 있습니다. 

서로의 장단점이 있는데 DTO의 장점이라고 하면 해당 업무에서 사용될 내용을 명확하게 알 수 있습니다. Map을 쓰면 key 이름을 알아야 내용을 알 수 있겠죠. 

반대로 Map을 쓰는 경우 확장성이 좋습니다. 

그렇지만 Spring이 버전이 올라가면서 DTO<->XML로 변환하는 마샬러 기능을 쓰거나, @Valid와 JSR-303을 이용하여 값을 검증하는 등의 업무를 수행하기 위해서는 DTO를 써야 합니다.

반응형