楼主2016年应届毕业生,坐标北京,正在找工作,投递了美图社招的android开发职位,最后被血虐回来了,在这里将题目整理出来,把知识点过一遍,顺便提醒自己一句话:
不要过分高估自己,但是也不要过分看轻自己,一直努力,值得拥有才会有所改变!
笔试:
1.
写一个单例模式:
我们学习到的单例模式一般有两种实现方法,一种是懒汉单例,一种是饿汉单例,考的虽然简单,但是由于是社招的难度,所以楼主写了一个双重锁的,为了防止线程并发出现单例问题,后来跟面试官聊得时候也一并讲了《effective java》中推荐的枚举类型的。
2.写出ListView中的getView代码,要求优化滑动速度:
这里主要是考察对于listview掌握的熟练程度,listview中我们一般使用一个viewholder来进行View的复用,防止android去过度创建视图带来的资源的浪费。
其二,我们可以在Listview在滑动的时候去主观停止加载一些耗时的诸如Bitmap的数据,在滑动停止后再进行加载。
3.找出字符串中的第一个只出现一次的字符
这里实现有很多种方法,当然暴力循环是可以解决问题,但是复杂度为O(n2),所以这里不建议使用,面试官也不会满意这种处理方法。
我这是使用了简单的哈希表的模拟,使用空间去换时间效率的做法,具体思路是将字符串中出现的字符的ACII码当做数组的角标,当然这里要申请一个int[256]的一个数组,因为字符总共有256个,然后再次扫描一遍,计算出每个字符出现的次数,最后还需要再次扫描一遍原来的字符串,找到数组中第一个a[i]=1的即是答案。
面试部分
1.getview里面的viewholder为什么要设置成静态的?
申明为static类,是因为一个在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。对于viewholder而言,我们只需要一个viewholder进行复用即可,所以使用static变量