게임을 출시하는 것은 출산의 고통과도 같다.

옛날 옛적 내가 존경하던 분이 나에게 해줬던 말이다. 개발도 마찬가지. 사업도 마찬가지. 난 이 고통의 중독자다. 나를 아는 사람들의 응원도 있겠지만 때론 나의 무관심이 누군가를 분노하고 좌절하게 만들었을 것이다. 난 코드로 글을 쓰고 그림을 그린다. 하나를 시작하면 다른 것은 생각할 수 없게 된다. 병세가 심각하다. 하지만 세상을 바꿀 것이라는 확신. 그리고 난 혁신을 보여줄 것이다.

서버 개발자 시험 문제

옛날에는 프로그래머 면접볼때 이런 시험을 봤었습니다.
일명 손코딩.

이건 제가 팀장으로 근무할 때 만들었던 시험문제 입니다.

서버 개발자 시험 문제

Design Pattern

template <typename T>
class CSingleton {
	public:
	 	CSingleton() {}
 		virtual ~CSingleton() {}
    
        static T* GetInstance() {
            if ( false == isptr(ms_Instance) ) {
                LOCKING( ms_Locker );
                if ( false == isptr(ms_Instance) ) {
                    ms_Instance = new T();
                }
            }
            return ( ms_Instance );
        }

        static T& GetInstanceRef() {
            if ( false == isptr(ms_Instance) ) {
                LOCKING( ms_Locker );
                if ( false == isptr(ms_Instance) ) {
                    ms_Instance = new T();
                }
            }
            return ( *ms_Instance );
        }

        static void ReleaseInstance() {
            if ( isptr(ms_Instance) ) {
                LOCKING( ms_Locker );
                if ( isptr(ms_Instance) ) {
                    delete ms_Instance;
                    ms_Instance = NULL;
                }
            }
        }
  
	private:
        static T* ms_Instance;
        static CLocker ms_Locker;
};

template <typename T>
T* CSingleton<T>::ms_Instance = NULL;

template <typename T>
CLocker CSingleton<T>::ms_Locker;

1. 위 보기의 Singleton 패턴을 Array로 접근 할 수 있도록 수정 하세요.
template <typename T>
class CSingletonArray {



};

template <typename T>
T** CSingletonArray<T>::ms_Instance = NULL;

template <typename T>
CLocker CSingletonArray< T>::ms_Locker;

Protocol Design

2. Send/Recv용 구조체를 설계 할 때 #pragma pack(4)를 사용 하는 이유를 설명 하세요.






3. Broadcast를 위한 Player의 구조체를 정의 하세요.
#pragma pack(4)
struct SPlayerData {





};
#pragma pack()

Parsing

원본: abcdefghijklmnopqrstuvwxyz
결과: abcdefghijklmnopqrstUVwxyz
4. Standard Template Library만을 사용 하여 위 보기의 string 치환 함수를 작성 하세요.
INT Replace(std::string& sData_,const std::string& sSearch_,const std::string& sReplace_) {
	INT iCount = 0;
	INT iPosition = 0;
	size_t stSearch = sSearch_.size();
	size_t stReplace = sReplace_.size();
	while(true) {





	}
	return iCount;
}

문자열: abc|def|ghi|jkl|mno|pqr|stu|vwx|yz\\
5. strtok() 함수 만을 사용 하여 위 보기의 string을 ‘|’ 단위로 분리 하세요.





Distributed Processing

6. Grid Computing에 대한 이해와 게임 서버(World)에 적용 할 수 있는 방법을 설명 하세요.




7. 구조적으로 부하가 집중 될 수 밖에 없는 Database를 특별한 장비 없이 분산 접근 할 수 있는 방법을 설명 하세요.




8. Replication Database를 구성 하였을 때 어떠한 성능적 장점이 있는지 설명 하세요.




Flexible Threading

9. 하나의 동작(Packet)을 위한 Single Threading 처리 방식과 Multi Threading 처리 방식을 장점과단점을 포함 하여 설명 하세요.




Survey

10. 실용주의 프로그래밍과 범용주의 프로그래밍에 대한 자신의 생각을 서술 해 주세요.




댓글

이 블로그의 인기 게시물

상용화를 위한 서버 프로젝트 이슈 정리

개발팀 일정 계획하는 방법