啥也不说了,面试美图秀秀面的都是泪,自己水平还欠缺太多,面完赶紧回来整理一下,收拾一下心情,把面过的记住的题目记录一下:
本人情况:
我投的是android程序开发的职位,自己是应届生,不算校招把,算是社招环节(错过了校招真是哭的一逼啊…)。
笔试题目:
1.单例模式实现:
//方法一
public class Singleton{
private Singleton(){}
private static class Instance{
private static Singleton newInstance=new Singleton();
}
public void getInstance(){
return Instance.newInstance();
}
}
//方法二
public class Singleton1 {
private Singleton1() {}
private static final Singleton1 single = new Singleton1();
public static Singleton1 getInstance() {
return single;
}
}
2.Listview里的getView()方法的实现,尽可能优化滑动速度:
1.使用viewholder
2.当页面进行滑动时候不进行图片的加载
面试官有问道,为什么viewholder要使用static方法,我没答出来,尼玛啊,心好累
答案:这里设置ViewHolder为static,也就是静态的,静态类只会在第一次加载时会耗费比较长时间,但是后面就可以很好帮助加载,同时保证了内存中只有一个ViewHolder,节省了内存的开销。
3.找出字符串中的仅出现过一次的第一个字母:
这个想了一下,最直观的方法就是直接暴力扫描,算法复杂度为O(n2),肯定不能这样啊,于是想了一下,自己构造一个简单的哈希表进行存储所有出现的字符串的次数,扫描一遍字符串存入哈希表中,最后再便利一遍字符串就可以找到第一个出现为一次的字符了,复杂度为O(n),空间花费为O(1)。
接下来就是面试的环节了。
1.listview跟scrolleView有什么区别,什么时候使用Listview,什么时候使用scrolleView?
这问题问的…Listview主要用于数据的展示,像列表,布局设置大部分相同的可以使用listview,而scrollView更偏向于页面的展示,可以横滑以及下滑。
后来上网,网上也查不到答案,哪位大神能跟我讲讲,这题真的是懵了逼了.
2.自己实现过自定义动画么?
在属性动画的基础上,自己倒是做过几个动画的效果,结果问的是自定义动画,我靠这题也倒下了,回去得自己在琢磨琢磨了。
3.fragment在切换的时候fragment的运作过程,即加载情况?
这题我不太好形容,问的主要是fragment加载机制把,好像,当时也没答出来,有点懵。
给链接吧,鸿阳大神的博客,得狠心学习一下了。
http://blog.csdn.net/lmj623565791/article/details/37970961
http://www.cnblogs.com/xiaoran1129/p/3154832.html
最好还是要看源码
4.触摸事件的原理?
这个倒不是问的,而是在面试官看我项目的时候,我讲的,不懂得网上查看吧,这里就不详细解释了。
你用过线程池么,如何使用线程池,什么情况下使用线程池?
贴链接吧:
http://www.cnblogs.com/dolphin0520/p/3932921.html
5.用过surfaceView么?
没用过。。。。。,恶补之:
如何使用:
http://www.jb51.net/article/53458.htm
老罗的:
http://blog.csdn.net/luoshengyang/article/details/8661317/
6.了解drawable下的标签么?
我仅仅回答上shape下的东西,其实还有很多诸如selector和layer-list模糊过个概念。
贴链接:http://blog.csdn.net/brokge/article/details/9713041
7.看过android设计规范么,了解过新出的一些像appBarLayout,RecycleView等相关的控件么?
这个我只说自己跟着代码敲过了一遍,没有去深入的了解如何实现等等。
面试官话题一转,很随性。。。,聊聊java把,(当时内心处于很慌的状态,自己android答得那么烂,转了话题突然有点懵懵的),然后就开始了java的问答:
8.来说说泛型把,用过泛型么,
[1]ArrayList<T> al=new ArrayList<T>();指定集合元素只能是T类型
[2]ArrayList<?> al=new ArrayList<?>();集合元素可以是任意类型,这种没有意义,一般是方法中,只是为了说明用法
[3]ArrayList<? extends E> al=new ArrayList<? extends E>();
泛型的限定:
? extends E:接收E类型或者E的子类型。
?super E:接收E类型或者E的父类型。
IBM分享:http://www.ibm.com/developerworks/cn/java/j-djc02113/
9.反射机制了解么?
10.面试官手写了一道题:
public class A{
public static int a=0;
public int b=0;
{
b=1;
}
static{
a=1;
}
}
public class B extend A{
public int c=0;
{
c=1;
}
public B(){
super();
}
}
问依次执行的顺序,这个考察的是静态变量>静态代码块>实例变量>构造代码块>构造方法的知识,所以输出结果是:
a=0
a=1
b=0
b=1
c=0
c=1
总结一下自己的不足:
1.java基础还是没有打好,准备再过一遍,跟着上面的补缺补漏,顺便研究一下java编程思想。
2.android的东西只知道其用法而不知道他为什么那么做,对于程序员来说是不行的,如果你想成为一个好的程序猿,必须要了解为什么那么设计,为什么那么做。
2.学无止境,不要太沾沾自喜了,觉得自己很牛,记得天外有天,人外有人。
就说到这,撸代码进修去了!