이상을 꿈꾸는 몽상가.. 프로그래밍을 좋아함..


인터뷰 준비

인터뷰 준비

지금까지 쌓아온 것들을 가볍게 정리하며 사이사이의 구멍들을 메꾸는 시간..


참고 : 다른 사람의 Summary

개념

OS

  • OSI 7 Layers
    OSI 7 Layers
  • 사용해본 OS 종류 : Redhat 5.5, Solaris 10, Ubuntu 14.04LTS, Windows Server
  • 명령어 : Process Status, free, top, df, kill, killall, wc, awk, find, grep
  • Bash, Crontab

Java

  • JAVA, JVM 의 특성
    • 자바가상머신(JVM)만 설치하면 컴퓨터의 운영체제에 상관없이 작동한다.(즉, 운영체제에 독립적)
    • 기본 자료형을 제외한 모든 요소들이 객체로 표현
    • 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어
    • Garbage Collector를 통한 자동적인 메모리 관리
    • 멀티쓰레드(Multi-thread)를 지원
    • JVM은 Java만이 아닌 다양한 언어에게 위와 같은 장점을 제공한다
      • Clojure, Apache Groovy, Scala, Kotlin, JRuby, Jython 등
  • Generic : JDK 1.5부터 제공
  • Annotation : JDK 1.5부터 제공
  • Stream, Functional Programming
  • Process 와 Thread 차이

  • equals & hashcode
    • 수정시에는 둘다 같이 수정해줘야함
    • Java에서 기본적으로 구현해 둔 Collection, Map 들은 equals과 hashcode를 함께 이용해서 동일여부를 판단함
  • equals (동질성-래퍼런스의 값이 같다) & == (동일성-래퍼런스의 주소가 같다)

Java Memory

구조

Java 메모리 구조

Memory Error 종류

  • java.lang.StackOverflowError
    • Stack size의 부족으로 지역변수, 메소드, 부분결과 등을 할당하지 못할 경우 발생
  • java.lang.OutOfMemoryError: Java heap spac
    • Heap size의 부족으로 Java Object를 Heap에 할당하지 못하는 경우 발생
  • java.lang.OutOfMemoryError: PermGen space
    • Class나 Method 객체를 PermGen space에 할당하지 못하는 경우 발생
    • 애플리케이션에서 너무 많은 class를 로드할 때 발생
  • java.lang.OutOfMemoryError: (Native method)
    • JVM에 설정된 것 보다 큰 native메모리가 호출 될 경우 발생

References

Garbage Collection & Memory Leak 분석

GC Algorithm 종류

  • Serial GC
  • Parallel GC
  • Parallel Old GC
  • CMS GC
    • Marking시에만 Stop-The-World가 발생하고 시간이 짧음
    • Concurrent GC는 STW 없이 진행하지만 Old 영역에 대한 Compaction 작업을 수행하지 않기 때문에 단편화가 심함
    • 전체적으로는 메모리가 여유롭지만 단편화 때문에 새로운 객체를 적재하지 못하는 Promotion Failure 발생 가능 -> Full GC 발생 (Log : concurrent mode failure)
    • Old 영역이 실 사용량에 비해 너무 타이트하면 단편화 때문에 Full GC가 반복발생 가능
    • Full GC 발생시 Compaction도 일어나지만 다른 GC에 비해 비용이 큼
  • G1 GC

References

Design Pattern

  • 팩토리 패턴
    • 객체 생성을 캡슐화 하는 패턴
    • 객체 생성이라는 바뀔 수 있는 내용을 기존 코드에서 분리해내는 것이 목적
  • 변형된 팩토리 패턴
    • 추상 팩토리 패턴 : 팩토리 패턴에 전략패턴을 적용
    • 팩토리 메소드 패턴 : 팩토리 패턴에 템플릿 메소드 패턴을 적용
    • 전략의 종류가 다양해짐으로 인해 팩토리 소스가 변하는 것을 방지하는 것이 목적
    • 새로운 객체가 추가되더라도 기존 소스의 수정이 필요없다
    • CoupangFactory, LGCNSFactory : createBackEndDeveloper, createFrontEndDeveloper, createDesigner
    • http://seotory.tistory.com/27
  • 어뎁터 패턴
    • 기존객체가 가지고 있는 인터페이스와 다른 인터페이스를 고객에게 제공하는 것이 목적
  • 데코레이터 패턴
    • 동적으로 객체에게 역확이나 기능을 추하가는 것인데 반해 proxy패턴은 proxy 객체를 이용해 기존 객체에 대한 접근제어나 성능 향상등 부수적인 작업을 수행하는것이 목적
  • 프록시 패턴
    • 기존 객체가 가지고 있는 기능에 동일한 인터페이스를 제공하되 부가적인 기능이나 역활을 수행하는것이 목적
  • 싱글톤
    • 인스턴스가 하나 뿐인 특별한 객체를 만들 수 있게 해주는 패턴
  • 커맨드 패턴
    • execute method
    • 하나의 객체가 하나의 커맨드가 되며, 객체를 선택해서 실행하면 원하는 목적을 얻을 수 있다.
  • 템플릿 메소드 패턴
    • 바뀌지 않는 부분은 템플릿화하고 바뀌는 부분은 abstract 메소드로 구성
    • 서브 클래스에서 바뀌는 내용을 기술, 바뀌지 않는 부분은 상속받음
    • Client는 abstact 클래스의 메소드를 호출
  • 전략패턴
    • 인터페이스의 구체 클래스를 전략적으로 선택할 수 있는 패턴
    • 바뀌는 부분에 대해서 전략적으로 선택하도록 구성
    • 기존 코드의 수정없이 전략을 추가하는 것이 가능하다
    • 템플릿 메소드 패턴보다 더 유연하다
    • Client 는 context의 메소드를 호출한다. context 는 전략패턴의 interface를 사용하는 클래스를 의미함.
  • 템플릿 콜백 패턴
    • 전략패턴 기본 구조에 익명 내부 클래스(callback)를 활용한 방식
    • context 를 실행시킴과 동시에 client가 callback을 context에게 DI 시킴

References

Data Structure

  • Collection은 Array보다 유연성 측면에서 유리하다.

  • List, Set, Map 차이점
    • List, Set 은 Collection 을 상속
    • List 는 순차적으로 수집, 사용을 목적
    • Set 은 중복 불가
    • Map 은 key, value 형태로 입력. 순서기억, 중복 불가. search에 유리함
  • List Sort
List<Contact> contacts = new ArrayList<Contact>();
// Fill it.

// Now sort by address instead of name (default).
Collections.sort(contacts, new Comparator<Contact>() {
    public int compare(Contact one, Contact other) {
        return one.getAddress().compareTo(other.getAddress());
    }
}); 
  • Itrable : interface
    • Collection : interface
      • List : interface
        • LinkedList : class
        • ArrayList : class
        • Stack : class : push, pop, peek
      • Set : interface
        • HashSet : class
        • SortedSet : interface
          • TreeSet : class
      • Queue : interface : enQueue, deQueue
  • Map : interface
    • Hashtable : class
    • HashMap : class
    • SortedMap : interface
      • TreeMap : class : red-black tree (self-balancing binary search tree), sorted KeySet 제공
  • Java 1.6 collections UML class diagrams

Network

  • OSI 7 Layers
    OSI 7 Layers
  • TCP protocol의 연결 및 종료 과정
    TCP
    ( 출처 : CLOSE_WAIT 문제해결 )
  • TCP 와 UDP 비교
    • TCP는 데이터의 신뢰성을 보장한다. 데이터가 유실될 경우 재전송을 하며 순서도 보장한다.
    • UDP는 데어터의 신뢰성을 보장하지 못 하지만 TCP 보다 전송속도가 빠르다.
  • 라우터(L3)와 스위치(L2)의 차이
    • L2 는 Mac address, L3는 IP address 로 전송 목적지를 구분한다.
    • L2스위치는 는 L2 와 직접 연결된 Device 에게만 전송이 가능하다. (2촌까지만 전달가능)
    • 라우터는 IP 라우팅 테이블의 정보를 이용해서 목적지인 device 혹은 다른 라우터로 전송이 가능하다. (2촌 이상 전달가능)
  • L4와 L7
  • Keepalived, HAProxy
  • Load-Balance Algorithm : Round-Robin, Least-Connection

Network Programming

  • Socket
  • HTTP
  • Netty
  • SOAP
  • RESTFul
  • NIO

References

Spring Framework

  • 제어의 역행(IoC : Inversion of Control)
  • DI (Dependence Injection)
  • POJO ( Plain Old Java Object )

Strength

  • Context로부터 DI받은 target객체를 client가 호출하면 실제적으로는 context가 target 객체를 제어함
  • 위와 같은 IoC 덕분에, Spring의 다양한 기능을 client 소스를 수정하지 않고 누릴 수 있음
  • 예를들어 AOP를 설정하면 context가 target 객체를 호출하기 전/후에 AOP를 수행해주도록 처리됨
  • AOP : Transaction, Controller Request/Response Mapping, Async(Easy Multi Threading), Scheduling 등
  • Annotation으로도 대부분의 설정이 가능

  • DI로 제공한 target 객체의 생명주기는 기본적으로 singleton
  • 매번 인스턴스를 새로 생성하려면 component에다가 @Scope(“prototype”)으로 설정필요

@Autowired, @Resource 차이

  • @Resource 는 기본적으로 프로퍼티 이름을 가지고 빈을 소환
    • @Resource(name=”multiLanguageSource”) 처럼 @Bean(name=”multiLanguageSource”) 라고 name이 설정된 bean 을 불러올 수 있음
    • 프로퍼티 혹은 setter method만 사용가능 : 파라미터가 하나인 setter
  • @Autowired 기본적으로 프로퍼티 타입을 가지고 빈을 소환
    • 프로퍼티, 생성자, 모든 method에서 사용가능
    • 프로퍼티의 타입만으로 제어가 힘들 때는 @Qualifier(“value”)를 bean과 client에 함께 적용하면 됨

J2EE

Middleware

  • WEB : Apache, Nginx, WebToB
  • WAS : Tomcat, Jeus

Object-Oriented Programming

객체와 객체의 상호작용을 통해 프로그램이 동작

a. 객체지향 프로그래밍은 코드의 재사용성이 높다.
b. 코드의 변경이 용이
c. 직관적인 코드분석
d. 개발속도 향상
e. 상속을 통한 장점 극대화

Aspect-Oriented Programming

트랜잭션이나 로깅, 보안

진행한 프로젝트에서의 부딪혔던 문제사항들과 해결방법 정리

자소서 참고

추가 준비사항


Donations ❤

제가 작성한 글이 작게라도 도움이 되었기를 바랍니다.
관심 가져주시는 분이 있는 것을 느끼고 힘내기 위해 기부 버튼을 만들어봤습니다.
혹시 가능하시다면 $1 라도 기부 부탁드립니다 ^^





Associated Posts

관련된 주제를 살펴볼 수 있도록 동일한 Tag를 가진 글들을 모아뒀습니다. 제목을 눌러주세요.


Disqus Social Community

SNS계정으로 댓글을 달아도 SNS에 글이 남지 않습니다.
이메일 주소 입력으로 글을 남길 수 있으며, 답변이 달리면 이메일로 알림을 받을 수 있습니다.

i