2022.07.25 업데이트
객체 지향 설계
함수형 프로그래밍
함수형 프로그래밍은 순수 함수의 조합으로 소프트웨어를 설계하는 방식이다.
** 순수 함수란 함수의 수행으로 side effect (메모리의 값을 직접 수정하는 행위)가 발생하지 않는 함수를 말한다.
객체 지향 프로그래밍의 단점 중 하나는 객체가 상태로 표현되는 것이다.
따라서 객체는 프로그래머가 의도하지 않은 상태를 가질수도 있다.
RestAPI
REST는 자원(Resource), 행위(Verb), 표현(Representations)으로 구성된 API 아키택쳐이다.
웹의 장점과 HTTP의 우수성을 적극 활용할 수 있는 아키텍처로 URI를 통해서 자원을 명시하고 POST, GET, PUT, PATCH, DELETE등의 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 |