면접 질문 정리
업데이트:
하루가 너무 정신없이 지나가서 오늘 포스팅은 제가 그동안 들었던 면접 질문들 몇가지를 정리해보려고 합니다. 궁금하신건 댓글 남겨주세용
- dfs, bfs 란 무엇이며 무슨 차이가 있으며 어떤 상황에서 사용하는가
- 스레드 세이프란 무엇인가, 해시맵은 스레드 세이프한가
각각을 공부한 뒤 포스팅을 할 생각이지만 우선 제가 알고있는 개념으로 답을 해보겠습니다.
- dfs 란 깊이우선탐색으로써 모든 경로를 다 확인해야 할 경우 또는 가중치가 붙어있을 경우 사용한다. bfs는 너비우선탐색으로 최단 경로를 찾을 때 사용하기도 한다.
근데 사실 나는 동시 확산? 같은 곳에서 bfs를 사용하고 모든 경로를 다 확인해야 할경우 dfs를 사용한다. 이게 정확히 개념이 무엇이다 라고 말은 못하겠지만 느낌이 있다.. 그 느낌에 대해서 정리해서 조만간 포스팅해보겠습니다.ㅠㅠㅠㅠ
-
스레드 세이프란 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바로 나오는 것이라고 생각한다. 즉, 동시 실행되어도 크리티컬섹션이 문제가 생기지 않는? 것이라 생각한다. 이러한 것을 위해 사용하는 방법이 뮤텍스, 세마포오 등과 같은 개념들이 있다.
-
해시맵이 스레드 세이프한가에 대해서는 나도 처음 듣는 질문이였고 답을 못하였다. 그래서 찾아본 결과 잘 정리되있는 부분이 있어서 가져왔다.
인용
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-의-차이점
댓글남기기