腾讯实习面试,面试官会先问你会什么,擅长什么,然后会按照这个问,问的也不是很偏,问道你不会的就换下一个知识点。
主要问我的有这几个问题
图形学
1.Bizer曲线怎么绘制的,原理是什么
2.对栅格有什么了解,边界检测会不会
Java
1.C和java有什么异同
2.c的指针在java对应的是什么
3.强引用弱引用有什么区别
4.jvm内存模型是什么
5.gc什么时候触发,有什么方式
6.线程池有哪几种
7.线程有什么结束方式
网络
1.TCP协议栈是什么
2.TCP滑动窗口协议,画图解释
3.TCP的ack是怎么样的,怎么确定有没有收到
4.重传等待时间是多少
5.socket读写
6.向socket流里写,怎么判断是否可写
Android
1.后台线程收到数据,如何更新前台界面
2.service和应用在同一个进程和在不同进程的区别
3.为什么不用broadcast了
4.handle是怎么切换线程的
看着很简单吧,面试的时候心平气和,面试官都是比较客气的。
下面是面试过程详情,回答很有很能是错的,如果想通过下面的文字获得面试方面的帮助,还是关掉这个去别的页面吧。
面试地点在哈尔滨的一个酒店,提前到场,人倒是很多。
拿到号去面试,面试官挺和蔼,看了简历问了下我学校离着远吗,我说不远。。。然后让自我介绍,我说了说学习经历。面试官觉得不够,问我在学校学了什么课,擅长什么,我说c,java,然后实验课还有图形学,汇编。
面试官就先拿图形学问我:
1.Bizer曲线怎么绘制的,原理是什么
2.对栅格有什么了解,边界检测会不会
第一个问题因为没有复习,已经忘了,随便说了点曲线有阶次,有n+1个控制点。。。然后说隔了大半年快忘了,面试官表示很不解,说这不是你擅长的科目吗,才半年就能忘(我很想问是不是我记忆力太差了)。
第二个问题我说通过顶点得到所有边的点并且记录,扫描的时候扫到记录点就反转颜色,这样来充填。
面试官问你自己在课下没有研究过图形学吗,有没有写过额外的程序,我说没有,只有写过课上的题。
于是面试官转入下一个话题
3.C和java有什么异同
我:c是面向过程,java是面向对象。java多了异常捕获机制,并且java是解释性语言。说到这里面试官啊了一声,但是也没表示什么,不知道什么意思。。然后我接着说因为是解释语言,所以效率java比c低。c有指针,java没有。
然后面试官问
4.c的指针在java对应的是什么
我:对应的java对象引用
5.强引用弱引用有什么区别
开始没理解,想了半天,面试官就问你对这方面没有了解吗,我说有点了解,然后想起来了,就说强引用只要被引用,gc的时候就不会被回收,弱引用就算被引用gc的时候也会被回收。
6.面试官画了个图,AB相互引用,且没有被其他引用,会不会被回收,我说会,然后又问对jvm内存模型有没有了解,因为之前看过几遍这方面的,我就说有,面试官就说讲讲内存模型
7.jvm内存模型是什么
我:jvm中有个堆区,分了3个区域,新生区,年老区,持久区,持久区存放静态变量等一些生命周期长的对象,然后新的对象产生放在新生区,多次gc后新生区还有的对象就放在年老区,年老区有两块,用复制算法回收,新生区用标记整理法回收。说完一想,我这答的不是gc吗。。。绝望的情绪又加重一分,面试官也不解的样子,不过顺势问了我
8.gc什么时候触发,有什么方式
没答上来,面试官就问你这些都是在哪看的,我说在博客上,又问你就没有看一些jvm相关的书吗,我说没有,然后面试官看了简历,看到我写了个多线程文件下载器,就问我这个具体怎么实现的,输入输出是什么,怎么控制的线程。我说输入url,有一个list记录了这些url,然后用runnable传入线程池去运行,这个线程池是固定大小的,面试官就问为什么要用固定大小的线程池,我答因为想实现固定数量的任务并行,面试官不满意,就又问
9.线程池有哪几种
我又没答上来。。。面试官就让我继续说,我就说runnable里面有一个while循环,通过一个变量控制循环是否结束
10.线程有几种结束方式
平常除了上面的方式,真没用过别的了,想了挺久,就说一种是正常执行完退出,还有异常退出,然后面试官就笑了。。。我也很尴尬,面试官说抱歉,但是你对自己的答案满意吗,我说不满意。。然后换话题问我socket相关的了
11.TCP协议栈是什么
我说以太网,然后是ip,面试官就说直接到ip了吗,被这一问我就不知道怎么回答了,面试官说要对tcp有了解,就要知道底层的这些层次结构才行,一般socket编程第一页就是这些关于tcp的讲解,你难道不知道物理层,链路层什么的?我也比较奇怪,,不是问协议栈吗,或许是我理解不够。我说记着tcp的osi五层,面试官让我讲一下。我说底层是实体层,物理层,然后是链路层,这里使用mac地址,然后是网络层,用了ip协议,第四层是传输层,用了类似tcp的协议(其实这里多了端口这个参数,没有想起来),最上面是应用层,就是一些应用层协议http stmp 等等,然后面试官问
12.TCP滑动窗口协议,画图解释
我:接收发送方都有一个窗口,假设发送方向是从左到右,那么窗口左边是已发送并且确认过的包,右边是没有发送的包,窗口内是发送了还未确认的包,发送收到ack确认后,包被确认,然后只有窗口内最左边的被确认了窗口才会右移。面试官听了,说这些东西在网上有很多视频讲的很好很详细,你都没看过吗?听这语气我感觉我又没答对。。
13.TCP的ack是怎么样的,怎么确定有没有收到
我:报文的tcp报头有一个序号,接收到之后返回报文ack是接收到报文的序号+1。发送方在发送报文后一段时间内没收到ack就重新发送报文
14.重传等待时间是多少
我:报文最大传递时间的二倍(没敢说2MSL,怕说错)。然后看见简历写的IM,就问,这个IM怎么做的
15.socket读写
我:后台一个线程一直读数据,写的话直接忘流里write
16.向socket流里写,怎么判断是否可写
我想,就一个线程往里写,怎么可能写不了。。当然没说出来。说不知道。
17.后台线程收到数据,如何更新前台界面
我:试过很多种方法,有handle,broadcast,然后service接收,持有activity对象,进行更新。面试官听到service就说你的客户端也是c/s吗?我说不是,是在一个进程的
18.service和应用在同一个进程和在不同进程的区别
我:不同进程间需要进程间通信,就要利用AIDL,不同进程就不需要进程间通信。
19.为什么不用broadcast了
我:broadcast效率太低,产生的广播也可能会对系统有影响
20.handle是怎么切换线程的
我是第一个听到这个说法,就问道线程切换?面试官说,噢,可能你不懂这个概念(看来他已经认定我不会线程了)。我说是线程间通信吗,他说可以这样说。
我就说handle和looper和message有关,ui线程有一个looper,内部有一个messageQueue,handle把messageQueue,looper轮询messagequeue交给handle处理,说完了等着面试官继续,面试官说,你学Android也大半年了,有看过相关的代码么,有没有研究过,我说有看过。。。面试官说好,你继续。我又很奇怪,难道是继续说handle?,等了一会就说,好了,我就问道这里,你有什么问的吗。我感是跪了,呆在那里半天,其实我很想问是不是可以回去了。。。大概过了一分钟,面试官说如果没有问的了,那就到这里,谢谢,拿好你的东西。
具体就是这样,下面就是随便写了,个人的吐槽,可能会浪费读者的时间,所以推荐关掉赶紧关掉页面去看书。
面完试,真的很失落,甚至有点绝望,没等消息直接就往回走,不敢萌发出一点希望,怕又被再次重重打击。路上给家里打电话,老妈跟我说面完了就休息吧,可以在哈尔滨转转。她也不知道我面试肯定是跪了,也是,毕竟我表现的很稳定,没有及其失落的样子。可是没办法,当你所有的情绪都没有任何作用的时候,保留那些波动又有什么用。
回到酒店房间就开始写这些。从这学期开学开始就有各方面的压力,开学起到现在每天平均有7个小时在敲代码,周末假期接近12小时。上着和面试完全没关系却要费大量时间学习的实验课,盯着一大堆书翻来翻去,不停投简历却很少收到面试通知。感觉自己无限接近极限了。找不到实习,就还得自己慢慢琢磨,自学,这是有极限有瓶颈的,没有具体的实践就没有大的提升,在秋招的时候没有实习经历就更难进入大公司,每每想到这些,就更加绝望。真的不知道这种情绪该怎么发泄。
从一开始投简历各种被拒,到今天腾讯面试完全被面试官鄙视,还有前段时间连夜赶到杭州去面试网易,面试很顺利,满怀希望等结果,然后从面试结束那天开始,希望就随着时间慢慢变成绝望。过了时间,网易还没通知,或许一开始就不该抱有希望呢,才学了大半年的Android,而且资质这么愚钝,这么心不在焉怎么就妄想着可以进入大公司呢?
有时候说一句面试跪了,所有人都和我说加油,没关系,可是这种好意真的不知道怎么接受。
这时候真是一个无限负能量的集合体,可是放弃也没那么容易,难道去考研吗。。
还是自己太差劲了,太差劲了