| C \ AB | 00 | 01 | 11 | 10 |
|---|---|---|---|---|
| 0 | 1 | 0 | 0 | X |
| 1 | X | 0 | 1 | 1 |
카르노맵을 최적화한 논리식은 이다.
AB가 00과 10인 두 열은 1과 X로만 이루어져 있으므로, X를 1로 보고 네 칸을 묶으면 B가 0인 경우를 뜻하는 이 된다.
남은 1인 칸(AB=11, C=1)은 바로 옆 칸(AB=10, C=1)과 묶으면 A와 C가 모두 1인 경우를 뜻하는 가 된다.
- 는 AB=00, C=0 칸의 1을 덮지 못하고, AB=01, C=1 칸의 0을 1로 만든다.
- 는 AB=00, C=0 칸의 1을 덮지 못하고, 0이어야 할 AB=01 열까지 1로 만든다.
- 는 AB=01 열 전체를 1로 만들지만, 이 열은 모두 0이다.
- 는 0인 칸(AB=11, C=0)만 1로 만들 뿐, 1인 칸은 하나도 덮지 못한다.
Intel Core i3가 CISC 방식을 적용한 프로세서다.
인텔 코어 계열은 x86 명령어 집합을 사용하며, x86은 복잡한 가변 길이 명령어를 갖춘 대표적인 CISC 구조다.
- Apple A14: ARM 계열 프로세서로 RISC 구조다.
- Qualcomm Snapdragon 860: ARM 계열 모바일 프로세서로 RISC 구조다.
- Samsung Exynos 850: ARM 계열 모바일 프로세서로 RISC 구조다.
- MIPS microAptiv: MIPS 명령어 집합을 쓰는 대표적인 RISC 프로세서다.
폴링의 단점은 프로세서가 반복적으로 I/O 장치의 상태를 체크해야 한다는 것이다.
요청이 없어도 상태를 계속 확인하므로 프로세서 시간이 낭비된다.
- 문맥교환으로 대기 중 다른 작업을 처리한다는 설명: 인터럽트 방식의 장점이다.
- 문맥교환 없이 요청을 처리한다는 설명: 폴링의 장점에 해당하므로 단점이 아니다.
- 문맥교환을 빈번하게 수행한다는 설명: 요청마다 처리 루틴으로 전환하는 인터럽트 방식의 부담이다.
- I/O 장치의 요청이 있어야 처리 루틴을 시작한다는 설명: 인터럽트 방식의 동작이다.
ㄴ.NULL인 데이터를 검색할 때 IS NULL을 사용한다.
ㄷ.NULL은 값이 없으므로 “0(Zero)” 값을 가지고 있다.
옳은 설명은 ㄱ, ㄴ이다.
NULL은 값이 없음을 나타내는 표시로, 0이나 공백 문자와는 다르다.
- ㄱ(옳음): NULL은 값이 존재하지 않음을 나타내는 특별한 표시어다.
- ㄴ(옳음): NULL은 등호로 비교할 수 없으므로 IS NULL로 검색한다.
- ㄷ(틀림): NULL은 값이 없다는 뜻이지 0이라는 값을 가진 것이 아니다.
설명에 해당하는 기술은 블록체인(Blockchain)이다.
블록체인은 여러 참여자가 같은 데이터를 분산 원장으로 함께 보관하므로 누구도 임의로 수정하기 어렵고, 참여자는 변경 결과를 열람할 수 있다.
- 트랜잭션: 데이터베이스에서 한 번에 처리되는 논리적 작업 단위다.
- 해시함수: 임의 길이의 입력을 고정 길이 값으로 바꾸는 함수로, 분산 저장 기술 자체가 아니다.
- 데이터 마이닝: 대량의 데이터에서 유용한 패턴을 찾아내는 분석 기법이다.
- 인공신경망: 생물의 신경망을 본떠 학습하는 기계학습 모델이다.
완성된 이진 탐색 트리의 단말 노드는 6개다.
입력 순서대로 루트 12부터 비교해 작으면 왼쪽, 크면 오른쪽으로 내려가 삽입하면 각 노드의 자식은 아래와 같다.
- 12: 왼쪽 7, 오른쪽 16
- 7: 왼쪽 5, 오른쪽 10
- 5: 왼쪽 2, 오른쪽 6
- 16: 왼쪽 15, 오른쪽 28
- 28: 왼쪽 23, 오른쪽 60
- 23: 오른쪽 25
- 60: 왼쪽 31
- 31: 오른쪽 35
자식이 없는 노드는 2, 6, 10, 15, 25, 35뿐이다.
설명에 해당하는 방법은 회귀 테스트(Regression Test)다.
회귀 테스트는 수정으로 인해 기존에 정상이던 부분에 새 오류가 생기지 않았는지 다시 확인한다.
- 인수 테스트: 사용자가 요구사항 충족 여부를 확인하고 인수를 결정하는 테스트다.
- 통합 테스트: 모듈을 결합하며 모듈 간 인터페이스를 검사하는 테스트다.
- 단위 테스트: 개별 모듈을 단독으로 검사하는 테스트다.
- 시스템 테스트: 통합된 시스템 전체가 요구사항을 만족하는지 검사하는 테스트다.
클래스 B에 해당하는 주소는 180.100.150.25다.
첫 옥텟이 128~191이면 클래스 B이고, 1~126은 클래스 A, 192~223은 클래스 C다.
- 100.200.150.25: 첫 옥텟 100으로 클래스 A다.
- 126.255.150.25: 첫 옥텟 126으로 클래스 A다.
- 192.168.150.25: 첫 옥텟 192로 클래스 C다.
- 203.252.150.25: 첫 옥텟 203으로 클래스 C다.
GPU가 자주 이용되는 이유는 대량의 간단한 연산을 병렬로 빠르게 처리하는 데 적합하기 때문이다.
기계학습과 블록체인의 연산은 단순 계산의 대량 반복이 많아, 많은 연산 유닛을 동시에 쓰는 병렬 구조에서 효율이 높다.
- ALU가 적다는 설명: GPU는 CPU보다 훨씬 많은 ALU를 갖는다.
- 분기문 처리에 효과적이라는 설명: 복잡한 분기 처리는 CPU가 더 뛰어나다.
- 전력을 적게 소모한다는 설명: 고성능 GPU는 전력 소모가 크며 사용 이유도 전력 절감이 아니다.
- 트랜지스터 수가 적다는 설명: GPU는 많은 연산 유닛을 넣기 위해 트랜지스터를 많이 집적하며, 적은 수가 이유가 될 수도 없다.
| public class A1 { |
| public int x; |
| private int y; |
| protected int z; |
| … |
| } |
| public class A2 extends A1 { |
| protected int a; |
| private int b; |
| … |
| } |
| public class A3 extends A2 { |
| private int q; |
| … |
| } |
A3 클래스에서 사용할 수 있는 변수는 x, z, a, q다.
하위 클래스는 상위 클래스의 public·protected 멤버에 접근할 수 있지만 private 멤버는 선언한 클래스 안에서만 쓸 수 있다. 따라서 x, z, a는 상속으로 접근하고 q는 A3 자신의 변수이며, y와 b는 접근할 수 없다.
- x, q: protected인 z와 a가 빠져 있다.
- x, y, b, q: y와 b는 각각 A1, A2의 private 변수다.
- x, y, z, q: y는 A1의 private 변수이고 a가 빠져 있다.
- x, y, z, a, b, q: private 변수인 y와 b까지 포함했다.
B. SRAM(Static RAM)
C. DRAM(Dynamic RAM)
D. 플래시 메모리(Flash Memory)
빠른 순서는 SRAM → DRAM → 플래시 메모리 → 마그네틱 디스크다.
SRAM은 캐시, DRAM은 주기억장치에 쓰이고, 보조기억장치 중에서는 기계적 동작이 없는 플래시 메모리가 디스크보다 빠르다.
- A-B-C-D: 가장 느린 마그네틱 디스크를 맨 앞에 두었다.
- B-D-C-A: 플래시 메모리를 DRAM보다 앞에 두었다.
- C-B-A-D: DRAM을 SRAM보다, 디스크를 플래시 메모리보다 앞에 두었다.
- D-C-A-B: 가장 빠른 SRAM을 맨 뒤에 두었다.
선점형이 아닌 것은 HRN 스케줄링이다.
HRN은 대기 시간과 서비스 시간으로 구한 응답률이 높은 작업을 고르며, 한 번 실행되면 끝날 때까지 CPU를 빼앗기지 않는 비선점형이다.
- MFQ: 시간 할당이 끝난 프로세스를 하위 큐로 내리며, 상위 큐의 프로세스가 선점할 수 있다.
- RR: 할당 시간이 끝나면 CPU를 빼앗겨 대기 큐 뒤로 간다.
- MLQ: 우선순위가 높은 큐의 프로세스가 낮은 큐의 프로세스를 선점할 수 있다.
- SRT: 남은 실행 시간이 더 짧은 프로세스가 도착하면 CPU를 넘겨준다.
페이지 부재는 6회, 페이지 교체는 2회다.
프레임 4개가 빈 상태에서 0, 1, 7, 2는 부재 4회로 적재만 되고 교체는 없다.
3 참조: 부재, 가장 먼저 들어온 0을 교체해 프레임은 1, 7, 2, 3이 된다.
2, 7, 1 참조: 모두 적중이다.
0 참조: 부재, 1을 교체해 프레임은 7, 2, 3, 0이 된다.
3 참조: 적중이다.
- 부재 6회·교체 3회: 교체는 3과 0을 참조할 때 2회만 일어난다.
- 부재 7회·교체 2회: 초기 적재 4회와 교체 2회를 합한 부재는 6회다.
- 부재 7회·교체 3회: 교체가 2회이므로 부재도 교체도 1회씩 많다.
- 부재 8회·교체 3회: 2, 7, 1과 마지막 3은 적중이므로 부재가 8회에 이르지 않는다.
유일성은 만족하지만 최소성은 만족하지 못하는 키는 슈퍼키(Super Key)다.
슈퍼키는 튜플을 유일하게 식별할 수 있는 속성 집합이며, 불필요한 속성이 포함될 수 있어 최소성을 보장하지 않는다.
- 기본키: 후보키 중 선택된 키로 유일성과 최소성을 모두 만족한다.
- 대체키: 기본키로 선택되지 않은 후보키로 유일성과 최소성을 모두 만족한다.
- 복합키: 둘 이상의 속성으로 구성된 키를 뜻하며, 유일성과 최소성으로 구분한 개념이 아니다.
- 후보키: 유일성과 최소성을 모두 만족하는 키다.
설명에 해당하는 자료구조는 데크(Deque)다.
데크는 Double-Ended Queue의 줄임말로, 양쪽 끝 모두에서 삽입과 삭제가 가능하다.
- 스택: 한쪽 끝에서만 삽입과 삭제가 이루어진다.
- 큐: 한쪽 끝에서 삽입하고 반대쪽 끝에서 삭제한다.
- 히프: 부모와 자식의 크기 관계를 유지하는 완전 이진 트리로 비선형 구조다.
- 이진 트리: 각 노드의 자식이 최대 둘인 비선형 구조다.
옳지 않은 것은 구현 과정에서 완벽히 제작하여 시험 단계를 생략한다는 설명이다.
구현 뒤에는 품질 보증을 위해 시험 단계를 반드시 거쳐 오류를 찾아 수정해야 한다.
- 계획: 목표를 세우고 진행 상황을 관리할 행동 방안을 마련하는 과정이다.
- 요구사항 문서화: 요구사항을 관계자 모두가 이해하기 쉬운 명세서로 작성하는 과정이다.
- 설계: 요구사항을 반영해 변화에 적응하기 쉽고 유지보수가 용이하도록 설계서를 작성하는 과정이다.
- 시험과 유지 및 보수: 오류를 발견해 수정하고 배포 후 사용 중 생기는 문제를 관리하는 과정이다.
설명에 해당하는 기술은 빔 포밍(Beam Forming)이다.
빔 포밍은 다수의 안테나 신호를 조정해 무선 신호를 특정 방향으로 집중시켜 전송한다.
- 광대역 부호 다중 분할 접속: 부호로 사용자를 구분하는 3세대 이동통신의 접속 방식이다.
- 펨토셀: 실내 등 좁은 영역을 담당하는 초소형 기지국이다.
- 주파수 집성기술: 여러 주파수 대역을 묶어 하나처럼 사용해 속도를 높이는 기술이다.
- 고속 하향 패킷 접속: 3세대 이동통신의 하향 데이터 전송 속도를 높인 기술이다.
ㄴ. FTP 프로토콜에서 제어 연결은 20번 포트, 데이터 연결은 21번 포트를 사용한다.
ㄷ. FTP 연결은 능동(Active) 전송 모드와 수동(Passive) 전송 모드로 구분한다.
옳은 설명은 ㄱ, ㄷ이다.
FTP는 제어 연결과 데이터 연결을 분리해 사용하며, 표준 포트는 제어 연결이 21, 데이터 연결이 20이다.
- ㄱ(옳음): FTP는 TCP 위에서 동작하는 응용 계층 프로토콜이다.
- ㄴ(틀림): 제어 연결과 데이터 연결의 포트가 서로 뒤바뀌어 있다.
- ㄷ(옳음): 데이터 연결을 서버가 시작하면 능동 모드, 클라이언트가 시작하면 수동 모드다.
설명에 해당하는 기법은 비잔틴 장애 허용(Byzantine Fault Tolerance)이다.
일부 노드가 고장 나거나 악의적으로 동작해도, 그 수가 전체의 3분의 1보다 적으면 나머지 노드의 합의로 시스템이 정상 작동한다.
- 지분증명: 보유한 지분에 따라 블록 생성 권한을 부여하는 합의 방식이다.
- 위임된 지분증명: 지분 보유자가 뽑은 대표자가 블록을 생성하는 합의 방식이다.
- 작업증명: 많은 계산을 수행해 문제를 푼 노드가 블록을 생성하는 합의 방식이다.
- 샤딩: 네트워크와 데이터를 여러 조각으로 나누어 처리량을 높이는 확장성 기술이다.
옳지 않은 것은 POST 방식보다 GET 방식을 사용한다는 설명이다.
GET 방식은 입력값이 URL에 그대로 노출되어 기록에 남기 쉬우므로, 입력 폼에는 POST 방식을 쓰는 것이 안전하다.
- 허용된 확장자만 업로드: 화이트리스트로 악성 파일 업로드를 막는 올바른 기법이다.
- 스크립트 관련 문자열 필터링: 크로스 사이트 스크립팅을 막는 올바른 기법이다.
- 인자화된 질의문 사용: SQL 삽입을 막는 올바른 기법이다.
- 부적절한 외부 입력이 명령어로 쓰일 가능성 배제: 명령어 삽입을 막는 올바른 기법이다.