728x90
반응형

Apache Kafka란?

아파치 카프카는 2011년에 링크드인(LinkedIn)이라는 회사에서 자사의 웹사이트 이벤트 체크를 하기 위한 목적으로 만들어진 사내 프로젝트로 시작했다가 2014년에 아파치를 통해 오픈 소스화된 프로젝트로 현재 빅데이터 관련 프로젝트에 가장 널리 사용되고 있는 distributed messaging system입니다. 현재 링크드인을 비롯해서 야후, 트위터, 넷플릭스, 우버 등 실시간으로 대용량의 데이터를 처리해야 하는 어플리케이션을 운영하고 있는 회사에서 메세징 시스템 뿐만아니라 실시간 모니터링, 이벤트 프로세싱등 다양한 용도로 사용되고 있습니다. 그렇다면 아파치 카프카에 어떤 특별한 점이 있길래 이렇게 짧은 시간 안에 수많은 빅데이터 회사에게 널리 사용되게 되었는지 아래의 글에서 확인해보도록 하겠습니다. 

Why Use It? 왜 사용하나요?

  • High-throughput message capacity: 쉽게 이야기해서 단 시간 내에 엄청난 양의 데이터를 컨슈머 쪽으로 전달 가능합니다. 다른 경쟁 제품에 비해 많은 양의 데이터 전송이 가능한 이유는 크게 두 가지 있는데 우선 첫째, 기존의 메세지 시스템이 메세지 브로커 쪽에서 가지고 있던 모든 복잡한 과정 또는 연산들을 제거했고 둘째, 하나의 토픽에 대해 여러 개의 파티션으로 분할 할 수 있도록 해서 컨슈머 쪽에서 분산 처리할 수 있도록 하였습니다. 좀더 자세히 설명하자면 기존의 메세지 시스템들은 (RabbitMQ 같은) 각각의 토픽에 대해 컨슈머들의 인덱스 (데이터를 어디까지 전송받았는지를 알려주는) 정보를 메세지 브로커 쪽에서 관리하였는데 카프카는 이 부분을 컨슈머 쪽으로 책임을 옮겼으며 또한 메세지를 유지하는 방법도 메모리에 잠시 보관하였다가 컨슈머에 전송된 후 삭제하는 방법이 아니라 일반 파일에 Log 형식으로 (데이터가 날짜순으로 저장되고 Append만 가능한 형식) 관리하여 전송 후에 Delete 연산이 필요없는 방식을 사용하고 있습니다. 또한 토픽의 분할 기능을 제공하여 같은 토픽에 대해 여러 개의 컨슈머가 동시에 메세지를 전송 받는 등의 분산 처리를 지원하여 많은 양의 데이터 전송을 가능하게 하고 있습니다.
  • Scalability와 Fault tolerant: 카프카는 클러스터 모드를 지원하고 있으며 위에 언급했던 토픽 파티셔닝 (하나의 토픽을 여러 개의 파티션으로 나눌 수 있는 기능)과 파티션 복제 (Replication) 기능을 통해 확장성과 Fault tolerant (부분적으로 고장나더라도 중요한 기능들은 정상적으로 작동하는 특성)을 제공하고 있습니다.
  • 메세징 시스템 외에 다양한 용도로 사용 가능: 일반적인 메세징 시스템과 달리 카프카는 다양한 용도로 사용 가능하며 자세한 사용 용도에 대해서는 아래의 글을 참조하세요.


Use Cases (카프카의 사용 용도의 예)

  • Messaging System: 가장 일반적으로 많이 사용되고 있는 용도로 메세지 제공자 (Producer 또는 Source)와 수신자 (Consumer 또는 Sink) 사이에서 메세지를 전달해주는 역할을 합니다. 각각의 컨슈머 (또는 컨슈머 그룹)는 전달받기를 원하는 메세지의 토픽에 구독 신청해야 하며 하나의 토픽에 여러 컨슈머가 구독 신청 할 수 있습니다. (이 경우에 메세지는 구독신청한 모든 컨슈머한테 Broadcast 됩니다.)
  • Website Activity Checking 및 Monitoring: 링크드인에서 처음 만들고 사용했던 목적처럼 웹사이트가 정상적으로 돌아가는지 또는 웹사이트 사용 시 유저들의 패턴이 어떻게 되는지 모니터링 또는 웹사이트 이벤트 체킹의 목적으로도 사용 가능하며 (중간에서 메세지를 전달하는 중간자의 역할을 할 수도 있지만 메세지 자체가 디스크에 일정 기간 동안 로깅이 되어 있기 때문에 직접 분석도 가능합니다.)
  • Log Aggregation: 하나의 웹사이트가 여러 대의 서버로 운영되고 있다면 (대부분의 엔터프라이즈 웹사이트들이 그렇듯이) 각각의 서버에 있는 로그를 통합해주는 시스템 구축에도 사용 가능합니다.
  • Stream Processing & Batch Processing: 요즘 빅데이터 쪽에서 가장 핫한 Spark나 Storm같은 Stream Processing (스트림 처리)을 지원하는 플랫폼이나 Hadoop과 같이 Batch Processing (일괄 처리)을 지원하는 플랫폼과 연결햐여 메세지의 변환도 가능합니다.
  • Etc: 그 외에 연결된 DB나 서치 엔진의 일시적 서비스 장애 때문에 다운이 되었을 때 메세지들을 잠시 저장해줄 수 있는 임시 버퍼의 역할도 가능하며 Operational metrics (각각의 토픽에 대해 들어오는 메세지의 수를 정기적으로 체크하여 그 수가 너무 낮거나 높을 때 문제가 있는 확인차 운영팀에 메일등을 통해 알려주는 용도)나 Event sourcing (특정 이벤트들을 시간 순으로 기록하여 나중에 필요할 때 사용하는 용도) 등의 용도로도 사용되고 있습니다.


References

  • http://kafka.apache.org/intro.html
  • http://www.javaworld.com/article/3060078/big-data/big-data-messaging-with-kafka-part-1.html
  • https://www.quora.com/Can-I-use-apache-kafka-for-memory-cache
  • http://events.linuxfoundation.org/sites/events/files/slides/The%20Best%20of%20Apache%20Kafka%20Architecture.pdf
  • https://auriga.com/blog/hands-on-experience-building-architecture-of-highly-available-scale-out-systems-introduction/
  • http://blog.cloudera.com/blog/2014/09/apache-kafka-for-beginners/
  • https://sookocheff.com/post/kafka/kafka-in-a-nutshell/
  • https://www.elastic.co/blog/just-enough-kafka-for-the-elastic-stack-part1


728x90
반응형

'Web Programming' 카테고리의 다른 글

프레임워크와 라이브러리의 차이  (0) 2018.08.29
캐시와 쿠키의 차이  (0) 2018.08.29
WebSocket이란?  (0) 2018.08.29
SonarQube란?  (0) 2018.08.29
Jenkins 서버란?  (0) 2018.08.29
728x90
반응형

1) 자바의 특징에 대해 말해보시오.

1) OOP(객체 지향 언어) 

: 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립해 전체 프로그램을 완성하는 개발 기법

2) "가비지 컬렉션"에 의한 메모리 자동 관리

3) "멀티 쓰레드"를 지원한다.

4) JVM 위에서 동작하기 때문에 특정 OS에 종속적이지 않고 이식성이 좋으며, 보안성이 좋다.

5) 다양한 Open 라이브러리들이 존재한다.



2) 자바를 만든 사람에 대해 아시나요?

: "제임스 고슬링"



3) 변수란?

: "하나의 값을 저장할 수 있는 메모리 공간"



4) 객체와 클래스의 차이점에 대해 설명해 보시오.

- 클래스(Class) : 현실 세계의 객체의 속성과 동작을 추려내 필드와 메서드로 정의한 것으로 "아직 메모리가 할당되지 않은 상태"

vs

- 객체(Object) : 이 Class라는 설계도를 기반으로 실제 메모리가 잡힌 것을 의미하며 이런 객체를 조합해 전체 프로그램을 완성해

   나가는 방식을 OOP(객체지향 프로그래밍)이라고 한다.



5) 객체 지향 PG이란? 또 그 특징은?

: 현실세계의 객체를 필드와 메서드로 정의한 Class를 기반으로 실제 메모리가 잡혀 만들어진 부품과 같은 객체들을 조합해

  전체 프로그램을 완성해 나가는 개발 기법으로

특징)

- 캡슐화, 은닉화 : 외부 객체에서 구현방식은 알 수 없도록 숨기고 별도로 접근할 수 있는 getter/setter 메서드를 통해 접근하도록 하는 방식

- 상속 : 부모 Class를 자식이 접근할 수 있도록 물려 받는 방식

- 다형성 : 부모 클래스 타입으로 해당 부모를 상속받는 여러 자식 class를 대입할 수 있는 성질

등을 들 수 있다.



6) 다형성이란?

: 서로 다른 클래스로부터 만들어진 객체지만 같은 부모의 Class 타입으로 이들을 관리할 수 있는(=대입될 수 있는) 성질



7) 자바의 메모리 영역(간단하게 설명)

1. 메서드 영역 : static 변수, 전역변수, 코드에서 사용되는 Class 정보 등이 올라간다.

    , 코드에서 사용되는 class들을 로더로 읽어 클래스별로 런타임 필드데이터, 메서드 데이터 등을 분류해 저장한다.

2. 스택(Stack) : 지역변수, 함수(메서드) 등이 할당되는 LIFO(Last In First Out) 방식의 메모리

3. 힙(Heap) : new 연산자를 통한 동작할당된 객체들이 저장되며, 가비지 컬렉션에 의해 메모리가 관리되어 진다.



8) 추상메서드? 추상 클래스?

- 추상메서드 : 메서드의 정의부만 있고 구현부는 있지 않은 메서드

- 추상 클래스 : 추상메서드를 적어도 하나 이상 가지고 있는 클래스로 자식클래스에서 오버라이딩(재정의)가 필요한 추상메서드를 가지고 있기

        때문에 객체화 할 수 없다.



9) 인터페이스(Interface)란? 또 왜 사용하나?

: 인터페이스는 모든 메서드가 구현부가 없는 추상메서드로 이루어진 클래스로, abstract 키워드를 붙이지 않아도 자동으로 모든 메서드는 추상메서드로

  정의가 된다. 또한 변수도 자동으로 final static 키워드가 붙게 된다.


왜 인터페이스를 사용하는가? 

: 팀작업시 개발코드 부분과 객체가 서로 통신하는 접점 역할을 지원하게 되는데, 이는 개발코드에선 객체의 내부 구조를 모르더라도 인터페이스의

  메서드 명만 알고 있으면 되기 때문이다. 이를 통해 얻을 수 있는 장점은 해당 메서드를 통해 나오는 결과물을 알고 있기 때문에 다른 팀의

  작업을 기다리고 있지 않아도 되며, 또한 해당 객체가 수정될 경우 개발 코드 부분은 수정을 하지 않아도 된다.

  또한, 부가적으로 객체를 파일에 쓰기 위해 Serializable 인터페이스를 구현하거나, Collections.sort()를 하기 위해서 Comparable 인터페이스를 

  상속하는 것, Cloneable 을 구현하는 것처럼 특정 작업을 하겠다라는 "Mark"역할을 해주기도 한다.



10) 프로세스(Process) 와 쓰레드(Thread)의 차이점에 대해 아는가?

- 프로세스 : OS가 메모리 등의 자원을 할당해준 실행중인 프로그램을 가리킨다. 이때, 각각의 프로세스는 서로 메모리 공간을 독자적으로 갖기 때문에

    서로 메모리 공간을 공유하지 못한다. 따라서 공유하기 위해서는 IPC(InterProcess Communication)과 같은 방식이 필요하다.

- 쓰레드 : 쓰레드는 프로세스 내에서 프로세스의 자원을 가지고 실제로 일하는 "일꾼"과 같으며 각 쓰레드는 독자적인 Stack 메모리를 갖고 그 외의

  자원(메모리)는 프로세스 내에서 공유하게 된다.



11) 컬렉션프레임워크(CollectionFramework)에 대해 아는만큼 말해 보시오.


- Collection 인터페이스 

- List 인터페이스 : 배열과 유사하되, 추가할때마다 자동으로 Boundary를 늘려주는 구조로, 중복된 데이터를 허용하며, 순서가 존재한다.

ex) - ArrayList : 배열로 구현됬으며, 인접해 있기 때문에 데이터 조회에 매우 빠르다 하지만, 빈번한 삽입, 삭제시 새로 배열을 만들고 데이터를

옮겨야 하기 때문에 LinkedList에 비하여 속도가 느리다.

    - LinkedList : 링크 구조로 되어 있기 때문에 조회는 ArrayList에 비해 느리지만, 삽입 삭제시 링크를 끊고 새로 추가되는 데이터에 링크만

연결하면 되기 때문에 삽입, 삭제에 유리하다.

    - Vector : 구현 방식은 ArrayList와 유사하지만 Vector를 개선한 것이 ArrayList이다. 또한 Vector의 경우에는 ArrayList와 달리

Synchronized(동기화)가 걸려 있어 여러 쓰레드에서 동시에 접근할 수 없다.

- Set 인터페이스 : 집합처럼 중복된 데이터를 허용하지 않으며, 순서가 없다. 또한, 객체 내부의 중복된 데이터를 배제하고 싶은 경우

  Object 클래스의 equals 메서드와 hashCode 메서드의 재정의가 반드시 필요하다.

ex) - HashSet

    - TreeSet : 순서가 있는 HashSet으로 이진 트리 구조로 만들어 졌다. 순서에 맞게 정렬되어 저장되기 위해서 Comparable을 구현해야한다.

    


- Map 인터페이스 : key와 value 쌍으로 데이터를 저장하며, key는 중복될 수 없고, value는 중복 저장이 가능하다.

ex) - HashMap

     - TreeMap

     - Properties : key value 쌍으로 저장되지만 value의 타입이 String만 가능하다.

     - Hashtable : HashMap과 구조는 같으며, 단지 Synchronized(동기화) 되어져 있다는 점이 다른점이다.


12) 캐시(Cache)와 세션(Session)의 공통점과 차이점은?

- 공통점 : 둘 다 사용자의 데이터를 저장한다.

- 차이점

- 캐시 : 캐시는 Client 컴퓨터에 저장했다 서버 요청시 네트워크를 타고 서버로 전달되기 때문에 보안에 취약하다.

- 세션 : 세션은 서버에 저장되고 브라우저 단위로 관리된다. 캐시에 비해 보안성이 좋다.


13) Request 전송 방식에는 어떤 것들이 있는지 아시나요?

- Get 방식 : URL의 쿼리문자열에 데이터를 같이 전달하는 방식으로 데이터 길이에 제한이 있고, 보안에 취약하다.

- POST 방식 : 헤더에 데이터를 넣어 보내기 때문에 보안에 조금 더 유리하고 데이터 길이에 제한이 없다. 하지만, Get에 비해 다소 느리다.

- DELETE 방식 : RESTFUL에서 삭제 기능을 할 때 주로 사용된다.

- PUT/PUSH 방식 : RESTFUL에서 수정 작업을 할 때 주로 사용된다.



14) RESTFUL이란?

: 해당 URL만 보더라도 바로 어떤 작업을 하는지를 알 수 있도록 하나의 데이터는 하나의 URL을 갖도록 작업하는 방식



15) Spring에서 DI란 무엇인지 아시나요?

: DI는 Dependency Injection(의존성 주입)의 약자로, 객체들 간의 의존성을 줄이기 위해 사용되는 Spring의 IOC 컨테이너의 구체적인 구현 방식입니다.

  DI는 기존처럼 개발코드 부분에서 객체를 생성하는 것이 아니라, 팩토리 패턴처럼 객체의 생성과, 데이터를 주입만 담당하는 Factory에 해당 하는 

 별도의 공간에서 객체를 생성하고 데이터간의 의존성을 주입해 개발코드에서는 이를 가져다 씀으로서 의존성을 줄이는 방식입니다. 이때, 

 Factory 패턴의 Factory Class의 역할을 스프링의 환경설정 파일이 담당합니다.



16) Spring의 AOP란?

: AOP는 Aspect Oriented Programming 관점 지향 프로그래밍의 약자로, 기존의 OOP(객체 지향 프로그래밍)에서 기능별로 class를 분리했음에도 불구하

 고, 여전히 로그, 트랜잭션, 자원해제, 성능테스트 메서드 처럼 공통적으로 반복되는 중복코드가 여전히 발생하는 단점을 해결하고자 나온 방식으로

 이러한 공통 코드를 "횡단 관심사"라 표현하며 개발코드에서는 비지니스 로직에 집중하고 실행시에 비지니스 로직 앞, 뒤 등 원하는 지점에

 해당 공통 관심사를 수행할 수 있게 함으로서 중복 코드를 줄일 수 있는 방식입니다.



17) Filter와 Interceptor 방식의 차이?



18) 디자인 패턴 아는 것?

1) 싱글톤(SingleTone Pattern) : 대표적으로 Calendar 객체나 dataSource 객체처럼 객체가 하나만 생성되어야 하는 경우

 전체 코드에서 하나의 객체만 존재할 수 있도록 이미 생성된 객체가 있으면 그 객체를 사용하도록 하는 방식입니다.

2) 팩토리 패턴(Factory pattern) : 객체간 의존성을 줄이기 위해 객체의 생성과 데이터 주입만 담당하는 Factory Class를 정의하고 개발 코드 부분에서는

   생성된 객체를 가져다 사용함으로서 의존성을 줄이는 방식입니다.

3) 옵저버 패턴(Observer Pattern) : 기후 정보처럼 RSS 수신시 하나의 객체가 변하면 다른 객체에 객체가 변했다는 사항을 알려주어야 할 경우에 주로

    사용됩니다.



19) MVC 패턴이란?

- Model : data 처리와 접근을 담당

- View : Client에 보여지는 화면을 담당

- Controller : Model과 View를 제어

하는 3가지 부분으로 나눔으로서, 데이터와 화면간의 의존관계를 벗어날 수 있게하는 개발 기법입니다.



20) 프로젝트 개발 순서??

대강...

1) 요구사항 분석 

기획 및 스토리 보드 작성

2) WBS(Work Breakdown Structure) 작성 : 작업 분해도로 프로젝트 범위와 최종산출물을 세부요소로 분할한 계층적 구조도

3) 논리 ERD 작성

4) 물리 ERD 작성

5) 개발

6) Testing

7) 유지보수



21) 오버로딩과 오버라이딩의 차이?

- 오버로딩 : 메서드 명은 동일하지만, 매개 변수 타입과 개수를 다르게 해 선언하는 방식

- 오버라이딩 : 상속한 자식에서 부모의 메서드를 재정의하는 방식


22) Servlet vs JSP

- Servlet : 자바 언어로 웹 개발을 위해 만들어진 것으로, Container가 이해할 수 있게 구성된 순수 자바코드로만 이루어진 것

- JSP : html 기반에 JAVA 코드를 블록화하여 삽입한 것으로 Servlet을 좀 더 쉽게 접근할 수 있도록 만들어 진 것


23) Wrapper Class의 사용이유를 아나요?

: 기본 data 타입은 객체가 아니어서 Object로 받는 다형성을 지원할 수가 없다. 하지만, 메서드에서 실재로 기본데이터 타입을 다형성으로

 넘겨주어야 하는 경우가 빈번히 발생하는데 이때, 기본 데이터 타입을 객체로 변환시켜 전달하기 위해 사용되며

 최근에는 AUTO Boxing, AUTO UnBoxing이 지원된다.



24) DataBase에서 Index란?

: Table에 대한 동작 속도를 높여주는 자료구조로서 빠른 검색을 가능하게 해준다.



25) private, protected, public, default 제어자에 대해 설명해 보시오

- private : 같은 class 내부에서"만" 접근이 가능하다.

- public : 어디서든 자유롭게 접근이 가능하다.

- protected : 같은 class 내부 + 상속받은 자식에서는 부모 class에 접근이 가능하다.

- default : 아무 것도 선언하지 않은 경우로 같은 패키지 내부에서만 접근이 가능하다.



26) SI가 무엇을 하는 건지 알고 오셨나요?

: System Integration의 약자로 시스템 통합 사업으로 고객의 기존 전산시스템을 통합하거나 새로운 시스템을 구축하는 작업입니다.



27) SW 개발시 가장 비중을 크게 두어야 할 부분은 어디라고 생각하나요?

: Testing 부분입니다. 



28) 자바의 제네릭이란??

: 클래스 내부에서 사용할 데이터 타입을 인스턴스(객체) 생성시에 결정짓는 방식


-----------------------------------------------------------------------------------------------------------------------------------------

-> 여기까지는 제가 예상하는 면접 질문을 올리고 이 아래부터는 실제로 제가 기술면접 당시 받았던 질문들입니다.



[ 기술 면접 질문 ]

 

 

1. CVS나 SVN에 대해서 아는대로 설명해 보시오.

 

2. 64bit CPU와 32bit CPU의 OS적 관점에서의 차이를 설명해 보시오.

 

3. 프로세스와 쓰레드의 차이점에 대해서 설명해 보시오.( 메모리 구조 포함 )

 

4. ‘데드락’ 이란 무엇이고 이를 해결하기 위한 방법을 설명해 보시오.

 

5. 변수 명명법이 중요한 이유에 대해서 설명하고 예를 들어 보시오.

 

6. 자바의 JVM의 역할에 대해서 설명해 보시오.

 

7. 자바의 특징에 대해서 말해 보시오.

 

8. Linux에서 톰캣 환경설정을 잡는 것에 대해 설명해 보시오.

 

9. WAS와 웹서버의 차이점은?

 

10. Jquery와 Ajax에 대해 아는가?

 

11. 비동기와 동기 방식의 차이점에 대해서 말해보시오.(네트워크 동기,비동기 아님)

 

12. 개발시에 중요하다 생각하는 요소를 3가지 기술해 보시오.

 

13. 스프링의 MVC에 대해서 설명하시오.

 

14. AOP란 무엇이고 왜 사용하는지

 

15. ‘에자일’ 방법론에 대해서 아는가?

 

16. 스프링 환경설정 혼자 잡을 수 있는가대강 어떻게 해야하는지 설명해 보시오.

 

17. 웹서버 내부 구동 방식에 대해 설명할 수 있는가?

 

18. 스프링 DI?

 

19. UML 그려본 적 있는가?

 

20. Node js나 Angular JS를 사용해 본 적이 있는가?

 

21. 캐시와 세션의 공통점과 차이점에 대해 말해보시오.

 

22. 디자인 패턴 아는 것들만 간략히 설명해 보시오.

 

23. DataBase에서 index관련 질문이었는대 잘 모르겠어서..기억이..

 

24. 크롬이나 파이어폭스에서 개발도구를 사용해 디버깅을 해보았는가?

 

25. JDBC는 무엇인가?

 

26. 스프링을 사용하지 않고 MVC를 JSP에서 만들어 보았는가?

 

27. DB 옵티마이저에 대해 아는가?



출처: http://rongscodinghistory.tistory.com/44 [악덕고용주의 개발 일기]

728x90
반응형

'Web Programming > java-jsp' 카테고리의 다른 글

For input string: ""  (0) 2018.09.04
Jsoup parser 크롤링  (0) 2018.08.30
java 기술 면접 질문 리스트  (1) 2018.08.29
신입 자바 개발자 면접 질문  (0) 2018.08.29
Codility 자바 코딩실력 검증  (0) 2018.08.29
728x90
반응형
  1. 자바의 데이터 타입인 기본형에 대해서 말하시오.
    정수형 - byte, short, int, long
    실수형 - double, float
    bool형 - boolean

    각 데이터 형간에는 형변환이 가능하며, 큰 값에서 작은 값으로 캐스팅 시에는 값 손실이 있으므로, 반드시 (데이터형)을 표기하고 형변환 하여야 함

  2. 자바의 데이터 타입인 reference Type에 대해서 설명하시오.
    기본형을 제외한 나머지 모두가 reference Type.
    데이터 타입과는 달리, 참조값을 통해 해당 객체에 직접적으로 접근할 수 있음.

  3. 접근 제어자의 종류와 특성에 대해 설명하시오.
    Public (어디서든 접근이 가능) 
    Default (같은 패키지 내 혹은 상속 받은 클래스 내에서 접근 가능)
    Protected (같은 패키지 내에서만 접근 가능)
    Private (같은 클래스 내에서만 접근 가능)

  4. 프로세스와 스레드란?
    • 프로세스 -  실행되고 있는 프로그램의 개체. CPU 시간이나 메모리 등 시스템 장원이 할당되는 독립적인 개체. 다른 프로세스와 상관 없이 독립적으로 자원을 할당 받음.프로세스 간의 통신을 위해선 파이프, 파일, 소켓 등을 사용하여 통신하여야 함
    • 쓰레드 - 프로세스 안에 존재하여, 프로세스의 자원을 공유하는 개체
      흔히 경량 프로세스라고 부름 
      각 쓰레드는 별도의 레지스터와 스택을 갖고, 힙 영역은 공유함

  5. 뮤텍스와 세마포어
    • 프로세스 혹은 쓰레드 간의 통신 시에 shared memory 등을 쓰는 경우 하나의 자원에 두 개 이상의 프로세스 혹은 쓰레드가 접근하는 경우에 문제가 발생.
      이를 제어하기 위해 쓰레드에서는 뮤텍스를 사용하며, 프로세스에서는 세마포어를 사용 함
    • 뮤텍스
      • 상호배제라고도 하며, Critical Section을 가진 스레드의 Running time이 서로 겹치지 않도록 각각 단독으로 실행하게 하는 기술 
        synchronized 또는 lock을 통해 해결
    • 세마포어
      • 리소스 상태를 나타내는 간단한 카운터
        공유 리소스에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근하여 사용할 수 있음. 

  6. 쓰레드를 구현하기 위한 방법?
    • Runnable 인터페이스 구현 
      • run 함수를 반드시 구현해야 함.
      • Thread 생성자의 매개변수로 입력
    • Thread 클래스를 상속
      • Thread 클래스를 상속 받아서 구현.
      • 자바는 다중 상속이 안되므로 이외의 클래스를 상속 받을 수 없음

  7. synchronized에 대해 설명 하시오.
    • 쓰레드가 하나의 자원을 공유함에 따라 데이터 일관성의 문제가 생기는데, synchronized 처리를 해줌으로써, 하나의 쓰레드만 접근할 수 있도록 함

  8. Static 키워드
    • 인스턴스 변수 혹은 인스턴스 메소드를 클래스 변수 혹은 클래스 메소드로 변경시킴
      모든 인스턴스 간에 공유하는 변수 혹은 메소드가 됨

  9. 클래스와 인스턴스의 차이
    • 클래스는 빵을 찍어 내는 틀과 같고, 인스턴스는 빵
      클래스에서 정해진 기능과 모양에 맞추어 인스턴스가 생성됨

  10. 객체지향과 절차지향의 차이점
    • 절차지향 - 순차적인 처리가 중요시 됩니다. 프로그램 전체가 유기적으로 연결되어 있어 하나의 코드 변경이 전체에 영향을 미칠 수 있음. 코드 사이즈를 최소화하고, 가장 빠르게 동작하는게 우선이면 절차지향 프로그래밍 언어를 사용
    • 객체 지향
      개발하려는 기능을 묶어 모듈화, 모듈을 재활용하기 때문에 같은 기능을 반복적으로 연산하지 않고 재사용률이 높음. 업그레이드가 쉬위며, 디버깅이 쉬움
      절차 지향에 비해 상대적으로 느림

  11. 자바와 C의 차이점
    • 자바는 One Source, Multi use 소스 하나를 가지고, 자바를 설치할 수 있는 플랫폼이라면 어떤 플랫폼에서도 소스 변경없이 사용 가능
      메모리 관리를 JVM 내 GC를 통해 이루어지므로 시스템 안정성이 높음
      자동으로 해주는 만큼 성능이 떨어지는 단점이 있음

  12. JAVA에서의 OOP
    • 캡슐화 - 객체 외부에서 개채 내부 정보를 직접 접근하거나 조작할 수 없고, 외부에서 접근할 수 있도록 정의된 메소드를 통해서만 관련 데이터에 접근할 수 있음
      내부 정보가 은폐되어 변경이 발생할 때 오류 발생이 적으며, 재사용이 용이함
    • 상속 - 이미 작성된 클래스를 이어 받아, 새로운 클래스를 생성하는 기법
      코드의 재활용성이 커짐
    • 다형성 - 하나의 객체가 여러 개의 자료형 타입을 가질 수 있는 특성
      ex) Tiger tiger = new Tiger();
            Animal animal = new Tiger();
           Predator predator = new Tiger();
      Tiger 클래스, Animal 클래스에 선언된 함수에만 접근이 가능함
      다형성이 없다면 각 클래스 객체 별로 연산을 해주어야 하나, 다형성으로 인해 하나로 묶을 수 있으므로 편리해짐

  13. 추상클래스와 인터페이스에 대해 설명하시오.
    • 인터페이스 - 클래스가 아닌, 다른 구조체 사용(interface).
      다중 상속이 가능하며, 구현을 명시한 클래스에서는 반드시 구현해야 함
      껍데기만 표현되어 있음
    • 한 개 이상의 추상 메소드를 가진 클래스. 다중 상속이 불가능 
      클래스 앞에 abstract가 붙으며, 실제 메소드 추가도 가능
      상속 받은 클래스에서 구현을 강제하지 않음

  14. 인스턴스 변수, 전역 변수, 로컬 변수
    • 전역/클래스 변수
      • 모든 인스턴스가 공통된 영역을 공유함
      • 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 경우에 클래스 변수로 선언
    • 인스턴스 변수
      • 클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어짐
      • 인스턴스는 독립적인 저장공간을 가지므로 인스턴스 별로 서로 다른 값을 가질 수 있음
    • 지역 변수
      • 메서드 내에 선언되며, 메서드 내에서만 사용가능
      • 메서드가 종료되면 소멸되는 변수
    • 변수 초기화 순서
      • 클래스 변수 -> 인스턴스 변수 -> 지역 변수
    • 변수 저장 영역
      • Method Area - 클래스에 대한 데이터와 클래스 변수 저장
      • Heap - 인스턴스가 생성되는 공간, 인스턴스의 정보들을 저장
      • 호출 스택 - 메서드의 작업에 필요한 메모리 공간을 제공, 메소드가 종료되면 할당되었던 메모리 공간이 반환됨

  15. 오버로딩과 오버라이딩의 차이
    • 오버로딩 - 똑같은 함수에 매개변수를 변경하여 선언하는 법
    • 오버라이딩 - 부모 클래스로 부터 상속 받은 메소드의 내부 구현 로직을 변경하는 방법

  16. 자바 제너릭이란?
    • 프로그래머가 의도하지 않은 객체가 저장될 수 없더록 타입을 지정하는 것

  17. 인터프리터와 컴파일러



  18. 리팩토링이란?
    • 중복된 메서드를 하나로 합치고, 이동하는 것을 말함

  19. instanceOf 명령어
    • 특정 객체가 특정 클래스의 객체 인지 확인할 때 사용하는 내부 명령어


OS(운영체제)
  1. 교착상태(데드락)
    데드락은 두 개 이상의 프로세스나 쓰레드가 서로 자원을 기다리면서 무한히 기다리게 되는 상태를 말합니다. 
    • 데드락을 피하는 방법
      • 상호 배제: 하나의 자원을 특정 시기에 하나의 프로세스/쓰레드만 소유할 수 있는 형태 
      • 자원 점유: 하나의 자원을 소유하고 다른 프로세스 혹은 쓰레드의 자원을 요청하는 상태
      • 선취 불가능: 하나의 프로세스/쓰레드에게 주어진 자원은 해당 프로세스/쓰레드가 스스로 놓기 전에는 놓게 만들 수 없는 상태
      • 순환 대기: 두 개의 프로세스/쓰레드의 경우, A->B, B->C, C->A에게 서로 자원을 요청하고 기다리는 상황으로 서로 꼬리를 물고 기다리는 상황
      • 4가지 중 하나라도 불충족하면 데드락이 발생하지 않음. 
        연간된 자원을 순차적으로 realese하는 방안과 전체를 제거하는 방안이 있음

  2. 멀티 프로세싱과 멀티 프로그래밍
    1. 멀티 프로세싱
      1. 여러 개의 CPU가 여러 개의 프로세스를 동시에 처리하는 방법
    2. 멀티 프로그래밍
      1. 한개의 CPU가 여러 개의 프로세스를 동시에 처리하는 방법



출처: http://manducku.tistory.com/44 [Manducku`s Code]

728x90
반응형
728x90
반응형

java

– 자바란 무엇인가요

자바란 객체지향 프로그래밍 언어로써 가장 중요한 특징은 운영체제에 독립적이란 것입니다. 자바로 작성된 프로그램은 운영체제의 종류에 관계없이 실행이 가능합니다. 그 이유는 자바를 실행하기 위한 가상 머신인 JVM이 있기 때문입니다. 다른 애플리케이션은 프로그램 실행 시 바로 OS로 가는 반면 자바 애플리케이션은 각 운영체제에 맞는 JVM을 거쳐 OS로 진행되기 때문에 프로그램 수정 없이 실행 가능합니다.

– 스프링이 뭔가요

자바언어를 기반으로 다양한 애플리케이션을 개발하기 위한 경량급 프레임워크입니다. 경량급이란 말은 스프링자체가 아주 가볍거나 작은 규모의 코드로 이뤄졌다는 것이 아니라 불필요하게 무겁지 않다라는 의미입니다. 그리고 개발 중에 테스트가 쉽다는 특징이 있습니다.

– 프레임워크란 무엇인가요

소프트웨어 제작을 편리하게 할 수 있도록 미리 뼈대를 이루는 클래스와 인터페이스를 제작하여 이것을 모아둔 것입니다. 프레임워크를 사용하게 되면 개발 생산성이 증가하며 품질이 향상되고 유지보수가 편리하다는 장점이 있습니다. 반면 익숙해지는데 시간이 오래 걸리며 유연성이 부족하게 됩니다.

– JDK란 무엇인가요

자바 프로그램 개발도구로써 개발을 위한 클래스, 컴파일러, 실행 및 배포도구를 포함하여 개발을 위한 전반적인 환경을 제공하는 것입니다.

– OOP란? 객체 지향 언어란?

객체 지향 프로그래밍를 의미합니다. 가장 중요한 특징은 캡슐화, 상속, 다형성입니다. 객체 지향 프로그래밍을 하게 되면 클래스라는 개념을 도입함으로써 코드의 재사용을 할 수 있습니다.

– MVC패턴이란 무엇인가요

애플리케이션은 크게 model, view, controller 세 영역으로 구분하여 영역 간의 결합도를 최소화한 논리적인 패턴입니다. 가장 큰 특징이며 장점은 비즈니스로직과 프리젠테이션로직이 분리 된다는 것입니다. 그로 인해 디자이너와 개발자의 영역이 분리 됨 으로써 작업의 분업화를 할 수 있습니다. 또한 유지보수에도 용이합니다.

– DAO란 무엇입니까

데이터 접근을 목적으로 하는 객체입니다.

– 오버라이딩이란 무엇인가요

부모 클래스에게 상속 받은 것들을 다시 자신의 클래스에서 새로이 재정의 하는 것을 말합니다. 재정의 한 것은 자신의 클래스 내부에서만 영향을 끼치며 부모클래스에서는 영향을 끼치지 않습니다. 할머니클래스, 부모클래스, 자식클래스의 구조라면 자식클래스는 할머니,부모 클래스의 것들을 모두 상속 받을 수 있으며, 할머니와 부모클래스의 같은 변수가 있다면 부모클래스를 물려 받게 됩니다.

– 오버로딩이란 무엇인가요

상속이 아닌 하나의 클래스 내에서 이름이 같은 여러개의 메서드를 정의하는 것입니다. 이름이 같기 때문에 호출 시에 구분 방법은 매개변수입니다. 매개변수의 수, 배치(순서), 타입 이 달라야 합니다.

– 상속이란 무엇인가요

기존 클래스의 기능을 유지하면서 추가적인 기능을 추가하여 클래스를 만들고 싶을 때 사용하는 방법은 상속입니다. 새로운 클래스를 생성할 때 상위 클래스를 지정함으로써, 상위 클래스의 모든 기능, 속성을 제공받고 자신의 클래스에는 부가적인 기능, 속성을 추가 할 수 있습니다. 상속은 코드를 간결화하며, 재사용성을 높일 수 있습니다.

– 자바의 데이터 타입에 대해 설명하시오 (Primitive type , Reference type)

기본형은 실제 값을 저장하는 공간을 말하며 종류는 8가지가 있습니다. 이외의 모든 타입을 참조형 이라고 하며 실제 값이 저장된 곳의 주소를 저장하는 공간을 의미합니다.

– 다형성이란 무엇인가요

하나의 클래스나 함수가 다양한 방식으로 동작이 가능한 것을 말합니다. 하나의 메시지가 전달되었을 때 수신자가 누구냐에 따라 각각 다른 기능을 수행합니다. 자바에서 오버로딩, 오버라이딩 등이 있습니다. 쉽게 예를 들면 저는 하나이지만 학교에 있으면 학생이고 집에서는 아들이라는 구성원입니다. 이렇게 생각하면 쉽다고 생각합니다.

– 쓰레드란 무엇인가요

자바 프로그램을 구성하는 명령문은 순서대로 하나씩 처리되는 것이 기본입니다. 이러한 실행흐름을 쓰레드라고 합니다. 둘 이상의 흐름을 갖도록 만들고 싶다면 멀티 쓰레드 프로그램을 사용하면 됩니다.

– 멀티쓰레드란? 장점은 무엇인가요

하나의 프로그램에서 둘 이상의 작업이 필요로 할 때 사용합니다. 자원을 효율적으로 사용가능하며 작업이 분리되어 코드가 간결해 집니다.

– 쓰레드 생성방법이 무엇인가요

첫 번째로는 쓰레드 클래스를 상속받거나 인터페이스를 구현 받는 방법이 있습니다. 두 번째로는 구현한 클래스 내부에서 인스턴스 생성 즉시 쓰레드를 생성시키는 방법이 있습니다.

– 추상클래스란 무엇인가요

하나이상의 추상메서드를 포함한 클래스입니다. 추상클래스는 객체를 생성 할 수 없으며 멤버변수, 일반 메서드, 상수 등도 가질 수 있습니다.

– 인터페이스란 무엇인가요

클래스가 상속을 통해 구현하기에 한계가 있는 경우, 자바에서 불가능한 다중상속을 흉내내기 위한 도구로써 사용됩니다. 추상클래스보다 추상정도가 높으며 추상메서드와 상수만을 가질 수 있습니다. Implements를 통해 구현합니다.

– AOP란 무엇인가요

Aspect Oriented Programing의 약자로 다양한 곳에서 자주 사용되는 공통관심 요소를 단일 기능으로 뽑아내서 코드의 중복을 줄이고 관리의 효율성을 높이기 위해 사용합니다.

– Spring DI란 무엇인가요

Dependency Injection의 약자로 의존성을 주입하는 것을 말합니다. 설정 파일을 통해 객체간의 의존관계를 설정함으로서 객체는 의존하고 있는 객체를 생성하거나 검색 할 필요 없습니다. 그로 인해 코드관리가 편리해집니다.

– 디자인패턴이란 무엇인가요

설계시 반복적으로 나타나지는 설계 방법 또는 구조들을 말합니다. 디자인패턴을 이용하게 되면 코딩이 명확하고 단순하며 모듈을 세분화 시킬 수 있고, 재사용성이 높으며 유지보수가 쉬워집니다. 디자인패턴은 대표적으로 GoF 23가지 패턴이 있습니다. 패턴들의 대부분의 공통점은 추상클래스나 인터페이스로부터 상속받은 클래스를 사용하며, 이는 객체지향의 다형성을 이용한 방법입니다.

– 메모리 상수풀 영역 이란

힙영역(프로그래머가 관리하는 메모리 영역)에 생성되어 자바 프로세스 종료까지 계속 유지되는 메모리영역입니다. 기본적으로 JVM에서 관리하며 프로그래머가 작성한 상수에 대해 최우선적으로 찾아보고 없으면 상수풀에 추가한 이후 그 주소값을 리턴합니다. 그로 인해 메모리 절약 효가가 있습니다.

– main메서드는 왜 static인가요?

static은 메모리 선언을 사용하지 않아도 사용할 수 있습니다. main메서드는 자바가상머신(JVM)에 의해 호출되는 것이므로 반드시 static으로 선언되어 미리 올라가 있어야 합니다. 만일 메모리에 있지 않다면 시작점인 main메서드를 호출하려고 할 때 메모리에 없기 때문에 실행되지 않습니다.

– 캡슐화란 무엇인가요

관련된 데이터와 메서드를 하나의 단위로 묶는 원리입니다. 그로 인해 캡슐내부와 외부를 구별하게 됩니다. 캡슐화를 하게 되면 클래스의 필드 값에 권한을 설정할 수 있습니다. 또한 사용자는 데이터가 클래스에 어떻게 저장되는지 알 수 없습니다. 그리고 클래스의 결합도가 낮아져 재사용이 용이하게 됩니다.

– 직렬화란 무엇인가요

메모리에 있는 객체를 보조기억장치에 저장할 수 있도록 바이트 형태로 변환하는 것을 말합니다. 객체가 생성되어 데이터가 적재되는 메모리는 순간적이기 때문에 영구적으로 보관하기 위해 직렬화를 사용합니다.

– 제너릭이란 무엇인가요

클래스를 선언할 때 타입을 결정하지 않고 객체를 생성할 때 유동적인 타입으로 재사용하기 위한 것을 말합니다.

– 리플렉션이란 무엇인가요

리플렉션은 컴파일러를 무시하고 런타임 상황에서 메모리에 올라간 클래스나 메서드등의 정의를 동적으로 찾아서 조작할 수 있는 일련의 행위를 말합니다. 즉 동적인 언어의 특징이라 말 할 수 있습니다. 프레임워크에서 유연성이 있는 동작을 위해 자주 사용하기도 합니다.

 

 

DB

– ORM이란 무엇인가요

ORM이란 객체와 관계형 데이터베이스을 중간에서 매핑하는 것입니다. SQL만 잘 작성하더라도 충분히 개발 할 수 있지만 SQL를 직접 작성하는 번거로운 작업을 줄여주고, 직접 계산하고 연산하는 부분을 지양해야 하기 때문에 이용됩니다.

– 정규화란 무엇인가요

정규화란 테이블의 데이터들간의 종속성, 중복성 등으로 인해 예기치 못한 오류를 제거 하는 과정이라 할 수 있습니다. 정규화를 진행했을 때 장점은 DB의 일관성을 향상시킬수 있습니다. 또한 DB의 논리적 구조를 견고하게 만들 수 있습니다. 하지만 테이블의 숫자가 늘어나고 결국 join 연산의 비용이 증가 하는 단점을 가질 수 있습니다.

– 무결성 제약조건이란 무엇인가요

데이터의 정확성과 일관성을 보장하기 위해 테이블 생성 시에 각 칼럼에 대해 정의하는 규칙을 의미합니다. 그로 인해 프로그래밍 과정을 줄일 수 있고, 데이터 오류 발생 가능성을 줄여줍니다.

– ERD란 무엇인가요

ERD란 계략적으로 데이터 및 데이터들의 관계를 표현한 도식화된 그림입니다. 조직의 데이터를 이해하고, 이를 응용시스템에 이용하고자 ERD를 작성합니다.

– 컬럼에 인덱스를 생성하는게 좋은지, 생성하지 않는게 좋은지 기술하시오

상황에 따라 다르다고 할 수 있습니다. 인덱스를 생성하려는 컬럼이 분포도가 좋아 활용도가 향상되거나 수정이 빈번하지 않다면 인덱스를 생성하는 것이 좋습니다. 하지만 인덱스 컬럼이 비교되기 전에 변형이 일어난 경우나 부정형으로 조건을 기술한 경우 인덱스를 생성 하지 않는 것이 좋습니다. 지나친 인덱스 선언은 많은 오버헤드(어떤 처리를 하기 위해 들어가는 간접적인 처리시간, 메모리 등을 말한다)를 발생 시킬 수 있습니다.

– 저장 프로시저(stored procedure)란 무엇인가

저장 프로시저란 한 개 이상의 복잡한 SQL Query문들을 데이터베이스에 저장하고 필요한 경우 호출해서 사용하는 객체입니다. 저장 프로시저를 사용 하면 트래픽을 감소 시킬 수 있고, 보안이 강화되며, 코드의 재사용이 가능하며, 유지 관리에 용이합니다.

– DBMS란 무엇인가요

데이터를 적절하고 효율적인 관리의 필요성으로 인해 등장한 체계적으로 데이터를 관리하는 시스템입니다. DBMS를 사용함으로써 사용자 중심의 데이터 처리가 가능하며, 중복성 통제, 데이터의 일관성 유지 등의 장점을 가지고 있습니다. 종류로는 관계형, 객체 지향형, 객체관계형 데이터베이스가 있습니다.

– JOIN은 언제 사용합니까

저희는 데이터 무결성과 중복성, 종속성을 해결하기 위해 테이블을 정규화 시켰습니다. 그렇기 때문에 여러 테이블에서 정보를 필요로 합니다. 그 때 사용하는 것이 JOIN입니다. 당연히 JOIN을 사용하기 위해서는 테이블간의 관계가 설정 되어 있어야 하며 이를 통해 테이블간의 행을 비교 하면서 필요로 하는 정보를 가져 올 수 있습니다.

– Primary key와 Foreign key를 비교하여 설명하시오

Primary key란 테이블에서 각 Row를 유일하게 구분하는 컬럼키입니다. Foreign key는 하나의 테이블에 있는 컬럼으로는 그 의미를 표현 할 수 없는 경우, 다른 테이블의 Primary key를 참조한 값입니다.

– JDBC란 무엇인가요

JDBC란 자바에서 데이터베이스와 관련된 작업을 처리할 수 있도록 도와주는 API입니다. JDBC의 특징을 말씀드리면 DBMS에 의존하지 않습니다. 그 이유는 자바애플리케이션으로부터 사용하는 JDBC드라이버매니저와 DBMS에 의존하는 JDBC드라이버를 분리했기 때문입니다. 또한 표준적인 SQL을 실행하는 메서드를 가지고 있기 때문입니다.

 

728x90
반응형
728x90
반응형

1. Codility란?

A, https://codility.com/tour/

기업 대상 서비스

이 서비스는 주로 구직자의 코딩 실력을 검증하고자 할때 사용됩니다.


B, https://codility.com/programmers/

프로그래머 대상 서비스 

무료 서비스로 알고리즘을 공부하고 문제풀이에 도전해 보고 싶은 분을 위한 것입니다.



2. 프로그래머 대상 서비스 - 알고리즘 테스트

코딜리티


메인화면에서 스크롤을 조금 내리면,

아래 화면을 볼 수 있다.

위 화면에서 [See All Lessons] 버튼 클릭



여러가지 Lesson 목록이 보인다.

Lesson 1 Iterations

아마도 반복문 관련 문제를 제공할것같다.




BinaryGap

START




     

1. 문제 출제 영역( only 영어.... )

- 문제에 대한 설명 및 조건

2. 개발언어 선택 영역

- C, JAVA, PHP 등 여러 프로그래밍 언어 중 선택해서 문제를 풀 수 있다.

3. 코딩 영역

- 실제 자신이 코드를 작성하는 부분

4. 결과 영역

- 자신이 작성한 코드 결과 출력

- 해당 문제에 커스텀 케이스를 대입한 결과 출력

- 문법적 오류 출력




문제를 푼 후

[SUBMIT THIS TASK]

클릭



문제를 풀고난 후 결과창을 통해 자신이 코딩한 소스를 평가 받을 수 있다.

심심할때 한번씩 풀어보면 좋을것같다.



출처: http://hahahoho5915.tistory.com/22?category=653539 [넌 잘하고 있어]

728x90
반응형

+ Recent posts