📌 결과 나온지 한 달이 지났지만 이제서야 정리하는,,,,
이전 시험은 보통 프로그래밍 언어 문제는 어렵지 않게 풀었는데 이번 시험에서는 프로그래밍 문제가 유달리 어려워서 애먹었더랬지.....
고생했던 문제들은 그래도 확실하게 짚고 넘어가야 맘이 편하니깐 다시 한번 정리 고고!
출처 : https://ss-o.tistory.com/162?category=1013696
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 testCon{
public static void main(String[] args){
Connection conn1 = Connection.get();
conn1.count();
Connection conn2 = Connection.get();
conn2.count();
Connection conn3 = Connection.get();
conn3.count();
System.out.print(conn1.getCount());
}
}
static은 메모리에 한번 할당되면 프로그램이 종료될때까지 메모리를 공유하는 것. 인스턴스를 여러번 생성하더라도 static변수나 메서드는 새롭게 생성되는 것이 아님.
① _inst 변수가 static으로 생성됨
② main에서 Connection.get()을 호출하면 _inst가 null인지 아닌지를 체크 후 _inst를 return
③ 만약 _inst가 null이라면 new Connection() 객체를 생성하고 count는 0으로 초기화
→ conn1을 생성해 Connection.get()을 호출할 때, _inst는 null이므로 if문을 돌아 Connection() 객체를 생성하게 됨. 객체를 생성하면 인스턴스를 생성하고 참조값을 return하기 때문에 여기서 부터는 _inst가 null이 아니게 됨
④ conn1.count() 는 0에서 count++ 하므로 1
⑤ conn2를 생성하고 다시 get()을 호출하면 _inst는 null이 아니기 때문에 객체를 새로 생성하지 않음. 그래서 count 값을 그대로 가지고 감
⑥ conn2.count() 는 1에서 count++ 하므로 2
⑦ conn3도 위와 마찬가지로 진행
⑧ conn3.count() 는 2에서 count++ 하므로 3
⑨ 결과적으로 count값는 3이 되었기 때문에 conn1.getCount()를 하면 3이 출력됨
ARP
ARP Spoofing : 로컬 네트워크(LAN)에서 사용하는 ARP 프로토콜의 허점을 이용해 자신의 MAC주소를 다른 컴퓨터의 MAC인 것처럼 속이는 공격
내가 작성한 답) 사용자에게 데이터에 대한 삽입, 삭제 등을 할 수 있는 권한을 부여하는 명령어
(1) 신분을 확인하는 인증, 접근 시도하는 가입자 또는 단말 식별
(2) 접근/허가를 결정하는 인가. 가입자나 단말에 권한 부여
(3) 리소스 사용 정보를 수집/관리하는 계정. 사용 시간, 정보, 위치 등 정보 수집
- Authentication 2. Authorization 3. Accounting
Factory Method
control
#include
struct src{
char name[12];
int os, db, hab, hhab;
};
int main(){
struct src st[3] = {{"가", 95, 88}, {"나", 84, 91}, {"다", 86, 75}};
struct src *p;
p = &st[0];
(p+1)→hab = (p+1)→os + (p+2)→db;
(p+1)→hhab = (p+1)→hab + p→os + p→db;
printf("%d", (p+1)→hab + (p+1)→hhab);
}
① p = {"가", 95, 88}
② src = {name, os, db, hab, hhab}
③ (p+1) = {"나", 84, 91}, (p+2) = {"다", 86, 75}
④ (p+1)→os + (p+2)→db : 84 + 75 = 159
⑤ (p+1)→hab + p→os + p→db : 159 + 95 + 88 = 342
⑥ (p+1)→hab + (p+1)→hhab : 159 + 342 = 501
(1) 최하위 모듈에서 위로 시작하는 () 테스트
(2) 하위 모듈들을 포괄하는 ()이 있어야함.
- 상향식 통합 2. 테스트 드라이버
x, y = 100, 200
print(x==y)
위의 결과는?
False
[A]
NAME |
---|
SMITH |
ALLEN |
SCOTT |
[B]
RULE |
---|
S% |
%T% |
SELECT COUNT(*) CNT FROM A CROSS JOIN B WHERE A.NAME LIKE B.RULE;
4
cross join은 교차결합, 카디션 곱이라고도 하며 join을 해서 나올 수 있는 모든 행의 조합을 보여주는 것. 여기에서는 각 결과를 곱해주면 된다.
즉, S로 시작하는 A.NAME의 개수는 2개, T를 포함하는 A.NAME의 개수 또한 2개이므로 2*2 = 4
인덱스
: 검색 연산의 최적화를 위해 키와 포인터의 쌍으로 구성되는 데이터 구조
테스트 조건, 테스트 데이터, 예상 결과
클래스
(1) 물리적으로 연결된 두개의 노드 사이의 데이터 전송, 오류 제어
(2) 경로 제어, 패킷 전달
(3) 압축
- 데이터링크 2. 네트워크 3. 표현
DES
# include
int main(){
int *arr[3];
int a = 12, b = 24, c = 36;
arr[0] = &a;
arr[1] = &b;
arr[2] = &c;
printf("%d", *arr[1] + **arr + 1);
}
37
*array[1] = 24
**array + 1 = 12 + 1 = 13
24 + 13 = 37
public class SSO{
public static voin 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);
}
}
}
}
& : 비트연산자. 같은 자리를 비교했을때 모두 1인 경우에만 1
| : 비트연산자. 같은 자리를 비교했을때 하나에만 1이 존재하면 1
^ : XOR연산자. 두 값이 같으면 false, 다르면 true
① (a == 2 | a == c) : a==2는 거짓 → 0, a==3은 참 → 1
!(c > d) : c > d는 거짓, !가 있으므로 참 → 1
(1 == b ^ c != d) : 1 == b 거짓 → 0, c != d 참 → 1, 0 ^ 1 → 1 (0과 1은 2진수로 변환 후 같은 자리수 끼리 XOR)
∴if(1 & 1 & 1) : 참
② a = b + c : a = 7
③ (7 == b ^ c != a) : 7 == b는 거짓 → 0, c != a는 참 → 1, 0 ^ 1 → 1
④ System.out.println(a) : 7
Cause Effect Graph
원인-결과 그래프 테스트 : 그래프를 활용해 입력 데이터 간의 관계 및 출력에 미치는 영향을 분석해 효용성이 높은 테스트 케이스를 선정해서 테스트 하는 것
문제에서는 블랙박스테스트를 설명하는 것이 있었고, 보기 중에는 화이트박스 테스트가 섞여 있었음
GUI
(1) 추상화
(2) 개념화
- Aggregation 2. Generalization
📢대망의 결과!!!!!!
ㅠㅠㅠㅠㅠㅠㅠ드디어ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
오예오예 소리 질러~!~!~!🤘🤘
ㅋㅋㅋㅋ짤 넘 귀엽네요 합격 축하드립니다~ 올려주신 자료 덕분에 저도 오늘 시험 잘 치고 왔습니다 ㅎㅎ