하마
7k
2019-04-25 12:28:56 작성 2019-05-06 10:16:58 수정됨
11
4184

블록체인 개발자 면접 오픈북


저희 회사의 블록체인 개발자 면접 오픈북입니다.
혹시 블록체인 개발자로 취업하고 싶으신 분이 계시다면 참고 하십시요.
회사명이나 기타 정보는 게시판 특성상  표시하지 않습니다.



질문 리스트는 1. 블록체인 부분  2. 소프트웨어 일반/C++/Java/Go 가 있습니다. 
블록체인 부분은 블록체인 일반,이더리움,비트코인,하이퍼레저 패브릭에 한정되어 질문됩니다.
소프트웨어 부분은 저희 플랫폼이 기본적으로 C++으로 만들어져 있으며, Client SDK 는 자바로, SmartContract 와 특정서비스(Ordering Consensus 등)은 Go로 만들어지기 때문에 소프트웨어 일반과 각 언어에 대한 질문이 포함 됩니다. 질문은 면접관이 몇가지를 선택하여 질문하며, 면접자가 선택하여 답변하는 방식도 포함됩니다.

답변은 말을 통해서 하거나 화이트 보드에 대략적으로 그려가면서 설명 할 수 있습니다. (구체적인 코딩을 요구하진 않습니다) 양쪽 모두를 잘 이해하고 계신 분은 아키텍트롤을 맡으실 것이고, 1번이 부족한 분은 플랫폼 개발자로 채용 될 것 입니다.


질문 리스트 (VER 0.1)

블록체인 부분 

토큰과 코인의 차이는 무엇인가요? (in 이더리움)
@ 토큰 디자인에 대해서 아는대로 말해주세요.
@ 이더리움 ERC20 & ERC721 는 무슨 차이가 있나요 

@ 블록체인 트릴레마란?
@ UTXO 란 무엇인가요?
@ 비트코인에서 트랜잭션 검증은 어떻게 이루어 지나요
@ 비트코인에서 불룸필터는 왜 사용 되나요 
@ 비트코인에서 몇명 중에 몇명의 서명이 있어야 사용 할 수 있다라는 것은 어떻게 표현하나요

@ 이더리움에서 트랜잭션 검증은 어떻게 이루어 지나요
@ 이더리움에서 블룸필터는 왜 사용 되나요
@ 이더리움에서 머클패트리샤트리란 무엇인가요
@ 이더리움에서 RLP는 무엇인가요? 왜 필요한가요? Protocol buffer 와는 어떤 차이가 있나요
@ 이더리움에서 플라즈마란 무엇인가요
@ 이더리움에서 노드디스커버리는 어떻게 이루어 지나요
@ 주소를 public key가 아니라, 이더리움 경우 20byte로 줄여서 사용하는 이유는 무엇인가요
@ 줄여진 주소를 가지고 서명을 어떻게 확인 하나요 
@ 이더리움에서 블록싱크 방식은 어떻게 되나요
@ 이더리움에서 저장용량을 줄이기 위한 prunning은 어떻게 할 수 있을까요

@ 하이퍼레저 패브릭에서 트랜잭션 흐름을 설명해 주세요.
@ 하이퍼레저 패브릭에서 MVCC 충돌이란 무엇인가요

@ 하이퍼레저 패브릭에서 MSP 란 무엇인가요
@ 하이퍼레저 패브릭에서 Fabric-CA가 하는 역할은 무엇인가요
@ 하이퍼레저 패브릭에서 RWSet이란 무엇인가요 
@ 하이퍼레저 패브릭에서 블룸 필터는 어떻게 사용 되나요
@ 하이퍼레저 패브릭에서 ACL 은 어떤 정보를 어떻게 가져와서 적용 되나요
@ 하이퍼레저 패브릭에서 저장용량을 줄이기 위한 prunning은 어떻게 할 수 있을까요
@ 하이퍼레저 패브릭에서 Kafka 는 왜 사용 되나요? RAFT 는 왜 등장 한 걸 까요?
@ 하이퍼레저 패브릭에서 토큰은 만들 수 있나요?  FabToken 왜 만들어 졌을까요?  
하이퍼레저 패브릭에서 리더피어와 앵커피어란 무엇인가요?
@ 하이퍼레저 패브릭에서 Gossip Protocol 는 왜 사용하나요?  

@ HMAC / PKI / ECDSA는 무엇인가요
@ diffie-hellman 키 교환 알고리즘은 무엇인가요? 이더리움에서는 왜 사용하나요 
@ 하이퍼레저 패브릭의 ECcert 란 무엇인가요? 패브릭에서는 왜 사용하나요 
@ 하이퍼레저 패브릭의 TCert 는 왜 없어졌고, 대체제는 무엇인가요 
@ Schnorr signature는 무엇인가요?

@ 이더리움에서 영지식증명으로 활용 할 수 있는 것은 무엇이 있을까요
@ 하이퍼레저 패브릭에서 영지식증명으로 활용 할 수 있는 것은 무엇이 있을까요

@ 하이퍼레져 패브릭 Indy 란
@ EOS에서 트랜잭션 수수료는?


@ CFT와 BFT의 차이는 무엇인가요 
@ RAFT 에서 리더 선출은 어떻게 하나요? 
@ PBFT 알고리즘은 무엇인가요




블록체인 소프트웨어 일반/C++/Java/Go 

@ inheritance보다 Composition을 사용하라는 말은 무슨 의미인가요?
@ 주로 사용하는 리팩토링 3가지를 말해 주세요.
@ 디자인패턴은 표현(구조)보다는 의도가 중요하다는 말은 무슨 의미인가요?
@ 예외에 대해서 어떻게 생각하시나요? (예외 처리에 대한 6가지 화두 참고)
@ 동기,비동기,블록,논블록은 무엇이라고 생각하나요?
@ 잠금 없는 동시성 프로그래밍이란 무엇인가요?
@ Actor 패턴과 Go언어의 CSP 모델의 차이점은 무엇인가요?

@ 공간(메모리)를 낭비해서 성능을 높이는 방식의 예를 3가지만 들어주세요.

@ 자바의 메서드 인자 전달 방식과 Shallow Copy / Deep Copy 에 대해 설명 해주세요.

@ 자바 리플렉션은 무엇이며, 활용처가 어떤게 있을 까요?
@ 자바의 HashMap 은 어떻게 동작하나요?

@ C++ 에서 성능하락을 막기 위해 알아야 할 기본적인 것들은 무엇이 있을까요?
@ C++ 에서 성능향상을 위해서 일반적으로 할 수 있는게 무엇이 있을까요?
@ C++ 에서  map 과 unordered_map은 어떤 차이가 있나요?
@ C++ 에서  STL 컨테이너의 데이터 삭제에 대해서 말해주세요?
@ C++ 에서 생산자,소비자패턴중 소비자 부분의 코드입니다. 코드를 설명 해주세요

    std::unique_lock<std::mutex> ul_que_res(_mtx_recv_endorser, std::defer_lock);
    std::list<SPTR_PROPOSAL_RES> que_recv; 

    while (!_bStop) 
    { 
        ul_que_res.lock(); 
        if (_que_recv_endorser.empty()) 
            _cond_recv_endorser.wait(ul_que_res); 

        que_recv.swap(_que_recv_endorser); 
        ul_que_res.unlock(); 

        while (!que_recv.empty()) 
        { 
            res = que_recv.front(); 
            que_recv.pop_front(); ​

@ C++ 에서 std::move 와 rvalue 란 무엇인가요?
@ C++에서 메모리 풀링은 어떻게 구현하나요? (다양한 방식 중 아무거나) 
@ C++에서 unique_lock과 lock_guard의 차이점은? 아래 코드를 설명하시요.

sptr_nt_lbuf pool_nt_lbuf::get_buf(){
   sptr_nt_lbuf pbuf;
   std::unique_lock<std::mutex> ul(_mtx, std::defer_lock);

   while (pbuf.get() == nullptr){
    ul.lock();
    if (_pool.empty()) _cond.wait(ul);
    if (!_pool.empty())
    {
       pbuf = _pool.front();
      _pool.pop_front();
    }
  }

  return pbuf;
}

void pool_nt_lbuf::release_buf(sptr_nt_lbuf pbuf){
  std::lock_guard<std::mutex> lg(_mtx);
  _pool.push_back(pbuf); 
  _cond.notify_all();
}


@ Go의 덕타이핑의 장,단점은 무엇인가요?

@ Go에서 고루틴&채널은 무엇인가요? 
@ Go에서 select 문은 어떻게 사용되나요? 아래 코드를 설명 해 주세요.

package main

import (
   "fmt"
   "time"
)

var scheduler chan string

func consuming (prompt string){
      fmt.Println("consuming 호출됨")
   select {
   case scheduler <- prompt:
      fmt.Println("이름을 입력받았습니다 : ", <- scheduler)
   case <-time.After(5 * time.Second):
      fmt.Println("시간이 지났습니다.")
   }
}

func producing (console chan string) {
   var name string
   fmt.Print("이름:")
   fmt.Scanln(&name)
   console <- name
}
func main() {
   console := make(chan string, 1)
   scheduler = make(chan string, 1)

   go func(){
      consuming(<-console)
   }()

   go producing(console)

   time.Sleep(100 * time.Second)
}


func (p *MsgPipeRW) WriteMsg(msg Msg) error {
  if atomic.LoadInt32(p.closed) == 0 {
    consumed := make(chan struct{}, 1)
    msg.Payload = &eofSignal{msg.Payload, msg.Size, consumed}
    select {
    case p.w <- msg:
      if msg.Size > 0 {
      // wait for payload read or discard
        select {
          case <-consumed:
          case <-p.closing:
        }
      }
      return nil
    case <-p.closing:
    }
  }
  return ErrPipeClosed
}

@ CAP 이론이란? 
@ consistent hashing 이란 무엇인가요?
@ Gossip Protocol 는 무엇인가요?

@ 트랜잭션에서  Two Phase Commit 이란 무엇인가요?
@ WAL (write-ahead logging) 은 무엇인가요?
@ B+tree 는  무엇인가요?
@ 블록체인에서 블록저장을 위한 ON DISK 데이터 구조와 RDB에서의 ON DISK 데이터 구조는 어떤 차이가 있을 까요?
@ LSM (log structed merge tree)은 대략 무엇인가요?
@ LSM 에서 무엇을 머지 한다는 건가요? 

@ leveldb의 어떤 측면 때문에 다른 db에 비해 성능이 높은 걸까요?
@ leveldb에서 블룸필터는 어떻게 사용되나요?
@ Kafka 의 브로커,토픽,파티션은 무엇인가요?
@ Kafka 에서 Zookeeper 는 어떤 역할을 담당하나요? 구체적으로 기술해 주세요.

@ 멀티쓰레드 방식과 Select or ePoll 방식의 소켓통신 차이점은 무엇인가요?

@ 소켓통신에서 가변 read 버퍼와 고정 read 버퍼 각각의 장,단점은? 가변버퍼시 메모리 풀링 방식은? 
@ 소켓통신에서 타임아웃은 무엇이고 Nagle 알고리즘은 무엇인가요?
@ 소켓통신상 SSL/TLS flow를 말해주세요
@ React 방식과 Proact 방식의 차이점은 무엇인가요?  (in POSA2) 

Reactor

Event Handling

Allows event-driven applications to demultiplex and dispatch service requests that are delivered to an application from one or more clients.

Proactor

Event Handling

Allows event-driven applications to efficiently demultiplex and dispatch service requests triggered by the completion of asynchronous operations, to achieve the performance benefits of concurrency without incurring certain of its liabilities.

@NAT 와 UPnP 는 무엇인가요?




사족)

오픈북 면접은, 면접자가 어떤 회사,학교,전공 출신인지 상관없이 현재 실력으로 판단하며, 나이,경력,성별,국적(외국인 환영) 등 이런 요소들은 평가에 영향을 미치지 않습니다. 면접시 토론을 잘하는게 최우선 순위입니다. 
물론 완벽 할 수 없음은 인정하고 있습니다. 

우리가 면접을 볼 때를 생각해보면, 황당한 질문이 나올 수도 있고 - 모든 지식을 머리속에 두고 있지 않기 때문에 - 운에 따라서 모르는 질문만 나올 수도 있습니다. 이에 따라 우리는 사측에서 필요한 지식이 무엇인지 구체적으로 오픈하고, 이 중 선택하여 질문을 하는게 서로 유리 할 거라 판단 하였습니다. 사측은 이를 통해서라도 준비된 인재를 받아 드릴 수 있을거 같습니다.

질문 리스트들에 대한 모든 것을 세부적으로 기억하고 있어야 채용한다는 의미는 아닙니다. 세상은 변하여서 머리속에 모든 것을 담아 두는 시대는 아니라고 생각합니다. 다만 무엇을 어떻게 찾아야 하는지에 대한 나침판은 필요하겠지요. 저도 모르는 100% 완벽한 답을 원하는것 보다는 공부는 하였는지, 어떤 생각을 가지고 있는지 어떻게 이해하고 있는지, 모르는 것을 명확히 표현하는지에 대한 검토를 하려 합니다. 


14
  • 댓글 11

  • oneday
    747
    2019-04-25 12:43:36

    답은 잘 모르지만 질문들이 다 의미가 있는거 같습니다!

  • 아플라
    617
    2019-04-25 12:47:52

    답변가능한게 몇개없네요... ㅋㅋㅋ 

    시간날떄 재미삼아 한개씩 공부해봐야겠어요.

    감사합니다~~

  • 배우고싶은이
    734
    2019-04-25 13:02:57

    ㅠㅠ 답변할수있는게 없네요..

    딴일 찾아봐야 하나요?

  • 개발자학도
    2k
    2019-04-25 13:27:41

    ㅎㅎ 내용조차 이해하힘든게대부분 ㅠㅠ


  • 산들바람_
    3k
    2019-04-25 14:11:32

    @.@ 어렵네요

  • 라이라
    3k
    2019-04-25 14:14:24

    와, 하나도 모르겠네요. 관련 설명 찾아봐야겠습니다

  • 하마
    7k
    2019-04-25 18:34:44 작성 2019-04-30 20:34:16 수정됨
    블록체인 관심없으면 모르는게 당연하며, 어려울 수 있습니다.~ 
    관심 있을 때/필요 할 때  찾아보면 됩니다. ^^
  • 노박사
    519
    2019-05-01 13:27:48

    위와 같은 질문리스트에 대한 전반적인 지식을 쌓을만한 책을 추천 해주실수있으신가요?/?

  • 하마
    7k
    2019-05-01 13:56:21 작성 2019-05-06 10:17:49 수정됨

    블록체인에 한 해서 

    마스터링 비트코인
    마스터링 이더리움
    하이퍼레저 블록체인 개발

    3개가 기본서 입니다.

  • 노박사
    519
    2019-05-01 16:53:39

    감사합니다

  • 두둥스
    374
    2019-05-02 11:05:04

    크으 역시 하마님

  • 로그인을 하시면 댓글을 등록할 수 있습니다.