CS Interview

프로그래밍 지식 - CS면접 총정리

게임이 더 좋아 2021. 11. 23. 17:22
반응형
728x170

2022.07.25 업데이트

 

 

객체 지향 설계

 

함수형 프로그래밍

더보기

함수형 프로그래밍은 순수 함수의 조합으로 소프트웨어를 설계하는 방식이다.

** 순수 함수란 함수의 수행으로 side effect (메모리의 값을 직접 수정하는 행위)가 발생하지 않는 함수를 말한다.

객체 지향 프로그래밍의 단점 중 하나는 객체가 상태로 표현되는 것이다.

따라서 객체는 프로그래머가 의도하지 않은 상태를 가질수도 있다. 

 

RestAPI

더보기

REST는 자원(Resource), 행위(Verb), 표현(Representations)으로 구성된 API 아키택쳐이다.

 

웹의 장점과 HTTP의 우수성을 적극 활용할 수 있는 아키텍처로 URI를 통해서 자원을 명시하고 POSTGETPUTPATCHDELETE등의 Method를 통해서 해당 자원의 행위를 지정한다.

 

 

GC

 

 

 

 

C++

 

비트 조작(bit)

더보기

^ : XOR,   ~ : NOT,    &: AND,    | : OR

 

** XOR의 특징(암호화에도 많이씀)

X ^ 0s = X -> 임의의 비트 X와 모든 비트가 0인 것과 XOR한 결과는 자기 자신이다.

X ^ 1s = ~X -> 임의의 비트 X와 모든 비트가 1인 것과 XOR한 결과는 NOT 자기 자신이다.

X ^ X = 0 -> 자기 자신과의 XOR은 0이다. (같으면 0이고 다르면 1인 특성 때문)

 


 

기본적으로 4비트일 때는 -7 부터 7까지를 표현할 수 있다.

맨 앞비트를 Sign bit로 쓴다.

-1 : 1 111    -2 : 1 110    -3 : 1 101  -4 : 1 100   -5 : 1 011  -6 : 1 010  -7 : 1 001

-> 음수를 표현할 때는 4bit에서는 1000 에서 자기숫자를 뺀 값을 넣는다.

ex)  -1 은 1000(8) - 0001(1) 이다.

다시 살펴보면 모든 수 에서 최상위 비트(Sign bit)를 빼고 생각해보자

7은 111 이고  -1도 111이다. 두 수는 같으며 절댓값을 취해서 더하면 8이 된다.

6은 110 이고  -2는 110이다. 두 수는 같으며 절댓값을 취해서 더하면 8이 된다.

 

즉, 음수를 모르겠다??

4bit일 때 -3을 모르겠다??

3이랑 더해서 8이되는 5를 표현해보자 101이다.

맞나?? 맞다.

 

 

소수

더보기

1. 소수 판별

bool isPrime(int n){
    if(n < 2) return false; // 1은 소수가 아니다.
    
    int sqrt = Math.sqrt(n); // n의 제곱근을 넘을 필요는 없다. 
    //(n = a * b 일 때 a > sqrt(n)이라면 자동적으로 b < sqrt(n)이 있다)
    // -> 소수가 아니라면 진작에 제곱근이나 그 전에 나누어진다는 말이다.
    for(int i = 2; i<=sqrt; i++){
        if(n % i == 0) return false;
    }
    return true;
}

 

2. 에라토스테네스의 체

 

2가지 선행함수

// 체를 걸러내는 함수 -> 배열의 포인터를 직접 참조해서 수정
check(bool[] flags, int prime){
    //prime의 배수들을 제거함 prime 보다 배수를 찾는 과정에서
    // prime 보다 작은 수들과의 곱은 세지 않아도 됨 -> prime * prime부터 지워나감
    // ex) prime이 5라면 5*2 는 2를 걸러낼 때 이미 사라져있음
    for (int i = power(prime,2); i<flags.size(); i++){
        flags[i] = flase; // 체로 걸러지면 false;
    }
}
int getNext(bool[] flags, int prime){
    int next = prime + 1; // 우선 다음이라고 가정하고
    
    //실제로 true인지, false라면 범위 안에서 next 다음 원소를 조사
    while(next < flags.size() && !flags[next]){
        next++;
    }
    return next;
}

 

본 함수

//max 까지의 배열 중 소수인 것들
bool[] Eratosthenes(int max){
    bool[] flags  = new bool[max + 1]; //배열의 동적 할당 0부터시작하므로 1크게
    int count = 0; // 소수의 개수를 셈
    
    init(flags); //쓰기 전 초기화 (0과 1은 소수가 아니므로 제외하고 나머지를 true로 초기화)
    int prime = 2;
    
    //어차피 그 이상의 수들은 이미 지워짐 sqrt까지만 해도 괜찮음
    while(prime <= Math.sqrt(max)){
        //prime의 배수를 지움 -> false로 바꿈
        check(flags, prime);
        
        // 체크 후 true인 index를 순서대로 찾아서 다시 체로 거름
        prime = getNext(flags, prime);
    }
    
    return flags; //연산된 배열 반환
}

 

2의 보수

 

반응형
그리드형

'CS Interview' 카테고리의 다른 글

SQL - 기본  (0) 2021.11.29
네트워크 - CS 면접 총정리  (0) 2021.11.23
자료구조 및 알고리즘 - CS 면접 총정리  (0) 2021.11.22
데이터 베이스 - CS 면접 총정리  (0) 2021.11.22
운영체제 - CS 면접 총정리  (0) 2021.11.22