MINGYUM 2024. 11. 10. 18:43

 

  •  
  •  
  •  


날씨가 조금 따땃해진 11월이다. 🍂

불확실한 상황에 매너리즘에 빠지기 쉽지만 공부하고 싶은 것들을 꾸준히 공부하며 나아가자 😁

 

오늘도 오후 두 시간 정도 리트코드를 풀고 저녁에는 면접 스터디를 하였다.

 

https://leetcode.com/problems/set-matrix-zeroes/

Set을 이용해 0으로 만들 행과 열을 저장하고 NM번 탐색하여 Set에 저장된 행, 열이라면 0으로 세팅하는 방식으로 풀었다. 총 시간 복잡도는 C++로 풀었으므로 O(NM * log(NM))이다. 그리고 공간 복잡도는 O(N)이다. 

시간 복잡도를 O(NM)으로 줄이고 공간 복잡도를 O(1)로 개선하도록 풀어보았다. 행렬 문제는 필기 없이 IDE에서만 풀기는 어려운 것 같다 😅

 

https://leetcode.com/problems/longest-substring-without-repeating-characters/

 


어제 공부한 데이터베이스 락에 이어 관련 개념을 조금 깊게 공부하였다.

  • 경쟁 조건 (race condition) 
  • 세마포어와 뮤텍스
  • 분산 락
  • synchronized
  • Serializable

 

분산 락이 무엇인지 이해하고 어떻게 서비스에 적용할 수 있을 지 알아보는 데 시간이 많이 걸렸다. 😥

서버 다중화 상태에서 동시 점유 상황을 방지하려면 일반적인 낙관적/비관적 락을 사용하면 되고, 분산 락을 사용하는 경우는 데이터베이스 다중화 상태라는 생각이 든다. 그럼 데이터베이스가 분산되기 때문에 분산 락을 사용하는 건가? 🤔🤔

어떤 상황에서 분산 락을 사용할 수 있는 지 아직 의문이 해소되지 않았다.