목록기술면접 (8)
Kuma's Curious Paradise

Q1. 카카오톡은 멀티프로세스일까, 단일 프로세스일까?Mac의 Spotlight에 들어가 Activity Monitor를 검색해 보자. 관련 항목이 여러 개가 뜬다면 멀티 프로세스, 하나만 뜬다면 단일 프로세스이다.카카오톡은 단일 프로세스인지, 멀티 프로세스인지 헷갈린다. 뭔지는 모르겠지만 ‘키체인’이라는 보조 프로세스를 사용하고 있는 것으로 보인다. 구글의 경우, Helper 프로세스들이 함께 동작하고 있는 것을 볼 수 있다. Google Chrome이라는 주 프로세스, Renderer, GPU, Plugin 까지 여러 개의 프로세스들이 함께 동작하는 확실한 멀티 프로세스 구조를 취하고 있다. Q2. 그렇다면 왜 이렇게 다른 프로세스 구조를 가지고 있을까?이는 어플리케이션의 성격과 주요 목적이 다르기..

네트워크는 노드와 링크로 연결되어 리소스를 공유하는 집합이다. 쉽게 말해 인터넷이 잘 통하도록 도와주는 연결망이다. 네트워크라는 건 도대체 어떻게 생긴걸까? 1. 네트워크를 이루는 노드와 링크의 개념노드: 서버, 라우터, 스위치 등 네트워크 장치.링크: 유선 또는 무선을 의미하며, 노드 간의 연결을 담당.2. 노드와 종류와 역할노드를 좀 더 자세히 살펴보자.서버는 서비스를 제공하는 컴퓨터 또는 장치로, 데이터와 파일, 애플리케이션, 웹사이트 등을 클라이언트에게 제공한다.웹서버 : Apache, Nginx 등데이터 베이스 서버 : MySQL, PostgreSQL, Oracle 등파일 서버 : Windows File Server, NFS(Network File System) 등라우터는 네트워크 간 데이터를..

패턴에 대해 학습하다보면 MVVM에 대한 이야기가 나온다. 그때마다 적절한 레퍼런스를 찾길 바랐지만 서버만 담당하는 웹 프로그래밍 코드에서 이를 찾기는 쉽지 않았다. 따라서 오늘은 자바로 친절하게 쓰여진 안드로이드 코드를 바탕으로 MVVM을 이해해 보려 한다. (아래의 예시는 블로그에서 찾은 안드로이드 코드에 이해하기 쉽게 주석을 단 것인데, 원글을 찾아보려 구글링을 해 보아도 찾을 수 없었다. 공부용으로 잠시 참고하는 것이니, 너무 노여워 마셨으면... 글의 주인을 아시면 댓글 부탁드립니다!) MVVMVM은 뷰모델. UI에 들어갈 데이터를 관리한다.MVP는 View-Presenter가 1대1 대응. MVVM은 1대다 가능. 값이 같다면 여러 뷰를 연결할 수 있다. 이제 코드를 살펴보자. 아래의 코드는..
Revealing Module Pattern : 모듈에서 노출하고 싶은 부분한 노출하는 패턴자바 스크립트는 자바와 같은 클래스 기반 언어가 아니다.자바에서 클래스와 메서드들은 각각 명시적인 접근 제어자를 가지지만 (public, private, protected, default), 자바 스크립트는 모든 함수와 변수가 전역적으로 접근이 가능하다.이 경우, 분리(캡슐화)가 제대로 되어 있지 않아서 데이터의 무결성이 떨어지고 보안에 결함이 생긴다.이를 해결하기 위해 노출 모듈 패턴이 등장했다. 예제1const module1 = (() => { const privateFoo = () => {}; const privateBar = []; const exported = { publicFoo: () => ..
23. 즉시로딩과 지연로딩은 각각 언제 사용하면 좋을까요?즉시 로딩은 연관된 데이터까지 한 번에 모두 로드하는 방식입니다. 지연 로딩은 필요할 때 연관 데이터를 로드하는 방식이고요. 즉시 로딩은 같이 로드하니까, 초기 로딩 시간이 좀 깁니다. 하지만 연관 데이터가 자주 필요하다면, 즉시 로딩을 쓰는 것이 추가 쿼리를 줄일 수 있겠습니다. 한 번에 로드하고 이후 캐시에 저장해서 쓰는 방법도 있겠습니다. 지연 로딩은 실제로 필요한 메모리만 로드하므로 메모리 사용이 최적화됩니다. 24. Spring을 시작하여 컨테이너가 시작되고 이후 Spring 종료까지의 사이클은 어떻게 되나요? @PostConstruct, @PreDestroy 어노테이션의 역할도 함께 설명해 주세요. 스프링을 실행하면 스프링은 IoC 컨..
14. array와 list, arraylist, linkedlist의 차이에 대해 이야기해 주세요. array는 크기를 조절할 수 없는 정적배열을 말합니다. list의 구현체인 arraylist와 linkedlist는 크기 조정이 가능한 동적 배열이고요. array는 메모리 상에 붙어서, 일렬로 저장이 되는데 초기화할 때 크기를 지정한 만큼 생성됩니다. list의 경우 인터페이스로, 순서를 보장하는 배열 기반 자료구조를 이야기합니다. arraylist와 linkedlist가 그 구현체 중 하나인데, arraylist는 array와 마찬가지로 일렬 저장이 됩니다. 일단 첫 번째 만들 때 크기 10을 할당하기 때문에 배열이 늘거나 줄어도 괜찮습니다. 만약 10을 넘어가면 크기 20을 재할당하고, 이후 40..
8. javac와 JIT 컴파일러의 차이를 설명해 주세요. 이 둘은 모두 컴파일러지만 작동되는 시간과 하는 일에 차이가 있습니다. 자바 컴파일러의 경우, 자바 소스를 바이트 코드로 읽어내 클래스 파일에 저장합니다. 이후 JVM은 자바 인터프리터와 JIT 컴파일러를 이용해 바이트 코드를 기계 코드로 읽어내 실행시키는데, 이때 JIT 컴파일러는 자주 쓰이는 부분을 미리 번역하여 성능 향상을 높입니다. 클래스 파일을 한 줄씩 실행시키는 작업은 자바 인터프리터가 합니다. 9. 오버라이딩과 오버로딩을, 동적바인딩과 정적바인딩과 관련지어 설명해 주세요. 오버라이딩은 프로그램 실행 도중에, 오버로딩은 컴파일 타임 때 어떤 메서드를 호출할 지 결정한다는 점에서 각각 동적 바인딩과 정적 바인딩과 관련이 있습니다. 예를..
1. Call By Reference란 무엇이고 어떻게 쓰이나요? Call By Reference가 무엇인지 설명하려면 Call By Value와 비교하며 살펴보는 게 좋을 것 같습니다. 이 둘은 함수나 메서드를 호출할 때 인자를 전달하는 방식을 뜻하며, Call By Value는 객체의 '값을 복사'해서 전달하는, Call By Reference는 객체의 참조(주소)를 직접 전달하는 방식을 말합니다. 자바는 모든 함수가 Call By Value 방식으로 작동합니다. 참조형 변수가 있지만, 그때도 객체의 주소'값을 복사'해서 전달하기 때문에 Call By Reference처럼 보이는 것이지요. 주소값이 전달된다는 점에서 메서드를 호출한 쪽에서 값에 변경을 가하면 객체의 값이 변경된다는 특징이 있습니다. ..