면접 질문 정리

업데이트:

하루가 너무 정신없이 지나가서 오늘 포스팅은 제가 그동안 들었던 면접 질문들 몇가지를 정리해보려고 합니다. 궁금하신건 댓글 남겨주세용

  • dfs, bfs 란 무엇이며 무슨 차이가 있으며 어떤 상황에서 사용하는가
  • 스레드 세이프란 무엇인가, 해시맵은 스레드 세이프한가

각각을 공부한 뒤 포스팅을 할 생각이지만 우선 제가 알고있는 개념으로 답을 해보겠습니다.

  1. dfs 란 깊이우선탐색으로써 모든 경로를 다 확인해야 할 경우 또는 가중치가 붙어있을 경우 사용한다. bfs는 너비우선탐색으로 최단 경로를 찾을 때 사용하기도 한다.

근데 사실 나는 동시 확산? 같은 곳에서 bfs를 사용하고 모든 경로를 다 확인해야 할경우 dfs를 사용한다. 이게 정확히 개념이 무엇이다 라고 말은 못하겠지만 느낌이 있다.. 그 느낌에 대해서 정리해서 조만간 포스팅해보겠습니다.ㅠㅠㅠㅠ

  1. 스레드 세이프란 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바로 나오는 것이라고 생각한다. 즉, 동시 실행되어도 크리티컬섹션이 문제가 생기지 않는? 것이라 생각한다. 이러한 것을 위해 사용하는 방법이 뮤텍스, 세마포오 등과 같은 개념들이 있다.

  2. 해시맵이 스레드 세이프한가에 대해서는 나도 처음 듣는 질문이였고 답을 못하였다. 그래서 찾아본 결과 잘 정리되있는 부분이 있어서 가져왔다.

인용

HashMap과 HashTable은 동일한 내부 구조를 가지고 있지만 HashTable의 경우는 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드를 실행할 수 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드가 실행가능하다.
이는 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있다는 것을 의미한다.
일반적으로 동기화가 필요 없다면 HashMap을, 동기화 보장이 필요하다면 Hashtable을 사용하면된다.

즉, 해시맵은 동기화 선언이 따로 구현되있지 않기 때문에 멀티스레드 환경에서 중복실행이 될 수 있다. 이러한 문제를 해결하기 위해 만든 클래스가 ConCurrentHashMap이다. -> 아 해시테이블은 동기화가 내부적으로 구현되있다!!

  • 너무 두서없이 써내려가서 정신 없을 수도 있습니다. 점차 다듬어 나가고 자세한 개념들은 차후에 포스팅 해보도록 하겠습니다!

읽어주셔서 감사합니다.

Reference

https://gompangs.tistory.com/entry/OS-Thread-Safe%EB%9E%80

http://firedev.tistory.com/entry/Java-HashMap과-Hashtable-의-차이점

댓글남기기