CS 및 기술면접 독서 블로깅(일부)
개발자에게 필요한 핵심 역량 = "근거를 설명하는 능력"
: 특정 코드가 어떻게 작동하는지, 왜 특정 성능을 내는지, <- 상당부분 컴퓨터 과학에서 찾을 수 있다
=> 원리를 모르는 개발자는 뛰어난 개발자가 아니다!
스파게티 코드(문제를 만났을때 그저 구글링을 통해 옷감을 기우듯이 복사 붙여넣기를 반복해서 만든 엉킨 코드)를 만들지 말자
생성형 AI는 언제나 일관되고 정확한 진단을 하는 것이 아니니 의존하지 말자
구조 지도를 통해, 주제의 흐름을 시각적으로 바로 파악할 수 있는 점이 매우 장점이었다.
실무를 위한 개발의 재료를 얼마나 갖고 있는지!
참고) 개발자를 위한 컴퓨터 과학 용어집 (https://csnote.net/)
CPU : ALU, CU, register
캐시 메모리
메모리 : ROM, RAM(하드웨어) / 주소, 휘발성
보조기억장치 : 비휘발성
메인보드 : (시스템)버스=통로
*저장장치의 계층구조
비트 bit (2)
바이트 byte(2^8)
등등 -> 프로그램의 관점에서 본 정보 단위 (프로그램의 크기)
워드 word -> CPU의 관점에서 본 정보 단위 -> 32비트, 64비트
데이터(0과 1)표현 방법
2진법, 10진법, 16진법(네트워크의 IPv6 주소)
문자 집합
문자 인코딩
문자 디코딩
문자 인코딩
아스키 (2^8 = 2^7 문자표현 + 2^1 패리티 비트), 아스키 코드
EUC-KR : 한글 인코딩 방식
유니코드 : 다양한 언어 인코딩 방식. UTR-8, 16, 32
base64
명령어 : 연산코드(동작/연산자) + 오퍼랜드(재료,위치/피연산자)
스택 Stack : 후입선출(LIFO) / PUSH, POP
기계어 -> 어셈블리어
같은 프로그램일지라도 CPU마다 이해하는 명령어가 다르면 실행이 불가하다
예) 인텔 CPU, 애플의 CPU
명령어 사이클 (인출 사이클, 실행 사이클, 간접 사이클, 인터럽트 사이클)
레지스터 종류와 역할
프로그램 카운터 or 명령어 포인터
명령어 레지스터
범용 레지스터
플래그 레지스터 *플래그flag란?
스택 포인터
회로나 하드웨어적인 것까지 모두 알 필 필요는 없으며, 개발자가 알아야하는 배경지식에 초점을 맞출 수 있음.
(중요)인터럽트 interrupt : CPU의 작업을 방해하는 신호
동기 인터럽트 : 예상치못한 상황을 마주쳤을 때 발생. 예외exception
비동기 인터럽트 : 입출력장치에 의해 발생. 알림alert의 역할