Chinaunix

标题: 腾讯公司后台服务器经典面试题 (2009年5月) [打印本页]

作者: fm971    时间: 2009-06-18 16:44
标题: 腾讯公司后台服务器经典面试题 (2009年5月)
前些时间去了腾讯面试, 可惜现场没回答好。
是一些基础问题,同时也比较深入的问题。 在此列出来, 欢迎大家讨论交流。


提问(不按时间顺序):

1, 使用Linux epoll模型,水平触发模式(Level-Triggered);当socket可写时,会不停的触发socket可写的事件,如何处理?

2, 从socket读数据时,socket缓存里的数据,可能超过用户缓存的长度,如何处理? 例如,socket缓存有8kB的数据,而你的缓存只有2kB空间。

3, 向socket发送数据时, 可能只发送了用户缓存里的一半,如何处理?例如,需要向socket发送8kB数据,返回值只有2kB发送成功。


4, C++的虚函数是怎么实现的?

5, C++的虚函数有什么作用?

6, 非阻塞connect()如何实现?

7,sizeof()问题

class A
{
  char c;
  int   val;
  short sh;
}


class B
{
    char c;
    int   val;
    short sh;
    void func1(void);
    virtual func2(void);
}

sizeof(A), sizeof(B) 分别是多少?

8, 实现字符串比较函数  strcmp(char *src, char * sub)

9, 实现内存拷贝函数  strcpy(void*dst, char * src, size_t len)

10,条件变量的如何使用? 你使用的线程函数是什么?

11, deamon进程如何实现?

12, HTTP和CGI是什么?

13, TCP的三次握手, TIME_WAIT和CLOSE_WAIT状态是什么?


因为第7题之后的属于客观题,不打算在此写答案。 朋友们如有好的答案也欢迎跟贴。

本人在此写出自己对前6个问题的回答:

1, 使用linux epoll模型,水平触发模式(Level-Triggered);当socket可写时,会不停的触发socket可写的事件,如何处理?

第一种最普通的方式:  
    当需要向socket写数据时,将该socket加入到epoll模型(epoll_ctl);等待可写事件。
    接收到socket可写事件后,调用write()或send()发送数据。。。
    当数据全部写完后, 将socket描述符移出epoll模型。
   
    这种方式的缺点是:  即使发送很少的数据,也要将socket加入、移出epoll模型。有一定的操作代价。

第二种方式,(是本人的改进方案, 叫做directly-write)

    向socket写数据时,不将socket加入到epoll模型;而是直接调用send()发送;
    只有当或send()返回错误码EAGAIN(系统缓存满),才将socket加入到epoll模型,等待可写事件后,再发送数据。
    全部数据发送完毕,再移出epoll模型。

     这种方案的优点:   当用户数据比较少时,不需要epool的事件处理。
     在高压力的情况下,性能怎么样呢?   
      对一次性直接写成功、失败的次数进行统计。如果成功次数远大于失败的次数, 说明性能良好。(如果失败次数远大于成功的次数,则关闭这种直接写的操作,改用第一种方案。同时在日志里记录警告)
     在我自己的应用系统中,实验结果数据证明该方案的性能良好。
     
    事实上,网络数据可分为两种到达/发送情况:
     一是分散的数据包, 例如每间隔40ms左右,发送/接收3-5个 MTU(或更小,这样就没超过默认的8K系统缓存)。
     二是连续的数据包, 例如每间隔1s左右,连续发送/接收 20个 MTU(或更多)。

回来查了资料,发现以下两种方式:

    第三种方式:  使用Edge-Triggered(边沿触发),这样socket有可写事件,只会触发一次。
             可以在应用层做好标记。以避免频繁的调用 epoll_ctl( EPOLL_CTL_ADD, EPOLL_CTL_MOD)。  这种方式是epoll 的 man 手册里推荐的方式, 性能最高。但如果处理不当容易出错,事件驱动停止。

第四种方式:  在epoll_ctl()使用EPOLLONESHOT标志,当事件触发以后,socket会被禁止再次触发。
             需要再次调用epoll_ctl(EPOLL_CTL_MOD),才会接收下一次事件。   这种方式可以禁止socket可写事件,应该也会同时禁止可读事件。会带来不便,同时并没有性能优势,因为epoll_ctl()有一定的操作代价。


2, 从socket读数据时,socket缓存里的数据,可能超过用户缓存的长度,如果处理?
       可以调用realloc(),扩大原有的缓存块尺寸。
       但是临时申请内存的有一定性能损失。

      这种情况要看接收缓存的方式。
第一种方式:  使用100k的大接收缓存为例。
               如果要等待数据,并进行解析。可能发生缓存不够的情况。此时只能扩充缓存,或先处理100k的数据,再接收新的数据。
第二种方式: 使用缓存队列,分成8K大小的队列。
               不存在接收缓存不够的情况。 除非用户解析已出错,使用数据接收、使用脱勾。 这种方式的代价是,可能需要将缓存队列再次拷贝、拼接成一块大的缓存,再进行解析。 而在本人的系统中,只需要将socket接收的数据再次原样分发给客户, 所以这种方案是最佳方案。

3, 向socket发送数据时, 可能只发送了用户缓存里的一半,然后失败,如何处理?

      记录缓存的偏移量。 下一次socket写事件时, 再从偏移的位置接着发送。
      
       那个面试官居然对这个问题问了我两次, 看来我解释的不够清晰。。。。。。 郁闷。

4, C++的虚函数是怎么实现的?
       使用虚函数表。
       回来查下资料:  C++对象使用虚表, 如果是基类的实例,对应位置存放的是基类的函数指针;如果是继承类,对应位置存放的是继承类的函数指针(如果在继承类有实现)。所以,当使用基类指针调用对象方法时,也会根据具体的实例,调用到继承类的方法。

5, C++的虚函数有什么作用?

        虚函数作用是实现多态, 很多人都能理解这一点。但却不会回答下面这一点。

       更重要的,虚函数其实是实现封装,使得使用者不需要关心实现的细节。在很多设计模式中都是这样用法,例如Factory、Bridge、Strategy模式。 前两天在书上刚好看到这个问题,但在面试的时候却没想起来。
        个人觉得这个问题可以很好的区分C++的理解水平。

6, 非阻塞connect()如何实现?
       将socket设置成non-blocking,操作方法同非阻塞read()、write();
       面试官是在听到我介绍之后,才问我这个问题。可惜还是问我两遍。




这次面试, 总的来说准备不够充足, 所以这次机会没有青睐我!
也有其它一些问题:
1, 对于一般的面试提问, 总是想很简要的回答完。因为对方可能本来就很清楚,所以自己就想一两句话说完。 但是有时候这样行不通。需要适当的回答清晰、完整一些。
2, 对TCP/UDP的问题本来是很熟悉的,但因为长时间没复习,忘的差不多了。
3, 以前已经对RTSP进行了仔细的学习。 HTTP、SIP属于同一类协议。而我却回答不了HTTP的问题。努力学习啊................
4, 有些问题要问我两遍,说明我的表达确实不够清晰。有的问题可能面试官自己并不清晰,所以除了表达清晰之外,完全有必要适当的回答稍完整些。否则很难让人满意。
5, 精神状态不太好,思维有些慢了。 因为总是睡的晚。

接下来打算继续研究 lighttpd源码, 这样对我自己的水平提高会有很大帮助。

机会总是青睐有准备的人! 期待下次。


[ 本帖最后由 fm971 于 2009-6-18 17:52 编辑 ]
作者: flynetcn    时间: 2009-06-18 16:57
什莫叫经典?就是每次都考的
作者: xinglp    时间: 2009-06-18 17:01
epoll 不是 epool 不要用什么水平触发
作者: bobozhang    时间: 2009-06-18 17:10
2, 从socket读数据时,socket缓存里的数据,可能超过用户缓存的长度,如果处理?

3, 向socket发送数据时, 可能只发送了用户缓存里的一半,然后失败,如何处理?

上面这两个题目意思不是很明确阿

6, 非阻塞connect()如何实现?

这个题目没有答好
作者: GodPig    时间: 2009-06-18 17:13
大部分都不懂……
作者: ideawu    时间: 2009-06-18 17:24
楼主的回答很好了, 可能面试官不适合你. 也许是你没有作品, 一件作品胜千言啊.
作者: ideawu    时间: 2009-06-18 17:26
ps: 楼主可以把字体改为黑色, 这样看起来会容易一些. ^_^
作者: peimichael    时间: 2009-06-18 17:30
问下lz是校园招聘还是社会招聘?
作者: fm971    时间: 2009-06-18 17:31
原帖由 xinglp 于 2009-6-18 17:01 发表
epoll 不是 epool 不要用什么水平触发


谢谢赐教!
作者: GodPig    时间: 2009-06-18 17:34
标题: 回复 #8 peimichael 的帖子
应该是社会的吧~~~
作者: fm971    时间: 2009-06-18 17:35
原帖由 ideawu 于 2009-6-18 17:24 发表
楼主的回答很好了, 可能面试官不适合你. 也许是你没有作品, 一件作品胜千言啊.



我已经有3年的windows开发,1年的linux跨平台C++开发经验啊。但是对Linux API不够熟。

现在是蓝色能看清不?


原帖由 peimichael 于 2009-6-18 17:30 发表
问下lz是校园招聘还是社会招聘?


是社会招聘。 腾讯毕竟是优秀的企业, 能进去混也错。
作者: peimichael    时间: 2009-06-18 17:37
原帖由 fm971 于 2009-6-18 17:35 发表

是社会招聘。


还好,要是校园招聘就这么难那我压力就太大啦
作者: bobozhang    时间: 2009-06-18 17:38
腾讯还是很不错的企业,,,
作者: ideawu    时间: 2009-06-18 17:42
3, 向socket发送数据时, 可能只发送了用户缓存里的一半,然后失败,如何处理?

write/send返回比用户要求小的字节数, 并不是失败, 而是一种正常的行为. 这个问题应该是有上下文环境为前提的, 不知道你们是否谈了什么库或者软件?

6, 非阻塞connect()如何实现?

问的是实现还是使用?
作者: fm971    时间: 2009-06-18 17:51
原帖由 ideawu 于 2009-6-18 17:42 发表
3, 向socket发送数据时, 可能只发送了用户缓存里的一半,然后失败,如何处理?

write/send返回比用户要求小的字节数, 并不是失败, 而是一种正常的行为. 这个问题应该是有上下文环境为前提的, 不知道你们是 ...



都是问的linux服务器编程问题, 就是socket的使用。
那个面试官就是这样问我怎么处理。 可以把“然后失败“几个字去掉, 这种情况也属于发送失败啊,没达到想要的数据大小。
作者: cugb_cat    时间: 2009-06-18 17:52
原帖由 fm971 于 2009-6-18 17:35 发表



我已经有3年的windows开发,1年的linux跨平台C++开发经验啊。但是对Linux API不够熟。

现在是蓝色能看清不?




是社会招聘。 腾讯毕竟是优秀的企业, 能进去混也错。

混?
作者: OwnWaterloo    时间: 2009-06-18 21:50
原帖由 fm971 于 2009-6-18 16:44 发表

4, C++的虚函数是怎么实现的?
7,sizeof()问题


这种问题 …… 有意思吗 ……

绝大多数情况下, 不了解虚函数怎么实现, 不了解内存布局, 就不能开发了?
高级语言的目的之一就是抽象细节。 面试管的这种问题是舍本逐末,  诱导众多面试者去纠缠一些不必要的细节。把“面试”也搞成“应试”。
与之相对的, 题目5还靠谱一些。


排除绝大多数情况, 如果确实需要知道内存布局这种细节, 正确的作法也是在电脑面前, 写出相应代码(可能还需要编译器扩展), 并验证布局是否确实如所想那般安排; 而不是四眼对望,然后yy!


面试出这种题目要么显摆,要么有病,再次鄙视
作者: 南无小和尚    时间: 2009-06-18 21:58
好多都不懂,我哭了
作者: Ray001    时间: 2009-06-18 23:10
有点难。支持楼主。
作者: hightman    时间: 2009-06-19 02:07
这份面试题对应的工资是多少啊?

对了,无阻塞connect除了将socket fd设为NONBLOCK外, 你应该回答如何判断连接成功... 比如用select()判断这个fd, 当它变成可写表示连接成功, 如果既可读也可写则是连接失败.
作者: 虎皮尖椒    时间: 2009-06-19 08:55
我苦笑ing

[ 本帖最后由 虎皮尖椒 于 2009-6-19 08:57 编辑 ]
作者: anders0913    时间: 2009-06-19 09:18
这个,还要在努力了~~
作者: chrisyan    时间: 2009-06-19 09:40
unp上都有啊,就是好多都忘记了,唉
作者: cugb_cat    时间: 2009-06-19 11:02
原帖由 hightman 于 2009-6-19 02:07 发表
这份面试题对应的工资是多少啊?

对了,无阻塞connect除了将socket fd设为NONBLOCK外, 你应该回答如何判断连接成功... 比如用select()判断这个fd, 当它变成可写表示连接成功, 如果既可读也可写则是连接失败.

你认为这份题应该对应多少工资啊?
作者: chary8088    时间: 2009-06-19 11:14
题目比较一般吧
EPOLL的,我是经常使用LEVEL-trigger的
作者: bobozhang    时间: 2009-06-19 11:16
腾讯工资不是很高吧
作者: cugb_cat    时间: 2009-06-19 11:27
原帖由 chary8088 于 2009-6-19 11:14 发表
题目比较一般吧
EPOLL的,我是经常使用LEVEL-trigger的

LT会有瓶颈的,我们现在就遇到了。。。
作者: fm971    时间: 2009-06-19 11:37
原帖由 hightman 于 2009-6-19 02:07 发表
这份面试题对应的工资是多少啊?

对了,无阻塞connect除了将socket fd设为NONBLOCK外, 你应该回答如何判断连接成功... 比如用select()判断这个fd, 当它变成可写表示连接成功, 如果既可读也可写则是连接失败.


应该是1-2W, 也要看你水平。  我是回答的不太仔细。
作者: fm971    时间: 2009-06-19 11:40
原帖由 OwnWaterloo 于 2009-6-18 21:50 发表


这种问题 …… 有意思吗 ……

绝大多数情况下, 不了解虚函数怎么实现, 不了解内存布局, 就不能开发了?
高级语言的目的之一就是抽象细节。 面试管的这种问题是舍本逐末,  诱导众多面试者去纠 ...


这些问题还是有针对性和。
做服务器开发, 必须要知道数据如何在内存中存储,如何在网络上传输, 每种操作的开销是多少。
作者: fm971    时间: 2009-06-19 11:46
原帖由 cugb_cat 于 2009-6-19 11:27 发表

LT会有瓶颈的,我们现在就遇到了。。。

原帖由 chary8088 于 2009-6-19 11:14 发表
题目比较一般吧
EPOLL的,我是经常使用LEVEL-trigger的


原帖由 xinglp 于 2009-6-18 17:01 发表
epoll 不是 epool 不要用什么水平触发



我使用的是libevent,封装了epoll,支持大量的定时器。
从效果来看,libevent是使用LT触发。 估计LT方式可以使跨平台的架构更简单。
两种模式都会有一些实际问题。
作者: OwnWaterloo    时间: 2009-06-19 12:14
标题: 回复 #29 fm971 的帖子
原帖由 fm971 于 2009-6-19 11:40 发表

做服务器开发, 必须要知道数据如何在内存中存储,如何在网络上传输, 每种操作的开销是多少。


原帖由 OwnWaterloo 于 2009-6-18 21:50 发表

排除绝大多数情况, 如果确实需要知道内存布局这种细节, 正确的作法也是在电脑面前, 写出相应代码(可能还需要编译器扩展), 并验证布局是否确实如所想那般安排; 而不是四眼对望,然后yy!


所以, 直接给你一个结构体, 问你sizeof是多少, 依然是yy, non-sense。
作者: GodPig    时间: 2009-06-19 12:34
哇噻
1-2W

羡慕…………
作者: DQP    时间: 2009-06-19 12:47
原帖由 OwnWaterloo 于 2009-6-18 21:50 发表


这种问题 …… 有意思吗 ……

绝大多数情况下, 不了解虚函数怎么实现, 不了解内存布局, 就不能开发了?
高级语言的目的之一就是抽象细节。 面试管的这种问题是舍本逐末,  诱导众多面试者去纠 ...


这个不能认同.
像sizeof这种题还是有用的. 一个不知道内存布局是怎么回事的人开发的时候不去像你说的那样在电脑前试的. 连这块可能会有问题都不知道怎么会去试, 而且即使测了也很有可能得到错误的推论因为有些时候错误的理论也是可以和现实相匹配的。 
就像地心说也能解释很多现象一样.
作者: benjiam    时间: 2009-06-19 14:29
不错, 都会


send 失败和 recv 失败的这个

如果send 失败 是因为没buff, 自然就是设置 标记 继续send,lz 答得对啊

recv 的话, 我想他考的意思是 epoll 返回一次, 你取8k, 你不取完, 就需要多次取。
多次取需要epoll 多次返回,

还有一个缺点就是下次 epoll 返回的时候,你的逻辑可能还没清空那2k buff,
这是会导致一些问题。

取完的话,客户buff无法存储。

方法有1 扩大客户buff
2 将其余buff 以消息形式send 给客户
作者: bandaotidejia    时间: 2009-06-19 15:10
这个职位能接到面试通知就说明很强了。lz很牛啊。
作者: wxfjx    时间: 2009-06-19 15:15
貌似我都不会啊
作者: fm971    时间: 2009-06-19 15:50
原帖由 bandaotidejia 于 2009-6-19 15:10 发表
这个职位能接到面试通知就说明很强了。lz很牛啊。


现在明白了其实优秀的开发人员,都是在某一个领域比较深入。

我们做开发的人很容易忽略这一点,很多时候没有持续的学习研究,或者基础不够扎实,专长不够突出。



原帖由 benjiam 于 2009-6-19 14:29 发表
不错, 都会


send 失败和 recv 失败的这个

如果send 失败 是因为没buff, 自然就是设置 标记 继续send,lz 答得对啊

recv 的话, 我想他考的意思是 epoll 返回一次, 你取8k, 你不取完, 就需要多次取 ...


这样回答就是好像不太让人满意......不知道那人要问什么......
作者: zsmdev    时间: 2009-06-19 16:23
腾讯的题目也不容易答啊,腾讯有那么好吗?
作者: benjiam    时间: 2009-06-19 16:36
recv 的话,
我想他考的意思是 epoll 返回一次, 你取8k, 你不取完,
怎么解决?

我的理解

方法 一 就是 一次取完

但是客户的buff 不够, 所以

   方案1是 扩展客户的buff
   方安 2 申请新buff, 将其余的buff 以消息发给客户对象
缺点
   方安1 扩展未必成功,扩展有局限性
   方案2 申请buff 加大复杂性,使用消息队列,锁

优点 多核多线程支持 容易扩展

方法 二 就是 多次取
每次取2k, 逻辑层处理, 然后等第二次epoll 返回再次取2k 逻辑返回, 或者逻辑处理完了再来取2k

缺点
1 多次取需要epoll 多次返回,

2 下次 epoll 返回的时候,你的逻辑可能还没清空那2k buff,
这是会导致一些问题。

单线程而已 否则很容易导致问题
逻辑核io 混杂再一起,系统分层不好

优点
逻辑简单,不需要额外内存
作者: zsmdev    时间: 2009-06-19 16:42
原帖由 fm971 于 2009-6-19 15:50 发表


现在明白了其实优秀的开发人员,都是在某一个领域比较深入。

我们做开发的人很容易忽略这一点,很多时候没有持续的学习研究,或者基础不够扎实,专长不够突出。


一般人只能沦为打杂的
我们做完这个项目做另一个,没有连续性怎么办,公司是为了钱,才不管你的技术修为
作者: hightman    时间: 2009-06-19 18:14
考得挺细的, 大部分可以从 man 上找到, 但在我仔细去读 man 之前有些地方也已经忘了或还没碰到过!

对于写操作的监视, 我用得还比较少, 偶尔碰到真的缓冲区填满的情况也只是简单处理一下就如同 errno 所说的 Again 一次 :p.

此外, 通篇竟然没提到半点IPC(进程间通信)的问题..., 这也是后台服务程序很大的一块啊, 无论是否多进程模型都要处理信号问题.

前面我提到问一下说这份面试对应的工资, 我心里的预计是不应低于1.5w左右...

[ 本帖最后由 hightman 于 2009-6-19 18:18 编辑 ]
作者: huxk    时间: 2009-06-19 21:12
前面几个关于网络的问题,如果是搞上几年网络服务器开发并经常总结思考的程序员应该不是问题,不过我推测楼主面试时表达不太好,或者在面试时思路乱了,或者有其他情况。否则按楼主写的答案拿下来当不成多大问题啊。

而且问的问题都是编程中非常实际的问题,也许他遇到这种情况和你遇到这种情况处理方式是不一样的,他不满意也情有可原。因为不涉及到非常一般性的结论。

奇怪,本人好多面试很少谈技术之类的,都问编程思想。
作者: UnixStudier    时间: 2009-06-19 21:33
原帖由 hightman 于 2009-6-19 18:14 发表
考得挺细的, 大部分可以从 man 上找到, 但在我仔细去读 man 之前有些地方也已经忘了或还没碰到过!

对于写操作的监视, 我用得还比较少, 偶尔碰到真的缓冲区填满的情况也只是简单处理一下就如同 errno 所说的 ...


1.5w?!腾讯这么高的工资阿?简直不敢相信阿.
看来我要银子实在是太少了阿.
我估计也就7k-9k这样.

[ 本帖最后由 UnixStudier 于 2009-6-19 21:43 编辑 ]
作者: lbaby    时间: 2009-06-19 22:40
哇,基本不会。
作者: powing    时间: 2009-06-19 22:41
class A
{
  char c;
  int   val;
  short sh;
}
其实内存布局还是要了解的,因为写成下面的会更省
class A
{
  char c;
  short sh;
  int   val;
};
作者: yulc    时间: 2009-06-19 23:37
2, 从socket读数据时,socket缓存里的数据,可能超过用户缓存的长度,如何处理? 例如,socket缓存有8kB的数据,而你的缓存只有2kB空间。



这个问题是考什么?
我的缓存只有2k空间,那就一次只能读出2k, 然后再读余下的就是了.
作者: tianxiaogang12    时间: 2009-06-19 23:42
大多都不会 看来自己还有很长的路要走 啊
作者: evaspring    时间: 2009-06-20 00:25
原帖由 UnixStudier 于 2009-6-19 21:33 发表


1.5w?!腾讯这么高的工资阿?简直不敢相信阿.
看来我要银子实在是太少了阿.
我估计也就7k-9k这样.


人家说的或许是年薪呢 ~
作者: bobozhang    时间: 2009-06-20 08:04
在成都应该也在8K吧
作者: mingyanguo    时间: 2009-06-20 09:27
原帖由 fm971 于 2009-6-18 00:44 发表
前些时间去了腾讯面试, 可惜现场没回答好。
是一些基础问题,同时也比较深入的问题。 在此列出来, 欢迎大家讨论交流。


提问(不按时间顺序):

1, 使用Linux epoll模型,水平触发模式(Level-Trig ...

泪奔~~~~~~~大部分问题回答不好
作者: NewCore    时间: 2009-06-20 09:28
唉,这就是社招和校园招聘的区别呀。

在学校理论也没学好,实际的东西也块忘了,这到毕业还怎么混...
作者: alibabatea    时间: 2009-06-20 09:28
现在能做出大概只有70%吧 路还长着呢……
像楼主学习 继续努力
作者: bbjmmj    时间: 2009-06-20 12:02
显然腾讯是要招收最基层的技术人员,要求懂点网络编程,但是我有点搞不明白了,腾讯招聘为什么要考这些可以临时抱佛脚的东西呢?
作者: UnixStudier    时间: 2009-06-20 12:57
原帖由 evaspring 于 2009-6-20 00:25 发表


人家说的或许是年薪呢 ~

呵呵,这就更没谱儿了
作者: kestre1    时间: 2009-06-20 18:05
原帖由 peimichael 于 2009-6-18 17:37 发表


还好,要是校园招聘就这么难那我压力就太大啦



作者: fm971    时间: 2009-06-20 18:15
原帖由 bbjmmj 于 2009-6-20 12:02 发表
显然腾讯是要招收最基层的技术人员,要求懂点网络编程,但是我有点搞不明白了,腾讯招聘为什么要考这些可以临时抱佛脚的东西呢?


那推荐你先抱下佛脚,然后去腾讯吧。 据说待遇不错。
作者: maxxfire    时间: 2009-06-20 18:16
楼主赞。。
不错不错,顶。。
作者: fm971    时间: 2009-06-20 18:19
原帖由 UnixStudier 于 2009-6-19 21:33 发表


1.5w?!腾讯这么高的工资阿?简直不敢相信阿.
看来我要银子实在是太少了阿.
我估计也就7k-9k这样.


7k-9k我自己早就有了。 不过在深圳1W以下基本属于穷民。
作者: bbjmmj    时间: 2009-06-20 19:46
原帖由 fm971 于 2009-6-20 18:15 发表


那推荐你先抱下佛脚,然后去腾讯吧。 据说待遇不错。


这个职位可以干到65岁退休么?老婆工作给安排么?孩子转学给办么?如果这些都可以的话,我对这个职位很感兴趣。

PS:这种职位有没有过劳死的可能性呢?
作者: maxxfire    时间: 2009-06-20 19:56
原帖由 bbjmmj 于 2009-6-20 19:46 发表

这个职位可以干到65岁退休么?老婆工作给安排么?孩子转学给办么?如果这些都可以的话,我对这个职位很感兴趣。
PS:这种职位有没有过劳死的可能性呢?



往往越底层的东西越稳定,写几个接口给上层调用就可以高枕无忧了。。
作者: 咖啡好苦    时间: 2009-06-20 21:22
蛮难的 我不会
作者: 紫柳    时间: 2009-06-20 21:30
里面 的 一些 问题 我 这个新手也 依稀能 回答了,看来我这3个月的书没有白看
作者: benjiam    时间: 2009-06-21 08:55
原帖由 bbjmmj 于 2009-6-20 19:46 发表


这个职位可以干到65岁退休么?老婆工作给安排么?孩子转学给办么?如果这些都可以的话,我对这个职位很感兴趣。

PS:这种职位有没有过劳死的可能性呢?


高级的职位多的是,连二奶都给你配, 只要你有本事

。。。原来那个著名的 “大神”啊, 老子白说了

[ 本帖最后由 benjiam 于 2009-6-21 08:58 编辑 ]
作者: converse    时间: 2009-06-21 09:46
晕死,这种技术帖子也有五毛党,我服了...

作者: wishel    时间: 2009-06-21 13:27
汗。。什么是五毛党啊?哪个是五毛党?
作者: jelver    时间: 2009-06-21 20:29
很多都不知道,搞了几年JAVA开发,都被惯坏了,惭愧!
作者: lsupper    时间: 2009-06-21 22:43
还不错~~ 有些都没认真考虑过~~~
作者: hsqsoft    时间: 2009-06-21 23:32
标题: 回复 #1 fm971 的帖子

作者: 聪明笨小孩    时间: 2009-06-22 09:49
了解了解
作者: kevin.c    时间: 2009-06-22 10:30
LZ回答的已经不错了,可以是TX那边出的问题。
同是用LIBEVENT的懒人飘过。。。
作者: aaaaa5aa    时间: 2009-06-22 10:57
标题: 回复 #2 flynetcn 的帖子
每次都考才精典
作者: wwdwwd    时间: 2009-06-22 11:11
前几个感觉考的是实际中用到的一些东西,后几个可能是考算法和基本知识,刚才试着答了一遍,一般,^_^
作者: wwwsq    时间: 2009-06-22 11:12
第一道题目你回答得有点笼统了。我想你应该提到需要根据不同的情况采取不同的措施。如果有1000个socket同时断断续续的发送的话,你的方案性能就成问题了,因为任何一个socket变得可写之后,你的程序都要对1000个socket重做一次epoll_ctl和epoll_wait。这里需要引入一点延迟和超时机制。

第二和第三题说的是对通讯对象的封装问题。我想更好的办法是把对通讯对象的封装比较完整的讲解一下。应用程序一般应该避免和裸socket打交道,最好把和socket相关的事情封装到通讯对象里面去。封装的时候要注意时序问题、边界问题、安全问题、性能问题、适应性问题、扩展性问题、跨平台问题等。
作者: souldemo    时间: 2009-06-22 12:50
过于简单了,
作者: dreamboc    时间: 2009-06-22 12:56
我念书时投了腾讯的,简历都冒通过。
作者: hzsjx    时间: 2009-06-22 14:00
好帖
作者: fm971    时间: 2009-06-22 14:23
原帖由 kevin.c 于 2009-6-22 10:30 发表
LZ回答的已经不错了,可以是TX那边出的问题。
同是用LIBEVENT的懒人飘过。。。


libevent主要有定时器堆,自己重写就麻烦。
我用的 1.4.8版定时器有稳定性问题,有点郁闷。1.4.11版改正了一些BUG。
作者: fm971    时间: 2009-06-22 14:24
原帖由 wwwsq 于 2009-6-22 11:12 发表
第一道题目你回答得有点笼统了。我想你应该提到需要根据不同的情况采取不同的措施。如果有1000个socket同时断断续续的发送的话,你的方案性能就成问题了,因为任何一个socket变得可写之后,你的程序都要对1000个 ...


我所做的项目刚好要处理最多1000路视频流。
感觉你讲的也不太完整!
作者: wwwsq    时间: 2009-06-22 14:27
原帖由 fm971 于 2009-6-22 14:24 发表


我所做的项目刚好要处理最多1000路视频流。
感觉你讲的也不太完整!



呵呵,见仁见智吧。
作者: hightman    时间: 2009-06-22 14:51
原帖由 fm971 于 2009-6-22 14:23 发表


libevent主要有定时器堆,自己重写就麻烦。
我用的 1.4.8版定时器有稳定性问题,有点郁闷。1.4.11版改正了一些BUG。


libevent 的定时器比较讨厌, 特别是指定了 EV_PERSIST 的话, 无论这段时间里有没有事件法生, 它统统都会在指定的TIMEOUT时间到了就触发一次timeout事件...

此外,它也不能像自己以前用select/poll 那样方便的在所有fd都没有事件发生时做一些事情(select/poll 的timeout时说明所有的fd都没有事件发生, 也就是说明这段时间系统较为空闲, 我可能需要它做一些其它的操作)
作者: avcodec    时间: 2009-06-22 15:09
学习。
作者: post_scriptum    时间: 2009-06-22 15:57
差别 太 大 了 ,回去学习去。
作者: cskyrain    时间: 2009-06-22 16:23
oo
作者: Rick.Zhao    时间: 2009-06-22 17:20
好帖子,顶一顶
作者: zsmdev    时间: 2009-06-22 18:03
支持你一下,+U
作者: heracs    时间: 2009-06-22 18:40
哈哈,楼主的问题我一个都不懂
作者: action08    时间: 2009-06-22 23:04
感觉象是考外星人的题,很多内容都不知道从哪里学,


不过说实话,TX也是中国少有的优秀软件企业


,,这些题,是说,TX要开发新的网络协议?
作者: fm971    时间: 2009-06-23 10:28
原帖由 post_scriptum 于 2009-6-22 15:57 发表
差别 太 大 了 ,回去学习去。

原帖由 heracs 于 2009-6-22 18:40 发表
哈哈,楼主的问题我一个都不懂


其实也没什么。 但是要注意最好在同一个领域里连续工作三四年, 水平才能高。
一般做软件的人喜欢换工作,但是忽略了技术的深入。
作者: fm971    时间: 2009-06-23 10:33
原帖由 hightman 于 2009-6-22 14:51 发表


libevent 的定时器比较讨厌, 特别是指定了 EV_PERSIST 的话, 无论这段时间里有没有事件法生, 它统统都会在指定的TIMEOUT时间到了就触发一次timeout事件...

此外,它也不能像自己以前用select/poll 那样方 ...


这是有办法处理的。  每次事件触发之后都重新初始化定时器,可以实现想要的效果。
再设一个系统空闲定时器。 对任一socker事件都更新这个定时器。 发生超时即是系统空闲了。
即使select这些API, 如果你要做大量的定时器, 也只能这么做吧。
作者: llslls_007    时间: 2009-06-23 10:42
请问:
    搞懂这些关于socket问题,需要哪些书籍? 准备详读,以准备应聘此岗位,
主要的是冲岗位工资去的,本人急需用钱,到了要钱不要命的地步,临渊羡鱼,退而结网,望指点

[ 本帖最后由 llslls_007 于 2009-6-23 10:53 编辑 ]
作者: fm971    时间: 2009-06-23 10:59
原帖由 llslls_007 于 2009-6-23 10:42 发表
请问:
    搞懂这些关于socket问题,需要哪些书籍? 准备详读,以准备应聘此岗位,
主要的是冲岗位工资去的,本人急需用钱,到了要钱不要命的地步,临渊羡鱼,退而结网,望指点


主要是W.Richard Stevens的《Advanced Programing in Unix Envirement》  和 《Unix Network Programing》,还有TCP/IP 和计算机理论。这里有:   Linux/Unix 编程学习之路, http://fm971.cublog.cn
个人觉得如果能熟悉 lighttpd和相关的协议,水平已经比较高了。是个不错的发展方向。
作者: unicom_2    时间: 2009-06-23 13:27
以后看看
作者: wheniwasyoung    时间: 2009-06-23 14:54
不知这行可不可以做到老,呵呵,学习学习
作者: 5毛党党员    时间: 2009-06-23 15:40
原帖由 converse 于 2009-6-21 09:46 发表
晕死,这种技术帖子也有五毛党,我服了...


有人叫我?
作者: peimichael    时间: 2009-06-23 20:24
原帖由 5毛党党员 于 2009-6-
23 15:40 发表


有人叫我?


赞ID和头像
作者: nhuczp    时间: 2009-06-23 22:18
原帖由 fm971 于 2009-6-22 14:24 发表


我所做的项目刚好要处理最多1000路视频流。
感觉你讲的也不太完整!



呵呵,1000路,我原来做过是用POLL,但性能不是特别好.
作者: nhuczp    时间: 2009-06-23 22:20
原帖由 fm971 于 2009-6-23 10:59 发表


主要是W.Richard Stevens的《Advanced Programing in Unix Envirement》  和 《Unix Network Programing》,还有TCP/IP 和计算机理论。这里有:   Linux/Unix 编程学习之路, http://fm971.cublog.cn
个人觉 ...


兄弟,你前面试的是不是服务器后台开发????
作者: cheng_lai_shun    时间: 2009-06-24 10:07
腾讯没有问你高深的算法问题吗?
作者: okking    时间: 2009-06-24 10:12
技术真是难,赚钱真不易。
作者: zzll11    时间: 2009-06-24 10:27
学一学




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2