找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1423|回复: 0

[面筋] 整理的百度面经

[复制链接]
发表于 2011-6-28 10:40 | 显示全部楼层 |阅读模式
整理的百度面经- j, h5 @3 W6 T' h, U/ p$ C

1 W0 y4 S' P7 Hzz! I* G1 t% J( s  }* t
& d5 c# M. ?+ l& k& g
9 E4 P  v) M2 E* m0 `
一面1. 网络编程经验:# j- Y. `7 E# Q2 J; h
   如何判断一个http请求,一个客户端请求已经结束;如何处理服务器多线程+ p! o$ e0 j* y8 K7 M; E
   获得一个http请求后,是如何处理的?返回什么?有没有试过返回图片?" e& c, x$ M  x* j+ _' L
   服务器给客户端请求时,是用什么函数写?服务器如何获取客户端请求,用什么函数
8 p' w- `1 l( ~% F   (需要函数级别的连接有一个认识)
* n. G0 Z0 f- y, a; B
( B2 r, r4 H' i2. cv操作是什么函数 cv_init, cv_wait, cv_signal
  D" e8 O- b! }' ?8 P$ C0 T2 i; P
3. 有一些关键词点击次数的文件,如何输出最多点击的一百个(当时应该回答,组织一个100个元素的最大堆)/ d1 o2 e* J$ V( \

7 H! U, j: e& O4. 相交链表,如何找相交点(不能要标记)
& z8 d- y" G6 `. F6 W$ [   第一个头遍历到尾,知道他的长度;第二个头遍历到尾,知道他的长度。这样知道两截链表在交点前的长度,长的先走几步,然后一样长了,再轮流下走,就会相聚,相遇节点就是相交节点)  u; V; W* ]$ B# S6 ]) U: _2 z! L, g
" h. }9 O8 t7 n* t8 |; {
5. 有些文件,频繁访问在磁盘里头的,现在要放到内存中了。采用什么策略来决定哪些放到内存中?如果是一些url文件,放在内存后,如何快速的找到某个url的位置(采用字典序或者b树之类树状结构来组织) 如何快速找到哪些文件太久没人访问了,把他替换出去?(再那一棵树,记录树里每个位置url的访问时间;同时,那个url树的节点,也有这个时间树的对应的位置信息。时间树采用最大堆组织。要替换出去时,就从树顶取走节点,并且从中获得这个节点在url树对应位置,把他从url树中取走。当url被访问时,由于url树节点有时间树的位置信息,所以也很快找到对应节点在时间树的位置,然后把他的访问时间更新,然后做堆调整,每次堆调整为logN)
8 [; S, [  q. e5 D! P) y1 n4 Z% Q, W+ V. `5 S/ z
6. c语言相关:内联函数的好处?非内联函数被调用的过程是怎么样的?& S5 O: p. ]4 `. q4 `( J0 i6 S
   int,short,char的struct,这几个数应该怎么放,内存小?怎么防止头文件被include多次?
0 P1 {3 G# K$ ?4 p
- s) x$ F/ s0 P; I9 R- ~7. 有没有什么问题想问的$ ^' i* s; W0 q, n+ P8 m7 K
8 linux 网络查看的命令
" c1 J8 p' I& R7 d; e. Q
: z, j. U3 ]4 r& I/ K  F/ t二面1 N  e* P- y( H: Q
1. 介绍一个项目0 A( u+ `5 r; }4 m
: ]. J+ o8 M1 [+ r* J, Z
2. 2.5亿个int数,可能有相同的。统计出这里头不同的数有多少个?只有2g内存。( s, Z( ~0 P6 s8 @( X
(2.5*1000 000 000 * 4 =1G)
1 O0 _% T/ m; y; {. Q! s统计数-用hash,key是数,value是1或0,标记是否出现。5 D. _7 i0 _" @3 ^, d
如果key就是那个数,那么找一个数的时候,要遍历hash才知道有没有,慢(就是如果hash紧凑,慢)。
. `4 k) L1 i" W" {/ D1 z解决方案:把key作为连续的(就是hash是稀疏的,有个key值没有存在这2.5亿个数中),像数组下标一样,那么要访问第n个数,直接到第n个去看,复杂度是O(1)
2 C" F: d- ^: {2 U2 {! L但是,如果连续,2.5亿个数,范围很广,而每个key用int存,会很大量,内存不一定够。
5 ~; h4 t5 s  M& e2 |  I/ w解决方案:每个key用一位bit来标志。即数字1放在第一个bit上,数字2放在第二个bit上。看第n位在不在,就找一下第n个bit是1,还是05 m: C" q, i) y- |
具体方法:char a[] 数组。假设找3,那么3在3/8--0...3,所以在a[0]中,找第3个bit,如果是0,就设置为1。最后看看a[]的二进制表示有多少个1就有多少个数: E6 \( q/ j+ f; L: y7 y- E
6 |" [8 ^: ?$ d3 m8 O% x( H
3. 海量数据,在mysql中,cpu占用率很高。如何解决?; U- q: A3 M0 [; B) c7 {9 Y2 ^! f
1.show processlist,看哪个sql查询的多,建索引(问:建立联合索引时,要考虑什么,怎么建(哪个在前,哪个列在后?)9 ^. o4 y& M  Z0 a9 |" q1 ^9 p
2.如果老是在拷贝到临时表,就改配置,把临时表内存改大些
5 l! c5 ~) y7 K/ @, q6 W0 y) R3.还有什么方法:
' t* U  l6 h- k- k1)分布式数据库 (问:如果你来设计分布式数据库,你会怎么设计?)  s  f3 Y: H6 x0 R: o; \
2)使用缓存   (问:如果缓存中的数据,被删除或跟新了,数据库怎么判断这个缓存的数据不能用了,是脏数据?)(不懂)
- N, Z' H& r" Z8 I  Q7 j. o问:什么情况下cpu会高?(内存不足)为什么内存不足cpu会高(频繁io读写)
0 i+ O. W7 E6 |: L9 A) d! K
$ H0 A' d6 G. }* [5 |/ ~3 X7 ^4. n个无序int,(有正有负),给一个数v,如何找出其中的a+b=v的两个数
; B/ E% d* i7 m1 Y9 \/ {(我的答案是:排序 O(nlogn),记录序列中,0,大于v,小于v的3位。( Q! V% \4 @3 [  @  m" \4 q
尝试最小的和最大的,最大不行,次大。。。,找到某个,加起来小于v了,停止
$ X7 g% Q) T8 D1 s! _尝试次小的,从上次大头停止的位置开始尝试: {+ g& p# R# K1 z, E3 y
---尝试范围两头不断缩小,复杂度为n)3 g) g8 V" L  w; E1 P; C
% `, c2 T1 b7 n, s8 J
5. 网络相册,一个人可以有多个相册,一个相册有多个图片,如何快速实现增删查移动等操作。web页面上,图片是翻页显示。
" X/ b! {9 I0 u4 f) Y(我回答:数据库记录:usr_id, book_id, item_id, position。相片放在磁盘上,目录为position/usr_id/book_id/item_id+ |/ z( i0 ~; L3 Y
一次查两个操作:1)数据库查找2)根据位置取图片+ [: S. ?% J" o( \' ?: Y" }' ^
9 e6 c6 s" u! y& D
如果用户提取某个相册的所有图片,先给他第一个相片和所有item_id列表。然后用户翻页了,在客户端通过javascript能够知道翻的是哪个item,把item_id,book_id, usr_id发给服务器,服务器根据这个到目录下去找)' y) h5 H# q( O$ K# ~' o6 z# J( w
(你这种设计会有什么问题?(答不上来。。。)(如果用户频繁翻页,那么服务器上会不断地在传输图片)(如何解决?)- d# t0 |% _9 b+ h/ f4 P0 ?
2 V* V, q  B/ K
第五题我想不出好办法,我觉得一般他们都show thumbnail: b: X1 e0 J: ^& V6 b* y
就是预览小图片不把原始图片show在页面上,点击后才能看单个图片
( L8 q- t7 X* A4 n! U/ H
6 H  c/ l% i% A) V3 q
$ r# g9 Z  W) w: v) A4 n+ f6. Unix系统里,一个简单的print hello world的c程序,从./a.out执行到屏幕打印出来这句话,是什么过程
) w: W' c1 s" t  g, P2 G& k* G& O(1.读elf,会从相对地址,计算出各个symbol的在进程中的绝对地址。然后找到入口main函数/ _- j/ c# {( i& N1 ]/ z8 Q4 J
  1.用到std的库,所有有run time load。
2 D) L$ \/ y$ c  l; a" e  2.然后是print调用的进栈
3 w7 z  ~. z, c  O# \  3.然后是系统调用,当前进程被挂起。系统调用会调用驱动。。。(内核切换,用户态到内核态)& X0 V4 a( _3 Q9 v8 t; y9 W
  4.内核处理完再唤醒当前进程。(切换)8 c& ?3 I& f+ \+ d, q; M, S$ D2 t, u
  5.print调用完毕,退栈
. b2 r) C2 J3 l8 }  6.main函数退栈
/ `2 r2 Z+ D% X8 u; ]- g2 E; o( C" x* i8 X% f' W* ~
问:哪个进程来调用的main?(不知道)
' b! K3 @. A4 {, t$ \. k应该是当前运行a.out的这个和用户交互的shell作为父进程,然后父进程fork子进程,子进程和父进程一样,然后调用execv会load执行文件,和把参数传到main的堆栈中7 S" P( b( S8 V9 L4 W) D

9 n( [# u4 ?" o$ K- P9 W: q% A7.socket编程,要注意什么问题4 K$ t6 d; s2 J: d, I2 i$ O% z* t
(服务器的serversocket的基本模型。
: |  A; P( E+ I$ P2 W但是大量请求,会不能及时响应。所以要多线程。
0 q2 N# o" P  s! d3 T+ r: j一个监听线程,多个服务线程。服务线程一开始起来都阻塞在存放请求socket的tasklist上。wait
/ K3 r& @+ N+ |* k0 V8 t5 N监听线程接受到client的socket,放入tasklist中,signal唤醒一个服务线程。服务线程处理它,并把它从list中移走( f4 H; }9 I4 x/ s5 \! e& L
注意问题:tasklist的存放的请求socket是会被放和移走的,消费者生产者问题。所以要synchronized来互斥?)
$ J( V# ?$ O) C: S6 c. e7 {5 f3 t/ H
三面# V# N7 T4 f) D: f

. x: |( {, m  e: B0 |
. U- v& x! T5 C6 {; h% {' ]$ ~' V& d2. fread的过程(文件系统-内核。。。)* ]3 a5 k3 S8 i4 Z, }" T
3. 主DB在接到数据更新后同步到后台DB,如何避免网络丢失之类的问题3 b1 ?. D! c' M# \, o# }0 h. A
(参考答案1:传的是sql语句,接到后回ack,如果主DB发现一段时间没有回,重发;其实TCP传输,就保证了不会漏数据,所以不会考虑这个问题的), {; u7 \! P6 P% U
(参考答案2:每次传sql语句和当前版本号,然后后台DB会对比版本号是不是正确,发现落后就发数据请求。主DB保留每次版本号更新关联的sql语句)
* x3 j4 Y3 o; Q! h  a4. N个bit,如和判断其中有多少个1.(时间复杂度小于N)& ^0 v3 \1 P4 w  A+ U' W. d* Y  |
预存一个2的8次方大小的数组,每个数组值是,这个下标的数的二进制的1的个数,例如:: e, a- n+ ~$ w# p; o
a[0]=0, a[1]=1, a[2]=1,a[3]=2....a[2^8-1]=7 (以空间换时间)% y# r8 ]: v4 J8 v0 G

) z6 K, T% A" D& m0 }) W5 u2 ^然后一个byte一个byte的读,看看他的值,直接以这个值为下标去数组看他的1的个数! j' X) X- k) S: t1 r  F: C% i

, H' X6 b# }2 h- v% D5 o3 M7 v% T) j/ ]  I; S
另一个方法:; E% c& f& i, K0 F$ u" k5 K

+ L% C. B7 q8 h1 }while(v){
; \7 [" \8 }( r4 Gv &= (v-1);0 I3 ]1 w" _4 U9 e' _# v% \$ ]4 Z
num++;
4 Q/ N& N: M5 `}( P3 N+ G0 C- e
1000 & 0111 = 0, 所以每&一次,不为0,说明有1个1,&到为0为止,num就是1的个数。复杂度为1的个数。& `$ J  h( O) Y) F# h# \# z- {4 i- u

' F  P9 W& |, C& G6 Z3 BZz4 L9 E7 [9 H5 s4 w
该内容转载自网络,版权归原作者所有。
6 \" K: v9 |" u9 w  k# E' y3 |1 m! k
……
8 y$ V4 G! x; u  |4 f- Phttp://bbs.aftjob.com/thread-164201-1-1.html
' h) C/ _: C% |) ^' `. I! e) u* M: ]7 |/ b2 D- P1 v4 _
3 e/ N4 A% A- V; Q& I5 F1 Q/ w6 y
百度(Baidu)求职俱乐部
5 @; `: y) {6 K5 u0 W+ V  F' Y2 n3 Whttp://bbs.aftjob.com/group-4-1.html/ D7 G  a0 z1 N4 s' D3 @8 [: I, L

9 @  `# `. f6 R) i3 f
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-12-18 10:40

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表