사용자가 모든 데이터를 자유롭게 액세스할 수 있다는 설명은 DBMS의 장점이 아니다.
DBMS는 접근 권한 제어로 허가된 사용자에게 허가된 범위의 데이터만 제공하며, 이를 통해 데이터 보안을 유지한다.
- 데이터 중복 제어: 같은 데이터를 한곳에서 관리하므로 저장공간 낭비를 줄이는 장점이다.
- 응용 간 일관성 유지: 여러 응용이 같은 데이터를 공유하므로 값이 서로 어긋나지 않는다.
- 저장 구조와 탐색 기법 제공: 인덱스와 질의 최적화로 효율적인 질의 처리를 지원한다.
- 무결성 관리: 제약조건을 위반하는 데이터의 입력과 변경을 막는다.
플립플롭의 용도는 1비트 정보를 안정적으로 저장하는 것이다.
플립플롭은 0과 1 두 안정 상태 중 하나를 유지하는 순서회로의 기억 소자로, 레지스터 등을 구성하는 기본 단위이다.
- 입력의 1 개수가 짝수인지 홀수인지에 따라 출력하는 기능: 패리티 회로의 동작이다.
- 입력 비트 조합에 따라 출력선 하나만 1로 만드는 기능: 디코더의 동작이다.
- 두 비트의 합과 자리올림을 내는 기능: 반가산기의 동작이다.
- 여러 입력 회선 중 하나를 골라 출력하는 기능: 멀티플렉서의 동작이다.
병합 정렬의 평균 시간 복잡도가 이라는 설명이 옳다.
병합 정렬은 절반씩 나누고 병합하는 과정을 반복하므로 입력 상태와 관계없이 항상 같은 차수의 시간이 걸린다.
- 힙 정렬의 안정성: 힙 구성과 삭제 중 같은 키의 상대 순서가 바뀔 수 있어 불안정 정렬이다.
- 퀵 정렬의 최악 복잡도: 분할이 한쪽으로 치우치면 이 된다.
- 이미 정렬된 입력의 병합 정렬: 분할과 병합을 그대로 수행하므로 이다.
- 삽입 정렬과 퀵 정렬의 비교: 삽입 정렬은 평균 이므로 n이 클수록 퀵 정렬보다 느리다.
Decision tree를 unsupervised learning으로 분류한 설명이 옳지 않다.
Decision tree는 레이블이 있는 학습 데이터로 분류 규칙을 만드는 지도 학습 기법이다. 비지도 학습은 레이블 없이 데이터의 구조를 찾는다.
- 비지도 학습의 정의: 미리 지정된 레이블이나 목표치가 없는 경우에 적용하는 기법이라는 설명은 옳다.
- Clustering: 유사한 데이터를 묶는 대표적인 비지도 학습 기법이다.
- 인공 신경망: 오토인코더처럼 비지도 학습에 활용하는 구조가 있다.
- SVM: 레이블이 있는 데이터로 분류 경계를 학습하는 지도 학습 기법이다.
큐는 뒤(rear)에서 넣고 앞(front)에서 꺼내는 선형 리스트이다.
먼저 들어간 데이터가 먼저 나오는 선입선출(FIFO) 구조여서 대기열 처리에 쓰인다.
- 후입선출 특성: 큐가 아니라 스택의 특성이다.
- 함수 호출과 복귀 처리: 복귀 정보를 역순으로 꺼내야 하므로 스택이 쓰인다.
- 인덱스로 임의 위치에 직접 접근: 배열의 특징이다.
- 노드당 자식이 최대 2개인 구조: 이진 트리의 정의이다.
개발에 소요되는 기간은 10개월이다.
먼저 총 LOC를 생산성으로 나누어 전체 노력(MM)을 구한다.
전체 노력을 인원으로 나누면 개발 기간이 된다.
String name;
public Person(String n) { name = n; }
public void whoRU() {
System.out.println(name+"입니다.");
}
}
class Student extends Person {
String school;
public Student(String n, String s) {
super(n);
school = s;
}
public void whoRU() {
System.out.println(school+"학교에 다니는 "+name+"입니다.");
}
}
public class People {
public static void main(String args[]) {
㉠
obj.whoRU();
} ㉡
}
Person 타입 변수에 Student 객체를 대입한 문장과 으뜸중학교 출력을 함께 제시한 조합이 옳다.
부모 타입 변수로 자식 객체를 참조하는 업캐스팅은 허용되고, 재정의된 메소드는 실제 객체 기준으로 호출되는 동적 바인딩이 적용된다. 따라서 Student의 whoRU()가 실행된다.
- Person 변수에 Student 객체를 넣고 '김철수입니다.'가 출력된다는 조합: 재정의된 Student의 메소드가 호출되므로 출력이 틀리다.
- Student 변수에 new Person을 넣고 '김철수입니다.'가 출력된다는 조합: 부모 객체를 자식 타입 변수에 대입할 수 없어 컴파일 오류이다.
- Student 변수에 Student 객체를 넣고 '김철수입니다.'가 출력된다는 조합: Student의 메소드가 실행되어 학교 이름까지 출력되므로 틀리다.
- Student 변수에 new Person을 넣고 출력이 되지 않는다는 조합: ㉠의 문장 자체가 컴파일되지 않아 넣을 수 있는 문장이 아니다.
JSP는 HTML 코드 안에 자바 코드를 삽입하는 형태로 작성한다.
JSP 페이지는 서버에서 서블릿으로 변환되어 실행되고, 그 결과가 클라이언트로 전달된다.
- 클라이언트 동작 스크립트: JSP는 서버 측에서 실행되는 기술이다.
- 윈도 환경 전용: 자바 기반이어서 서블릿 컨테이너가 있는 여러 운영체제에서 동작한다.
- 서블릿과 배타적 사용: JSP는 서블릿 기술을 기반으로 하며 함께 사용한다.
- 정적 웹 페이지 생성: JSP는 요청에 따라 내용을 만드는 동적 웹 페이지 기술이다.
모든 AP가 유선랜으로 인터넷에 연결되어 있어야 한다는 설명이 옳지 않다.
AP는 무선 백홀로 다른 AP를 거쳐 인터넷에 연결될 수 있으므로, 모든 AP에 유선 연결이 필수인 것은 아니다.
- 표준별 최대 전송속도 차이: 802.11ac처럼 1 Gbps 이상을 지원하는 표준도 있다.
- CSMA/CA: 무선랜은 충돌 감지가 어려워 충돌 회피 방식의 MAC 프로토콜을 사용한다.
- 다수의 채널: 서로 간섭이 적은 채널을 쓰면 가까운 두 쌍도 동시에 통신할 수 있다.
- AP 없는 통신: 애드혹(ad hoc) 모드로 두 컴퓨터가 직접 통신할 수 있다.
프로토콜의 일반적인 기능에 해당하지 않는 것은 비동기화이다.
프로토콜은 송수신 측의 타이밍과 상태를 맞추는 동기화를 수행하므로, 그 반대 개념인 비동기화는 기능으로 꼽지 않는다.
- 주소 지정: 송수신 대상을 식별하는 기능이다.
- 오류 제어: 전송 오류를 검출하고 복구하는 기능이다.
- 데이터 분할 및 조합: 데이터를 전송 단위로 나누고 수신 측에서 다시 합치는 기능이다.
- 흐름 제어 및 캡슐화: 전송량을 조절하고 데이터에 제어 정보를 덧붙이는 기능이다.
교착 상태의 해결 방안에 해당하지 않는 것은 Elimination이다.
교착 상태의 대표적인 해결 방안은 예방, 회피, 탐지, 복구의 네 가지이다.
- Prevention(예방): 교착 상태의 필요조건 중 하나가 성립하지 않도록 한다.
- Avoidance(회피): 자원 할당 시 안전 상태가 유지되는지 확인한다.
- Detection(탐지): 교착 상태 발생 여부를 검사한다.
- Recovery(복구): 프로세스 종료나 자원 선점으로 교착 상태를 해소한다.
INSERT INTO UWORDS VALUES (500, 'THIS', 500);
INSERT INTO UWORDS VALUES (510, 'IS', 600);
INSERT INTO UWORDS VALUES (520, 'TEST', 700);
SELECT UWORD FROM UWORDS WHERE ID > 500;
DELETE FROM UWORDS WHERE FREQ < 600;
COMMIT;
출력 결과에 700이란 숫자는 보이지 않는다.
SELECT는 ID가 500보다 큰 행의 UWORD 컬럼만 조회하므로 IS와 TEST가 출력되고, FREQ 값은 출력되지 않는다.
이어서 DELETE가 FREQ가 600 미만인 THIS 행을 지우므로 테이블에는 IS와 TEST 두 행이 남는다.
- 레코드 개수 3개: DELETE 후 남은 레코드는 2개이다.
- 3개의 레코드 출력: 조건에 맞는 2개만 출력된다.
- 컬럼 개수 2개: 테이블의 컬럼은 ID, UWORD, FREQ의 3개이다.
- TEST 미저장: TEST 행의 FREQ는 700이어서 삭제되지 않는다.
가상주소를 물리주소로 변환하는 일은 프로세스의 실행 중에 이루어진다.
명령어가 메모리를 참조할 때마다 MMU가 페이지 테이블을 이용해 주소를 동적으로 변환한다.
- 주소공간 전체 적재: 필요한 부분만 주기억장치에 적재한다.
- 주소공간 합의 한계: 보조기억장치를 활용하므로 주기억장치 용량보다 클 수 있다.
- 주소 순서의 일치: 연속된 가상주소가 흩어진 물리주소에 배치될 수 있다.
- 모듈 단위의 페이지 크기: 페이지는 고정 크기이며, 논리 단위로 나누는 것은 세그먼테이션이다.
클라이언트 측 데이터베이스의 복제 및 비동기화 기능은 모바일 데이터베이스의 특징에 해당하지 않는다.
모바일 기기는 연결이 끊긴 상태에서도 동작하다가 서버와 다시 연결되면 데이터를 맞추므로, 필요한 기능은 동기화이다.
- 저성능 CPU와 제한된 주기억장치에 탑재: 자원이 적은 모바일 기기에 맞춘 경량성이 특징이다.
- 내장형 데이터베이스: 앱이나 기기 안에 내장되어 동작하는 형태이다.
- SQLite: 모바일 앱에서 널리 쓰는 내장형 데이터베이스이다.
- DB2 Everyplace: IBM의 모바일 기기용 데이터베이스 제품이다.
UDP와 TCP에 공통으로 해당하는 것은 헤더의 체크섬(checksum) 필드이다.
두 프로토콜 모두 헤더에 체크섬 필드를 두어 오류 검출에 활용한다. 나머지 기능은 연결형 신뢰성 프로토콜인 TCP에만 해당한다.
- 손실 데이터 재전송: TCP의 기능으로, UDP는 재전송하지 않는다.
- 수신 데이터 순서 재정렬: TCP가 순서 번호로 수행하며, UDP는 순서를 보장하지 않는다.
- 혼잡 시 전송 속도 감소: TCP의 혼잡 제어이며, UDP에는 없다.
- 수신 여부 확인: TCP가 ACK로 확인하며, UDP에는 확인 응답이 없다.
프로세스 특성에 따라 할당량을 다르게 주는 선점 방식은 Multi-level Feedback Queue이다.
이 기법은 프로세스의 CPU 사용 형태에 따라 큐 사이를 이동시키며, 입출력 위주 프로세스를 높은 우선순위에 두고 큐마다 다른 할당량을 적용한다.
- Round-Robin: 프로세스 특성과 무관하게 동일한 시간 할당량을 부여한다.
- Shortest Job First: 실행 시간이 짧은 작업을 먼저 처리하는 기법으로, 기본형은 비선점이다.
- Highest Response ratio Next: 대기 시간을 반영한 응답 비율로 고르는 비선점 기법이다.
- Deadline: 작업의 마감 시간을 기준으로 스케줄링한다.
시스템버스에 입출력버스를 포함한 설명이 옳지 않다.
시스템버스는 용도에 따라 주소버스, 데이터버스, 제어버스의 세 가지로 구성된다.
- 구성요소의 물리적 연결: 하드웨어 구성요소 사이의 데이터 통로를 제공한다는 설명은 옳다.
- 주소버스: 읽거나 쓸 위치의 주소를 전달하는 통로이다.
- 제어버스: 주소버스와 데이터버스의 동작을 제어하는 신호를 전달한다.
- 데이터버스: 읽기와 쓰기 모두에 쓰이는 양방향 통로이다.
{
if (dsize > 0)
return ㉠;
return 0;
}
㉠에는 *data + sum(data + 1, dsize - 1)이 들어가야 한다.
현재 원소 값에 나머지 배열의 합을 더하는 재귀 구조이다. 포인터는 다음 원소로 전진하고 크기는 1씩 줄어, dsize가 0이 되면 0을 반환하며 끝난다.
예를 들어 {1, 2, 3}이면 1 + (2 + (3 + 0)) = 6이 된다.
- *data + sum(data - 1, dsize + 1): 포인터가 뒤로 가고 크기가 커져 재귀가 끝나지 않는다.
- data + sum(data - 1, dsize + 1): 원소 값이 아닌 주소를 쓰고, 재귀도 끝나지 않는다.
- *data + sum(data - 1, dsize - 1): 포인터가 배열의 앞쪽으로 벗어난다.
- data + sum(data + 1, dsize - 1): *가 없어 원소 값이 아닌 포인터를 더하게 된다.
예외가 발생할 가능성이 있는 문장은 try 블록에 넣는다.
try에서 예외가 발생하면 맞는 catch 블록이 처리하고, finally 블록은 예외 발생 여부와 관계없이 실행된다.
- throw: 정상 처리를 알리는 것이 아니라 예외를 발생시키는 명령이다.
- catch 블록: 예외가 발생했을 때 처리할 문장을 넣는 곳이며, 항상 실행되는 블록은 finally이다.
- finally 블록: 예외가 발생한 경우에도 실행되어 자원 해제 같은 뒤처리를 맡을 수 있으므로, 처리할 수 없다는 단정은 틀리다.
- 처리되지 않은 예외: 무시되지 않고 호출한 쪽으로 전파되며, 끝내 처리되지 않으면 프로그램이 비정상 종료된다.
나선형 모델이 시간과 비용이 적게 든다는 설명이 옳지 않다.
나선형 모델은 위험 분석을 포함한 주기를 반복하므로 위험 관리에는 유리하지만, 시간과 비용이 많이 든다.
- 대표 모델 나열: 프로토타입, 폭포수, 익스트림 프로그래밍, 나선형 모델은 모두 생명주기 모델로 다룬다.
- 폭포수 모델: 단계를 순차적으로 진행하는 가장 전통적인 모델이다.
- 프로토타입 모델: 시제품으로 사용자의 의견을 받아 요구사항을 다듬는다.
- 익스트림 프로그래밍: 짧은 반복과 잦은 고객 참여를 중시해 소규모 개발에 유리하다.