android面试--2015-4-29 --卷皮网科技优先公司
今天面试去深圳卷皮网络科技有限公司去面试,面试官是个女的,而且还算是美女,好吧,面试完后,我感觉除了以上应该还是女才子+女汉子之综合体。
下面记录下面试相关问题,和自己以后可能需要改进的地方:
首先,很长时间没有出去面试,确实在面试过程中可能暴露一些。
其次,确实技术方面还是有技不如人的地方,这个在以后工作中尽快弥补。
第三,可能以后除了在工作中发现不足外,应该隔断时间出去面试下,即使不是面试到好公司,被大神/大婶虐一把也是极好的,反正知道自己不足,就会去弥补,也会进行技术上的提升和发展方向的确定。
以上是感悟,一下是技术点相关:
1,Listview优化相关?
(1),首先通过viewHolder来实现convertview缓存的。
(2),多种type的处理:重载getItemType()和getviewTypeCount(),在getview里面switch切换不同布局,切换不同holder,根据不同的item.type设置UI上显示的内容。
(3),加载耗时,不要每次都开启线程,尽量使用线程池来代替开启每条线程。
(4),Listview滚动停止加载图片:
如果使用umloader的话:
使用ImageLoader的pauseonscrolllistener方法可以设置为listview滑动停止后加载图片,这个是解决卡顿很好的方法
private void applyScrollListener() { //pauseOnsceoll和pauseOnFling都设置为true,表示滑动停止后才进行加载图片 listView.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling)); }
2.配置ImageLoader的时候不使用.memoryCache(new LruMemoryCache(2 * 1024 * 1024))或者.memoryCache(new WeakMemoryCache())能使listview回滑的时候图片显示正确,不需要重新加载,我想应该是缓存生命周期变长了,所有图片直接从内存读取,速度快吧。
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) . threadPoolSize(3). threadPriority(Thread.NORM_PRIORITY - 1). denyCacheImageMultipleSizesInMemory(). discCacheFileNameGenerator(new Md5FileNameGenerator()). tasksProcessingOrder(QueueProcessingType.LIFO). discCacheExtraOptions(240, 400, CompressFormat.PNG, 40,null). memoryCacheExtraOptions(240, 400). discCacheFileCount(1000). writeDebugLogs(). defaultDisplayImageOptions(doGetOptions()). build(); ImageLoader.getInstance().init(config);
(5).listview的xml配置要设置为match_parent而不用wrap_content,这也会影响listview的流畅度
android:layout_width="match_parent"
android:layout_height="match_parent"
(6),在adapter的getview()里想设置每个item的默认图片的话要用.setImageResource()而不用.setBackgroundResource()
(7),Listview图片错乱的问题,原因是因为convertView的重用机制导致的,解决办法:设置tag为图片Url
2,进程间通信除了AIDL,还有那些方式进行实现?
除了AIDL,还有广播和contentProvider,后面两个没回答上来,主要可能是没那么深刻。
3,Activity四种启动模式,除了理论,讲下实际工作中的使用?
standard:默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。
singleTop:可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。
singleTask:只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。
singleInstance:只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。
4,viewPager+fragement第一次加载,第二次不加载?
5,Listview下拉刷新,上拉加载如何实现,从代码角度讲下?
6,Umloader底层设计到那些算法,说下具体几个?
这个我说道LRU算法,但是没细讲;
LinkedHashMap 先进先出 链表结构,能够记住存储顺序,存储的时候会判断缓存是否超出构造方法传进去的缓存大小,如果超出了,会删除最早插入的内容
内存缓存技术对那些大量占用应用程序宝贵内存的图片提供了快速访问的方法。其中最核心的类是LruCache (此类在android-support-v4的包中提供) 。这个类非常适合用来缓存图片,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap 中,并且把最近最少使用的对象在缓存值达到预设定值之前从内存中移除。
在过去,我们经常会使用一种非常流行的内存缓存技术的实现,即软引用或弱引用 (SoftReference or WeakReference)。但是现在已经不再推荐使用这种方式了,因为从 Android 2.3 (API Level 9)开始,垃圾回收器会更倾向于回收持有软引用或弱引用的对象,这让软引用和弱引用变得不再可靠。另外,Android 3.0 (API Level 11)中,图片的数据会存储在本地的内存当中,因而无法用一种可预见的方式将其释放,这就有潜在的风险造成应用程序的内存溢出并崩溃。
7,设计模式用到哪几种,说下具体使用?
这个当时只说到单例,我当时说的是数据库操作类设置为单例,不用每次都去new个对象,但是问道单例模式体现了什么思想,我当时就蒙了。
希望大神能够在后面评论中进行指点,或者相关知识点连接给个,我好学习下,不胜感激
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。