哔哩哔哩Android面试记录

作为一枚应届毕业生,在此次秋招的时候实在表现得一般。虽说在学校被大多数同学称之为“大神”,但是我时刻提醒自己,自己的水平还是很菜,懂的东西都是表面的东西,并没有什么厉害之处。

但是,人是由劣根性,在不断的被“夸奖”的时候,总会忘记自己到底有几斤几两。今天,在B站面试,终于体会到,什么叫做被碾压!

来,记此次面试中我不会的知识点。

第一

问:问序列化的方式。
我:有两种,一种是java自带的(Serializable),一种是Android特有的(Parcelable)。
问:区别是什么?
我:Serializable是基于文件的序列化,Parcelable是在内存进行序列化。
问:List list = new ArrayList();,这里可以序列化吗?
我:不可以,因为int是基本数据类型,把Int改成Intgeter就可以
问:为什么?
到这里,我就不会了,我瞎乎乎的说了一些。后面我在回来的路上在想,被带沟里了。
①List list = new ArrayList();本身就是不合法,而我却没有敏锐的发现。
②Serializable是一个接口,而接口只有是类或者子接口,基本数据类型又从哪里可以实现这个接口?
③Serializable是一种标记,jdk底层是通过ObjectOutputStream.writeObject(object);来实现的,所以,只能是对象。
然而我对着文件的输入输出一直瞎逼逼,都说不到点上。

面试官给我的感觉是偏向java,我面试的是Android,却不问Android特有的序列化Parcelable。但是,Parcelable底层我只知道是binder,但是如果是Android大牛,一问binder原理,估计也得死翘翘。

第二

问:Handle的实现原理。
答:把Handle那一套都说了一通。
问:如果Handle队列里面没有消息,Looper会怎么样?
答:阻塞。
问:如果做到阻塞?
答:……看过,忘了……..

回来继续看Handle,MessageQueue.next()里面有一个死循环,只有当有消息,或者调用了Looper.quit()(不安全),Looper.quitSafely(安全)时,才会退出这个循环。如果队列里面没有消息,则线程则阻塞相应的时间。

但是,这一次我知道了更多关于Handle的“秘密”,Message分同步消息与异步消息,Message.target居然有可能为null,Handle还有SyncBarrier(同步障碍器)与IdleHandler(闲时任务)机制。

这次面试,单单这一个问题和这个问题引发出我的思考,就已经值得了。因为之前我以为我对Handle已经有一定的了解,没想到,又被打脸了。同时啊,在学习的道路上,越来越少像当初第一次弄懂Handle机制的大概流程来得热血沸腾。

第三

问:多线程开发如何操作?
答:用synchronized。
问:还有吗?
答:volatile也是可以的,但是volatile只能保证可见性
问:一个int变量,用volatile修饰,多线程去操作++,线程安全吗?
答:不安全
问:为什么?
答:只是保证的可见性而已。
问:synchronized(对象)与synchronized(类名.class)之间的区别是什么?
答:不知道。。。
问:假如有n个网络线程,你需要当n个网络线程完成之后,再去做数据处理,你会怎么解决?
答:在每个网络访问的时候做一个回调,回调里面做判断,当数量达到n的时候,做处理
问:这样代码难以维护
答:(我思考了一会)抱歉,我只能想到这样的办法。
问:你简历上写进行多线程开发
答:我上一家实习是通过模仿handle的机制去解决多线程的问题
问:那样太简单了
然后面试官和我说,本来想要问我并发包的实现原理的。。。

第四

问:http的缓存机制
答:不知道。。。。

我在简历上写上熟练掌握网络通信。然后不会,好尴尬。
http 的缓存有过一些了解:“如果数据没有被改变并且没有超过时间的情况下,会返回对应的状态码,浏览器通过判断状态码去使用之前缓存的数据。”但是,这是比较粗浅的理解。虽然Android比较少有接触过http的缓存,但是所有程序员的本质是相通的。

第五

问:图片缓存满该怎么办?
答:释放最早使用的图片内存。
问:如何实现?
我最后很蹩脚的方法实现。其实当时我一直想要让时间复杂度降低,其实没有必要。因为图片缓存的数量不会特别大,O(n)是可以接受。最后说一下,Android中LruCache内存满了是去去除算法是:使用次数最少的被释放。

第七:
问:DNS的底层协议是什么?
答:TCP
问:好吧,其实是UDP
恩。。。。。

第六

问:一道动态规划题 有五种类型的书籍,分别为:A,B,C,D,E。多买不同类型的书籍会有优惠,买两本优惠5%,三本优惠10%,四本优惠15%,五本优惠20%。注意:只能是不同类型的书籍组合在一起来能优惠。

问,现在分别输入A,B,C,D,E的数量,问最优惠的组合。

答案超级简单,因为之前的动态规划题是从小到大的递归,这一次是从大到小。但是当时我就是想不出来…….

感想

学习Android现在有一年多一点的时间,这一次过来从柳州来到广州,本来也不报太大的希望,毕竟上次面试腾讯自我感觉超级好,结果还是被刷掉了。这一次,也是难以通过的,挫败感很强。

在编程这一条路上,我已经过了入门时刚刚学会一样东西的新鲜感,那种实现一个功能之后热血沸腾的感觉是越来越少。但是这也意味着:我逐渐在接触更加底层更加难的东西。

你可能感兴趣的:(面试经验,校招)