Skip to content

Latest commit

 

History

History
86 lines (84 loc) · 6.16 KB

interview-question-to-learn.md

File metadata and controls

86 lines (84 loc) · 6.16 KB
  • String builder buffer의 차이
    • Multi thread safe의 여부
      • buffer는 synchronized 가 들어있어서 thread safe
    • 추가 질문
      • +, concat까지 비교하면?
      • +는 jdk 1.5 이후 부터는 buffer에서 builder로 컴파일되게 변경되었다는데 for loop에서 builder와 +는 차이가 나는가
        • 왜냐하면 +는 builder.toString이기에 계속 메모리에 레퍼런스를 만들게 될거같아서
      • 사용한 Component로 생성된 bean은 thread safe 한가?
      • 즉, String builder를 꼭 써야만 하는 상황이였는가?
  • GC에 대한 설명
  • JPA의 영속성
  • JPA에서 repository interface가 어떻게 인스턴스로 만들어 지는가?
    • Repository interface를 search 하는 방법

      • 세줄 요약
        • Annotation aspect 등으로 configuiration을 가져오는 auto-config loader를 통해, repository base package 정보를 담은 config를 만들어내고
        • config와 interface와 합쳐서 BeanDefinition을 만듬
        • Spring IoC를 통해 repository @Autowire에 DI
          • 이 부분까지는 Deep dive하지 않음
      • 검색 키워드가 이상한지 잘 설명된 글을 못찾음. 그래서 코드를 까보았음
      • EnableJpaRepositories annotation에 base package가 명시되어 있음
      • 그래서 위 annotation을 사용하는 method call의 역순으로 call stack을 알아봄(IDE를 이용해 method usage만을 타고 올라간 것이기에 실제 Call stack과는 다를 수 있음)
        • org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfigureRegistrar
          • getAnnotation
        • org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport
          • getConfigurationSource: 여기서 AnnotationRepositoryConfigurationSource를 반환
          • registerBeanDefinitions
        • org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader
          • loadBeanDefinitionsFromRegistrars
          • loadBeanDefinitionsForConfigurationClass
          • loadBeanDefinitions
        • org.springframework.context.annotation.ConfigurationClassPostProcessor
          • processConfigBeanDefinitions
          • postProcessBeanDefinitionRegistry
        • org.springframework.context.support.PostProcessorRegistrationDelegate
          • invokeBeanDefinitionRegistryPostProcessors
          • invokeBeanFactoryPostProcessors
        • org.springframework.context.support.AbstractApplicationContext
          • invokeBeanFactoryPostProcessors
          • refresh
        • org.springframework.boot.SpringApplication
          • refresh
          • refreshContext
          • run
      • 이로써 Spring 어플리케이션 실행과 함께 JPA 어노테이션 정보가 사용됨을 확인
      • Base Package를 통해 repository interaface를 찾고 instance로 만드는 부분을 찾아봄
        • org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport
          • getConfigurationSource에서 AnnotationRepositoryConfigurationSource 인스턴스를 생성
          • getBasePackages를 override
          • getBasePackages의 return은 annotation으로부터 가져온 정보를 사용
            • org.springframework.data.repository.config.AnnotationRepositoryConfigurationSource
              • getBasePackages
        • AnnotationRepositoryConfigurationSource 인스턴스를 인자로하여 RepositoryConfigurationDelegate 인스턴스를 registerBeanDefinitions에서 생성하고 chaining으로 registerRepositoriesIn를 호출하여 BeanDefinition을 만듬
          • org.springframework.data.repository.config.RepositoryConfigurationSourceSupport
            • getCandidates
          • org.springframework.boot.autoconfigure.data.AbstractRepositoryConfigurationSourceSupport
            • registerBeanDefinitions
            • registerRepositoriesIn
        • Spring IoC로 @Autowire에 DI
    • Interface가 initialize 가 되는 방법

    • Named Method를 가능케하는 sql method generator는?

      • TODO
  • Custom Exception을 Runtime Exception으로 사용한 이유
  • Checked Exception VS Unchecked Exception
  • DTO 사용 의도