[ 필수문제 1번 ]

UDP로 reliable transport 만드는 그 자체로 이미 금기인데..... - _-);;;;

그리고 TCP가 꽤 잘만들어진 물건이라, 하나 고치면 하나 빵꾸남.


예를들어 나는 TCP checksum 관련한 문제를 많이 봤어.

TCP가 IP주소를 차용한 덕에 추상화 계층 침범으로 터널링 때 체크섬 미갱신 문제가 빵빵 터진다던지,

이더넷 프레임 CRC하고 중복되어 연산/전기 낭비다, 뭐 이런 문제점이 있어.


그래서 이걸 없앤다고 가정해보자.

그러면 중간에 CRC를 제대로 처리 안하는 하드웨어가 있다던지

뭔가 기상천외한 물리/데이터링크계층을 쓰는 곳이 있다던지 하면

그 구간 내에서 데이터 손실이 났을 때 검증이 안되는 문제점이 있음.


뭐 이런 느낌으로 푸는 문제 ㅇㅇ


[ 필수문제 2번 ]

시대가 시대이니만큼 EFI+GPT로 가자.

전원버튼 → NVRAM 설정값 로드 EFI 파티션 검색 → EFI 상의 바이너리(부트로더) 검색 및 실행 → 커널 로드 → 기본 서비스 시작 및 드라이버 로드


참 쉽죠?


이게 BIOS의 경우에는

CPU 초기와 직후 HDD에 저장된 MBR을 7C00로 복사라던지 하는 과정이 있고


문제 키워드에 인터럽트 초기화 관련해서 적으라는 것 같은데,

솔직히 어디까지 적으라는건지 잘 모르겠음.

너무 답이 열려있어서 그냥 버려두긔.



[ 필수문제 3번 ]

SQL은 뭐다? 언어.

NoSQL은 CRUD 못하나? 다 하지.

그래서 NoSQL 서버에 SQL로 프론트엔드 단다고 생각하고 하면 못할건 없음.


문제는 인덱싱이나 join 같은 부분에서 성능이 잘 안나올뿐...

근데 NoSQL의 용도나 설계를 고려해볼 때,,, 이건 뭘 해도 절대로 빠르게 안되;;;


범위를 넓혀서 프로시져 같은걸로 가면 골치아픈데

Mongo 같은건 서버단에 JS 함수 저장 가능함.


카싼드라는 백엔드로 돌리면서 살짝 만져본게 전부라 자세히는 모르겠음.



[ 필수문제 4번 - 셀프문제 ]

생략.

이런건 문제라기 보다는 짧은 에세이를 쓰라는 걸로 들리는데...?;;;;



[ 선택문제 1번 ]

테이블에 무게 m이고 마찰계수 u(정지), v(운동)인 쇠붙이와

고정된 자석이 서로 d만큼 떨어져있다고 할 때,

알짜힘 F(m, u, v, d) > 0 을 d에 두고(?) 풀어서 나온 식을 코드로 짜면 된다...는게 일단 정론인데....


이게 문제를 보건데 u와 v가 상수가 아니라 u(x,y), v(x,y)로 두고 풀라는 소리같긴 하다.

근데 이게 컴퓨터공학 문제는 아닌데.....? - _-)?????



[ 선택문제 2번 ]

LD_LIBRARY_PATH. 자세한 설명은 생략한다.
딴것도 있어서 보통 LD_* 이라고 칭하기는 하는데, 그냥 버려.

DLL 인젝션은 설계시 의도하지 않은 DLL을 사용자 쪽에서 강제로 로드시킬 수 있기 때문에
불충분한 권한을 획득한 공격자가 권한상승을 하는데 주로 악용됨 ㅇㅇ

요즘 맛폰 앱들은 static linking으로 나오는데,
솔직히 용량 큰거 말고는 문제 별로 없지 않아?
그리고 내가 *NIX 미니멀리즘 빠돌이라서 당당히 외치건데
DLL 죠까凸

모듈화 시키면 뭐해
ABI 깨지면 다시 맞춰서 컴파일하는게 진짜 똥같고
환경 구성을 잘못해서 디버깅용으로 꽂혀있다던지,
내부 라이브러리가 아니라 외부꺼를 불러서 에러 뿜뿜한다거나
느린 시스템에서는 로딩하다가 밤샌다거나...
static linking은 쿨하게 메모리에 복붙하면 끝인데 말이다!

여담으로 나는 내가 static linking으로 혼자 리눅스 배포판 만들어서 썼음.


[ 선택문제 3번 ]
풀기전에 썰...
절차지향/객체지향과 함수형은 상호배제적인 관계에 있지 않아.
"순수" 함수형의 경우라면 다르긴한데,
기본적으로 서로 다 섞일 수 있는 페러다임임 ㅇㅇ

자바스크립트, 씨쌾, 자바, 파이썬, 전부 다 함수형 개념이 들어가있잖아?
LISP이나 스킴에는 객체지향 없을 것 같아? 다 할 수 있어....
하다못해 패턴 매칭 언어인 Mathematica에서도 객체지향이 되는 판에....

그래서 문제를 푸는데,

    객체지향 = C/C++/Java,

    함수형    = LISP/ML/Haskell

이렇게 가정하고 쓸게.


-   자동차 ECU - 객체지향 - 실시간 처리 유닛으로 자원 요구량 최소화 필요

-   네트워크 라우터 (router) - 객체지향 - 시간요구조건 충족이 우선

-   Android 와 같은 Operating System - 객체지향 - 전력소모량, CPU타임 등 자원량 최적화 필요

-   하이패스와 같은 통행료 징수  시스템 - 객체지향/함수형 - 특별한 요구사항 없음

-   비행기 오토파일럿(Auto-pilot) 시스템 - 객체지향 - 소프트웨어 실행절차 검증 필요

-   기차표 예매 시스템 - 객체지향/함수형 - 특별한 요구사항 없음


객체지향이 많은 이유는,

함수형은 LISP이나 Haskell이나 아직 업계차원의 경험이 부족해서,

돈버는데 쓰라고 추천은 못함...


다만 Lisp의 경우엔 메타프로그래밍을 이용한 생산성 극대화를 꾀할 수 있고

하스켈은 무결점 프로그래밍으로 소프트웨어 에러를 대폭 줄일 수 있는 장점이 있음.

기타 등등.



[ 선택문제 4번 ]
아날로그는 문제점이
허구헌날 간섭이다 부품 마모다 뭐다 해서 계측값이 다 틀어져서
무슨 연산용으로 쓰기가 무척 힘듬 ㅇㅇ
단, 옛날에 있긴 했었다는게 함정. (근데 자세한건 나도 모름.)

3진수도 비슷한 이유로 없는거긴 할텐데,
일단 된다면
(1) 데이터의 응집성(?) 증가
(2) 메모리영역 확대
(3) 숫자 표현 범위 확대
(4) 일부 대수 연산에서의 성능 향상
등등의 장점이 있을 듯.


[ 선택문제 5번 ]
이메일 검증용 정규표현식은 이렇게 생겼으므니다.

RFC는 읽어보고 문제를 낸건지 궁금하다
고로 생략.

[ 선택문제 6번 ]
처음 두개는 그냥 수식 써서 O(1)으로 가자...
세번째꺼는 O(n^2)로 가거나 그냥 손계산 해서 O(1) 해.

이 질문이 멍청한 이유는...
하스켈이나 LISP에서는 compile-time 때 연산도 가능해서...
C++ 템플릿도 잘 쓰면 아마 가능할지도...? (근데 이건 솔직히 자신 없네.)
그러면 별도의 알고리즘 구현 없이도 runtime은 O(1) 만들 수 있음....
대략 이쯤되면 신세계


[ 선택문제 7번 ]
그러라고 floating point가 있는거 아닌가....?;;;;
실수부/지수부 둘 다 bigint로 채워넣으면 될듯? ㅋㅋㅋㅋ
어차피 1차원 배열이고, 정확도와 용량을 쉽게 trade-off 할 수 있으니 문제 없을텐데.


[ 선택문제 8번 ]

지구는 둥그니까~

근데 타원


타원 위의 점과 중심점 간의 거리를 d라고 두고

F = m1*m2/(d^2) 하고,

이걸 중력가속도 g로 나누면 체중이 됨. ㅇㅇ


근데 내가 위도의 수학적 정의를 몰라서 여기까지 밖에 못하겠다.

어차피 시험장에 가면 상수라던지 이런 것도 안주잖아?

버려버려.

그런건 함수 인자로 받아먹는다고 해 ㅇㅇ