반응형
✅ 2022년 04월 24일
💡 61. C언어에서 문자열 처리 함수의 서식과 그 기능의 연결로 틀린 것은?
- strlen(s): s의 길이를 구한다.
- strcpy(s1, s2): s2를 s1으로 복사한다.
strcmp(s1, s2): s1과 s2를 연결한다.- strrev(s): s를 거꾸로 변환한다.
- strcmp(s1, s2): 문자열 s1과 문자열 s2를 비교하여, s1이 s2보다 앞에 있으면 음수, s2가 s1보다 앞에 있으면 양수, 같으면 0을 반환하는 함수
- strcat(s1, s2): 문자열 s2를 문자열 s1의 끝에 연결하는 함수
💡 62. 다음 C언어 프로그램이 실행되었을 때, 실행 결과는?
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 5, b = 3, c = 12;
int t1, t2, t3;
t1 = a && b;
t2 = a || b;
t3 = !c;
printf("%d", t1 + t2 + t3);
return 0;
}
- 0
- 2
- 5
- 14
#include <stdio.h>
int main(int argc, char *argv[])
{
// 변수 선언과 초기화
int a = 5, b = 3, c = 12;
int t1, t2, t3;
// 논리 연산 후 결과를 변수에 대입
t1 = a && b; // a와 b가 모두 참이면 t1에 1(참)을 대입, 그렇지 않으면 0(거짓)을 대입
t2 = a || b; // a와 b 중 하나라도 참이면 t2에 1(참)을 대입, 그렇지 않으면 0(거짓)을 대입
t3 = !c; // c가 거짓이면 t3에 1(참)을 대입, 그렇지 않으면 0(거짓)을 대입
// 결과 출력
printf("%d", t1 + t2 + t3); // t1, t2, t3를 더한 결과를 출력
// 프로그램 종료
return 0;
}
💡 63. 다음 C언어 프로그램이 실행되었을 때, 실행 결과는?
#include <stdio.h>
struct st
{
int a;
int c[10];
};
int main(int argc, char *argv[])
{
int i = 0;
struct st ob1;
struct st ob2;
ob1.a = 0;
ob2.a = 0;
for (i = 0; i < 10; i++)
{
ob1.c[i] = i;
ob2.c[i] = ob1.c[i] + i;
}
for (i = 0; i < 10; i = i + 2)
{
ob1.a = ob1.a + ob1.c[i];
ob2.a = ob2.a + ob2.c[i];
}
printf("%d", ob1.a + ob2.a);
return 0;
}
- 30
- 60
- 80
- 120
#include <stdio.h>
struct st
{
int a;
int c[10];
};
int main(int argc, char *argv[])
{
// 변수 선언과 초기화
int i = 0;
struct st ob1;
struct st ob2;
ob1.a = 0;
ob2.a = 0;
// 구조체 변수의 배열에 값 할당
for (i = 0; i < 10; i++)
{
ob1.c[i] = i;
ob2.c[i] = ob1.c[i] + i;
}
// 구조체 변수의 일부 요소를 더하여 다른 변수에 대입
for (i = 0; i < 10; i = i + 2)
{
ob1.a = ob1.a + ob1.c[i];
ob2.a = ob2.a + ob2.c[i];
}
// 두 구조체 변수의 a 요소를 더한 결과 출력
printf("%d", ob1.a + ob2.a);
// 프로그램 종료
return 0;
}
💡 64. IP 프로토콜에서 사용하는 필드와 해당 필드에 대한 설명으로 틀린 것은?
- Header Length: IP 프로토콜의 헤더 길이를 32비트 워드 단위로 표시한다.
Packet Length: IP 헤더를 제외한 패킷 전체의 길이를 나타내며 최대 크기는 232-1비트이다.- Time To Live: 송신 호스트가 패킷을 전송하기 전 네트워크에서 생존할 수 있는 시간을 지정한 것이다.
- Version Number: IP 프로토콜의 버전번호를 나타낸다.
패킷 길이(Packet Length)
- 통신에서 전송되는 데이터를 일정한 크기의 작은 조각으로 나눈 길이
- IP 헤더 및 데이터를 포함한 IP 패킷 전체 길이를 바이트 단위로 표시
- 최대 크기는 65,535
💡 65. 다음 Python 프로그램의 실행 결과가 [실행결과]와 같을 때, 빈칸에 적합한 것은?
x = 20
if x == 10:
print('10')
(빈칸) x == 20:
print('20')
else:
print('other')
// 실행결과
20
- either
- elif
- else if
- else
x = 20
if x == 10: # x의 값이 10인지 확인
print('10') # x의 값이 10이면 '10' 출력
elif x == 20: # x의 값이 10이 아니고 20인지 확인
print('20') # x의 값이 20이면 '20' 출력
else: # x의 값이 10도 아니고 20도 아닌 경우
print('other') # 'other' 출력
💡 66. RIP(Routing Information Protocol)에 대한 설명으로 틀린 것은?
- 경로 선택 메트릭은 홉 카운트(hop count)이다.
라우팅 프로토콜을 IGP와 EGP로 분류했을 때 EGP에 해당한다.- 최단 경로 탐색에 Bellman-Ford 알고리즘을 사용한다.
- 각 라우터는 이웃 라우터들로부터 수신한 정보를 이용하여 라우팅 표를 갱신한다.
RIP, Routing Information Protocol
- 라우팅(Routing)을 위한 정보 교환 프로토콜
- 거리 벡터(Distance Vector) 알고리즘을 사용하여 최단 경로를 찾는 라우팅 프로토콜
- 내부 게이트웨이 프로토콜(IGP, Interior Gateway Protocol)
자율 시스템(AS, Autonomous System): 하나 이상의 IP 네트워크와 라우팅 정책을 관리하는 독립된 네트워크 시스템이며,
- 내부 게이트웨이 프로토콜(IGP, Interior Gateway Protocol): 자율 시스템 내부에서 라우팅 정보를 교환하는 프로토콜
- 외부 게이트웨이 프로토콜(EGP, Exterior Gateway Protocol): 자율 시스템 간에 라우팅 정보를 교환하는 프로토콜
💡 67. 다음에서 설명하는 프로세스 스케줄링은?
최소 작업 우선 기법의 약점을 보완한 비선점 스케줄링 기법으로 다음과 같은 식을 이용해 우선순위를 판별한다.
[우선순위 = (대기한 시간 + 서비스를 받을 시간) / 서비스를 받을 시간]
- FIFO, First-In-First-Out 스케줄링: 먼저 도착한 작업을 먼저 처리하는 스케줄링 알고리즘
- RR, Round-Robin 스케줄링: 각 프로세스에 일정한 시간 할당량을 부여하고, 할당된 시간이 지나면 다른 프로세스로 전환하는 스케줄링 알고리즘
- HRN, Highest Response Ratio Nex 스케줄링: 대기 시간과 서비스 시간을 모두 고려하여 우선순위를 계산하고, 우선순위가 가장 높은 작업을 먼저 처리하는 스케줄링 알고리즘
- MQ, Multi-Level Feedback Queue 스케줄링: 여러 개의 큐를 사용하여 각 큐마다 다른 우선순위를 부여하고, 프로세스의 우선순위에 따라 큐를 이동시키며 스케줄링하는 알고리즘
💡 68. UNIX 운영체제에 관한 특징으로 틀린 것은?
- 하나 이상의 작업에 대하여 백그라운드에서 수행이 가능하다.
Multi-User는 지원하지만 Multi-Tasking은 지원하지 않는다.- 트리 구조의 파일 시스템을 갖는다.
- 이식성이 높으며 장치 간의 호환성이 높다.
UNIX 운영체제
- 벨 연구소에서 개발된 멀티태스킹, 멀티유저, 다중 프로그래밍을 지원하는 운영체제
- 다양한 하드웨어 플랫폼에서 동작함
- 파일 시스템과 명령어 인터프리터를 통해 사용자와 시스템 간의 인터페이스를 제공
- 각종 프로그래밍 언어와 통합되어 있어 소프트웨어 개발에 적합함
- 안정성이 높고 보안성이 강한 운영체제
💡 69. UDP(User Datagram Protocol)의 특징이 아닌 것은?
- 비연결형 서비스를 제공한다.
- 단순한 헤더 구조로 오버헤드가 적다.
주로 주소를 지정하고, 경로를 설정하는 기능을 한다.- TCP와 같이 트랜스포트 계층에 존재한다.
UDP(User Datagram Protocol)
- 인터넷 프로토콜 스위트에서 전송 계층에서 사용되는 프로토콜
- 비연결형 프로토콜
- 신뢰성이 낮지만 처리 속도가 빠름
IP(Internet Protocol) 프로토콜
- 인터넷을 포함한 네트워크에서 데이터를 전송하는 데 사용되는 프로토콜
- 데이터 그램을 이용하여 호스트 간 통신을 제공
- 데이터그램의 경로를 결정하는 라우팅 기능을 수행
💡 70. Python 데이터 타입 중 시퀀스(Sequence) 데이터 타입에 해당하며 다양한 데이터 타입들을 주어진 순서에 따라 저장할 수 있으나 저장된 내용을 변경할 수 없는 것은?
- 복소수(complex) 타입: 실수부와 허수부로 이루어진 숫자 데이터 타입
- 리스트(list) 타입: 여러 개의 값을 한 변수에 담을 수 있는 데이터 타입으로, 데이터의 추가/삭제/수정이 가능하며 대괄호([])를 이용하여 표현
- 사전(dict) 타입: key-value 쌍으로 이루어진 데이터 타입으로, 키(key)를 이용하여 값을 저장하고 검색할 수 있으며 중괄호({})를 이용하여 표현
- 튜플(tuple) 타입: 여러 개의 값을 한 변수에 담을 수 있는 데이터 타입으로, 리스트와 비슷하지만 한 번 생성된 데이터는 변경이 불가능하며 소괄호(())를 이용하여 표현
💡 71. 다음 JAVA 프로그램이 실행되었을 때, 실행결과는?
public class Main {
static int[] marr() {
int temp[] = new int[4];
for (int i = 0; i < temp.length; i++)
temp[i] = i;
return temp;
}
public static void main(String[] args) {
int arr[];
arr = marr();
for (int i = 0; i < arr.length; i++)
System.out.print(arr[i] + " ");
}
}
- 1 2 3 4
- 0 1 2 3
- 1 2 3
- 0 1 2
public class Main {
// marr() 메소드 선언
static int[] marr() {
// temp 배열 선언 및 크기 4 할당
int temp[] = new int[4];
// for문을 이용하여 temp 배열에 0~3까지의 값을 할당
for (int i = 0; i < temp.length; i++)
temp[i] = i;
// temp 배열 반환
return temp;
}
// main() 메소드 선언
public static void main(String[] args) {
int arr[]; // arr 배열 선언
arr = marr(); // marr() 메소드의 반환값을 arr 배열에 할당
// for문을 이용하여 arr 배열의 값을 출력
for (int i = 0; i < arr.length; i++)
System.out.print(arr[i] + " ");
}
}
💡 72. 다음 JAVA 프로그램이 실행되었을 때의 결과는?
public class Main {
public static void main(String[] args) {
int a = 1, b = 2, c = 3, d = 4;
int mx, mn;
mx = a < b ? b : a;
if (mx == 1) {
mn = a > mx ? b : a;
}
else {
mn = b < mx ? d : c;
}
System.out.println(mn);
}
}
- 1
- 2
- 3
- 4
public class Main {
public static void main(String[] args) {
// 변수 a, b, c, d를 선언하고 각각 1, 2, 3, 4를 할당
int a = 1, b = 2, c = 3, d = 4;
int mx, mn; // 변수 mx, mn을 선언
// 조건 연산자를 이용하여 a와 b 중 큰 값을 mx에 할당
mx = a < b ? b : a;
// mx가 1인 경우
if (mx == 1) {
// 삼항 연산자를 이용하여 a와 b 중 작은 값을 mn에 할당
mn = a > mx ? b : a;
}
// mx가 1이 아닌 경우
else {
// 삼항 연산자를 이용하여 b와 c 중 큰 값을 mx에 할당
mx = b < mx ? mx : c;
// 삼항 연산자를 이용하여 c와 d 중 작은 값을 mn에 할당
mn = c > d ? d : c;
}
// mn을 출력
System.out.println(mn);
}
}
💡 73. 다음 중 Myers가 구분한 응집도(Cohesion)의 정도에서 가장 낮은 응집도를 갖는 단계는?
- 순차적 응집도(Sequential Cohesion): 모듈 내의 처리 요소들이 순차적으로 연결되어 있는 응집도
- 기능적 응집도(Functional Cohesion): 모듈 내부의 모든 요소들이 동일한 기능을 수행하는 응집도
- 시간적 응집도(Temporal Cohesion): 모듈 내부의 요소들이 같은 시간 대에 수행되어야 하는 응집도
- 우연적 응집도(Coincidental Cohesion): 모듈 내부의 요소들이 관련성 없이 우연히 함께 묶인 응집도
모듈의 응집도
- 기능적 응집도(Functional Cohesion): 응집도 높음
- 순차적 응집도(Sequential Cohesion)
- 교환적 응집도(Communicational Cohesion)
- 절차적 응집도(Procedural Cohesion)
- 시간적 응집도(Temporal Cohesion)
- 논리적 응집도(Logical Cohesion)
- 우연적 응집도(Coincidental Cohesion): 응집도 낮음
💡 74. 다음 C언어 프로그램이 실행되었을 때, 실행 결과는?
#include <stdio.h>
int main(int arge, char *argv[])
{
int n1 = 1, n2 = 2, n3 = 3;
int r1, r2, r3;
r1 = (n2 <= 2) || (n3 > 3);
r2 = !n3;
r3 = (n1 > 1) && (n2 < 3);
printf("%d", r3 - r2 + r1);
return 0;
}
- 0
- 1
- 2
- 3
#include <stdio.h>
int main(int arge, char *argv[])
{
// 변수 n1, n2, n3를 선언하고 각각 1, 2, 3을 할당
int n1 = 1, n2 = 2, n3 = 3;
int r1, r2, r3;
// 논리 연산자를 이용하여 r1에 true/false 값을 할당
r1 = (n2 <= 2) || (n3 > 3);
// 논리 반전 연산자를 이용하여 r2에 true/false 값을 할당
r2 = !n3;
// 논리 연산자를 이용하여 r3에 true/false 값을 할당
r3 = (n1 > 1) && (n2 < 3);
// r3 - r2 + r1의 결과를 출력
printf("%d", r3 - r2 + r1);
return 0;
}
💡 75. IP 프로토콜의 주요 특징에 해당하지 않는 것은?
체크섬(Checksum) 기능으로 데이터 체크섬(Data Checksum)만 제공한다.- 패킷을 분할, 병합하는 기능을 수행하기도 한다.
- 비연결형 서비스를 제공한다.
- Best Effort 원칙에 따른 전송 기능을 제공한다.
IP 프로토콜 체크섬(Checksum)
- IP 패킷의 헤더 정보에서 오류를 검출하기 위한 무결성 검사 방법
- 헤더 정보를 바탕으로 생성된 16비트 체크섬 값과 수신 측에서 생성된 체크섬 값을 비교하여 오류를 확인한다.
💡 76. 4개의 페이지를 수용할 수 있는 주기억장치가 있으며, 초기에는 모두 비어 있다고 가정한다. 다음의 순서로 페이지 참조가 발생할 때, LRU 페이지 교체 알고리즘을 사용할 경우 몇 번의 페이지 결함이 발생하는가?
페이지 참조 순서: 1, 2, 3, 1, 2, 4, 1, 2, 5
- 5회
- 6회
- 7회
- 8회
LRU, Least Recently USed 페이지 교체 알고리즘
- 초기화: {_, _, _, _}
- 1번 페이지 참조: {1, _, _, _} (페이지 결함: 1)
- 2번 페이지 참조: {1, 2, _, _} (페이지 결함: 1)
- 3번 페이지 참조: {1, 2, 3, _} (페이지 결함: 1)
- 1번 페이지 참조: {1, 2, 3, _}
- 2번 페이지 참조: {1, 2, 3, _}
- 4번 페이지 참조: {1, 2, 3, 4} (페이지 결함: 1)
- 1번 페이지 참조: {1, 2, 3, 4}
- 2번 페이지 참조: {1, 2, 3, 4}
- 5번 페이지 참조: {1, 2, 5, 4} (페이지 결함: 1)
- 페이지 폴트가 발생하여 새로운 페이지를 메모리에 적재할 때, 적재할 페이지가 이미 메모리에 존재하는지 확인한다.
- 메모리에 적재된 페이지가 있으면, 해당 페이지의 참조 시간을 갱신한다.
- 메모리에 적재된 페이지가 없으면, 가장 참조 시간이 오래된 페이지를 교체하고, 새로운 페이지를 적재한다.
- 페이지 교체 시, 가장 참조 시간이 오래된 페이지를 결정하기 위해, 메모리 내의 모든 페이지의 참조 시간을 비교한다.
- 가장 참조 시간이 오래된 페이지를 교체 대상으로 선택한다.
- 새로운 페이지를 메모리에 적재한다.
💡 77. 사용자 수준에서 지원되는 스레드(thread)가 커널에서 지원되는 스레드(thread)에 비해 가지는 장점으로 옳은 것은?
한 프로세스가 운영체제를 호출할 때 전체 프로세스가 대기할 필요가 없으므로 시스템 성능을 높일 수 있다.동시에 여러 스레드가 커널에 접근할 수 있으므로 여러 스레드가 시스템 호출을 동시에 사용할 수 있다.각 스레드를 개별적으로 관리할 수 있으므로 스레드의 독립적인 스케줄링이 가능하다.- 커널 모드로의 전환 없이 스레드 교환이 가능하므로 오버헤드가 줄어든다.
- 사용자 수준 스레드(User-level thread): 응용 프로그램 내에서 스레드를 구현하며, 커널과는 독립적으로 스케줄링 및 관리를 수행한다.
- 커널 수준 스레드(Kernel-level thread): 운영체제 커널에서 직접 생성되고 관리되며, 스케줄링 및 동기화 등의 작업에 대한 책임을 가진다.
💡 78. 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 참조하는 경우의 결합도는?
- 내용 결합도(Content Coupling): 모듈 간의 상호 의존성이 높아져, 한 모듈의 변경이 다른 모듈에 큰 영향을 미치는 결합도
- 제어 결합도(Control Coupling): 모듈 간의 상호 의존성이 높아져, 한 모듈이 다른 모듈의 흐름을 직접적으로 제어하는 결합도
- 공통 결합도(Common Coupling): 여러 모듈이 하나의 공통된 자료를 참조하고 공유하는 결합도
- 스탬프 결합도(Stamp Coupling): 데이터 구조체를 공유하는 결합도로, 모듈 간의 데이터 구조체 참조 관계가 높아져 결합도 높음
💡 79. a[0]의 주소값이 10일 경우 다음 C언어 프로그램이 실행되었을 때의 결과는? (단, int 형의 크기는 4Byte로 가정한다.)
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[] = {14, 22, 30, 38};
printf("%u, ", (unsigned int *)&a[2]);
printf("%u", a);
return 0;
}
- 14, 10
- 14, 14
- 18, 10
- 18, 14
#include <stdio.h>
int main(int argc, char *argv[])
{
int a[] = {14, 22, 30, 38};
printf("%u, ", (unsigned int *)&a[2]); // 배열 a의 세 번째 요소(30)의 주소를 출력
printf("%u", a); // 배열 a의 시작 주소를 출력
return 0;
}
- 첫 번째 printf 문: &a[2]를 사용하여 배열 a의 세 번째 요소(30)의 주소를 구하고 정수형으로 출력한다.
- a[2]의 주소값은 a[0]의 주소값 + 2 * sizeof(int) = 10 + 8 = 18이다.
- 두 번째 printf 문: 배열 a의 시작 주소를 출력한다.
- a[0]의 주소값은 10이다.
💡 80. 모듈화(Modularity)와 관련한 설명으로 틀린 것은?
- 시스템을 모듈로 분할하면 각각의 모듈을 별개로 만들고 수정할 수 있기 때문에 좋은 구조가 된다.
응집도는 모듈과 모듈 사이의 상호의존 또는 연관 정도를 의미한다.- 모듈 간의 결합도가 약해야 독립적인 모듈이 될 수 있다.
- 모듈 내 구성 요소들 간의 응집도가 강해야 좋은 모듈 설계이다.
- 모듈화(Modularization): 큰 프로그램을 작은 모듈 단위로 분해하여 설계하고, 개발하는 기법
- 결합도(Coupling): 하나의 모듈이 다른 모듈에 얼마나 의존하고 있는지를 나타내는 정도
- 응집도(Cohesion): 하나의 모듈 내부에서 서로 얼마나 관련된 요소들이 연결되어 있는지를 나타내는 정도
✅ 2022년 03월 05일
💡 61. IP 주소체계와 관련한 설명으로 틀린 것은?
IPv6의 패킷 헤더는 32 octet의 고정된 길이를 가진다.- IPv6는 주소 자동설정(Auto Configuration) 기능을 통해 손쉽게 이용자의 단말을 네트워크에 접속시킬 수 있다.
- IPv4는 호스트 주소를 자동으로 설정하며 유니캐스트(Unicast)를 지원한다.
- IPv4는 클래스별로 네트워크와 호스트 주소의 길이가 다르다.
- IPv4(Internet Protocol version 4): 인터넷에서 사용하는 주요 프로토콜 중 하나로, 32비트 주소 체계를 사용하여 인터넷에서 패킷을 전송한다.
- IPv6(Internet Protocol version 6): IPv4의 주소 고갈 문제를 해결하기 위해 개발된 다음 세대 인터넷 프로토콜로, 128비트 주소 체계를 사용하여 보안, 신뢰성, 품질 등의 기능을 개선하며, 대규모 IoT(Internet of Things) 환경에서의 기기 간 통신에 적합하다.
💡 62. 다음 C언어 프로그램이 실행되었을 때, 실행 결과는?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int arr[2][3] = {1, 2, 3, 4, 5, 6};
int(*p)[3] = NULL;
p = arr;
printf("%d", *(p[0] + 1) + *(p[1] + 2));
printf("%d", *(*(p + 1) + 0) + *(*(p + 1) + 1));
return 0;
}
- 7, 5
- 8, 5
- 8, 9
- 7, 9
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int arr[2][3] = {1, 2, 3, 4, 5, 6}; // 2행 3열의 2차원 배열 arr을 초기화
int(*p)[3] = NULL; // 3개의 정수형 배열을 가리키는 포인터 p를 선언하고 NULL로 초기화
p = arr; // 배열 arr의 시작 주소를 p에 할당
printf("%d", *(p[0] + 1) + *(p[1] + 2)); // arr[0][1] + arr[1][2]를 계산하여 출력
printf("%d", *(*(p + 1) + 0) + *(*(p + 1) + 1)); // arr[1][0] + arr[1][1]을 계산하여 출력
return 0;
}
💡 63. OSI 7 계층 중 이터 링크 계층(Data Link Layer)에 해당되는 프로토콜이 아닌 것은?
HTTP: 응용 계층(Application Layer)- HDLC: 데이터 링크 계층(Data Link Layer)
- PPP: 데이터 링크 계층(Data Link Layer)
- LLC: 데이터 링크 계층(Data Link Layer)
- 물리 계층(Physical Layer): 케이블, 허브 등의 하드웨어적인 특성을 이용해 데이터를 전송한다.
- 프로토콜: Ethernet, Wi-Fi 등
- 데이터 링크 계층(Data Link Layer): 물리 계층에서 전송된 데이터의 오류를 검출하고 수정하며, MAC 주소 기반의 통신을 제공한다.
- 프로토콜: PPP, HDLC, Ethernet 등
- 네트워크 계층(Network Layer): 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 경로를 선택하며, IP 주소를 기반으로 라우팅을 수행한다.
- 프로토콜: IP, ICMP, ARP 등
- 전송 계층(Transport Layer): 종단 간의 신뢰성 있는 데이터 전송을 보장하며, 포트 번호를 기반으로 프로세스 간 통신을 제공한다.
- 프로토콜: TCP, UDP 등
- 세션 계층(Session Layer): 통신하는 양 끝단의 응용 프로그램이 통신을 관리하고, 데이터 교환의 경계를 설정한다.
- 프로토콜: SSL, TLS 등
- 표현 계층(Presentation Layer): 데이터의 형식을 정의하고 변환한다.
- 프로토콜: JPEG, MPEG 등
- 응용 계층(Application Layer): 응용 프로그램에서 사용하는 프로토콜을 정의하고, 사용자 인터페이스를 제공한다.
- 프로토콜: HTTP, FTP, SMTP, DNS 등
💡 64. C언어에서 두 개의 논리 값 중 하나라도 참이면 1을, 모두 거짓이면 0을 반환하는 연산자는?
- ||(논리합 연산자): 두 개의 논리값 중 하나 이상이 참(true) 일 때, 전체 논리식의 결과를 참으로 반환한다.
- &&(논리곱 연산자): 두 개의 논리값이 모두 참(true) 일 때, 전체 논리식의 결과를 참으로 반환한다.
- **(거듭제곱 연산자): 왼쪽 피연산자를 오른쪽 피연산자만큼 거듭제곱한 값을 반환한다.
- !=(같지 않음 연산자): 두 개의 피연산자가 같지 않으면 참(true)을 반환하고, 같으면 거짓(false)을 반환한다.
💡 65. IPv6에 대한 특성으로 틀린 것은?
표시방법은 8비트씩 4 부분의 10진수로 표시한다.- 2128개의 주소를 표현할 수 있다.
- 등급별, 서비스별로 패킷을 구분할 수 있어 품질보장이 용이하다.
- 확장기능을 통해 보안 기능을 제공한다.
IPv6
- IPv4의 32비트 주소체계를 128비트 주소체계로 확장하여 많은 주소 공간을 제공한다.
- IPsec 프로토콜이 기본적으로 지원되므로, 데이터의 기밀성, 무결성, 인증 등을 보장한다.
- QoS(Quality of Service) 기능이 기본적으로 제공되어, 네트워크의 효율성을 향상한다.
- IPv4와의 호환성을 보장한다.
- 자동 구성 기능을 제공하여, 호스트와 라우터의 구성을 자동으로 처리한다.
- 모바일 네트워크에서의 이동성을 지원한다.
- 단일 인터페이스에 다수의 IPv6 주소를 할당한다.
- 멀티캐스트 기능이 기본적으로 지원되어, 멀티캐스트 그룹에 속한 호스트에게 데이터를 효율적으로 전달한다.
💡 66. JAVA의 예외(Exception)와 관련한 설명으로 틀린 것은?
문법 오류로 인해 발생한 것- 오동작이나 결과에 악영향을 미칠 수 있는 실행 시간 동안에 발생한 오류
- 배열의 인덱스가 그 범위를 넘어서는 경우 발생하는 오류
- 존재하지 않는 파일을 읽으려고 하는 경우에 발생하는 오류
- 문법 오류는 컴파일 시 에러가 발생하여 프로그램의 정상적인 실행이 불가능하므로 예외 조건에 부합하지 않는다.
💡 67. TCP/IP 계층 구조에서 IP의 동작 과정에서의 전송 오류가 발생하는 경우에 대비해 오류 정보를 전송하는 목적으로 사용하는 프로토콜은?
- ECP, Error Checking Protocol: 데이터 전송 과정에서 발생한 오류를 검출하고 수정하기 위한 프로토콜
- ARP, Address Resolution Protocol: IP 주소를 물리적인 MAC 주소로 변환하기 위한 프로토콜
- ICMP, Internet Control Message Protocol: IP 네트워크에서 제어 메시지를 전송하기 위한 프로토콜로, 오류 및 제어 정보 전달을 담당한다.
- PPP, Point-to-Point Protocol: 포인트 투 포인트(Point-to-Point) 라인을 통해 전송되는 데이터를 다루기 위한 프로토콜로, 인증 및 암호화 기능을 제공한다.
💡 68. 좋은 소프트웨어 설계를 위한 소프트웨어의 모듈 간의 결합도(Coupling)와 모듈 내 요소 간 응집도(Cohesion)에 대한 설명으로 옳은 것은?
- 응집도는 낮게, 결합도는 높게 설계한다.
- 응집도는 높게, 결합도는 낮게 설계한다.
- 양쪽 모두 낮게 설계한다.
- 양쪽 모두 높게 설계한다.
💡 69. 다음과 같은 형태로 임계 구역의 접근을 제어하는 상호배제 기법은?
P(S) : while S <= 0 do skip;
S := S - 1;
V(S) : S := S + 1;
- 데커(Dekker) 알고리즘: 두 개의 프로세스가 공유 자원을 번갈아 가며 사용할 수 있도록 하는 상호 배제(mutex) 알고리즘
- 램퍼드(Lamport) 알고리즘: 전역적인 시간 개념을 이용하여 분산 시스템에서의 상호 배제(mutex) 문제를 해결하는 알고리즘
- 피터슨(Peterson) 알고리즘: 두 개의 프로세스가 공유 자원을 번갈아 가며 사용할 수 있도록 하는 상호 배제(mutex) 알고리즘
- 세마포어(Semaphore): 프로세스나 스레드 등이 공유 자원에 접근할 때, 상호 배제를 위한 동기화 기법 중 하나로, 카운트 값을 사용하여 프로세스나 스레드의 진입을 제어한다.
P(S) :
while S <= 0 do // S가 0 이하인 경우에는 계속해서 반복문을 실행하여 대기한다.
skip;
S := S - 1; // S의 값 1 감소
V(S) :
S := S + 1; // S의 값 1 증가
💡 70. 소프트웨어 개발에서 모듈(Module)이 되기 위한 주요 특징에 해당하지 않는 것은?
- 다른 것들과 구별될 수 있는 독립적인 기능을 가진 단위(Unit)이다.
- 독립적인 컴파일이 가능하다.
- 유일한 이름을 가져야 한다.
다른 모듈에서의 접근이 불가능해야 한다.
모듈(Module)
- 독립성(Independence): 모듈은 다른 모듈과 독립적으로 존재한다.
- 캡슐화(Encapsulation): 모듈은 자신만의 내부 데이터와 함수를 가지며, 외부에서의 접근을 제한한다.
- 응집성(Cohesion): 모듈 내부의 요소들은 동일한 목적을 가지고 서로 연관성이 높아야 한다.
- 결합도(Coupling): 모듈 간의 인터페이스를 최소화한다.
- 가독성(Readability): 모듈은 코드의 가독성을 높이고, 유지보수를 용이하게 한다.
- 재사용성(Reusability): 모듈은 다른 프로젝트에서도 사용될 수 있도록 일반적으로 작성한다.
- 테스트 가능성(Testability): 모듈은 독립적으로 테스트 가능해야 하며, 모듈 단위의 테스트를 수행한다.
- 확장성(Scalability): 모듈은 시스템의 확장에 따라 쉽게 변경되거나 대체한다.
💡 71. 빈 기억공간의 크기가 20KB, 16KB, 8KB, 40KB 일 때 기억장치 배치 전략으로 'Best Fit'을 사용하여 17KB의 프로그램을 적재할 경우 내부단편화의 크기는 얼마인가?
- 3KB: 20KB의 기억공간에서 17KB를 적재한다.
- 23KB: 40KB의 기억공간에서 17KB를 적재한다.
- 64KB
- 67KB
Best Fit
- 메모리 할당 방법
- 프로세스를 가장 작게 분할 가능한 공간에 할당하는 방식
- 가능한 공간 중에서 프로세스 크기와 가장 근접한 공간을 찾아 할당한다.
- 내부 단편화를 최소화하는 것이 목적이다.
- 할당 가능한 모든 공간을 탐색해야 하므로, 탐색 시간이 길다.
💡 72. 다음 C언어 프로그램이 실행되었을 때, 실행 결과는?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i = 0;
while (1)
{
if (i == 4)
{
break;
}
++i;
}
printf("i = %d", i);
return 0;
}
- i = 0
- i = 1
- i = 3
- i = 4
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i = 0; // 변수 i를 0으로 초기화
while (1) // 무한 반복문 시작
{
if (i == 4) // 만약 i가 4와 같으면
{
break; // 반복문 탈출
}
++i; // i를 1 증가시킴
}
printf("i = %d", i); // 반복문을 빠져나온 후, i의 값을 출력
return 0;
}
💡 73. 다음 JAVA 프로그램이 실행되었을 때, 실행 결과는?
public class Main {
static void rs(char a[]) {
for (int i = 0; i < a.length; i++) {
if (a[i] == 'B') {
a[i] = 'C';
} else if (i == a.length - 1) {
a[i] = a[i - 1];
} else {
a[i] = a[i + 1];
}
}
}
static void pca(char a[]) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}
System.out.println();
}
public static void main(String[] args) {
char c[] = { 'A', 'B', 'D', 'D', 'A', 'B', 'C' };
rs(c);
pca(c);
}
}
- BCDABCA
- BCDABCC
- CDDACCC
- CDDACCA
public class Main {
// rs 메소드: 주어진 char 배열을 변경하는 메소드
static void rs(char a[]) {
for (int i = 0; i < a.length; i++) { // 주어진 배열 a의 모든 요소에 대해서 반복
if (a[i] == 'B') { // 요소가 'B'인 경우
a[i] = 'C'; // 요소를 'C'로 변경
} else if (i == a.length - 1) { // 요소가 배열의 마지막인 경우
a[i] = a[i - 1]; // 요소를 배열의 마지막 - 1번째 요소로 변경
} else { // 그 외의 경우
a[i] = a[i + 1]; // 요소를 다음 요소로 변경
}
}
}
// pca 메소드: 주어진 char 배열을 출력하는 메소드
static void pca(char a[]) {
for (int i = 0; i < a.length; i++) { // 주어진 배열 a의 모든 요소에 대해서 반복
System.out.print(a[i]); // 요소를 출력
}
System.out.println(); // 줄바꿈
}
public static void main(String[] args) {
char c[] = { 'A', 'B', 'D', 'D', 'A', 'B', 'C' }; // char 배열 c를 선언하고 초기화
rs(c); // rs 메소드를 호출하여 배열 c의 요소를 변경
pca(c); // pca 메소드를 호출하여 배열 c의 요소를 출력
}
}
💡 74. 개발 환경 구성을 위한 빌드(Build) 도구에 해당하지 않는 것은?
- Ant: 자바 프로젝트를 빌드하기 위한 Apache 소프트웨어 재단의 빌드 도구
- Kerberos: 클라이언트와 서버 간 안전한 인증을 제공하는 프로토콜
- Maven: 자바 프로젝트를 관리하기 위한 Apache 소프트웨어 재단의 빌드 도구
- Gradle: 자바와 안드로이드를 포함한 다양한 언어의 프로젝트를 빌드하기 위한 오픈소스 빌드 도구
💡 75. 3개의 페이지 프레임을 갖는 시스템에서 페이지 참조 순서가 1, 2, 1, 0, 4, 1, 3 일 경우 FIFO 알고리즘에 의한 페이지 교체의 경우 프레임의 최종 상태는?
- 1, 2, 0
- 2, 4, 3
- 1, 4, 2
- 4, 1, 3
FIFO(First-In-First-Out) 알고리즘: 먼저 들어온 페이지를 먼저 교체하는 방식
- 초기 페이지 프레임 상태: [ ], [ ], [ ]
- 페이지 참조 1: [ 1 ], [ ], [ ]
- 페이지 참조 2: [ 1 ], [ 2 ], [ ]
- 페이지 참조 1: [ 1 ], [ 2 ], [ ]
- 페이지 참조 0: [ 1 ], [ 2 ], [ 0 ]
- 페이지 참조 4: [ 4 ], [ 2 ], [ 0 ] (1 대신 4를 적재)
- 페이지 참조 1: [ 4 ], [ 1 ], [ 0 ] (2 대신 1을 적재)
- 페이지 참조 3: [ 4 ], [ 1 ], [ 3 ] (0 대신 3을 적재)
💡 76. 다음 C언어 프로그램이 실행되었을 때, 실행 결과는?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char str1[20] = "KOREA";
char str2[20] = "LOVE";
char *p1 = NULL;
char *p2 = NULL;
p1 = str1;
p2 = str2;
str1[1] = p2[2];
str2[3] = p1[4];
strcat(str1, str2);
printf("%c", *(p1+2));
return 0;
}
- E
- V
- R
- O
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char str1[20] = "KOREA"; // 문자열 str1을 선언하고 초기화
char str2[20] = "LOVE"; // 문자열 str2을 선언하고 초기화
char *p1 = NULL; // char 포인터 p1을 NULL로 초기화
char *p2 = NULL; // char 포인터 p2을 NULL로 초기화
p1 = str1; // p1이 str1을 가리키도록 설정
p2 = str2; // p2가 str2을 가리키도록 설정
str1[1] = p2[2]; // str1의 두 번째 요소를 p2의 세 번째 요소로 변경
str2[3] = p1[4]; // str2의 네 번째 요소를 p1의 다섯 번째 요소로 변경
strcat(str1, str2); // str1 끝에 str2를 이어붙임
printf("%c", *(p1+2)); // p1의 세 번째 요소를 출력
return 0;
}
💡 77. 다음 Python 프로그램이 실행되었을 때, 실행 결과는?
a = 100
list_data = ['a', 'b', 'c']
dict_data = {'a': 90, 'b': 95}
print(list_data[0])
print(dict_data['a'])
- a
90 - 100
90 - 100
100 - a
a
a = 100 # 변수 a에 100을 할당
list_data = ['a', 'b', 'c'] # list_data에 ['a', 'b', 'c'] 리스트를 할당
dict_data = {'a': 90, 'b': 95} # dict_data에 {'a': 90, 'b': 95} 딕셔너리를 할당
print(list_data[0]) # list_data의 첫 번째 요소를 출력하여 'a'를 출력
print(dict_data['a']) # dict_data의 key 'a'의 value를 출력하여 90을 출력
💡 78. C언어에서 정수 변수 a, b에 각각 1, 2가 저장되어 있을 때 다음 식의 연산 결과로 옳은 것은?
a < b + 2 && a << 1 <= b
- 0
- 1
- 3
- 5
{a < (b + 2)} && {(a << 1) <= b}
// 조건: a = 1, b = 2
// 첫 번째 조건식: a < (b + 2) -> 1 < (2 + 2) -> 1 < 4 -> 참
// 두 번째 조건식: (a << 1) <= b -> (1 << 1) <= 2 -> 2 <= 2 -> 참
// 전체 논리식: 참 && 참 -> 참
💡 79. 다음 Python 프로그램이 실행되었을 때, 실행 결과는?
a = ["대", "한", "민", "국"]
for i in a:
print(i)
- 대한민국
- 대
한
민
국 - 대
- 대대대대
a = ["대", "한", "민", "국"]
for i in a:
print(i) # 리스트 a의 원소 출력
💡 80. UNIX 시스템의 쉘(shell)의 주요 기능에 대한 설명이 아닌 것은?
- 사용자 명령을 해석하고 커널로 전달하는 기능을 제공한다.
- 반복적인 명령 프로그램을 만드는 프로그래밍 기능을 제공한다.
쉘 프로그램 실행을 위해 프로세스와 메모리를 관리한다.- 초기화 파일을 이용해 사용자 환경을 설정하는 기능을 제공한다.
커널(kernel)
- 프로세스 관리(Process management): 프로세스 생성, 스케줄링, 종료 등을 관리한다.
- 메모리 관리(Memory management): 가상 메모리(Virtual memory)를 사용하여 프로세스의 메모리 공간을 할당하고, 필요한 경우 페이지 교환(Paging)을 수행한다.
반응형
'기타 > 정보처리기사' 카테고리의 다른 글
정보처리기사 정처기 | 실기 4 통합 구현 | 연계 메커니즘 구성, 내외부 연계 모듈 구현 | 단원별 정리 (0) | 2023.03.08 |
---|---|
정보처리기사 정처기 | 실기 3 데이터 입출력 구현 | 논리 데이터 저장소 확인, 물리 데이터 저장소 설계, 데이터베이스 기초 활용하기 | 단원별 정리 (0) | 2023.03.08 |
정보처리기사 정처기 | 실기 2 화면 설계 | UI 요구사항 확인, UI 설계 | 단원별 정리 (0) | 2023.03.08 |
정보처리기사 정처기 | 실기 1 요구사항 확인 | 소프트웨어 개발 방법론, 현행 시스템 분석, 요구사항 확인 | 단원별 정리 (0) | 2023.03.08 |
정보처리기사 정처기 | 필기 5과목 정보시스템 구축 관리 | 기출문제 정리본, 두문자 (0) | 2023.02.27 |
정보처리기사 정처기 | 필기 3과목 데이터베이스 구축 | 기출문제 정리본, 두문자 (0) | 2023.02.27 |
정보처리기사 정처기 | 필기 2과목 소프트웨어 개발 | 기출문제 정리본, 두문자 (0) | 2023.02.27 |
정보처리기사 정처기 | 필기 1과목 소프트웨어 설계 | 기출문제 정리본, 두문자 (0) | 2023.02.27 |