找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1424|回复: 0

[面筋] 整理的百度面经

[复制链接]
发表于 2011-6-28 10:40 | 显示全部楼层 |阅读模式
整理的百度面经2 _: d. r5 V" f% c; H8 Y

+ o! h$ S' W- \2 Qzz
: C3 x5 N; S% U# Q$ S# f7 I# S( y5 B* P9 J* I- P
( _9 U; \+ t4 R9 O: E
一面1. 网络编程经验:( `$ @9 z& I3 r3 R2 ?1 B& \
   如何判断一个http请求,一个客户端请求已经结束;如何处理服务器多线程
. F' r  p4 c2 V$ y   获得一个http请求后,是如何处理的?返回什么?有没有试过返回图片?
& J4 O: q6 ?/ i- v8 T; U- `   服务器给客户端请求时,是用什么函数写?服务器如何获取客户端请求,用什么函数
7 j1 V7 p/ q: W6 v6 z1 H6 N# t   (需要函数级别的连接有一个认识)
: V0 @% x* P# [5 e
' S- F& R/ Z/ w' W' k! @2. cv操作是什么函数 cv_init, cv_wait, cv_signal' H* f! b: @. U0 M# F
! E7 l* G: r8 U' l' Z# x  S0 K7 l! c
3. 有一些关键词点击次数的文件,如何输出最多点击的一百个(当时应该回答,组织一个100个元素的最大堆)
$ ]. F) m4 g% c" K1 b" q
7 g5 W3 O( J' m8 `0 s4 m4. 相交链表,如何找相交点(不能要标记)9 I5 |8 p9 q+ M! c" l$ A
   第一个头遍历到尾,知道他的长度;第二个头遍历到尾,知道他的长度。这样知道两截链表在交点前的长度,长的先走几步,然后一样长了,再轮流下走,就会相聚,相遇节点就是相交节点)% G" A0 @& V. n/ _4 v' s

+ g0 g( _( n, i' C) ]5. 有些文件,频繁访问在磁盘里头的,现在要放到内存中了。采用什么策略来决定哪些放到内存中?如果是一些url文件,放在内存后,如何快速的找到某个url的位置(采用字典序或者b树之类树状结构来组织) 如何快速找到哪些文件太久没人访问了,把他替换出去?(再那一棵树,记录树里每个位置url的访问时间;同时,那个url树的节点,也有这个时间树的对应的位置信息。时间树采用最大堆组织。要替换出去时,就从树顶取走节点,并且从中获得这个节点在url树对应位置,把他从url树中取走。当url被访问时,由于url树节点有时间树的位置信息,所以也很快找到对应节点在时间树的位置,然后把他的访问时间更新,然后做堆调整,每次堆调整为logN)
* A/ s7 T5 K% R4 J4 t2 W* s4 L' g, @  H; x, Q2 B
6. c语言相关:内联函数的好处?非内联函数被调用的过程是怎么样的?
& Q! u; t' F* F1 |8 i   int,short,char的struct,这几个数应该怎么放,内存小?怎么防止头文件被include多次?
# D" ^1 c0 J2 j/ m8 i" J% R
. w. s9 J: N7 j) s. d7. 有没有什么问题想问的2 j! {( y5 u7 i0 l- `; x8 Z8 o
8 linux 网络查看的命令
1 I4 p9 g* @1 f; u
; m' ?- Y3 R$ `二面
/ A- W3 X6 o5 W  U. \7 y1. 介绍一个项目
, |4 q0 k  k+ {
# I  Y8 N5 i  F( O# R* e  s0 W6 A, O. f2. 2.5亿个int数,可能有相同的。统计出这里头不同的数有多少个?只有2g内存。
; u) V) z; R9 W" ]; M' p(2.5*1000 000 000 * 4 =1G)3 }9 L7 W5 B0 x- e& T  o5 B9 q' v$ k
统计数-用hash,key是数,value是1或0,标记是否出现。
8 x+ V3 }  v; I* D- o: n/ _4 B$ v如果key就是那个数,那么找一个数的时候,要遍历hash才知道有没有,慢(就是如果hash紧凑,慢)。
& s' M" B- N; h解决方案:把key作为连续的(就是hash是稀疏的,有个key值没有存在这2.5亿个数中),像数组下标一样,那么要访问第n个数,直接到第n个去看,复杂度是O(1)
- j( Q4 @3 I8 B% M$ X/ s' W但是,如果连续,2.5亿个数,范围很广,而每个key用int存,会很大量,内存不一定够。
1 u% X- s) c! Q* p0 `* I0 p$ z  u解决方案:每个key用一位bit来标志。即数字1放在第一个bit上,数字2放在第二个bit上。看第n位在不在,就找一下第n个bit是1,还是0% [6 a( l/ |( _( S$ N1 x6 b
具体方法:char a[] 数组。假设找3,那么3在3/8--0...3,所以在a[0]中,找第3个bit,如果是0,就设置为1。最后看看a[]的二进制表示有多少个1就有多少个数- e/ c0 X4 m: h( ?! a

3 Y% l; L5 V3 n2 p4 J3 `' S3. 海量数据,在mysql中,cpu占用率很高。如何解决?
1 d) a3 q, j& Y% {' [- ~4 q1.show processlist,看哪个sql查询的多,建索引(问:建立联合索引时,要考虑什么,怎么建(哪个在前,哪个列在后?)
$ @$ j  d. P+ j6 @9 s2.如果老是在拷贝到临时表,就改配置,把临时表内存改大些1 E8 ~$ G0 |# ?& w" d
3.还有什么方法:7 o8 q9 C1 g4 U" \% R9 P5 p
1)分布式数据库 (问:如果你来设计分布式数据库,你会怎么设计?)
; |1 l' L8 o, o8 m& y2)使用缓存   (问:如果缓存中的数据,被删除或跟新了,数据库怎么判断这个缓存的数据不能用了,是脏数据?)(不懂)
4 f, E# L1 L# M8 j- r问:什么情况下cpu会高?(内存不足)为什么内存不足cpu会高(频繁io读写)
' L' k8 v" Y! x
: X, n9 Q% O, s3 U& N$ ]2 n8 M4. n个无序int,(有正有负),给一个数v,如何找出其中的a+b=v的两个数
9 R8 k* l- j) X6 {; K& z(我的答案是:排序 O(nlogn),记录序列中,0,大于v,小于v的3位。# @, m' Y+ X- S5 E9 \
尝试最小的和最大的,最大不行,次大。。。,找到某个,加起来小于v了,停止# m: s, o' C8 X" L$ b9 l; v5 |
尝试次小的,从上次大头停止的位置开始尝试
) B0 l# ?( V8 H( e4 T---尝试范围两头不断缩小,复杂度为n)
2 {4 z$ |$ p! L# Q, H; [9 o7 S8 s2 r: k9 Z! W) n7 F9 z& H
5. 网络相册,一个人可以有多个相册,一个相册有多个图片,如何快速实现增删查移动等操作。web页面上,图片是翻页显示。
4 v$ a, F: d; z9 w: k(我回答:数据库记录:usr_id, book_id, item_id, position。相片放在磁盘上,目录为position/usr_id/book_id/item_id
0 c' f: g( G, x) i一次查两个操作:1)数据库查找2)根据位置取图片- b5 X" r; P  p
" p1 v( m8 a( t
如果用户提取某个相册的所有图片,先给他第一个相片和所有item_id列表。然后用户翻页了,在客户端通过javascript能够知道翻的是哪个item,把item_id,book_id, usr_id发给服务器,服务器根据这个到目录下去找)1 J* |" |7 l/ u! w8 y5 G# m
(你这种设计会有什么问题?(答不上来。。。)(如果用户频繁翻页,那么服务器上会不断地在传输图片)(如何解决?)) g7 D2 q& E6 w' K. n
. F" Z" B: l! u
第五题我想不出好办法,我觉得一般他们都show thumbnail$ T2 s" p' U$ K& w9 e
就是预览小图片不把原始图片show在页面上,点击后才能看单个图片0 ?4 T. l7 M3 B, D+ U; l

# j6 |* |3 v7 ?& f( @0 A, S( u) v$ N# a/ z! y) G: X9 P$ E2 H+ i
6. Unix系统里,一个简单的print hello world的c程序,从./a.out执行到屏幕打印出来这句话,是什么过程9 o2 j# w/ ]2 _" J' ~' g- k
(1.读elf,会从相对地址,计算出各个symbol的在进程中的绝对地址。然后找到入口main函数4 E* @! e# \/ m' h1 _9 x* A4 m
  1.用到std的库,所有有run time load。
6 I3 A: @; M) p  2.然后是print调用的进栈7 f9 L3 n, b( Z- x* k  P- G, _1 B
  3.然后是系统调用,当前进程被挂起。系统调用会调用驱动。。。(内核切换,用户态到内核态)6 o* |/ d; K, g0 k9 P% @$ Y
  4.内核处理完再唤醒当前进程。(切换)" Z* h0 Y7 T: d6 ^
  5.print调用完毕,退栈
$ \/ N, `2 ]7 |( i  6.main函数退栈! q! d( X5 R/ E. o; m# ]

" ]& s& M# \- {' c/ G问:哪个进程来调用的main?(不知道)
9 K0 r& s. d. c3 V3 j+ I8 T# C应该是当前运行a.out的这个和用户交互的shell作为父进程,然后父进程fork子进程,子进程和父进程一样,然后调用execv会load执行文件,和把参数传到main的堆栈中4 @4 Y& @1 q+ u. D; n8 l  u

% P$ {" ~# K/ |  A7 N5 K7.socket编程,要注意什么问题9 g, Z4 k3 {' s4 G
(服务器的serversocket的基本模型。; U5 o5 T4 e6 s* `6 [7 M: Y4 e
但是大量请求,会不能及时响应。所以要多线程。
# h* H* L5 i  E! y1 f, _& \# v一个监听线程,多个服务线程。服务线程一开始起来都阻塞在存放请求socket的tasklist上。wait
( \# d7 T; S9 Z( x监听线程接受到client的socket,放入tasklist中,signal唤醒一个服务线程。服务线程处理它,并把它从list中移走
7 `, o. a! o* ~注意问题:tasklist的存放的请求socket是会被放和移走的,消费者生产者问题。所以要synchronized来互斥?); z# |* ~# K4 p* h

, h9 \) T* g, W4 V三面
+ b1 e: }9 \( K! @. R) Q* h, O- j, G

5 g0 J4 c. f7 r9 n- k2. fread的过程(文件系统-内核。。。)4 A& O( p, A) o, q& L" L3 ^
3. 主DB在接到数据更新后同步到后台DB,如何避免网络丢失之类的问题
+ u3 E2 B8 N; u& L+ M; b(参考答案1:传的是sql语句,接到后回ack,如果主DB发现一段时间没有回,重发;其实TCP传输,就保证了不会漏数据,所以不会考虑这个问题的)6 }7 z- x8 Q  m, {
(参考答案2:每次传sql语句和当前版本号,然后后台DB会对比版本号是不是正确,发现落后就发数据请求。主DB保留每次版本号更新关联的sql语句)
; X' f& l( ?  }4. N个bit,如和判断其中有多少个1.(时间复杂度小于N)
# W' M/ E9 B% K7 _预存一个2的8次方大小的数组,每个数组值是,这个下标的数的二进制的1的个数,例如:6 Z, G7 U; I: V# v# V
a[0]=0, a[1]=1, a[2]=1,a[3]=2....a[2^8-1]=7 (以空间换时间)
* A) c6 g- e; q: P% k4 V* w! a: p* C* t: ]7 T' d$ X% J& I* p
然后一个byte一个byte的读,看看他的值,直接以这个值为下标去数组看他的1的个数( M# |, s" `; h. |

. ^9 x- K8 L0 L5 J3 I
0 r6 N/ x$ F. e. N) P1 K/ ~另一个方法:
9 b, b" J9 F( g: D( o7 q0 B5 V% B3 j7 |
while(v){( V: ?/ ?$ {5 p6 k
v &= (v-1);
! F% k9 U& T9 u- w. ^' V/ k6 ~9 Inum++;
! y1 s, ~( M) P' s" C' O}
9 H) l: L8 [6 _0 }4 g1 P$ l. `7 a1000 & 0111 = 0, 所以每&一次,不为0,说明有1个1,&到为0为止,num就是1的个数。复杂度为1的个数。4 T; ?7 k4 A" Y0 n4 D. a
4 R" A$ t9 J2 Q, p6 o6 A
Zz  D) _. _3 |: Q* e$ S: T4 X; H
该内容转载自网络,版权归原作者所有。/ b4 j" Q" s0 r- J. a

0 T" K$ p9 e$ _……
; U2 I5 Q# ~$ t1 X6 F- qhttp://bbs.aftjob.com/thread-164201-1-1.html
0 N" Y. i+ q& i3 Y' W6 J9 i; y% Y) T6 ^# \' s

* u' d5 a7 o) b* v2 Z百度(Baidu)求职俱乐部 ! p2 [- n+ O) T+ s
http://bbs.aftjob.com/group-4-1.html
3 |4 ]$ B$ w2 V& Z
/ \  t; ~& R' _! i
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2025-12-18 17:13

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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