2024.10.17.목.TIL 면접 질문

김기남·2024년 10월 17일
post-thumbnail

안녕하세요, 오늘은 면접에서 질문 받았던 내용을 정리해 보았습니다.

INNER JOIN과 OUTER JOIN

데이터베이스에서 JOIN은 두 개 이상의 테이블을 결합하는 방법입니다. INNER JOIN은 두 테이블에서 일치하는 데이터만 반환합니다. 예를 들어, 고객 테이블과 주문 테이블이 있을 때, 고객이 주문한 내역만 보여주고 싶다면 INNER JOIN을 사용합니다.

반면, OUTER JOIN은 일치하지 않는 데이터도 포함하여 반환합니다. LEFT OUTER JOIN은 왼쪽 테이블의 모든 데이터를 포함하고, RIGHT OUTER JOIN은 오른쪽 테이블의 모든 데이터를 포함합니다. FULL OUTER JOIN은 두 테이블의 모든 데이터를 포함합니다. 이 두 JOIN의 차이를 이해하는 것은 데이터베이스 설계와 쿼리 작성에 매우 중요합니다.

Map과 Hash Map

Map은 키-값 쌍으로 데이터를 저장하는 자료구조입니다. Java에서는 Map 인터페이스를 통해 다양한 구현체를 사용할 수 있습니다. 그 중 HashMap은 해시 테이블을 기반으로 한 Map의 한 종류로, 빠른 검색 속도를 자랑합니다.

HashMap은 키를 해시 함수에 통과시켜 인덱스를 생성하고, 이 인덱스를 통해 값을 저장합니다. 이로 인해 데이터의 삽입, 삭제, 검색이 평균적으로 O(1)의 시간 복잡도를 가집니다. 하지만, 해시 충돌이 발생할 경우 성능이 저하될 수 있습니다.

Stack과 Queue

Stack과 Queue는 자료구조의 두 가지 기본 형태입니다. Stack은 LIFO(Last In First Out) 구조로, 가장 나중에 들어온 데이터가 가장 먼저 나갑니다. 예를 들어, 웹 브라우저의 뒤로 가기 버튼이 Stack의 예입니다.

반면, Queue는 FIFO(First In First Out) 구조로, 가장 먼저 들어온 데이터가 가장 먼저 나갑니다. 예를 들어, 프린터 대기열이 Queue의 예입니다. 이 두 자료구조는 각각의 특성에 따라 다양한 상황에서 유용하게 사용됩니다.

Array와 LinkedList

Array는 고정된 크기의 연속적인 메모리 공간에 데이터를 저장하는 자료구조입니다. 데이터에 직접 접근할 수 있어 빠른 검색 속도를 자랑하지만, 크기를 변경할 수 없다는 단점이 있습니다.

LinkedList는 각 요소가 다음 요소에 대한 포인터를 가지고 있는 구조로, 동적으로 크기를 조절할 수 있습니다. 하지만, 특정 인덱스에 접근하기 위해서는 처음부터 순차적으로 탐색해야 하므로 검색 속도가 느릴 수 있습니다. 이 두 자료구조의 차이를 이해하는 것은 알고리즘 설계에 매우 중요합니다.

Vue.js의 특징

Vue.js는 사용자 인터페이스를 구축하기 위한 프로그레시브 프레임워크입니다. Vue.js의 가장 큰 특징은 반응형 데이터 바인딩과 컴포넌트 기반 구조입니다. 이를 통해 개발자는 재사용 가능한 컴포넌트를 만들고, 데이터의 변화에 따라 UI가 자동으로 업데이트됩니다.

또한, Vue.js는 가벼운 프레임워크로, 학습 곡선이 낮아 초보자도 쉽게 접근할 수 있습니다. Vue Router와 Vuex와 같은 공식 라이브러리를 통해 SPA(Single Page Application) 개발에 최적화되어 있습니다.

오늘의 코드카타

import java.util.HashMap;
import java.util.Map;

class Solution {

    public int solution(int[][] lines) {
        Map<Integer, Integer> map = new HashMap<>();

        for (int i = 0; i < lines.length; i++) {
            for (int j = lines[i][0]; j < lines[i][1]; j++) {
                map.put(j, map.getOrDefault(j, 0) + 1);
            }
        }

        int answer = 0;
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            if (entry.getValue() > 1) {
                answer++;
            }
        }
        return answer;
    }
}
public class Main {

    public static void main(String[] args) {

        Solution solution = new Solution();

        int[][] a1 = {{0, 1}, {2, 5}, {3, 9}};
        int[][] a2 = {{-1, 1}, {1, 3}, {3, 9}};
        int[][] a3 = {{0, 5}, {3, 9}, {1, 10}};

        System.out.println(solution.solution(a1));
        System.out.println(solution.solution(a2));
        System.out.println(solution.solution(a3));
    }
}

겹치는 선분의 길이

profile
새로운 시작~!

0개의 댓글