CoffeeScript 설치하기


커피스크립트(http://coffeescript.org/)는 자바스크립트를 컴파일 해주는 언어이다. 

자바 스크립트 언어를 자연어 중심으로 간결하고 이쁘게 작성해주는 언어이다.


우선 여러가지 특징들이 있는데, 우선 설치해서 눈으로 봐야 직성이 풀리므로 설치 부터 시작


1. Windows 에 설치하기

 리눅스 유저가 아니므로 Windows에 설치하는 방법을 찾아봤다.(리눅스 유저로 전향해야지 해야지 하면서 귀찮다... 집에서 얼마나 컴퓨터를 한다고,, 맥북유저가 되고 싶지만... ㅠㅠ)

CoffeeScript를 실행하기 위해서는 우선 Node.js를 설치해야 한다. Node.js를 꼭 설치해야 되는 것은 아니다. js 파일을 인클루드해서 사용도 할 수 있고, 홈페이지(http://coffeescript.org/)에 가면 Try 해 볼수 있는 환경이 되어 있다.


Node.js 사이트에 가서 http://nodejs.org/ 우선 Node.js를 다운로드 받는다.



Windows Installer를 다운받아 설치를 하면 별다른 선택 없이 Next로 설치를 끝마치면 된다.

Node.js는 설치했으면 그 다음으로는 CoffeeScript를 설치한다.

회사에서는 설치하면서 왜 안될까? 그러면서 cygwin 설치하고 외국 사이트 구글링해서 막 찾아보다 말았는데,,,

윈도우에서 Node.js를 설치만 하면 된다.


2. CoffeeScript 설치

윈도우에서 Node.js를 설치한 다음 cmd를 실행해서 CoffeeScript를 설치한다.



커피스크립트를 설치하기 위핸 명령어를 입력한다.


npm install coffee-script -g 


사진에서 보다시피 실행이 안된다. 저것 때문에 회사에서는 Cygwin 깔고 난리 폈는데, 우선 Node.js를 설치한 경로로 이동을 해서

실행하니 바로 된다. ㅡㅡ

Node.js를 설치하면 기본적으로 아래 위치에 설치되고 이러한 형태로 되어 있다.




npm으로 커피 스크립트까지 설치했는데,,, 어라 안되네...

구글링해보니까 현재 Node.js에서 제공하는 설치파일은 설정하는게 없어 간단하단다. 근데 왜 안돼,,,

결국 Node.js 에서 제공하는 게 나오기 전에 사용되던 설치파일을 다운받아 설치했다.


http://code.google.com/p/nodejs-win/



설치하고 콘솔을 띄워 실행해보니 바로 된다! @.@

커피스크립트는 아까 Node.js에서 배포한 파일을 가지고 먼저 설치했기 때문에 따로 설치할 필요는 없었다.





설치된 다음 간단하게 실행해보았다. 


이제 어찌됐던 커피스크립트를 할 수 있게 되었다.








저작자 표시
신고
블로그 이미지

Moonistar moonistar



MIT License, GPL License


jQuery 관련 페이지들을 돌아다니다 보니, MIT, GPL 라이센스가 많이 붙어있는 것을 보았다. 이것이 Open Source 라이센스 중 하나라는 것은 알고 있었지만, 문득 어떤 것인지 자세히 알아 봐야겠다는 생각을 하게 됐다.


1. MIT License

원문 라이센스 = http://www.opensource.org/licenses/mit-license.php


이름에서 알 수 있듯이 MIT 대학을 기원으로 하는 소프트웨어 라인센스이다. X11 License, X License 라고도 불린다.

MIT 공과 대학에서 자기 학교 소프트웨어 공학도를 위해 만든 허가서로, MIT 라이센스를 따르는 소프트웨어는 반드시 오픈 소스로 공개해야 한다는 원칙이 없다. 따라서, GPL의 엄격함을 피하고자 하는 사람들이 많이 사용한다.


> GPL 라이센스의 엄격함?


2. GPL License

원문 라이센스(GPLv3) = http://www.gnu.org/licenses/gpl-3.0.html


General Public License 의 약자로 GNU GPL 이라고도 하며 줄여서 GPL이라고 한다.

GPL 라이센스는 자유 소프트웨어 = 오픈 소스 소프트웨어에 관한 라이센스이며, 라이센스의 종류는 다음과 같다.


  • GNU General Public License (GPL) version 3
  • GNU General Public License (GPL) version 2
  • GNU General Lesser Public License (LGPL) version 3
  • GNU General Lesser Public License (LGPL) version 2.1
  • GNU Affero General Public License (AGPL) version 3
  • GNU All-Permissive License
  • Apache License version 2.0
  • Artistic License 2.0
  • Berkeley Database License 
  • Boost Software License 
  • Modified BSD license 
  • CC0 
  • CeCILL version 2 
  • The Clear BSD License 
  • Cryptix General License 
  • License of the ec fonts for LaTeX 
  • eCos license version 2.0 
  • Educational Community License 2.0 
  • Eiffel Forum License, version 2 
  • EU DataGrid Software License 
  • Expat License 
  • FreeBSD license 
  • Freetype Project License 
  • License of the iMatix Standard Function Library 
  • Independent JPEG Group License 
  • License of imlib2 
  • Intel Open Source License 
  • ISC License 
  • Mozilla Public License (MPL) version 2.0 
  • NCSA/University of Illinois Open Source License 
  • License of Netscape JavaScript 
  • OpenLDAP License, Version 2.7 
  • License of Perl 5 and below 
  • Public Domain 
  • License of Python 2.0.1, 2.1.1, and newer versions 
  • License of Python 1.6a2 and earlier versions 
  • License of Ruby 
  • SGI Free Software License B, version 2.0 
  • Standard ML of New Jersey Copyright License 
  • Unicode, Inc. License Agreement for Data Files and Software 
  • The Unlicense 
  • License of Vim, Version 6.1 or later 
  • W3C Software Notice and License 
  • License of WebM 
  • WTFPL, Version 2 
  • X11 License 
  • XFree86 1.1 License 
  • License of ZLib 
  • Zope Public License, versions 2.0 and 2.1 
이런... 엄청 많군. 자세히 보면 MIT License도 포함되어 있는 것이 오픈 소스 라이센스 리스트라고 볼 수 있을 것 같다.

이러한 라이센스들은 전부 다 "자유 소프트웨어" 의 목적으로 제공되는 라이센스들이다.


"자유 소프트웨어의 정의" - Free Software Definition

  1. 프로그램을 어떠한 목적을 위해서도 실행할 수 있는 자유 (자유 0).
  2. 프로그램의 작동 원리를 연구하고 이를 자신의 필요에 맞게 변경시킬 수 있는 자유 (자유 1). 이러한 자유를 위해서는 소스 코드에 대한 접근이 선행되어야 합니다.
  3. 이웃을 돕기 위해서 프로그램을 복제하고 배포할 수 있는 자유 (자유 2).
  4. 프로그램을 향상시키고 이를 공동체 전체의 이익을 위해서 다시 환원시킬 수 있는 자유 (자유 3). 이러한 자유를 위해서는 소스 코드에 대한 접근이 선행되어야 합니다.

목적에 대해서는 크게 이해는 되지만, 세부적인 내용은 너무 많고 복잡하다. 위에서 MIT 라이센스를 선호하는 이유의 엄격함도 어느 정도 이해가 된다. 


그런데 자유 소프트웨어는 무료인가?


자유와 공짜는 다르다. 자유 소프트웨어의 목적은 "자유로이 배포할 수 있는 권리" 를 보장하기 위한 라이센스이다. 이는 자유롭게 소스 코드를 수정하고 추가 개발하여 GNU 라이센스가 아닌 상업적인 목적으로 판매하여도 가능하다는 이야기이다. 아울러 라이센스도 다른 사용자가 변경이 가능하다. 프로그램 1.0 버전인 GNU 라이센스를 가지는 소스를 수정하여 프로그램의 버전을 2.0 으로 올린 다음 2.0에 다른 라이센스를 부여가 가능하다는 것이다. 아울러 반대로 유로 라이센스의 코드를 사서 GNU 라이센스로 변경하여 배포할 수 있다고 한다. NHN에서 제로보드(XE)를 인수하여, 이를 GNU 라이센스로 돌렸다고 한다.


보다 자세한 내용은 추후에 또 업데이트.


> GNU GPL에 대한 빈번한 질문들

http://www.gnu.org/licenses/gpl-faq.ko.html


> What GNU

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Development/Forum/manager/What_GPL






저작자 표시
신고
블로그 이미지

Moonistar moonistar


코딩을 하다 보면 하나의 페이지의 라인수가 매우 길어질 때가 있다. 그렇게 코딩을 하는 것이 잘 짠 코드인가? 라는 질문은 제쳐두고,,

이렇게 길어지면 중간에 수정한 부분이나 찾아가야 될 때 마다 스크롤도 어렵고 복잡하다.

Visual Studio에서는 Ctrl + Shift + P 인가? 암튼 마킹을 해놓고 단축키로 마킹 한 부분들을 이동하는 기능을 잘 썼었다.

이클립스도 당연히 있겠지! 하지만 단축키로 등록이 되어 있지는 않다.


단축키를 등록하는 방법은 다음과 같다. 

Window > Preferences > General > Keys 화면으로 들어간다.

위에 검색창에 add bookmark 나 bookmark로 검색하면 아래와 같이 항목이 나온다.

Add Bookmark를 선택하고 Binding 항목에 키 조합을 넣어주면 된다. 이클립스의 수 많은 기능과 단축키로 충돌이 날수있다.

충돌이 날 경우 Conflicts 항목에 나타나게 된다. 충돌이 나지 않는 조합을 선택하거나, 안 쓰는 기능일 경우 해당 단축키를 제거하고 등록하자.




북마크 뷰를 보기 위해선 아래와 같이 Windows > Show View > Bookmarks 를 선택해 주면 활성화된다.





최종적으로 북마크 한 리스트를 북마크 뷰에서 확인하면 된다. Visual Studio에서는 P, N 조합으로 이전 마크, 다음 마크 이동이 쉬었는데,,,

여기서는 Next Bookmark라는 항목 밖에 없다. 잘 제어도 안되서,, 우선은 북마크 뷰의 항목을 클릭해서 이동하면 된다.

Next Bookmark는 다음에... 사용을 좀 해보고...



저작자 표시
신고
블로그 이미지

Moonistar moonistar



오늘까지 해줘야 되는 작업을 하는데, 서버를 껐다 키면 계속 저 에러가 뜨면서 서버가 시작이 안된다.

코딩한거 디버깅 할려는데, 서버가 안 올라오니 디버깅도 못하고,,

급한 맘에 에러 원인을 찾을 여유는 없고, 결국 서버를 새로 만들기를 수십번...

결국에는 작업 해줘야 되는 부분을 다 해주고 나서, 편안한 맘으로 찾아 보니,,,, 바로 답이 나왔다.

2009-09-24 12:57:23,653 ERROR [org.jboss.kernel.plugins.dependency.AbstractKernelController] (main) Error installing to Start: name=jboss:service=NamingProviderURLWriter state=Create mode=Manual requiredState=Installed
java.io.IOException: Access is denied

이런 에러 메시지 인데,, 에러 메시지가 저거 하나만 뜨는게 아니라 엄청 많이 뜨기 떄문에,,, 혹시 이런 메시지도 뜨는지 확인해 보고

조치하면 해결 할 수도 있을 것이다.

내 경우 최종 메시지는 ProfileKey@ ~~~~~ 등등 빨간색 글자로 profile 관련 에러였던 것 같다.

원인은 Jboss 서버가 구동되면서 로드되는 특정 파일이 다른 프로세스에 의해서 lock 되어 있기 때문에,

서버가 구동되면서 해당 파일을 로딩하지 못하기 때문이다.

에러 출력을 보면 java.lang.StringIndexOutOfBoundsException 에러 구문이 자주 보일 것 이다. 특정 path와 함께 나타난다.

뭐 C:\Jboss-5.0.1\ bla bla bla 이렇게,,,

해결 책이라고 해야 될지 모르겠지만, lock 걸린 것을 풀어주면 된다. ㅎ

http://ccollomb.free.fr/unlocker/

여기 사이트 가면 lock을 쉽게 풀 수 있는 툴이 있다. 나는 바로 다운 받아 Jboss 최상위 폴더에서 바로 lock 잡고 있는 것을 검색하여 풀고,

실행하니 깔끔하게 해결...

오랜만에 Java, Eclipse 쓸려니,,, 어색하다. ㅎ

VS 단축키로 디버깅 누르고,, ㅎㅎ

하지만, 가장 중요한 건 ,,,, 오늘 오전까지,, 안되면 오후까지 해달라던,,, 일이.....

내일해도 되는 것이었다.. ㅡ.ㅡ;; 오늘도 googling이 날 살렸다 ㅋ
저작자 표시
신고
블로그 이미지

Moonistar moonistar




책을 읽다가 상속받은 클래스에서의 데이터 멤버에 대한 부분을 읽게 되었다.


객체가 인스턴스화될 때 인스턴스를 수행하는 코드는 어떤 타입의 객체를 생성할 것인지 선택해야 한다. 컴파일러가 그런
인스턴스를 수행하는 작업을 만나면 인스턴스를 수행할 정확한 데이터 타입을 결정한다. 그리고 해당 객체와 해당 객체가
상속을 수행한 객체를 할당하는 코드를 만들어낸다. 컴파일러는 베이스 클래스의 데이터 멤버를 처음 메모리상의 처음
위치에 배치하고 다음 위치에는 다음 부모 클래스의 데이터 멤버들, 또 그 다음 위치에는 그 다음 클래스를 배치시켜 나간다.




근데 직접 눈으로 봐야 이해가 되니까, 샘플 코드를 짜서 메모리를 확인해 봤다.

왼쪽 그림과 같이 클래스를 생성하여 각 클래스의 멤버 변수에 값을 대입하였을때
메모리에는 어떻게 저장되는지 확인해 보았다.

우선

const char* a = "startmain";

이건 Entry point를 빨리 못찾는 내가, 좀 쉽게 찾을려고 넣은 구문이다.








한참 WIndbg, ollydbg 등으로 이것 저것 눌러봤는데, 어떻게 해야 되는지 모르고 헛 치다가, Windbg의 local 창을 통해서 확인해봤다.

위와 같은 상태의 메모리는 아래 그림과 같다.



보면서 의문이 든게, 상속받은 클래스의 부모 클래스에는 값이 다 쓰레기 값이 들어가 있다. 왜 그럴까 가만히 생각해 보니,,,

내가 테스트한 코드를 보면 각 base, child, child2, otherchild를 따로 생성하였다. 그리고 멤버 변수에 대한 값은 각 클래스의 자식 클래스에만 대입을 하여놓으니, 이렇게 될 수 밖에,,,,

근데 맨 처음 상속받은 클래스의 메모리 구조를 보면 높은 주소 메모리에서 낮은 주소 메모리로 클래스 인스턴스가 생성이 되는데,
지금 보면 가장 높은 주소에 base 클래스가 있고 낮은 주소로 child, chil2 등이 존재하고 있다.

하지만, 이건 각 클래스들이 따로 생성되어 먼저 생성된 클래스에 대한 인스턴스들이 높은 메모리 주소에 먼저 생성된 것이다.

m_child2 만 보면, childMember2 변수는 0x0012ff70 에 있고, 상속 받은 클래스의 멤버 변수들은 그 위의 낮은 주소에 배치된 것을 볼수있다.


컴파일러는 베이스 클래스의 데이터 멤버를 메모리 상의 처음 위치에 배치하고 다음 위치에는
다음 부모 클래스의 데이터 멤버들, 또 다음 위치에는 그 다음 클래스를 배치시켜 나간다.
그럼 저 소스를 변형해서 다른 경우에는 어떻게 보이는지 확인해보았다.

우선 child2 클래스의 m_child2 인스턴스에 각각 멤버 변수들을 대입하고,
otherChild에는 자신의 멤버 변수만을 등록하였다.


아래 그림에서 볼수 있듯이, m_child2에는 부모 클래스의 멤버 변수에도 쓰레기 값이 아니라 내가 대입한 값들이 정상적으로 들어가 있다.

반면에 m_om 변수에는 부모 클래스의 멤버 변수에는 쓰레기 값이 들어가게 되는 것이다.








음. 글을 쓰다가 캡쳐해논 이미지를 보다 보니 이상해서
다시 프로그램을 열어 확인해 봤다.

child2 m_child2;
otherChild m_om;

이나

otherChild m_om;
child2 m_child2;

나 높은 메모리 주소를 차지하는 것은 m_child2 변수가 항상 높은 메모리 주소를 차지한다.


이건 내가 한 소소를 수정해서 빌드해서 그런건지,, 왜 그러는지는 .... ?

아무튼 우선 상속받은 객체의 메모리 배치는 부모 클래스의 멤버 변수가 먼저 있고, 그 다음 자식 클래스의 멤버 변수들이 존재한다는 것이다.

이런 메모리 구조는 하위 호환을 보장하기 위한 것이란다. 예를 들어, 어떤 함수가 상속받은 객체에 대한 포인터를 전달 받았는데 그 함수는 베이스 클래스밖에 모른다면 단순히 전달 받은 클래스를 무시할 수 있다. 반대로 그 함수가 전달받은 클래스의 특정 타입을 알고 있다면 해당 클래스에 도달하기 위해서 베이스 클래스를 건너 뛸 수 있다.

그나저나, 바꾼 스킨의 인용 구문... 너무 보기 흉하군....

상속받은 클래스에서의 데이터 멤버에 대한 내용은 다음 책의 부록 부분에 있다. 몇 번 읽어야 이해가 되겠다..
리버싱: 리버스 엔지니어링 비밀을 파헤치다
카테고리 컴퓨터/IT
지은이 엘다드 에일람 (에이콘출판, 2009년)
상세보기



저작자 표시
신고
블로그 이미지

Moonistar moonistar



  • Function Calling Convention

1. __cdecl

  • 인자 파싱 : Right -> Left
  • 스택 관리 : Caller, 가변 인자 허용
  • Name Mangling : 함수 이름 앞에 _추가
    ex)
    _Foo
  • C와 C++ 함수의 기본 호출 규약
  • 기본 호출 규약이므로 /Gz(stdcall) 또는 /Gr(fastcall) 옵션이 켜졌을 때, 필요한 변수나 함수 이름 앞에 __cdecl을 놓으면 된다.
    /Gd 옵션은 강제로 _cdecl 규약으로 호출한다.

2. __stdcall

  • 인자 파싱 : Right -> Left
  • 스택 관리 : Calle
  • Name Mangling : 함수 이름 앞에 _추가, 함수 이름 뒤에 @추가 되고 @뒤에 다시 매개변수의 전체바이트에 해당하는 10진수가 추가된다.
    ex) _
    Foo@12
  • 거의 모든 시스템 함수에서 사용되는 호출 규칙이다.( WinAPI )
  • /Gz 옵션은 C++멤버 함수와 __cdecl 또는 __fastcall이 표시된 함수를 제외한 모든 함수에 __stdcall 호출 규칙을 지정한다. 모든 __stdcall함수는 프로토타입을 가져야 한다. 가변 인수를 취하는 함수는 __cdecl로 표시해야 한다.

3. __fastcall

  • 인자 파싱 : 처음 2개의 DWORD 또는 더 작은 인자들은 ecx와 edx에 전달, 나머지 인자들은 Right-> Left
  • 스택 관리 : Callee.
  • Name Mangling : 함수 이름 앞과 끝에 @가 추가되고 @뒤에 매개변수의 전체바이트에 해당하는 10진수가 추가된다.
    ex)
    @Foo@12
  • /Gr 옵션은 선언된 함수가 충돌하지 않고 이름이 main이 아니라면, 모듈 내 각 함수를 fastcall로 컴파일 한다.

4. thiscall

  • 인자 파싱 : Right -> Left, this 매개 변수가 ecx레지스터에 전달.
  • 스택 관리 : Caller.
  • Name Mangling : 없음.
  • 가변인자를 허용하지 않는 C++멤버함수의 기본 호출 규약으로 스택 끝에 this포인터를 넣으며 컴파일시 컴파일러에 의해 가변인자 함수는 __cdecl로 변경된다. thiscall은 키워드가 아니므로 thiscall 호출 규약은 명시적으로 사용할 수 없다. 모든 매개 변수들은 스택상에 놓여진다.

5.naked

  • 인자 파싱 : Right -> Left
  • 스택 관리 : Caller
  • Name Mangling : 없음
  • stack frame이 생략.
  • 컴파일러가 기본적으로 만들어주는 Prolog Epilog를 변경할 사용된다. naekd 사용하게 되면 아래와 같은 Prolog Epilog 컴파일러가 생성하지 않는다. 사용자가 stack frame 할당하여 사용해야 된다. 이는 CPU와의 이식성이 없기때문에 일반 응용프로그램에서는 거의 사용되지 않는다. 주로 디바이스 드라이버를 만들 때 사용한다.
저작자 표시
신고
블로그 이미지

Moonistar moonistar

예외(Exception) : 기대하지 않는 사건

Neo 가 짠 코드에서는 Exception 이 발생하지 않는다. 왜냐, 그는 The One 이기 때문이다. 

하지만, 내가 짠 코드에는 예외 투성이다. 왜냐, 난 평민이기 때문이다. ㅋ

서버 프로그램을 수정하여 올렸는데, 젠장할, 내가 테스트 할때는 문제가 없다가 다른 사람이 테스트하니 시스템이 뻗어 버린다.

디버거로 돌려 보니, 한 두군에서 Access Violation 부터 가지가지 문제가 발생하여, 땜방 땜빵,,,,,

예전에 Structured Exception Handling을 읽어보긴 했는데, 실제 Null Pointer reference로 인한 문제에서 허우적 거리니, 

기초 실력이 얼마나 중요한지 다시 깨닫고, C++ 개발자면서 기초가 되는 내용들은 공부안하고, 서브가 되는 것들만 공부하지 않았나 싶다.

여기서 나오는 내용은 제프리 리처의 Windows VIA C/C++ 책을 보면서 공부한 내용을 다시 정리하는 것이다.

기본적인 예외 처리에 대한 문법은 다음과 같다.


일반 C++ try-catch 구문과 같은 문법이다. 하지만, C++ 예외 처리기와 SEH는 다른 것이다. 비주얼 스튜디오에서 사용하는 Visual C++ 예외 처리기 또한 C++ 예외 처리를 지원하고 있으며, 내부적으로는 컴파일러와 윈도우가 지원하는 SEH를 이용하여 구현되어 있다. SEH의 동작 방식과 처리 방식에 따라 C++ 예외 처리기 및 MFC 예외 처리를 구현했다는 것이다. SEH 가 부모가 되고, C++ 예외 처리기는 자식이 되는 것이다.



다음과 같은 함수가 실행된다고 했을때, 출력 창에 출력되는 내용은 다음과 같다.



 보호되고 있는 try 내의 start try 가 출력이 되는데, 그 다음 열의 dwTemp = 5 / dwTemp 열에서 0으로 나누는 에러가 발생하여 Exception이 발생하게 되었다. 따라서, 바로 다음 구문으로 end try가 출력되는 것이 아니라, __except 구문으로 빠져 나가게 된다. __except 구문의 예외 필터는
EXCEPTION_EXECUTE_HANDLER 이다. 예외 필터가 EXCEPTION_EXECUTE_HANDLER 일 경우 코드는 글로벌 언와인드를 하게 된다. 글로벌 언와인드를 하고 나서 함수의 끝에 있는 End of func 를 출력하게 된다.

예외 필터는 다음과 같이 3가지가 있다.
EXCEPTION_EXECUTE_HANDLER
EXCEPTION_CONTINUE_SEARCH
EXCEPTION_CONTINUE_EXECUTION

예외 필터를 각각 바꾸어서 어떻게 다르게 처리되는지 알아보자. 우선 EXCEPTION_CONTINUE_SEARCH 로 변경하서 실행하게 되면 다음과 같이
출력된다.



마찬가지로 0 으로 나누는 예외가 발생하였는데 예외 필터가 EXCEPTION_CONTINUE_SEARCH 이기 때문에, 다음 구문으로 넘어가지 않고 그 상위 try 구문을 찾아 0으로 나누는 예외가 발생할 경우 어떻게 처리해야되는지 정의 되어 있는지를 찾게된다. 이름에서 알 수 있듯이 해당 예외를 처리할 try 블록을 계속 찾는 다는 것이다.

아래는 EXCEPTION_CONTINUE_EXECUTE 이다.



EXCEPTION_CONTINUE_EXECUTE의 경우 계속 0으로 나오는 예외가 발생했다고 알려주는 메시지만 출력하는 무한 루프에 빠지게된다.
예외가 발생해도 계속 실행하라.는 구문으로 dwTemp = 5 / dwTemp를 계속 실행하기 때문에, 예외 문구가 게속 출력되는 것이다.

아래 그림은 전체적으로 시스템에서 예외가 발생하였을 경우 처리되는 순서이다.







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

제프리 리처의 WINDOWS VIA C/C++
카테고리 컴퓨터/IT
지은이 제프리 리처 (한빛미디어, 2008년)
상세보기




저작자 표시
신고
블로그 이미지

Moonistar moonistar

JVM

[04] programming 2010.02.24 17:43

http://www.artima.com/insidejvm/ed2/jvmP.html


http://www.yourkit.com/docs/kb/sizes.jsp


http://www.informatik.uni-trier.de/~ley/db/conf/jvm/jvm2002.html


http://www.javaworld.com/javaworld/jw-06-1996/jw-06-vm.html


http://publib.boulder.ibm.com/infocenter/javasdk/v1r4m2/index.jsp?topic=/com.ibm.java.doc.diagnostics.142j9/html/id1294.html

저작자 표시
신고
블로그 이미지

Moonistar moonistar

Dump 파일

[04] programming 2010.02.11 13:38

http://support.microsoft.com/default.aspx?scid=kb;ko;315263

http://support.microsoft.com/default.aspx?scid=kb;ko;315271

http://support.microsoft.com/default.aspx?scid=kb;ko;241215

http://www.codeproject.com/KB/debug/windbg_part1.aspx



저작자 표시
신고
블로그 이미지

Moonistar moonistar

Tag dump, userdump
1차 구글 인터뷰 문제들
1) Stack을 구현하라
--> dynamic array나 linked list 모두로 구현할 수 있음
2) Stack을 이용하여 Queue를 구현하라. 시간은 O(1) 이어야 한다.
--> 두 개의 스택을 사용하면 queue를 구현할 수 있음
3) 숫자를 포함하고 있는 배열에서 두 개의 숫자를 뽑아서 X라는 숫자가 나올 수 있는 숫자 두개를 찾아라.
--> 정렬해서 양 끝부터 하나씩 가운데로 이동하면서 비교
4) struct와 class의 차이에 대해서 말하라
--> class와 struct는 모두다 동일하나, 기본으로 private인지 public인지만 다르다. C++에서는 하위 호환성을 위해서 struct 지원
5) copy constructor와 생성자와의 차이점에 대해서 말하라
--> 객체를 생성하고 초기화하기 위한 것과 기존의 다른 객체로부터 데이터를 복사하기 위해서 만든것의 차이.

2차 인터뷰 질문들
1) 정렬된 두 배열 a와 b(크기는 각각 N과 M)가 있다. 두 배열의 교집합 c를 만들어라. a는 새로 들어오는 b 데이터의 합집합으로 계속해서 크기가 증가한다. b는 새로운 입력값으로 매번 배열의 크기와 값이 달라진다.(내 생각에 검색 문제인것 같음).
--> 일반적인 순차적인 검색과 크기가 큰 배열을 binary tree로 생각함으로써 log(n) 시간에 해결하도록 하여 문제를 해결하였음. 인터뷰어가 놀라는 상황
--> 문제의 크기에 따라서 서로 다른 알고리즘을 사용하면 됨
if ( (N+M) > N*log(M) )
  순차 비교
else
  바이너리 비교
2) int 형의 숫자가 있을 때 그 숫자의 순서를 바꾸는 함수를 작성하라.
예) 53721 --> 12735
--> 원래의 숫자를 끝에서부터 가져온 다음, 매번 반복할 때마다 10을 곱해서 더하면 됨
--> 간단하게 문제 해결
3) 스택이 메모리 상에서 위에서 아래로 자라는지, 아니면 그 반대인지 확인할 수 있는 방법은?
--> 배열을 선언하고 확인하든지,
--> 두 변수를 선언하고 확인하든지,
--> 변수 하나를 선언하고 ESP 값을 확인하든지,
--> 쉬운 문제 였음

3, 4, 5차 인터뷰 질문들
1) Regular Expression을 이용하여 숫자만 찾아내도록 해라
2) 웹 브라우저에서 특정 주소를 입력하여 HTML을 받아오는 모든 과정을 설명하라.
- 쿠키는 어떻게 작동하는가?
3) EMail 클라이언트를 만든다고 했을 때, Spam 필터링을 위한 컴포넌트를 구현하라.
4) 어떤 돈을 지불해야 하는 총 경우의 수를 구하는 알고리즘을 작성하라.
5) Computer Science 책 중에서 가장 좋아하는 책이 무엇인가? 제목과 저자 이름을 말하고 그 책이 좋다고 생각하는 이유를 말해보라.
6) 스크립트 언어를 사용할 줄 아는가?
7) 달걀 2개가 있다. 달걀을 떨어뜨렸을 때 달걀이 깨지는 가장 낮은 층을 찾아내는 가장 빠른 방법은 무엇인가?
8) anagram을 찾는 알고리즘을 작성하시오

관련 링크들
http://asimjalis.blogspot.com/2004/05/software-interviews.html
http://www.tekpool.com/
http://www.winapi.co.kr/clec/cpp2/cpp2.htm
http://devendersarangdevot.blogspot.com/2005/11/puzzleelelee.html

ALGORITHM 2 Select (k, L): Select k largest elements of L.
http://comjnl.oxfordjournals.org/cgi/content-nw/full/49/3/358/TBL2

추가로 살펴볼 사이트들
http://otherthingsnow.blogspot.com/2005/10/google-interview-questions-they-are.html
http://discuss.joelonsoftware.com/default.asp?jobs.10.119676.5
http://www.drizzle.com/~jpaint/google.html
http://scobleizer.com/2006/11/01/first-google-interview-google-reader-team/
http://alien.dowling.edu/~rohit/wiki/index.php/Google_Interview_Questions
http://paulm.com/inchoate/2006/03/google_interview_questions.html
http://www.shmula.com/31/my-interview-job-offer-from-google
http://www.ocf.berkeley.edu/~wwu/cgi-bin/yabb/YaBB.cgi?board=riddles_cs;action=display;num=1159428586
http://www.ninjapirate.com/google-interview.html
http://www.hawaiistreets.com/seoblog/?itemid=779
http://meems.imeem.com/mcKJhxdl,google_interview_questions
http://reddit.com/search?q=google+interview+questions&s=controversy
http://work.tinou.com/blog/2006/02/google_intervie.html
http://alien.dowling.edu/~rohit/wiki/index.php/Talk:Google_Interview_Questions
http://www.allinterview.com/company/Google/interview-questions.html
http://www.damox.com/2006/01/google-interview-questions-they-are.html
http://improvedexperience.typepad.com/want_better_hires_recruit/2006/06/word_of_mouth_a.html
http://www.simpy.com/user/imsaar/tag/interview/p=0,50
http://memo.isloco.com/624
http://kldp.org/node/58570
http://jbpark.tistory.com/tag/%EC%9D%B8%ED%84%B0%EB%B7%B0

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

here is some stuff from Mr. MS....

i have tried some….

Left others for later…. If you will be able to find the hyperlinks in this, you will find how dazzling the place is !


1) Roman Numerals

Write a C function, int rtoa(char* s), that converts roman numerals such as XIX to integers.

2) Permute Array

Write a C function that permutes an array, int* a, in place without allocating any more memory, so that every permutation is equally likely. Prove that every permutation is equally likely.

3) Maximize Sub-Array Sum

Suppose you have an array of N random integers (can be positive, negative or zero), int a[N]. Find the indices i, j <>

4) Implement Queue Using Stack

Suppose you are given a stack implementation with the normal stack operations (create, delete, push, pop). How would you implement a queue using these stacks? All the queue operations (create, delete, enqueue, dequeue) should take O(1) time.

5) Find Smallest Without Sorting

Given N integers find the 10 smallest in O(N) time.

Suppose you have N points in 2D coordinates (each point is made up of x and y, which are both floats). Find the 10 points closest to the origin. The algorithm should take O(n) time. O(n*log n) algorithms are not acceptable, but you may want to try that first

as a way to warm up to the problem.

6) Print Tree by Levels

Suppose you have a binary tree containing N nodes. Each node has a Name, a LeftChild and a RightChild. Describe an algorithm to print the tree by levels. Print the root first, then all the children of the root, then all the grandchildren of the root. This is not as easy as it sounds. Your algorithm must take O(N) time.

7) Implement an algorithm to sort a linked list.

8) Reverse a string

9) Given a linked list which is sorted, how will you insert in sorted way.

10) Write a routine that prints out a 2-D array in spiral order.

11) Write a routine to draw a circle given a center co-ordiante (x,y) and a radius (r) without making use of any floating point computations.

12) Write efficient code for extracting unique elements from a sorted list of array.

13) Print an integer using only putchar. Try doing it without using extra storage.

14) Write a funtion that finds repeating characters in a string.

15) Write a routine to reverse a series of numbers without using an array.

16) Write a function to find the nth item from the end of a linked list in a single pass.

17) Find the first common ancestor of two given nodes in a tree, find complexity, if it's a binary tree or if it is not.

18) Tell fastest method to multiply with 7.

19) Binary tree traversal without recursion.

20) Find if two given strings are anagrams or not, with least complexity (i.e. nlogn).

21) You are given a matrix and you have to print it in a spiral way e.g.

1 2 3 4

5 6 7 8

9 10 11 12

Now, the output should be 1 2 3 4 8 12 11 10 9 5 6 7 and, similarly generalize for large matrices.

22) Suppose you are given a sentence then you have to print it but the words should be reversed.

e.g.

This is a very good college.

---------------------------------------------------------------------------------------------
참고해서 공부....
지금 대답하라면 얼마나... 가능???? ,,,, ㅡㅡ;

저작자 표시
신고
블로그 이미지

Moonistar moonistar