https://chobopark.tistory.com/476
( * Java_static 변수, 싱글톤 * )
1. 다음 Java 코드에서 알맞는 출력 값을 작성하시오.
class Connection {
private static Connection _inst = null;
private int count = 0;
static public Connection get() {
if(_inst == null) {
_inst = new Connection();
return _inst;
}
return _inst;
}
public void count() {
count++;
}
public int getCount() {
return count;
}
}
public class main {
public static void main(String[] args) {
Connection conn1 = Connection.get();
conn1.count();
Connection conn2 = Connection.get();
conn2.count();
Connection conn3 = Connection.get();
conn3.count();
conn1.count();
System.out.print(conn1.getCount());
}
}
4
Connection conn1 = Connection.get(); 에서 처음 생성된 _inst 인스턴스를 계속해서 공유.
=> conn1, conn2, conn3은 모두 같은 인스턴스를 참조.
(싱글톤 패턴)
( * C언어_ 시프트연산 * )
2. 다음 C언어 코드에서 알맞는 출력 값을 작성하시오.
#include <stdio.h>
int main() {
int v1 = 0, v2 = 35, v3 = 29;
if(v1 > v2 ? v2 : v1) {
v2 = v2 << 2;
}else{
v3 = v3 << 2;
}
printf("%d", v2+v3);
}
151
v1 = 0 (2진수) => 0
v2 = 35 (2진수) => 100011
v3 = 29 (2진수) => 11101
if 조건문의 결과가 ( v1 > v2 ? v2 : v1 ) false이기 때문에 else 블럭 실행.
false => v1 (false)
v3 = v3 << 2
v3 = 1 1 1 0 1 0 0 (10진수) => 116
v2 + v3 = 35 + 116 = 151
( * 응집도 * )
3. 다음은 응집도와 관련해서 보기에서 응집도가 높은 순으로 나열하시오.
보기
ㄱ. 기능 ㄴ. 교환 ㄷ. 우연 ㄹ. 시간 |
ㄱ. 기능 > ㄴ. 교환 > ㄹ.시간 > ㄷ. 우연
* 응집도 * (낮 -> 높)
우연적 응집도 (Coincidental Cohesion)
논리적 응집도 (Logical Cohesion)
시간적 응집도 (Temporal Cohesion)
절차적 응집도 (Procedural Cohesion)
통신(교환)적 응집도 (Communication Cohesion)
순차적 응집도 (Sequential Cohesion)
기능적 응집도 (Functional Cohesion)
* 결합도 * (낮 -> 높)
데이터(자료) 결합도 (Data Coupling)
스탬프(검인) 결합도 (Stamp Coupling)
제어 결합도 (Control Coupling)
외부 결합도 (External Coupling)
공유(공통) 결합도 (Common Coupling)
내용 결합도 (Content Coupling)
( * C언어_ 포인터 (문자열) * )
4. 다음은 C언어에 대한 문제이다. 알맞는 출력 값을 작성하시오.
#include <stdio.h>
#include <string.h>
void main(){
char str[100] = "ABCDEFGH";
int len = strlen(str);
reverse(str, len)
for(int i=1; i<len i+=2){
printf("%c",str[i])
}
}
void reverse(char* str, int len){
char t;
char* p1 = str
char* p2 = str + len - 1;
while(p1<p2){
t = *p1;
*p1 = *p2;
*p2 = t;
p1++;
p2--;
}
}
GECA
str : A B C D E F G H \n
10 10 11 12 13 14 15 16 17 (번지수)
len = 8 (문자열 str의 길이_ 배열의 길이에 관계없이 문자열의 끝까지의 길이*)
==> reverse(str, len) 메소드 실행
char* p1 = 10
char* p2 = 10 + 8 - 1 = 17
==> (p1 < p2) while 문 실행 // (*p1 => p1의값, *p2 => p2의값)
t = 'A'
*p1 => 'H'
*p2 => 'A'
str : H B C D E F G A \n
10 10 11 12 13 14 15 16 17 (번지수)
p1++ => p1 = 11
p2-- => p2 = 16
=> p1의 값과 p2의 값 바꾸는 로직
계속 반복하면
p1 = 13 // p2 = 14 일 때,
str : H G F E D C B A \n
10 10 11 12 13 14 15 16 17 (번지수)
p1++ => p1 = 14
p2-- => p2 = 13
(p1 < p2) 가 false => while문 종료.
출력하면 ( i=1부터 출력 ** )
str[1] 출력 & str[3] 출력 & str[5] 출력 & str[7] 출력
=> GECA
( * 서브넷 * )
5. 아래 그림에서의 네트워크에서 2번, 4번, 5번의 라우터에 할당 가능한 IP를 작성하시오.
(보기 주어짐)
1) 192.168.35.xxx/24
3) 129.200.10.xx/22
6) 192.168.36.xxx/24
* 서브네팅 : ip를 나눔. ( <=> 슈퍼네팅 )
1. 192.168.35.72 ( 192.168.35.0 ~ 192.168.35.255 )
2. 129.200.8.49 ( 129.200.8.0 ~ 129.200.11.255 )
3. 192.168.36.249 ( 192.168.36.0 ~ 192.168.36.255 )
( * DB_정규화 * )
6. 아래 표에서 나타나고 있는 정규형을 작성하시오.
고객아이디 | 강좌명 | 강사번호 |
apple | 영어회화 | P001 |
banana | 기초토익 | P002 |
carrot | 영어회화 | P001 |
carrot | 기초토익 | P004 |
orange | 영어회화 | P003 |
orange | 기초토익 | P004 |
제 3정규형
* 정규화 *
제 1정규형 : 도메인이 원자값
제 2정규형 : 부분함수 종속 제거
제 3정규형 : 이행함수 종속 제거
BCNF : 결정자이면서 후보키가 아닌 것 제거
제 4정규형 : 다치종속 제거
제 5정규형 : 조인종속 이용
부분함수종속 : A의 일부 속성이 B에 대해 완전함수종속.
이행함수종속 : X -> Y, Y -> Z 일때 X -> Z 성립.
부분함수종속과 이행함수종속을 제거하면 완전함수종속 X -> Y
( * 라우팅 프로토콜 * )
7. 아래의 내용에서 설명하는 네트워크 용어를 영문 약자로 작성하시오.
1. 대표적인 링크 상태 라우팅 프로토콜이다. 이것은 인터넷에서 연결된 링크의 상태를 감시하여 최적의 경로를 선택한다는것이다.
2. 단일 자율 시스템 내에서 라우팅 정보를 배포하는 데 사용되는 내부 게이트웨이 프로토콜이다.
3. 모든 대상에 도달하기 위한 최단 경로를 구축하고 계산하며 최단 경로는 Dijkstra 알고리즘을 사용하여 계산된다.
OSPF (Open Shortest Path First)
* 라우팅 프로토콜 - 정적라우팅 / 동적라우팅
(동적라우팅)
- EGP (Exterior Gateway Protocol) : 외부 라우터 상호간
- IGP (Interior Gateway Protocol) : 내부 라우터간
- Distance Vector (거리벡터 알고리즘)
- RIP (Routing Information Protocol) 경로 선택 정보 프로토콜
라우터의 최소 홉수로 경로 선택 (최대 15홉), 속도나 지연은 고려하지X, 소규모 네트워크
- IGRP
- Link-State Vector (링크상태 프로토콜)
- OSPF (Open Shortest Path First)
대규모 네트워크, RIP에 비해 자세한 제어 가능.
- EIGRP
* 프로토콜 3요소 *
구문 (Syntax), 의미 (Semantic), 타이밍 (Timing)
( * DB_조인 * )
8. 아래 내용의 각각의 설명에 대한 답을 작성하시오.
(1) 조인에 참여하는 두 릴레이션의 속성 값을 비교하여 조건을 만족하는 튜플만 반환한다.
(2) 조건이 정확하게 '=' 등호로 일치하는 결과를 반환한다.
(3) ( (2) ) 조인에서 조인에 참여한 속성이 두 번 나오지 않도록 중복된 속성을 제거한 결과를 반환한다.
(1) 세타 조인
(2) 동등 조인
(3) 자연 조인
- 세타조인 (theta join)
두 릴레이션의 속성 값을 비교하여 조건( =, <, >)을 만족하는 튜플만 반환.
- 내부조인 = 동등조인 (inner join) A ∩ B
두 릴레이션의 속성 값을 비교하여 조건(=)을 만족하는 튜플만 반환.
- 자연조인 (natural join)
내부조인(동등조인)에서 중복된 속성을 제거한 결과를 반환.
- 외부조인 (outer join) _ 없는 값은 NULL.
- left outer join : 왼쪽테이블 모든행 + 오른쪽 테이블 일치행 자연조인.
- right outer join : 왼쪽테이블 일치치행 + 오른쪽 테이블 모든행 자연조인.
- full outer join : 양쪽 모든행 자연조인. A ∪ B
- 세미조인 (semi join)
자연조인 이후 한쪽 릴레이션의 결과만 반환.
(오른쪽 테이블의 데이터로 필터링된 왼쪽 테이블만 결과로 반환.)
( * 페이지 교체 알고리즘 * )
9. 다음은 운영체제 페이지 순서를 참고하여 LRU와 LFU 알고리즘의 페이지 부재 횟수를 작성하시오.
(할당된 프레임의 수가 3개일 때)
페이지 참조 순서 : 1 2 3 1 2 4 1 2 5 7
(1) LRU :
(2) LFU :
(1) LRU : 6
(2) LFU : 6
* FIFO (First In First Out) : 가장 먼저 들어와서 가장 오래 있었던 페이지를 교체.
* LRU (Least Recently Used) : 가장 오랫동안 사용하지 않은 페이지를 교체.
* LFU (Least Frequently Used) : 사용 빈도가 가장 적은 페이지를 교체.
* NUR (Not Used Recently) : 사용 빈도가 가장 적은 페이지를 교체.
( * Java_상속 * )
10. 아래 JAVA언어 코드의 실행 순서를 중복 번호없이 작성하시오.
class Parent {
int x, y;
Parent(int x, int y) { ①
this.x=x;
this y=y;
}
int getT() { ②
return x*y;
}
}
class Child extend Parent {
int x;
Child (int x) { ③
super(x+1, x);
this.x=x;
}
int getT(int n){ ④
return super.getT()+n;
}
}
class Main {
public static void main(String[] args) { ⑤
Parent parent = new Child(3); ⑥
System.out.println(parent.getT()); ⑦
}
}
실행 순서 : 5 → ( ) → ( ) → ( ) → ( ) → ( )
5 -> 6 -> 3 -> 1 -> 7 -> 2
11. 다음 C언어의 알맞는 출력값을 작성하시오.
#include <stdio.h>
typedef struct {
int accNum;
double bal;
} BankAcc;
double sim_pow(double base, int year) {
int i;
double r = 1.0;
for (i = 0; i < year; i++) {
r *= base;
}
return r;
}
void initAcc(BankAcc *acc, int x, double y) {
acc->accNum = x;
acc->bal = y;
}
void xxx(BankAcc *acc, double *en) {
if (*en > 0 && *en < acc->bal) {
acc -> bal = acc -> bal-*en;
}else{
acc -> bal = acc -> bal+*en;
}
}
void yyy(BankAcc *acc) {
acc -> bal = acc -> bal * sim_pow((1+0.1),3)
}
int main() {
BankAcc myAcc;
initAcc(&myAcc, 9981, 2200.0);
double amount = 100.0;
xxx(&myAcc, &amount);
yyy(&myAcc);
printf("%d and %.2f\n", myAcc.accNum, myAcc.bal);
return 0;
}
9981 and 2795.10
' %.2f ' => 소수 둘째자리까지 출력(반올림).
( * 파이썬_for문 * )
12. 다음 파이썬 코드에 대한 알맞는 출력 값을 작성하시오.
a = ["Seoul", "Kyeonggi", "Incheon", "Daejun", "Daegu", "Pusan"]
str = "S"
for i in a:
str = str + i[1]
print(str)
Seynaau
13. 아래 보기의 SQL 문장과 테이블을 참고하여 출력 값을 표로 작성하시오.
SELECT
B
FROM
R1
WHERE
C IN (SELECT C FROM R2 WHERE D="K");
보기
B |
a |
b |
( * 코드 커버리지 * )
14. 아래는 애플리케이션 테스트 관리에 대한 내용이다. 설명하는 답을 보기에서 골라 작성하시오.
1. 모든 분기와 조건의 조합을 고려하나 모든 조합을 테스트하는 대신에 테스트가 필요한 중요한 조합을 찾아내는데에 중점을 둔다.
2. 특정 조건을 수행할 때 다른 조건과는 상관없이 전체 결과에 영향을 미치는 조건만을 테스트한다.
3. 각각의 파라미터는 적어도 한 번은 최종 결과에 영향을 주어야 한다.
보기
ㄱ. 구문 커버리지 ㄴ. 결정 커버리지 ㄷ. 조건 커버리지 ㄹ. 변경 조건/결정 커버리지 ㅁ.다중 조건 커버리지 ㅂ.경로 커버리지 ㅅ.조건/결정 커버리지
ㄹ. 변경 조건/결정 커버리지
[ 코드 커버리지 (Code Coverage) ]
- 구문 커버리지 (Statement Coverage) : 모든 구문에 대해 한 번 이상 수행.
- 조건 커버리지 (Condition Coverage) : 결정 포인트 내의 모든 개별 조건식에 대해 수행. (if문 내부 개별조건식)
- 결정 커버리지 (Decision Coverage) : 결정 포인트 내의 모든 분기문에 대해 수행. (if문)
- 조건/결정 커버리지 : 결정포인트 T/F , 개별조건식 T/F 확장 ↓
- 변경 조건/결정 커버리지 : 모든 결정포인트 내의 개별조건식은 적어도 한 번 T, F를 가져야 한다. 확장 ↓
- 다중 조건 커버리지 : 결정 포인트 내 모든 개별 조건식의 가능한 조합을 100% 보장.
- 경로 커버리지 : 모든 논리적인 경로가 한 번 이상 수행.
( * 정보보안/서비스공격 * )
15. 다음 아래 내용을 보고 보기에서 알맞는 용어를 골라 작성하시오.
인터넷 공격자의 존재를 숨기면서 이 공격자에게 시스템에 대한 무제한 접근 권한을 부여하는 악성 프로그램이다.
해커가 자신의 존재를 숨기면서 허가되지 않은 컴퓨터나 소프트웨어에 접근할 수 있도록 설계된 도구이다.
일반적으로 펌웨어, 가상화 계층 등의 다양한 시스템 영역에서 작동하며, 운영체제의 시스템콜을 해킹하여 악성코드의 실행여부를 숨겨 안티바이러스 탐지를 우회할 수 있다.
보기
ㄱ.Worm ㄴ.Trojan horse ㄷ.Backdoor ㄹ.Virus ㅁ.Ransomware ㅂ.Spyware ㅅ.Rootkit |
ㅅ. Rootkit
* 웜 (Worm) : 스스로를 복제하여 네트워크를 손상시키는 악성 프로그램.
> 독자적으로 실행되어 다른 프로그램이 필요하지 않음.
> 네트워크를 사용하여 복제본을 스스로 전파.
* 트로이목마 (Trojan horse) : 악성 루틴이 숨어 있는 프로그램으로, 겉보기에는 정상적인 프로그램으로 보이지만 실행하면 악성 코드를 실행하는 프로그램.
> 컴퓨터 바이러스나 웜과는 달리 스스로 전파되지 않는다.
* 바이러스 (Virus) : 스스로를 복제하여 파일을 손상시키는 악성 프로그램.
> 다른 실행 프로그램에 기생하여 실행.
> CD, USB 드라이버 등을 통해 전파 => 스스로 전파 불가능.
* 백도어 (Backdoor) : 시스템, 네트워크, 소프트웨어 내에 의도적/우연히 생성된 숨겨진 접근 경로.
* 랜섬웨어 (Ransomware) : 사용자의 컴퓨터에 잠입해 내부문서/파일을 암호화.
* 스파이웨어 (Spyware) : 사용자의 컴퓨터에 잠입해 사용자 활동을 감시하고 개인정보 수집.
( * Java_오버라이딩 * )
16. 다음 Java 코드를 보고 알맞는 출력 값을 작성하시오.
class classOne {
int a, b;
public classOne(int a, int b) {
this.a = a;
this.b = b;
}
public void print() {
System.out.println(a + b);
}
}
class classTwo extends classOne {
int po = 3;
public classTwo(int i) {
super(i, i+1);
}
public void print() {
System.out.println(po*po);
}
}
public class main {
public static void main(String[] args) {
classOne one = new classTwo(10);
one.print();
}
}
9
자식클래스인 classTwo 는 부모클래스인 classOne 을 상속,
print() 메소드를 오버라이딩 => 부모클래스의 메소드를 자식클래스에서 재정의
( * 정보보안/서비스공격 * )
17. 다음 아래 내용을 보고 보기에서 알맞는 용어를 골라 작성하시오.
1. 불특정 다수가 아닌 명확한 표적을 정하여 지속적인 정보수집 후 공격감행할 수 있다.
2. 시스템에 직접 침투하는 것뿐 아니라 표적 내부직원들이 이용하는 다양한 단말을 대상으로 한다.
3. 한가지 기술만이 아닌 Zero-day 취약점, 악성코드 등 다양한 보안 위협 공격 기술을 사용한다.
4. 일반적으로 공격은 침투, 검색, 수집 및 유출의 4단계로 실행되며, 각 단계별로 다양한 공격 기술을 사용한다.
보기
ㄱ.사회공학 기법 ㄴ.Adware ㄷ.MITM ㄹ.XDR ㅁ.Replace attack ㅂ.key logger attack ㅅ.APT |
ㅅ. APT (Advanced Persistent Threat) _ 지능형 지속 위협
> 고도로 조직화된 공격자 그룹이 장기간에 걸쳐 목표로 삼은 네트워크에 지속적으로 침투하여 정보를 탈취하거나 시스템을 조종하는 방식의 공격.
* 사회공학 기법 (Social Engineering) : 심리적 약점을 이용하여 정보를 얻거나 특정 행동을 유도하는 기술.
> 피싱 (Phishing) _ 이메일, 메시지, 웹사이트로 속여 정보를 수집.
* Adware : 사용자의 동의 없이 광고를 표시하는 소프트웨어. 브라우저에 원치않는 광고를 표시하거나 검색결과를 조작.
* MITM (Man-In-The-Middle Attack) : 통신하는 두 당사자 사이에 침입자가 끼어들어 정보를 가로채거나 조작.
> 암호화 되지 않은 데이터 전송을 이용. 데이터 패킷을 가로채는 방식. (Sniffing의 발전된 형태)
* XDR (Extended Detection and Response) : 보안 위협 감지 및 대응을 위한 통합 솔루션을 제공하는 플랫폼.
* Replace Attack : 기존의 데이터 또는 시스템 구성 요소를 해커가 조작하거나 대체하는 공격 유형.
> 소프트웨어 업데이트 파일이나 데이터베이스 항목을 해커가 제어하는 것으로 대체하여 시스템 감염/조작.
* 키로거 (Key Logger Attack) : 사용자의 키보드 움직임을 탐지하여 정보 수집.
18. 아래의 SQL 코드와 테이블을 참고하여 결과 값을 작성하시오.
SELECT
COUNT(*)
FROM
TABLE
WHERE
EMPNO > 100
AND
SAL >= 3000 OR EMPNO = 200
1
19. 다음 C언어 코드의 알맞는 출력 값을 작성하시오.
#include<stdio.h>
int isUpper(char c){
if(c >= 'A' && c <= 'Z') return 1;
else return 0;
}
int isLower(char c){
if(c >= 'a' && c <= 'z') return 1;
else return 0;
}
int isNum(char c){
if(c >= '0' && c <= '9') return 1;
else return 0;
}
void caesar(chat *p){
while (*p != 0){
if(isUpper(*p)) printf("%c", (*p - 'A' + 5) % 26 + 'A');
if(isLower(*p)) printf("%c", (*p - 'a' + 10) % 26 + 'a');
if(isNum(*p)) printf("%c", (*p - '0' + 3) % 10 + '0');
if((isUpper(*p) || isLower(*p) || isNum(*p)) == 0 ) printf("%c", *p);
}
}
int main(){
char*pw = "It is 8";
caesar(pw);
}
Nd sc 1
* 공백주의
https://www.youtube.com/watch?v=zBI0gJ1tKb8&list=PLYdThbnQN0eICnT37v0aSnuv7LwyQQ05L&index=4
( * 디자인패턴 * )
20. 다음 아래의 내용을 보고 알맞는 용어를 작성하시오.
구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴이다.
연관성이 있는 객체 군이 여러개 있을 경우 이들을 묶어 추상화하고, 어떤 구체적인 상황이 주어지면 팩토리 객체에서 집합으로 묶은 객체 군을 구현화 하는 생성 패턴이다
관련성 있는 여러 종류의 객체를 일관된 방식으로 생성하는 경우에 유용하다.
kit라고도 불린다.
Abstract Factory 추상팩토리
[생성 패턴]
- 추상팩토리 (Abstract Factory)
- 빌더 (Builder)
- 팩토리 메소드(Factory Method) _ virtual constructor 가상생성자
- 프로토타입 (Prototype)
- 싱글톤 (Singleton)
[구조 패턴]
- 어댑터 (Adapter)
- 브리지 (Bridge)
- 컴포지트 (Composite)
- 데코레이터 (Decorator)
- 퍼싸드 (Facade)
- 플라이웨이트 (Flyweight)
- 프록시 (Proxy)
[행위패턴]
- 책임 연쇄 (Chain of Responsibility)
- 커맨드 (Command)
- 인터프리터 (Interpreter)
- 반복자 (Iterator)
- 중재자 (Mediator)
- 메멘토 (Memento)
- 옵서버 (Observer)
- 상태 (State)
- 전략 (Strategy)
- 템플릿 메소드 (Template Method)
- 방문자 (Visitor)
'정보처리기사 > 실기기출' 카테고리의 다른 글
[정처기실기] 2024년 2회 (0) | 2024.10.03 |
---|---|
[정처기실기] 2023년 3회 (0) | 2024.04.18 |
[정처기실기] 2023년 2회 (0) | 2024.04.14 |
[정처기실기] 2023년 1회 (0) | 2024.04.03 |
[정처기실기] 2022년 3회 (0) | 2024.04.01 |