11월, 2020의 게시물 표시

[기술 면접] Thread에 관하여

 안녕하십니까. 이 글에서는 기술면접에서 자주 물어보는 Thread에 관하여 다루려고 합니다. 제가 면접에서 경험하였던 내용 바탕으로 작성하였습니다. 기술면접을 보면 단골로 출제되는 면접 내용으로 컴퓨터 관련 전공이라면 꼭 숙지하여야 하는 내용 입니다. Thread와 Process의 차이점은 무엇인가. 쓰레드 문제가 나오면 처음에 물어보는 개념 입니다. Process 프로그램을 실행하는 단위. 특정 프로그램을 실행하면, 프로세스 하나가 뜬다. 기본적으로 프로세스 하나당 메인 쓰레드는 하나는 쓴다. 프로세스 끼리 독립적이기에, 여러 프로세스끼리 데이터를 동기화 하려면 통신을 해야하는 점이 있다.  Thread 한 프로세스 내에서 프로그램이 수행되는 단위이며, 여러 쓰레드를 사용할 수 있다. 각 쓰레드는 CPU 단위를 사용한다.  Multi Process vs Multi Thread 멀티 프로세스는 프로세스를 여러개 사용하는데, 이때 각각 메모리 등이 독립적이다. 멀티 쓰레드는 하나의 프로세스안에 여러개의 쓰레드를 사용하는 방식이며, 메모리를 공유한다.  Thread 사용 경험 좀더 깊게 물어보고 싶을 경우 사용 경험을 물어보기도 합니다. 저는 디비 데이터를 실시간은 아니지만 30분 정도에 처리해야하며 데이터가 많은 경우 멀티 쓰레드를 사용하였다고 답을 하였습니다.  Thread 간의 데이터 동기화 문제 쓰레드에 대하여 물어보면 왠만해서는 물어보는 문제 입니다. Lock 사용하기 간단하게 Mutex, Semaphorer, 같은 Lock을 사용할 수 있습니다. 공유 자원을 사용해야할 경우 해당 객체에 대하여 Lock을 가져간 후 연산이 끝나면 Lock을 풉니다.  이를 사용한 인터페이스로는 java에 BlockingQueue 가 있습니다. LinkedBlockingDeque 를 통해 구현체를 확인할 수 있습니다. Atomic 연산 사용하기 면접관이 Lock을 쓰는 방법밖에 없냐고 물어볼 수 도 있습니다. Thread에 관한 면접중 절반정도는 물어본 경험이 있습니다.

Google Cloud Platform sdk E: The list of sources could not be read. 에러

이미지
 안녕하십니까. Google Cloud Platform을 사용하다가 에러가 발생하였습니다. 간단한 에러이지만 한국어 포스팅을 발견하지 못하여 포스팅 합니다.  에러 상황 구글 클라우드의 리눅스 명령어 패키지인 sdk를 설치하려고 다음의 페이지 를 방문 하였습니다. echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee - a / etc / apt / sources . list . d / google - cloud - sdk . list sudo apt - get install apt - transport - https ca - certificates gnupg curl https :// packages . cloud . google . com / apt / doc / apt - key . gpg | sudo apt - key -- keyring / usr / share / keyrings / cloud . google . gpg add - sudo apt - get update && sudo apt - get install google - cloud - sdk 마지막 명령어인 apt-get update시 아래와 같은 에러가 발생하였습니다. ( base ) myeongjoon @ myeongjoon-B365M-D3H:~ / repo / t-crawler_amazon / gcp / kafka$ sudo apt-get updateE: Conflicting values set for option Signed-By regarding source https: // packages.cloud.google.com / apt / cloud-sdk: / usr / share / keyrings / cloud.google.gpg ! = E: 소스 목록을 읽을 수 없