[TIL] 1차 평가 피드백, 페어프로그래밍과 해시함수 (with 파트 1 종료)

샤이니·2023년 4월 21일
0

learned.log

목록 보기
30/46

더 효율적이고 효과적으로 작성하기 위해서 TIL 템플릿을 변경했다!

코드잇 부트캠프의 한달 간의 Part1이 끝났다!(part1 회고 포스팅 예정) 따라서 팀 회고 + 피어 리뷰를 진행했다.그리고 새로운 팀이 결정되었다. 다음 주부터는 새로운 팀과의 Part2 시작~ 약 2달간 함께하며 프로젝트까지 하는 팀인데 재미있게 잘 했으면 좋겠다! ㅎㅎ

오늘의 나는 무엇을 새롭게 배웠나요?

[1] 1차 기술면접 피드백

면담 질문 피드백

  1. 브라우저 주소창 : 통신과정 + 렌더링 과정
    • DNS는 알고 있었다. HTTP 프로토콜은 모르는 것 같았다.
    • 렌더링 트리는 말했다 but 페인트 레이아웃은 말 안해서 아쉬웠음
  2. REST API
    • RESTFull 이해를 잘 안하고 있다.
    • URL을 구성 이해 X
    • GET & POST - 리소스 내용 query string, cache 데이터 길이 제한 등도 얘기하면 된다
      • body를 쓸 수있다. 엘라스틱 서칭에서 쓸 수 있다.
  3. flex grid
    • 유연한 크기조절 대해 없었다.
  4. Call back
    • 비동기랑 혼동하는 느낌
    • 헷갈리는 것 같았다.
    • event loop는 어렴풋이 알고만 있는 느낌

횡성수설 하는 느낌 & 차분하게 대답하기 → 질문이 이해가 안되면 물어보기

녹음하기!!

[2] 페어프로그래밍

vscode extension Live Share 를 사용해서 라이브서버, 코드를 공유할 수 있다!

ISO date format

  • 2023-04-15T08:11:20Z과 같은 형식을 ISO date format이라고 한다.
    • 날짜 : 년-월-일의 형태
    • T : 날짜 뒤에 시간이 오는것을 표시해주는 문자이다.
    • 시간 : 시:분:초의 형태로 나와있으며 프로그래밍 언어에 따라서 초 뒤에 소수점 형태로 milliseconds가 표시되기도 한다.
    • Timezone Offset : 시간 뒤에 ±시간:분의 형태로 나와있으며 UTC기준 시로부터 얼마만큼 차이가 있는지를 나타낸다. 현재 위의 예시는 한국시간을 나타내며 UTC기준 시로부터 9시간 +된 시간임을 나타낸다
      Z or +00:00 : UTC기준시를 나타내는 표시이며 “+00:00”으로 나타내기도 한다
  • Date.prototype.toISOString()
const today = new Date('05 October 2011 14:48 UTC');

console.log(today.toISOString()); // Returns 2011-10-05T14:48:00.000Z

[3] 해시테이블과 해시 함수

해시 테이블이란?

해시 테이블은 데이터를 저장하고 검색하기 위한 자료구조 중 하나입니다.

해시 테이블은 배열과 같은 형태로 데이터를 저장하며, 각 데이터를 식별하기 위한 키(key)와 실제 데이터를 담는 값(value)을 함께 저장한다. 그리고 이러한 데이터를 검색하기 위해 해시 함수(hash function)를 사용한다.

  • 우선 데이터를 저장할 때, 각 데이터의 키를 해시 함수에 입력하여 해시값(hash value)을 얻습니다.
  • 이 해시값은 배열의 인덱스로 사용되며, 해당 인덱스에 실제 데이터를 저장한다.
  • 데이터를 검색할 때도 마찬가지로, 검색하려는 데이터의 키를 해시 함수에 입력하여 해시값을 계산한 다음, 해당 인덱스에 저장된 값을 반환한다.

해시 테이블은 데이터 검색 시간이 매우 빠르다는 장점이 있다. 해시 함수를 통해 매우 빠르게 데이터의 위치를 찾을 수 있기 때문입니다. 따라서 해시 테이블은 매우 큰 데이터 집합에서 검색 속도를 높이기 위해 자주 사용된다.

하지만 해시 함수의 성능에 따라 검색 속도가 크게 달라질 수 있다. 충돌이 발생하는 경우에도 검색 속도가 저하될 수 있다.

충돌은 서로 다른 데이터가 같은 해시값을 갖는 경우를 말하며, 충돌을 처리하는 방법에 따라 해시 함수의 성능이 결정된다.

충돌을 처리하는 방법으로는 Separate Chaining, Open Addressing 등이 있고, 이에 따라 검색 속도와 메모리 사용량이 달라질 수 있다.

해시 함수

해시 함수는 입력으로 받은 데이터를 고정된 길이의 해시값으로 변환하는 함수입니다. 해시 함수는 일반적으로 입력 데이터의 길이와는 무관하게 항상 고정된 길이의 해시값을 반환한다. 이러한 특성은 해시 함수를 이용하여 해시 테이블과 같은 자료구조에서 빠른 검색을 가능하게 한다.

충돌

서로 다른 데이터가 같은 해시값을 갖는 경우를 말하며, 충돌을 처리하는 방법에 따라 해시 함수의 성능이 결정된다.

충돌 처리 방법

  1. Open Addressing
    개방 주소법은 충돌이 발생한 경우, 다른 빈 공간을 찾아서 데이터를 저장하는 방법입니다. 이 방법은 충돌이 발생할 경우 검색 성능이 떨어질 가능성이 있지만, 저장공간의 사용률이 높아질 수 있다.
  2. Chaining
    체이닝은 충돌이 발생한 경우, 해당 해시값에 이미 데이터가 저장되어 있으면 연결 리스트를 이용하여 데이터를 추가하는 방법입니다. 이 방법은 저장공간의 사용률이 높아지지만, 검색 시간이 개방 주소법보다 느릴 수 있다.

충돌 최소화 방법

  1. 좋은 해시 함수 설계
    좋은 해시 함수는 입력 데이터가 고르게 분포되도록 설계되어야 한다. 입력 데이터의 특성에 맞춰 적절한 해시 함수를 선택하는 것이 중요하다. 예를 들어, 입력 데이터가 숫자로 이루어져 있을 경우에는 소수를 이용한 해시 함수가 적절하다. 문자열로 이루어져 있을 경우에는 문자열의 각 문자에 대한 ASCII 코드 값을 이용하는 방법이 대표적이다.
    • 해시함수의 반환값의 분포가 고른 경우
      • 해시함수가 해시테이블에 데이터가 저장될 인덱스 반환시 분포를 넓게 시켜줍니다.
      • 연결리스트의 크기가 작습니다.
        • 배열의 다양한 위치에 데이터가 분포되어있다.
    • 낮은 사용률
      • 해시테이블은 배열로 구성되어 있기 때문에 저장공간이 거의 차거나 부족할 경우, 리사이징을 통해 해시 테이블의 공간을 추가해야한다. 리사이징의 기준은 사용률(load factor)로 파악한다. 보통 사용률이 0.7보다 커지면 리사이징을 한다.

  1. 적절한 저장공간 크기 선택
    저장공간의 크기를 충분히 크게 설정하여 충돌이 최소화될 수 있도록 한다.

  2. 데이터의 무작위성 증가
    데이터의 무작위성을 증가시켜서 충돌이 최소화될 수 있도록 한다. 데이터의 무작위성이 높아질수록 해시값이 고르게 분포되기 때문입니다. 예를 들어, 해시 함수에서 입력 데이터가 어떤 패턴을 가지고 있으면, 해당 패턴에 따라 해시값이 고르게 분포되지 않을 가능성이 있다. 이 경우, 입력 데이터가 해시 테이블에서 빈 공간을 찾을 때 충돌이 자주 발생할 수 있다. 이를 위해서는 해시 함수에 추가적인 데이터를 입력으로 받아서 무작위성을 증가시키는 방법 등을 이용할 수 있다.

공부하면서 어떤 어려움이 있었나요?

어려움은 딱히 없었다.

내일의 나는 무엇을 공부해야 할까요?

  • 알고리즘 패러다임 완강
  • 기본 자료구조들 완강
  • 문제 해결 능력 기르기 완강
  • 트리 완강

0개의 댓글