기술면접 스터디 1주차

코변·2022년 9월 20일
0

기술면접 스터디

목록 보기
1/3
post-thumbnail
    1. Stack과 Queue 자료구조에 대해 말씀해주시고 차이점에 대해 설명해주세요.

      첫째로 형태에서 차이를 보입니다. 스택은 가장 마지막에 삽입된 데이터를 가져오기에 효율적인 구조이고 큐는 먼저 들어간 데이터를 효율적으로 가져올 수 있습니다.

      두번째로 사용사례입니다. 스택은 형태에서 알 수 있듯이 웹페이지 뒤로가기, 실행취소처럼 방금 들어간 데이터를 가져오기 위해서 사용되고 큐는 프린트의 대기열처럼 순서대로 데이터를 가져올 때 사용됩니다.

      마지막으로 파이썬에서 스택과 큐가 어떻게 쓰이는지 말씀드리고 싶은데 파이썬은 리스트를 스택으로 사용하고 pop() 명령어를 통해 시간복잡도 O(1)로 마지막 값을 가져올 수 있습니다. queue는 collections모듈의 deque를 활용하여 생성할 수 있고 popleft()를 통해 O(1)의 시간복잡도로 먼저 입력한 값을 가져올 수 있습니다.

    1. Array와 Linked List 자료구조에 대해 말씀해주시고 차이점에 대해 설명해주세요.

      우선, 색인에서 차이를 보입니다. 배열은 인덱스가 있고 그 덕에 조회속도에서 장점을 보이고 링크드리스트는 인덱스가 없기 때문에 최악의 경우 전부 순회해야하는 단점이 있습니다.

      다음으로는 메모리입니다. 어레이는 데이터의 크기를 할당합니다. 따라서 삽입 삭제시에 크기를 조정해야 할 수도 있어 삽입삭제가 느립니다. 반대로 링크드리스트는 연결의 조정만 해주면 되기 때문에 삽입 삭제가 빠릅니다.

    1. RDB와 NoSQL은 무엇인가요? 차이점 또는 장단점 위주로 설명해주세요.

      첫째로 RDB는 transaction을 통한 데이터의 안정성을 보장한다는 장점이 있습니다. 반면에 no-sql은 지원하지 않습니다.

      둘째로 RDB는 관계를 통해 데이터를 정의하여 직관적으로 데이터베이스를 설계할 수 있고 no-sql은 데이터가 나열되어 있어 설계하기가 까다롭다.

      셋째로 RDB는 스키마 변경이 어렵기 때문에 데이터 타입을 바꾼다던지 새로운열을 추가한다던지하는 작업은 프로덕션 단계에서는 사실상 불가능하다고 알고 있습니다. 반면에 no-sql은 스키마에 구애받지 않는다.

      넷째로 no-sql은 인메모리 데이터베이스 redis, 검색엔진으로서의 elastic-search 등 활용도가 높으나 RDB는 데이터베이스로만 쓰입니다.

    1. join의 뜻은 무엇인가요? Inner Join과 Left (Outer) Join에 대한 차이점을 설명해주세요.

      두개 이상의 테이블을 관계를 통해 연결하여 하나의 테이블처럼 데이터를 가져오는 방법입니다.

      조인을 사용하기 위해서는 두 테이블에 일치하는 값이 있어야 하며 on, where를 통해 테이블간의 관계를 정의합니다.

      inner join은 두 테이블에 값이 모두 존재하는 경우 가져오는 방법으로 저는 편하게 교집합 데이터를 가져온다고 받아들였습니다.

      left outer join은 왼쪽 테이블을 중심으로 데이터를 가져오고 왼쪽에는 있으나 오른쪽 테이블에 데이터가 없다면 null 상태로 표기되며 연관테이블의 비어있는 값에 대한 관리가 용이하다고 알고있습니다.

    1. Transaction의 의미와 ACID 규칙에 대해서 설명해주세요

      DB트랜잭션이란 사람이 주관적으로 하나의 작업으로 지정한 sql의 묶음이자 작업 수행의 논리적 단위를 말한다.

      일반적으로 작업이 모두 완료되었을 때 commit하여 반영하는 방식과 비정상적으로 종료되었을 때 Rollback을 통하여 undo하는 방식을 통해 db트랜잭션을 구현합니다.

      db-트랜잭션은 작업이 모두 완벽하게 처리가 되지 않았을 경우에 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않도록 막아주는 원자성,

      트랜잭션 이후에도 db에 정해둔 규칙이 일관되게 유지되는 일관성,

      트랜잭션 수행시에 서로가 영향을 받지 않도록 하는 고립성,

      트랜잭션이 성공적으로 수행되었다면 해당 로그가 남아야하는 지속성 이 네가지 특징을 보입니다.

    1. Primary Key와 Foreign Key에 대해 각각 설명해주세요.

      pk는 DB에서 필드를 조회하기 위해서 사용하는 identifier이기 때문에 중복되는 값을 가질 수 없고 null상태 일수도 없습니다. 주로 auto increment를 통해 1부터 순차적으로 증가한 값으로 pk의 고유한 값을 생성합니다.

      fk는 연관된 테이블의 값을 확인하기 위한 identifier로 참조값의 pk를 테이블에 저장합니다. 이를 통해 조회하고자 하는 필드에 바로 접근할 수 있도록 돕습니다.

      한 테이블에 기본키는 반드시 하나여야 하지만, 외래키는 없거나 하나 이상일 수 있습니다.

  • 1일차 피드백

  • 각 정의, 사용예제와 파이썬에 해당하는 내용까지 잘 설명해주셔서 좋았습니다! 해당 내용 인지 잘하신 상태에서 면접가셔서 꼬리질문을 하는 타입으로 보이면 예제까지만 설명하시고 꼬리질문에 대응하기 위한 파이썬 대입내용 언급하시는 것도 좋은 대책이 될 수 있을 듯 합니다!

  • 2일차 피드백

  • 현재 답변도 괜찮지만 조금 보완되면 더 좋겠다는 내용 적어봅니다!
    On, Where절 언급해주셨는데 보통 부트캠프에서 ORM만 쓰고 와서 로우쿼리 사용에 대해 약하다고 생각하는 사람들이 있을 수 있습니다 캠프 진행하시면서 ORM 사용내용에 대해 로우쿼리로 쿼리 체크해봤다는 내용을 언급해주셔도 점수업그레이드될 수 있을 듯 합니다!
    위 노을님 내용에 적힌 링크가 참고될 것 같은데 무조건 빠르다, 느리다의 이분법적인 내용보다는 어느 조건하에서는 이 DB 사용이 유리하다라는 식으로 전개해보는 것을 추천드립니다~

  • 3일차 피드백

  • 혹시 4조는 모여서 상호피드백도 하고 계신가요? 인터넷에 있는 답안들이 거의 대부분 비슷하긴 하지만 사람인지라 말하다보면 조금씩 서로 애매한 부분이나 잘 말한 부분이 우연찮게(?)나오는데 상호 피드백 시간에 이런 내용을 이야기하고 자신의 답변 퀄리티를 높일 수 있거든요!! 서로 시간이 안맞으시다면 모여서 하시기보다 팀 노션이라도 하나 파셔서 구글 드라이브에 올린 영상 보시고 상호 피드백을 한번 해보시면 좋을 것 같아요!! 거기에 제가 드리는 말씀까지 추가해서 더욱 탄탄해지셨으면 좋겠습니다~~ 좋은 주말 보내세요!!

  • 동적배열에 관한 링크
    https://docs.python.org/3/faq/design.html#how-are-lists-implemented-in-cpython

  • RDB와 nosql 관련해서 추천해주신 링크
    https://velog.io/@coding_egg/CS-Nosql%EC%9D%B4-%EC%88%98%ED%8F%89%ED%99%95%EC%9E%A5Scale-Out%EC%97%90-%EC%9C%A0%EB%A6%AC%ED%95%9C-%EC%9D%B4%EC%9C%A0

  • 키와 관련해서 추천해주신 링크
    https://limkydev.tistory.com/108

profile
내 것인 줄 알았으나 받은 모든 것이 선물이었다.

0개의 댓글