找回密码
 加入后院

QQ登录

只需一步,快速开始

搜索
查看: 1485|回复: 0

[面筋] 整理的百度面经

[复制链接]
发表于 2011-6-28 10:40 | 显示全部楼层 |阅读模式
整理的百度面经
! z0 d) _5 C6 N8 U( \
+ R/ m9 j$ m7 L7 R, I0 r3 M3 }# W$ ezz
. L, Y. H# D9 E/ D
" S# M( l7 C) }  W" z2 o" V, {
' ]7 Y% y7 p! H. ?- K7 q一面1. 网络编程经验:- [$ X0 {1 y$ O3 W
   如何判断一个http请求,一个客户端请求已经结束;如何处理服务器多线程/ n4 C$ e( p% s- j- |# f
   获得一个http请求后,是如何处理的?返回什么?有没有试过返回图片?  {6 F* v  N+ F' Z4 B
   服务器给客户端请求时,是用什么函数写?服务器如何获取客户端请求,用什么函数
3 q1 H3 ?: Q) A* @# ]5 x4 [   (需要函数级别的连接有一个认识)
* J) j: F/ }! ?/ Q+ j" l# |* J4 ~* p1 q( E( D# Y2 c/ \$ o
2. cv操作是什么函数 cv_init, cv_wait, cv_signal
( d- t* z+ F/ Z. _8 p. P" J& N  P* U
3. 有一些关键词点击次数的文件,如何输出最多点击的一百个(当时应该回答,组织一个100个元素的最大堆)/ X0 q0 T1 s( M4 y8 k
- Z3 X1 S7 m4 Y, R, \% r' H, D
4. 相交链表,如何找相交点(不能要标记)
6 U  |9 {+ |6 U$ }   第一个头遍历到尾,知道他的长度;第二个头遍历到尾,知道他的长度。这样知道两截链表在交点前的长度,长的先走几步,然后一样长了,再轮流下走,就会相聚,相遇节点就是相交节点)/ R0 _+ t4 C$ |7 G/ {: k

( _) t8 E3 _8 C2 w3 ?5. 有些文件,频繁访问在磁盘里头的,现在要放到内存中了。采用什么策略来决定哪些放到内存中?如果是一些url文件,放在内存后,如何快速的找到某个url的位置(采用字典序或者b树之类树状结构来组织) 如何快速找到哪些文件太久没人访问了,把他替换出去?(再那一棵树,记录树里每个位置url的访问时间;同时,那个url树的节点,也有这个时间树的对应的位置信息。时间树采用最大堆组织。要替换出去时,就从树顶取走节点,并且从中获得这个节点在url树对应位置,把他从url树中取走。当url被访问时,由于url树节点有时间树的位置信息,所以也很快找到对应节点在时间树的位置,然后把他的访问时间更新,然后做堆调整,每次堆调整为logN)5 {" J& T6 n7 S) S' A- r4 I" k% S& J
3 A; p# R; W, H8 ^- r$ m5 m
6. c语言相关:内联函数的好处?非内联函数被调用的过程是怎么样的?
+ K4 s& T. a. K8 S8 {8 L& E   int,short,char的struct,这几个数应该怎么放,内存小?怎么防止头文件被include多次?
; e5 G  S; E& Y% m* g$ l" C8 q& P' ]1 P: A+ m
7. 有没有什么问题想问的) a5 _+ W; _! b, X' l
8 linux 网络查看的命令1 X2 r6 @6 t* R6 n5 V% Y
0 `/ n4 [( ?. n" a4 \
二面
. Z7 ]/ b* f) R6 ~* b1. 介绍一个项目  k% J( V# ]; Y/ q/ d

  Z/ K% R, ]$ v2. 2.5亿个int数,可能有相同的。统计出这里头不同的数有多少个?只有2g内存。
& ^9 F( }6 Q: w: G% T! V(2.5*1000 000 000 * 4 =1G)$ j* m. t3 v& \( b. S6 d0 |
统计数-用hash,key是数,value是1或0,标记是否出现。
& `4 }. @1 c) e' x- |3 [) B/ x如果key就是那个数,那么找一个数的时候,要遍历hash才知道有没有,慢(就是如果hash紧凑,慢)。) h9 T5 W! C6 p8 b
解决方案:把key作为连续的(就是hash是稀疏的,有个key值没有存在这2.5亿个数中),像数组下标一样,那么要访问第n个数,直接到第n个去看,复杂度是O(1)
7 w9 H. G0 c  \+ B. l但是,如果连续,2.5亿个数,范围很广,而每个key用int存,会很大量,内存不一定够。
9 B; T0 ]" N5 F( ]! o. L解决方案:每个key用一位bit来标志。即数字1放在第一个bit上,数字2放在第二个bit上。看第n位在不在,就找一下第n个bit是1,还是0+ [0 M4 |4 l- X% E3 T% |2 C
具体方法:char a[] 数组。假设找3,那么3在3/8--0...3,所以在a[0]中,找第3个bit,如果是0,就设置为1。最后看看a[]的二进制表示有多少个1就有多少个数
5 p! X' v7 [( l) I$ O4 A1 d# D3 q, T$ P/ \1 c
3. 海量数据,在mysql中,cpu占用率很高。如何解决?' x, X8 B2 L3 Z4 T0 g5 \
1.show processlist,看哪个sql查询的多,建索引(问:建立联合索引时,要考虑什么,怎么建(哪个在前,哪个列在后?)6 s) H, ?" P$ y9 |* I
2.如果老是在拷贝到临时表,就改配置,把临时表内存改大些; l+ @9 N: U  D
3.还有什么方法:) u# D8 c4 j! \* ?  {& L3 ~  ^
1)分布式数据库 (问:如果你来设计分布式数据库,你会怎么设计?)
/ W8 u" K; s$ k/ ~; E2 h2)使用缓存   (问:如果缓存中的数据,被删除或跟新了,数据库怎么判断这个缓存的数据不能用了,是脏数据?)(不懂)
5 v# h3 C5 o6 f# ]& D! ~3 [- [/ ]+ {问:什么情况下cpu会高?(内存不足)为什么内存不足cpu会高(频繁io读写)
/ ^0 g3 l& C( t% s" @9 r6 P
. E+ o- ]9 o! C3 J  s4. n个无序int,(有正有负),给一个数v,如何找出其中的a+b=v的两个数
5 g/ e: L/ M0 H9 k6 E$ T" T* Q8 w(我的答案是:排序 O(nlogn),记录序列中,0,大于v,小于v的3位。( o& }; O6 J! x, N2 j
尝试最小的和最大的,最大不行,次大。。。,找到某个,加起来小于v了,停止
# O* R$ \) L6 m* j  ^7 W尝试次小的,从上次大头停止的位置开始尝试
, Y  f% i4 y9 B' W; L7 E, W---尝试范围两头不断缩小,复杂度为n)& B5 F+ U( W* i/ w: n% @
3 a; V' `" E+ {6 o7 S3 l2 I$ B! t
5. 网络相册,一个人可以有多个相册,一个相册有多个图片,如何快速实现增删查移动等操作。web页面上,图片是翻页显示。5 N  a7 \" U0 H: |8 `+ B0 D& s- O/ A: Q
(我回答:数据库记录:usr_id, book_id, item_id, position。相片放在磁盘上,目录为position/usr_id/book_id/item_id
% ^$ y7 s2 `% t: e2 a一次查两个操作:1)数据库查找2)根据位置取图片  ]/ B! `5 C7 T  I+ T: Q) N! K

( K- ]; c5 b' C! L% s如果用户提取某个相册的所有图片,先给他第一个相片和所有item_id列表。然后用户翻页了,在客户端通过javascript能够知道翻的是哪个item,把item_id,book_id, usr_id发给服务器,服务器根据这个到目录下去找)
9 o( m/ _9 ~6 z4 T(你这种设计会有什么问题?(答不上来。。。)(如果用户频繁翻页,那么服务器上会不断地在传输图片)(如何解决?)
# q2 r7 y+ W2 x4 Z
5 l, M/ G2 V" B& a第五题我想不出好办法,我觉得一般他们都show thumbnail
5 Y( a; d; g( J$ r% A! O( g就是预览小图片不把原始图片show在页面上,点击后才能看单个图片7 l# Q" }% O) w# y

/ r' ^% g9 j1 M/ n( h  ^
: u; X2 h' r& G4 ]) j7 t" U6. Unix系统里,一个简单的print hello world的c程序,从./a.out执行到屏幕打印出来这句话,是什么过程- c3 }' p  G( Y$ V
(1.读elf,会从相对地址,计算出各个symbol的在进程中的绝对地址。然后找到入口main函数! O  d; ^- [( E, [" a( y
  1.用到std的库,所有有run time load。6 |8 C. N2 A! e. a9 D. h8 c) K2 E
  2.然后是print调用的进栈* H- O, v# A! T: m% S+ g
  3.然后是系统调用,当前进程被挂起。系统调用会调用驱动。。。(内核切换,用户态到内核态)
8 f& `; j0 ?+ B9 G; U( I  4.内核处理完再唤醒当前进程。(切换)5 F  N2 w/ i7 d
  5.print调用完毕,退栈9 Y& a4 E/ ^* R4 C4 i( ^" J8 _
  6.main函数退栈0 R% w# ]2 {4 v1 C3 ^) r
4 [( O$ A$ R! P) [$ s
问:哪个进程来调用的main?(不知道)
/ A: y  n! I0 }+ o, s" n应该是当前运行a.out的这个和用户交互的shell作为父进程,然后父进程fork子进程,子进程和父进程一样,然后调用execv会load执行文件,和把参数传到main的堆栈中7 o, A) j% o* t. o: n
4 u( }; h! e1 _+ K9 ~1 G; z
7.socket编程,要注意什么问题
; ^; a* Z3 X5 h(服务器的serversocket的基本模型。
! I, {$ h3 J: E但是大量请求,会不能及时响应。所以要多线程。4 F" s3 u. ]5 m: [- X2 `3 v+ S
一个监听线程,多个服务线程。服务线程一开始起来都阻塞在存放请求socket的tasklist上。wait
: A% @3 ~3 O" Z8 s% S  H监听线程接受到client的socket,放入tasklist中,signal唤醒一个服务线程。服务线程处理它,并把它从list中移走9 _, Y: {+ b: Z- f
注意问题:tasklist的存放的请求socket是会被放和移走的,消费者生产者问题。所以要synchronized来互斥?)
8 `8 s5 C* @: ]' g4 e- h! L+ }! h: w1 m! U+ p
三面
; ]! N5 ~* L6 ^3 Q& t! U, y# ]8 u8 I- F) Y+ T( ?: p
; r4 r, s* L* F4 X" C3 L' s, v
2. fread的过程(文件系统-内核。。。): \2 P$ f7 C; t9 c# P1 v4 E
3. 主DB在接到数据更新后同步到后台DB,如何避免网络丢失之类的问题
4 p5 Z5 U, j: h: v& y1 j/ m( |(参考答案1:传的是sql语句,接到后回ack,如果主DB发现一段时间没有回,重发;其实TCP传输,就保证了不会漏数据,所以不会考虑这个问题的)8 q3 m4 u4 C9 q( m
(参考答案2:每次传sql语句和当前版本号,然后后台DB会对比版本号是不是正确,发现落后就发数据请求。主DB保留每次版本号更新关联的sql语句)0 A3 D1 g  K! ^6 l" y
4. N个bit,如和判断其中有多少个1.(时间复杂度小于N)1 q7 o6 N" P8 |, h. u
预存一个2的8次方大小的数组,每个数组值是,这个下标的数的二进制的1的个数,例如:+ d& j8 s# Z: S" |, G4 `
a[0]=0, a[1]=1, a[2]=1,a[3]=2....a[2^8-1]=7 (以空间换时间)6 Z, W5 [, U5 D  K. x) s* Z$ c1 }
8 p7 }8 Q; d/ g) F. l
然后一个byte一个byte的读,看看他的值,直接以这个值为下标去数组看他的1的个数! |- w* \* u2 V
8 ]& }- L% v( z+ ?6 p
, _6 }' c5 e* `& {2 ^! |
另一个方法:
: {6 u9 ~6 w$ [0 F4 L5 g4 V
' e0 Q9 s9 t  r6 n' w' l) fwhile(v){( N. d/ D2 O9 `7 M" i& q& @
v &= (v-1);% j5 q/ Y4 s9 J& b
num++;$ e7 Y! G; `5 n+ n' `
}3 Q% }- ]5 m# d% j
1000 & 0111 = 0, 所以每&一次,不为0,说明有1个1,&到为0为止,num就是1的个数。复杂度为1的个数。
. }  p1 ?, p9 L/ w. ^. k; T/ x( T0 ]; H- X! L+ T, `
Zz
/ d3 U. T0 b6 ^' k: I8 f该内容转载自网络,版权归原作者所有。
: r4 ]; f/ i; T( F; F" @4 [& G  n8 o7 q5 j9 ?+ t* N
……- x# s3 i, M$ p3 M: ?6 A3 W
http://bbs.aftjob.com/thread-164201-1-1.html
, Z6 D" ]. Q0 B7 U5 a2 ]# C! L% ^* h; \0 \$ @' U
/ d; p8 y2 }7 t; H$ U6 D
百度(Baidu)求职俱乐部
& w4 h8 _) z$ P2 X# ihttp://bbs.aftjob.com/group-4-1.html
7 m; J# n( L3 _2 w& U% U  x, L( h( b% w- m& `2 v! a4 w
您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

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

GMT+8, 2026-9-24 21:44

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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