2007年5月31日 星期四

伊凡塞斯 Evanescence-Bring Me To Life(mv)



http://blog.xuite.net/franky7120/music/7614169
伊凡塞斯(樂團)-讓我重生
夜魔俠/Dare Devil電影主題曲
主唱 :Amy Lee

How can you see into my eyes like open doors
Leading you down into my core where I've become so numb
Without a soul, my spirit sleeping somewhere cold
Until you find it there and lead it back home

(Wake me up) Wake me up inside
(I can't wake up) Wake me up inside
(Save me) Call my name and save me from the dark
(Wake me up) Bid my blood to run
(I can't wake up) Before I come undone
(Save me) Save me from the nothing I've become

Now that I know what I'm without
You can't just leave me
Breathe into me and make me real
Bring me to life

(Wake me up) Wake me up inside
(I can't wake up) Wake me up inside
(Save me) Call my name and save me from the dark
(Wake me up) Bid my blood to run
(I can't wake up) Before I come undone
(Save me) Save me from the nothing I've become

Bring me to life
(I've been living a lie, there's nothing inside)
Bring me to life

Frozen inside without your touch, without your love, drling
Only you are the life among the dead

(All this time I can't believe I couldn't see)
(Kept in the dark but you were there in front of me)
I've been sleeping a thousand years it seems
Got to open my eyes to everything

(Without a thought, without a voice, without a soul)
(Don't let me die here)
(There must be something wrong!)
Bring me to life

(Wake me up) Wake me up inside
(I can't wake up) Wake me up inside
(Save me) Call my name and save me from the dark
(Wake me up) Bid my blood to run
(I can't wake up) Before I come undone
(Save me) Save me from the nothing I've become

Bring me to life
(I've been living a lie, there's nothing inside)
Bring me to life

你是如何像開門般地看穿了我的眼睛
引導降臨至我那已變得麻木不仁的內心深處
失去了靈魂,我的精神沉睡在寒冷的某處
直到被你尋獲並引領它歸來

[喚醒我] 自內心深處喚醒我
[我無法醒來] 自內心深處喚醒我
[救救我] 呼喚我,釋放那陷在黑暗中的我
[喚醒我] 讓我的血液再次汌流
[我無法醒來] 在我崩潰之前
[救救我] 拯救那即將幻滅的我

現在我知道我缺少了什麼
你不能就這樣丟下我
請賦予我生氣讓我回歸真實
請賜予我生命

[喚醒我] 自內心深處喚醒我
[我無法醒來] 自內心深處喚醒我
[救救我] 呼喚我,釋放那陷在黑暗中的我
[喚醒我] 讓我的血液再次汌流
[我無法醒來] 在我崩潰之前
[救救我] 拯救那即將幻滅的我

請賜予我生命
[我如謊言般虛假地活著,內心是何等的空乏]
請賜予我生命

我心冰封,除非你的輕撫、你的關愛,親愛的
這一片死寂之中唯有你才是存在

[我不敢相信,泥陷在黑暗的這些期間裡
你已經在我的面前而我竟未看見]
我彷彿已經沉睡了千年之久
現在才得以張開眼睛看到萬物

[沒有思考,沒有聲響,沒有靈魂]
[別讓我死在這裡]
[這一定有什麼不對勁]
請賜予我生命

[喚醒我] 自內心深處喚醒我
[我無法醒來] 自內心深處喚醒我
[救救我] 呼喚我,釋放那陷在黑暗中的我
[喚醒我] 讓我的血液再次汌流
[我無法醒來] 在我崩潰之前
[救救我] 拯救那即將幻滅的我

請賜予我生命
[我如謊言般虛假地活著,內心是何等的空乏]
請賜予我生命 (Translate:大楞子)

[轉]likely,unlikely巨集與GCC內建函數__builtin_expect()

來源:http://blog.csdn.net/mopyman/archive/2006/02/09/595302.aspx

最近在讀linux 2.6 内核,雖然以前已經看了很多相關的知識,<>也看了2,3遍,但讀2.6内核仍然感到很吃力。面對2.6如此龐大的内核,信心真的不是很足,而且好像也没有很好的、有幫助的論壇來一起探討,哎!現在正在邊看<<情景分析>>,邊看最新的内核,自<<情景分析>>出版以來,内核已經有了很多的變化,好難讀啊!如果這様讀下去算不算“皓首窮經”呢,不得而知了!
言歸正傳
在讀linux/kernel/fork.c的時候遇到了unlikely宏定義,一路追踪,最後找到了GCC内建函數__builtin_expect(),查閲GCC手册,發現其定義如下:
long __builtin_expect (long exp, long c) [Built-in Function]
You may use __builtin_expect to provide the compiler with branch prediction
information. In general, you should prefer to use actual profile feedback for this
(‘-fprofile-arcs’), as programmers are notoriously bad at predicting how their
programs actually perform. However, there are applications in which this data is
hard to collect.
The return value is the value of exp, which should be an integral expression. The
value of c must be a compile-time constant. The semantics of the built-in are that it
is expected that exp == c. For example:
if (__builtin_expect (x, 0))
foo ();
would indicate that we do not expect to call foo, since we expect x to be zero. Since
you are limited to integral expressions for exp, you should use constructions such as
if (__builtin_expect (ptr != NULL, 1))
error ();
when testing pointer or floating-point values.
大致是説,由于大部分程序員在分支預測方面做得很糟糕,所以GCC提供了這個内建函數來幫助程序員處理分支預測,優化程序。其第一個參數exp為一個整型表達式,這個内建函數的返回值也是這個exp,而c為一個編譯期常量,這個函數的語義是:你期望exp表達式的值等于常量c,從而GCC為你優化程序,將符合這個條件的分支放在合適的地方。
因為這個程序只提供了整型表達式,所以如果你要優化其他類型的表達式,可以采用指針的形式。

unlikely的定義如下:
#define unlikely(x) __builtin_expect(!!(x), 0)
也就是説我們期望表達式x的值為0,從而如果我們用
…….
if(unlikely(x)){
bar();
}
來測試條件的話,我們就不期望bar()函數執行,所以該宏的名字用unlikely也就是不太可能來表示。
likely宏與次類似.

説到底__builtin_expect函數就是為了優化可能性大的分支程序。

2007年5月29日 星期二

我家女兒學會倒退爬囉!

曾經有一天晚上半夜時被我女兒嚇一跳,因為她突然放聲大哭...
而我被吵醒時卻沒發現她的身影...東翻西翻才發現她居然自己鑽到床中央,
躲在綿被裏....可能是太熱了才大哭吧.

後來褓姆也證實了....寶寶學會了新技能...會爾偶一點點一點點的後退爬...哈

超級星光大道-蕭敬騰-世界唯一的你

超級星光大道-梁文音 失戀無罪

2007年4月26日 星期四

C#面試題

http://www.fandl.cn/article.asp?id=49
C#面試題

一.填空題
1.c#中的三元運算符是_____?
2.當整數a賦值給一個object物件時,整數a將會被_____?
3.類成員有_____種可訪問形式?
4.public static const int A=1;這段代碼有錯誤麼?是什麼?
5.float f=-123.567F;
int i=(int)f;
i的值現在是_____?
6.利用operator聲明且僅聲明了==,有什麼錯誤麼?
7.委託聲明的關鍵字是______?
8.用sealed修飾的類有什麼特點?
9.在Asp.net中所有的自定義用戶控制項都必須繼承自________?
10.在.Net中所有可序列化的類都被標記為_____?
11.在.Net託管代碼中我們不用擔心記憶體漏洞,這是因為有了______?
12.下面的代碼中有什麼錯誤嗎?_______
using System;
class A
{
public virtual void F(){
Console.WriteLine("A.F");
}
}
abstract class B:A
{
public abstract override void F();
}

13.當類T只聲明了私有實例構造函數時,則在T的程式文本外部,______(可以 or 不可以)從T

派生出新的類,____(可以 or 不可以)直接創建T的任何實例。
14.下面這段代碼有錯誤麼?
switch (i){
case():
CaseZero();
break;
case 1:
CaseOne();
break;
case 2:
dufault;
CaseTwo();
break;
}
15.在.Net中,類System.Web.UI.Page 可以被繼承麼?

二.簡答題
1.在c#中using和new這兩個關鍵字有什麼意義,請寫出你所知道的意義?
2.在下面的例子裏
using System;
class A
{
public A(){
PrintFields();
}
public virtual void PrintFields(){}
}
class B:A
{
int x=1;
int y;
public B(){
y=-1;
}
public override void PrintFields(){
Console.WriteLine("x={0},y={1}",x,y);
}
當使用new B()創建B的實例時,產生什麼輸出?
3.下面的例子中

using System;
class A
{
public static int X;
static A(){
X=B.Y+1;
}
}
class B
{
public static int Y=A.X+1;
static B(){}
static void Main(){
Console.WriteLine("X={0},Y={1}",A.X,B.Y);
}
}
產生的輸出結果是什麼?
4.談談類和結構的區別?
5.一個長度為10000的字串,通過隨機從a-z中抽取10000個字元組成。請用c#語言編寫主要程

序來實現。
6.對於這樣的一個枚舉類型:
enum Color:byte{
Red,
Green,
Blue,
Orange
}
試寫一段程式顯示出枚舉類型中定義的所有符號名稱以及它們對應的數值。
7.您瞭解設計模式麼?請列出您所知道的設計模式的名稱。
8.請在SQL Server中設計表來保存一個樹狀結構的組織結構圖(假設結構圖中只有名稱這一項內容

需要保存),如果我想查詢某一職位下的所有職位,用一個存儲過程來實現,你有什麼思路?
9.什麼叫做SQL注入,如何防止?請舉例說明。
10.下面這段代碼輸出什麼?為什麼?
int i=5;
int j=5;
if (Object.ReferenceEquals(i,j))
Console.WriteLine("Equal");
else
Console.WriteLine("Not Equal");

1 ?:
2 裝箱
3 3種
4 const成員都是static所以應該去掉static
5 -123
6 要同時修改Equale和GetHash() ? 重載了"==" 就必須重載 "!="
7 delegate
8 不可被繼承
9 System.Web.UI.UserControl
10 [serializable]
11 gC
12 abstract override 是不可以一起修飾
13 不可以,不可以
14 case():不行 default;
15 可以

1 Using 引入一個名子空間,或在使用了一個對像後自動調用其IDespose,New 實例化一個對

像,或修飾一個方法,表此方法完全重寫此方法,
2 X=1,Y=0
3 x=1,y=2
4 最大區別一個是引用類型,一個是值類型 默認成員訪問為public是另外一個區別

.NET & C# 基礎知識試題 (20%)
1. 在.net(C# or vb.net)中如何獲得當前表單或控制項的控制碼,特別是控制項本身的控制碼(請列舉)。
答案:this(C#) Me(vb.net).

2. 在.net(C# or vb.net)中如何用戶自定義消息,並在表單中處理這些消息。
答案:
在form中重載DefWndProc函數來處理消息:
protected override void DefWndProc ( ref System.WinForms.Message m )
{
switch(m.msg)
{
case WM_Lbutton :
 ///string與MFC中的CString的Format函數的使用方法有所不同
 string message = string.Format("收到消息!參數為:{0},{1}",m.wParam,m.lParam);
 MessageBox.Show(message);///顯示一個訊息方塊
 break;
case USER:
處理的代碼
default:
 base.DefWndProc(ref m);///調用基類函數處理非自定義消息。
 break;
}
}

3. 在.net(C# or vb.net)如何啟動另一個程式。
答案:process

4. 在.net(C# or vb.net)中如何取消一個表單的關閉。
答案:
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel=true;
}

5. 在.net(C# or vb.net)中,Appplication.Exit 還是 Form.Close有什麼不同?
答案:一個是退出整個應用程式,一個是關閉其中一個form

6. 在C#中有一個double型的變數,比如10321.5,比如122235401.21644,作為貨幣的值如何按各個不同國家的習慣來輸出。比如美國用$10,321.50和$122,235,401.22而在英國則為£10 321.50和£122 235 401.22
答案:
System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US");
//System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-GB");為英國貨幣類型
decimal y = 9999999999999999999999999999m;
string str = String.Format(MyCulture,"My amount = {0:c}",y);

7. 某一密碼僅使用K、L、M、N、O共5個字母,密碼中的單詞從左向右排列,密碼單詞必須遵循如下規則:
(1) 密碼單詞的最小長度是兩個字母,可以相同,也可以不同
(2) K不可能是單詞的第一個字母
(3) 如果L出現,則出現次數不止一次
(4) M不能使最後一個也不能是倒數第二個字母
(5) K出現,則N就一定出現
(6) O如果是最後一個字母,則L一定出現
問題一:下列哪一個字母可以放在LO中的O後面,形成一個3個字母的密碼單詞?
A) K B)L C) M D) N
答案:B

問題二:如果能得到的字母是K、L、M,那麼能夠形成的兩個字母長的密碼單詞的總數是多少?
A)1個 B)3個 C)6個 D)9個
答案:A

問題三:下列哪一個是單詞密碼?
A) KLLN B) LOML C) MLLO D)NMKO
答案:C

8. 62-63=1 等式不成立,請移動一個數字(不可以移動減號和等於號),使得等式成立,如何移動?
答案:62移動成2的6次方

C/C++語言struct深層探索

C/C++語言struct深層探索
1. struct的巨大作用
  面對一個人的大型C/C++程式時,只看其對struct的使用情況我們就可以對其編寫者的編程經驗進行評估。因為一個大型的C/C++程式,勢必要涉及一些(甚至大量)進行資料組合的結構體,這些結構體可以將原本意義屬於一個整體的資料組合在一起。從某種程度上來說,會不會用struct,怎樣用struct是區別一個開發人員是否具備豐富開發經歷的標誌。

  在網路協定、通信控制、嵌入式系統的C/C++編程中,我們經常要傳送的不是簡單的位元組流(char型陣列),而是多種資料組合起來的一個整體,其表現形式是一個結構體。

  經驗不足的開發人員往往將所有需要傳送的內容依順序保存在char型陣列中,通過指標偏移的方法傳送網路報文等資訊。這樣做編程複雜,易出錯,而且一旦控制方式及通信協定有所變化,程式就要進行非常細緻的修改。

  一個有經驗的開發者則靈活運用結構體,舉一個例子,假設網路或控制協定中需要傳送三種報文,其格式分別為packetA、packetB、packetC:

struct structA
{
int a;
char b;
};

struct structB
{
char a;
short b;
};

struct structC
{
int a;
char b;
float c;
}
  優秀的程式設計者這樣設計傳送的報文:

struct CommuPacket
{
int iPacketType;  //報文類型標誌
union      //每次傳送的是三種報文中的一種,使用union
{
struct structA packetA;
struct structB packetB;
struct structC packetC;
}
};
  在進行報文傳送時,直接傳送struct CommuPacket一個整體。

  假設發送函數的原形如下:

// pSendData:發送位元組流的首位址,iLen:要發送的長度
Send(char * pSendData, unsigned int iLen);
發送方可以直接進行如下調用發送struct CommuPacket的一個實例sendCommuPacket:
Send( (char *)&sendCommuPacket , sizeof(CommuPacket) );
假設接收函數的原形如下:
// pRecvData:發送位元組流的首位址,iLen:要接收的長度
//返回值:實際接收到的位元組數
unsigned int Recv(char * pRecvData, unsigned int iLen);
  接收方可以直接進行如下調用將接收到的資料保存在struct CommuPacket的一個實例recvCommuPacket中:

Recv( (char *)&recvCommuPacket , sizeof(CommuPacket) );
  接著判斷報文類型進行相應處理:

switch(recvCommuPacket. iPacketType)
{
case PACKET_A:
… //A類報文處理
break;
case PACKET_B:
…  //B類報文處理
break;
case PACKET_C:
… //C類報文處理
break;
}
  以上程式中最值得注意的是

Send( (char *)&sendCommuPacket , sizeof(CommuPacket) );
Recv( (char *)&recvCommuPacket , sizeof(CommuPacket) );
  中的強制類型轉換:(char *)&sendCommuPacket、(char *)&recvCommuPacket,先取地址,再轉化為char型指標,這樣就可以直接利用處理位元組流的函數。

  利用這種強制類型轉化,我們還可以方便程式的編寫,例如要對sendCommuPacket所處記憶體初始化為0,可以這樣調用標準庫函數memset():

memset((char *)&sendCommuPacket,0, sizeof(CommuPacket));

2. struct的成員對齊
  Intel、微軟等公司曾經出過一道類似的面試題:

1. #include

2. #pragma pack(8)
3. struct example1
4. {
5. short a;
6. long b;
7. };

8. struct example2
9. {
10. char c;
11. example1 struct1;
12. short e;
13. };
14. #pragma pack()

15. int main(int argc, char* argv[])
16. {
17. example2 struct2;

18. cout << sizeof(example1) << endl;
19. cout << sizeof(example2) << endl;
20. cout << (unsigned int)(&struct2.struct1) - (unsigned int)(&struct2)
<< endl;

21. return 0;
22. }
  問程式的輸入結果是什麼?

  答案是:

8
16
4

  不明白?還是不明白?下麵一一道來:

2.1 自然對界

  struct是一種複合資料類型,其構成元素既可以是基本資料類型(如int、long、float等)的變數,也可以是一些複合資料類型(如array、struct、union等)的資料單元。對於結構體,編譯器會自動進行成員變數的對齊,以提高運算效率。缺省情況下,編譯器為結構體的每個成員按其自然對界(natural alignment)條件分配空間。各個成員按照它們被聲明的順序在記憶體中順序存儲,第一個成員的位址和整個結構的位址相同。

  自然對界(natural alignment)即默認對齊方式,是指按結構體的成員中size最大的成員對齊。

  例如:

struct naturalalign
{
char a;
short b;
char c;
};
  在上述結構體中,size最大的是short,其長度為2位元組,因而結構體中的char成員a、c都以2為單位對齊,sizeof(naturalalign)的結果等於6;

  如果改為:

struct naturalalign
{
char a;
int b;
char c;
};
  其結果顯然為12。

2.2指定對界

  一般地,可以通過下面的方法來改變缺省的對界條件:

  • 使用虛擬指令#pragma pack (n),編譯器將按照n個位元組對齊;
  • 使用虛擬指令#pragma pack (),取消自定義位元組對齊方式。

  注意:如果#pragma pack (n)中指定的n大於結構體中最大成員的size,則其不起作用,結構體仍然按照size最大的成員進行對界。

  例如:

#pragma pack (n)
struct naturalalign
{
char a;
int b;
char c;
};
#pragma pack ()
  當n為4、8、16時,其對齊方式均一樣,sizeof(naturalalign)的結果都等於12。而當n為2時,其發揮了作用,使得sizeof(naturalalign)的結果為8。

  在VC++ 6.0編譯器中,我們可以指定其對界方式,其操作方式為依次選擇projetct > setting > C/C++功能表,在struct member alignment中指定你要的對界方式。

  另外,通過__attribute((aligned (n)))也可以讓所作用的結構體成員對齊在n位元組邊界上,但是它較少被使用,因而不作詳細講解。

2.3 面試題的解答

  至此,我們可以對Intel、微軟的面試題進行全面的解答。

  程式中第2行#pragma pack (8)雖然指定了對界為8,但是由於struct example1中的成員最大size為4(long變數size為4),故struct example1仍然按4位元組對界,struct example1的size為8,即第18行的輸出結果;

  struct example2中包含了struct example1,其本身包含的簡單資料成員的最大size為2(short變數e),但是因為其包含了struct example1,而struct example1中的最大成員size為4,struct example2也應以4對界,#pragma pack (8)中指定的對界對struct example2也不起作用,故19行的輸出結果為16;

  由於struct example2中的成員以4為單位對界,故其char變數c後應補充3個空,其後才是成員struct1的記憶體空間,20行的輸出結果為4。

3. C和C++間struct的深層區別
  在C++語言中struct具有了“類” 的功能,其與關鍵字class的區別在於struct中成員變數和函數的默認訪問許可權為public,而class的為private。

  例如,定義struct類和class類:

struct structA
{
char a;
…
}
class classB
{
char a;
…
}
  則:

struct A a;
a.a = 'a'; //訪問public成員,合法
classB b;
b.a = 'a'; //訪問private成員,不合法
  許多文獻寫到這裏就認為已經給出了C++中struct和class的全部區別,實則不然,另外一點需要注意的是:

  C++中的struct保持了對C中struct的全面相容(這符合C++的初衷——“a better c”),因而,下面的操作是合法的:

//定義struct
struct structA
{
char a;
char b;
int c;
};
structA a = {'a' , 'a' ,1}; // 定義時直接賦初值
  即struct可以在定義的時候直接以{ }對其成員變數賦初值,而class則不能,在經典書目《thinking C++ 2nd edition》中作者對此點進行了強調。

4. struct編程注意事項
  看看下面的程式:

1. #include

2. struct structA
3. {
4. int iMember;
5. char *cMember;
6. };

7. int main(int argc, char* argv[])
8. {
9. structA instant1,instant2;
10.char c = 'a';

11. instant1.iMember = 1;
12. instant1.cMember = &c;

13.instant2 = instant1;

14.cout << *(instant1.cMember) << endl;

15.*(instant2.cMember) = 'b';

16. cout << *(instant1.cMember) << endl;

17. return 0;
}
  14行的輸出結果是:a
  16行的輸出結果是:b

  Why?我們在15行對instant2的修改改變了instant1中成員的值!

  原因在於13行的instant2 = instant1賦值語句採用的是變數逐個拷貝,這使得instant1和instant2中的cMember指向了同一片記憶體,因而對instant2的修改也是對instant1的修改。

  在C語言中,當結構體中存在指標型成員時,一定要注意在採用賦值語句時是否將2個實例中的指標型成員指向了同一片記憶體。

  在C++語言中,當結構體中存在指標型成員時,我們需要重寫struct的拷貝構造函數並進行“=”操作符重載。

轉載自CSDN

一個小故事讓我們明白資金流通的意義

“又是炎熱小鎮慵懶的一天。太陽高掛,街道無人,每個人都債台高築,靠信用度日。這時,從外地來了一位有錢的旅客,他進了一家旅館,拿出一張1000 元鈔票放在櫃檯,說想先看看房間,挑一間合適的過夜,就在此人上樓的時候---- 店主抓了這張1000 元鈔,跑到隔壁屠戶那裡支付了他欠的肉錢...