public class Main {
static void func(String[] m, int n) {
for (int i = 1; i < n; i++) {
if (m[i-1].equals(m[i])) {
System.out.print("O");
} else {
System.out.print("N");
}
}
for (String mo : m) {
System.out.print(mo);
}
}
public static void main(String[] args) {
String[] m = new String[3];
m[0] = "A";
m[1] = "A";
m[2] = new String("A");
func(m, 3);
}
}
func(m, 3) 호출 -> for 문i = 1 일 때, m[0].equals(m[1])"A".equals("A") -> true Oi = 2 일 때 m[1].equals(m[2])"A".equals(new String("A")) -> trueOequals() : 내용 비교를 하는 것이기 때문에 객체가 달라도 내용이 같으면 truefor-each 문"A""A"new String("A")AAA| 코드 | 설명 |
|---|---|
== | 객체의 주소 비교 |
equals | 문자열 내용 비교 |
"A" vs "A" | 리터럴 같은 객체 공유 |
"A" vs new String("A") | 다른 객체 |
정답
- OOAAA
def test(lst):
for i in range(len(lst) // 2):
lst[i], lst[-i-1] = lst[-i-1], lst[i]
ls = [1,2,3,4,5,6]
test(ls)
print(sum(ls[::2]) - sum(ls[1::2]))
test() 함수6//2 -> 3번 반복lst[0] <-> lst[-1] => 1 <-> 6 lst[1] <-> lst[-2] => 2 <-> 5lst[2] <-> lst[-3] => 3 <-> 4ls = [6, 5, 4, 3, 2, 1]print(sum(ls[::2]) - sum(ls[1::2]))ls[::2] : 인덱스 처음부터 끝까지 2씩 jmpls[1::2] : 인덱스 1부터 끝까지 2씩 jmp(6 + 4 + 2) - (5 + 3 + 1) = 3정답
- 3
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
LRU 페이지 교체 알고리즘
7 70 701 012 120 203 230 304 042 423 230 203 032 321 312 120 201 017 170 701
정답
- 12
ICMP, 송신 주소를 공격 대상의 IP 주소로 위장하고, 수신 주소를 해당 네트워크 라우터의 브로드캐스트 주소로 설정하는 공격으로 과부화 시키는 기법은? ICMP 패킷을 크게 만들어서 과부화 시키는 죽음의 핑과 같은 서비스 공격 유형이다.
정답
- 스머핑
int increment(){
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 +=increment();
}
printf("%d", sum);
}
static int x : 정적 변수 선언
반복문
| i | x | sum |
|---|---|---|
| i = 0 | x++ -> 2 | sum = 2 |
| i = 1 | x++ -> 4 | sum = 6 |
| i = 2 | x++ -> 6 | sum = 12 |
| i = 3 | x++ -> 8 | sum = 20 |
정답
- 20
인터넷을 통해 장치 간 사설 네트워크 연결을 생성하는 서비스로 장치의 실제 IP 주소를 가상 IP 주소로 대체하고, 데이터를 암호화하고, 데이터를 전 세계 보안 네트워크로 라우팅함으로써 정보를 보호하는 기법
VPN (Virtual Private Network)
VLAN (Virtual Local Area Network)
정답
- VPN
( ) 패턴은 객체 간의 상호 작용하는 방법과 책임을 분배하는 방법 에 중점을 두는 디자인 패턴으로 Command, Interpreter, Memento, Observer, Visitor등이 존재한다.
| 패턴 영역 | 생성 | 구조 | 행위 |
|---|---|---|---|
| 클래스 | - Factory Method | - Adaptor | - Interpreter - Template Method |
| 객체 | - Abstract Factory - Builder - Prototype - Singleton | - Adaptor - Bridge - Composite - Decorator - Facade - Flyweight - Proxy | - Chain of Responsibility - Command - Iterator - Mediator - Memento - Observer - State - Strategy - Visitor |
정답
- 행위 패턴
코드 내의 각 분기점이 true 또는 false로 평가될 때마다 해당 분기점이 모두 테스트 되는 것을 목표로 한다. 각 분기점이 모든 가능한 경로로 실행되었는지 확인하는 데 사용되는 커버리지 ( )
코드의 흐름을 여러 갈래로 나누는 조건문 또는 선택문을 의미한다. 예를 들어, if-else 문이나 switch 문에서 조건에 따라 실행 경로가 달라질 때를 의미한다. ( )
개별 조건문 내에 있는 각각의 조건이 true와 false 모두를 만족하도록 테스트하는 것을 의미한다. 예를 들어, if (A && B)와 같은 구문에서 A와 B가 각각 true와 false가 되는 경우를 테스트하는 것이 목표이다. ( )
(보기)
㉠ 결정(분기)/조건 커버리지
㉡ 결정(분기) 커버리지
㉢ 조건 커버리지
㉣ 분기 커버리지
㉤ 변경 조건/결정 커버리지
㉥ 문장(구문) 커버리지
㉧ 다중 조건 커버리지
| 커버리지 | 설명 | |
|---|---|---|
| 구 | 구문(문장) 커버리지 | 모든 문장이 한 번 이상 |
| 조 | 조건 커버리지 | 조건식에 상관 없이 개별 조건 T / F |
| 결 | 결정 커버리지 | 모든 조건식 T / F |
| 조 | 조건/결정(분기) 커버리지 | 조건 커버리지 개선 |
| 변 | 변형 조건/결정(분기) 커버리지 | |
| 다 | 다중 조건 커버리지 |
정답
- ㅂ, ㄹ, ㄷ
- 참조하는 테이블의 기본 키(Primary Key)를 가리키며, 데이터 무결성을 유지하는 데 중요한 역할을 한다. ( )
- 유일성과 최소성을 모두 갖춘 키이다. ( )
- 후보키 중에서 기본 키로 선택되지 않은 나머지 키이다. ( )
- 유일성을 만족시키지만, 최소성은 만족시키지 않는다.( )
(보기)
㉠ 슈퍼키
㉡ 외래키
㉢ 대체키
㉣ 후보키
| 종류 | 설명 |
|---|---|
| 슈퍼키 | - 유일성 O, 최소성 X - 어떤 릴레이션의 어떤 튜플들도 같은 값을 가지지 않는 속성 |
| 후보키 | 유일성 O, 최소성 O, Not NULL - 튜플을 유일하게 식별하기 위해 사용되는 속성들의 부분집합 |
| 기본키 | 유일성 O, 최소성 O, Not NULL - 후보키 중 선정된 키 |
| 대체키 | 유일성 O, 최소성 O, Not NULL - 후보키 중 선정된 키본키를 뺀 나머지 키들 |
| 외부키 | - 다른 릴레이션의 PK를 참조하는 속성 |
정답
- ㄴ 외래키
- ㄹ 후보키
- ㄷ 대체키
- ㄱ 슈퍼키

- 추가적인 질의를 제공하는 부분으로, 웹 서버에 전달할 추가 데이터를 나타낸다.( )
- 자원 경로를 나타내며, 서버 상에서 해당 리소스의 위치를 지정한다. ( )
- 웹 프로토콜을 정의하는 부분으로, 예를 들어 HTTP, FTP 등의 방식을 나타낸다. ( )
- 호스트와 포트 번호를 나타내는 부분으로, 서버 주소와 함께 포트번호를 나타낸다. ( )
- 특정 페이지 내의 위치를 가리키며, 문서 내 특정 섹션으로 이동하는 데 사용된다. ( )
scheme:[autority][path][?query][#fragment]정답
- 43125
struct Node {
int value;
struct Node* next;
};
void func(struct Node* node) {
while (node != NULL && node->next != NULL) {
int t = node->value;
node->value = node->next->value;
node->next->value = t;
node = node->next->next;
}
}
int main() {
struct Node n1 = {1, NULL};
struct Node n2 = {2, NULL};
struct Node n3 = {3, NULL};
n1.next = &n3;
n3.next = &n2;
func(&n1);
struct Node* current = &n1;
while (current != NULL) {
printf("%d", current->value);
current = current->next;
}
}
초기 상태
While문 첫 번째 반복
t = n1->value : t=1n1->value = n1->next->value : n1->value = 3n1->next->value = t : n3->value = 1node = node->next->next : n1->next=n3이고, n3->next = n2 이므로 node = n2While문 두 번째 반복
node = n2 node != NULL 참이지만, node->next != NULL 은 거짓최종 리스트
출력
| Node | n1 | n3 | n2 | NULL |
|---|---|---|---|---|
| 초기 상태 | value = 1 | value = 3 | value = 2 | |
| func() 실행 이후 | value = 3 | value = 1 | value = 2 |
정답
- 312
( ) 무결성은 데이터베이스의 테이블에서 기본 키(Primary Key)값을 반드시 유일하고 NULL이 아니게 유지해야 한다는 규칙을 의미한다.
정답
- 개체
def test(v):
if type(v) == type(""):
return len(v)
elif type(v) == type(100):
return 101
else:
return 20
a = "100.0"
b = 100.0
c = (100.0, 200.0)
print(test(a) + test(b) + test(c))
if type(v) == type(""): : v가 문자열 타입이면, 문자열의 길이 반환
elif type(v) == type(100): : v가 정수(int) 타입이면, 101 반환
else: : 두 조건 다 아니면 20 반환
a는 문자열타입 -> len(a) = 5
b는 float 타입 -> 20
c는 tuple -> 20
정답
- 45

| 명칭 | 표현 | 설명 |
|---|---|---|
| 연관 관계 | ────> | 객체간 개념적으로 연관 |
| 의존 관계 | - - - - - -> | 객체 변경 시 관계된 다른 객체도 변경 |
| 집합 관계 | ────◇ | 전체와 부분인 연관 관계 |
| 포함 관계 | ────◆ | 전체 소멸 시 부분도 소멸되는 집합 연관 관계 |
| 일반화 관계 | ────▷ | 일반화된 개념과 구체화된 객체의 관계 |
| 실체화 관계 | - - - - - -▷ | 인터페이스와 그것을 실체로 구현한 객체의 관계 |
정답
- ㄴ 연관, ㄷ 일반화, ㄱ 의존
public class Main {
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();
}
}
func() 내부에서 throw new NullPointerException(); 구문을 만나 NullPointerException 예외 발생하여 호출한 곳으로 전달catch(NullPointerException e) 예외 타입과 일치 -> 블록 실행sum = sum + 1; 이므로, sum = 1finally 블록 실행sum = sum + 100; 이 실행되므로, sum = 101catch(Exception e) 가 catch(NullPointerException e) 보다 앞에 위치했다면 catch(Exceptione) 에서 처리됨정답
- 101
class B {
int x = 3;
int getX() {
return x * 2;
}
}
class A extends B {
int x = 7;
@Override
int getX() {
return x * 3;
}
}
public class Annotation {
public static void main(String[] args) {
B b1 = new A();
A b2 = new A();
System.out.print(b1.getX() + b1.x + b2.getX() + b2.x);
}
}
b1.getX() : 실제 인스턴스가 A이므로, A의 getX()를 호출하여 21을 반환b2.getX() : A의 getX()를 호출하여 21 반환b1.x : b1의 선언 타입은 B -> 3b2.x : b2의 선언 타입은 A -> 7정답
- 52
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 class Generic{
public static void main(String[] args){
new Container<>(0).print();
}
public static class Container{
T value;
public Container(T t){
value = t;
}
public void print(){
new Printer().print(value);
}
}
}
Object가 됨print(Object a)가 호출됨new Container<>(0).print(); 에서 0은 autoboxing이 되어 Integer가 되지만정답
- B0
중앙 집중식 인프라 없이, 즉 사전 설정된 네트워크 기반 시설이 없이 구성된 자율형 네트워크를 의미합니다. 이러한 네트워크는 노드(주로 무선 장치)가 서로 직접 연결하여 통신하며, 군사 작전 중에 실시간으로 정보를 공유하기 위한 네트워크로 사용된다.
정답
- 애드혹 네트워크(Ad-hoc network)