코딩 인터뷰 11

[코딩 인터뷰]지식 기반 문제 - 스레드와 락 문제

[ 프로세스 vs 스레드 ] 프로세스와 스레드의 차이는 무엇인가? 프로세스 CPU 시간이나 메모리 등의 시스템 자원이 할당되는 독립적인 개체 각 프로세스는 별도의 주소 공간에서 실행 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근 불가능 → 접근하려면 파이프, 파일, 소켓 등을 이용해야 됨 스레드 프로세스 안에 존재하며 프로세스의 자원을 공유 별도의 레지스터와 스택을 갖지만 힙 메모리는 서로 읽고 쓸 수 있음 프로세스의 특정한 수행 경로와 같음 → 한 스레드가 프로세스 자원 변경 시 다른 스레드도 변경 결과 확인 가능 [ 문맥 전환 ] 문맥 전환에 소요되는 시간을 측정하려면 어떻게 해야 할까? 두 프로세스의 타임스탬프의 차이와 같습니다. 타임스탬프의 경우 마지막과 첫 번째 명령어의 시간을 기록해야 ..

[코딩 인터뷰]지식 기반 문제 - 스레드와 락

[ 자바의 스레드 ] 자바의 모든 스레드는 java.lang.Thread 클래스 객체에 의해 생성되고 제어됩니다. 자바에서 스레드를 구현하는 방법은 Runnable 인터페이스를 구현하는 법과 Thread 클래스를 상속받는 법으로 2가지가 있습니다. ⭐ 주 스레드(main thread) : 독립적인 응용 프로그램이 실행될 때, main() 메서드를 실행하기 위한 하나의 사용자 스레드 👀 Runnable 인터페이스를 구현하는 방법 ✔️ 구조 public interface Runnable{ void run(); } ✔️ 과정 Runnable 인터페이스를 구현하는 클래스를 만듭니다. → 이 클래스의 객체는 Runnable의 객체가 됩니다. Thread 타입의 객체를 만들 때, Thread의 생성자에 Runnab..

[코딩 인터뷰]지식 기반 문제 - 데이터베이스 문제

[ JOIN ] 서로 다른 종류의 JOIN은 어떤 것들이 있는가? 각각이 어떻게 다르고 어떤 상황에서 어떤 JOIN과 어울리는지 설명하라. 👀 INNER JOIN / 내부 조인 조건에 부합하는 데이터만 결과 집합에 포함됩니다. 👀 OUTER JOIN / 외부 조인 내부 조인의 모든 결과가 포함되고 추가로 조건에 부합하지 않는 레코드도 일부 포함합니다. ⭐ 종류 LEFT OUTER JOIN / 좌측 외부 조인 : 결과 집합에 왼쪽 테이블의 모든 레코드가 포함됩니다. RIGHT OUTER JOIN / 우측 외부 조인 : 결과 집합에 오른쪽 테이블의 모든 레코드가 포함됩니다. FULL OUTER JOIN / 완전 외부 조인 : 왼쪽과 오른쪽 테이블의 모든 레코드가 결과 집합에 포함됩니다. [ 비정규화 ] 비정..

[코딩 인터뷰]지식 기반 문제 - 데이터베이스

* Microsoft SQL 기준으로 작성하였습니다. [ 정규화 vs 비정규화 데이터베이스 ] 👀 정규화 : 중복을 최소화하도록 설계된 데이터베이스입니다. 데이터베이스에 한 번만 저장해도 된다는 장점이 있지만 상당수의 일상적 질의를 처리하기 위해 JOIN을 많이 하게 되는 단점이 있습니다. 👀 비정규화 : 읽는 시간을 최적화하도록 설계된 데이터베이스입니다. 높은 규모 확장성을 실현하기 위해 자주 사용되는 기법입니다. [ 기본 SQL 문 ] 👀 조회 /* 모든 칼럼 불러오기 */ SELECT * FROM 테이블명 /* 특정 칼럼 불러오기 */ SELECT 칼럼1, 칼럼2 FROM 테이블명 /* 상위 N개의 데이터만 불러오기 */ SELECT TOP N * FROM 테이블명 /* 중목되지 않는 데이터만 불러..

[코딩 인터뷰]지식 기반 문제 - Java 문제

[ private 생성자 ] 상속 관점에서 생성자를 private로 선언하면 어떤 효과가 있나? 생성자가 private으로 선언된 class A는 A의 private 메서드에 접근이 가능해야만 생성자를 호출할 수 있다는 것을 의미합니다. [ finally에서의 반환 ] 자바의 finally 블록은 try-catch-finally의 try 블록 안에 return 문을 넣어도 실행되는가? finally 블록은 try 블록이 종료되는 순간 실행되기 때문에 실행이 됩니다. ⭐ continue, break와 exception을 사용해도 마찬가지로 실행됩니다. 👀 finally 블록이 실행되지 않는 경우 try/catch 수행 중에 가상 머신이 종료됨 try/catch를 수행하고 있던 스레드가 죽음 [ final과..

[코딩 인터뷰]지식 기반 문제 - Java

[ 오버로딩 vs 오버라이딩 ] 👀 오버로딩 : 두 메서드가 같은 이름을 갖고 있으나 인자의 수나 자료형이 다른 경우 public double solve(Circle c){ ... } public double solve(Square s){ ... } 👀 오버라이딩 : 상위 클래스의 메서드와 이름과 용래(signature)가 같은 함수를 하위 클래스에 재정의하는 것 public abstract class Shape{ public void printMe(){ System.out.println("I am a shape."); } public abstract double computeArea(); } public class Circle extends Shape{ private double rad = 5; pub..

[코딩 인터뷰]지식 기반 문제 - C와 C++ 문제

[ 해시테이블 vs STL map ] 1. 해시테이블과 STL map을 비교하여 장단점을 논하라. 2. 해시테이블은 어떻게 구현되는가? 3. 입력의 개수가 적다면, 해시테이블 대신 어떤 자료구조를 활용할 수 있겠는가? 1. 해시테이블 STL map 키에 대한 해시 함수를 호출하여 저장 키를 기준으로 만든 이진 탐색 트리에 키/값 쌍으로 저장 충돌 처리 필요(보통 체이닝 사용) 충돌 처리 필요 없음 삽입 및 탐색 시간(충돌이 적을 경우) O(1) 삽입 및 탐색 시간 O(log N) 2. 해시테이블은 보통 연결리스트 배열로 구현합니다. 키와 값의 쌍을 저장하려면 해시 함수를 사용해서 키 값을 배열의 인덱스 값으로 대응시킨 다음에 해당 위치에 있는 연결리스트에 값을 삽입합니다. 해시테이블은 연결리스트의 배열이..

[코딩 인터뷰]지식 기반 문제 - C와 C++

[ 클래스와 상속 ] C++에서 모든 데이터 멤버와 메서드는 기본적으로 private입니다. public 키워드를 사용하면 그 값을 변경할 수 있습니다. Person이라는 class를 제작하고 Person을 상속하는 Student라는 class를 만들면 다음과 같습니다. #include using namespace std; # define NAME_SIZE 50 // 매크로 정의 class Person{ int id; char name[NAME_SIZE]; public: void aboutMe(){ count aboutMe(); // "I am a student" 출력 Person * p = new Student(); p->aboutMe(); // "I am a person" 출력 파생 클래스에서 재정의..

[코딩 인터뷰]개념과 알고리즘 - 정렬과 탐색

[ 널리 사용되는 정렬 알고리즘 ] 👀 버블 정렬 | 평균 및 최악 실행 시간: O(n^2), 메모리: O(1) : 배열의 첫 원소부터 순차적으로 진행하며, 현재 원소가 그다음 원소의 값보다 크면 두 원소를 바꾸는 작업을 반복합니다. 이 과정을 완전히 정렬된 상태가 될 때까지 반복합니다. JAVA(위키백과) void bubbleSort(int[] arr) { int temp = 0; for(int i = 0; i < arr.length - 1; i++) { for(int j= 1 ; j < arr.length-i; j++) { if(arr[j]

[코딩 인터뷰]개념과 알고리즘 - 시스템 설계 및 규모 확장성

[ 문제를 다루는 방법 ] 면접관과 소통 처음에는 포괄적으로 접근 종이를 사용하여 계획 및 설명 면접관이 우려하는 부분을 인정 가정 시 주의 가정을 명확히 언급 필요하다면 어림잡아 보기 적극적으로 문제 해결하기 [ 시스템 설계: 단계별 접근법 ] 문제의 범위를 한정 합리적인 가정을 만들기 중요한 부분을 먼저 생각하기 핵심 문제점을 파악하기 핵심 문제점을 해결할 수 있도록 다시 설계하기 [ 규모 확장을 위한 알고리즘: 단계별 접근법 ] 질문하기 현실적 제약을 무시하기 현실적 제약에 적용하기 문제를 풀기 [ 시스템 설계의 핵심 개념 ] 👀 수평적(horizontal) vs 수직적(vertical) 규모 확장 수직적 규모 확장 : 특정 노드의 자원의 양을 늘리는 방법 ex) 서버에 메모리 추가하여 서버의 처리..

728x90