ºìÁªLinuxÃÅ»§
Linux°ïÖú

PPS2013У԰ÕÐÆ¸±ÊÊÔÌâ

·¢²¼Ê±¼ä:2014-06-21 09:57:27À´Ô´:ºìÁª×÷Õß:velcbo
Ò»¡¢¼ò´ðÌâ
£¨1£©Ò»Î»ÀÏʦÓÐ2¸öÍÆÀíÄÜÁ¦ºÜÇ¿µÄѧÉú£¬Ëû¸æËßѧÉúËûÊÖÀïÓÐÒÔϵÄÅÆ£º
ºÚÌÒ£º2 £¬ 5 £¬ 7 £¬ 9 £¬ J £¬ K
ºìÐÄ£º3 £¬ 4 £¬ 9 £¬ J £¬ K
÷»¨£º5 £¬ 8 £¬ 9 £¬ Q
·½¿é£º2 £¬ 7 £¬ 8
È»ºó´ÓÖÐÄóöÒ»ÕÅÅÆ£¬¸æËßAÕâÕÅÅÆµÄ´óС£¬¸æËßÁËBÕâÕÅÅÆµÄ»¨É«£»
A£ºÎÒ²»ÖªµÀÕâÕÅÊÇÊ²Ã´ÅÆ
B£ºÎÒ¾ÍÖªµÀÄã¿Ï¶¨²»ÖªµÀÕâÕÅÊÇÊ²Ã´ÅÆ
A£ºÏÖÔÚÎÒÖªµÀ
B£ºÏÖÔÚÎÒÒ²ÖªµÀÁË
ÇëÎÊÕâÕÅÊÇÊ²Ã´ÅÆ£¿
´ð£º·½¿é8

£¨2£©ÓÐ11¸öƹÅÒÇò£¬ÆäÖÐÓÐÒ»¸öÇòÊÇαÁÓ²úÆ·²¢´æÔÚÖÊÁ¿½ÏÇáµÄÎÊÌ⣬ÏÖÓÐÒ»¸öûÓÐíÀÂëµÄÌìÆ½£¬Ö»ÄܳÆ3´Î°ÑÄǸö¼Ù»õ¸ø³Æ³öÀ´¡£
´ð£º
µÚÒ»´Î£¬ÌìÆ½Á½¶Ë¸÷·Å5¸öƹÅÒÇò£¬Èç¹ûÌìÆ½Æ½ºâ£¬ÄÇôʣϵÄÄǸö¾ÍÊÇαÁÓ²úÆ·¡£
Èç¹û²»Æ½ºâ£¬Ôò½«ÌìÆ½½ÏÇáÄǶ˵Ä5¸öƹÅÒÇòÑ¡³öÀ´£¬È»ºóÔÚÌìÆ½Á½¶Ë¸÷·Å2¸öƹÅÒÇò£¬Èç¹ûÌìÆ½Æ½ºâ£¬ÄÇôʣϵÄÄǸö¾ÍÊÇαÁÓ²úÆ·¡£·ñÔò£¬½«ÌìÆ½½ÏÇáÄǶ˵Ä2¸öƹÅÒÇòÑ¡³öÀ´£¬·ÅÔÚÌìÆ½ÉÏÖØÐ²âÁ¿£¬ÌìÆ½½ÏÇá¶ËµÄÄǸöƹÅÒÇò¾ÍÊÇαÁÓ²úÆ·¡£

£¨3£©ËµÃ÷Ö¸ÕëÓëÒýÓõÄÇø±ð¡£
´ð£º¡ñÖ¸ÕëÊÇÒ»¸öʵÌ壬¶øÒýÓýöÊǸö±ðÃû£»
¡ñÒýÓÃÖ»ÄÜÔÚ¶¨Òåʱ±»³õʼ»¯Ò»´Î£¬Ö®ºó²»¿É±ä£»Ö¸Õë¿É±ä£»ÒýÓá°´ÓÒ»¶øÖÕ¡±£¬Ö¸Õë¿ÉÒÔ¡°¼ûÒì˼Ǩ¡±£»
¡ñÒýÓÃûÓÐconst£¬Ö¸ÕëÓÐconst£¬constµÄÖ¸Õë²»¿É±ä£»
¡ñÒýÓò»ÄÜΪ¿Õ£¬Ö¸Õë¿ÉÒÔΪ¿Õ£»
¡ñ¡°sizeof ÒýÓᱵõ½µÄÊÇËùÖ¸ÏòµÄ±äÁ¿(¶ÔÏó)µÄ´óС£¬¶ø¡°sizeof Ö¸Õ롱µÃµ½µÄÊÇÖ¸Õë±¾ÉíµÄ´óС£»
¡ñÖ¸ÕëºÍÒýÓõÄ×ÔÔö(++)ÔËËãÒâÒå²»Ò»Ñù£»
¡ñÒýÓÃÊÇÀàÐͰ²È«µÄ£¬¶øÖ¸Õë²»ÊÇ (ÒýÓñÈÖ¸Õë¶àÁËÀàÐͼì²é
´ÓÄÚ´æ·ÖÅäÉÏ¿´£º³ÌÐòΪָÕë±äÁ¿·ÖÅäÄÚ´æÇøÓò£¬¶øÒýÓò»·ÖÅäÄÚ´æÇøÓò¡£Ö¸Õ룺ָÏòÁíÒ»¸öÄÚ´æ¿Õ¼äµÄ±äÁ¿£¬ÎÒÃÇ¿ÉÒÔͨ¹ýËüÀ´Ë÷ÒýÁíÒ»¸öÄÚ´æ¿Õ¼äµÄÄÚÈÝ£¬±¾ÉíÓÐ×Ô¼ºµÄÄÚ´æ¿Õ¼ä¡£

£¨4£©ÁгöC++ÀàÐÍת»»²Ù×÷·û£¬²¢·Ö±ð¾ÙÀý¡£
dynamic_cast: ÔÚ¶à̬ÀàÐÍת»»Ê±Ê¹Óã¬ÓÃÀ´Ö´Ðм̳ÐÌåϵÖÐ"°²È«µÄÏòÏÂתÐÍ»ò¿çϵתÐͶ¯×÷",¾ÍÊÇ×ÓÀà¶ÔÏóÖ¸Õëת»¯Îª¸¸Àà¶ÔÏóÖ¸Õ롣ʵÏÖÔÚÔËÐÐʱ£¬²¢½øÐÐÔËÐÐʱ¼ì²â£¬Èç¹ûת»»Ê§°Ü£¬·µ»ØÖµÊÇNULL¡£
static_cast£ºÓëdynamic_castÏà·´£¬static_castÊÇÔÚ±àÒëʱת»»ÀàÐ͵ģ¬¹Ê³ÆÎªstatic_cast£¬Ëü¿ÉÒÔÓÃÔÚÖµÀàÐÍת»»ÖÐ
const_cast£ºÒ»°ãÓÃÓÚÈ¥³ýconst, volatileµÈÐÞÊÎÊôÐÔÉÏ.
reinterpret_cast£ºÌØÒâÓÃÓڵײãµÄÇ¿ÖÆ×ªÐÍ£¬Õâ¸ö²Ù×÷·ûÄܹ»ÔÚ·ÇÏà¹ØµÄÀàÐÍÖ®¼äת»»¡£²Ù×÷½á¹ûÖ»ÊǼòµ¥µÄ´ÓÒ»¸öÖ¸Õëµ½±ðµÄÖ¸ÕëµÄÖµµÄ¶þ½øÖÆ¿½±´¡£ÔÚÀàÐÍÖ®¼äÖ¸ÏòµÄÄÚÈݲ»×öÈκÎÀàÐ͵ļì²éºÍת»»¡£

£¨5£©Ð´¸ö¼òµ¥µÄº¯Êý£¬ÓÃÓÚÅжÏCPUµÄ×Ö½ÚÐò£¨little endian/big endian£©

//Èô´¦ÀíÆ÷ÊÇBig_endianµÄ£¬Ôò·µ»Ø0£»ÈôÊÇLittle_endianµÄ£¬Ôò·µ»Ø1¡£[code]int checkCPU(void)
{
union
{
int a;
char b;
}c;
c.a = 1;
return (c.b == 1);
}[/code]£¨6£©ÊµÏÖÒ»¸ö128λÕûÊýµÄÀ࣬²¢ÇÒÍê³ÉºóÃæµÄº¯Êý£¬²âÊÔÒ»¸öÊýÊÇ·ñÎªËØÊý¡£[code]class int128
{
};
bool isPrime(int128 & number)
{
...
}[/code]´ð£º[code]#include
#include
#include
#include
#include
using namespace std;

class int128;

void shift(int128 & in,deque & de);

template
bool operator<(bitset const& b1,bitset const& b2)
{
int i=N;
while( i-- && b1[i]==b2[i] ) { }

return ((-1 == i) ? false : (b1[i]}

class int128
{
bitset<128> number;
public:
explicit int128(string str):number(str){}
int128(bitset<128>const& b):number(b){}
int128(int a = 0 , int b = 0 , int c = 0 , int d = 0)
{
bitset<32> b1(a),b2(b),b3(c),b4(d);
int i, k = 128;
for(i = 32 ; i ; number[--k] = b1[--i]) { }
for(i = 32 ; i ; number[--k] = b2[--i]) { }
for(i = 32 ; i ; number[--k] = b3[--i]) { }
for(i = 32 ; i ; number[--k] = b4[--i]) { }
}
bool operator[](size_t i)const
{
return number[i];
}
bitset<128>::reference operator[](size_t i)
{
return number[i];
}
friend bool operator<(int128 const& i1,int128 const& i2)
{
return i1.number < i2.number;
}

friend int128 operator+(int128 const& i1,int128 const& i2)
{
if(i1 == 0)
return i2;
if(i2 == 0)
return i1;
int128 result;
bitset<2> sum;

for(int i = 0 ; i < 128 ; ++i)
{
sum=i1[i]+i2[i]+sum.to_ulong();
result[i]=sum[0];
sum>>=1;
}
return result;
}

friend int128 operator-(int128 const& i1,int128 const& i2)
{
if(i2==0)
return i1;

int128 result=i1;

for(int i = 0 ; i < 128 ; ++i)
{
if(i2[i] == 0) {}
else
{
if(result[i] == 1)
result[i] = 0;
else
{
int k = i;
while(k < 128 && result[k] == 0)
{
result[k] = 1;
++k;
}
if(k != 128)
result[k] = 0;
}
}
}

return result;
}
friend int128 operator*(int128 const& i1,int128 const& i2)
{
if(i1==0 || i2==0)
return int128();
if(i1==1)
return i2;
if(i2==1)
return i1;

int128 acc=int128();

for(int i=0;i<128;++i)
{
if(i2[i]==1)
{
acc=acc+(i1< }
}

return acc;
}
friend int128 operator/(int128 const& i1,int128 const& i2)
{
if(i1 < i2)
return int128();
deque de;
bool flag = 0;
for(int i = 127 ; i >= 0 ; --i)
{
if(flag == 0 && i1[i] == 0) {}
else
{
flag = 1;
de.push_back(i1[i]);
}
}

int128 div = int128();
int128 result = int128();

while(!de.empty())
{
shift(div,de);
if(div < i2)
{
result = result<<1;
}
else
{
result = (result<<1) + int128(0,0,0,1);
div = div - i2;
}
}

return result;
}
friend int128 operator%(int128 const& i1,int128 const& i2)
{
if(i1 < i2)
return i1;
deque de;
bool flag = 0;
for(int i = 127 ; i >= 0 ; --i)
{
if(flag == 0 && i1[i] == 0) {}
else
{
flag = 1;
de.push_back(i1[i]);
}
}

int128 div = int128();
int128 result = int128();

while(!de.empty())
{
shift(div,de);
if(div < i2)
{
result = result<<1;
}
else
{
result = (result<<1) + int128(0,0,0,1);
div = div - i2;
}
}

return div;
}
friend bool operator==(int128 const& i,int const k)
{
bitset<32> bb(k);
for(int g = 0 ; g < 32 ; ++g)
{
if(i[g] != bb[g])
return 0;
}
return 1;
}
void operator=(bitset<128>const& b)
{
number = b;
}
friend ostream& operator<<(ostream& o,int128 const& i)
{
o< return o;
}
int128 operator<<(size_t step)const
{
return int128(number< }
unsigned long to_ulong()const
{
return *((unsigned long*)&number);
}

public:
bool ToDecimalStr(std::string &str)
{
str.clear();
char buf[128] = {0};
int128 Radix(0, 0, 0, 10);
for(int128 num = number; !(num == 0); num = num/Radix)
{
if( sprintf_s(buf, 64, "%d", ((int)(num%Radix).to_ulong())) < 0 )
{
return false;
}
str = buf + str;
}
return true;
}

static void Print(int128 & data, bool bEndl = true)
{
string str;
if( data.ToDecimalStr(str) )
{
printf("%s%s", str.c_str(), (bEndl?"\n":""));
}
}
};

static int128 const one = int128(0,0,0,1);

template
void add_one(bitset& b)
{
int i = 0;
while(i < N && b[i] == 1)
{
b[i] = 0;
++i;
}
if(i == N)
return;
b[i] = 1;
}

void add_one(int128& k)
{
int i = 0;
while(i < 128 && k[i] == 1)
{
k[i] = 0;
++i;
}
if(i == 128)
return;
k[i] = 1;
}

void shift(int128 & in,deque & de)
{
if(de.front()==1)
{
de.pop_front();
in=(in<<1)+one;
}
else
{
de.pop_front();
in=in<<1;
}
}

bool IsPrime(int128 const& number)
{
for(int128 i = int128(0,0,0,2) ; i < number ; add_one(i))
{
if(number%i == 0)
return 0;
}
return 1;
}[/code]£¨7£©¶Ô¶þ²æÊ÷½øÐÐÅÅÐò£¬ÅÅÐòºóµÄ½á¹ûΪ¶þ²æÅÅÐòÊ÷¡£
¶þ²æÅÅÐòÊ÷Óֳƶþ²æ²éÕÒÊ÷£¬Ëü»òÕßÊÇÒ»¿Ã¿ÕÊ÷£¬»òÕßÊǾßÓÐÏÂÁÐÐÔÖʵĶþ²æÊ÷£º£¨1£©Èô×ó×ÓÊ÷²»¿Õ£¬Ôò×ó×ÓÊ÷ÉÏËùÓнáµãµÄÖµ¾ùСÓÚËüµÄ¸ù½áµãµÄÖµ£»£¨2£©ÈôÓÒ×ÓÊ÷²»¿Õ£¬ÔòÓÒ×ÓÊ÷ÉÏËùÓнáµãµÄÖµ¾ù´óÓÚËüµÄ¸ù½áµãµÄÖµ£»£¨3£©×ó¡¢ÓÒ×ÓÊ÷Ò²·Ö±ðΪ¶þ²æÅÅÐòÊ÷£»[code]struct STreeNode
{
int key;
STreeNode* left_child;
STreeNode* right_child;
};
//·µ»ØÖµÎªÅÅÐòºóµÄ¸ù½Úµã
STreeNode* bt2bst(STreeNode* root_node)
{
}

struct STreeNode
{
int key;
STreeNode* left_child;
STreeNode* right_child;
};

void InsertBST(STreeNode* t , int key)
{
if(NULL == t)
{
t = new STreeNode;
t->left_child = t->right_child = NULL;
t->key = key;
return;
}

if(key < t->key)
InsertBST(t->left_child , key);
else
InsertBST(t->right_child , key );
}

//ÏÈÐò±éÀúÊ÷²¢²åÈ뽨Á¢ÅÅÐòÊ÷
void PreOrder(STreeNode* t , STreeNode* tBST)
{
if(NULL != t)
{
InsertBST(tBST , t->key);
PreOrder(t->left_child , tBST);
PreOrder(t->right_child , tBST);
}
}

//Ä¿±êº¯Êý
STreeNode* bt2bst(STreeNode* root_node)
{
STreeNode* bstTreeRoot = NULL;
PreOrder(root_node , bstTreeRoot);
return bstTreeRoot;
}[/code]¶þ¡¢À©Õ¹Ìâ

£¨1£©Áгö¼¸ÖÖÄãÁ˽âµÄIPC»úÖÆ¡£

´ð£º¹²ÏíÄڴ棺ÊÇһƬָ¶¨µÄÎïÀíÄÚ´æÇøÓò£¬Õâ¸öÇøÓòͨ³£ÊÇÔÚ´æ·ÅÕý³£³ÌÐòÊý¾ÝÇøÓòµÄÍâÃæ, ËüÔÊÐíÁ½¸ö»ò¶à¸ö½ø³Ì¹²ÏíÒ»¸ø¶¨µÄ´æ´¢Çø£¬ÊÇÕë¶ÔÆäËûͨÐÅ»úÖÆÔËÐÐЧÂʽϵͶøÉè¼ÆµÄ¡£Ê¹µÃ¶à¸ö½ø³Ì¿ÉÒÔ·ÃÎÊͬһ¿éÄÚ´æ¿Õ¼ä£¬ÊÇ×î¿ìµÄ¿ÉÓÃIPCÐÎʽ¡£ÍùÍùÓëÆäËüͨÐÅ»úÖÆ£¬ÈçÐźÅÁ¿½áºÏʹÓã¬À´´ïµ½½ø³Ì¼äµÄͬ²½¼°»¥³â¡£

ÐźÅÁ¿£¨semaphore£©£ºÖ÷Òª×÷Ϊ½ø³Ì¼äÒÔ¼°Í¬Ò»½ø³Ì²»Í¬Ïß³ÌÖ®¼äµÄͬ²½ÊֶΡ£

Ì×½Ó¿Ú£¨Socket£©£º¸üΪһ°ãµÄ½ø³Ì¼äͨÐÅ»úÖÆ£¬¿ÉÓÃÓÚ²»Í¬»úÆ÷Ö®¼äµÄ½ø³Ì¼äͨÐÅ¡£Æð³õÊÇÓÉUnixϵͳµÄBSD·ÖÖ§¿ª·¢³öÀ´µÄ£¬µ«ÏÖÔÚÒ»°ã¿ÉÒÔÒÆÖ²µ½ÆäËüÀàUnixϵͳÉÏ¡£

ÏûÏ¢¶ÓÁÐ(MessageQueue)ÊÇÒ»¸ö½á¹¹»¯µÄÅÅÐòÄÚ´æ¶Î±í£¬Õâ¸ö¶ÓÁÐÊǽø³Ì´æ·Å»ò¼ìË÷Êý¾ÝµÄµØ·½£¬ÊÇÒ»¸öÏûÏ¢µÄÁ´±í£¬¿ÉÒÔ±»¶à¸ö½ø³ÌËù¹²Ïí¡£

£¨2£©ÁоÙÒ»ÖÖËÀËø·¢ÉúµÄ³¡¾°£¬²¢¸ø³ö½â¾ö·½°¸¡£

´ð£º×î¾­µäµÄ³¡¾°¾ÍÊÇÉú²úÕß/Ïû·ÑÕߣ¬Éú²úÕßÏß³ÌÉú²úÎïÆ·£¬È»ºó½«ÎïÆ··ÅÖÃÔÚÒ»¸ö¿Õ»º³åÇøÖй©Ïû·ÑÕßÏß³ÌÏû·Ñ¡£Ïû·ÑÕßÏ̴߳ӻº³åÇøÖлñµÃÎïÆ·£¬È»ºóÊÍ·Å»º³åÇø¡£ÓÉÓÚÉú²úÕß/Ïû·ÑÕß¶¼ÔÚ²Ù×÷»º³åÇø£¬ÈÝÒ×µ¼ÖÂËÀËøµÄ·¢Éú¡£

¿ÉÒÔͨ¹ýÌí¼ÓËøµÄ±£»¤À´¶Ô»º³åÇø½øÐл¥³âµÄ·ÃÎÊ£¬±£Ö¤Ä³Ò»Ê±¿ÌÖ»ÓÐÒ»¸öÏ̶߳Իº³åÇø½øÐвÙ×÷£¬µ±»º³åÇøÂúµÄʱºò£¬Éú²úÕßÏ߳̾ͻá¹ÒÆð£¬Í¬Ê±Í¨ÖªÏû·ÑÕßÏ̡߳£¶ø»º³åÇø¿ÕµÄʱºò£¬Ïû·ÑÕßÏ߳̾ͻá¹ÒÆð£¬Í¬Ê±Í¨ÖªÉú²úÕßÏ̡߳£

£¨3£©Áоٱàдһ¸öTCPµÄ·þÎñÆ÷¶Ë³ÌÐò¿ÉÄÜÐèÒªÓõ½µÄsocket API£¬Èç¹ûÕâЩAPIµÄµ÷ÓÃÓÐÏȺó¹ØÏµ£¬Çë°´ÏȺó¹ØÏµÁгö¡£

£¨4£©¾ÙÀý˵Ã÷ʲôÊÇMVC¡£

´ð£ºMVCÊÇÒ»¸öÉè¼ÆÄ£Ê½£¬ËüÇ¿ÖÆÐÔµÄʹӦÓóÌÐòµÄÊäÈë¡¢´¦ÀíºÍÊä³ö·Ö¿ª¡£Ê¹ÓÃMVCÓ¦ÓóÌÐò±»·Ö³ÉÈý¸öºËÐIJ¿¼þ£ºÄ£ÐÍ¡¢ÊÓͼ¡¢¿ØÖÆÆ÷¡£ËüÃǸ÷×Ô´¦Àí×Ô¼ºµÄÈÎÎñ¡£

ÊÓͼÊÇÓû§¿´µ½²¢ÓëÖ®½»»¥µÄ½çÃæ¡£¶ÔÀÏʽµÄWebÓ¦ÓóÌÐòÀ´Ëµ£¬ÊÓͼ¾ÍÊÇÓÉHTMLÔªËØ×é³ÉµÄ½çÃæ£¬ÔÚÐÂʽµÄWebÓ¦ÓóÌÐòÖУ¬HTMLÒÀ¾ÉÔÚÊÓͼÖаçÑÝ×ÅÖØÒªµÄ½ÇÉ«£¬×÷ΪÊÓͼÀ´½²£¬ËüÖ»ÊÇ×÷ΪһÖÖÊä³öÊý¾Ý²¢ÔÊÐíÓû§²Ù×ݵķ½Ê½¡£

Ä£ÐͱíʾÆóÒµÊý¾ÝºÍÒµÎñ¹æÔò¡£ÔÚMVCµÄÈý¸ö²¿¼þÖУ¬Ä£ÐÍÓµÓÐ×î¶àµÄ´¦ÀíÈÎÎñ¡£ÓÉÓÚÓ¦ÓÃÓÚÄ£Ð͵ĴúÂëÖ»Ðèдһ´Î¾Í¿ÉÒÔ±»¶à¸öÊÓÍ¼ÖØÓã¬ËùÒÔ¼õÉÙÁË´úÂëµÄÖØ¸´ÐÔ¡£

¿ØÖÆÆ÷½ÓÊÜÓû§µÄÊäÈë²¢µ÷ÓÃÄ£ÐͺÍÊÓͼȥÍê³ÉÓû§µÄÐèÇó¡£ËùÒÔµ±µ¥»÷WebÒ³ÃæÖеij¬Á´½ÓºÍ·¢ËÍHTML±íµ¥Ê±£¬¿ØÖÆÆ÷±¾Éí²»Êä³öÈκζ«Î÷ºÍ×öÈκδ¦Àí¡£ËüÖ»ÊǽÓÊÕÇëÇó²¢¾ö¶¨µ÷ÓÃÄĸöÄ£Ð͹¹¼þÈ¥´¦ÀíÇëÇó£¬È»ºóÓÃÈ·¶¨ÓÃÄĸöÊÓͼÀ´ÏÔʾģÐÍ´¦Àí·µ»ØµÄÊý¾Ý¡£

×÷Õߣºhackbuteer1
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ