Google

«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
BLOG Total Visitors
Today Hit, Yesterday Hit
BLOG main image


visitor stats
'study/programming'에 해당되는 글 36건
[Schizo!, 2007. 9. 13. 18:57, study/programming]

다중 접속 서버 구현방법

1. 프로세스 생성을 통한 멀티태스킹서버

2. SELECT함수에 의한 멀티플렉싱 서버

3. 쓰레드를 기반으로 하는 멀티쓰레딩 서버


1번방법은 10장 11장에서 보았다.

1번요약 :
fork() 로 프로세스 생성
sigaction()으로 자식프로세스 종료 확인
pipe()로 프로세스간 통신

12장은 2번방법.


1번과 2번 방법의 차이는 다음과 같다.


 
 
 
서버는 주기적으로 데이터를 전송해오는 클라이언트가 있는지 확인을 하다가, 발견한 경우, 그 클라이언트로부터 데이터를 수신한다
 
이를위해 select함수가 사용된다.
 
int select(검사대상갯수,수신검사소켓,송신검사소켓,예외,타임아웃);
-검사대상갯수는 윈도우에선 의미없음.
-select함수 호출후 변화가 생긴 소켓을 제외하고 모두 0으로 초기화된다.(따라서 0이 아닌소켓이 변화가 생긴 소켓)
-select함수 호출후 시간은 타임아웃은 타임아웃까지 남은시간으로 재설정된다.
-리턴값 : 0 : 타임아웃 , -1 : 오류 , 0보다큰값 : 변화가 있는 소켓수.
 
함께쓰이는 함수
FD_ZERO(fd_set* fdset)
FD_SET(int fd, fd_set* fdset)
FD_ISSET(int fd, fd_set* fdset)
 
 
예:
 
//두개의 소켓이 있다고 가정.
hServerSocket = socket(PF_INET,SOCK_STREAM,0);
 
hClntSocket = accept(hServerSocket,(SOCKADDR*)&clntAddr,&clntLen);
 
//변수선언
fd_set reads,temps;
 
FD_ZERO(&reads);                     //reads변수 초기화
FD_SET(hServerSocket,&reads);  //hServerSock에 변화가 있는지 관찰하겠다.
 
 
while(1)
{
                temps = reads;            //select호출후 0으로 초기화 되므로 이렇게 해주어야 한다.
                timeout.tv_sec = 5;     //select호출후 남은시간으로 변경되므로 이렇게 해주어야 한다.
                timeout.tv_usec = 0;;
 
                select(0,&temps,0,0,&timeout);    //temps에 수신데이타가 있는지 관찰하겠다.
 
                if(FD_ISSET(hServerSock,&temps))
                {
                          //hServerSock에 연결요청이 들어왔다
                }
                else
                {
                        //아닌경우 처리......
                }
}
 
 
 
 
요약 :
FD_SET으로 관찰할 소켓을 지정한 다음
select()로 지정한 소켓들을 관찰하고
FD_ISSET으로 관찰하는 소켓에 변화가 있는지 확인한다.
 
 
활용 :
에코서버를 수정하여 여러개의 클라이언트가 접속할수 있도록 처리할 수 있다.
1. 클라이언트가 접속할때마다  fd_set에 추가
2. 클라이언트가 접속을 끊을때마다 fd_set에서 삭제
2. select로 체크한후
3. 변화가 생긴 소켓에 에코한다.
 
 
hServSock = socket(PF_INET,SOCK_STREAM,0);
 

//fd_set설정

FD_ZERO(&reads);

FD_SET(hServSock,&reads);

 

while(1)

{

             temps = reads;          //select호출후 0으로 초기화 되므로 이렇게 해주어야 한다.

             timeout.tv_sec = 5;   //select호출후 남은시간으로 변경되므로 이렇게 해주어야 한다.

             timeout.tv_usec = 0;

            

             if( select(0,&temps,0,0,&timeout)==SOCKET_ERROR )      //temps에 수신데이타가 있는지 관찰하겠다.

                           ErrorHandling("select() error");

            

             for(arrIndex=0;arrIndex<reads.fd_count;arrIndex++)        //reads.fd_count는 계속 바뀔것이다.

             {                                                                                     

                           if(FD_ISSET(reads.fd_array[arrIndex],&temps))         //변화가 생긴 소켓이 있는가.

                           {

                                        if(reads.fd_array[arrIndex]==hServSock)     //변화가 생긴 소켓이 연결요청인경우

                                        {

                                                     clntLen = sizeof(clntAddr);

                                                     hClntSock = accept(hServSock,(SOCKADDR*)&clntAddr,&clntLen);

 

                                                     FD_SET(hClntSock,&reads);               //연결요청을 받아들이고 fd_set에 추가

                                                     printf("클라이언트 연결 : 소켓핸들 : %d \n",hClntSock);

                                        }

                                        else

                                        {

                                                     strLen = recv(reads.fd_array[arrIndex],message,1024,0);

 

                                                     if(strLen==0)

                                                     {

                                                                  closesocket(temps.fd_array[arrIndex]);

                                                                  printf("클라이언트 종료 : 소켓핸들 : %d\n",reads.fd_array[arrIndex]);

                                                                  FD_CLR(reads.fd_array[arrIndex],&reads);    //연결종료이면 fd_set에서 삭제

                                                     }

                                                     else

                                                     {

                                                                  send(reads.fd_array[arrIndex],message,strLen,0);

                                                     }

                                        }

                           }

             }

 

}

'study > programming' 카테고리의 다른 글

c  (0) 2007.11.10
반복문 9월 17일  (0) 2007.09.17
dd  (0) 2007.09.13
조건if  (0) 2007.09.07
c언어 공부중  (0) 2007.09.07


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 9. 13. 18:55, study/programming]

1. 용어 정의 :


Finder : 검색하고자 하는 파일에 대한 Query를 전송하고, 이 Query에 대한 파일 list를 수신하는 application

           파일 list중 임의의 파일에 대해 파일 내용을 전송받음

           사용자가 필요한 시점에만 실행. GUI 필요


Base : Finder로부터 Query를 전송받아, 이 Query에 해당하는 파일을 특정 폴더에서 찾아 list를 송신하는 application

          파일 list중 전송이 요청된 파일을 송신

          프로세스로서 항시 실행. GUI 불필요



검색 요청 : Finder가 각각의 Base들에게 Query Request ( 멀티캐스트 이용)

검색 응답 : 각각의 Base들이 각자의 특정 폴더에서 검색한 list 내역을 Finder에게 송신(응답)


파일 요청 : Finder가 list의 파일중 하나를 선택함으로써, 특정 Base 그룹에서 파일의 전송을 요청함

파일 전송 : 선택된 파일을 소유하고 있는 Base들이 Finder에게 선택된 파일을 전송




2. 기능 정의  :


Finder :

- 파일 전송시 전송속도, 예상시간, 파일 총 용량, 수신한 용량 표시

- 몇 개의 Base로부터 파일을 수신중인지, 어떤 IP를 가진 Base로부터 수신중인지를 표시

- 리스트 새로 고침

- 이미 같은 이름의 파일이 수신 폴더에 존재할때 '이어받기' or '덮어쓰기' 물어볼 것

- 파일 수신시 수신 받을 폴더를 변경 가능

- '전송 시작' 및 '전송 일시중지', '전송 취소'기능

- '이어받기' 기능 ( '전송 일시중지' 후 '전송 계속'을 선택하면 일시중지 직전의 나눠받기 상황에서 계속 )


Base :

- 지정된 폴더내의 하위 폴더에 존재하는 파일도 전송 가능





3. 제약 사항


- 파일 전송 시작시, 이미 list를 파악 완료한 Base로부터만 수신함

- 파일 전송 시작후에 수신된 list에 대해서는 기존 파일 전송

- 파일 전송중 특정 Base가 어떠한 이유로 '전송 불가' 상태가 되면

  다른 Base로부터 그 공백분을 수신함

- 파일 전송중 특정 Base로부터의 해당부분 전송이 완료되면

  현재 전송중이면서 가장 전송속도가 느린 해당분의 전송속도를 확인하여

  적절한 조건이 만족하면 ( 이 부분 확실히 정의할 것) 그 해당분의 부족분을 대신 전송케 함



--- 아래 사항은 특정 설정 파일을 두어 기록한다.

- 다운로드, 공유 디렉토리

- 업/다운로드 Node수 제한사항




4. 다음 시간까지 숙제

- 책 14-1장 멀티캐스트(Multicast) 공부

- 12장 I/O 멀티플렉싱(Multiplexing) 공부, 정확한 이해

- 우리 p2p 프로젝트에 멀티플렉싱을 적용할 수 있는가..

   그렇다면, 또는 그렇지 않다면 프로세스/쓰레드/소켓을 어떻게 구성해야 하는가..

   그 근거는 무엇인가..


* 12장은 조낸 빡셀 수 있으므로 숙제는 일찍 시작들 하시길....

   화요일 저녁 회의 끝나고 봅시다.

'study > programming' 카테고리의 다른 글

반복문 9월 17일  (0) 2007.09.17
tcp/ip  (0) 2007.09.13
조건if  (0) 2007.09.07
c언어 공부중  (0) 2007.09.07
곱셈 기능을 지니는 함수  (0) 2007.09.07


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 9. 7. 16:19, study/programming]
#include

int main(void)
{
int num1 = 0,num2 = 0;

printf("간단한 정수 두 개를 공백으로 구분하여 입력하세요.\n");
printf("입력>");
scanf("%d %d",&num1,&num2);

if(num1)
if(num2)
printf("16줄:두수 %d과 %d는 모두 0이 아닙니다.\n",num1,num2);
else
printf("18줄: num1 %d는 0이 아니고 ,num2 %d는 0입니다.\n",num1,num2);


if(num1){
if(num2)
printf("28줄 : 두수 %d과 %d는 모두 0이 아닙니다.\n",num1,num2);
} else
printf ("24줄 :num1 %d는 0입니다.\n",num1);


if(num1){
if(num2)
printf("28줄:두수 %d과 %d는 모두 0이 아닙니다.\n",num1,num2);
else
printf("30줄 :num1 %d는 0이 아니고, num2 %d는 0입니다.\n",num1,num2);
}else {
if(num2)
printf("33줄:num1 %d는 0이고 ,num2 %d는 0이 아닙니다.\n",num1,num2);
else
printf("35줄 :두 수 %d과 %d는 모두 0입니다.\n",num1,num2);
}

return 0;
}

if문에후()안에 조건이 오는걸로 아는데
예를들면 (num1>2) 이런식의 조건 말입니다.
그런데 그냥 (num1) 이라는 조건은 어떤수가 입력되던간에 그냥 성립되는 것 압니까? 왜 0과1로 기준이 나누어지는겁니까?
//좋은 질문입니다. 기본적으로 전산 수학이라는 책을 보시면 좀더 이해가 잘 될겁니다. 나중에 전산에 관련된 수학책 보세요.설명 해 드리겠습니다.
if(조건식) 님 말씀대로 if(이안에는 조건식이 들어가게 됩니다)
만약 조건식이 참이 true 이고 거짓이면 false가 됩니다.
그런더 c언어서는 0은 false로 나머지 자연수는 true로 인식 합니다.
if(num1>2) 이식은 num1이 2보다 클 경우에만 참입니다
반면에 if(num1)의 경우 num1이 0이 아닌 다른수가 오면 true로 인식 참이 되게 됩니다. 0이면 false 가 되는거조.

//////////////////////////////////////////////////
#include

int main(void)
{
int num1 = 0,num2 = 0;

printf("간단한 정수 두 개를 공백으로 구분하여 입력하세요.\n");
printf("입력>");
scanf("%d %d",&num1,&num2);
///////////////////////////////////////////////////////////////////
if(num1) 이것은 무슨 뜻이냐면?
만약 if( num1)
num1 = 0 이다면 if문을 실행 하지 않습니다.
num1 !=0 다면 if 문을 실행 합니다.
즉 num1 이 1,2,3 -- 즉 0을 제외한 수가 올경우if 문을 실행 하게 됩니다.
scanf를 통해서 num1 과 num2를 입력 받아서 num1과 num2 가 둘다 0이 아니게 되면 이문장을 수행하고 printf("16줄:두수 %d과 %d는 모두 0이 아닙니다.\n",num1,num2);
하나라도 0이라면 else 문을 수행 하게 되는거조. 대충 아시겠조
////////////////////////////////////////////////////////////////////////

'study > programming' 카테고리의 다른 글

tcp/ip  (0) 2007.09.13
dd  (0) 2007.09.13
c언어 공부중  (0) 2007.09.07
곱셈 기능을 지니는 함수  (0) 2007.09.07
정보처리기사 실기 공부방법  (1) 2007.08.21


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 9. 7. 14:43, study/programming]

/*#include <stdio.h>
#define korea 3.14
int main(void)
{
 typedef int ok;
 ok age;
 printf("나이는?\n");
 scanf("%d",&age);
 printf("--> 입력한 당신의 나이는 %d입니다.\n",age);
 return 0;
}


#include <stdio.h>

int main(void)
{
 printf("\"%s\"\n","대한민국");
 printf("\t\'c' 언어%c \n",'!');
 printf("\a\a\a\a\a \\");

 return 0;
}


#include <stdio.h>
int main(void)
{
int a,b,temp;
scanf("%d %d",&a,&b);
temp=a;
a=b;
b=temp;
printf("a=%d b=%d",a,b);
return 0;
} */
/*
#include <stdio.h>

int main(void){
 int a=30;
 printf("30을 8진수로  %o\n",a);
  return 0;
}
*/
/*
다음의 소스 코드는 에러를 포함하고 있다.
단 "한문자" 만 바꿔서(추가/변경만 가능) 프로그램이 정확히 20개의 '*'기호를 출력하도록 고쳐라  (답은 세가지가 있다)

01 int main()
02 {
03  int i, n=20;
04  for(i=0; i<n; i--)
05   printf("*");
06  return 0;
07 }

04줄에 i--에서 i를 n으로 바꾸는거는 찾앗는데
 

*/
/*
#include <stdio.h>

int main()
 {
 int i, n=20;
 for(i<0; i+n; n--)
 printf("*");
  return 0;
 }
*/
/*
#include <stdio.h>

int main(void)
 {
 int i, n=20;
 for(i=0; -i<n; i--)
 printf("*");
  return 0;
 }
*/
/*
#include <stdio.h>
int main()
 {
  int i, n=20;
  for(i=0; i+n; i--)
  printf("*");
     return 0;
}
*/
#include <stdio.h>

int main(void)
{
 int x=20;
 double y=3.0;
 double a=3.5;
 double b=3.4;

 int ok1=x/(int)y;
 int ok2=x/y;
 double ok3=(int)a+b;

 printf("%d\n",ok1);
 printf("%d\n",ok2);
 printf("%f\n",ok3);

 return 0;

}

9월 7일
/*
문제 1.
  곱셈 기능을 지니는 함수를 하나 구현하고  main함수에서 이를 호출하는 형태로 프로그램을 구성하자.
main함수에서는 사용자로부터 두개의 숫자를 입력받아서 곱셈 결과를 출력에 줘야 한다.
이러한 작업은 사용자가 0 0 을 두개 입력할 때까지 계속되어야한다.
그리고 프로그램이 종료 되면 연산을 몇 번 하였는지도 출력해 줘야한다.
- 실행 예:
두개의 숫자 입력 1 3
연산결과:3
두개의 숫자 입력 3 2
연산결과 6
총 2번 연산하였습니다. */

/*
#include <stdio.h>

int gop(int a,int b);
int main(void)
{
 int x, y;
 printf("두수를입력하시오:");
 scanf("%d %d", &x, &y);
 printf("결과는? %d\n",gop(x, y));
}

int gop(int a,int b)
{
 return a*b;
}


*/

/*
#include <stdio.h>

#define MULT(x,y) ((x)*(y))

int main(void)
{
       int result = 0;        
       result = MULT(10, 20);
       printf("두수의 곱은 %d\n", result);
       return 0;
}
*/
/*
#include <stdio.h>
#define SQ2(x) ((x)*(x))
int main(void){
 int a=3;
 printf("네제곱근은? %d", (SQ2(a))*(SQ2(a)));
 return 0;
}
*/

#include <stdio.h>
#define SQUARE(x) ((x) * (x))  /* 제곱을 하는 매크로함수 정의 */
int main()
{
int result;                    /* 결과값이 들어 갈 변수를 선언한다 */
 result = SQUARE(3);      /* 3의 제곱을 구해서 result에 넣는다 */
   result = SQUARE(result);  /* result의 제곱을 구해서 다시 result에 넣는다 */
 printf("3의 네제곱은 %d입니다\n", result);   /* 결과값 result를 정수 형식으로 화면에 출력한다. */
  return 0;                   /* 프로그램을 끝낸다 */

}



#include <stdio.h>
int main(void)
{
 float grade=0;
 printf("이번학기의 성적은 얼마인가?\n");
 scanf("%f",&grade);
 printf("---> 입력한 당신 성적은 %f 입니다.\n",grade);
 if(grade > 4.3){
  printf(">>>장학금을 받습니다.\n");
  printf(">>>등록금도 면제입니다.\n");
 }
 else if(grade < 2.0)
 {
  printf(">>>퇴학입니다.\n");
 }
 return 0;
}


#include <stdio.h>
int main(void){
 int a,num1,num2;
 printf("두수를입력하세요\n");
 scanf("%d%d",&num1,&num2);
 printf("더하려면 1을 입력하세요");
 scanf("%d",&a);
 if(a == 1){
  printf("1을입력하였습니다");
  printf("두수의 합은 %d입니다",num1+num2);
 }
 else{
  printf("다른 수를 입력하였습니다.");
  printf("두수의 곱은 %d입니다",num1*num2);
 }
 return 0;
}


#include <stdio.h>
int main(void){
 int x=0;
 scanf("%d",&x);
 if(x % 2 == 0){
  printf("짝수입니다");
 }
 else{printf("홀수입니다");
 }
 return 0;
}


#include<stdio.h>

void gu(int a, int b);
int main(void)
{
 int a,b;
 printf("출력할 구구단을 2개입력하시요:");
 scanf("%d %d",&a,&b);
 gu(a,b);
}
void gu(int a, int b)
{
 int i,j,temp=0;
 if(a<b);
  else{
  temp=b;
  b=a;
  a=temp;
 }
 for(i=0;a<=b;a++)
 { 
  i=a;
  for(j=1;j<10;j++)
  {
   printf("%d*%d=%d\n",i,j,i*j);
  }
 }
 
}

'study > programming' 카테고리의 다른 글

tcp/ip  (0) 2007.09.13
dd  (0) 2007.09.13
조건if  (0) 2007.09.07
곱셈 기능을 지니는 함수  (0) 2007.09.07
정보처리기사 실기 공부방법  (1) 2007.08.21


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 9. 7. 12:31, study/programming]

곱셈 기능을 지니는 함수를 하나 구현하고 main 함수에서

이를 호출하는 형태로 프로그램을 구성하자. main 함수에서는

사용자로부터 두 개의 숫자를 입력받아서 곱셈 결과를 출력해 줘야 한다.

이러한 작업은 사용자가 0을 두 개 입력할 때까지 계속되어야 한다.

그리고 프로그램이 종료되면 연산을 몇 번 하였는지도 출력해 줘야 한다.


실행 예:

개의 숫자 입력: 1 3

연산 결과: 3

개의 숫자 입력: 3 2

연산 결과: 6

두 개의 숫자 입력: 12 7

연산 결과: 84

두 개의 숫자 입력: 0 0

총 3번 연산하였습니다.


#include<stdio.h>


int multiplication(int a, int b);


int main(void)
{
      int i=0;
      while(1)
      {
            int val1, val2;
            printf("두 개의 숫자 입력:");
            scanf("%d %d", &val1, &val2);
           

            if(val1==0 && val2==0)
            { 
                 printf("총 %d번 연산하였습니다.\n", i);
                 break;
            }
      

      printf("연산결과 : %d\n", multiplication(val1, val2));
      i++;
      }

     

      return 0;
}
int multiplication(int a, int b)
{
      return a*b;
}

'study > programming' 카테고리의 다른 글

tcp/ip  (0) 2007.09.13
dd  (0) 2007.09.13
조건if  (0) 2007.09.07
c언어 공부중  (0) 2007.09.07
정보처리기사 실기 공부방법  (1) 2007.08.21


본인의 아이피 주소 확인과 위치 추적
[Schizo!, 2007. 8. 21. 17:17, study/programming]

-다음 유수샘 까페에 쓴 글 입니다-


아직 합격자 발표가 난 건 아니지만...

몇번씩 마킹 잘못된 거 없나 확인 했고..점수도 안정권(88점)이고..

미리 감사의 말씀 전합니다...

비전공자이기 때문에.. 필기든 실기든..처음 준비 해보는 것이기에..

불안한 마음에 더 열심히 할 수 있었던 것 같아요.

4월 초부터 필기 준비하며, 또 5월 필기 시험 끝나고 실기 준비하며..

좋은 강의와 말씀 많이 해주셨던 유수샘..

대학 졸업하고 근 6년간 공부란 걸 해보지 않았는데..

오랜만에 하는 공부에서 나름대로 재미를 느끼며 할 수 있었던 건 유수샘 도움이 컸습니다..

이제 공무원 시험을 향해 나아가야 겠지만

공무원 시험은 정보처리기사만큼 재밌게 준비할 순 없을 거 같네요..

까페에 여러 회원분들, 변태오빠님 그리고 유수샘..

그동안 열심히 공부할 수 있게 동기부여 해준 님들이예요..

잊지 않겠습니다..^^



아 공부방법 덧붙입니다..^^

제가 공부한 방법은... 솔직히 좀 무식하게 했습니다..^^;;

벼락치기 노하우는 절대 아니구요..

시나공 책과 유수샘 강의를 병행하며 인터넷에 돌아다니는 구할 수 있는 문제들은 다 구해서
 
풀었습니다. 필기때도 실기때도...

비전공자여서 개념잡기도 힘들고 용어도 어렵고..

그래서 유수샘 강의로 이해를 한 다음 혼자 시나공으로 그날 배운 부분 복습하며 심화학습했습니다.

필기는 최대한 많은 기출문제를 접해보시고..기출이 두번이상 된 내용은 그냥 지나치시면
 
안될 것 같네요..일단 유수샘
1000제강의 들으시면서 기출문제도 접해보시고 개념도

잡으시는 방법 추천합니다..^^



그리그 알고리즘은..

일단 유수샘 강의 들으면서.. 말씀대로 순서도 직접 그려가시면서 해보세요..

순 서도 그리시다가 아, 분기문의 부등호 방향을 바꿔볼까? 부터 수열같은 경우는 초기값을 바꿔본다던지 N과 H의 처리 위치를 바꿔본다든지 아무튼 이런저런 생각 하시면서 생각하신 거 순서도로 직접 그려보세요. 틀린지 맞는지는 디버깅하면서 자기가 깨우쳐가는 거구요..그렇게 하다보면 어느새 알고리즘에 눈이 조금씩 트입니다. 초반엔 그렇게 하는 게 시간이 좀 걸린다 싶겠지만 점점 진도 나갈수록 이해도 빨라지고 가속도가 붙게 되더라구요.

그리고 디버깅은 중요해요. 자신있는 알고리즘이라 해도 막상 시험장 가서 보면 조금은 당황하기 마련입니다. 수열은 수열대로 순위는 순위대로 이차원배열은 이차원 배열대로, 정렬은 정렬대로..5행5열 채우기등은 그 나름대로.. 디버깅은 정해진 규칙이 있는 건 아니기 때문에 변수든 뭐든 자기가 보기 편한대로 다 집어넣고 차근차근 처음부터 값을 따려 맞는지 알아보는 겁니다.

저같은 경우는 정렬되는 배열 자체도 디버깅에 집어넣어 회전시마다 배열이 어떻게 바뀌는지 디버깅 했구요...차근차근 여러번 생각하고 마지막에 디버깅 꼭 한다면 알고리즘은 만점 받을 수 있을거예요^^

또 문제 어렵기로 악명높은 바로가기닷컴문제와 교재로 공부했던게 많이 도움이 됐던 것 같습니다.

왜냐면 여기 문제는 알고리즘 자체에 변수설명이 없습니다..알고리즘을 보며 구조를 파악해 변수의 역할을 추측해내야 하죠.. 제가 기사 실기 공유자료실에 알고리즘 문제들 이란 이름으로 올린 자료가 있는게

그게 거기 알고리즘입니다. 일단 순서도 자체도 난해하고 좀 까다로운 부분이 있으므로

알 고리즘을 어느정도 숙지하신 다음 푸시길 권장하는 바입니다..^^;; 그리고 반정도는 알고리즘 기출관는 거리가 좀 먼 문제들이므로..(스택이라던지..디스크탐색 알고리즘등,,) 그냥 강의에서 다루었던 알고리즘만 푸셔도 충분하실듯 합니다. 그리고 더이상은.. 기출됐던 거라고 해서 지나칠 수 없는 상황이 되어버렸습니다.. 2회 기사 실기에 이미 산업기사에서 기출됐던 삽입정렬 알고리즘이 나왔으므로

이는 충분히 기출됐던 알고리즘도 어떤식으로든 응용이 되서 나올 수 있다는 얘기가 되는 거 같네요..

각 알고리즘 별로 기억 해 두셔야 할 내용 (예를 들면 삽입정렬은 2번째 데이터를 앞의 데이터들과 비교해 나간다던지 순위는 처음에 모든 순위를 1로 한다던지 등등..)들을 잘 기억해 두셔야 할 것 같습니다.

결과 값은 같아도 공단쪽이 요구하는 알고리즘 해법은 기본 개념에 충실한 알고리즘 같습니다..



그리고 데이터베이스 실무는..점차 기존 교재들에서 벗어나 좀더 실무적이거나 세부적인 내용들을 다루는 방식으로 출제 되는 것 같습니다..

2회실기의 경우..사실 DB를 알고 풀었다기보단 기본 개념에 의지했습니다..

정확히 알고 푼 문제는 2번 로킹 뿐이었구요.. 이건 필기때 공부했던 내용으로.. 시험전날 전산영어 대비용으로 필기책 훑어보던 중에 다시 기억하게 된 용어였습니다..

클러스티드 넌클러스티드 인덱스같은 경우는

클러스터링 이란 용어를 신기술동향 용어중 공부했는데

자주 사용되는 데이터들을 인접한 위치에 배열해 검색속도를 높인다는.. 뭐 그런 의미로 알고 있어서..

일점 범위를 주어 찾는 다는 지문에 힌트를 얻어 클러스티드를 고르고 또 반대 개념으로 넌클러스티드를 골랐습니다.. 정말 DB를 알고 푼 문제가 아니었죠?-_-;


신기술동향 같은 경우는 약어들이 많습니다..

WCDMA와 IMT-2000,등 무선인터넷 관련 용어들..

또 프로토콜에 관련된 용어와 소프트웨어 용어들..이런 용어들은 대강의 뜻과함께 이게 규약인지 아니면 소프트웨어인지 컴퓨터 언어인지 아니면 기술인지 이걸 잘 구별해두셔야 할 것 같습니다..2회같은 경우는 다행히 2006 하반기 추가된 용어들을 집중적으로 구성해 출제했기 때문에 어렵지 않았지만

만약 기존 용어들과 같이 영어 약어로 된 용어들이 섞여서 출제되면 난감하거든요..;


전산영어 같은 경우는..

어느정도 영어지문 해석에 큰 무리가 없으시다면 그냥 필기책 한번 훑어보시는게 낫다고 추천해드립니다.

전산영어 출제범위가 필기때 배운 내용들이 영어지문으로 나오는 것이므로.. 필기때 배웠던 중요한 내용들을 다시 한번 점검하시는 게 나을듯 해요..


업무프로세스는 아직까지는..

공부할 필요가 없는 과목이라 생각이 듭니다..지문 잘 읽으면 답이 언젠가는 눈에 보이기 마련이므로

그냥 기출문제 조금 풀어보시고 아 이런식으로 답을 찾는구나..정도만 파악해두시면 될 것 같습니다..



제가 설명드린 방법은..적어도 시험일 한달전에는 시작 하셔야 할 거예요..

제가 믿고 있는 것이 제 머리속엔 자동완성 기능이 있다고 믿습니다. 한번보고 이해가 안가면

두 번보고 세번보고 하다가 도저히 이해가 안가면 잠시 덮어 두세요. 하루정도 지나고 다시 보면 이해가 갈 때도 있습니다. 뇌는 1+1=3의 기능을 하는 거 같아요. 하나를 알고 하나를 알면 그 두개를 조합해서 세개를 만들어낸다는.. 저만의 논리입니다..^^;;




에궁..100점 맞은 것도 아니고.. 몇달 정보처리 공부했다고 이런 글 쓰는 게..참 멋적지만..

그래도 도움이 되셨으면 해서 적습니다.. 비전공자라고.. 용어가 어렵다고..

포기하시진 않으셨으면 해요.. 일단 유수샘같이 알기 쉽게 개념 잡아 주시는 좋은 선생님이 계시고..

또 세상이 많이 좋아져서.. 이제 인터넷으로도 노력만 한다면 많은 정보를 얻을 수 있으니까요..




전 기사패쓰 알바는 아니지만.. 비전공자에게 유수샘 강의만큼 좋은 강의는 없는 것 같습니다.

강의시간은 좀 긴편이지만 그만큼 쉽게 이해시켜주고 두번 재번 다시 짚어주고..

질문에도 열심히 답변 해 주시고 열린 가슴으로 강의 하시는 멋진 분이라는 생각이 듭니다..^^

비록 적중은 못했지만 기사패쓰 교재에 삽입정렬 부분 알고리즘이 진짜 똑같이! 출제됐더군요..변수 이름만 틀리고 진짜 똑같은 거 보고 놀랬습니다..허걱..

분명 영향력있는 정보처리 강사님이시고 수강생들의 비위를 맞추느라 이리저리 눈치보시는 강사분이 아니시라 뭇매를 맞더라도 해야 할 말은 하시는 분입니다..

'study > programming' 카테고리의 다른 글

tcp/ip  (0) 2007.09.13
dd  (0) 2007.09.13
조건if  (0) 2007.09.07
c언어 공부중  (0) 2007.09.07
곱셈 기능을 지니는 함수  (0) 2007.09.07


본인의 아이피 주소 확인과 위치 추적
*1 *2