|
|
时间如白驹过隙,转眼就要毕业了!从上大四开始就为了工作忙忙碌碌准备一些找工作的事宜,到现在为止,工作也算是稳定下来了,有空写个面经!PS:本人现在找到的公司并不牛,只是想在这里留点对师弟师妹可能有用的东西!
$ c* u1 j6 U) U8 H 我自认为自己的基础不是很扎实,所以我是从暑假就开始准备的,整个暑假都呆在学校,学习编程,并特地为找工作准备了一个项目!开学的时候刚好完成了,那么从9月份到10月份一个月时间是一直在复习之前学过的知识,这里要跟师弟师妹说的就是一定要在找工作之前把重要的科目复习一遍,不过如果时间不是很充裕的话就不用复习所有的科目了,至于要哪些科是要复习的就是通过看前人留下来的笔经和面经,确定哪些重要科目。因为我是通信工程的,所以我给自己选的重点科目就是:C++、数据结构、通信原理、移动通信、现代交换原理、现代通信网、自学了计算机网络!然后再复习重点科目里面的重点章节。比如C++在类那部分的继承、多态、虚函数、虚基类;数据结构的 单链表的增、删、改、查,二叉树的遍历、排序、查找;通信原理就是总结了整个通信的流程,计算机网络的:TCP、UDP、IP、OSI七层。现代交换原理、现代通信网 看得比较少,重点科目中的重点科目是:C++、数据结构、计算机网络。最后在找工的过程中证明这三科确实是最重要的三科,重点章节也基本上覆盖了。所以建议师弟师妹们在接下来的时间里面重点加强下这三科的知识!4 k! F& |! O6 ]7 F
准备完了,正式投入到找工大军中!: c' R' { m. i+ W/ v
北电依然跟往年一样,来得特别早!也是我投的第一家公司,投了研发职位。第一份简历----炮灰!没通知我去笔试~~~极度不爽,本人特别看重的是北电,所以花了大力气去准备C++和数据结构,当然,接下来的肯定是去霸笔了,唉~~~处女笔就是霸笔!北电的笔试题有四个部分:第一部分是英译中和中译英(研发类职位是两种题型都有,测试的就只有英译中),第二部分是一道编程题,将一个字符串中的所有字母放到字符串的前端,所有数字紧接着字母存放,其他所有字符放在最后面,这个简单。第三部分是程序填空题,涉及到一个最短路径的问题,图的内容,因为自己没学过,准备的时候也没准备,只能现场根据自己的思路整了一番。第四部分是改错题,平衡二叉树的,也不会!唉~~~理所当然给BS了!而且今年北电不给霸面~~~~北电到此结束!总的来说,北电比较重视的是C++、数据结构(链表、二叉树、排序、查找)、计算机网络。(在最后附上自己整理的关于北电笔试和面试的资料)0 u0 M, L1 L. z9 P' J1 g
除了北电后比较感兴趣的就是深信服了,总共可以说是参加了这个公司的3次招聘!找工作之前是不知道有这个公司的,第一次是在10月份初吧,深信服来学校宣讲,了解到,总的来说深信服的待遇是挺不错的,而且那公司很年轻,我认为比较有前途!对找工作还没很清楚的概念,她是现场投递简历,然后过几天就笔试,整个过程就那么一个星期!那天宣讲会我去得很早,听完宣讲然后投了简历,给BS了~~~当时还不知道怎么把握机会,比如去霸笔,霸面之类的!第一次机会就这样过去了!第二次的时候是在中大BBS上看到的消息,在中大宣讲,也是现场投递简历,可能中大的人不是很看重这公司吧,那天去的人很少,很幸运,拿到了一次笔试机会!笔试的时候感觉还是蛮好的,因为之前自己看过一些深信服的笔经,有一些题目是做过了,还算做得比较顺利!但是再一次给BS了!说实话,深信服的笔试确实挺难的!但是,经过这次笔试后我进行了很深刻的总结,将自己不会的题目都好好的总结了一次,把所有不会的题目都整理一遍!在整理的过程中,对照往年的笔试题目,发现05、06、07三年的题目很多很多部分是一样的!!!所以把这些题目组成了一个题库!于是第三次机会来了,我通过第一次笔试时候通知我的号码联系上了深信服的一个HR,很诚恳的跟他说了一通自己对公司很感兴趣之类的!大概过了一个星期,然后他给了我再一次的笔试机会!这次我就学乖了,把自己总结的题库所有题都好好的做了一遍,把所有不会的题目都彻底弄懂!那份试题是6页,总共12面!好像是18道编程题,6道简答,几道填空和选择!题量很大,2个钟完成,果然不出所料,基本上的题目都是做过的,所以虽然题量很大,但是基本上两个钟的时间都是用在写字上面,基本上没用大脑想了!两个钟基本算把全部题目都做完了!顺利接到了面试通知,同样,经过对几年的面经总结,发现面试题目同样也是由一个类似题库的东西上来的!不过面经找到不多,所以准备得不是很充分!问得很深,只有几道是回答得比较好的:1、new 和 malloc 的区别 2、将一棵树转换成二叉树 3、windows socket编程中的linger的用法 4、setsockoption 的用法(好像是9种),常用有哪些,分别讲一下 5、调用函数的时候,系统取函数的实参是从后面开始取还是从前面开始取? 还有一些回答得不是很好的,如:printf函数是可以实现参数个数可变,是怎么实现的?还有一些其他的不记得了!最后那老总跟我说:"这次你没希望了!",被现场BS了!总的来说:深信服比较重视的是C++的能力!最好有项目经验!(在最后附上自己整理的关于深信服笔试和面试的资料)
2 l& A' g" Q# v( z5 {' I3 n9 @其他公司就不在这里啰嗦了!最后是签了深圳的一个IC公司,台资企业,虽然不是很大的一个公司,但是自我感觉是蛮适合我的,适合我的水平,也和我的兴趣比较符合!所以算是结束了找工了!找工作不一定要找最牛的,找到一个适合的就是最好的!
+ K. ~/ j g& h 上面说了那么多,总结下自己对大学的看法:...... 这总结就等版主给个精华再继续了!^_^ (开个玩笑,主要是因为昨天才想起在后院留下点墨水,而过两天就要去实习了,后续有空再继续帖一些个人觉得比较好的资料上来给大家PP)9 a- a. H, B( w) Q- y6 _
6 ^; A* o8 n$ }/ `9 u+ D总结我想到一点就上来补一点吧:% f3 R- K6 A3 O( }- [5 N4 e( L- p
1、个人认为可以上网找一些笔试常见题型来看看!很多公司都会照搬那里的题目的!虽然我们这样做不是最根本的,但是目前来说还是比较有效的!6 }# |- g7 D/ Z B- g( g' t
2、多看笔经、面经,建议多上华工、中大的BBS
" G! h. O( P3 e9 c 3、因为我现在在实习了,结合我这一小段时间里的感受给师弟们一个建议,因为我现在做的是单片机的,所以就说这方面的,想在单片机方面发展的话最好不要停留在老师的教学水平上,自己去实践一下IIC,EEPROM、串口通信(双机、单片机和电脑),还有记得参加学校的电子设计大赛,等你找工作的时候你就知道那东西有多好用(谨记!!)!
# K K4 l+ c) I, Q9 v 4、下面的是深信服08年的笔试题、基本上是齐的了,据我个人统计,05、06、07、08这四年深信服都是这套题,所以大家可以稍微深入点去研究,至于其他公司的题目就大家多去各大BBS逛了!还有这份题不能挂在网上太久,我过5天就把这题目删了,认为可以用得着的都保存起来吧,也请各位下载了题目的就留个名,其他人如果错过了这五天时间的就大家互相转发一下!还有,那些题目的答案都是我做的,所以 ^_^ 辩证的看!& N) ]8 \" _% _4 [2 T5 N! o
5、我发现在找工的时候很多同学多存在一些问题:1)在大四上学期的时候不努力去找,跑了几场招聘会就说很累了,我认为这是不可取的,在你没找到工作之前,每一场招聘会对你来说都是一个机会,如果你在大四上学期错过了很多机会,那么意味着你可能在大四的下学期可能会更加累!你是否希望在大四下学期大部分同学都去公司实习了你还在找工作呢? 2)好些同学去招聘会的时候心态不是很好,抱着一种试试看的心态,我认为这大可不必,首先,如果你抱着这种心态去参加招聘会你不会很尽力的。 3)那些招聘人员也不是吃闲饭的,给人家一看就看出来了!你说还有没机会呢? 4)你可以说你不自信。但是我认为,一流的学校有三流的学生,三流的学校也有一流的学生,我们广工也不是三流学校,那么我们这里肯定可以出一流的学生。为什么跟华工、中大的一起的时候就感觉没自信呢?相信自己!!其实他们也很菜~~~ ^_^ * N9 {/ n5 z, T6 D3 a# ^/ F& U
1 X- [# O3 d5 ] R3 h
--------------------------------------华丽的分割线------------------------------------------, u6 x/ c8 v: P
深信服08年笔试题
- u4 r9 f7 ^& {+ {1 j2 z
$ ^' V Y& r( H4 S, V, v6 n填空选择类
& P b( I8 ^0 |7 b" a$ }% l8 T- _, W# l# J* i$ b9 I; p, G
2
?: A4 c0 M( x% X4 E12, o) m5 @ h: O5 D M. d
1112
h# I) X- f. a: I3112- a. \9 g+ [* ]# x
132112
( Q" \6 p6 F- |, v/ s311322或1113122112下一行是什么?有什么规律? ///已解决0 X! q y& y/ t/ e
) R, e0 O* A' R8 t# e" ]; t意思是上面一行有1个1,1个3,1个2,2个1,1个2,即1321125 F* W8 d" G1 Q9 V
6 n6 L. L9 c" W* X8 Q(M)?(a++):( a--),A,M==O,B,M==1,C,M!=O,D,M!=1
6 h5 k/ [2 ?5 B(条件表达式) ? (条件为真时的表达式):(条件为假时的表达式) ///已解决
! _# `$ ~( ^ Y2 b: Y3 M! n! O4 A
4以下哪些通信方式是可靠的通讯方式 ' s% [. r( @# ?# n2 a/ J
1信号2管道3消息4tcp 5udp 6串口I/O9 ?# U! Z) J) A7 j( S
" p2 k6 a6 A7 F, }6 n可靠:信号 管道 tcp
5 e; J( T9 d% |; d* B. F |可以在不同主机之间的:
2 i& D, b: F& t3 V& K* t" A& E n( D5 h
Unix的启动顺序排序。9 w# `( x: G3 B) f0 f( d
(A) Rc.X (B) Rc.sysinit (C) login (D) init$ a% c. Z: |& Y, c
8 S% L1 l; \/ T1 ^ p$ l" J# i% [DBAC: V' M5 H8 t# V) O' D: J* [
& ]- D7 A: ]# s5 y
进程的几个基本状态:就绪、执行、阻塞, {, v3 J( X2 p- N
% Z7 E3 c7 U1 s4 P$ o6 y U% X程序:/ r) ?# C5 p" j9 ]
- ~$ F8 @! k }现有1000个球,10个盒子,问各个盒子内应该分别放入多少个球,才能达到需要1至1000* F3 B9 m, u6 Y8 c5 ^
之间任何数量的球,你都可以用若干盒子组合出来(用C/C++编写程序)
9 m/ f- O& M- Y6 [: r# c) w+ ]# e) m/ S# Z+ y$ C, a
1、2、4、8、16、32、64、128、256、489
, q5 C0 U8 K- o0 Z. H- L6 @4 f: C' p2 T$ l: V4 J
用一个程序示意常见的错误能够导致栈破坏,如何检查?
6 q2 z) C6 s" ?- S% @4 o/ q. l4 L: {! y
#include "iostream.h"
2 Y+ e1 A9 _; ^- ^1 w# \& i6 u#include "string.h"- C1 ?" [; X! g) f$ v7 _
void main()% b3 F% ?! v- L
{
2 d2 u5 J e) o& x4 Q9 O2 I" d char str[5];
' [. U8 N! i1 N& r K5 h- | cout<<"input: ";2 v H$ l4 B3 V9 r+ E4 f ?
cin>>str;
" |3 W$ @# w2 x. I) [ while(strlen(str)>5)) [1 _( h, ?/ l/ T& ]3 h) y/ J+ e$ P
{
D" i; V7 |3 G2 S" [2 a' K& L+ i cout<<"too long!"<<endl;9 j4 Q# H; F c2 g7 \; ~4 Z* \0 O
cin>>str;
9 V! a8 S5 _$ ?& p }! P9 h! U( C! R- ]0 I
cout<<str<<endl;
1 l, f6 _5 _, D}
- s y- g/ t6 y
8 H" Y6 E- v" c- ~( i如果系统堆栈很小,不能处理超过4级的函数调用,如何解决八皇后问题' k- k. E9 M0 z
#include<iostream.h> , s& M; T5 c1 w" C! K M O
void main() 6 {: s& ?+ b5 c: T! k
{
/ z* W6 v7 t3 D$ D$ O& l" D int A[8]; 0 E# r) U" C8 O$ U. _
int flag;//标记
" h$ @0 q& I: c% M3 M y8 \ int m=0;//总共有几种答案 8 D' y7 V/ ~% |' S$ L2 A4 q
int t,tt; + G1 r: v8 W) {8 I, h
for(int a=1;a<=8;a++)
% u: @7 H- m( N, q, L for(int b=1;b<=8;b++) {$ `) @; z# e
for(int c=1;c<=8;c++)
9 M4 a/ N j% S; k for(int d=1;d<=8;d++)
% l1 |9 _6 f# m2 i3 ?( a3 ~ for(int e=1;e<=8;e++)
! f: ~5 e( A( s2 ^6 [/ q: A' H' U for(int f=1;f<=8;f++) 0 Z; f6 `! Q2 p6 N
for(int g=1;g<=8;g++)
/ t* L, g. F$ G- F( e$ H for(int h=1;h<=8;h++)
7 M) h% _; N( s% k* h5 C {
; d( @# _2 x* k7 ^+ G2 @+ M // 为了便于运算数组里 ( i3 i5 l* Y1 z2 C1 ?
A[0]=a; //A=k 指第i行的在第k列已经有放置6 [% z" o! c* \
A[1]=b; / [: _7 N" F; Q4 M
A[2]=c; t/ C* X% o5 |' O+ }, O
A[3]=d; 7 q3 E3 {' R( q D' U' O
A[4]=e; " u% t; J' ~3 P* d+ E5 s( S8 e+ t
A[5]=f;
+ Q' ~6 T" g0 J3 E& F) v A[6]=g;
, v) f" a" L" t A[7]=h;
4 c1 g$ O$ [2 R& Y //比较是否在同一列 : l% ?4 L" o& _9 ]! a
flag=0;
' t/ h! {1 t. w9 v8 [, S for(int i=7;i>0;i--)
3 b: z+ w2 g& @0 N& T# V4 n { 3 I% c* h1 t8 R D" d& F
for(int j=0;j<i;j++)
I5 |) b$ d4 |9 [/ D" F( t {0 r# S( M# ~! Y3 f) y
if(A==A[j]) - [7 Z# F) i; R5 J7 S
{ ) e2 C$ Q& V9 B0 i
flag=1; & D9 i& ^$ x2 g3 Y% G9 J5 |
break;
$ d0 s( c0 D6 u8 a, P4 n }
0 b! A1 v. n, ^% y4 F0 `4 k6 Q3 N$ X/ d Y
}" \ S. L4 d2 H$ S
if(flag)
( |6 O8 }1 c6 v' V break;" b) }) w4 w l% m m1 D
}
: s7 J1 }" {$ i! S* H0 {' \# c7 o if(!flag)//比较是否在对角线上 . ^3 Z X5 K3 f' t; l: O3 k
for( i=7;i>0;i--) " E+ W% ? {) K+ {5 W% C) t0 t
{
8 J3 L: P/ B+ z6 \; f4 O1 y for(int j=0;j<i;j++)
D, d7 p1 ^' t2 _# b {
" @' E9 U! C, s. ^% b: |1 L t=A;
: t5 Q6 Z5 K- w0 p. O5 T tt=A[j]; - ]0 X: y; y6 @
if(tt>t)
7 O" [( o0 d1 e# u- ~& d3 y v! E! t {
. H3 B) q1 s! B5 U tt=9-tt;
; |' a c3 n# A/ l4 r0 Y t=9-t; * @& b' e2 _& Q5 o1 ~- P, R$ c
} 5 g4 p* Z9 g J
if(t-i==tt-j) & V3 C6 R0 P9 q9 ]/ }! s0 G6 L" T3 l
{
! x' E! C5 \4 ]; n' \ flag=1;
" |$ }" I4 R( {2 n break; 8 @* B+ o' Y, J# U4 A4 {8 W0 n
}, e( ] X. t. N! }6 [; }/ w9 T2 _
% t$ n. b% f3 S8 M' @
} 8 O+ i8 b4 x6 E
if(flag) break;
" q4 } P& S1 L7 x% _* Q! q5 g _/ G3 R7 n% Q }
R) ?" S7 I' y- _4 s: ] if(!flag)
I5 i8 w. Q7 E5 s; R {
3 B1 c: y5 K; l' Z //cout<<endl<<endl;
0 M5 ~3 r. v' A9 y9 v( t" `, V3 N7 u) N for(i=0;i<=7;i++) 8 I( L0 B) A) z6 G
cout<<A<<" ";
+ b! k" Y; W; A7 G# K m++; 3 b O- R- }2 W: R5 ]( r2 `2 N% e* i
cout<<"************************"<<m<<endl;
) `" |: C- U M8 a$ v } P' E7 i8 T6 E" d6 Q$ E0 M1 l1 a$ K
} - F+ k( A, l/ m7 I$ R
}
" D# B- ?0 y A# |- h3 b) |0 w1 A5 K+ d" U
要求在s1中删除所有s2的字符,要用最快的算法; G# s2 M4 n' M
引入 char tempstr[256]={0}; char* p1=s1 ; char* p2=s2;
( c/ R( {0 _ g; G ?1、 第一次遍历S2,while(*p2) tempstr[*p2++]=1;
4 J7 V9 I. \* F1 ~4 a7 f6 j2、 第二次遍历S1,
6 W) b5 |' [, S9 w3 L1 T$ Kwhile(*p1)- B E% s3 j. i% n
{- B- x5 d, t+ R+ R) j; U: V' n; C
If(tempstr[*p1==’1’])* f0 u; O5 W4 ]! {/ y4 X8 M8 e5 {
{
, E) V8 f( P) E% v+ h7 O2 ? *p1=0;4 i, u3 b* `+ `) \, h# C, |
}
, i4 }( R4 W5 s9 ^& m# k* i* Z0 `P1++;
6 t* k3 J l& b- {# I% ^, I}
" b4 ~) P. \# I* I! b T- m+ M' v3、 再次遍历S1, l, @) A9 N$ K* U# r2 }
P1=s1;
1 f1 m3 c! O8 q0 J! {* {5 U; JWhile(*p1)
, `$ _# x$ E) q( @' B/ B' J6 q{/ c: q& M% k( ]* L5 ], p! ~
If(*p1==’0’)
1 L# ?/ M1 C* K. i3 T. |{, F- F# n( @7 `
P2=p1+1;
* y7 `0 A9 C. s1 z4 e While(*p2==’0’)' s" o, D# t/ S! t
P2++;7 u4 U- g, s$ K4 Q9 E6 F, i; W
*p1=*p2;
G/ K- T6 T2 W; m9 V- ] *p2=’0’/ c4 I/ ?+ W# h& m5 z8 S# l
P1=p2;. D0 I. `; R$ i$ p7 g
}( d* ~* y Z2 ~8 e& x1 D
}
# M8 c3 {, ]( t& z' L; Y0 k
/ d, f, T/ `6 g写一个函数判断系统是大端还是小端。若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1.0 V/ u; f. E I
大端格式:在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中 k# \8 \' D0 @+ `" w7 {# b- l& b
小端格式:与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节: p2 y. n' D, o" y* B
联合体union的存放顺序是所有成员都从低地址开始存放。
/ v2 w' X$ g1 n0 y- a$ o5 I' }: lInt checkCPU ()
- u: X$ B4 c M( ^ C3 m9 Q{
9 \& w3 E0 }/ w( P S Union w
# ]. l7 l# b' a4 v/ J{
: Z) Q; o- a8 v0 y8 Q/ _" o Int a;% B# F: X/ Y" |* Q4 e" h' n# _' J
Char b;' Z) ~1 M) Q6 y: G2 P( `4 [2 ?2 S
}c;
+ o" P) A/ G$ Y/ ]+ rc.a=1;
+ @3 v/ e+ |$ ^+ g* f/ hreturn (c.b==1);- x6 u0 ^& e6 i$ M6 p6 y S; P
}/ |% J+ X2 Q/ e' j
; }* `! E1 q1 T8 d6 Z1 ?' W# u
+ I% u7 J+ [" P/ Q% |0 w0 s2 o8 J% d6 P2 z4 }$ \2 C* O
: q& V* m; X4 w) T) P1 r" z" t" P给出两个链表的头指针pHead1 和 pHead2 ,写一个函数判断两条链表有没交叉点
6 }/ g3 q" U) L: u. g( |0 B7 {* `- bNode* checkLink(Node* pHead1,Node* pHead2)$ t. Z- |: H Y V8 ]% f" ^
{
/ M, n. c% t' W# G* W& Q! g$ t Node* p1=pHead1,p2=pHead2;3 l; E: y0 y" T
int i=1,j=1; N8 h$ j+ C3 K: g: \1 |5 o
if(p1==NULL || p2==NULL)
6 t& |& o; P% o* m9 g3 r& @' [ return NULL;
2 g' O# ~' @0 z. B3 Q if(p1==p2)& Q' x+ `# C* y6 C( i0 e
return p1;( f( i- t; X$ {: V, e! O* z
while(p1->pNext!=NULL)
% G! I' A! e2 D0 j/ E {
, y- f4 X/ M4 ~3 q' { p1=p1->pNext;
1 i {! w# Q1 ~% {$ u' ?* q i++;( I2 M6 { A8 F
}
# O( C* h5 Q$ B% y while(p2->pNext!=NULL)
" I& F. Y! L; x6 r A {
8 X* s. w0 J$ f( Z p2=p2->pNext;4 T! @" R) H. O) y. n" X6 @
j++;9 w4 ~0 | [% Q3 t2 Y) c( h6 [
}
; M7 Y/ {( L' J" Y/ z7 L5 o if(p1==p2)
2 B9 V; x, h) H return NULL;7 A; e5 q; o+ d [: `; b5 F, r" f
else1 | f* ?8 o+ g$ `( [
{
' g) V( G/ m9 c: a, w" j for(int k=0;k<fabs(a-b);k++)
; q$ [5 V( i% I0 Q/ _ {# w- X2 f& h+ }3 d% X% }% p8 H
if(i>j)
, Q2 m' c! h, g) K p1=p1->pNext; d2 J7 @9 m0 C1 Q2 s9 N U0 U
else) o) N4 j8 E" J, o3 |. P
p2=p2->pNext;: _2 k6 Z/ i* r1 S2 Z: s" M
}
0 v8 h4 F- M, G% z5 O& B. R while(p1!=p2)
( x5 D# r1 i9 k+ W {
' D/ X* Z/ b7 Q& h3 B9 ?/ j+ C8 a p1=p1->pNext;
5 M& M2 _ O3 {- r p2=p2->pNext;- j; i# u$ Q4 Q: V! q8 c
}
2 E/ P7 l9 |4 L3 R! R( R% F return p1;* q6 Y# p8 _& v3 E# ]" H- \
}
' }) o* u6 F6 \}# k p- t) S4 m# w7 _ p
: }1 T6 B2 K2 d" W- H( {' E, n K
用C/C++编程,从1到100中取出10个不同的数,要求打印出所有可能的组合;
* C6 {, O% B5 Y' S# ?: u#include <iostream.h>; D7 d, g# T1 x7 M1 Z, o9 t
int source[100];$ ]9 U0 g: B1 g$ v$ k/ y% B3 }0 C- ^
int dest[10]={0};; b1 f6 ^1 U7 V: l3 {6 A
int index_source=0;
- o- _6 f- t0 _/ Jint index_dest=0;! n, W. H. [$ q( R' h: q" Z
int k=10;* t7 w: g4 t4 f' {6 L, C( s- V9 b1 J
int i=0;
/ f* a7 F4 y+ hint j=0;
6 d! U, E$ v+ ?+ i% g% V+ Tvoid composition(int source[], int index_source, int dest[], int index_dest, int k)+ o( f3 D) H) W6 P9 k2 M( ?: `: U/ [
{
# X: W- m4 a+ @3 u" I/ _ if(100-index_source==k)
6 g- E, z" i4 r0 D/ `& Y {
; P2 j/ H0 D1 r% { for(i=0; i<index_dest; i++)/ f$ Q5 j C6 n# _) W/ |
{
: f: y+ O/ M L N! l, s cout<<dest<<" ";( l, L5 ?4 u/ U5 v D+ ?3 H$ z
}+ }& x- v: a4 L: e% Q) G' x
for(i=index_source; i<100; i++)6 n6 u3 G3 v( Y
{
. E3 x+ c& E) U) ^$ z- e2 L cout<<source<<" ";
6 e8 m2 g5 R: v# H t }
' N' ?- W+ _1 _) m2 N3 ] cout<<endl;5 \: [1 Q9 i# m, R ^" T
return;
8 G; |" S& S; n* L% X, T6 \ }
* P0 c( X/ N+ N% T1 a- w& h if(index_source<100 && k==1)
& \3 e6 q" d$ z/ E {
5 I6 d( K& x9 @ for(i=index_source; i<100; i++)5 d8 U* [8 i U" L! D
{
" D g Q/ _0 Y/ e7 K" C for(j=0; j<index_dest; j++)
H8 m& Y: s2 I I2 A {( Z. W6 p6 f% N' @5 O9 q
cout<<dest[j]<<" ";
$ k( H- t, j7 _5 a- R }
6 ]1 L; n* s( Z% i/ } cout<<source<<endl;
9 }- V+ x! j) Q: F) k* n }7 z; N, R0 d' H) D8 }2 C
return;4 E" N( P/ I' ^, D5 T9 }5 k& N
}3 O1 h6 c% p1 q0 o4 O
composition(source, index_source+1, dest, index_dest, k);
) K8 I5 }2 }4 E- I! y: \3 a dest[index_dest++]=source[index_source];+ h1 b Y# G7 M3 C* N
composition(source, index_source+1, dest, index_dest, k-1);/ ?4 s4 }7 Y. `+ R" Z
}
+ M( W& G8 U5 r% g+ F% q
P+ Z+ q- z6 F) Avoid main(): I6 G) H" k( n+ _& R
{. u4 ]4 m% k; g" p# H
for(int i=0;i<100;i++); U6 D3 f3 U' a# |" I# l K
source=i;; B; }# J2 _9 t6 _& k2 ?, i
composition(source,0, dest, 0, 10);& }/ q2 G" s* f- x/ {5 K; }. _
}
6 L( Y5 Q+ T [! m: ~ N" g6 C! b7 q; r) w5 M( C
& S( C' J! ^3 Y) N/ [% U# ]! ]
问答
3 [" J* n8 W1 C/ T2 T5 i& V) a+ X/ G4 U# i- H, ]
const 有什么用途?(请至少说明两种)- @4 u7 p% D) g0 T; `
1、 用在变量前面的时候可以避免变量被修改5 w/ y- T+ _* @/ B7 w1 [( W
2、 用在函数声明部分允许const 的类对象成员访问const 成员函数,如果类的成员函数不会对数据成员进行修改的话最好把该函数定义为const类型,这样无论是const的类对象还是非const 的类对象都可以访问该函数, ]& J9 ^6 \ ~3 t) S
3、 可以用来代替define ,define 只是简单的代替,但是const 还会进行类型检查。
8 h# _( s+ g6 h$ F, S( ^( G* S+ y) G6 `: a# I/ M% s2 v
怎么避免头文件重复包含) n. o4 F9 A' r" I
# d' P/ U ^! F1 G#ifndef H_HEADFILENAME
0 T! a. B5 q; K: O* `#define H_HEADFILENAME) P$ a) _7 i. V9 h/ e
文件内容….: _ l- x W4 X( l* A" U1 o) A6 i( m
#endif
% F7 a$ R# V: x1 \# I9 t3 U& n
$ {+ g( N& @4 n/ K; v8 k拷贝构造函数和赋值号的异同* T, q5 C2 F- M
4 L, n0 u; {7 F- ^# Z, K* G
同:都可以对对象的成员进行赋值
2 I9 x" H. H9 Z7 P7 Y) c异:
) j" l6 ^( B& j+ b; \拷贝构造函数首先是一个构造函数,它调用的时候产生一个对象,是通过参数传进来的那个对象来初始化,产生的对象。
( |5 R# p8 c1 B, E赋值是把一个对象赋值给一个原有的对象,而且还要检查一下两个对象是不是同一个对象,如果是的话就不做任何操作。9 q( b, s5 H, P. z' e
* C8 y Q! S+ i; G, ]$ _: |哈希表和平衡二叉树的适用场合% Z, C. n) w% d
/ J5 t: C5 D8 o9 _& J0 j) q哈希表:哈希表查找速度比较快,但是要耗比较多的内存。所以比较适用于对查找速度要求比较高、且内存空间足够的时候+ K2 F( j* \" e; Z
平衡二叉树:如果想在以后用二分法查找的时候查找速度比较快的话用建立平衡二叉树的方法()* O2 x) |" b5 ?0 d9 J+ f
2 [ S' \* I X F: |
recv函数如何在阻塞模式下没有收到数据就返回
3 n2 n, a: ?0 @* S) J. E: ]) K* O0 W$ t/ q/ B' E& E( a S0 U3 J' X
检查window (release)下的内存泄漏. j: F$ M+ x. Y# ^
9 |7 M/ U+ ]. d+ L$ `2 H( G7 M$ Q7 \1、 放置关键字 assert()
+ _6 h/ C' h& `3 \1 x. [0 Y2、 生成map 文件。它并不往可执行文件exe 中添加任何东西,只是在编译的时候将各个函数入口地址记录在后缀为.map的文件中,程序崩溃的时候可以得到一个EIP地址,通过地址知道崩溃所在函数) w* c# F) Q5 p5 a) T
3、 可以设置断点,在希望设置断点的地方加入 _ASM int 3
; `4 v) {" k4 |/ D9 a) k! M; B4、 可以通过编译时的汇编程序看出
& s3 l: f( j- ], x5、 采用第三方工具
/ L s) D- e i2 t2 W0 ^2 ^; H在C++中extern c的作用- T5 z1 a- P; e$ F
1、 extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用5 K& L6 @5 t2 J% U! n6 p
2、 被extern "C"修饰的变量和函数是按照C语言方式编译和连接的;
' m9 P( u( u! [
: ?5 i" E* V& R: k; V, ?临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别
- V; \3 Z% K- p9 b- }- c1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。" Y$ Y7 n! i; E9 c7 f3 P) p
2、互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享
4 m" ~% z* V7 X# W2 X3 q3、信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目
* u& _5 \ ]7 D Z4 N& u9 E6 M4 ]4、事 件: 通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作 b. o: o. A* m7 D' u! I
/ e) j" ?" |: G9 J( t5 O( |
Main函数中两个参数的作用
; i2 H, m9 A0 p- q$ G第一个形参argc是一个整型变量,第二个形参argv是一个指针数组,其元素指向字符型$ D# `/ w9 Y* U
数据。
, a }. N# Q z. X7 {# t) _用带参数的main函数可以直接从命令行得到参数值(这些值是字符串),在程序运行3 \. I5 m: _; r$ X- `
时,可以根据输入的命令行中的不同情况进行相应的处理。利用main函数中的参数可以使& r2 l9 K$ D3 n* V+ [' C: \
程序从系统得到所需的数据,增加了处理问题的灵活性。
9 m* Z5 S, u% v4 u9 Z- X l$ {" X$ o- a9 m
[ 本帖最后由 homexxhh 于 2008-9-11 21:53 编辑 ] |
|