人都是有惰性的,
該篇文章轉自于中國心理網
一般學習和工作生活中,我們都可能有這樣的經驗,就是
當說想要作某件事情的時候,但過了好久發現還是沒有作;或者覺得有力氣使不出來;或者總覺得生活是灰色和抑郁的等等。
這類情況反應在生活中,就是生活好象總是被一種惰性纏繞,知道那不好,但又不知道從何處入手來改變。
從心理學操作性反應的原則為基礎,對于人類的行為方式進行觀察后,心理學家提出這樣一種改進方式,以糾正惰性生活方式,并由這種惰性生活方式的結束而帶來整個人生的良性改變。
你如果有興趣
堅持嘗試一周以下方式,你會發現你整個人會很不同了,如果能繼續堅持,那惰性生活方式就會永遠不敢再接近你,而你將在人生獲得你愿意的成就
先可以用一天到兩天時間給自己作一個行為記錄,把你通常每天要作的事情記下來,這包括記錄你所有的生活活動。這樣你即使粗粗的記,大約也會有幾十件。
然后
把其中一些如果吃飯等必須完成的事情剔除。
在此之后,你
把剩余下來的幾十件事情按照你的興趣排列,把你最不喜歡作的事情放在第一位,把你最喜歡作的事情放在最后一位。
最后,你就可以在以后一周內進行行動了,每天一早起來,
從你最不喜歡的事情開始作起,并且堅持作完第一件事情,再作第二件事情……這么一直作到最后一件你喜歡的事情。
在整個過程中,你開始會稍覺得困難,但你只要花很少的力氣稍稍堅持,你就能順利進行下去。
千萬在中途不要跳躍那個先作不喜歡的再作喜歡的計劃。
這種方式是一種強化作用的方式,先一件困難的事情完成后,再作稍困難的事情,那是一種對于前面行動的強化,然后繼續,強化的效果會越來越大,一直大到你覺得你有力量來完成任何事情。
對于改變惰性生活方式,這種方式具有很大的效果。而對于經常抑郁心情的人,這種生活方式將直接改變表現為抑郁的行為,而很容易的使抑郁的情緒結束,而只要堅持,抑郁的生活方式就會永遠結束。
通過結束惰性或抑郁的行為,而結束惰性或抑郁的心理。
如果你試試,你將發現這是多么有趣的事情。
posted @
2011-09-26 23:48 mengkai 閱讀(242) |
評論 (0) |
編輯 收藏
今天也是也是一個比較特殊的日子吧,接到了第一次電話面試通知,無奈這幾天感冒狀態是相當不好,特別是今天頭暈腦脹,口腔潰瘍,上火氣泡,外加咳嗽難忍。那真是難受。在吃飯的時候接到了騰訊深圳那邊的電視面試通知,問我什么時候方便,方便的話要電話面試我,我告知8點左右有時間,如果今天不面試就明天這個時間,我就回到宿舍開機等著,然后等到8點心情有點激動,畢竟是第一次電話面試嘛,強忍難受的感冒,在電腦旁邊等,但是等到九點10分也沒有接到電話,于是上床睡覺,剛睡了不到10分鐘電話響起,開始面試,
面試的問題都是很基礎的,首先自我介紹,這個部分做的不太好,介紹的比較少,那邊比較吃驚說,“啊就這些,那你介紹一些大學的生活”,之后就是技術方面的,
(1)對C/C++語言熟悉嗎?平時開發都用它嗎?
(2)熟悉STL編程嘛?用的多嗎?然后你介紹一下容器的定義,說出幾種容器,如何讓你設計容器,棧是如何實現的
(3)區別一下STL中vector和list之間的區別,還問了其他一些適配器。
(4)map的原理,熟悉那些STL中的幾種排序,你對sort,qsort內部是如何實現的研究過嘛?
(5)對于排序中快速排序和堆排序之間區別,各自的特點。
(6)然后對于多線程的開發問了一些
(7)關于函數調用約定,幾種,各自的特點,應用的地方。
(8)關于網絡編程的內容,寫過網絡編程方面的項目嗎?介紹一下
(9)對于操作系統方面的,臨界區,死鎖,等等
(10)c++為何沒有虛構造函數,多態如何實現的,關于虛函數的使用
(11)問了關于內存方面的知識,堆,棧內存,常量,全局變量,局部變量,內存結構的有個研究嘛?深入了解嗎?
(12)對于atoi,如果讓你實現該函數的功能,你如何實現,應該注意些什么問題。
(13)你本科是網絡工程,問一些網絡方面的知識,
(14)舉個例子說明你學習能力比較強,
睡了一覺起來寫了一下,感覺面試的一般吧,過幾天可能會有其他面試或者通知實習。
最后總結一些,基礎的知識需要經常回顧,電話面試需要注意的細節,要善于總結,從這次的電話面試中吸取教訓,為以后更多的電話面試做好準備,
轉載(某個博客的):
4 每天睡覺前堅持做三件事
1. 今天都干了些什么,那些與課題實驗有關,用科學而簡練的語言描述出來,記錄下來,自認為失敗的實驗也要認真對待,并找出原因。
2. 想好并安排好明天要做的實驗,千萬不要到了明天再準備。
3. 前兩件事做不好,不要睡覺。
就這樣,堅持做,一定會進步很快的。
posted @
2011-09-26 23:46 mengkai 閱讀(1870) |
評論 (5) |
編輯 收藏
消息處理過程:
1消息定義:
消息簡單的說就是指通過輸入設備向程序發出指令要執行某個操作。具體的某個操作就是已經寫好的代碼,成為消息處理函數。
為何要引進消息映射。一個程序往往擁有多個窗體,主窗口就算一個,其他菜單工具欄等等子窗口,那需要寫多少個switchcase語句,所以MFC采用了消息映射機制,利用一個數組,將窗口消息和相對應的消息處理函數進行映射,可以理解成這個是一個表,該機制叫消息映射
AFX_MSGMAP可以得到基類的消息映射入口地址和得到本身的消息映射入口地址。
2消息種類:
(1)windows消息,主要包含WM_開頭的消息,WM_COMMAND消息除外,由窗口和視圖處理,此類消息帶有確定如何處理消息的參數。
(2)控件通知,此類消息包含從控件和其他子窗口發送到其父窗口的WM_COMMAND通知消息,
(3)命令消息,包含了用戶界面對象發出的WM_COMMAND通知消息,
其中windows消息和控件通知消息由窗口來處理,CFrameWnd,CMDIFrameWnd,CMDIChildWnd,CView,CDialog
命令消息更廣的是對象處理
形式如下:ON_COMMAND(id,memberFxn);
對于通知消息,例如樹形控件是ON_CONTROL(EN_CHANGE,id,memberFxn);
3消息處理過程
MFC消息處理過程如下:
(1)_AfxCbtFilterHook()截獲消息(這個是一個鉤子函數);
(2)_AfxCbtFilterHook()把窗口過程設定為AfxWndProc();
(3)函數AfxWndProc()接收windows操作系統的發送的消息。
(4)函數AfxWndProc()調用函數AfxCallWndProc()進行消息處理;
(5)函數AfxCallWndProc()調用CWnd類的方法WindowProc進行消息處理。
4添加用戶自定義消息處理函數
第一步,定義消息,#define WM_MYMESSAGE (WM_USER+100)
第二步,實現消息處理函數,該函數使用WPRAM和LPARAM參數,并返回LPRESULT
LPRESULT CMainFrame::OnMyMessage(WPARAM wParam,LPARAM lParam)
{
return 0;
}
第三步:在類頭文件中的FX_MSG塊中說明消息處理函數
形式如下
afx_msg LRESULT OnMyMessage(WPARAM wParam,LPARAM lParam)
第四步。在用戶類的消息塊中,使用ON_MESSAGE宏指令將消息映射到消息處理函數中。
ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
可以看出來,用戶定義的消息和通過classwizard添加的消息一樣。
5windows消息循環機制
windows消息函數
從消息隊列中取出消息
在MSDN中PeekMessage的定義
BOOL PeekMessage
The PeekMessage function checks a thread message queue for a message and places the message (if any) in the specified structure.
BOOL PeekMessage(
LPMSG lpMsg, // pointer to structure for message
HWND hWnd, // handle to window
UINT wMsgFilterMin, // first message
UINT wMsgFilterMax, // last message
UINT wRemoveMsg // removal flags
);
從線程消息隊列中取出一個消息
GetMessage
The GetMessage function retrieves a message from the calling thread's message queue and places it in the specified structure. This function can retrieve both messages associated with a specified window and thread messages posted via the PostThreadMessage function. The function retrieves messages that lie within a specified range of message values. GetMessage does not retrieve messages for windows that belong to other threads or applications.
BOOL GetMessage(
LPMSG lpMsg, // address of structure with message
HWND hWnd, // handle of window
UINT wMsgFilterMin, // first message
UINT wMsgFilterMax // last message
);
如果把2,3,4設置為null或者0,表示接受本程序的所有消息
還要注意上面兩者的區別,
都是比較基礎的東西,
posted @
2011-09-25 10:43 mengkai 閱讀(301) |
評論 (0) |
編輯 收藏
窮舉(枚舉)算法,又稱是暴力破解法,也是我接觸最多的理解比較全面深刻的一個算法。
窮舉算法就是一一列出所有可能的元素,用題目已知的條件驗證每個結果,看是否滿足。
枚舉法的本質就是從所有候選答案中去搜索正確的解,使用該算法需要滿足兩個條件:
(1)可預先確定候選答案的數量;
(2)候選答案的范圍在求解之前必須有一個確定的集合。
一般應用在規模比較小的問題上,因為窮舉算法一般都是循環和條件判斷來實現的,當循環比較多的時候可能,時間復雜性和空間復雜性都很大。
舉幾個例子來看看:
委派任務
某偵察隊接到一項緊急任務,要求在A、B、C、D、E、F六個隊員中盡可能多地挑若干人,但有以下限制條件:
1)A和B兩人中至少去一人;
2)A和D不能一起去;
3)A、E和F三人中要派兩人去;
4)B和C都去或都不去;
5)C和D兩人中去一個;
6)若D不去,則E也不去。
問應當讓哪幾個人去?
我們可以根據已知信息得到一些限制性的條件,假設能去執行任務的代表是1,而不能去執行任務的是0,
A+B >1 :表示A,B至少一人要去
A+D != 2:表示AD不能同時去
A+E+F == 2:表示三者中派兩人去
B+C == 0 & B+C == 2:表示BC要么都去,要么都不去
C+D == 1:表示CD只能有一人去,
D+E == 0 & D==1表示:D不去的話,則E也不去,D去的話,E隨便,
核心算法
nt a,b,c,d,e,f;
for(a=1;a>=0;a--) /*窮舉每個人是否去的所有情況*/
for(b=1;b>=0;b--) /*1:去 0:不去*/
for(c=1;c>=0;c--)
for(d=1;d>=0;d--)
for(e=1;e>=0;e--)
for(f=1;f>=0;f--)
if(a+b>=1&&a+d!=2&&a+e+f==2
&&(b+c==0||b+c==2)&&c+d==1
&&(d+e==0||d==1))
{
printf("A will%s be assigned. \n",a?"":"not");
printf("B will%s be assigned. \n",b?"":"not");
printf("C will%s be assigned. \n",c?"":"not");
printf("D will%s be assigned. \n",d?"":"not");
printf("E will%s be assigned. \n",e?"":"not");
printf("F will%s be assigned. \n",f?"":"not");
}
一個比較有代表性的問題就是填寫運算符的游戲
5 5 5 5 5 =5
由于算術表達式的特殊性,在編程求解這個算式時,需要注意以下幾點:
–(1)當填入除號時,要求右側的數不能為0。
–(2)乘除的運算級別比加減高。
代碼如下:
int j,i[5]; //循環變量 ,數組i用來表示4個運算符
int sign;//累加運算時的符號
int result; //保存運算式的結果值
int count=0; //計數器,統計符合條件的方案
int num[6]; //保存操作數
float left,right; //保存中間結果
char oper[5]={' ','+','-','*','/'}; //運算符
printf("請輸入5個數:");
for(j=1;j<=5;j++)
scanf("%d",&num[j]);
printf("請輸入結果:");
scanf("%d",&result);
for(i[1]=1;i[1]<=4;i[1]++)//循環4種運算符,1表示+,2表示-,3表示*,4表示/
{
if((i[1]<4) || (num[2]!=0))//運算符若是/,則第二個運算數不能為0
{
for(i[2]=1;i[2]<=4;i[2]++)
{
if((i[2]<4) || (num[3]!=0))
{
for(i[3]=1;i[3]<=4;i[3]++)
{
if((i[3]<4) || num[4]!=0)
{
for(i[4]=1;i[4]<=4;i[4]++)
{
if((i[4]<4) || (num[5]!=0))
{
left=0;
right=num[1];
sign=1;
for(j=1;j<=4;j++)
{
switch(oper[i[j]])
{
case '+':
left=left+sign*right;
sign=1;
right=num[j+1];
break;
case '-':
left=left+sign*right;
sign=-1;
right=num[j+1];
break;//通過f=-1實現減法
case '*':
right=right*num[j+1];
break;//實現乘法
case '/':
right=right/num[j+1];//實現除法
break;
}
}
if(left+sign*right==result)
{
count++;
printf("%3d:",count);
for(j=1;j<=4;j++)
printf("%d%c",num[j],oper[i[j]]);
printf("%d=%d\n",num[5],result);
}
}
}
}
}
}
}
}
}
if(count==0)
printf("沒有符合要求的方法!\n");
posted @
2011-09-25 10:22 mengkai 閱讀(958) |
評論 (0) |
編輯 收藏
首先我們在MSDN看一下printf的原型和sprintf的原型
int printf( const char *format [, argument]... );
和
int sprintf( char *buffer, const char *format [, argument] ... );
從定義來看兩者的功能其實很相似的。
如果你接觸的控制臺的程序較多的話,見到printf的比較多,printf函數打印結果到屏幕上,而sprintf函數可以完成其他數據類型轉換為字符串。
從以下幾點來說明一下
(1)函數的中前兩個參數是固定外,可選參數是任意個,buffer是存放字符串指針或者數組名字,fromat是格式化字符串,只要是printf使用的格式化字符串,在sprintf都可以使用,格式化字符串是該函數的精髓。
(2)首先可以把一個整型數據格式化為字符串。比如:char str[20];int i_arg = 12345;sprintf(buf,"%-6d",i_arg);
(3)看一個浮點類型的例子。比如:char str[20];double d_arg = 3.1415926;sprintf(str,"%6.2f",d_arg);
可以控制精度
(4)連接兩個字符串,也可以將多個字符串連接起來,%m.n在字符串的輸出中,m表示寬度,字符串共占的列數;n表示實際的字符數。%m.n在浮點數中,m也表示寬度,n表示小數的位數。比如:char dest[256];char src1[] = {'a','b','c','d','e'};
char src2[] ={'1','2','3','4'};sprintf(dest,"%.5s%.4s",src1,src2);也可以動態的截取字符串的某一些字符,char dest[256];char src1[] = {'a','b','c','d','e'};
char src2[] ={'1','2','3','4'};sprintf(dest,"%.*s%.*s",2,src1,3,src2);也可以竊取浮點類型的有效位sprintf(str,"%*.*",10,4,d_arg);
補充一點,sprintf的返回值就是字符串的字符的個數,也就是strlen(str)的結果,
也可以打印某個參數的地址
int i=2;
sprintf(str,"%0*x",sizeof(void *),&i);或者用sprintf(str,"%p",&i);
此外這些都是都是多字節類型(ANSI)的函數,而對于unicode類型的應該使用的相似的函數:
int wprintf( const wchar_t *format [, argument]... );
int swprintf( wchar_t *buffer, const wchar_t *format [, argument] ... );
用法和上面的很相似的,就是類型不同而已,
對于printf和sprintf該函數的包含在<stdio.h>頭文件
而sprintf和wprintf函數包含在<stdio.h>或者<wchar.h>頭文件中。
posted @
2011-09-24 22:14 mengkai 閱讀(4047) |
評論 (0) |
編輯 收藏