2017년 12월 11일 월요일

네트워크 12월 12일 - 1

피켓트레이서

라우터 2911

2960 스위치

PC 서버

서버 DNS, MAIL, WEB, 방화벽 설정

2017년 12월 8일 금요일

자바 복소수

복소수 = 실수부 + 허수부

예) 3 + 2i, -1 - 2i

i = root(-1)
i*i = -1

복소수 합, 곱

(1+2i) + (2+3i) = 3 + 5i
(1+2i) * (2+3i) = 2 + 3i + 4i - 6 = -4 + 7i  // 분배법칙 적용

2017년 12월 7일 목요일

JAVA Student 클래스 만들기, String.format 메소드


class Student1 {
private String name;
private int rollno, age;

public void setName(String n) {
name = n;
}
public void setRollno(int r) {
rollno = r;
}
public void setAge(int a) {
age = a;
}
public String toString() {
return String.format("학생[%s:%d:%d]", name, rollno, age);
}

}


public class StudentTest {

public static void main(String[] args) {
Student1 s = new Student1();

s.setName("김현준");
s.setAge(24);
s.setRollno(1301081);

System.out.println(s);

}

}

2017년 12월 6일 수요일

네트워크 12월 07일 - 2

암호 보안 기술
원웨이 펑션으로 역으로 되돌리는데 컴퓨터 계산으로 10년 걸린다 한마디로 불가능
되돌릴거면 알고리즘을 안다 해도 키를 알아야 한다.

비밀키 = 대칭형, 대표적으로 DES, 암호키와 복호키가 동일, 키의 분배 문제가 있다.(키 분배의 어려움) 이걸 개선한것이 비 대칭형(공개키)
비 대칭형 = 잠그는거랑 푸는게 다르다. 대표적으로 RSA, 공개키 나에게 보낼 사람들은 공개된 키로 암호화를 해서 보낸다. 내가 가진 키로만 풀 수 있으니 비밀성 보장., 암호화와 복호화키가 다르니 키 분배 문제가 없다.
전자서명 = 키(개인키+공개키)를 이용하여 본인만 가지고 있는 키를 이용하여 본인 이라는걸 증명,
인증 = 인증과 권한을 헷갈리면 안됨, 인증을 위해 시스템에 접근하는 각 사용자가 권한이 있는 사용자인지 구분해야 하고, 각 사용자가 본인 여부를 확인하는 과정도 필요하다.
생체 인식 = 개인의 독특한 생체 정보(지문, 목소리, 홍채, 손의 정맥 등)를 패스워드로 활용하여 인증하는 방식.

메일 보안 기술
- 메일 자체를 암호화 하여 슈퍼유저라도 볼 수 없게 만든다.
PGP 보안성은 조금 취약하나 구현이 쉽다.
PEM - 표준형, 좀 더 강력하다



---------------------------------------------------------------------------------------
GN3 - 피켓트레이서 같은 프로그램인데 존나 무거움

2017년 12월 5일 화요일

네트워크 12월 06일 - 1

어플리케이션 보안
네트워크 보안

차단

가로채기 - 슬리핑 가는 정보를 도청

변조 - 문서를 바꿔서 전달
위조 - 권한을 바꿔 전달

IP 스푸핑 - ip주소를 속이는 행위 DHCP

IP 스푸핑을 차단하는 방법
- 엑세스 제어
- 필터링
- 암호화

IP 스니핑 - 데이터를 엿듣는 일종의 도청 행위 스위치가 나오고나서 많이 사라졌다. DHCP 스푸핑과 같이 사용해야 사용할만하다

SSL 시큐어 소켓 레이어
VPN 버추얼 프라이빗 네뜨웍

시스템 보안 기술 - 자기 자신 보안, 개인 방화벅, 침입 탐지 시스템, 침입 방지 시스템

방화벽 - 출입문과 비슷하다. 인증된 사용자만 들어오게 허용.
바왛벽의 기본 구성요소
네트워크 정책 - ICMP 프로토콜 차단 등
방화벽 사용자 인증 시스템 - 아디 로그인 같이 이용
패킷 필터링, 응용 계층 게이트웨이


바오하벽의 일반적인 사용 방법은 스크리닝 라우터

베스천 호스트 스크리닝 라우터 보단 속도 느림


방화벽 시스템 방식
- 패킷 필터링 방식
> 디도스를 못막는다. 7계층 어픞리케이숀 방화벽은 막음

하이브리드 방화벽
> 혼용 방화벽

인바운드 - 내쪽으로 들어오는거
아웃바운드 - 나가는거

침입 탐지 시스템(IDS)
- 액숀을 안취한다. 경고만 해줌

침입 방지 시스템(IPS)
- 액숀을 취한다. 실제로 막아줌 비쌈 능동적인 시스템

요즘은 웹 방화벽도 있다. http를 타고오는 스크립트 분석

일반적인 방화벽 3~4계층

암호화 고등수학을 해야함 지가 박사때 들은거 자랑함 지가 수학 97점인데 포기함 지같은 천재도 못한다고 개념만 알라고함

암호화는 키와 알고리즘으로 구성, 원웨이 평션을 이용, 철수야 방정식 알제? 윤동아 옆에 누고 A+B=C인데 C는 A+B인걸 못알게함 이게 원웨이 뻥션임 DES  잠그는키와 푸는키가 같음
대칭형 암호화 - 잠그는 키와 여는 키가 같음 존나큰 단점이 키를 나눠써야함 키만 있으면 개나소나 염
비 대칭형 암호화 - 잠그는 키와 푸는 키가 다름 대표적 RSA, 퍼블릭키 알고리즘이라고도 함 내가 이걸 썻다 도장 딱 전자 서명

비밀키, 공개키 비슷 인증, 전자 서명 비슷

JAVA

import java.util.Scanner;
public class Www {
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  String str;
 
  while (true) {
   System.out.print("문자열을 입력하세요> ");
   str = sc.next();
  
   if (str.equals("quit"))
    break;
   if (str.matches("^www\\.(.+)")) // 정규식 www.으로 반드시 시작해야함 ^문자열의 시작  \\. \"하듯이 일반적인 .표현 (.+) 아무거나(.) 와야된다.
    System.out.println(str + " 은 'www'로 시작합니다.");
   else
    System.out.println(str + " 은 'www'로 시작하지 않습니다.");
  }
 }
}

JAVA 메소드

static method(정적메소드)  ==  객체생성없이 호출

Math.sqrt(9.0) == 3.0

Math.random() : [0, 1)

Integer.parseInt("123") == 123

Double.pareseDouble("3.14") == 3.14

JAVA 문자열

문자열은 기초 자료형이 아니다. 객체이다.
객체는 하프(힢)이라는 공간에 저장된다.
String s = new String("Hello World!"); // 선언과 동시에 초기화

s == 참조변수

String 클래스의 메소드

charAt(int index)  : char해당하는 위치의 문자를 반환
equals(Ovject anObject) : boolean 문자열이 같은지 비교한다
String s1 = new String("Hello");
String s2 = new String("Hello");
String s3 = "Hello";
String s4 = "Hello";

s3 == s4 // true 처음은 새로 만들어도 s4 얘는 s3의 Hello 그대로 가져옴
s1 == s2 // false 이유는 참조형 변수라서 주소값을 비교하기 때문. new연산자를 사용해서 둘다 새로운 객체이다.
s1.equals(s2) // true , 대소문자 구분한다. Hello와 hello 구분하면 안댐
s1.equalsIgnoreCase(s2) // Hello, hello를 넣어도 true이다. 대소문자 구분을 안 한다.
s1.concat(s2) // HelloHello 문자 두개를 붙인다 s1+s2와 같은 기능이다.
s1.isEmpty() // false 이 메소드는 length()가 0이면 true를 반환한다.
compareTo(Stirng anotherString) // 사전적 순서로 문자열을 비교한다. 앞에 있으면 -1, 같으면 0, 뒤에 있으면 1이 반환, 내가 작으면 음수 내가 크면 양수 사전적 순서라는 것은 사전에 누가 먼저 나오는지 라고 생각하면 편하다. "abcde"와 "abd"를 비교하면 "abd"가 더 크다.
s1 = Hello, s2 = World
s1.compareTo(s2) // s1 - s2 =-15, s2 - s1 = 15

/* String 객체 == 상수 문자열
 * 기존에 참조하던 객체를 바꾸는게 아니라 참조 주소가 변경된것이다.
 * String s1 = new String("Hello");
 * s1 = s1.toUpperCase();
 *
 * Hello 값이 어디 가는게 아니라 그대로 있고 s1은 참조하던 주소가 변경된것이다.
 * Hello == 쓰레기
 *   
 */
public class StringTest {
 public static void main(String[] args) {
  String proverb = "A barking dog";
  String s1, s2, s3, s4;
 
  System.out.println("문자열의 길이 ="+ proverb.length());
 
  s1 = proverb.concat(" never Bites!"); // 문자열 결합 + 연산자와 같음
  s2 = proverb.replace('b', 'B'); // 문자 교환
  s3 = proverb.substring(2, 5); // 인덱스 2이상 5미만
  s4 = proverb.toUpperCase(); // 대문자 변환
 
  System.out.println(s1);
  System.out.println(s2);
  System.out.println(s3);
  System.out.println(s4);
 }
}

JAVA 실습) 직사각형의 너비와 높이를 입력받아 넓이와 둘레길이 계산

import java.util.Scanner;
public class Test01 {
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  int w,h;
 
  System.out.print("가로, 세로 입력: ");
  w = sc.nextInt();
  h = sc.nextInt();
 
  System.out.printf("넓이 = %d\n둘레길이 = %d", w*h, (w+h)*2);
 }
}

import java.util.Scanner;
public class Test02 {
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  int w,h;
 
  System.out.print("가로, 세로 입력: ");
  w = sc.nextInt();
  h = sc.nextInt();
 
  System.out.printf("넓이 = %d\n둘레길이 = %d", area(w,h), length(w,h));
 }
 static int area(int w, int h) {
  return w*h;
 }
 static int length(int w, int h) {
  return (w+h)*2;
 }
}


import java.util.Scanner;
class Rectangle {
 private int w, h;

 public int area() {
  return w*h;
 }
 public int length() {
  return (w+h)*2;
 }
 public void setW(int x) {
  w = x;
 }
 public void setH(int x) {
  h = x;
 }
 public String toString() {
  return "Rectangle[너비:" + w + " 높이:" + h + "]" ;
 }

}
public class Test03 {
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  Rectangle MyRt = new Rectangle();
  System.out.print("가로, 세로 입력: ");
  MyRt.setW(sc.nextInt());
  MyRt.setH(sc.nextInt());
 
  System.out.printf("넓이 = %d\n둘레길이 = %d\n", MyRt.area(), MyRt.length());
  System.out.println(MyRt);
 }
}

2017년 12월 1일 금요일

JAVA 실습) 반지름 입력받아 원의 넓이와 둘레 출력

3가지 방법이 있다.
1) 바로 main 안에서 구현

import java.util.Scanner;

public class MyMathTest {

public static void main(String[] args) {
int radius;
final double PI = 3.14;
double area, round;
Scanner sc = new Scanner(System.in);

System.out.print("반지름 입력: ");
radius = sc.nextInt();

area = radius * radius * PI;
round = 2 * PI * radius;

System.out.printf("원의 넓이=%.1f\n 원의 둘레길이=%.1f\n", area, round);

}

}

2) 절차지향프로그래밍 (C언어 스타일)
import java.util.Scanner;

public class MyMathTest {

public static void main(String[] args) {
int radius;
double area, round;
Scanner sc = new Scanner(System.in);
System.out.print("반지름 입력: ");
radius = sc.nextInt();
area = calArea(radius);
round = calRound(radius);
System.out.printf("원의 넓이=%.1f\n원의 둘레길이=%.1f\n", area, round);

}
static double calArea(int r) {
final double PI = 3.14;
return r*r*PI;
}
static double calRound(int r) {
final double PI = 3.14;
return 2*PI*r;
}

}

3) 객체지향프로그래밍

1. 추상화


상태(필드, 속성) : 반지름

동작 : 넓이, 둘레길이

2. UML

Cricle
---------------------------------
- radius : int
+ calArea() : double
+ calRound() : double
+ setRadius(int r) : void
+ toString() : String
---------------------------------

3. UML을 토대로 클래스 생성

public class Circle {
int radius;
static final double PI = 3.14;
public double calArea() { // 필드에 r이 있으니 매개변수가 따로 필요없다. 객체지향의 장점이다. 전달값을 줄일수가있따
return radius*radius*PI;
}
public double calRound() {
return 2*PI*radius;
}
public void setRadius(int r) {
radius = r;
}
public String toString() {
return "Circle[radius="+ radius+ "]";
}

}

4. 객체를 이용해 완성
import java.util.Scanner;

public class MyMathTest {

public static void main(String[] args) {
int radius;
double area, round;
Scanner sc = new Scanner(System.in);
Circle myCircle = new Circle();
System.out.print("반지름 입력: ");
radius = sc.nextInt();
myCircle.setRadius(radius);
area = myCircle.calArea();
round = myCircle.calRound();
System.out.printf("원의 넓이=%.1f\n원의 둘레길이=%.1f\n", area, round);
System.out.println(myCircle);

}

}

JAVA UML

객체 추상화 -> 클래스 -> 객체 사용

클래스 만들기 전에 UML을 만든다.
그림을 그리는 것
- 비공개 + 공개


Television

- isOn : boolean
- volume : int
- channel : int
--------------------
+setChannel()
+getChannel()
.
.
.
.

2017년 11월 30일 목요일

JAVA 클래스 LAB) Car 만들기


public class Car {
String color;
int speed;
int gear;

public String toString () {
return "Car [색 : " + color + " 속도 : " + speed + " 기어 : " + gear + "]";
}

void changeGear (int x) {
gear = x;
}

void speedUp () {
speed += 10;
}

void speedDown () {
speed -= 10;
}

void setColor (String s) {
color = s;
}

}



public class CarTest {

public static void main(String[] args) {
Car myCar = new Car();
myCar.changeGear(1);
myCar.speedUp();
myCar.speedUp();
myCar.setColor("빨강");
System.out.println(myCar);

}

}

JAVA 메소드

sum = add(25, 47); // 25, 47이 인수이다.

int add (int x, int y) // int x, int y가 매개변수이다.

메소드 만들 때 메소드 안에서 전달 값 받고 화면출력 같은 것을 하지마라.

메소드 오버로딩 : 같은 이름을 가진 메소드가 존재할수 있다 그대신 매개변수는 달라야 한다.


public class Math {
int add(int x, int y) {
return x+y;
}

}


public class MathTest {

public static void main(String[] args) {
int sum;
Math obj = new Math();
sum = obj.add(2, 3);
System.out.println("2와 3의 합은 " + sum);
sum = obj.add(7, 8);
System.out.println("7와 8의 합은 " + sum);

}

}



public class Television {
int channel;
int volume;
boolean onOff;
void setChannel (int x) {
channel = x;
}
int getChannel () {
return channel;
}

}



public class TlevisionTest {

public static void main(String[] args) {
Television myTv = new Television();
myTv.setChannel(11);
int ch = myTv.getChannel();
System.out.println("현재 채널은 " + ch + "입니다.");

}

}





public class Math {
int add(int x, int y) {
return x+y;
}
int square(int i) {
return i*i;
}
double square(double i) {
return i*i;
}

}





public class MathTest {

public static void main(String[] args) {
int sum;
Math obj = new Math();
sum = obj.add(2, 3);
System.out.println("2와 3의 합은 " + sum);
sum = obj.add(7, 8);
System.out.println("7와 8의 합은 " + sum);
System.out.println("5곱하기 5는 " + obj.square(5));
System.out.println("3.14곱하기 3.14는 "+ obj.square(3.14));

}

}

JAVA 기말 시험 일정

시험범위 : 3장 ~  5장
12.13(수) : 실기평가
12.15(금) : 필기평가

12.08(금) : 5장 연습문제 발표

2017년 11월 28일 화요일

네트워크 11월 29일 - 2

IP, 서브넷 마스크, 디폴트 게이트웨이, (DNS 서버주소) 이걸 한꺼번에 받는게 DHCP

arp (ip를 줘서 물리주소를 알아낸다)

cmd 명령어들
arp -a 캐시에 저장되어있는 ip - mac 주소를 가져온다. 여기에 있는 주소들은 따로 받을 필요가 없다. 캐시에 저장되어있기 때문.
arp -d 캐시에 저장되어있는거 삭제 하는 명령어

netstat (현재 접속, 연결 해제 되어있는 네트워크를 보여준다)
netstat -ano (좀비피시 감염됐는지 알 수가 있다. 작업관리자에서 교차검증 후 프로세스 종료 및 삭제)

netstat -r (0.0.0.0   0.0.0.0  디폴트 게이트웨이 이정도만 알면 된다)

nslookup (dns(53번,UDP)를 체크한다, 그 후 원하는 도메인 입력해서 응답하는지 혹은 ip확인을 할 수 있다.)

ping ip주소 (해당하는 ip가 뒤졋는지 살앗는지 알수있다, ICMP)
tracert ip주소 (ICMP프로토콜(해킹에 취약해서 막아둘 가능성이 있다) 이용,트레이스 알티 해당하는 ip주소를 추적한다.)

네트워크 관리 - SNMP (심플 네트워크 메니지먼트 프로토콜, 가장 일반적인 방법, UDP, 162번, 이거 돼야 인텔리전트허브 안되면 더미허브)
NMS (네뜨웍 매니지먼트 시스템)

트러블 슈팅 작업 단계에서 최근에 뭘 변경했는지가 중요하다.

네트워크 분석 도구
- 모니터링 기능 (구글에서 제공하는 프로그램 존나좋음)
- RMON(Remote MONitoring) SNMP에 기반을 둔 RMON 매니저와 프로브로 구현된다, RMON MIB(여기서 사용하는 데이터 방식(?))

네트워크 11월 29일 - 1

자격증
ccna
ccnp
ccie 천만원듬

------------------------------------------------------------------------

IIS(Internet Information Service) 요즘은 아파치 (웹서비스를 할 수 있는 프로그램, 80번 포트를 열어줌)
HTTP(80) FTP(21,20(데이터 전송)) SMTP는 피켓트레이서에서 다했다고 설명 안함
NetBIOS 잘 쓰지도 않음, 공유라는 개념을 가짐, 넷뷰

FTP ip주소 입력
put 파일 넣기
get 파일 가져오기

이메일 보통 보낼 때 SMTP 받을 때 POP3

* 백엔드

JAVA 5장 클래스, 객체, 메소드 Television

클래스 : 객체를 만드는 설계도, 클래스는 객체를 찍어내는 틀과같다.

추상화 --> 클래스 --> 객체

예) class Television(클래스)
   int channel (상태, 속성, 필드)
   int volume
   boolean onOff
---------------------------------------------------------------------------

public class Television { // 와플 틀 , 클래스
int channel;
int volume;
boolean onOff;
}


---------------------------------------------------------------------------


public class TelevisionTest { // 와플

public static void main(String[] args) {
Television tv = new Television(); // tv는 참조형 new를 해서 힙공간에 만들어진다. 3개의 필드를 가지고 있는다.
tv.channel = 7; // tv가 참조하는 객체로부터 채널이라는 필드로 접근
tv.volume = 9;
tv.onOff = true;
System.out.printf("텔레비전의 채널은 %d이고 볼륨은 %d입니다.", tv.channel, tv.volume);
}

}



public class TelevisionTest {

public static void main(String[] args) {
Television myTv = new Television(); // 객체
myTv.channel = 7;
myTv.volume = 9;
myTv.onOff = true;
System.out.printf("나의 텔레비전의 채널은 %d이고 볼륨은 %d입니다.\n", myTv.channel, myTv.volume);
Television yourTv = new Television(); // 객체
yourTv.channel = 10;
yourTv.volume = 5;
yourTv.onOff = true;
System.out.printf("너의 텔레비전의 채널은 %d이고 볼륨은 %d입니다.", yourTv.channel, yourTv.volume);
}

}

각 객체마다 별도의 변수(필드)를 가진다.

메소드는 입력을 받아서 처리결과를 반환하는 상자로 생각

예) int add(int x, int y) { // x, y는 매개변수(전달 값)이다. int add이니 리턴되는 x+y값이 정수(int)이다.
   return x+y;
}

void는 반환값이 따로 없다. void 메소드 안에서 return;을 사용하면 그 메소드를 벗어난다.

return main;은 메인을 벗어나면 전체 프로그램이 종료된다


------------------------------------------------------------------------------

public class Television {
int channel; // 속성, 필드
int volume;
boolean onOff;
void print() {
System.out.printf("채널은 %d이고 볼륨은 %d입니다.\n", channel, volume); // 동작
}
}


------------------------------------------------------------------------------


public class TelevisionTest {

public static void main(String[] args) {
Television myTv = new Television();
myTv.channel = 7;
myTv.volume = 9;
myTv.onOff = true;
myTv.print();
Television yourTv = new Television();
yourTv.channel = 10;
yourTv.volume = 5;
yourTv.onOff = true;
yourTv.print();
}

}

---------------------------------------------------------------------------------


public class Television {
int channel;
int volume;
boolean onOff;
void print() {
System.out.printf("채널은 %d이고 볼륨은 %d입니다.\n", channel, volume);
}
int getChannel() { // 바로 속성에 접근하는 것보다 간접적으로 메소드를 통해 접근하는 것이 좋은 설계다. 보안 등의 이유
return channel;
}
}



public class TelevisionTest {

public static void main(String[] args) {
Television myTv = new Television();
myTv.channel = 7;
myTv.volume = 9;
myTv.onOff = true;
myTv.print();
int ch = myTv.getChannel();
System.out.println("현재 채널은 " + ch + "입니다.");
Television yourTv = new Television();
yourTv.channel = 10;
yourTv.volume = 5;
yourTv.onOff = true;
yourTv.print();
}

}

운영체제 11월 29일

7주차
가변은 경계선이 없다 기억 장소 배치 전략

최초 적합 전략 - 사용 가능 공간 리스트에서 충분히 큰 첫 번째 공간에 작업을 할당하는 방법, 검색이 빠르나 공간 활용률이 떨어짐 공백 크기 오름차순으로 정렬을 계속 한다.

최악 적합 전략 - 공백 크기 내림차순 계속 정렬해야해서 비효율적 최적보다 메모리 활용이 좋다.

가변 분할 다중 프로그래밍의 장단점 - 내부 단편화 방지, 외부는 해결 못함

가변 분할에서의 메모리 보호 - 기준(주소) 레지스터와 한계(프로세스 크기) 레지스터 사용, 수행시간에 동적 재배치를 허용함(주소가 유도리있게 변함)

외부 단편화 - 여유 공간에 비해 작업이 커서 들어가지 못할 때 가변은 해결 못 함

단편화 제거에는 통합과 압축이 있다.
통합 - 빈공간이 인접해있으면 통합한다.
압축 - 빈 공간이 인접해있지 아니할 때 사용, 작업을 이동 시킨다. 가장 작업의 크기를 작게 움직이는게 효율적이다. 가변 메모리에서 수 많은 작업 공간을 하나의 큰 공백으로 변환

오름차순 작은거부터 큰거
내림차순 큰거부터 작은거

2017년 11월 24일 금요일

JAVA 5장 객체

객체 - 오브젝트, 상태와 동작을 가진다. 눈에 보이는 모든 것
상태 - 데이터를 표시하는 것, 상태는 너무 많으니 추상화를 한다.
추상화 - 필요한 것들만 골라내서 표현 (엑기스만 뽑아낸다)
동작 - 상태를 변화시키는걸 동작으로 작성한다.
메세지 - 상호 작용(호출)을 위해 보내는 메세지 이다. 기능을 호출
매개 변수 - 메세지를 보낼 때 보내는 전달 값

상태는 필드, 동작은 메소드로 구현된다.

변환가능한 상태를 찾는게 중요하다. 그래야 동작도 구현하기 편하다.

절차 지향 프로그래밍 - 동작이 중요하게 작동한다. 문제를 해결하는 절차를 중요하게 생각

객체 지향 프로그래밍 - 객체를 만들어 작동. 객체는 다른 객체에게 메세지를 보내 서로 이용이 가능하다. 컴퓨터 하드웨어 부품을 구입하여서 컴퓨터를 조립하는 것과 비슷하다. 객체를 조합하여 소프트웨어를 만든다. 유지보수(변경, 업그레이드)이 쉽다. 모듈화가 되어 있기때문.
캡슐화, 상속, 다형성이 3대 특징인데 2학년 때 자세히 배운다.

퍼블릭은 공개 프라이빗은 숨김 ( 정보은닉 )

2017년 11월 22일 수요일

11월 23일 네트워크

피켓트레이서 실습

어제와 이어서 계속 설정 후 추가로 mail, ftp서버도 구축한다.

cmd 명령어로 nslookup을 입력 후 도메인을 입력하면 dns가 작동하는지 알 수가있다.
exit 입력하면 nslookup에서 나온다.
예) www.naver.com 입력하면 202.179.177.21, 202.179.177.22가 표시된다. 그러면 dns서버가 잘 작동하는것이다.

ftp서버 (21,20)

ftp서비스에서 아이디, 패스워드, 권한을 설정한다.
클라이언트에서 cmd을 열어서 ftp ftp.kr을 입력한다. (ftp ftp주소, ftp도 dns서비스에 추가해야 한다.)그러면 아이디를 치라고 한다. 아이디를 치면 비밀번호 입력창이 나온다 (보안으로 화면은 안보임) 그 후 dir을 입력하면 리스트가 보인다. quit를 누르면 나온다.
put sampleFile.txt(대소문자 구분, 파일명) 하면 ftp 서버에 집어넣는다.
get asa842-k8.bin(대소문자 구분, 파일명) 하면 ftp 서버에서 가져온다.
quit를 하고 pc에서 dir를 하면 확인 가능하다.

EMAIL
SMTP(보낼 때 사용, 25번) POP3(가져올 때 사용, 110번)
메일이니 아이디를 두개 추가한다 (주고받고를 위함)

2017년 11월 21일 화요일

네트워크 11월 22일 - 2

충돌영역은 매체를 공유하니까 나온다. 그걸 획기적으로 개선한게 스위치(2계층)이다.
충돌영역은 5개가 있다.

방송영역은 라우터에 의해 나눠진다
브로드캐스트는 몇개일까, 몇개의 네트워크가 있을까? 2개
2개의 네트워크 주소가 필요하다.














ㄱㄱㄱㄱㄱ

네트워크 11월 22일 - 1

프로토콜 대부분 뒤에 P가 붙음
네트워크 계층(인터넷 계층)에 프로토콜 중 가장 유명한 것은 IP
전송 계층 - TCP, UDP
응용 계층 - HTTP, ... 등

프로토콜의 개념
통신할 때 필요한 규칙, 약속
수신자와 송신자사이에 규약이 없으면 통신을 못함
통신은 그냥 0과1로 이어진 긴 띠이다. 서로 약속을 하지 않으면 뭐가 뭔지 알수가없다.

인터넷 계층에는 IP ARP, RARP(리벌스 라서 R) ICMP(컨트롤 메세지 프로토콜, 보통 핑 보낼 때 쓴다) IGMP(그룹 메세지 프로토콜, 보통 멀티캐스트를 처리할 때 사용한다.

TCP와 UDP는 공통적으로 효율적으로 전송하기 위해 데이터가 작게 쪼개서 보낸다. 그리고 공통적으로 포트번호를 사용한다. 웰론 포트로 접근할 때 자기 포트도 열어서 간다. 자기 포트로 리턴을 받는놈이 TCP 보내고 마는놈이 UDP이다.



(RARP랑 한 묶음이다.우리가 어디에 접속할 때는 도메인 이름으로 들어간다. 따따따.네이버.컴을 이해하는 프로토콜은 3계층, 4계층에는 없다. 그래서 DNS서버가 이걸 ip주소로 변경해준다.(변경해서 내려준다) 프레임에 가장 중요하게 들어가는 주소가 맥주소


주소는 쌍방향이다.
4 - 포트
3 - ip
2 - 맥 ip주소로 맥주소를 찾는법은 내가 가진 ip주소를 뿌리고 맥주소를 받는다.(로칼) 이것이 ARP이다. 근데 두가지로 동작함 목적지가 로칼 네뜨웍이냐 원격 네뜨웍이냐에 따라서 다르게 동작한다. 따따따쩜네이버쩜컴은 원격(리모트) 네뜨웍인데 디폴트 게이트웨이에게 부탁한다. 목적지가 로칼인지 리모트인지 알아내는것은 서브넷 마스크로 알아냄


디폴트 게이트웨이 - 원격지 네트워크랑 연결할 수 있게 도와주는 장비이다.
원격지 네트워크인지 어케아냐 - 네트워크 주소를 비교하면 된다.
네트워크 주소를 어케 아냐 - 서브넷 마스크.....

JAVA 석차 구하기

import java.util.Arrays;

public class Test03 {

public static void main(String[] args) {
int[] R = {90, 80, 85, 70, 75, 60, 65, 50, 55, 95, 100};
int[] rank = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int sum=0, i=0, max=0, min=100;
double avg;

for (i=0; i<11; i++)
for (int j=0; j<11; j++) {
if (R[i] < R[j])
rank[i]++;
}

for (i=0; i<11; i++)
System.out.print(rank[i]+ " ");
System.out.println();

System.out.println(Arrays.toString(rank));
}

}

운영체제 7주차 - 연속 기억 할당 및 기억 장치 배치전략

1강
연속 기억 장치 할당의 개념
- 기억 장치의 경영 방법 중의 하나(연속적재/불연속적재)
정적(MFT, 고정됨)/동적(MVT, 고정되지 않고 가변적이다.)
MFT를 쓰다가 문제가 되서 MVT가 나옴
MFT - 고정된 크기의 분할 영역에 프로세스(작업)가 각각 할당됨, 지금은 사용 안함
단편화가 일어남 내부단편화(프로세스가 드갔는데 남음), 외부단편화 (프로세스가 못드감)
단편화 계산하는법 알기

2강
가변 분할 다중 프로그래밍
고정된 경계를 없애고 각 작업이 필요한 만큼만 메모리를 할당
논리주소를 물리주소로 변경 해주는걸 매핑(사상, 주소바인딩)이 필요, 기준(재배치) 레지스터와 한계 레지스터가 필요 컴퓨터는 분할 테이블을 필히 가지고 있어야함 기준과 한계가 있어야 다른 프로세스가 침범도 안함 내부 단편화는 안생기는데 외부 단편화만 생긴다.
그러므로 사용 가능한 공간에 대하여 어느 작업에게 할당하기에 가장 좋은지 결정 필요(기억 장소 배치 전략)

기억 장소 배치 전략 = 메모리 재배치 기법

최초 적합 전략
최적 적합 전략 (검색하고 드가야하는데 정렬(오름차순)하고 검색을 해야함 이 과정이 비효율)
최악 적합 전략 (비효율, 내림차순 정렬)

2017년 11월 17일 금요일

JAVA 2차원 배열 실습) 파스칼 삼각형 출력

/*
 *  실습) 파스칼 삼각형 출력
 *  예)
 *  1
 *  1  1
 *  1  2  1
 *  1  3  3   1 (a+b의 3제곱)
 *  1  4  6   4   1 (a+b의 4제곱)
 *  1  5  10  10  5  1 (a+b의 5제곱)
 */
public class Test003 {

public static void main(String[] args) {
int[][] arr = new int [9][9];
int i, j;

for (i=0; i<arr.length; i++) // 모든 원소를 0으로 초기화
for (j=0; j<arr[i].length; j++)
arr[i][j]=0;

for (i=0; i<arr.length; i++) // 파스칼 삼각형 생성
for (j=0; j<arr[i].length; j++)
if(j==0 || i==j)
arr[i][j]=1;
else if (i>j)
arr[i][j] = arr[i-1][j] + arr[i-1][j-1];

for (i=0; i<arr.length; i++) {
for (j=0; j<arr[i].length; j++)
if(arr[i][j]>0)
System.out.printf("%-4d", arr[i][j]);
System.out.println();

}
}
}

2017년 11월 16일 목요일

Java 배열) 실습 이진 검색 메소드 만들기

import java.util.Arrays;

// 이진 검색 만들기
public class Test001 {

public static void main(String[] args) {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 정렬이 되어 있어야만 이진 검색이 된다. Arrays.sort(arr); 이용

System.out.println(binarySearch(arr,11));

}
static int binarySearch(int[] arr, int key) {
int mid=0,low=0, high=arr.length-1;

while (low <= high) {
mid = (low + high)/2;

if (arr[mid] == key)
return mid;
else if (arr[mid] > key)
high = mid-1;
else
low = mid+1;
}

if (low <= high)
return mid;
else
return -1;
}

}

2017년 11월 15일 수요일

네트워크 11월 16일

TCP는 연결 지향적 연결을 추적 할수있다. 그러면 처음에 셋업을 해야한다. 시작은 SYN을 셋업한다. 받은 시퀀스 남바+1을 해서 보낸다.(ACK)
예) 내가 시퀀스 남바를 1000을 보내면 ACK는 1001로 온다.

종료는 FIN을 셋업한다. 그 종료에 대해 ACK를 보내고 그다음에 FIN을 보낸다(4웨이)

TCP 송신지 포트 (내가 WEP에 접근 했다고 가정, 80번포트에 접근을 하면 접근을 했다고 ACK를 보내야 하는데 받을 포트 주소가 필요하다)

urg,ack,psh,rst,syn(3웨이 핸드쉐이킹 싱크),fin(종료 과정)

윈도우 크기(흐름제어, 플로우컨트롤이 가능 TCP는 뭔가를 보내면 ACK를 받는다. 하나를 보내고 그다음 것을 보내고 싶지만 ACK가 안오면 보낼수 없다. 그래서 ACK가 올 때깢지 기다려야 한다. 하나 받고 하나 주는건 효율이 안조흐니 졸라리 보내고 ACK를 받으면 좋겠다, 그 보낼 사이즈가 윈도우 사이즈다. 받는놈은 일단 받은 정보를 한곳에 임시 보관을 했다가(버퍼) 처리해야 한다.그럼 수신측에서 송신측에게 윈도우 크기좀 줄여서 보내라 하고 통신을 한다. 그러면 크기가 크게왓다 작게왓다 좆대로 오는데 이것이 흐름 제어이다.)

시퀀스 남바( 0부터 시작해서 최대값을 초과하면 다시 0으로 돌아온다.)

플래그 (u a p r s f)

3웨이 핸드 셰이킹 (2번째 5번째 셋팅해서 보낸다, 보내는 숫자는 그냥 지가 시작하고 싶은 숫자를 보낸다.)

연결 종료 (fin6번째 셋팅해서 보낸다. 그럼 fin에 대한 ack를 보낸다)

2계층에서 crc에러가 뜨면 2계층에서 해당되는 프레임을 버린다.그럼 4계층에서 이걸 알수가 없다. 그럼 잃어버린 데이터를 어떻게 찾을까 혹은 잃어버린 사실 자체를 어떻게 알까 송신측에서 보내고 난다음 타이머를 돌린다 일정 시간이 지났느데도 ACK가 안오면 데이터를 재전송한다. 중간에 데이터가 유실 됬으면 유실되기 전에 보낸 ACK를 보낸다

슬라이딩 윈도우 ACK가 오기전까지 버퍼에서 보관한다 ACK가 오면 스르르르ㅡㄱ 이동함

UDP (DNS, DHCP) DNS은 TCP UDP 둘다 사용하는데 일반적인 사용자는 UDP이다.

UDP 헤더 송신지 포트 번호, 수신지 포트 번호, 총 길이, 검사합 끝 (그리라고 하면 그리겠쬬?, TCP를 그리고 각 기능의 명칭과 기능을 적으시오)

2017년 11월 14일 화요일

네트워크 11월 15일 - 2

ip주소 버전 4의 문제점 - 30억개정도 사용 가능함 옛날엔 컴퓨터 한대에 여러사람이 썻는데 요즘은 두당 n대를 사용한다. 고로 ip주소의 개수가 부족하다. 그리고 클래스로 구분해서 c클래슬 받앗는데 10개를 쓴다, 그러면 240여개가 논다. 그러므로 숫자가 더더욱 부족하다. 사설ip가 없었다면 좆됐다. ip는 유일해야 한다. ip가 같은데 통신이 된다. 공유기는 실제 ip주소를 1개 가지고 있고 실제 통신할때 이걸 가지고 나간다. (NAT 네트워크 어드래스 트랜스) 클래스를 쪼갠다. (서버네틱) 그럼에도 ip주소가 고갈된다. 지금 쓰는 주소가 32비트, 1비트만 늘려도 2배씩 늘어난다. IPv6은 128비트다. 좆나크다 외우기 힘드니 16진수로 표기한다. (16진수 32개 이걸 네개씩 묶어서 :(콜론)으로 구분한다. 총 8덩어리) 생략법칙이 있다. 앞에나온 0은 생략가능, 전체 필드가 0인것도 생략 가능 하지만 한번만 생략가능(생략 덩어리 개수 파악을 위함) 예) FDCB : 0 : 0 : 0 : 0 : ASDD : 0 : FFFF - > FDCB :: ASDD : 0 : FFFF 시험에 나올 가능성 있음

IPv6 데이터그램
홉 제한 (Ttl과 비슷한 기능 무한루프를 방지)

전환 기술 IPv4와 IPv6 연동 방법
호환이 되야 한다 그 3가지 방법은 
듀얼스택 (모든 장비가 버전4와 버전6을 한꺼번에 사용)
터널링 (버전6간에 통신시 버전4로 감싸서 통신)
변환 (확실하게 1:1대응은 되지 않지만 어느정도 대응을 한다)

TCP
연결 지향형 - 예) 수신 가능? 응답 : 가능(ACK) 데이터 수신 가능? 응답 : 가능
포트를 가지는 이유 - 동시에 여러개의 서비스를 사용하기 위해서 통로(소켓, 채널)를 만드는 것이다. 어느 포트는 어느 서비스다 라고 정의된것이 웰론포트(HTTP 80(TCP), FTP 21(열때),20(데이터), 메일 25(TCP), HTTPS(시큐어통신 보안잘됨) 443(HTTP로 접속했다가 내부에서 바뀜), 텔넷 23(텔넷 접속할때 아이디와 패스워드를 넣는데 이거 뺏기면 좆된다(스닙핑)), SMPT 25(심플메일프로토콜), SSH 21(텔넷 보안))

IP헤더를 제거하면 세그먼트(TCP헤더, TCP데이터)

TCP(헤더?)를 제거하면 5계층 데이터

IP헤더에 프레임 헤더 붙이고 꼬리(트레일러 붙이면) 뭐가 될까?


TCP 헤더
송신지(발신지) 포트, 수신지 포트 // 프레임만 목적지가 먼저 나온다 나머진 발신지 먼저나옴
시퀀스 넘버(순서번호, 재조립을 위해서 붙이는 번호 *3계층에서 어쩔수없이 쪼개지는걸 프래그먼트)
확인 응답 번호(ACK번호) 처음 콜 셋업을 할 때 , (내가 1~1000바이트를 보내면 잘 받았다고 1001을 ACK로 보낸다, 내 시퀀스 남바가 ACK남바가 어쩌구 저쩌구 지진옴 ㅅㄱ)

네트워크 11월 15일 - 1

인터넷 주소를 구분하는 방법은 인터넷 클래스로 구분하는 방법이 있다.
ip주소는 32비트로 구성
보통 abc 클래스를 사용
d클래스 멀티캐스트
e클래스 예비용

a - 첫바이트 정의 2에 24승

b - 두번째까지 2에 16승

c - 세번째까지 2에 8승

제일 작은숫자 제일 큰숫자는 사용불가 (0은 네트워크 주소 255는 브로드캐스트 주소)

같은 그룹이 아니면 서로가 통신이 안된다.

로칼 네트워크는 혼자서 가능
원격 네트워크(리모트 네트워크)는 디폴트게이트웨이에 의지(위탁)

A반 서로 이름불러서 통신 (로칼)
B반은 문에다가 누구를 세워놓고(디폴트 게이트웨이) 통신을 한다. (원격 네트워크)

자기 ip주소를 보고 클래스를 확인한다. 만약 c클래스고 3덩이가 같다. 같으면 로칼 다르면 리모트 (인간적인 생각)

ip가 가진 주소를 서로 파악해서 같은 네트워크인지 확인하고 로칼, 리모트 구분한다.

네트워크 주소를 어떻게 끄집어내는지

앤드 연산을 한다 a 앤드 1(항등원) = a, a 앤드 0 = 0 그래서 네트워크 주소만 뽑힌다.

서브넷 마스크가 자기가 속한 네트워크 주소를 뽑아낼수 있는 거다

기본 게이트웨이 - 로칼이 아닌 리모트를 할 때 필요하다.

cdns서버주소 - 없으면 불편 ip주소를 직접 입력해야함

ip주소를 2진수로 나열, 서브넷 마스크를 2진수로 나열 비트가 앤드연산을 함 그럼 네트워크 주소가 나옴 목적지와 나의 네트워크 주소를 비교연산한다. 같으면 로칼 다르면 리모트

예) c클래스 경우 xxx.xxx.xxx.125, 255.255.255.0 앤드연산 -> xxx.xxx.xxx.0
 xxx.xxx.xxx.128, 255.255.255.0 앤드연산 -> xxx.xxx.xxx.0 서로 네트워크 주소가 같음

ip 프로토콜(배스트 에폴트 프로토콜, 무책임)은 비연결형이다. TCP 연결형 UDP 비연결형

연결형은 계속 연결해서 반응을 한다. (전화, TCP(쓰리웨이 핸드쉐이킹)) 연결형은 콜 셋업을 해야함 TCP는 쓰리웨이 핸드쉐이킹 방식으로 셋업을 한다.

비연결형은 일방적으로 때린다. 보내면 끝

인터넷 통신이 복잡한 이유가 효율을 높여야 하기도 하고 거미줄처럼 연결되어 있다.

데이터를 보낼때 여러가지에 경로가 있다.(가장빠른경로로감) 하나의 데이터가 쪼개져서 여러 경로를 통해서 갈수도 있다. 그러면 문제가 발생하는데 도착시간에 차이가 생길수있다.
TCP는 이런 문제가 생겨도 해결할수있다. UDP는 안됨

ip를 쓰기 위해서 데이터에 최소 20바이트를 붙힌다.(헤더) 발신지(송신지)의 ip주소 수신지의 ip주소(4바이트), 버전(ip버전 4, 6), 헤더의 길이( 01010101010101011101 이런식으로 데이터가 가니 길이도 알아야한다. 어디부터 어디까지가 길이인지 컴퓨터는 모른다, 가변적(옵션)이기도 해서 알아야 한다), DS필드(우선순위결정), 토탈랭스(전체 ip의 길이)

데이터가 4계층에서 짤려서 날라가는데 4계층에서 이미 짤려서 내려와있다 ip는 3계층이기 때문 ip패킷의 최대크기는 1500바이트. MTU(맥시멈 트랜스퍼 유닛) 만약 중계기가 MTU가 500이다. 그럼 1500을 받아도 500만 보낸다 1000바이트는 유실됨. 그럼 최대크기를 줄이라고 한다. 그럼 ip패킷이 다시한번 쪼갠다 (4계층에서 또 못쪼갬) 저기 id fl fr 여기가다 여기서 쓰는거다. Ttl은 무한루프를 방지 좀비패킷이 돌아다닌다. (죽어야하는데 안죽고 계속 살아있는거, 계속 리소스(메모리)를 처먹고있다. 보통 윈도우은 128을 둠 라우터(네트워크 장비)를 지날때마다 한개씩 차감해서 0이되면 결국 사망함) 프로토콜(상위 프로토콜이 뭔지), ... 얘 뒤에 붙은게 세그먼트

JAVA 배열) 배열 정렬하기, 정렬 알고리즘, 선택정렬

import java.util.Arrays;

public class Test001 {

public static void main(String[] args) {
int[] arr = {3, 5, 1, 9, 7};

Arrays.sort(arr);

for(int i : arr)
System.out.print(i + " ");
System.out.println();

System.out.println(Arrays.toString(arr));
}

}

정렬 알고리즘 : 선택정렬, 버블정렬, 삽입정렬, 퀵정렬, 병합정렬, .....

Arrays.sort는 퀵정렬

import java.util.Arrays; //선택정렬

public class Test001 {

public static void main(String[] args) {
int[] arr = {3, 5, 1, 9, 7};
int i, j, least, temp;
System.out.println(Arrays.toString(arr));
for(i=0; i<arr.length-1; i++) {
least = i;
for(j=i+1; j<arr.length; j++)
if(arr[j] < arr[least])
least = j;
temp = arr[i];
arr[i] = arr[least];
arr[least] = temp;
}
System.out.println(Arrays.toString(arr));
}

}

JAVA main() 매개 변수


public class Test001 {

public static void main(String[] args) {
System.out.println(args.length);
if(args.length>0)
for(int i=0; i<args.length; i++)
System.out.println(args[i]);
}

}

콘솔 입출력 = 키보드 입력 + 모니터 출력

명령라인인자 입력
main(String[] args)
c:\> javac Hello. java(명령라인인자)

2017년 11월 12일 일요일

JAVA 4장 연습문제 21번 16진수 문자열을 2진수의 문자열로 변환하기

import java.util.Scanner;

public class Java021 {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);

String[] hexa2bin = {"0000", "0001", "0010", "0011",
"0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011",
"1100", "1101", "1110", "1111"};

char[] hexa = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f'};

System.out.print("16진수 문자열을 입력하시오: ");
String input = sc.next();

for (int i=0; i<input.length(); i++)
for (int j=0; j<hexa.length; j++)
if (input.charAt(i) == hexa[j])
System.out.print(hexa2bin[j] + " ");
}

}

2017년 11월 10일 금요일

JAVA 배열 실습) 정수 배열에서 key값을 찾아 위치(인덱스) 출력(순차검색)

/*
 * 실습) 정수 배열에서 key값을 찾아 위치(인덱스) 출력(순차검색)
 * 조건) 순차검색 메소드 작성해서 활용
 * 형식) static int search(int[] arr, int key);
 *
 * {3, 5, 7, 9, 1}
 *
 * key = 9
 * 위치 = 3
 *
 * key = 6
 * 위치 = -1
 */
public class Test005 {

public static void main(String[] args) {
int a[] = {1, 3, 5, 7, 9};
int key = 2;

System.out.println(search(a, key));

}

static int search(int arr[], int key) {
int i;

for (i=0; i<arr.length; i++)
if (arr[i] == key)
return i;

return -1;
}

}

JAVA 배열 실습) 배열의 이중참조, 복사 및 비교

// 배열의 이중참조, 복사 및 비교
/*
 * int a[] = {1, 2, 3, 4, 5};
 * int b[] = {1, 2, 3, 4, 5};
 *
 * a == b // 거짓, 참조형 변수이기 때문에 서로의 주소값을 비교한다.
 */
public class Test004 {

public static void main(String[] args) {
int a[] = {1, 2, 3, 4, 5};
int b[] = a; // 이중참조, 주소만 가져온다.
int c[] = new int[a.length];
int d[] = {1, 2, 3, 4, 5};

for(int i=0; i<a.length; i++)
c[i] = a[i]; // 복사, 진짜 메모리에 복사를 한다.

System.out.println(compareArray(a,b)); // true
System.out.println(a == b); // true
System.out.println(compareArray(a,c)); // true
System.out.println(a == c); // false



}
static boolean compareArray(int a[], int b[]) {
int i;

if(a.length == b.length) {
for(i=0; i<a.length; i++)
if(a[i] != b[i])
break;

if (i < a.length)
return false;
else
return true;
}
else
return false;
}

}

JAVA 배열 예제) for-each 루프의 예

// 예제) for-each 루프의 예
// 순차접근을 할 때만 사용한다.
public class Test003 {

public static void main(String[] args) {
int numbers[] = {10, 20, 30, 40, 5};

for (int i : numbers)
System.out.println(i+" ");

}

}

JAVA 배열 실습) 정수 배열에서 정수 n의 빈도수를 반환하는 메소드 작성

// 실습) 정수 배열에서 정수 n의 빈도수를 반환하는 메소드 작성
// 형식) static int freq(int[] arr, int n)
// {1, 2, 1, 1, 3}
// n=1
// 반환 : 3
public class Test002 {

public static void main(String[] args) {
System.out.printf("n의 값:%d\n반환받은 값:%d\n", 1, freq(new int[] {1, 2, 1, 1, 3}, 1));


}
public static int freq(int[] arr, int n) {
int i;
int cnt = 0;

for (i=0; i<arr.length; i++)
if(arr[i]==n)
cnt++;

return cnt;
}

}

Java 배열 LAB) 극장 예약 시스템

import java.util.Scanner;

// LAB) 극장 예약 시스템
public class Test001 {

public static void main(String[] args) {
final int SIZE = 10;
int i, s;
int seats[] = new int[SIZE];
int cnt=0;

while (true) {
System.out.println("====================");

for(i=0; i<SIZE; i++)
System.out.printf("%d ", i+1);

System.out.println("\n====================");

for(i=0; i<SIZE; i++)
System.out.printf("%d ", seats[i]);

System.out.println("\n====================");
System.out.print("원하시는 좌석번호를 입력하세요 (종료는 -1, 자리가 꽉차면 자동 종료): ");
Scanner sc = new Scanner(System.in);
s = sc.nextInt();

if (s == -1)
break;

if (seats[s-1] == 0) {
seats[s-1] = 1;
System.out.println("예약되었습니다.");
}
else
System.out.println("이미 예약된 자리입니다.");

for (i=0; i<SIZE; i++)
cnt += seats[i];

if (cnt == SIZE)
break;

cnt = 0;

}

}

}

2017년 11월 9일 목요일

JAVA 배열 예제) 무명 배열의 예, 배열을 입력 받는 메소드 만들기

// 예제) 무명 배열의 예, 배열을 입력 받는 메소드 만들기
public class Test002 {

public static void main(String[] args) {
int n[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

System.out.println("숫자들의 합 : " + sum(n));


}
public static int sum(int[] numbers) {
int total=0;
int i;

for(i=0; i<numbers.length; i++)
total += numbers[i];

return total;
}

}

Java 배열 LAB) 주사위 빈도수 구하기

// LAB) 주사위 빈도수 구하기
public class Test001 {

public static void main(String[] args) {
int i;
final int SIZE = 6;
int freq[] = new int [SIZE];

for (i=0; i<10000; i++)
++freq[(int)(Math.random()*SIZE)];

System.out.println("================");
System.out.println("면\t빈도");
System.out.println("================");

for (i=0; i<SIZE; i++)
System.out.println((i+1) + "\t" + freq[i]);


}

}

2017년 11월 8일 수요일

11월 09일 네트워크 수업

IP주소는 8bit.8bit.8bit.8bit 제일 앞을 보고 클래스를 구분한다. 
그다음 마스크가 있다. 네뜨웍의 범위를 조절하는 것 네뜨웍의 수를 줄이면 크기는 커지고 크기가 작아지면 수는 늘어난다. (예. 컴정 1학년 A반 1조)

A 255. 0. 0. 0 - 맨 앞만 같으면 같은 네트워크(그룹)
0~127 하지만 0.0.0.0은 사용X 127.x.x.x는 시스템 루프백 주소 실제로 사용하는 주소는 1~126 2에 24승 사용가능

B 255. 255. 0. 0 - 첫 번째 두 번째가 같으면 같은 네트워크
128~191 2에 16승개 사용 가능

C 255. 255. 255. 0 - 세 번째까지 같으면 같은 네트워크
192~223 2에 8승 256개 사용 가능
예) 192.168.1.0/24
192.168.1.0 ~ 192.168.1.255
192.168.1.0은 대표주소 (사용 불가능)
192.168.1.255 브로드캐스트 주소 (사용 불가능)
그러므로 실제 사용 가능한 주소의 개수는 254개이다.

D는 멀티캐스트 E는 예비용으로 실사용X 이니 마스크도 따로 표기하지 않는다.
멀티캐스트는 마치 단톡방을 만들듯이

문제 - 172.1.2.0,  172.16.1.0,  172.16.2.0 은 같은 네트워크인가?
답 - 두번쨰 세번째만 같은 네트워크다. (B 클래스) 
다른 네트워크끼리 연결할려면 라우터 이용 디폴트 게이트웨이에 부탁을 해야한다.

*프리픽스 : 마스크에 비트가 몇개인가? (A클 8개 B클 16개 C클 24개)
172.1.2.0/16
*서버네팅 : 지맘대로 네트워크를 늘렸다 줄였다 카는거

ip 패킷해더 tcp 헤더 ack 흐름제어 등

2017년 11월 7일 화요일

11월 08일 네트워크 수업 - 2

포트를 나누는 이유가 하나의 서버에 하나의 서비스를 한다고 한다면 (통로가 하나라면) 쫙 줄을 서서 기다려야 한다. 그러면 손해가 개심하니 넌 HTTP 넌 FTP 넌 텔넷 이런식으로 구분을 한다. 그 통로를 포트라고 한다. IP와 포트를 묶어서 소켓이라고 한다. 소켓 프로그래밍 하면 네트워크 프로그래밍이다. UDP던 TCP던 포트를 쓴다. UDP는 시퀀스 남바가 없다 재전송, 잘받았다는 알림 이런게 없다 포트만 달랑 있다.

누구에게나 전부 알려져 있는 포트는 웰론 포트라고 한다 (텔넷, FTP, SMTP 등)
웹 - 80 텔넷 - 23 FTP - 20, 21 SMTP - 25

포트가 다르면 접속불가 포트번호를 알아야 접속 가능 그래서 웰론 포트가 중요하다. 전부 www를 쓰듯이 모르는 사람이 묵시적으로 접속할수 있도록 사용함

네트워크 엑세스 계층에서 기억해야 하는게 이더넷, 이더넷 안에는 맥주소가 있다

인터넷 계층에는 IP, ICMP(인터넷 컨트롤 메세지 프로토콜, PING 떄리는것도 이놈임, 대부분 네트워크는 이걸 막음 해킹위험(자원을 뻇어감)) ARP(굉장히 복잡함 디폴트 게이트웨이, 브로드캐스트를 설명해야함, IP주소를 가지고 MAC주소를 찾아내는걸 한다는 정도만 알면 된다)

전송 계층에는 TCP UDP

응용 계층에는 FTP, 텔넷(이걸로 접근해서 슈퍼유저의 권한을 얻으면 웹서비스를 멈추고 작동하고 그런것들을 할수 있따. 그러므로 위험하다. 와이어 샥이라는 프로그램이 있다 가장 유명한 슬리핑 프로그램 지금은 스위치로 되어있어 잡을수가 없다. 이걸 방지하고자 암호화 하는것이 있다. SSH(22번을 쓴다. 텔넷은 거이 없어지고 이걸 쓰는 추세)), SMTP, DNS(따따따쩜네이버쩜컴을 찾아주는 역할, IP주소로 바꿔준다, 도메인 네임 서비스, 이게 안되면 사용자가 직접 ip주소를 외워야한다), DHCP가 있다.

인터넷에 연결된 모든 컴퓨터에는 고유의 주소 (IP주소)
현재 사용하는 IP 주소 체계는 IP Ver.4이다. 다음 세대를 위한 버전은 IP Ver.6 하지만 사용하기 힘들것. 모두가 4를 쓰고있기 때문에 32비트(4바이트)로 구성 닷띠드 니미럴
11101101 = 255 - 2 - 16   ,   251 = 255 - 4 = 11111011

냉장고, 보일러가 인터넷이 된다면 그것도 IP주소가 있는거다. 무적권 있어야 함

블루투스는 모체에게 위탁을해서 인터넷 서비스를 받는거라 IP주소가 없다. 단독으로 돌아가면 IP주소가 있다.

IP주소 A 클래스를 받았을때 13.0.0.0 이면 뒤에 000은 내맘대로 사용함 ㅎㅎ 개꿀 ㅋㅋ
2에 24승개를 사용 가능함

* 서브네팅 A클래스를 쪼개서 받음 CIDI 학교 IP가 그럼

11월 08일 네트워크 수업 - 1

cp - 자유의지 2학년 1학기 이론 2학기 실기 테스트도 함
jc - 알아서, 예쁜 교수님이 두분 계심
wd - 채찍질

네트워크 개념을 이해하기 개념을 익히고 테크닉을 익히자
자바도 마찬가지 객체 개념을 먼저 이해하자
OSI 제일 위는 사람 (어플리케이션)
OSI 제일 밑은 매체 (물리)



TCP/IP의 이해
전송 계층 - 세그먼트
네트워크 계층 - 패킷
데이터 링크 계층 - 프레임

프레임은 앞에 프레임 헤더가 있고 특별히 뒤에 꼬리가 있다 FCS(CRC)
문제가 없으면 헤더와 꼬리를 제거하고 위로 올라감

송신 측은 캡슐화를 해서 보내고 (조립)
수신 측은 역캡술화를 한다. (분해)
각 계층마다 똑같은 형태의 데이터가 있어야 한다.

전송계층에는 대표적으로 TCP, UDP가 있다
TCP는 분명하고 정확해야 한다. (깐깐)
UDP는 털털하다 체크를 안한다 주는대로 넘긴다.
UDP는 속도가 굉장이 중요할 때 사용한다 (인터넷 전화, 실시간이 필요한 데이터 등)
여기 4계층에서 특별히 일어나는 일이 있다. 쪼개진다. (세그먼트) 쪼개진것이 줄줄히 도착지에 조립되야 한다 (TCP) TCP는 에러 체크를 해야한다 정확해야 하니까 에러가 발생한 경우 버리고 재전송을 요구한다.
TCP는 잘 받았다 안 받았다에 대한 응답을 받는다 (ACK) 하나의 세그먼트를 보내면 수신측에서 ACK를 보낸다. (UDP는 이런거 없음) 그래서 초창기 TCP 존나 느렸음 그래서 개선한게 TCP에 윈도우라는 걸 줘서 조절을 한다. 그 양을 조절하는게 데이터의 흐름을 조정한다 그거를 흐름제어라고 한다 (플로우 컨츄롤) 윈도우 사이즈가 5면 12345를 받고 ACK를 보낸다. 송신측에서 일정한 시간 내에 ACK가 안오면 12345를 재전송 한다. 이걸 또 개선한게 있다
쪼개질때 붙이는 번호는 시퀀스 남바와 ACK 넘버는 연동되어있다.
TCP는 시퀀스 넘버로 재조립을 한다. 흐름제어를 한다. (윈도우)

응용 계층은 SPA를 합친것 (세선 프레젠테이션 어플리케이션) 우리가 가깝게 쓰는게 HTTP, SMTP, SNMP (NMS시스템을 자동적으로 운영) FTP(파일전송)는 HTTP에 거이 녹아져있어 잘 사용안한다.

물리주소 - MAC주소 2계층 - 스위치
인터넷 주소 - IP주소 3계층 - 라우터
포트 주소 - (TCP포트 UDP포트) 4계층 TCP 80번이 HTTP이다. - 방화벽(어떤 서비스가 어디로가고 어디로 가는걸 막겠다 허락하겠다 하는 기초적인 방화벽이 4계층, 디도스같은것도 막으면 7계층)

*NMS란 트래픽이 몰리면 노란불 좆나 몰리면 빨간불 이런걸 자동적으로 관리해주는거

JAVA 배열에서 특정값 찾기 (순차검색)

import java.util.Scanner;
/*
 * 실습) 배열에서 특정값 찾기
 *
 */
public class Test003 {

public static void main(String[] args) {
int[] arr = {9, 3, 5, 7, 1, 6, 8, 4, 2};
int key = 2, i;

for (i=0; i<arr.length; i++)
if (arr[i] == key)
break;

if (i<arr.length)
System.out.println("찾은 위치 : "+ i);
else
System.out.println("못찾음");

}
}

JAVA 배열 예제 최대값 최소값 찾기

import java.util.Scanner;
/*
 * 실습) 배열에서 최대값 최소값 찾기
 *
 */
public class Test003 {

public static void main(String[] args) {
int[] s = {12, 4, 5, 1, 43, 643, 3, 2, 8, 46}; // int s[] = {값, 값};
int min, max;
int i;

min = s[0];
max = s[0];

for (i=1; i<s.length; i++) {
if (s[i] < min)
min = s[i];
if (s[i] > max)
max = s[i];
}

System.out.printf("최소값은 : %d\n최대값은 : %d\n", min, max);
}
}

Java 배열 실습 정수 입력받아 요일 출력

import java.util.Scanner;
/*
 * 실습) 정수를 입력받아 요일을 출력
 *
 * 예) 정수 입력 : 1
 *      월요일
 * 예) 정수 입력 : 3
 *    수요일
 */
public class Test003 {

public static void main(String[] args) {
String[] day = { "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일" };
int i;
Scanner sc = new Scanner(System.in);

System.out.print("정수 입력 : ");
i = sc.nextInt();

System.out.println(day[i-1]);

}
}

JAVA 배열 예제

import java.util.Scanner;
public class Test003 {

public static void main(String[] args) {
int[] scores = { 10, 20, 30, 40, 50 };

for (int i = 0; i < scores.length; i++)
System.out.print(scores[i]+" ");


}
}

int[]
double[]
char[]
.
.
.
String[]

import java.util.Scanner;
public class Test003 {

public static void main(String[] args) {
String[] toppings = { "페페로니", "버섯", "양파", "베이컨", "불고기", "치즈", "감자", "고구마" };
for (int i = 0; i < toppings.length; i++)
System.out.print(toppings[i]+" ");
}
}

Java 배열 이용해 합, 평균, 분산, 표준편차 구하기

import java.util.Scanner;
// 실습) 크기가 10인 정수배열 생성,
// [1,100] 임의의 수 할당
// ==> 합, 평균, 분산, 표준편차 출력

// 힌트) (int)(Math.random()*100)+1
// 힌트) 1 3 5 7 9 ==> 5.0
// (16+4+0+4+16)/5 == 분산
// 분산의 제곱근 == 표준편차

public class Test003 {

public static void main(String[] args) {
int[] r = new int[10];
int i;
int sum = 0;
double avg, total=0, dev;

for (i=0; i<r.length; i++) {
r[i] = (int)(Math.random()*100)+1;
sum += r[i];
}

avg = (double)sum / r.length;

for (i=0; i<r.length; i++)
total += (r[i]-avg)*(r[i]-avg);

dev = total / r.length; // 분산



System.out.printf("합 : %d\n평균 : %.2f\n분산 : %.2f\n표준편차 : %.2f\n", sum, avg, dev, Math.sqrt(dev));


}
}

JAVA 배열

배열은 객체로 간주한다. (참조형) 배열은 기존 변수랑 달리 연속적이다.
힙이라는 특별한 공간에 저장된다. (new 계열은 전부 힙)
배열.length;


public class Test003 {

public static void main(String[] args) {
int [] s = new int [10];

for (int i = 0; i < s.length; i++)
s[i]=i;

for (int i = 0; i < s.length; i++ )
System.out.print(s[i] + " ");

}


}


import java.util.Scanner;

public class Test003 {

public static void main(String[] args) {
final int STUDENTS = 5;
int total = 0;
int i;
Scanner sc = new Scanner(System.in);
int [] scores = new int[STUDENTS];
for (i = 0; i < scores.length; i++){
System.out.print("성적 입력");
scores[i] = sc.nextInt();
}
for (i = 0; i < scores.length; i++)
total += scores[i];
System.out.println("평균 성적은"+ (double)total/STUDENTS);
}
}

2017년 11월 1일 수요일

네트워크 11월 02일 TCP/IP

TCP/IP란 좁은 의미로 TCP, IP로 볼 수 있고
넓은 의미로 TCP/IP 모델 4레이어


응용 계층
SMTP 보내는 서버
DNS 도메인 네임 서비스 ip어드레스를 찾아간다.
DHCP 다이나믹 호스트 컨피그 포스트 ip어드레스, 서브넷마스크(네뜨웍에 해당하는 범위를 지정), 디폴트게이트웨이(다른 네뜨웍으로 갈 때 통과해야하는 관문), DNS서버주소(이놈한테 부탁해야 찾아감) 이걸 자동으로 해줌

전송 계층
세그먼트 - 쪼갠다 세션에서 전송 계층으로 올 때 쪼개야함
TCP(까칠) 세그먼트를 들어온 순서가 아닌
도착하는 순서와 만들어진 순서가 다름 그걸 기억했다가(쪼개졌을때 앞에다가 번호를 부여함, 시퀀스 남바라고함) 다시 맞춰서 서비스함
UDP(덜렁)
그냥 들어온 순서로 정리함

네뜨웍 계층 X 인터넷 계층
젤로 유명한게 IP(IP어드레스, ip주소) ip주소는 원래는 2진수로 되어있는 32비트 짜리다. 사람이 보기 좋게 10진수로 바꾸고 똥가리내서 8비트(1바이트)씩 짤랐따(닷띠드 데시날?)
8비트니까 한 토막에 255까지이다. (255.255.255.255)

ARP 브로드캐스트를 많이 발생시키는 애가 ARP 어드레스 레듈러스 프로토콜 주소 할당 프로토콜 ip어드레스를 2계층 mac어드레스로 바꾸게하는놈 mac어드레스는 직접 물어봐야함(브로드캐스트로 물봄 그럼 가꼬있는놈이 자수함 그걸 토대로 만듬)

ICMP 핑이라던지 무언가 문제를 체크할때 많이 사용함 이런걸 받도록 하는거

IGMP 인터넷 그룹 메시지 프로토콜 아까 멀티캐스트와 연동되어 그룹끼리 통신할수 있도록 만들어줌

네트워크 접속 계층
젤유명한게 이더넷, 802.11x(a,b,g,n,ac,ab,ax)

IP와 UDP는 책임감이 없어서 보내면 끝임
TCP는 보내고 책임짐 (커넥선 오리엔티드 서비스)

(베스트에폴트 벗 노 개럴티)

2017년 10월 31일 화요일

자바 실습 메소드 만들어서 수열의 합 구하기

// 실습) 아래 수열의 합 출력
// 조건) 반복문 안의 반복문이 필요 함 메소드를 만들어서 풀어보자
// 조건) 1~n까지 합 반환하는 메소드 정의
// 형식) static int sum(int n);
// 예) 1 + (1+2) + (1+2+3) + (1+2+3+4) + ... + (1+2+....10) = ?
public class Test001 {

public static void main(String[] args) {
int i;
int s=0;

for (i=1; i<=10; i++)
s += sum(i);

System.out.println("수열의 합= "+ s);
}

static int sum(int n) {
int i;
int s=0;

for (i=1; i<=n; i++)
s += i;

return s;
}

}

자바 실습 알파벳 출력

// 실습) 알파벳을 아래와 같이 출력
// 예) ABCDEFG ... XYZ
// 예) BCD ....    XYZA
// 예) CDE ....    YZAB
// 예) ...
// 예) ZAB ....      XY
// 힌트) 알파벳은 26개 26줄이 찍힌다. 이중루프를 조금만 이용하면 됨
// 힌트) printf("%C", 'A'+1); == B
public class Test002 {

public static void main(String[] args) {
int i, k;

for (i=0; i<26; i++) {
for (k='A'; k<='Z'; k++)
if (i+k <= 'Z')
System.out.printf("%C", k+i);
else
System.out.printf("%C", k+i-26);

System.out.println();
}

}

}

자바 실습 두 정수 입력받아 두 정수 사이의 소수 출력 및 합 출력

import java.util.Scanner;

// 실습) 두 정수 입력받아, 두 정수 사이의 소수 출력, 소수의 합 출력
// 힌트) isPrime() 메소드 활용
// 예) 두 정수 입력: 10 20
// 예) 10 ~ 20 소수: 11 13 17 19
// 에) 소수의 합 = _____
// 실습 문제는 이런식으로 나옴 실기 문제는 총 4문제
public class Test001 {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x, y, sum=0;
int i;

System.out.print("두 정수 입력: ");
x = sc.nextInt();
y = sc.nextInt();

System.out.printf("%d ~ %d 소수: ", x, y);

for (i=x; i<=y; i++)
if(isPrime(i)) {
System.out.print(i+" ");
sum += i;
}

System.out.printf("\n소수의 합 = %d\n", sum);

}

static boolean isPrime(int n) {
int i;

if (n == 1)
return false;

for (i=2; i<n; i++)
if (n%i == 0)
return false;

return true;
}

}

2017년 10월 27일 금요일

실기 연습 문제 4번 100 ~ 900 사이의 홀수 합 출력

import java.util.Scanner;

// 실기 유사 문제들 4번
// 100 ~ 900 사이의 홀수 합 출력
// 조건) 메소드 작성 해결
// 형식) static int oddSum(int a, int b);

public class Test01 {

public static void main(String[] args) {
int sum;

sum = addSum(100, 900);

System.out.println(sum);
}

static int addSum (int a, int b) {
int sum=0;
int i;

for (i=a; i<=b; i++)
if (i%2 == 1)
sum += i;

return sum;
}
}

Java 실기 연습 문제 3번 오일러 수 계산

import java.util.Scanner;

// 실기 유사 문제들 3번
// 오일러 수 계산하는 수식 구현
// e = 1 + 1/1! + 1/2! + 1/3! ... 1/20! = 2.71828
// 팩토리얼 메소드 만들기
// 조건) long factorial(int n) 메소드 활용

public class Test01 {

public static void main(String[] args) {
double e = 1.0;
int i;

for (i=1; i<=20; i++)
e += 1.0/factorial(i);

System.out.println(e);

}

// 오버플로 체크하기 체크 안하면 70점
static long factorial(int n) {
long fact = 1;
int i;

for (i=1; i<=n; i++)
if (fact*i/i == fact)
fact *= i;
else
return -1;

return fact;
}
}

Java 실기 연습 문제 2번 메소드 만들고 소수 출력

import java.util.Scanner;

// 실기 유사 문제들 2번
// 1000 이하의 소수를 모두 출력 (한줄에 10개씩)
// 2 3 5 7 11 13 ....
// 조건) 소수 여부 체크 메소드 활용해서 해결
// 형식) static boolean isPrime(int n);
// 메소드를 만들어서 문제를 쉽게 풀자

public class Test01 {

public static void main(String[] args) {
int i, cnt=0;

for (i=1; i<=1000; i++)
if(isPrime(i)) {
System.out.printf("%3d ", i);
cnt++;
if (cnt%10 == 0)
System.out.println();
}

}



static boolean isPrime(int n) {
int i;

if (n==1) {
return false;
}

for (i=2; i<n; i++)
if (n%i == 0)
break;

if (i<n)
return false;
else
return true;
}
}

Java 실기 연습 문제 02번

import java.util.Scanner;

// 실기 유사 문제들 2번
// 1000 이하의 소수를 모두 출력 (한줄에 10개씩)
// 2 3 5 7 11 13 ....

// 선행 실습) 정수를 입력받아 소수 여부 출력
// 예) 정수 입력 : 2
// 예) 소수 : true
// 예) 정수 입력 : 9
// 예) 소수 : false

public class Test01 {

public static void main(String[] args) {
int n, i;
boolean isPn = true;

Scanner sc = new Scanner(System.in);
System.out.print("정수 입력 : ");
n = sc.nextInt();

if (n==1) {
System.out.println("소수 : false");
return;
}

for (i=2; i<n; i++) {
isPn = true;
if (n%i == 0) {
isPn = false;
break;
}
}
System.out.println("소수 : "+ isPn);

/*
* if (i<n)
* false
* else
* true
*
*/

}

}

Java 실기 연습 문제 01번

import java.util.Scanner;

// 실기 유사 문제들 1번 쉬움
// 정수를 입력받아 각 자리수 합 출력
// 예) 정수 입력 : 12345
// 예) 각 자리수 합 = 15
// 방법 : 각 자리수를 골라내는 방법 %연산자 이용
// 예) n % 10 == n의 1의 자리
// 예) n/10 % 10 == n의 10의 자리
public class Test01 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
int n;
int sum = 0;

System.out.print("정수 입력: ");
n = sc.nextInt();

while (n > 0) {
sum += n%10; // 일의 자리 추출
n /= 10;
}

System.out.println("각 자리수 합 = "+ sum);


}

}

Java 실기 연습 문제 01번

import java.util.Scanner;

// 실기 유사 문제들 1번 쉬움
// 정수를 입력받아 각 자리수 합 출력
// 예) 정수 입력 : 12345
// 예) 각 자리수 합 = 15
// 방법 : 각 자리수를 골라내는 방법 %연산자 이용
// 예) n % 10 == n의 1의 자리
// 예) n/10 % 10 == n의 10의 자리
public class Test01 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
int n;
int sum = 0;

System.out.print("정수 입력: ");
n = sc.nextInt();

while (n != 0) {
sum += n%10;
n = n/10;
}

System.out.println("각 자리수 합 = "+ sum);


}

}

Java 숫자 추측 게임

import java.util.Scanner;

// LAB 숫자 추측 게임
public class Test01 {

public static void main(String[] args) {
int answer = (int)(Math.random()*100)+1;
int guess;
int cnt = 0;

Scanner sc = new Scanner(System.in);

do {
System.out.print("정답을 추측하여 보시오: ");
guess = sc.nextInt();
cnt++;

if (guess > answer)
System.out.println("제시한 정수가 높습니다.");
if (guess < answer)
System.out.println("제시한 정수가 낮습니다.");

} while (guess != answer);

System.out.println("축하합니다. 시도횟수="+ cnt);

}

}

JAVA 중간고사 일정

1. 필기시험 : 11월 1일(수) 1시간 자습 1시간 시험

2. 실기시험 : 11월 3일(금) 2시간 오픈북

시험범위 3장까지

2017년 10월 23일 월요일

HTML CSS 글자 속성 예제

CSS3 Font Property
Lorem ipsum
2017.10.24
Lorem ipsum dolor sit amet, consectur adipiscing elit.
<!DOCTYPE html>
<html>
<head>
 <title>CSS3 Font Property</title>
 <style>
  .font_big { font-size: 2em; }
  .font_italic { font-style: italic; }
  .font_bold { font-weight: bold; }
  .font_center { text-align: center; }
  .font_right { text-align: right; }
 </style>
</head>
<body>
 <p class="font big font_italic font_bold font_center">Lorem ipsum</p>
 <p class="font_bold font_right">2017.10.24</p>
 <p>Lorem ipsum dolor sit amet, consectur adipiscing elit.</p>
</body>
</html>

HTML 4-2 마우스 커서

<!DOCTYPE html>
<html>
<head>
<title>마우스 커서</title>
<body>
<h3>마우스 커서</h3>
아래에 마우스를 올려 보세요. 커서가 변합니다.
<hr>
<p style="cursor: crosshair">십자 모양 커서</p>
<p style="cursor: help">도움말 모양 커서</p>
<p style="cursor: pointer">포인터 모양 커서</p>
<p style="cursor: progress">실행 중 모양 커서</p>
<p style="cursor: n-resize">상하 크기 조절 모양 커서</p>
</body>
</html> 마우스 커서

마우스 커서

아래에 마우스를 올려 보세요. 커서가 변합니다.
십자 모양 커서
도움말 모양 커서
포인터 모양 커서
실행 중 모양 커서
상하 크기 조절 모양 커서

HTML 4-2 박스 그림자 만들기

<!DOCTYPE html>
<html>
<head>
<title>div 박스에 그림자 만들기</title>
<style>
.redBox {
 box-shadow : 10px 10px red;
}
.blurBox {
 box-shadow : 10px 10px 5px skyBlue;
}
.multiEffect {
 box-shadow : 2px 2px 2px black, 0 0 25px blue, 0 0 5px darkblue;
}
.blackBox {
 box-shadow : 10px 10px 20px black ;
}
div {
 width : 150px;
 height : 70px;
 padding : 10px;
 border : 10px solid lightgray;
 background-image : url("media/spongebob.png");
 background-size : 150px 100px;
 background-repeat : no-repeat;
}
</style>
</head>
<body>
<h3> 박스 그림자 만들기 </h3>
<hr>
<div class="redBox">뚱이와 함께</div><br>
<div class="blurBox">뚱이와 함께</div><br>
<div class="multiEffect">뚱이와 함께</div><br>
<div class="blackBox">뚱이와 함께</div><br>
</body>
</html>

2017년 10월 20일 금요일

Java 3장 제어문 break문 예제, 컨티뉴문 예제

제어문
1) 선택문 : if-else문, switch문
2) 반복문 : while문, for문, do-while문
3) 분기문 : break문, continue문

break문은 선택문, 반복문을 벗어난다.

import java.util.Scanner;

// 예제) 평균 계산
public class Test001 {

public static void main(String[] args) {
int total = 0;
int count = 0;
int grade;
Scanner sc = new Scanner(System.in);

while (true) {
System.out.print("점수 입력: ");
grade = sc.nextInt();

if (grade < 0)
break;

total += grade;
count++;
}
System.out.println("평균은 "+ total / count);

}
}


// continue문 예제
public class Test001 {

public static void main(String[] args) {
String s = "no news is good news";
int n = 0;
int i;

for (i=1; i<=s.length(); i++) {
if(s.charAt(i) != 'n') // if(s.charAt(i) == 'n') 이게 훨신 효율적이다.
continue; // n++;

n++;
}
System.out.println("n의 개수: "+ n);
}
}

시스템 보안

1. 내컴퓨터는 해킹이 당한적 있는가? 있다. 2. 컴퓨터를 하게되면 해킹을 당한다. 무엇을 이용해 해킹을 하는가? 인터넷이 가장 보편적. 사회적인 공격(주변인이 사전정보를 가지고 해킹) 3. 대응을 어떻게 해야하나? 보안프로...