3. 아래의 employee테이블과 project테이블을 참고하여 보기의 SQL명령어에 알맞는 출력 값을 작성하시오.
SELECT
count(*)
FROM employee AS e JOIN project AS p ON e.project_id = p.project_id
WHERE p.name IN (
SELECT name FROM project p WHERE p.project_id IN (
SELECT project_id FROM employee GROUP BY project_id HAVING count(*) < 2
)
);
def fnCalculation(x,y):
result = 0;
for i in range(len(x)):
temp = x[i:i+len(y)]
if temp == y:
result += 1;
return result
a = "abdcabcabca"
p1 = "ab";
p2 = "ca";
out = f"ab{fnCalculation(a,p1)}ca{fnCalculation(a,p2)}"
print(out)
class Main {
static int[] arr() {
int a[]=new int[4];
int b = a.length;
for(int i =0; i<b;i++)
a[i]=i;
return a;
}
public static void main(String args[]) {
int a[]=arr();
for(int i =0; i< a.length; i++)
System.out.print(a[i]+" ");
}
}
class A{
private int a;
public A(int a){
this.a = a;
}
public void display(){
System.out.println("a=" + a);
}
}
class B extends A {
public B(int a){
super(a);
super.display();
}
}
public class Main {
public static void main(String[] args){
B obj = new B(10);
}
}
abstract class Vehicle{
String name;
abstract public String getName(String val);
public String getName(){
return "Vehicle name:" + name;
}
}
class Car extends Vehicle{
private String name;
public Car(String val){
name=super.name=val;
}
public String getName(String val){
return "Car name : " + val;
}
public String getName(byte val[]){
return "Car name : " + val;
}
}
public class Main {
public static void main(String[] args){
Vehicle obj = new Car("Spark");
System.out.print(obj.getName());
}
}
public class Main {
public static void main(String[] args){
int i=0, sum=0;
while (i<10){
i++;
if(i%2 ==1)
continue;
sum += i;
}
System.out.println(sum);
}
}
7번 다음은 변수 n에 저장된 10진수를 2진수로 변환하여 출력하는 java프로그램이다. 프로그램을 분석하여 ( 1번 )( 2번 )빈칸에 알맞은 답을 쓰시오
class Main {
public static void main (String[] args) {
int[]a = new int[8];
int i=0; int n=10;
while ( 1번 ) {
a[i++] = ( 2번 );
n /= 2;
}
for(i=7; i>=0; i--){
System.out.print(a[i]);
}
}
}
public class Main {
public static void main(String[] args) {
int ary[][] = new int[가][나];
for(int i = 0; i <3; i++){
for(int j=0; j < 5; j++){
ary[i][j] = j*3+(i+1);
System.out.print(ary[i][j]+"");
}
System.out.println();
}
}
}
class Parent{
public int compute(int num){
if(num <=1) return num;
return compute(num-1) + compute(num-2);
}
}
class Child extends parent {
public int compute(int num){
if(num<=1) return num;
return compute(num-1) + compute(num-3);
}
}
class Main{
public static void main (String[] args){
Parent obj = new Child();
System.out.print(obj.compute(4));
}
}
public class Main{
public static void main(String[] args){
int arr[][] = new int[][]{{45,50,75},{89}};
System.out.println(arr[0].length);
System.out.println(arr[1].length);
System.out.println(arr[0][0]);
System.out.println(arr[0][1]);
System.out.println(arr[1][0]);
}
}
public class Main {
public static void main(String[] args){
int i, j;
for(j=0, i=0; i<=5; i++){
j+=i;
System.out.print(i);
if(i==5){
System.out.print("=");
System.out.print(j);
} else{
System.out.print("+");
}
}
}
}
public class ovr1 {
public static void main(String[] args){
ovr1 a1 = new ovr1();
ovr2 a2 = new ovr2();
System.out.println(a1.sun(3,2) + a2.sun(3,2));
}
int sun(int x, int y){
return x + y;
}
}
class ovr2 extends ovr1 {
int sun(int x, int y){
return x - y + super.sun(x,y);
}
}
public class Main{
public static void main(String[] args) {
int a = 3, b = 4, c = 3, d = 5;
if((a == 2 | a == c) & !(c > d) & (1 == b ^ c != d)) {
a = b + c;
if(7 == b ^ c != a) {
System.out.println(a);
} else {
System.out.println(b);
}
} else {
a = c + d;
if(7 == c ^ d != a) {
System.out.println(a);
} else {
System.out.println(d);
}
}
}
}
class A {
int a;
int b;
}
public class Main {
static void func1(A m){
m.a *= 10;
}
static void func2(A m){
m.a += m.b;
}
public static void main(String args[]){
A m = new A();
m.a = 100;
func1(m);
m.b = m.a;
func2(m);
System.out.printf("%d", m.a);
}
}
class Car implements Runnable{
int a;
public void run(){
try{
while(++a<100){
System.out.println("miles traveled :" +a);
Thread.sleep(100);
}
}
catch(Exception E){}
}
}
public class Main{
public static void main(String args[]){
Thread t1 = new Thread(new (가)());
t1.start();
}
}
class Main {
public static void main(String args[]) {
int i=3, k=1;
switch(i){
case 1:k+=1;
case 2:k++;
case 3:k=0;
case 4:k+=3;
case 5:k-=10;
default : k--;
}
System.out.print(k);
}
}
class Conv{
public Conv(int a){
this.a=a;
}
int func(){
int b=1;
for(int i =1;i<a;i++){
b=a*i+b;
}
return a+b;
}
}
public class Main {
public static void main(String args[]) {
Conv obj=new Conv(3);
obj.a=5;
int b=obj.func();
System.out.print(obj.a+b);
}
}
public class Exam {
public static void main(String[] args){
int a = 0;
for(int i=1; i<999; i++){
if(i%3==0 && i%2!=0)
a = i;
}
System.out.print(a);
}
}
class Static{
public int a=20;
static int b=0;
}
public class Main {
public static void main(String[] args) {
int a=10;
Static.b=a;
Static st=new Static();
System.out.println(Static.b++);
System.out.println(st.b);
System.out.println(a);
System.out.println(st.a);
}
}
abstract class Vehicle{
String name;
abstract public String getName(String val);
public String getName(){
return "Vehicle name:" + name;
}
}
class Car extends Vehicle{
private String name;
public Car(String val){
name=super.name=val;
}
public String getName(String val){
return "Car name : " + val;
}
public String getName(byte val[]){
return "Car name : " + val;
}
}
public class Main {
public static void main(String[] args){
Vehicle obj = new Car("Spark");
System.out.print(obj.getName());
}
}
public class Main {
public static void main(String[] args) {
A b = new B();
b.paint();
b.draw();
}
}
class A {
public void paint() {
System.out.print("A");
draw();
}
public void draw() {
System.out.print("B");
draw();
}
}
class B extends A {
public void paint() {
super.draw();
System.out.print("C");
this.draw();
}
public void draw() {
System.out.print("D");
}
}
class Person {
private String name;
public Person(String val) {
name = val;
}
public static String get() {
return name;
}
public void print() {
System.out.println(name);
}
}
public class Main {
public static void main(String[] args) {
Person obj = new Person("Kim");
obj.print();
}
}
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();
}
}
class Main {
public static void main(String[] args) {
int[] a = new int[]{1, 2, 3, 4};
int[] b = new int[]{1, 2, 3, 4};
int[] c = new int[]{1, 2, 3};
check(a, b);
check(a, c);
check(b, c);
}
public static void check(int[] a, int[] b) {
if (a==b) {
System.out.print("O");
}else{
System.out.print("N");
}
}
}
class Main {
public static void main(String[] args) {
String str = "ITISTESTSTRING";
String[] result = str.split("T");
System.out.print(result[3]);
}
}
public class Main{
public static void main(String[] args){
Base a = new Derivate();
Derivate b = new Derivate();
System.out.print(a.getX() + a.x + b.getX() + b.x);
}
}
class Base{
int x = 3;
int getX(){
return x * 2;
}
}
class Derivate extends Base{
int x = 7;
int getX(){
return x * 3;
}
}
public class ExceptionHandling {
public static void main(String[] args) {
int sum = 0;
try {
func();
} catch (NullPointerException e) {
sum = sum + 1;
} catch (Exception e) {
sum = sum + 10;
} finally {
sum = sum + 100;
}
System.out.print(sum);
}
static void func() throws Exception {
throw new NullPointerException();
}
}
class Main {
public static class Collection<T>{
T value;
public Collection(T t){
value = t;
}
public void print(){
new Printer().print(value);
}
class Printer{
void print(Integer a){
System.out.print("A" + a);
}
void print(Object a){
System.out.print("B" + a);
}
void print(Number a){
System.out.print("C" + a);
}
}
}
public static void main(String[] args) {
new Collection<>(0).print();
}
}
#include <stdio.h>
int main(){
int res;
res = mp(2,10);
printf("%d",res);
return 0;
}
int mp(int base, int exp) {
int res = 1;
for(int i=0; i < exp; i++){
res *= base;
}
return res;
}
15번 아래 프로그램은 정수를 역순으로 출력하는데 (1)(2)(3)에 들어갈 연산자를 쓰시오
#include <stdio.h>
int main() {
int number = 1234;
int div = 10;
int result = 0;
while (number ( 1 ) 0) {
result = result * div;
result = result + number ( 2 ) div;
number = number ( 3 ) div;
}
printf("%d", result);
return 0;
}
#include <stdio.h>
int len(char*p);
int main(){
char*p1 = "2022";
char*p2 = "202207";
int a = len(p1);
int b = len(p2);
printf("%d", a+b);
}
int len(char*p){
int r = 0;
while(*p != '\0'){
p++;
r++;
}
return r;
}
#include <stdio.h>
int main(int argc, char*argv[]) {
int a[4]={0,2,4,8};
int b[3]={};
int i=1;
int sum=0;
int *p1;
for(i;i<4;i++){
p1=a+i;
b[i-1]=*p1-a[i-1];
sum=sum+b[i-1]+a[i];
}
printf("%d",sum);
return 0;
}
10번 다음은 이진수에서 십진수로 변환하는 코드이다. (가)는 연산자이고 (나)는 정수일 때 빈칸을 알맞게 쓰시오.
#include <stdio.h>
int main(void) {
int input = 101110;
int di = 1;
int sum = 0;
while (input > 0) {
sum = sum + (input (가)(나) * di);
di = di * 2;
input = input / 10;
}
printf("%d", sum);
return 0;
}
#include<stdio.h>
int main(void)
{
int n[3] = {73, 95, 82};
int sum = 0;
for(int i=0;i<3;i++){
sum += n[i];
}
switch(sum/30){
case 10:
case 9: printf("A");
case 8: printf("B");
case 7:
case 6: printf("C");
default: printf("D");
}
return 0;
}
#include<stdio.h>
int main(void){
int E[] = {64, 25, 12, 22, 11};
int n = sizeof(E) / sizeof(E[0]);
int i = 0;
do {
int j = i + 1;
do {
if (E[i] (가) E[j]) {
int tmp = E[i];
E[i] = E[j];
E[j] = tmp;
}
j++;
} while (j < n);
i++;
} while (i < n - 1);
return 0;
}
#include <stdio.h>
void swap(int a, int b) {
int t = a;
a = b;
b = t;
}
int main() {
int a = 11;
int b = 19;
swap(a, b);
switch(a) {
case 1:
b += 1;
case 11:
b += 2;
default:
b += 3;
break;
}
printf("%d", a-b);
}
#include <stdio.h>
int func(){
static int x =0;
x+=2;
return x;
}
int main(){
int x = 1;
int sum=0;
for(int i=0;i<4;i++) {
x++;
sum+=func();
}
printf("%d", sum);
return 0;
}
데이터 전송시 오류를 검출하고 수정하는 오류 검출 방법 중 (가) 코드는 데이터 전송 과정에서 발생한 오류를 검출해 재전송 요구 없이 수신측에서 스스로 수정하는 (나) 방식에 포함된다. 이와 반대로 오류 발생시 송신측에 재전송을 요구하는 방식인 (다)의 종류에는 (라) 검사, (마) 검사가 있따.
(가) 코드 : 전송 데이터에 Nbit의 검사 비트를 추가해 오류를 검출하고 수정까지 할 수 있는 방법 (라) 검사 :전송 데이터의 한 블록 끝에 1bit의 검사 비트 추가함으로써 오류를 검출하는 방법 (마) 검사 : 송신측과 수신측이 동일한 특정 다항식을 사용하여 오류를 검출하는 방법
HDLC 프로토콜은 데이터링크 계층의 대표적인 프로토콜로, 정보를 전송 제어 부호가 포함된 프레임이라는 단위로 분할하여 전송한다. 프로토콜의 구조는 프레임의 시작과 끝, 주소부, 제어부, 데이터부, 오류검출부로 구분된다. 이 때 제어부의 경우 형식에 따라 3가지 프레임으로 구분된다 사용자 정보와 제어 정보를 실어 사용자 데이터 및 일부 제어 정보 전달에 쓰이는 (가) 프레임, 오직 제어 정보만 실어 확인 응답, 데이터 링크의 흐름제어 및 오류제어 용도로 쓰이는 (나) 프레임, 그리고 링크 관리 정보를 실어 링크 자체의 관리용으로 많이 쓰이는 (다) 프레임이 존재한다. 그리고 HDLC의 전송 모드에는 NRM, (라), (마)가 있다. -NRM : 기본 서버는 보조 서버로 데이터 전송을 시작할 수 있지만 보조 서버들은 기본 서버의 명령에 대한 응답으로만 데이터를 전송할 수 있는 모드 -(라) : 가장 널리 사용하는 모드로 기본 서버와 보조 서버들이 서로 대등하게 균형적으로 명령과 응답하며 동작하는 모드 -(마) : 보조 서버들이 기본 서버의 허가없이 데이터 전송을 게시할 수 있는 모드
( 이 문제는 보기가 있는 문제였는데 구역이런 이야기가 나와서 zone으로 찍고 입력할때 쓰니까 뭔가 타이핑 관련돼있는 거라 타이포뭐시기 찍고 했어야하는 문제였다)
( 1 )은/는 프로세서(processor) 안에 독립적인 보안 구역을 따로 두어 중요한 정보를 보호하는 ARM사에서 개발한 하드웨어 기반의 보안 기술로 프로세서(processor) 안에 독립적인 보안 구역을 별도로 하여, 중요한 정보를 보호하는 하드웨어 기반의 보안 기술이다.
( 2 )은/는 사용자들이 사이트에 접속할 때 주소를 잘못 입력하거나 철자를 빠뜨리는 실수를 이용하기 위해 유사한 유명 도메인을 미리 등록하는 일로 URL 하이재킹(hijacking)이라고도 한다.
MD5 Land Attack IPsec SQL Injection 약술 스니핑 약술 세션 하이재킹 AES Authentication/Authorization/ACcounting ARP DES TKIP ISMS Watering hole IDEA/SKIP JACK vpn 사회 공학/ 다크 데이터 SIEM SSO 바이러스/웜/트로이목마 템퍼푸루핑 대칭키 비대칭키 분류 해시 암호 알고리즘 분류 OAuth Smurf VPN
20년 1회
10번 1991년 R.rivest가 MD4를 개선한 암호화 알고리즘으로, 각각의 512비트 짜리 입력 메시지 블록에 대해 차례로 동작한다. 각 512비트 입력 메시지를 블록을 처리하고 나면 128 비트 스테이트 의 값이 변하는 암호화 알고리즘을 쓰시오.
12번 다음은 네트워크 공격에 대한 패킷 로그를 표현한 것이다. 아래의 패킷 로그와 같이 공격자가 패킷의 출발지 주소 또는 포트를 임의로 변경하여 송신측 IP주소 또는 포트를 동일하게 함으로써 송신 IP주소가 자신이므로 자신에게 응답을 수행하게 된다. 이처럼 자신에 대한 무한히 응답하는 패킷을 계속 전송하여 컴퓨터의 실행 속도를 느리게 하거나 동작을 마비시켜 서비스 거부 상태에 빠지도록 하는 네트워크 공격 유형이 무엇인지 쓰시오.
10번 1974년 IBM이 개발하고 1975년 NBS에 의해 미국의 국가 표준으로 발표된 암호화 알고리즘으로, 블록 크기는 64비트, 키 길이는 56비트이며, 16회의 라운드를 수행한다. 컴퓨터 기술이 발달함에 따라 해독이 쉬워지면서 미국의 국가 표준이 2001년 AES로 대체된 암호화 알고리즘
2번 다음은 대칭 키 알고리즘에 대한 설명이다. 해당 설명에 맞는 용어를 보기에 골라 작성하시오
1) Xueja Lai와 James Messey가 만든 알고리즘으로 PES(Proposed Encryption Standard)에서 IPES로 변경되었다가, 1991년에 제작된 블록 암호 알고리즘으로 현재 국제 데이터 암호화 알고리즘으로 사용되고 있다. 64비트 블록을 128비트의 key를 이용하여 8개의 라운드로 구성되어 있다
2) 미국의 NSA에서 개발한 Clipper 칩에 내장되는 블록 알고리즘이다. 전화기와 같은 음성을 암호화하는데 주로 사용되며 64비트 입출력에 80비트의 키 총 32라운드를 가진다
( 1 ) 은/는 보안학적 측면에서 기술적인 방법이 아닌 사람들간의 기본적인 신뢰를 기반으로 사람을 속여 비밀 정보를 획득하는 기법이다.
( 2 ) 은/는 빅데이터(Big Data)와 비슷하면서도 구조화돼 있지 않고, 더는 사용하지 않는 ‘죽은’ 데이터를 의미한다. 일반적으로 정보를 수집해 저장한 이후 분석이나 특별한 목적을 위해 활용하는 데이터가 아니며, 저장공간만 차지하고 이러한 이유로 심각한 보안 위험을 초래할 수 있다.
( ) 은/는 머신러닝 기술을 이용하여 IT 시스템에서 발생하는 대량의 로그를 통합관리 및 분석하여 사전에 위협에 대응하는 보안 솔루션이다. 서로 다른 기종의 보안솔루션 로그 및 이벤트를 중앙에서 통합 수집하여 분석할 수 있으며, 네트워크 상태의 monitoring 및 이상징후를 미리 감지할 수 있다.
( )은/는 여러 개의 사이트에서 한번의 로그인으로 여러가지 다른 사이트들을 자동적으로 접속하여 이용하는 방법을 말한다. 일반적으로 서로 다른 시스템 및 사이트에서 각각의 사용자 정보를 관리하게 되는데 이때 하나의 사용자 정보를 기반으로 여러 시스템을 하나의 통합 인증을 사용하게 하는 것을 말한다. 즉 하나의 시스템에서 인증을 할 경우 타 시스템에서는 인증 정보가 있는지 확인하고 있으면 로그인 처리를 하도록 하고, 없는 경우 다시 통합 인증을 할 수 있도록 만드는 것을 의미한다.
- 대칭키 알고리즘으로 1997년 NIST(미국 국립기술표준원)에서 DES를 대체하기 위해 생성되었다. - 128비트, 192비트 또는 256비트의 가변 키 크기와 128비트의 고정 블록 크기를 사용한다. - 높은 안전성과 효율성, 속도 등으로 인해 DES 대신 전 세계적으로 많이 사용되고 있다.
5. 다음은 네트워크 취약점에 대한 문제이다. 아래 내용을 보고 알맞는 용어를 작성하시오.
- IP나 ICMP의 특성을 악용하여 엄청난 양의 데이터를 한 사이트에 집중적으로 보냄으로써 네트워크의 일부를 불능 상태로 만드는 공격이다. - 여러 호스트가 특정 대상에게 다량의 ICMP Echo Reply 를 보내게 하여 서비스거부(DoS)를 유발시키는 보안공격이다. - 공격 대상 호스트는 다량으로 유입되는 패킷으로 인해 서비스 불능 상태에 빠진다.
처리량/응답시간/경과시간 살충제 패러독스 약술 정적 테스트 화이트박스 테스트프로그램 제어흐름 블랙박스 테스트 샘플링 오라클 동치분할검사 경계값 분석/동치분할 검사 단위 테스트/통합 테스트 화이트박스 테스트 커버리지 스텁 테스트 조건/테스트 데이터/예상 결과 Cause-Effect Graph 상향식 통합 테스트/테스트 드라이버 Static Anaysis/Dynamic Analysis 블랙 박스 테스트 기법 종류 단위 테스트/통합테스트/시스템 테스트/인수 테스트 베타/알파 Regression Junit Boundary Value Analysis 화이트박스 테스트프로그램 제어흐름 조건 커버리지 스텁/드라이버 문장/분기/조건
20년 1회
8번 애플리케이션 성능이란 사용자가 요구한 기능을 최소한의 자원을 사용하여 최대한 많은 기능을 신고하게 처리하는 정도를 나타낸다. 애플리케이션 성능 측정의 지표에 대한 다음 설명에서 괄호에 들어갈 알맞은 용어르 쓰시오.
(가) : 일정한 시간 내에 애플리케이션이 처리하는 일의 양을 의미한다
(나) : 애플리케이션에 요청을 전달한 시간부터 응답이 도착할 때까지 걸린 시간을 의미한다
(다) : 애플리케이션에 작업을 의뢰한 시간부터 처리가 완료될 때까지 걸린 시간을 의미한다
자원 활용률 : 애플리케이션이 의뢰한 작업ㅇ르 처리하는 동안의 CPU, 메모리, 네트워크 등의 자원 사용률을 의미한다
(가 )은 입력 조건의 중간값보다 경계값에서 오류가 발생될 확률이 높다는 점을 이용한 검사 기법이고, (나)는 입력 조건이 유효한 경우와 그렇지 않은 경우의 입력 자료의 개수를 균등하게 정하는 검사 기법이다. 예를 들어 0<=x<=10과 같은 조건이 있을 때, (1)은 -1,-,10,11을 입력값으로, (2)는 0이상 10이하의 수 n개와 0미만 10초과의 수 n개를 입력값으로 정한다
10번 애플리케이션 테스트에 대한 다음 설명에서 각 지문(1, 2)에 해당하는 용어를 <보기>에서 찾아 기호로 쓰시오
1. 코딩 직후 소프트웨어 설계의 최소 단위인 모듈이나 컴포넌트에 초점을 맞춰 수행하는 테스트로, 모듈 테스트라고 불린다. 사용자의 요구사항을 기반으로 한 기능성 테스트를 최우선으로 인터페이스, 외부적 I/O, 자료구조, 독립적 기초 경로, 오류 처리 경로, 경계 조건 등을 검사한다
2. 모듈들을 결합하여 하나의 시스템으로 완성시키는 과정에서 테스트를 의미하며, 모듈 간 또는 인터페이스가 정상적으로 실행되는지 검사한다
통합 테스트는 단위 테스트가 끝난 모듈을 통합하는 과정에서 발생하는 오류 및 결함을 찾는 테스트 기법으로, 하위 모듈에서 상위 모듈 방향으로 통합하는 상향식 통합 테스트와 상위 모듈에서 하위 모듈 방향으로 통합하는 하향식 통합 테스트가 있다. 상향식 통합 테스트는 미완성이거나 문제가 있는 상위 모듈을 대체할 수 있는 테스트 드라이버가, 하향식 통합 테스트는 미완성이거나 문제가 있는 하위 모듈을 대체할 수 있는 테스트( )이(가) 있어야 원활한 테스트가 가능하다
1) ( ) 테스트는 하드웨어나 소프트웨어의 개발 단계에서 상용화하기 전에 실시하는 제품 검사 작업, 제품의 결함 여부, 제품으로서의 가치 등을 평가하기 위해 실시한다. 선발된 잠재 고객으로 하여금 일정 기간 무료로 사용하게 한 후에 나타난 여러 가지 오류를 수정, 보완하다. 공식적인 제품으로 발매하기 이전에 최종적으로 검사한다
사용자가 직접 테스트해서 관련 피드백(?)을 개발자한테 알려주는 시험
2) ( )테스트는 새로운 제품 개발 과정에서 이루어지는 첫 번째 테스트, 즉, 시제품이 운영되는 동안의 신제품 연구와 개발 과정 단계에서 초기 작동의 결과를 평가하는 수단이며 개발 회사 내부에서 이루어지는 테스트로서 단위테스트, 구성 테스트, 시스템 테스트 등을 포함한다
내부필드테스트라고도 하는데 개발업체 내부 직원 또는 회사와 밀접한 관계를 유지하는 일부 사용자만 참여하는 시험