﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-我就是停不下来</title><link>http://www.cnblogs.com/Aioria0622/</link><description>业精于勤荒于嬉,行成于思毁于随</description><language>zh-cn</language><lastBuildDate>Sun, 12 Oct 2008 23:51:15 GMT</lastBuildDate><pubDate>Sun, 12 Oct 2008 23:51:15 GMT</pubDate><ttl>60</ttl><item><title>中兴笔试 2006年3月</title><link>http://www.cnblogs.com/Aioria0622/archive/2008/10/11/1308613.html</link><dc:creator>yijiangchunxue</dc:creator><author>yijiangchunxue</author><pubDate>Sat, 11 Oct 2008 05:54:00 GMT</pubDate><guid>http://www.cnblogs.com/Aioria0622/archive/2008/10/11/1308613.html</guid><wfw:comment>http://www.cnblogs.com/Aioria0622/comments/1308613.html</wfw:comment><comments>http://www.cnblogs.com/Aioria0622/archive/2008/10/11/1308613.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Aioria0622/comments/commentRss/1308613.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Aioria0622/services/trackbacks/1308613.html</trackback:ping><description><![CDATA[　　公共部分（50分）<br />
　　1：作业调度程序从处于（ ）状态的队列中选择适当的作业的作业投入运行。（3分）<br />
　　A 运行 B 提交 C 完成 D后备<br />
　　2：SQL语言中，删除一个表的命令是（ ）（3分）<br />
　　A CLEAR TABLE B DROP TABLE<br />
　　C DELETE TABLE D REMOVE TABLE<br />
　　3：ATM采用的线路复用方式为（ ）（3分）<br />
　　A 频分多路复用<br />
　　B 同步时分多路复用<br />
　　C 异步时分多路复用<br />
　　D 独占信道<br />
　　4：数据库中只存放视图的（ ）（3分）<br />
　　A操作<br />
　　B 对应的数据<br />
　　C 定义<br />
　　D 限制<br />
　　5：什么是虚拟设备？为什么在操作系统中引入虚拟设备？（10分）<br />
　　6：TCP为何采用三次握手来建立连接，若采用二次握手可以吗，请说明原因？（16分）<br />
　　7：什么是分布式数据库？（12分）<br />
　　C++部分（50分）<br />
　　1：设有&#8220;int w[3][4]；&#8221;，pw是与数组名w等价的数组指针，则pw的初始化语句为________________(3分)<br />
　　2：要使引用pr代表变量&#8220;char *p&#8221;，则pr的初始化语句为__________________（3分）<br />
　　3：&#8220;零值&#8221;可以是0，0.0，FALSE或者&#8220;空指针&#8221;。例如int变量n与&#8220;零值&#8221;比较的if语句为：if（n==0），则BOLL flag与&#8220;零值&#8221;比较的if语句为______________；float x与&#8220;零值&#8221;比较的if语句为：______________。（6分）<br />
　　4：社有如下语句：（3分）<br />
　　Int x;<br />
　　()<br />
　　*px=0;<br />
　　则选择以下哪条语句可将x值置为0。<br />
　　A int *px； B int const *px=&amp;x；<br />
　　C int const px=&amp;x； D const int *px=&amp;x；<br />
　　5：设viod f1（int *m，long&amp;n）；int a；long b；则以下调用合法的是（ ）（3分）<br />
　　A f1（a，b） B f1（&amp;a，b）<br />
　　C f1（a，&amp;b） D f1（&amp;a，&amp;b）<br />
　　6：请写出如下代码的运行结果（6分）<br />
　　Int main()<br />
　　{int a,b,c,d;<br />
　　a=0;<br />
　　b=1;<br />
　　c=2;<br />
　　d=3;<br />
　　printf(&#8220;%d&#8221;,a+++b+c+++d++);}<br />
　　7：写出下面函数的功能（12分）<br />
　　Template&lt;class Type&gt;<br />
　　Void WE(Type a[],Type b[],int n){<br />
　　for(int i=0;i&lt;n;i++) b[n-i-1]=a[i];}<br />
　　8写一段代码判断一个单向链表中是否有环。（14分）<br />
　　给出如下结构<br />
　　Struct node<br />
　　{steuct *next；<br />
　　}；<br />
　　Typedef stuct node Node；<br />
　　JAVA部分（50分）<br />
　　1：判断下列对的是哪个（ ）（3分）<br />
　　A short s1=1;s1=s1+1<br />
　　B short s1=1;s1+=1 <br />
　　C short s1=1;s1=s1-1<br />
　　D short s1=1;s1=s1*1<br />
　　2:main方法是Java Application程序执行的入口点，关于main方法的方法头以下哪项是合法的（ ）（3分）<br />
　　A public static void main （）<br />
　　B public static void main （String args）<br />
　　C public static int main （String []arg）<br />
　　D public void main （String args）<br />
　　3：设float x=1，y=2，z=3，则表达式y+=z--/++x的值是（ ）（3分）<br />
　　A 3.5 B 3<br />
　　C 4 D 5<br />
　　4：Math.round（11.5）=_______<br />
　　Math.round（-11.5）=_______(4分)<br />
　　5：假设x=10，y=20，z=30；计算下列表达式的值（6分）<br />
　　A x&lt;10||x&gt;10__________<br />
　　B&nbsp;!(x&lt;y+z)||(x+10&lt;=20)___________<br />
　　C z-y==x&amp;&amp;Math.abs(y-z)!=x_____________<br />
　　6：方法重建Overload和方法的重写Overriding的区别。Overload的方法是否可以改变返回值的类型？（10分）<br />
　　7：谈谈HashMap和Hashtable的区别（6分）<br />
　　8：构造一个类来描述屏幕上的一个点，该类的构成包括点x和y两个坐标，以及一些对点进行的操作，包括：取得点的坐标值，对点的坐标进行赋值，编写应用程序生成该类的对象并对其进行操作。（15分）<br />
<img src ="http://www.cnblogs.com/Aioria0622/aggbug/1308613.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42952/" target="_blank">[新闻]微型博客Twitter取消IM服务 称其ROI差</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>typedef与函数指针</title><link>http://www.cnblogs.com/Aioria0622/archive/2008/10/10/1307845.html</link><dc:creator>yijiangchunxue</dc:creator><author>yijiangchunxue</author><pubDate>Fri, 10 Oct 2008 02:56:00 GMT</pubDate><guid>http://www.cnblogs.com/Aioria0622/archive/2008/10/10/1307845.html</guid><wfw:comment>http://www.cnblogs.com/Aioria0622/comments/1307845.html</wfw:comment><comments>http://www.cnblogs.com/Aioria0622/archive/2008/10/10/1307845.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Aioria0622/comments/commentRss/1307845.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Aioria0622/services/trackbacks/1307845.html</trackback:ping><description><![CDATA[<div class="articleContent" id="articleBody">（一）简单的函数指针的应用。<br />
//形式1：返回类型(*函数名)(参数表)<br />
char (*pFun)(int);<br />
char glFun(int a){ return;}<br />
void main()<br />
{<br />
pFun = glFun;<br />
(*pFun)(2);<br />
}<br />
第一行定义了一个指针变量pFun。它是一个指向某种函数的指针，这种函数参数是一个int型，返回值是char类型。只有第一句我们还无法使用这个指针，因为我们还未对它进行赋值。<br />
第二行定义了一个函数glFun()。该函数正好是一个以int为参数返回char的函数。我们要从指针的层次上理解函数——函数的函数名实际上就是一个指针，函数名指向该函数的代码在内存中的首地址。<br />
然后就是可爱的main()函数了，它的第一句您应该看得懂了——它将函数glFun的地址赋值给变量pFun。main()函数的第二句中&#8220;*pFun&#8221;显然是取pFun所指向地址的内容，当然也就是取出了函数glFun()的内容，然后给定参数为2。<br />
（二）使用typedef更直观更方便。<br />
//形式2：typedef 返回类型(*新类型)(参数表)<br />
typedef char (*PTRFUN)(int);<br />
PTRFUN pFun;<br />
char glFun(int a){ return;}<br />
void main()<br />
{<br />
pFun = glFun;<br />
(*pFun)(2);<br />
}<br />
typedef的功能是定义新的类型。第一句就是定义了一种PTRFUN的类型，并定义这种类型为指向某种函数的指针，这种函数以一个int为参数并返回char类型。后面就可以像使用int,char一样使用PTRFUN了。<br />
第二行的代码便使用这个新类型定义了变量pFun，此时就可以像使用形式1一样使用这个变量了。<br />
（三）在C++类中使用函数指针。<br />
//形式3：typedef 返回类型(类名::*新类型)(参数表)<br />
class CA<br />
{<br />
public:<br />
char lcFun(int a){ return; }<br />
};<br />
CA ca;<br />
typedef char (CA::*PTRFUN)(int);<br />
PTRFUN pFun;<br />
void main()<br />
{<br />
pFun = CA::lcFun;<br />
ca.(*pFun)(2);<br />
}<br />
在这里，指针的定义与使用都加上了&#8220;类限制&#8221;或&#8220;对象&#8221;，用来指明指针指向的函数是那个类的这里的类对象也可以是使用new得到的。比如：<br />
CA *pca = new CA;<br />
pca-&gt;(*pFun)(2);<br />
delete pca;<br />
而且这个类对象指针可以是类内部成员变量，你甚至可以使用this指针。比如：<br />
类CA有成员变量PTRFUN m_pfun;<br />
void CA::lcFun2()<br />
{<br />
(this-&gt;*m_pFun)(2);<br />
}<br />
一句话，使用类成员函数指针必须有&#8220;-&gt;*&#8221;或&#8220;.*&#8221;的调用。<br />
</div>
<img src ="http://www.cnblogs.com/Aioria0622/aggbug/1307845.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42951/" target="_blank">[新闻]用手机聊Gtalk的方法以及应用总结</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>程序员问题集</title><link>http://www.cnblogs.com/Aioria0622/archive/2008/10/10/1307822.html</link><dc:creator>yijiangchunxue</dc:creator><author>yijiangchunxue</author><pubDate>Fri, 10 Oct 2008 02:34:00 GMT</pubDate><guid>http://www.cnblogs.com/Aioria0622/archive/2008/10/10/1307822.html</guid><wfw:comment>http://www.cnblogs.com/Aioria0622/comments/1307822.html</wfw:comment><comments>http://www.cnblogs.com/Aioria0622/archive/2008/10/10/1307822.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Aioria0622/comments/commentRss/1307822.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Aioria0622/services/trackbacks/1307822.html</trackback:ping><description><![CDATA[<p><font size="3">Q:请定义一个宏，比较两个数a、b的大小，不能使用大于、小于、if语句<br />
A:define max(a,b) ( a/b)?a:b</font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:写一个病毒 <br />
A:<br />
while (1) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int *p = new int[10000000]; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:有A、B、C、D四个人，要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟，只有<br />
一支手电，并且同时最多只能两个人一起过桥。请问，如何安排，能够在17分钟内这四个人都过桥？<br />
A:<br />
答案:<br />
第一步:A(1)和B(2)过桥，A(1)返回 Cost：1+2 <br />
第二步: C(5)和D(10)过桥，B(2)返回 Cost：10+2 <br />
第三步: A(1)和B(2)过桥 Cost：2 </font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:实现strlen函数，不许用任何变量~<br />
A:<br />
#include &lt;iostream&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;string&gt;</font></p>
<p><font size="3">using namespace std;</font></p>
<p><font size="3">int myStrlen(const char *str)<br />
{<br />
return *str ? ( *(str+1) ? ( 1 + myStrlen(str+1) ) : 1 ) : 0 ;<br />
}</font></p>
<p><font size="3">int main()<br />
{<br />
char *orig = "Hello, World!";<br />
<br />
cout &lt;&lt; orig &lt;&lt; " (char *)" &lt;&lt; endl;<br />
cout &lt;&lt; myStrlen(orig) &lt;&lt; endl;</font></p>
<p><font size="3">return 0;<br />
}</font></p>
<p><font size="3">~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />
把 *str ? ( *(str+1) ? ( 1 + myStrlen(str+1) ) : 1 ) : 0 展开来</font></p>
<p><font size="3">int myStrlen(const char *str)<br />
{<br />
if( *str != 0 )<br />
{<br />
&nbsp;&nbsp; if( *(str+1) != 0 )<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; return ( 1 + myStrlen(str+1) );<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; else<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; return 1;<br />
&nbsp;&nbsp; } <br />
}<br />
else<br />
{<br />
&nbsp;&nbsp; return 0;<br />
} <br />
}</font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:用递归写出 x! = x * (x-1) * (x-2) * (x-3) * ... * 2 * 1<br />
A:</font></p>
<p><font size="3">unsigned short factorial(unsigned short a);</font></p>
<p><font size="3">int main(void)<br />
{<br />
int num;<br />
int total;<br />
cout&lt;&lt;"请输入数据: "&lt;&lt;endl;<br />
cin&gt;&gt;num; <br />
total = factorial(num);<br />
cout&lt;&lt;"结果为: "&lt;&lt;total&lt;&lt;endl;<br />
return 0;<br />
}</font></p>
<p><font size="3">factorial(a)<br />
{<br />
if( a == 1 )<br />
{<br />
&nbsp;&nbsp; return 1;<br />
}<br />
else<br />
{<br />
&nbsp;&nbsp; a *= factorial(a-1);<br />
&nbsp;&nbsp; return a;<br />
}<br />
}</font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:下列哪两个是等同的 <br />
int b; <br />
A const int* a = &amp;b; <br />
B const* int a = &amp;b; <br />
C const int* const a = &amp;b; <br />
D int const* const a = &amp;b; </font></p>
<p><font size="3">答: (C = D) 这两个是等同的 都表示常量指针常量（指针本身是常量，而且所指内容也是常量）&nbsp;&nbsp; <br />
A const int* a = &amp;b;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //常量指针，只能够读出内存的数据，却不能修改内存的数据。<br />
B const* int a = &amp;b;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //非法的。<br />
C const int* const a = &amp;b;&nbsp;&nbsp; //内存数据和指针的地址都不能够修改<br />
D int const* const a = &amp;b;&nbsp;&nbsp; //内存数据和指针的地址都不能够修改<br />
E int * const a = &amp;b;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //指针常量，指针的地址不能够修改，只能指向b。 </font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:内联函数在编译时是否做参数类型检查？&nbsp;&nbsp; <br />
void g(base &amp; b)<br />
{<br />
b.play;&nbsp;&nbsp;&nbsp;&nbsp; <br />
}&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
void main()<br />
{<br />
son s;&nbsp;&nbsp;&nbsp;&nbsp; <br />
g(s);&nbsp;&nbsp;&nbsp;&nbsp; <br />
return;&nbsp;&nbsp;&nbsp;&nbsp; <br />
} </font></p>
<p><font size="3">A:<br />
内联函数要做参数类型检查, 这是内联函数跟宏相比的优势。</font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:C++函数中值的传递方式有哪几种?<br />
A:<br />
C++函数中值的传递有三种传递方式：1.值传递 2.指针传递 3.引用传递</font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:头文件的作用是什么?<br />
A:<br />
1.通过头文件调用程序库功能，用户只需要按照头文件中的接口声明来调用库功能，而不必关心接口怎么实现的，编译器会从程序库里提取相应的代码。<br />
2.加强类型的安全检查，函数或者接口被使用时候，方式和头文件中的声明不一致，编译器会之处错误。</font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:内存的分配方式的分配方式有几种?<br />
A:<br />
1.从静态存储区域分配，内存编译的时候就已经分配好了，这块内存在程序的整个运行期间都存在，例如：全局变量，静态变量。<br />
2.在栈上创建，在执行函数时，函数内局部变量的存储单元可以在栈上创建，函数执行结束时这些存储单元自动被释放。栈内分配运算内置于处理器的指令集中，效率很高，但是分配内存容量有限。<br />
3.从堆上分配，亦称动态内存分配。程序运行的时候用malloc或new申请任意多少的内存，程序员自己负责在任何时用free或delete释放内存。</font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:实现双向链表删除一个节点P，在节点P后插入一个节点，写出这两个函数;<br />
A:<br />
typedef struct DNode<br />
{<br />
int date;<br />
DNode * prior;<br />
DNode * next;<br />
};</font></p>
<p><font size="3">DNode * DList;</font></p>
<p><font size="3">void insertNode(DList &amp;list, int pValue)<br />
{<br />
DList p = list;<br />
<br />
if( p == NULL )<br />
&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;<br />
while( p-&gt;date != pValue )<br />
{<br />
&nbsp;&nbsp; p = p-&gt;next;<br />
}<br />
<br />
DNode *q = new DNode();<br />
<br />
p-&gt;date = pValue;<br />
p-&gt;next-&gt;prior = q;<br />
q-&gt;next = p-&gt;next;<br />
p-&gt;next = q;<br />
q-&gt;prior = p;</font></p>
<p><font size="3">}</font></p>
<p><font size="3">void deleteNode(DList &amp;list, int pValue)<br />
{<br />
DList p = list;<br />
<br />
if( p == NULL )<br />
&nbsp;&nbsp; return;<br />
<br />
while( p-&gt;date != NULL )<br />
{<br />
&nbsp;&nbsp; p = p-&gt;next;<br />
}<br />
<br />
p-&gt;prior-&gt;next = p-&gt;next;<br />
p-&gt;next-&gt;prior = p-&gt;prior;<br />
<br />
//free p;<br />
delete p;<br />
}</font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:C++里面是不是所有的动作都是main()引起的？如果不是，请举例.<br />
A:<br />
当然不是所有的动作都是main()引起的，只是编译器由main()开始执行的<br />
静态变量和全局变量的分配早在main之前完成<br />
内联，模板，函数声明，宏的扩展全是预编译期行为，也不是main()完成的<br />
注:C++和main()逻辑上没有必然的联系。</font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:如何定义和实现一个类的成员函数为回调函数？<br />
A:<br />
把成员函数申明为static就可以了。<br />
<br />
//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:C++里面如何声明const void f(void)函数为C程序中的库函数？<br />
A:<br />
extern "C" void f(void);<br />
所以extern "C"是强迫C++编译器对函数名进行修饰的时候采用C命名约定。</font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:Windows程序的入口是哪里？写出Windows消息机制的流程。 <br />
A:<br />
入口点是WinMain函数.</font></p>
<p><font size="3">Windows消息机制的流程:</font></p>
<p><font size="3">1.Windows中有一个系统消息队列，对于每一个正在执行的Windows应用程序,系统为其建立一个&#8220;消息队列&#8221;，即应用程序队列，用来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作&#8220;消息循环&#8221;的代码，用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。</font></p>
<p><font size="3">2.Windows为当前执行的每个Windows程序维护一个「消息队列」。在发生输入事件之后，Windows将事件转换为一个「消息」并将消息放入程序的消息队列中。程序通过执行一块称之为「消息循环」的程序代码从消息队列中取出消息：</font></p>
<p><font size="3">while(GetMessage (&amp;msg, NULL, 0, 0))<br />
{<br />
&nbsp;&nbsp;&nbsp; TranslateMessage (&amp;msg) ;<br />
&nbsp;&nbsp;&nbsp; DispatchMessage (&amp;msg) ;<br />
}</font></p>
<p><font size="3">TranslateMessage(&amp;msg);将msg结构传给Windows，进行一些键盘转换。<br />
DispatchMessage (&amp;msg);又将msg结构回传给Windows。然后，Windows将该消息发送给适当的窗口消息处理程序，让它进行处理。</font></p>
<p><font size="3">SendMessage()与PostMessage()之间的区别是什么？<br />
它们两者是用于向应用程序发送消息的。PostMessagex()将消息直接加入到应用程序的消息队列中，不等程序返回就退出；而SendMessage()则刚好相反，应用程序处理完此消息后，它才返回。</font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:把一个链表反向填空 <br />
A:<br />
void reverse(test* head)<br />
{<br />
test* pe = head;<br />
test* ps = head-&gt;next;<br />
while(ps)<br />
{<br />
&nbsp;&nbsp; //方法一 pe是固定不动<br />
&nbsp;&nbsp; pe-&gt;next = ps-&gt;next;<br />
&nbsp;&nbsp; ps-&gt;next = head;<br />
&nbsp;&nbsp; head = ps;<br />
&nbsp;&nbsp; ps = pe-&gt;next;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp; //方法二 pe ps head 都向后移动<br />
&nbsp;&nbsp; //head = ps-&gt;next;<br />
&nbsp;&nbsp; //ps-&gt;next = pe;<br />
&nbsp;&nbsp; //pe = ps;<br />
&nbsp;&nbsp; //ps = head;<br />
}<br />
}</font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:什么函数不能成为虚函数?<br />
A:<br />
构造函数() <br />
内联函数(因为没有函数地址，在编译时插入，是个静态行为。)<br />
静态成员函数(因为静态成员函数类似于全局函数，但是属于相应的类，在相应类的作用域下，没有this指针)</font></p>
<p><font size="3">//--------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:虚函数与接口的区别?<br />
A:<br />
虚函数的概念:<br />
虚函数是动态联编的基础，它是引入派生概念之后用来表现基类和派生类成员函数之间的一种关系。虚函数在基类中定义，它也是一种成员函数，而且非静态成员函数。<br />
若一个实例方法的声明中含有virtual修饰符，则称该方法为虚拟方法；一个虚拟方法的实现可以派生类取代。取代所继承的虚拟方法的实现的过程称为重写(覆盖)该方法；在一个虚拟方法调用中，该调用所涉及的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一个实现。<br />
虚函数的限制：<br />
1.虚函数仅适用于有继承关系的类对象，所以只有类的成员函数才能说明为虚函数。<br />
2.静态成员函数不能是虚函数。<br />
3.内联函数不能是虚函数。<br />
4.构造函数不能是虚函数。<br />
5.析构函数可以是虚函数。</font></p>
<p><font size="3">接口可以有静态成员、嵌套类型、抽象、虚拟成员、属性和事件。实现接口的任何类都必须提供接口中所声明的抽象成员的定义。接口可以要求任何实现类必须实现一个或多个其他接口。<br />
对接口有以下限制：<br />
接口可以任何可访问性来声明，但接口成员必须全都具有公共可访问性。<br />
不能向成员或接口自身附加安全性权限。<br />
接口可以定义类构造函数，但不能定义实例构造函数。<br />
每种语言都必须为需要成员的接口映射一个实现提供规则，因为不只一个接口可以用相同的签名声明成员，且这些成员可以有单独的实现。<br />
接口可以有类和结构来实现。为了只是类或结构实现了某接口，在该类或结构的基类列表中应该包含该接口的标识符。如果一个类或结构实现某接口，则它还隐式实现该接口的所有基接口。即使在类或结构的基类列表中没有显式列出所有基类接口，也是这样。</font></p>
<p><br />
<font size="3">//--------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:C++中虚函数怎么实现的?&nbsp;&nbsp; <br />
A:<br />
每个定义了虚函数的类都有一张虚函数表vtbl(virtual function table)，这张表实际上是一个函数指针的数组，记录了虚函数的入口地址。只要这个类有虚函数，不管是自己定义的还是从父类继承过来的，那么类的每个实例---对象都有一个指针vptr(virtual function table pointer)，它指向类的虚函数表。<br />
虚函数(多态)机制的三个条件:<br />
1.派生关系<br />
2.virtual 属性<br />
3.指针--&gt;访问方式</font></p>
<p><font size="3">//---------------------------------------------------------------------------------------</font></p>
<p><font size="3">Q:有12个小球,外形相同,其中一个小球的质量与其他11个不同，给一个天平,问如何用3次把这个小球找出来并且求出这个小球是比其他的轻还是重？</font></p>
<p><font size="3">A: <br />
将12个球分别编号为a1,a2,a3.......a10,a11,a12. <br />
第一步：将12球分开3拨，每拨4个，a1~a4第一拨，记为b1， a5~a8第2拨，记为b2，其余第3拨，记为b3； <br />
第二步：将b1和b2放到天平两盘上，记左盘为c1，右为c2；这时候分两中情况： </font></p>
<p><font size="3">1.c1和c2平衡，此时可以确定从a1到a8都是常球；然后把c2拿空，并从c1上拿下a4，从a9到a12四球里随便取三球，假设为a9到a11，放到c2上。此时c1上是a1到a3，c2上是a9到a11。从这里又分三种情况： <br />
A：天平平衡，很简单，说明没有放上去的a12就是异球，而到此步一共称了两次，所以将a12随便跟11个常球再称一次，也就是第三次，马上就可以确定a12是重还是轻； <br />
B：若c1上升，则这次称说明异球为a9到a11三球中的一个，而且是比常球重。取下c1所有的球，并将a8放到c1上，将a9取下，比较a8和a11（第三次称），如果平衡则说明从c2上取下的a9是偏重异球，如果不平衡，则偏向哪盘则哪盘里放的就是偏重异球； <br />
C：若c1下降，说明a9到a11里有一个是偏轻异球。次种情况和B类似，所以接下来的步骤照搬B就是； </font></p>
<p><font size="3">2.c1和c2不平衡，这时候又分两种情况，c1上升和c1下降，但是不管哪种情况都能说明a9到a12是常球。这步是解题的关键。也是这个题最妙的地方。 <br />
A：c1上升，此时不能判断异球在哪盘也不能判断是轻还是重。取下c1中的a2到a4三球放一边，将c2中的a5和a6放到c1上，然后将常球a9放到c2上。至此，c1上是a1，a5和a6，c2上是a7，a8和a9。此时又分三中情况： </font></p>
<p><font size="3">&nbsp;&nbsp; 1）如果平衡，说明天平上所有的球都是常球，异球在从c1上取下a2到a4中。而且可以断定异球轻重。因为a5到a8都是常球，而第2次称的时候c1是上升的，所以a2到a4里必然有一个轻球。那么第三次称就用来从a2到a4中找到轻球。这很简单，随便拿两球放到c1和c2，平衡则剩余的为要找球，不平衡则哪边低则哪个为要找球； </font></p>
<p><font size="3">&nbsp;&nbsp; 2）c1仍然保持上升，则说明要么a1是要找的轻球，要么a7和a8两球中有一个是重球（这步懂吧？好好想想，很简单的。因为a9是常球，而取下的a2到a4肯定也是常球，还可以推出换盘放置的a5和a6也是常球。所以要么a1轻，要么a7或a8重）。至此，还剩一次称的机会。只需把a7和a8放上两盘，平衡则说明a1是要找的偏轻异球，如果不平衡，则哪边高说明哪个是偏重异球； <br />
<br />
&nbsp;&nbsp; 3）如果换球称第2次后天平平衡打破，并且c1降低了，这说明异球肯定在换过来的a5和a6两求中，并且异球偏重，否则天平要么平衡要么保持c1上升。确定要找球是偏重之后，将a5和a6放到两盘上称第3次根据哪边高可以判定a5和a6哪个是重球； </font></p>
<p><font size="3">B：第1次称后c1是下降的，此时可以将c1看成c2，其实以后的步骤都同A，所以就不必要再重复叙述了。至此，不管情况如何，用且只用三次就能称出12个外观手感一模一样的小球中有质量不同于其他11球的偏常的球。而且在称的过程中可以判定其是偏轻还是偏重。 </font></p>
<img src ="http://www.cnblogs.com/Aioria0622/aggbug/1307822.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42951/" target="_blank">[新闻]用手机聊Gtalk的方法以及应用总结</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>C++中const用法总结</title><link>http://www.cnblogs.com/Aioria0622/archive/2008/09/21/1295193.html</link><dc:creator>yijiangchunxue</dc:creator><author>yijiangchunxue</author><pubDate>Sun, 21 Sep 2008 04:01:00 GMT</pubDate><guid>http://www.cnblogs.com/Aioria0622/archive/2008/09/21/1295193.html</guid><wfw:comment>http://www.cnblogs.com/Aioria0622/comments/1295193.html</wfw:comment><comments>http://www.cnblogs.com/Aioria0622/archive/2008/09/21/1295193.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/Aioria0622/comments/commentRss/1295193.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Aioria0622/services/trackbacks/1295193.html</trackback:ping><description><![CDATA[&nbsp;
<p style="margin-left: 18pt; word-break: break-all; text-indent: -18pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">常量，如</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const int max = 100; <br />
</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">优点：</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">常量有数据类型，而宏常量没有数据类型。编译器可以对前者进行类型安全检查，而对后者只进行字符替换，没有类型安全检查，并且在字符替换时可能会产生意料不到的错误。</span></p>
<p style="margin-left: 18pt; word-break: break-all; text-indent: -18pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const </span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">修饰类的数据成员。</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">数据成员只在某个对象生存期内是常量，而对于整个类而言却是可变的。因为类可以创建多个对象，不同的对象其</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">数据成员的值可以不同。所以不能在类声明中初始化</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">数据成员，因为类的对象未被创建时，编译器不知道</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const </span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">数据成员的值是什么。</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">数据成员的初始化只能在类的构造函数的初始化表中进行。</span></p>
<p style="margin-left: 18pt; word-break: break-all; text-indent: -18pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">修饰指针的情况，见下式：</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> <br />
const int* a = &amp; [1] <br />
int const *a = &amp; [2] <br />
int* const a = &amp; [3] <br />
const int* const a = &amp; [4] <br />
</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">可以参考《</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">Effective c++</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">》</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">Item21</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">上的做法，如果</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">位于星号的左侧，则</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">就是用来修饰指针所指向的变量，即指针指向为常量；如果</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">位于星号的右侧，</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">就是修饰指针本身，即指针本身是常量。因此，</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">[1]</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">和</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">[2]</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">的情况相同，都是指针所指向的内容为常量，这种情况下不允许对内容进行更改操作，如不能</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">*a = 3 </span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">；</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">[3]</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">为指针本身是常量，而指针所指向的内容不是常量，这种情况下不能对指针本身进行更改操作，如</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">a++</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">是错误的；</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">[4]</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">为指针本身和指向的内容均为常量。</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> </span></p>
<p style="margin-left: 18pt; word-break: break-all; text-indent: -18pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">4.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">的初始化</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> <br />
</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">先看一下</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">变量初始化的情况</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> <br />
1) </span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">非指针</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">常量初始化的情况：</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">A b; <br />
const A a = b; <br />
2) </span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">指针</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">常量初始化的情况：</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> <br />
A* d = new A(); <br />
const A* c = d; <br />
</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">或者：</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const A* c = new A(); <br />
3</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">）引用</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">常量初始化的情况：</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> <br />
A f; <br />
const A&amp; e = f; // </span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">这样作</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">e</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">只能访问声明为</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">的函数，而不能访问一般的成员函数；</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> </span></p>
<p style="margin-left: 18pt; word-break: break-all; text-indent: -18pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">5.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">在函数声明中的应用</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">在函数声明中，</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const </span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">可以修饰函数的返回值，或某个参数；对于成员函数，还可以修饰是整个函数。</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">1</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">）</span> <span style="font-size: 9pt; line-height: 150%; font-family: 宋体">修饰参数的</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">，如</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> void fun0(const A* a ); void fun1(const A&amp; a); <br />
</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">调用函数的时候，用相应的变量初始化</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">常量，则在函数体中，按照</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">所修饰的部分进行常量化，如形参为</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const A* a</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">，则不能对传递进来的指针的内容进行改变，保护了原指针所指向的内容；如形参为</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const A&amp; a</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">，则不能对传递进来的引用对象进行改变，保护了原对象的属性。</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> <br />
[</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">注意</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">]</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">：参数</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">通常用于参数为指针或引用的情况，且只能修饰输入参数</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">;</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">若输入参数采用</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&#8220;</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">值传递</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&#8221;</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">方式，由于函数将自动产生临时变量用于复制该参数，该参数本就不需要保护，所以不用</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">修饰。</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> <br />
[</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">总结</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">]</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">对于非内部数据类型的输入参数，应该将</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&#8220;</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">值传递</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&#8221;</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">的方式改为</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&#8220;const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">引用传递</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&#8221;</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">，目的是为了提高效率。例如，将</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">void Func(A a)</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">改为</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">void Func(const A &amp;a) <br />
</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">对于内部数据类型的输入参数，不要将</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&#8220;</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">值传递</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&#8221;</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">的方式改为</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&#8220;const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">引用传递</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&#8221;</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">。否则既达不到提高效率的目的，又降低了函数的可理解性。例如</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">void Func(int x)</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">不应该改为</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">void Func(const int &amp;x)<br />
2</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">）</span> <span style="font-size: 9pt; line-height: 150%; font-family: 宋体">修饰返回值的</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">，如</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const A fun2( ); const A* fun3( ); <br />
</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">这样声明了返回值后，</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">按照</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">"</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">修饰原则</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">"</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">进行修饰，起到相应的保护作用。</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;[</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">总结</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">] 1</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">）</span> <span style="font-size: 9pt; line-height: 150%; font-family: 宋体">一般情况下，函数的返回值为某个对象时，如果将其声明为</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">时，多用于操作符的重载。通常，不建议用</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">修饰函数的返回值类型为某个对象或对某个对象引用的情况。</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">2</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">）如果给采用</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&#8220;</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">指针传递</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&#8221;</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">方式的函数返回值加</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">修饰，那么函数返回值（即指针）的内容不能被修改，该返回值只能被赋给加</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const </span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">修饰的同类型指针。</span></p>
<p style="margin-left: 18pt; word-break: break-all; text-indent: -18pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">6.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">类成员函数中</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">的使用</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> <br />
</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">一般放在函数体后，形如：</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">void fun() const; <br />
</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">任何不会修改数据成员的函数都因该声明为</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">类型。如果在编写</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">成员函数时，不慎修改了数据成员，或者调用了其他非</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">成员函数，编译器将报错，这大大提高了程序的健壮性。</span></p>
<p style="margin-left: 18pt; word-break: break-all; text-indent: -18pt; line-height: 150%; text-align: left" align="left">7.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">&nbsp;</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">使用</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">的一些建议</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> <br />
1 </span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">要大胆的使用</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">，这将给你带来无尽的益处，但前提是你必须搞清楚原委；</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> <br />
2 </span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">要避免最一般的赋值操作错误，如将</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">变量赋值，具体可见思考题；</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> <br />
3 </span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">在参数中使用</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">应该使用引用或指针，而不是一般的对象实例，原因同上；</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> <br />
4 const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">在成员函数中的三种用法（参数、返回值、函数）要很好的使用；</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana"> <br />
5 </span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">不要轻易的将函数的返回值类型定为</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const; <br />
6</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">除了重载操作符外一般不要将返回值类型定为对某个对象的</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">const</span><span style="font-size: 9pt; line-height: 150%; font-family: 宋体">引用</span><span style="font-size: 9pt; line-height: 150%; font-family: Verdana">; </span></p>
<img src ="http://www.cnblogs.com/Aioria0622/aggbug/1295193.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42950/" target="_blank">[新闻]Google开拓美政府机构市场 微软业务受冲击</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>大学生面试20个经典问题及回答思路！</title><link>http://www.cnblogs.com/Aioria0622/archive/2008/09/15/1291201.html</link><dc:creator>yijiangchunxue</dc:creator><author>yijiangchunxue</author><pubDate>Mon, 15 Sep 2008 10:36:00 GMT</pubDate><guid>http://www.cnblogs.com/Aioria0622/archive/2008/09/15/1291201.html</guid><wfw:comment>http://www.cnblogs.com/Aioria0622/comments/1291201.html</wfw:comment><comments>http://www.cnblogs.com/Aioria0622/archive/2008/09/15/1291201.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Aioria0622/comments/commentRss/1291201.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Aioria0622/services/trackbacks/1291201.html</trackback:ping><description><![CDATA[<font face="Verdana">
<div class="bbcode" id="postmessage_2063" minmax_bound="true">大学生面试20个经典问题及回答思路！ <br minmax_bound="true" />
<br minmax_bound="true" />
面试是大学生就业关键一关，要知己知彼，百战不殆。下面由首席大学生就业顾问、著名职业生涯规划专家：李震东老师向大家介绍面试问题及回答思路： <br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
问题一：&#8220;请你自我介绍一下&#8221; <br minmax_bound="true" />
我就读于华南理工大学工商管理学院,我的专业是国际经济与贸易,此外还辅修了法学. <br minmax_bound="true" />
在校期间,除了学习课本,我比较喜欢参加一些课外活动.包括发传单,做家庭教师,参加各种比赛和项目.主要就是简历上介绍的那些. <br minmax_bound="true" />
我比较喜欢踢足球,看各种企业培训的讲座. <br minmax_bound="true" />
不知道您对哪些方面还需要进一步了解.<br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
思路： <br minmax_bound="true" />
1、这是面试的必考题目。 <br minmax_bound="true" />
2、介绍内容要与个人简历相一致。 <br minmax_bound="true" />
3、表述方式上尽量口语化。 <br minmax_bound="true" />
4、要切中要害，不谈无关、无用的内容。 <br minmax_bound="true" />
5、条理要清晰，层次要分明。 <br minmax_bound="true" />
6、事先最好以文字的形式写好背熟。　 <br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
问题二：&#8220;谈谈你的家庭情况&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
思路： <br minmax_bound="true" />
1、 况对于了解应聘者的性格、观念、心态等有一定的作用，这是招聘单位问该问题的主要原因。 <br minmax_bound="true" />
2、 简单地罗列家庭人口。 <br minmax_bound="true" />
3、 宜强调温馨和睦的家庭氛围。 <br minmax_bound="true" />
4、 宜强调父母对自己教育的重视。 <br minmax_bound="true" />
5、 宜强调各位家庭成员的良好状况。 <br minmax_bound="true" />
6、 宜强调家庭成员对自己工作的支持。 <br minmax_bound="true" />
7、 宜强调自己对家庭的责任感。 <br minmax_bound="true" />
<br minmax_bound="true" />
问题三：最能概括你自己的三个词是什么？ <br minmax_bound="true" />
思路： 我经常用的三个词是：适应能力强，有责任心和做事有始终，结合具体例子向主考官解释，使他们觉得你具有发展潜力。 <br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
问题四：&#8220;你有什么业余爱好？&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
思路： <br minmax_bound="true" />
1、 业余爱好能在一定程度上反映应聘者的性格、观念、心态，这是招聘单位问该问题的主要原因。 <br minmax_bound="true" />
2、 最好不要说自己没有业余爱好。 <br minmax_bound="true" />
3、 不要说自己有那些庸俗的、令人感觉不好的爱好。 <br minmax_bound="true" />
4、 最好不要说自己仅限于读书、听音乐、上网，否则可能令面试官怀疑应聘者性格孤僻。 <br minmax_bound="true" />
5、 最好能有一些户外的业余爱好来&#8220;点缀&#8221;你的形象。 <br minmax_bound="true" />
6、找一些富于团体合作精神的。这里有一个真实的故事：有人被否决掉，因为他的爱好是深海潜水。主考官说：因为这是一项单人活动，我不敢肯定他能否适应团体工作。 <br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
问题五：&#8220;你最崇拜谁？&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
思路： <br minmax_bound="true" />
1、 最崇拜的人能在一定程度上反映应聘者的性格、观念、心态，这是面试官问该问题的主要原因。 <br minmax_bound="true" />
2、 不宜说自己谁都不崇拜。 <br minmax_bound="true" />
3、 不宜说崇拜自己。 <br minmax_bound="true" />
4、 不宜说崇拜一个虚幻的、或是不知名的人。 <br minmax_bound="true" />
5、 不宜说崇拜一个明显具有负面形象的人。 <br minmax_bound="true" />
6、 所崇拜的人人最好与自己所应聘的工作能&#8220;搭&#8221;上关系。 <br minmax_bound="true" />
7、 最好说出自己所崇拜的人的哪些品质、哪些思想感染着自己、鼓舞着自己。 <br minmax_bound="true" />
　　 <br minmax_bound="true" />
<br minmax_bound="true" />
问题六：&#8220;你的座右铭是什么？&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
思路： <br minmax_bound="true" />
1、座右铭能在一定程度上反映应聘者的性格、观念、心态，这是面试官问这个问题的主要原因。 <br minmax_bound="true" />
2、不宜说那些医引起不好联想的座右铭。 <br minmax_bound="true" />
3、不宜说那些太抽象的座右铭。 <br minmax_bound="true" />
4、不宜说太长的座右铭。 <br minmax_bound="true" />
5、座右铭最好能反映出自己某种优秀品质。 <br minmax_bound="true" />
6、 参考答案——&#8220;只为成功找方法，不为失败找借口&#8221;。 <br minmax_bound="true" />
　　 <br minmax_bound="true" />
<br minmax_bound="true" />
问题七：&#8220;谈谈你的缺点&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
　思路： <br minmax_bound="true" />
1、 不宜说自己没缺点。 <br minmax_bound="true" />
2、 不宜把那些明显的优点说成缺点。 <br minmax_bound="true" />
3、 不宜说出严重影响所应聘工作的缺点。 <br minmax_bound="true" />
4、 不宜说出令人不放心、不舒服的缺点。 <br minmax_bound="true" />
5、 可以说出一些对于所应聘工作&#8220;无关紧要&#8221;的缺点，甚至是一些表面上看是缺点，从工作的角度看却是优点的缺点.。绝对不要自作聪明地回答&#8220;我最大的缺点是过于追求完美&#8221;，有的人以为这样回答会显得自己比较出色，但事实上，他已经岌芨可危了。 <br minmax_bound="true" />
　问题八：&#8220;谈一谈你的一次失败经历&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
思路： <br minmax_bound="true" />
1、 不宜说自己没有失败的经历。 <br minmax_bound="true" />
2、 不宜把那些明显的成功说成是失败。 <br minmax_bound="true" />
3、 不宜说出严重影响所应聘工作的失败经历， <br minmax_bound="true" />
4、 所谈经历的结果应是失败的。 <br minmax_bound="true" />
5、 宜说明失败之前自己曾信 <br minmax_bound="true" />
心白倍、尽心尽力。 <br minmax_bound="true" />
6、 说明仅仅是由于外在客观原因导致失败。 <br minmax_bound="true" />
7、 失败后自己很快振作起来，以更加饱满的热情面对以后的工作。 <br minmax_bound="true" />
<br minmax_bound="true" />
问题九：有想过创业吗？ <br minmax_bound="true" />
<br minmax_bound="true" />
思路： 这个问题可以显示你的冲劲，但如果你的回答是&#8220;有&#8221;的话，千万小心，下一个问题可能就是&#8220;那么为什么你不这样做呢？&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
问题十：你参加过义务活动吗？ <br minmax_bound="true" />
思路： 现在就着手做一些义务活动，不仅仅是那些对社会有贡献的，还要是你的雇主会在意的，如果他们还没有一个这样的员工，那么你会成为很好的公关资源。 <br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
问题十一：&#8220;你为什么选择我们公司？&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
思路： <br minmax_bound="true" />
1、 面试官试图从中了解你求职的动机、愿望以及对此项工作的态度。 <br minmax_bound="true" />
2、 建议从行业、企业 和岗位这三个角度来回答。 <br minmax_bound="true" />
3、 参考答案——&#8220;我十分看好贵公司所在的行业，我认为贵公司十分重视人才，而且这项工作很适合我，相信自己一定能做好。&#8221;　&#8220;我来应聘是因为我相信自己能为公司作出贡献，而且我的适应能力使我确信我能把职责带上一个新的台阶&#8221;。 <br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
问题十二：&#8220;对这项工作，你有哪些可预见的困难？&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
思路： <br minmax_bound="true" />
1、 不宜直接说出具体的困难，否则可能令对方怀疑应聘者不行。 <br minmax_bound="true" />
2、 可以尝试迂回战术，说出应聘者对困难所持有的态度——&#8220;工作中出现一些困难是正常的，也是难免的，但是只要有坚忍不拔的毅力、良好的合作精神以及事前周密而充分的准备，任何困难都是可以克服的。&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
　　问题十三：&#8220;如果我录用你，你将怎样开展工作&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
思路： <br minmax_bound="true" />
1、 如果应聘者对于应聘的职位缺乏足够的了解，最好不要直接说出自己开展工作的具体办法， <br minmax_bound="true" />
2、 可以尝试采用迂回 战术来回答，如&#8220;首先听取领导的指示和要求，然后就有关情况进行了解和熟悉，接下来制定一份近期的工作计划并报领导批准，最后根据计划开展工作。&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
　　问题十四：&#8220;与上级意见不一只样，你将怎么办？&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
思路： <br minmax_bound="true" />
1、 一般可以这样回答&#8220;我会给上级以必要的解释和提醒，在这种情况下，我会服从上级的意见。&#8221; <br minmax_bound="true" />
2、 如果面试你的是总经理，而你所应聘的职位另有一位经理，且这位经理当时不在场，可以这样回答：&#8220;对于非原则性问题，我会服从上级的意见，对于涉及公司利益的重大问题，我希望能向更高层领导反映。&#8221; <br minmax_bound="true" />
&#8220;应届毕业生缺乏经验，如何能胜任工作？&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
　　问题十五：&#8220;我们为什么要录用你？&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
思路： <br minmax_bound="true" />
1、 应聘者最好站在招聘单位的角度来回答。 <br minmax_bound="true" />
2、 招聘单位一般会录用这样的应聘者：基本符合条件、对这份共组感兴趣、有足够的信心。 <br minmax_bound="true" />
3、 如&#8220;我符合贵公司的招聘条件，凭我目前掌握的技能、高度的责任感和良好的适应能力及学习能力 ，完全能胜任这份工作。我十分希望能为贵公司服务，如果贵公司给我这个机会，我一定能成为贵公司的栋梁！&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
　　问题十六：&#8220;你能为我们做什么？&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
思路： <br minmax_bound="true" />
1、 基本原则上&#8220;投其所好&#8221;。 <br minmax_bound="true" />
2、 回答这个问题前应聘者最 好能&#8220;先发制人&#8221;，了解招聘单位期待这个职位所能发挥的作用。 <br minmax_bound="true" />
3、 应聘者可以根据自己的了解，结合自己在专业领域的优势来回答这个问题。 <br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
　　问题十七：&#8220;你是应届毕业生，缺乏经验，如何能胜任这项工作？&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
思路： <br minmax_bound="true" />
1、 如果招聘单位对应届毕业生的应聘者提出这个问题，说明招聘单位并不真正在乎&#8220;经验&#8221;，关键看应聘者怎样回答。 <br minmax_bound="true" />
2、 对这个问题的回答最好要体现出应聘者的诚恳、机智、果敢及敬业。 <br minmax_bound="true" />
3、 如&#8220;作为应届毕业生，在工作经验方面的确会有所欠缺，因此在读书期间我一直利用各种机会在这个行业里做兼职。我也发现，实际工作远比书本知识丰富、复杂。但我有较强的责任心、适应能力和学习能力，而且比较勤奋，所以在兼职中均能圆满完成各项工作，从中获取的经验也令我受益非浅。请贵公司放心，学校所学及兼职的工作经验使我一定能胜任这个职位。&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
<br minmax_bound="true" />
　　问题十八：&#8220;你希望与什么样的上级共事？&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
思路： <br minmax_bound="true" />
1、 通过应聘者对上级的&#8220;希望&#8221;可以判断出应聘者对自我要求的意识，这既上一个陷阱，又上一次机会。 <br minmax_bound="true" />
2、 最好回避对上级具体的希望，多谈对自己的要求。 <br minmax_bound="true" />
3、 如&#8220;做为刚步入社会新人，我应该多要求自己尽快熟悉环境、适应环境，而不应该对环境提出什么要求，只要能发挥我的专长就可以了。&#8221; <br minmax_bound="true" />
<br minmax_bound="true" />
问题十九：告诉我三件关于这公司的事情。 <br minmax_bound="true" />
<br minmax_bound="true" />
思路： 你应该知道十件和公司有关的事情，他问你三件你回答四件，他问你四件你回答五件。说几件你知道的事，其中至少有一样是&#8220;销售额为多少多少&#8221;之类。 <br minmax_bound="true" />
<br minmax_bound="true" />
问题二十：你为什么还没找到合适的职位呢？ <br minmax_bound="true" />
<br minmax_bound="true" />
思路： 别怕告诉他们你可能会有的聘请，千万不要说&#8220;我上一次面试弄得一塌糊涂&#8230;&#8230;&#8221;。指出这是你第一次面试 </div>
</font>
<img src ="http://www.cnblogs.com/Aioria0622/aggbug/1291201.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42949/" target="_blank">[新闻]消息称苹果正在开发iTunes网络电视</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>[转载]Gnuplot使用技巧</title><link>http://www.cnblogs.com/Aioria0622/archive/2008/09/14/1290776.html</link><dc:creator>yijiangchunxue</dc:creator><author>yijiangchunxue</author><pubDate>Sun, 14 Sep 2008 04:55:00 GMT</pubDate><guid>http://www.cnblogs.com/Aioria0622/archive/2008/09/14/1290776.html</guid><wfw:comment>http://www.cnblogs.com/Aioria0622/comments/1290776.html</wfw:comment><comments>http://www.cnblogs.com/Aioria0622/archive/2008/09/14/1290776.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Aioria0622/comments/commentRss/1290776.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Aioria0622/services/trackbacks/1290776.html</trackback:ping><description><![CDATA[<p>郑小宏<br />
2005-10-21<br />
对于在Linux下工作的人，如果你经常要画一些二维图和简单的三维图的话，那么，gnuplot无疑是一个非常好的选择，不仅图形漂亮，而且操作简单。当然如果需要质量更高的三维图，请用其他的一些专业绘图软件。建议大家学会使用gnuplot。这个小软件通常都是Redhat Linux自带的，但自带的版本是3.7的，建议将其升级到4.0，新版本具有很多新功能。最新版本可以到<a href="http://www.gnuplot.info/">http://www.gnuplot.info/</a>下载。<br />
一些最基本的操作请大家看说明书。这里总结一下我在使用过程中遇到的一些问题以及解决的办法，目的是让那些以前不会的或不熟练的能快速入门，会画自己想要的图，因为原来的说明书很长，较难有针对性地很快找到自己想要的信息。这里简单的总结不可能面面俱到，所以大家不要抱怨我写的不全，更全面的了解还是请看说明书，网上的资料也多的是。其实这也是我们从网上一点一点搜集和摸索出来的。我相信看完后，应该平时最常见的问题基本上都能在这里找到答案。如果大家在使用过程中摸索到了我没有写到的技巧和体会，或有其它建议，请大家提告诉我，以不断完善这篇总结，谢谢！<br />
&nbsp;<br />
&lt;!--[if !supportLists]--&gt;一、&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--[endif]--&gt;基础篇：<br />
在linux命令提示符下运行gnuplot命令启动，输入quit或q或exit退出。<br />
&nbsp;<br />
1、plot命令<br />
gnuplot&gt; plot sin(x) with line linetype 3 linewidth 2 或<br />
gnuplot&gt; plot sin(x) w l lt 3 lw 2&nbsp;&nbsp;&nbsp; %用线画，线的类型（包括颜色与虚线的类型）是3，线的宽度是2，对函数sin(x)作图<br />
gnuplot&gt; plot sin(x) with point pointtype 3 pointsize 2&nbsp; 或<br />
gnuplot&gt; plot sin(x) w p pt 3 ps 2&nbsp;&nbsp;&nbsp; %用点画，点的类型（包括颜色与点的类型）是3，点的大小是2<br />
gnuplot&gt; plot sin(x) title 'f(x)' w lp lt 3 lw 2 pt 3 ps 2&nbsp;&nbsp;&nbsp; %同时用点和线画，这里title &#8216;f(x)&#8217;表示图例上标'f(x)'，如果不用则用默认选项<br />
gnuplot&gt; plot sin(x)&nbsp;&nbsp;&nbsp; %此时所有选项均用默认值。如果缺某一项则将用默认值<br />
gnuplot&gt; plot &#8216;a.dat&#8217; u 2:3&nbsp; w l lt 3 lw 2 %利用数据文件a.dat中的第二和第三列作图<br />
&nbsp;<br />
顺便提一下，如这里最前面的两个例子所示，在gnuplot中，如果某两个词，按字母先后顺序，前面某几个字母相同，后面的不同，那么只要写到第一个不同的字母就可以了。如with，由于没有其它以w开头的词，因此可以用 w 代替，line也可以用 l 代替。<br />
&nbsp;<br />
2、同时画多条曲线<br />
gnuplot&gt; plot sin(x) title &#8216;sin(x)&#8217; w l lt 1 lw 2, cos(x) title &#8216;cos(x)&#8217;&nbsp; w l lt 2 lw 2&nbsp; ％两条曲线是用逗号隔开的。画多条曲线时，各曲线间均用逗号隔开就可以了。<br />
&nbsp;<br />
以上例子中是对函数作图，如果对数据文件作图，将函数名称换为数据文件名即可，但要用单引号引起来。<br />
&nbsp;<br />
3、关于图例的位置<br />
默认位置在右上方。<br />
gnuplot&gt; set key left&nbsp; %放在左边，有left 和right两个选项<br />
gnuplot&gt; set key bottom&nbsp; %放在下边，只有这一个选项；默认在上边<br />
gnuplot&gt; set key outside&nbsp; %放在外边，但只能在右面的外边<br />
以上三个选项可以进行组合。如：<br />
gnuplot&gt; set key left bottom&nbsp; %表示左下边<br />
&nbsp;<br />
还可以直接用坐标精确表示图例的位置，如<br />
gnuplot&gt; set key 0.5,0.6&nbsp; %将图例放在0.5,0.6的位置处<br />
&nbsp;<br />
4、关于坐标轴<br />
gnuplot&gt; set xlabel &#8216;x&#8217;&nbsp;&nbsp; %x轴标为&#8216;x&#8217;<br />
gnuplot&gt; set ylabel &#8216;y&#8217;&nbsp;&nbsp; %y轴标为&#8217;y&#8217;<br />
gnuplot&gt; set ylabel &#8216;DOS&#8217; tc lt 3&nbsp; %其中的tc lt 3表示&#8217;DOS&#8217;的颜色用第三种颜色。<br />
gnuplot&gt; set xtics 1.0&nbsp;&nbsp;&nbsp; %x轴的主刻度的宽度为1.0，同样可以为y轴定义ytics<br />
gnuplot&gt; set mxtics 3&nbsp;&nbsp;&nbsp; %x轴上每个主刻度中画3个分刻度，同样可以为y轴定义mytics<br />
gnuplot&gt; set border 3 lt 3 lw 2 %设为第三种边界，颜色类型为3，线宽为2<br />
同样可以为上边的x轴（称为x2）和右边y（称为y2）轴进行设置，即x2tics，mx2tics，y2tics，my2tics。<br />
gnuplot&gt; set xtics nomirror<br />
gnuplot&gt; unset x2tics&nbsp;&nbsp;&nbsp;&nbsp; %以上两条命令去掉上边x2轴的刻度<br />
&nbsp;<br />
gnuplot&gt; set ytics nomirror<br />
gnuplot&gt; unset y2tics&nbsp;&nbsp;&nbsp;&nbsp; %以上两条命令去掉右边y轴的刻度<br />
&nbsp;<br />
5、在图中插入文字<br />
gnuplot&gt; set label &#8216;sin(x)&#8217; at 0.5,0.5&nbsp; %在坐标（0.5,0.5）处加入字符串&#8217;sin(x)&#8217;。<br />
在输出为.ps或.eps文件时，如果在set term 的语句中加入了enhanced选现，则可以插入上下标、希腊字母和特殊符号。上下标的插入和latex中的方法是一样的。<br />
&nbsp;<br />
6、在图中添加直线和箭头<br />
gnuplot&gt; set arrow from 0.0,0.0 to 0.6,0.8&nbsp;&nbsp;&nbsp; %从（0.0,0.0）到（0.6,0.8）画一个箭头<br />
gnuplot&gt; set arrow from 0.0,0.0 to 0.6,0.8 lt 3 lw 2&nbsp;&nbsp; %这个箭头颜色类型为3，线宽类型为2<br />
gnuplot&gt; set arrow from 0.0,0.0 to 0.6,0.8 nohead lt 3 lw 2&nbsp; %利用nohead可以去掉箭头的头部，这就是添加直线的方法。<br />
&nbsp;<br />
注意，在gnuplot中，对于插入多个的label和arrow等等，系统会默认按先后顺序分别对各个label或arrow进行编号，从1开始。如果以后要去掉某个label或arrow，那么只要用unset命令将相应的去掉即可。如：<br />
gnuplot&gt; unset arrow 2<br />
将去掉第二个箭头。<br />
&nbsp;<br />
7、图的大小和位置<br />
gnuplot&gt;set size 0.5,0.5&nbsp; %长宽均为默认宽度的一半，建议用这个取值，尤其是画成ps或eps图形的时候<br />
gnuplot&gt;set origin 0.0,0.5&nbsp;&nbsp; %设定图的最左下角的那一点在图形面板中的位置。这里图将出现在左上角。<br />
&nbsp;<br />
8、画三维图<br />
gnuplot&gt;splot &#8216;文件名&#8217; u 2:4:5&nbsp; %以第二和第四列作为x和y坐标，第五列为z坐标。<br />
&nbsp;<br />
9．将图形输出到文件<br />
在gnuplot中，输出文件的格式是由terminal来控制的。默认的情况下，都是输出到屏幕，即终端模式为X11。如果想输出到文件，则必须对terminal进行设置。要了解有那些终端类型，可以输入 set terminal后回车，所有支持的终端模式（或文件格式）都列出来了。就我来说，输出文件的格式用得最多的是ps和eps文件。这在运行画图命令plot或splot前必须先运行如下两条命令：<br />
&nbsp;<br />
gnuplot&gt;set term post eps color solid enh<br />
gnuplot&gt;set output &#8216;a.eps&#8217;<br />
&nbsp;<br />
其中第一条命令为设置终端模式，post即为postscript模式，这是输出到ps或eps文件必须有的。后面的eps，color，solid以及enh选项均可以有或没有，根据你的需要。eps表示输出为eps文件，没有就输出为ps文件；color表示输出图形为彩色，不用就会保存为黑白的；solid表示输出图中的所有线都用实线，不用则除了第一条线为实线外，其它的均用不同的虚线；使用enh(enhanced)选项可以在图中插入上下标、希腊字母和特殊符号，不用则不能实现这些功能。后面的选项可以根据自己的需要选择一个或几个。<br />
&nbsp;<br />
第二条命令对output的设置表示要输出的文件的名字。但是请注意，运行完这条命令后，还仅仅是定义了输出文件的名字，实际上，图还没画到这个文件里去。因此运行这两条命令还只是进行了必须的设置。然后运行如下命令<br />
gnuplot&gt;plot sin(x) w l<br />
或<br />
gnuplot&gt;replot（假如前面已经运行过plot或replot命令的话）<br />
这时，图形就在上面指定的文件中了。<br />
&nbsp;<br />
要输出为其它格式，同样要进行这样的设置，比如要输出为jpg格式，则在运行画图命令前先运行如下命令：<br />
gnuplot&gt;set term jpeg<br />
gnuplot&gt;set output &#8216;a.jpg&#8217;<br />
&nbsp;<br />
如果要由其它模式再返回到输出到屏幕，则运行如下命令：<br />
gnuplot&gt;set term X11<br />
二、提高篇：<br />
1、如何在同一张图里同时画多个图<br />
gnuplot&gt;set multiplot&nbsp;&nbsp; %设置为多图模式<br />
gnuplot&gt;set origin 0.0,0.5&nbsp;&nbsp; %设置第一个图的原点的位置<br />
gnuplot&gt;set size 0.5,0.5&nbsp; %设置第一个图的大小<br />
gnuplot&gt;plot &#8220;a1.dat&#8221;<br />
gnuplot&gt;set origin 0.5,0.5&nbsp;&nbsp; %设置第二个图的原点的位置<br />
gnuplot&gt;set size 0.5,0.5&nbsp;&nbsp; %设置第二个图的大小<br />
gnuplot&gt;plot &#8220;a2.dat&#8221;<br />
gnuplot&gt;set origin 0.0,0.0&nbsp;&nbsp; %设置第三个图的原点的位置<br />
gnuplot&gt;set size 0.5,0.5&nbsp; %设置第三个图的大小<br />
gnuplot&gt;plot &#8220;a3.dat&#8221;<br />
gnuplot&gt;set origin 0.5,0.0&nbsp;&nbsp; %设置第四个图的原点的位置<br />
gnuplot&gt;set size 0.5,0.5&nbsp; %设置第四个图的大小<br />
gnuplot&gt;plot &#8220;a4.dat&#8221;<br />
当然，如果后一个图中的某个量的设置和前一个的相同，那么后一个中的这个量的设置可以省略。例如上面对第二、第三和第四个图的大小的设置。前一个图中对某个量的设置也会在后一个图中起作用。如果要取消在后面图中的作用，必须用如下命令，如取消label，用<br />
gnuplot&gt;unset label<br />
&nbsp;<br />
&nbsp;<br />
2、作二维图时，如何使两边坐标轴的单位长度等长<br />
gnuplot&gt; set size square&nbsp;&nbsp;&nbsp; %使图形是方的<br />
gnuplot&gt; set size 0.5,0.5&nbsp;&nbsp;&nbsp; %使图形是你要的大小<br />
gnuplot&gt; set xrange[-a:a]<br />
gnuplot&gt; set yrange[-a:a]&nbsp;&nbsp;&nbsp; %两坐标轴刻度范围一样<br />
gnuplot&gt; plot &#8216;a.dat&#8217;<br />
&nbsp;<br />
3、如何在同一张图里利用左右两边的y轴分别画图<br />
gnuplot&gt; set xtics nomirror&nbsp;&nbsp; %去掉上面坐标轴x2的刻度<br />
gnuplot&gt; set ytics nomirror&nbsp;&nbsp; %去掉右边坐标轴y2的刻度<br />
gnuplot&gt; set x2tics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %让上面坐标轴x2刻度自动产生<br />
gnuplot&gt; set y2tics&nbsp;&nbsp;&nbsp;&nbsp; %让右边坐标轴y2的刻度自动产生<br />
gnuplot&gt; plot sin(x),cos(x) axes x1y2&nbsp;&nbsp;&nbsp; %cos(x)用x1y2坐标，axes x1y2表示用x1y2坐标轴<br />
gnuplot&gt; plot sin(x),cos(x) axes x2y2&nbsp;&nbsp;&nbsp;&nbsp; %cos(x)用x2y2坐标，axes x2y2表示用x2y2坐标轴<br />
gnuplot&gt; set x2range[-20:20]&nbsp;&nbsp; %设定x2坐标的范围<br />
gnuplot&gt; replot<br />
gnuplot&gt; set xrange[-5:5]&nbsp; %设定x坐标的范围<br />
gnuplot&gt; replot<br />
gnuplot&gt; set xlabel 'x'<br />
gnuplot&gt; set x2label 't'<br />
gnuplot&gt; set ylabel 'y'<br />
gnuplot&gt; set y2label 's'<br />
gnuplot&gt; replot<br />
gnuplot&gt; set title 'The figure'<br />
gnuplot&gt; replot<br />
gnuplot&gt; set x2label 't' textcolor lt 3&nbsp;&nbsp;&nbsp; %textcolor lt 3或tc lt 3设置坐标轴名称的颜色<br />
&nbsp;<br />
4、如何插入希腊字母和特殊符号<br />
一般只能在ps和eps图中，且必须指定enhanced选项。在X11终端（即显示器）中无法显示。<br />
gnuplot&gt; set terminal postscript enhanced</p>
<p>然后希腊字母就可以通过{/Symbol a}输入。例如<br />
gnuplot&gt; set label &#8216;{/Symbol a}&#8217;<br />
&lt;!--[if !supportLineBreakNewLine]--&gt;<br />
&lt;!--[endif]--&gt;<br />
各种希腊字母与特殊符号的输入方法请见安装包中gnuplot-4.0.0/docs/psdoc目录下的ps_guide.ps文件。</p>
<p>另外还可参见：<br />
<a href="http://t16web.lanl.gov/Kawano/gnuplot/label-e.html#4.3">http://t16web.lanl.gov/Kawano/gnuplot/label-e.html#4.3</a><br />
&nbsp;<br />
5、gnuplot中如何插入Angstrom（埃）这个符号(A上面一个小圆圈)<br />
脚本中在插入前先加入<br />
gnuplot&gt;set encoding iso_8859_1<br />
这个命令，然后就可以通过&#8220;{\305}&#8221;加入了。如横坐标要标上&#8220;k(1/?)&#8221;：<br />
gnuplot&gt;set xlabel 'k(1/{\305})<br />
&nbsp;<br />
如果是multiplot模式，则这个命令必须放在<br />
gnuplot&gt;set multiplot<br />
的前面。<br />
&nbsp;<br />
如果后面还要插入别的转义字符，那么还要在插入字符后加入如下命令：<br />
set encoding default<br />
&nbsp;<br />
安装包中gnuplot-4.0.0/docs/psdoc/ps_guide.ps文件中的表中的&#8216;E&#8217;代表那一列的所有符号都用这个方法输入。<br />
&nbsp;<br />
6、gnuplot画等高线图<br />
gnuplot&gt;splot&nbsp; &#8216;文件名.dat&#8217;&nbsp; u 1:2:3&nbsp; w&nbsp; l&nbsp;&nbsp; %做三维图<br />
gnuplot&gt;set dgrid3d 100,100 %设置三维图表面的网格的数目<br />
gnuplot&gt;replot<br />
gnuplot&gt;set contour&nbsp;&nbsp;&nbsp; %设置画等高线<br />
gnuplot&gt;set cntrparam&nbsp; levels&nbsp; incremental -0.2,0.01,0.2&nbsp;&nbsp; %设置等高线的疏密和范围，数据从&nbsp;&nbsp; -0.2到0.2中间每隔0.01画一条线<br />
gnuplot&gt;unset surface&nbsp;&nbsp; 去掉上面的三维图形<br />
最后用鼠标拽动图形，选择合理的角度即可。或者直接设置(0,0)的视角也可以：<br />
gnuplot&gt;set view 0,0<br />
gnuplot&gt;replot<br />
&nbsp;<br />
这里注意，画三维图的数据文件必须是分块的，也就是x每变换一个值，y在其变化范围内变化一周，这样作为一块，然后再取一个x值，y再变化一周，作为下一数据块，等等。块与块之间用一空行格开。<br />
&nbsp;<br />
7、如何画漂亮的pm3d图<br />
gnuplot&gt; set pm3d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %设置pm3d模式<br />
gnuplot&gt; set isosamples 50,50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %设置网格点<br />
gnuplot&gt; splot x**2+y**2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ％画三维图<br />
gnuplot&gt; splot x**2+y**2 w pm3d&nbsp;&nbsp; ％画成pm3d模式，注意比较变化<br />
gnuplot&gt; set view 0,0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ％设置视角，（0，0）将投影到底面上去<br />
gnuplot&gt; splot x**2+y**2 w pm3d&nbsp;&nbsp; ％重画，注意看变化<br />
gnuplot&gt; unset ztics&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; %把z轴上的数字给去掉<br />
gnuplot&gt; set isosamples 200,200&nbsp;&nbsp;&nbsp;&nbsp; ％使网格变细<br />
gnuplot&gt; replot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ％重画，注意看变化，主要是过渡更光滑<br />
&nbsp;<br />
8、利用脚本文件避免重复输入<br />
有时候对某个数据文件做好一张图后，下次可能还要利用这个数据文件作图，但某个或某些设置要作些细微变化。这时候，可以把第一次作图时的命令全部写到一个文件里，如a.plt，下次只要将相应的设置做修改后，用下面的命令就会自动运行文件所有的命令而最后得到你要的图：<br />
gnuplot&gt;load &#8216;a.plt&#8217;<br />
作为一个例子，假设文件名为a.plt，里面的内容为：<br />
set pm3d <br />
set view 0,0 <br />
unset ztics <br />
set isosamples 200,200 <br />
splot x**2+y**2 w pm3d<br />
set term post color<br />
set output &#8216;a.ps&#8217;<br />
replot<br />
&nbsp;<br />
那么启动gnuplot后，只要运行如下命令就可以了：<br />
gnuplot&gt;load &#8216;a.plt&#8217;<br />
&nbsp;<br />
如果我们要得到的仅仅是.ps或.eps图，那也可以在linux命令提示符下直接运行如下命令：<br />
[zxh@theory zxh]$gnuplot a.plt<br />
&nbsp;<br />
9、在gnuplot模式下运行linux命令<br />
在gnuplot提示符下也可以运行linux命令，但必须在相应的命令前面加上 ! 号。例如，假设很多参量都已经设置好了，但需要对某个数据文件a.dat进行修改后再画图，则可以用如下方式<br />
gnuplot&gt;!vi a.dat<br />
通过这种方式，所有的linux命令都可以在gnuplot环境里运行。<br />
&nbsp;<br />
另外，也可以在gnuplot的提示符后输入shell，暂时性退出gnuplot，进入linux环境，做完要做的事情后，运行exit命令，又回到gnuplot环境下。<br />
gnuplot&gt;shell<br />
[zxh@theory zxh]$vi a.f<br />
[zxh@theory zxh]$f77 a.f<br />
[zxh@theory zxh]$a.out&nbsp;&nbsp;&nbsp; (假设生成a.dat数据文件)<br />
[zxh@theory zxh]$exit<br />
gnuplot&gt;plot &#8216;a.dat&#8217; w l<br />
&nbsp;<br />
如有其它问题，欢迎共同探讨。E-mail：<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#101;&#120;&#104;&#122;&#104;&#101;&#110;&#103;&#64;&#49;&#54;&#51;&#46;&#99;&#111;&#109;">exhzheng@163.com</a></p>
<p>&nbsp;原文地址 <a href="http://202.127.203.201/jilei/Gnuplot.htm">http://202.127.203.201/jilei/Gnuplot.htm</a></p>
<img src ="http://www.cnblogs.com/Aioria0622/aggbug/1290776.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42948/" target="_blank">[新闻]微软周一开电话会议 预计将发布Silverlight2.0</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>C/C++ 程序设计员应聘常见面试试题深入剖析(2)</title><link>http://www.cnblogs.com/Aioria0622/archive/2008/09/13/1290533.html</link><dc:creator>yijiangchunxue</dc:creator><author>yijiangchunxue</author><pubDate>Sat, 13 Sep 2008 10:49:00 GMT</pubDate><guid>http://www.cnblogs.com/Aioria0622/archive/2008/09/13/1290533.html</guid><wfw:comment>http://www.cnblogs.com/Aioria0622/comments/1290533.html</wfw:comment><comments>http://www.cnblogs.com/Aioria0622/archive/2008/09/13/1290533.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Aioria0622/comments/commentRss/1290533.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Aioria0622/services/trackbacks/1290533.html</trackback:ping><description><![CDATA[3.内功题<br />
<br />
　　试题1：分别给出BOOL，int，float，指针变量 与&#8220;零值&#8221;比较的 if 语句（假设变量名为var）<br />
<br />
　　解答：<br />
<br />
　　　BOOL型变量：if(!var)<br />
<br />
　　　int型变量： if(var==0)<br />
<br />
　　　float型变量：<br />
<br />
　　　const float EPSINON = 0.00001;<br />
<br />
　　　if ((x &gt;= - EPSINON) &amp;&amp; (x &lt;= EPSINON)<br />
<br />
　　　指针变量：　　if(var==NULL)<br />
<br />
　　剖析：<br />
<br />
　　考查对0值判断的&#8220;内功&#8221;，BOOL型变量的0判断完全可以写成if(var==0)，而int型变量也可以写成if(!var)，指针变量的判断也可以写成if(!var)，上述写法虽然程序都能正确运行，但是未能清晰地表达程序的意思。 <br />
　一般的，如果想让if判断一个变量的&#8220;真&#8221;、&#8220;假&#8221;，应直接使用if(var)、if(!var)，表明其为&#8220;逻辑&#8221;判断；如果用if判断一个数值型变量(short、int、long等)，应该用if(var==0)，表明是与0进行&#8220;数值&#8221;上的比较；而判断指针则适宜用if(var==NULL)，这是一种很好的编程习惯。<br />
<br />
　　浮点型变量并不精确，所以不可将float变量用&#8220;==&#8221;或&#8220;！=&#8221;与数字比较，应该设法转化成&#8220;&gt;=&#8221;或&#8220;&lt;=&#8221;形式。如果写成if (x == 0.0)，则判为错，得0分。<br />
<br />
　　试题2：以下为Windows NT下的32位C++程序，请计算sizeof的值
<div class="code">void Func ( char str[100] )<br />
{<br />
　sizeof( str ) = ?<br />
}<br />
<br />
void *p = malloc( 100 );<br />
sizeof ( p ) = ?</div>
　　解答：
<div class="code">sizeof( str ) = 4<br />
sizeof ( p ) = 4</div>
　　剖析：<br />
<br />
　　Func ( char str[100] )函数中数组名作为函数形参时，在函数体内，数组名失去了本身的内涵，仅仅只是一个指针；在失去其内涵的同时，它还失去了其常量特性，可以作自增、自减等操作，可以被修改。<br />
<br />
　　数组名的本质如下：<br />
<br />
　　（1）数组名指代一种数据结构，这种数据结构就是数组；<br />
<br />
　　例如：
<div class="code">char str[10];<br />
cout ＜＜ sizeof(str) ＜＜ endl;</div>
　　输出结果为10，str指代数据结构char[10]。<br />
<br />
　　（2）数组名可以转换为指向其指代实体的指针，而且是一个指针常量，不能作自增、自减等操作，不能被修改；
<div class="code">char str[10]; <br />
str++; //编译出错，提示str不是左值　</div>
　　（3）数组名作为函数形参时，沦为普通指针。<br />
<br />
　　Windows NT 32位平台下，指针的长度（占用内存的大小）为4字节，故sizeof( str ) 、sizeof ( p ) 都为4。<br />
<br />
　　试题3：写一个&#8220;标准&#8221;宏MIN，这个宏输入两个参数并返回较小的一个。另外，当你写下面的代码时会发生什么事？
<div class="code">least = MIN(*p++, b);</div>
　　解答：
<div class="code">#define MIN(A,B) ((A) &lt;= (B) ? (A) : (B))</div>
　　MIN(*p++, b)会产生宏的副作用<br />
<br />
　　剖析：<br />
<br />
　　这个面试题主要考查面试者对宏定义的使用，宏定义可以实现类似于函数的功能，但是它终归不是函数，而宏定义中括弧中的&#8220;参数&#8221;也不是真的参数，在宏展开的时候对&#8220;参数&#8221;进行的是一对一的替换。<br />
<br />
　　程序员对宏定义的使用要非常小心，特别要注意两个问题：<br />
<br />
　　（1）谨慎地将宏定义中的&#8220;参数&#8221;和整个宏用用括弧括起来。所以，严格地讲，下述解答：
<div class="code">#define MIN(A,B) (A) &lt;= (B) ? (A) : (B)<br />
#define MIN(A,B) (A &lt;= B ? A : B )</div>
　　都应判0分；<br />
<br />
　　（2）防止宏的副作用。<br />
<br />
　　宏定义#define MIN(A,B) ((A) &lt;= (B) ? (A) : (B))对MIN(*p++, b)的作用结果是：<br />
<br />
((*p++) &lt;= (b) ? (*p++) : (*p++))<br />
<br />
　　这个表达式会产生副作用，指针p会作三次++自增操作。<br />
<br />
　　除此之外，另一个应该判0分的解答是：
<div class="code">#define MIN(A,B) ((A) &lt;= (B) ? (A) : (B)); </div>
　　这个解答在宏定义的后面加&#8220;;&#8221;，显示编写者对宏的概念模糊不清，只能被无情地判0分并被面试官淘汰。<br />
<br />
　　试题4：为什么标准头文件都有类似以下的结构？
<div class="code">#ifndef __INCvxWorksh<br />
#define __INCvxWorksh <br />
#ifdef __cplusplus<br />
<br />
extern "C" {<br />
#endif <br />
/*...*/ <br />
#ifdef __cplusplus<br />
}<br />
<br />
#endif <br />
#endif /* __INCvxWorksh */</div>
　　解答：<br />
<br />
　　头文件中的编译宏
<div class="code">#ifndef　__INCvxWorksh<br />
#define　__INCvxWorksh<br />
#endif </div>
　　的作用是防止被重复引用。<br />
<br />
　　作为一种面向对象的语言，C++支持函数重载，而过程式语言C则不支持。函数被C++编译后在symbol库中的名字与C语言的不同。例如，假设某个函数的原型为：
<div class="code">void foo(int x, int y);</div>
　　该函数被C编译器编译后在symbol库中的名字为_foo，而C++编译器则会产生像_foo_int_int之类的名字。_foo_int_int这样的名字包含了函数名和函数参数数量及类型信息，C++就是考这种机制来实现函数重载的。<br />
<br />
　　为了实现C和C++的混合编程，C++提供了C连接交换指定符号extern "C"来解决名字匹配问题，函数声明前加上extern "C"后，则编译器就会按照C语言的方式将该函数编译为_foo，这样C语言中就可以调用C++的函数了。 
<img src ="http://www.cnblogs.com/Aioria0622/aggbug/1290533.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42947/" target="_blank">[新闻]开心网即将启用”shejiao.com”?</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>C/C++ 程序设计员应聘常见面试试题深入剖析(3)</title><link>http://www.cnblogs.com/Aioria0622/archive/2008/09/13/1290534.html</link><dc:creator>yijiangchunxue</dc:creator><author>yijiangchunxue</author><pubDate>Sat, 13 Sep 2008 10:49:00 GMT</pubDate><guid>http://www.cnblogs.com/Aioria0622/archive/2008/09/13/1290534.html</guid><wfw:comment>http://www.cnblogs.com/Aioria0622/comments/1290534.html</wfw:comment><comments>http://www.cnblogs.com/Aioria0622/archive/2008/09/13/1290534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Aioria0622/comments/commentRss/1290534.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Aioria0622/services/trackbacks/1290534.html</trackback:ping><description><![CDATA[试题5：编写一个函数，作用是把一个char组成的字符串循环右移n个。比如原来是&#8220;abcdefghi&#8221;如果n=2，移位后应该是&#8220;hiabcdefgh&#8221; <br />
<br />
　　函数头是这样的：
<div class="code">//pStr是指向以'\0'结尾的字符串的指针<br />
//steps是要求移动的n<br />
<br />
void LoopMove ( char * pStr, int steps )<br />
{<br />
　//请填充...<br />
}</div>
　　解答：<br />
<br />
　　正确解答1：
<div class="code">void LoopMove ( char *pStr, int steps )<br />
{<br />
　int n = strlen( pStr ) - steps;<br />
　char tmp[MAX_LEN]; <br />
　strcpy ( tmp, pStr + n ); <br />
　strcpy ( tmp + steps, pStr); <br />
　*( tmp + strlen ( pStr ) ) = '\0';<br />
　strcpy( pStr, tmp );<br />
}</div>
　　正确解答2：
<div class="code">void LoopMove ( char *pStr, int steps )<br />
{<br />
　int n = strlen( pStr ) - steps;<br />
　char tmp[MAX_LEN]; <br />
　memcpy( tmp, pStr + n, steps ); <br />
　memcpy(pStr + steps, pStr, n ); <br />
　memcpy(pStr, tmp, steps ); <br />
}</div>
　　剖析：<br />
<br />
　　这个试题主要考查面试者对标准库函数的熟练程度，在需要的时候引用库函数可以很大程度上简化程序编写的工作量。<br />
<br />
　　最频繁被使用的库函数包括：<br />
<br />
　　（1） strcpy<br />
<br />
　　（2） memcpy<br />
<br />
　　（3） memset<br />
<br />
　　试题6：已知WAV文件格式如下表，打开一个WAV文件，以适当的数据结构组织WAV文件头并解析WAV格式的各项信息。<br />
<br />
　　WAVE文件格式说明表
<table cellspacing="0" cellpadding="0" width="90%" align="center" border="1">
    <tr>
            <td>
            <p>&nbsp;</p>
            </td>
            <td>偏移地址</td>
            <td>字节数</td>
            <td>数据类型</td>
            <td>内 容</td>
        </tr>
        <tr>
            <td rowspan="13">文件头
            <p>&nbsp;</p>
            </td>
            <td>00H</td>
            <td>4 </td>
            <td>Char</td>
            <td>"RIFF"标志</td>
        </tr>
        <tr>
            <td>04H</td>
            <td>4</td>
            <td>int32</td>
            <td>文件长度</td>
        </tr>
        <tr>
            <td>08H</td>
            <td>4</td>
            <td>Char</td>
            <td>"WAVE"标志</td>
        </tr>
        <tr>
            <td>0CH</td>
            <td>4</td>
            <td>Char</td>
            <td>"fmt"标志</td>
        </tr>
        <tr>
            <td>10H</td>
            <td>4</td>
            <td></td>
            <td>过渡字节（不定）</td>
        </tr>
        <tr>
            <td>14H</td>
            <td>2</td>
            <td>int16</td>
            <td>格式类别</td>
        </tr>
        <tr>
            <td>16H</td>
            <td>2</td>
            <td>int16</td>
            <td>通道数</td>
        </tr>
        <tr>
            <td>18H</td>
            <td>2</td>
            <td>int16 </td>
            <td>采样率（每秒样本数），表示每个通道的播放速度</td>
        </tr>
        <tr>
            <td>1CH</td>
            <td>4</td>
            <td>int32</td>
            <td>波形音频数据传送速率</td>
        </tr>
        <tr>
            <td>20H</td>
            <td>2</td>
            <td>int16</td>
            <td>数据块的调整数（按字节算的）</td>
        </tr>
        <tr>
            <td>22H</td>
            <td>2</td>
            <td></td>
            <td>每样本的数据位数</td>
        </tr>
        <tr>
            <td>24H</td>
            <td>4</td>
            <td>Char</td>
            <td>数据标记符＂data＂</td>
        </tr>
        <tr>
            <td>28H</td>
            <td>4</td>
            <td>int32</td>
            <td>语音数据的长度</td>
        </tr>
    </table>
　　解答：<br />
<br />
　　将WAV文件格式定义为结构体WAVEFORMAT：
<div class="code">typedef struct tagWaveFormat<br />
{ <br />
　char cRiffFlag[4]; <br />
　UIN32 nFileLen; <br />
　char cWaveFlag[4]; <br />
　char cFmtFlag[4]; <br />
　char cTransition[4]; <br />
　UIN16 nFormatTag ; <br />
　UIN16 nChannels; <br />
　UIN16 nSamplesPerSec; <br />
　UIN32 nAvgBytesperSec; <br />
　UIN16 nBlockAlign; <br />
　UIN16 nBitNumPerSample; <br />
　char cDataFlag[4]; <br />
　UIN16 nAudioLength; <br />
<br />
} WAVEFORMAT;</div>
　　假设WAV文件内容读出后存放在指针buffer开始的内存单元内，则分析文件格式的代码很简单，为：
<div class="code">WAVEFORMAT waveFormat;<br />
memcpy( &amp;waveFormat, buffer,sizeof( WAVEFORMAT ) ); </div>
　　直接通过访问waveFormat的成员，就可以获得特定WAV文件的各项格式信息。<br />
<br />
　　剖析：<br />
<br />
　　试题6考查面试者组织数据结构的能力，有经验的程序设计者将属于一个整体的数据成员组织为一个结构体，利用指针类型转换，可以将memcpy、memset等函数直接用于结构体地址，进行结构体的整体操作。 透过这个题可以看出面试者的程序设计经验是否丰富。<br />
<br />
　　试题7：编写类String的构造函数、析构函数和赋值函数，已知类String的原型为：
<div class="code">class String<br />
{ <br />
　public: <br />
　　String(const char *str = NULL); // 普通构造函数 <br />
　　String(const String &amp;other); // 拷贝构造函数 <br />
　　~ String(void); // 析构函数 <br />
　　String &amp; operate =(const String &amp;other); // 赋值函数 <br />
　private: <br />
　　char *m_data; // 用于保存字符串 <br />
};</div>
　　解答：
<div class="code">//普通构造函数<br />
<br />
String::String(const char *str) <br />
{<br />
　if(str==NULL) <br />
　{<br />
　　m_data = new char[1]; // 得分点：对空字符串自动申请存放结束标志'\0'的空<br />
　　//加分点：对m_data加NULL 判断<br />
　　*m_data = '\0'; <br />
　} <br />
　else<br />
　{<br />
　　int length = strlen(str); <br />
　　m_data = new char[length+1]; // 若能加 NULL 判断则更好 <br />
　　strcpy(m_data, str); <br />
　}<br />
}<br />
<br />
// String的析构函数<br />
<br />
String::~String(void) <br />
{<br />
　delete [] m_data; // 或delete m_data;<br />
}<br />
<br />
//拷贝构造函数<br />
<br />
String::String(const String &amp;other) 　　　// 得分点：输入参数为const型<br />
{ <br />
　int length = strlen(other.m_data); <br />
　m_data = new char[length+1]; 　　　　//加分点：对m_data加NULL 判断<br />
　strcpy(m_data, other.m_data); <br />
}<br />
<br />
//赋值函数<br />
<br />
String &amp; String::operate =(const String &amp;other) // 得分点：输入参数为const型<br />
{ <br />
　if(this == &amp;other) 　　//得分点：检查自赋值<br />
　　return *this; <br />
　delete [] m_data; 　　　　//得分点：释放原有的内存资源<br />
　int length = strlen( other.m_data ); <br />
　m_data = new char[length+1]; 　//加分点：对m_data加NULL 判断<br />
　strcpy( m_data, other.m_data ); <br />
　return *this; 　　　　　　　　//得分点：返回本对象的引用<br />
}</div>
　　剖析：<br />
<br />
　　能够准确无误地编写出String类的构造函数、拷贝构造函数、赋值函数和析构函数的面试者至少已经具备了C++基本功的60%以上！<br />
<br />
　　在这个类中包括了指针类成员变量m_data，当类中包括指针类成员变量时，一定要重载其拷贝构造函数、赋值函数和析构函数，这既是对C++程序员的基本要求，也是《Effective　C++》中特别强调的条款。<br />
<br />
　　仔细学习这个类，特别注意加注释的得分点和加分点的意义，这样就具备了60%以上的C++基本功！<br />
<br />
　　试题8：请说出static和const关键字尽可能多的作用<br />
<br />
　　解答：<br />
<br />
　　static关键字至少有下列n个作用：<br />
<br />
　　（1）函数体内static变量的作用范围为该函数体，不同于auto变量，该变量的内存只被分配一次，因此其值在下次调用时仍维持上次的值；<br />
<br />
　　（2）在模块内的static全局变量可以被模块内所用函数访问，但不能被模块外其它函数访问；<br />
<br />
　　（3）在模块内的static函数只可被这一模块内的其它函数调用，这个函数的使用范围被限制在声明它的模块内；<br />
<br />
　　（4）在类中的static成员变量属于整个类所拥有，对类的所有对象只有一份拷贝；<br />
<br />
　　（5）在类中的static成员函数属于整个类所拥有，这个函数不接收this指针，因而只能访问类的static成员变量。 <br />
<br />
　　const关键字至少有下列n个作用：<br />
<br />
　　（1）欲阻止一个变量被改变，可以使用const关键字。在定义该const变量时，通常需要对它进行初始化，因为以后就没有机会再去改变它了；<br />
<br />
　　（2）对指针来说，可以指定指针本身为const，也可以指定指针所指的数据为const，或二者同时指定为const；<br />
<br />
　　（3）在一个函数声明中，const可以修饰形参，表明它是一个输入参数，在函数内部不能改变其值；<br />
<br />
　　（4）对于类的成员函数，若指定其为const类型，则表明其是一个常函数，不能修改类的成员变量；<br />
<br />
　　（5）对于类的成员函数，有时候必须指定其返回值为const类型，以使得其返回值不为&#8220;左值&#8221;。例如：
<div class="code">const classA operator*(const classA&amp; a1,const classA&amp; a2);</div>
　　operator*的返回结果必须是一个const对象。如果不是，这样的变态代码也不会编译出错：
<div class="code">classA a, b, c;<br />
(a * b) = c; // 对a*b的结果赋值</div>
　　操作(a * b) = c显然不符合编程者的初衷，也没有任何意义。<br />
<br />
　　剖析：<br />
<br />
　　惊讶吗？小小的static和const居然有这么多功能，我们能回答几个？如果只能回答1~2个，那还真得闭关再好好修炼修炼。<br />
<br />
　　这个题可以考查面试者对程序设计知识的掌握程度是初级、中级还是比较深入，没有一定的知识广度和深度，不可能对这个问题给出全面的解答。大多数人只能回答出static和const关键字的部分功能。<br />
<br />
　　4.技巧题<br />
<br />
　　试题1：请写一个C函数，若处理器是Big_endian的，则返回0；若是Little_endian的，则返回1<br />
<br />
　　解答：
<div class="code">int checkCPU()<br />
{<br />
　{<br />
　　union w<br />
　　{ <br />
　　　int a;<br />
　　　char b;<br />
　　} c;<br />
　　c.a = 1;<br />
　　return (c.b == 1);<br />
　}<br />
}</div>
　　剖析：<br />
<br />
　　嵌入式系统开发者应该对Little-endian和Big-endian模式非常了解。采用Little-endian模式的CPU对操作数的存放方式是从低字节到高字节，而Big-endian模式对操作数的存放方式是从高字节到低字节。例如，16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式（假设从地址0x4000开始存放）为：
<table cellspacing="0" cellpadding="0" width="72%" align="center" border="1">
    <tr>
            <td>内存地址</td>
            <td>存放内容</td>
        </tr>
        <tr>
            <td>0x4000</td>
            <td>0x34</td>
        </tr>
        <tr>
            <td>0x4001</td>
            <td>0x12</td>
        </tr>
    </table>
<br />
　　而在Big-endian模式CPU内存中的存放方式则为：<br />
<br />
<table cellspacing="0" cellpadding="0" width="72%" align="center" border="1">
    <tr>
            <td>内存地址</td>
            <td>存放内容</td>
        </tr>
        <tr>
            <td>0x4000</td>
            <td>0x12</td>
        </tr>
        <tr>
            <td>0x4001</td>
            <td>0x34</td>
        </tr>
    </table>
<br />
　　32bit宽的数0x12345678在Little-endian模式CPU内存中的存放方式（假设从地址0x4000开始存放）为：
<table cellspacing="0" cellpadding="0" width="72%" align="center" border="1">
    <tr>
            <td>内存地址</td>
            <td>存放内容</td>
        </tr>
        <tr>
            <td>0x4000</td>
            <td>0x78</td>
        </tr>
        <tr>
            <td>0x4001</td>
            <td>0x56</td>
        </tr>
        <tr>
            <td>0x4002</td>
            <td>0x34</td>
        </tr>
        <tr>
            <td>0x4003</td>
            <td>0x12</td>
        </tr>
    </table>
　　而在Big-endian模式CPU内存中的存放方式则为：<br />
<br />
<table cellspacing="0" cellpadding="0" width="72%" align="center" border="1">
    <tr>
            <td>内存地址</td>
            <td>存放内容</td>
        </tr>
        <tr>
            <td>0x4000</td>
            <td>0x12</td>
        </tr>
        <tr>
            <td>0x4001</td>
            <td>0x34</td>
        </tr>
        <tr>
            <td>0x4002</td>
            <td>0x56</td>
        </tr>
        <tr>
            <td>0x4003</td>
            <td>0x78</td>
        </tr>
    </table>
　　联合体union的存放顺序是所有成员都从低地址开始存放，面试者的解答利用该特性，轻松地获得了CPU对内存采用Little-endian还是Big-endian模式读写。如果谁能当场给出这个解答，那简直就是一个天才的程序员。<br />
<br />
　　试题2：写一个函数返回1+2+3+&#8230;+n的值（假定结果不会超过长整型变量的范围） <br />
<br />
　　解答：
<div class="code">int Sum( int n )<br />
{ <br />
　return ( (long)1 + n) * n / 2;　　//或return (1l + n) * n / 2;<br />
}</div>
　　剖析：<br />
　<br />
　　对于这个题，只能说，也许最简单的答案就是最好的答案。下面的解答，或者基于下面的解答思路去优化，不管怎么&#8220;折腾&#8221;，其效率也不可能与直接return ( 1 l + n ) * n / 2相比！
<div class="code">int Sum( int n )<br />
{<br />
　long sum = 0;<br />
　for( int i=1; i&lt;=n; i++ )<br />
　{<br />
　　sum += i;<br />
　}<br />
　return sum;<br />
} </div>
　　所以程序员们需要敏感地将数学等知识用在程序设计中。 
<img src ="http://www.cnblogs.com/Aioria0622/aggbug/1290534.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42947/" target="_blank">[新闻]开心网即将启用”shejiao.com”?</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>C/C++ 程序设计员应聘常见面试试题深入剖析(1)</title><link>http://www.cnblogs.com/Aioria0622/archive/2008/09/13/1290532.html</link><dc:creator>yijiangchunxue</dc:creator><author>yijiangchunxue</author><pubDate>Sat, 13 Sep 2008 10:48:00 GMT</pubDate><guid>http://www.cnblogs.com/Aioria0622/archive/2008/09/13/1290532.html</guid><wfw:comment>http://www.cnblogs.com/Aioria0622/comments/1290532.html</wfw:comment><comments>http://www.cnblogs.com/Aioria0622/archive/2008/09/13/1290532.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Aioria0622/comments/commentRss/1290532.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Aioria0622/services/trackbacks/1290532.html</trackback:ping><description><![CDATA[1.引言 <br />
<br />
　　本文的写作目的并不在于提供C/C++程序员求职面试指导，而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛，部分试题解答也参考了网友的意见。<br />
<br />
　　许多面试题看似简单，却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度，我们能真正写好一个strcpy函数吗？我们都觉得自己能，可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到strcpy函数从2分到10分解答的例子，看看自己属于什么样的层次。此外，还有一些面试题考查面试者敏捷的思维能力。 <br />
<br />
　　分析这些面试题，本身包含很强的趣味性；而作为一名研发人员，通过对这些面试题的深入剖析则可进一步增强自身的内功。<br />
<br />
<strong>　　2.找错题</strong><br />
<br />
　　试题1：
<div class="code">void test1()<br />
{<br />
　char string[10];<br />
　char* str1 = "0123456789";<br />
　strcpy( string, str1 );<br />
}</div>
　　试题2：
<div class="code">void test2()<br />
{<br />
　char string[10], str1[10];<br />
　int i;<br />
　for(i=0; i&lt;10; i++)<br />
　{<br />
　　str1[i] = 'a';<br />
　}<br />
　strcpy( string, str1 );<br />
}</div>
　　试题3：
<div class="code">void test3(char* str1)<br />
{<br />
　char string[10];<br />
　if( strlen( str1 ) &lt;= 10 )<br />
　{<br />
　　strcpy( string, str1 );<br />
　}<br />
}</div>
　　解答：<br />
<br />
　　试题1字符串str1需要11个字节才能存放下（包括末尾的&#8217;\0&#8217;），而string只有10个字节的空间，strcpy会导致数组越界；<br />
<br />
　　对试题2，如果面试者指出字符数组str1不能在数组内结束可以给3分；如果面试者指出strcpy(string, str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分，在此基础上指出库函数strcpy工作方式的给10分；<br />
<br />
　　对试题3，if(strlen(str1) &lt;= 10)应改为if(strlen(str1) &lt; 10)，因为strlen的结果未统计&#8217;\0&#8217;所占用的1个字节。<br />
<br />
　　剖析：<br />
<br />
　　考查对基本功的掌握：<br />
<br />
　　(1)字符串以&#8217;\0&#8217;结尾；<br />
<br />
　　(2)对数组越界把握的敏感度；<br />
<br />
　　(3)库函数strcpy的工作方式，如果编写一个标准strcpy函数的总分值为10，下面给出几个不同得分的答案：<br />
<br />
　　2分
<div class="code">void strcpy( char *strDest, char *strSrc )<br />
{<br />
　 while( (*strDest++ = * strSrc++) != &#8216;\0&#8217; );<br />
}</div>
　　4分
<div class="code">void strcpy( char *strDest, const char *strSrc ) <br />
//将源字符串加const，表明其为输入参数，加2分<br />
{<br />
　 while( (*strDest++ = * strSrc++) != &#8216;\0&#8217; );<br />
}</div>
　　7分
<div class="code">void strcpy(char *strDest, const char *strSrc) <br />
{<br />
　//对源地址和目的地址加非0断言，加3分<br />
　assert( (strDest != NULL) &amp;&amp; (strSrc != NULL) );<br />
　while( (*strDest++ = * strSrc++) != &#8216;\0&#8217; );<br />
}</div>
　　10分
<div class="code">//为了实现链式操作，将目的地址返回，加3分！<br />
<br />
char * strcpy( char *strDest, const char *strSrc ) <br />
{<br />
　assert( (strDest != NULL) &amp;&amp; (strSrc != NULL) );<br />
　char *address = strDest; <br />
　while( (*strDest++ = * strSrc++) != &#8216;\0&#8217; ); <br />
　　return address;<br />
}</div>
　　从2分到10分的几个答案我们可以清楚的看到，小小的strcpy竟然暗藏着这么多玄机，真不是盖的！需要多么扎实的基本功才能写一个完美的strcpy啊！<br />
<br />
　　(4)对strlen的掌握，它没有包括字符串末尾的'\0'。<br />
<br />
　　读者看了不同分值的strcpy版本，应该也可以写出一个10分的strlen函数了，完美的版本为： int strlen( const char *str ) //输入参数const
<div class="code">{<br />
　assert( strt != NULL ); //断言字符串地址非0<br />
　int len;<br />
　while( (*str++) != '\0' ) <br />
　{ <br />
　　len++; <br />
　} <br />
　return len;<br />
}</div>
　　试题4：
<div class="code">void GetMemory( char *p )<br />
{<br />
　p = (char *) malloc( 100 );<br />
}<br />
<br />
void Test( void ) <br />
{<br />
　char *str = NULL;<br />
　GetMemory( str ); <br />
　strcpy( str, "hello world" );<br />
　printf( str );<br />
}</div>
　　试题5：
<div class="code">char *GetMemory( void )<br />
{ <br />
　char p[] = "hello world"; <br />
　return p; <br />
}<br />
<br />
void Test( void )<br />
{ <br />
　char *str = NULL; <br />
　str = GetMemory(); <br />
　printf( str ); <br />
}</div>
　　试题6：
<div class="code">void GetMemory( char **p, int num )<br />
{<br />
　*p = (char *) malloc( num );<br />
}<br />
<br />
void Test( void )<br />
{<br />
　char *str = NULL;<br />
　GetMemory( &amp;str, 100 );<br />
　strcpy( str, "hello" ); <br />
　printf( str ); <br />
}</div>
　　试题7：
<div class="code">void Test( void )<br />
{<br />
　char *str = (char *) malloc( 100 );<br />
　strcpy( str, "hello" );<br />
　free( str ); <br />
　... //省略的其它语句<br />
}</div>
　　解答：<br />
<br />
　　试题4传入中GetMemory( char *p )函数的形参为字符串指针，在函数内部修改形参并不能真正的改变传入形参的值，执行完
<div class="code">char *str = NULL;<br />
GetMemory( str ); </div>
　　后的str仍然为NULL；<br />
<br />
　　试题5中
<div class="code">char p[] = "hello world"; <br />
return p; </div>
　　的p[]数组为函数内的局部自动变量，在函数返回后，内存已经被释放。这是许多程序员常犯的错误，其根源在于不理解变量的生存期。<br />
<br />
　　试题6的GetMemory避免了试题4的问题，传入GetMemory的参数为字符串指针的指针，但是在GetMemory中执行申请内存及赋值语句
<div class="code">*p = (char *) malloc( num );</div>
　　后未判断内存是否申请成功，应加上：
<div class="code">if ( *p == NULL )<br />
{<br />
　...//进行申请内存失败处理<br />
}</div>
　　试题7存在与试题6同样的问题，在执行
<div class="code">char *str = (char *) malloc(100);</div>
　　后未进行内存是否申请成功的判断；另外，在free(str)后未置str为空，导致可能变成一个&#8220;野&#8221;指针，应加上：
<div class="code">str = NULL;</div>
　　试题6的Test函数中也未对malloc的内存进行释放。<br />
<br />
　　剖析：<br />
<br />
　　试题4～7考查面试者对内存操作的理解程度，基本功扎实的面试者一般都能正确的回答其中50~60的错误。但是要完全解答正确，却也绝非易事。<br />
<br />
　　对内存操作的考查主要集中在：<br />
<br />
　　（1）指针的理解；<br />
<br />
　　（2）变量的生存期及作用范围；<br />
<br />
　　（3）良好的动态内存申请和释放习惯。<br />
<br />
　　再看看下面的一段程序有什么错误：
<div class="code">swap( int* p1,int* p2 )<br />
{<br />
　int *p;<br />
　*p = *p1;<br />
　*p1 = *p2;<br />
　*p2 = *p;<br />
}</div>
　　在swap函数中，p是一个&#8220;野&#8221;指针，有可能指向系统区，导致程序运行的崩溃。在VC++中DEBUG运行时提示错误&#8220;Access Violation&#8221;。该程序应该改为：
<div class="code">swap( int* p1,int* p2 )<br />
{<br />
　int p;<br />
　p = *p1;<br />
　*p1 = *p2;<br />
　*p2 = p;<br />
}</div>
<img src ="http://www.cnblogs.com/Aioria0622/aggbug/1290532.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42947/" target="_blank">[新闻]开心网即将启用”shejiao.com”?</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>几种用于WSN的仿真工具</title><link>http://www.cnblogs.com/Aioria0622/archive/2008/09/12/1290188.html</link><dc:creator>yijiangchunxue</dc:creator><author>yijiangchunxue</author><pubDate>Fri, 12 Sep 2008 12:59:00 GMT</pubDate><guid>http://www.cnblogs.com/Aioria0622/archive/2008/09/12/1290188.html</guid><wfw:comment>http://www.cnblogs.com/Aioria0622/comments/1290188.html</wfw:comment><comments>http://www.cnblogs.com/Aioria0622/archive/2008/09/12/1290188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/Aioria0622/comments/commentRss/1290188.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Aioria0622/services/trackbacks/1290188.html</trackback:ping><description><![CDATA[<p align="left"><span style="color: black; font-family: 宋体">为评价无线传感器网络协议算法的性能，仅通过实验是无法实现的，特别是包含大量节点的大规模无线传感器网络，更是很难通过实验来实现</span><span style="color: black; font-family: 宋体">(</span><span style="color: black; font-family: 宋体">实际上，上百个节点的实验己经比较难以管理与实现</span><span style="color: black; font-family: 宋体">)</span><span style="color: black; font-family: 宋体">。&nbsp;
<p></span></p>
<p align="left"><span style="color: black; font-family: 宋体">为了实现无线传感器网络的仿真，研究人员设计开发</span><span style="color: black; font-family: 宋体">(</span><span style="color: black; font-family: 宋体">或在现有平台建立无线传感器网络模型</span><span style="color: black; font-family: 宋体">)</span><span style="color: black; font-family: 宋体">了许多的仿真平台，包括</span><span style="color: black; font-family: 宋体">NS-2, OPNET, &nbsp;SensorSim, EmStar, OMNet, G1oMoSim, TOSSIM, PowerTOSSIM</span><span style="color: black; font-family: 宋体">等。</span><span style="color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: black; font-family: 宋体">
<p></span></p>
<p align="left"><strong><span style="color: black; font-family: 宋体">NS-2</span></strong><span style="color: black; font-family: 宋体">
<p></span></p>
<p align="left"><span style="color: black; font-family: 宋体">NS-2 (Network Simulator-2)</span><span style="color: black; font-family: 宋体">是著名的用于网络研究的离散事件仿真工具，里面包括了大量的用于在有线或无线、本地连接或通过卫星连接进行</span><span style="color: black; font-family: 宋体">TCP</span><span style="color: black; font-family: 宋体">协议、路由算法、多播协议仿真的网络协议、调度器和工具。</span><span style="color: black; font-family: 宋体">NS-2</span><span style="color: black; font-family: 宋体">主要致力于</span><span style="color: black; font-family: 宋体">OSI</span><span style="color: black; font-family: 宋体">模型的仿真，包括物理层的行为。</span><span style="color: black; font-family: 宋体">NS-2</span><span style="color: black; font-family: 宋体">可以对仿真进行详细的跟踪并用仿真工具&#8220;网络动画播放器&#8221;</span><span style="color: black; font-family: 宋体">C Network Animator } NAM)</span><span style="color: black; font-family: 宋体">进行回放。</span><span style="color: black; font-family: 宋体">NS-2</span><span style="color: black; font-family: 宋体">是开放源码的自由软件，可以免费下载</span><span style="color: black; font-family: 宋体">[[1]</span><span style="color: black; font-family: 宋体">。有一些研究小组对</span><span style="color: black; font-family: 宋体">NS-2</span><span style="color: black; font-family: 宋体">进行了扩展，使它能支持无线传感器网络的仿真，包括传感器模型、电池模型、小型的协议栈、混合仿真的支持和场景工具等。由于</span><span style="color: black; font-family: 宋体">NS-2</span><span style="color: black; font-family: 宋体">对数据包级进行非常详细的仿真，接近于运行时的数据包数量，使得其无法进行大规模网络的仿真。</span>&nbsp;<span style="color: black; font-family: 宋体">
<p></span></p>
<p align="left"><strong><span style="color: black; font-family: 宋体">OPNET</span></strong><span style="color: black; font-family: 宋体">
<p></span></p>
<p align="left"><span style="color: black; font-family: 宋体">OPNET</span><span style="color: black; font-family: 宋体">建模工具是商业化的通信网络仿真平台。</span><span style="color: black; font-family: 宋体">OPNET</span><span style="color: black; font-family: 宋体">采用网络、节点和过程三层模型实现对网