본문 바로가기

basic

[RDB] Foreign Key 사용 여부 판단 시간이 없으시면, 요약만 읽으셔도 좋습니다. 내 생각(요약) FK를 사용하거나/사용하지 않고 테이블간의 관계를 고려하는 것이 둘 다 많이 사용되는 방법인데, 굳이 하나를 꼽자면 FK를 평소에 사용하지 않고, 정합성이 매우 중요한 곳이라면 FK를 고려할 것입니다. 대신 DB가 아닌 코드 레벨에서 무결성 체크를 잘 해줘야 합니다. FK 도입 여부를 결정할 때 가장 중요한 사항 고려 사항은 개발 편의성 / 정합성의 tradeoff 라는 결론입니다. 이렇게 생각한 판단 근거는 네 가지 입니다(DB 처리속도, 개발 편의성, 개발자의 지식 커버리지, 정합성) 1) DB 처리속도는 FK를 걸었을 때 약간 느리거나 큰 차이 없고, 2) FK가 있으면, 마이그레이션이나 설계 변경이 힘들 수 있음, 테스트 데이터를 만드는.. 더보기
PDQ Sort (현재 가장 빠른 정렬 알고리즘) 소스코드: https://github.com/orlp/pdqsort 논문: https://arxiv.org/abs/2106.05123 Best Average Worst Memory Stable Deterministic n n log n n log n log n No Yes PDQSort 요약 pdq sort는 Pattern-Defeating Quicksort입니다. 특정한 패턴이 감지되는 경우에 빠르게 소팅할 수 있다는 특징이 있으며, 3가지 기본적인 소팅을 합친 하이브리드 소팅입니다. rust에서는 기본 sorting으로 채택했으며, 대략 45% 정도의 성능 향상이 있다고 합니다(링크). 아이템들이 정렬된 경우에 O(n)의 시간이 걸리고(이 과정에서 insertion sort가 사용될 수 있음) 일반적.. 더보기
Boyer-Moore 알고리즘(=Majority Voting Algorithm) 본문에서 언급되는 알고리즘은 문자열 검색과는 다른 알고리즘입니다. 특정 배열이 있을 때, 그 배열에서 과반수를 차지하는 아이템이 어떤 것인지 찾는 알고리즘입니다. Time Complexity: O(n) Space Complexity: O(1) 과반수를 차지하는 아이템은 count > size(nums)/2 의 특성을 가지고 있습니다. def majorityElement(nums: List[int]) -> int: count = 0 candidate = None for num in nums: if count == 0: candidate = num count += (1 if num == candidate else -1) return candidate https://www.youtube.com/watch?v=.. 더보기
python으로 스키마 정보 없이 sqlite3 데이터 읽기 sqlite3는 .db파일로 데이터를 저장합니다. .db파일만 있는 경우에 데이터를 읽는 방법을 소개합니다. 1. sqlite3 db파일을 구조를 모르는 상태에서 읽어야 하게된 이유 github에서 트렌드를 살펴보기 위해서 explore 버튼을 눌러서 구경을 하고 있었습니다. 그러다 amazon에 들어가기 위한 노력을 정리해 놓은 github을 발견했는데, Flash카드라는 것으로 인터뷰 질문 답변을 정리했다고 했습니다. https://github.com/jwasham/coding-interview-university jwasham/coding-interview-university A complete computer science study plan to become a software engineer... 더보기
[알고리즘/자료구조] 링크드 리스트(linked list) 링크드 리스트는 '노드를 연결해서 만드는 리스트'를 의미하고, 노드는 데이터와 다른 노드를 가리키는 포인터로 이루어져 있습니다. C언어에서 링크드 리스트를 표현하면 다음과 같이 표현할 수 있습니다. #include struct Node { int data; struct Node* nextNode; }; int main() { struct Node MyNode; return 0; } typedef로 짧은 이름을 부여할 수도 있습니다. #include typedef struct tagNode{ int data; struct Node* nextNode; } Node; int main() { Node MyNode; return 0; } 링크드 리스트의 주요 연산은 다음과 같습니다. - 노드 생성/소멸(creat.. 더보기
[css] css에서 다른 css 불러오기: import @import url('style.css'); 더보기
[css] text-alignment: justify 양쪽 균등 분배 . 더보기
[css] 포지션 /* 아래의 값들은 대상 엘리먼트를 대상으로 지정해줘야함. 부모 엘리먼트 x */ position: relative; /* 요소들이 자유롭게 이동할 수 있게 만들어 줌. 기본 값: static */ left: 100px; top: 100px; /* relative를 지정해줘야 동작함. 부모 엘리먼트를 기준으로 움직임 */ position: absolute; /* 위치를 absolute로 정해주면 더 이상 부모의 소속이 아니기 때문에, 자식이 차지하고 있는 공간도 없어짐.*/ /* position의 값을 absolute로 주면, 부모 또는 부모의 부모 등 계속해서 상위 엘리먼트로 가면서 position이 static이 아닌 엘리먼트를 기준으로 위치를 계산함. */ position: fixed; /* abs.. 더보기