Android面试总结(updating)

#Java知识点:

  • Java中Set、List、Map的区别: **Set:**存储的值是无序、不允许重复的,加入Set的元素必须定义equals()方法以确保对象的唯一性。 **List:**存储的值是有序、允许重复,**List是线程不安全的,Vector是线程安全的,**或者使用CopyOnWriteArrayList,它是java.util.concurrent包中的一个List的实现类。CopyOnWrite的意思是在写时拷贝,也就是如果需要对CopyOnWriteArrayList的内容进行改变,首先会拷贝一份新的List并且在新的List上进行修改,最后将原List的引用指向新的List。 **Map:**成对的数据结构,键值必须具有唯一性,键值不能相同,否则值会被替换。 更详细点这里:http://www.cnblogs.com/xiaofengkang/p/3859457.html

  • 字节流和字符流: 节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。

    更详细点这里:http://blog.csdn.net/cynhafa/article/details/6882061

  • 递归删除文件/文件夹:

    public static void deleteFile(File file) {
        if (file.exists()) {
            if (file.isDirectory()) {
                //如果是文件夹
                File[] files = file.listFiles();
                if (files.length <= 0) {
                    file.delete();
                } else {
                    for (int i = 0; i < files.length; i++) {
                        deleteFile(files[i]);
                    }
                }
            } else {
                //如果是文件
                file.delete();
            }
        }
    }
复制代码
  • Java sleep()和wait()以及yield()和join()的区别: 线程主要有以下几种状态:可运行,运行,阻塞,死亡。 **sleep():**方法可以直接调用,而wait()方法依赖于同步。而更深层次的区别在于sleep方法只是暂时让出CPU的执行权,并不释放锁。而wait()方法则需要释放锁。 wait():方法的作用是将当前运行的线程挂起(即让其进入阻塞状态),直到notify或notifyAll方法来唤醒线程. **yield():**告诉当前正在执行的线程把运行机会交给线程池中拥有相同优先级的线程。使当前正在运行状态的线程变成可运行状态。 **join():**方法就是通过wait方法来将线程的阻塞,如果join的线程还在执行,则将当前线程阻塞起来,直到join的线程执行完成,当前线程才能执行。 更多:http://www.cnblogs.com/paddix/p/5381958.html

  • Java抽象类和接口: 1、 抽象类在java语言中所表示的是一种继承关系,一个子类只能存在一个父类,但是可以存在多个接口。 2、 在抽象类中可以拥有自己的成员变量和非抽象类方法,但是接口中只能存在静态的不可变的成员数据(不过一般都不在接口中定义成员数据),而且它的所有方法都是抽象的。 3、抽象类和接口所反映的设计理念是不同的,抽象类所代表的是“is-a”的关系,而接口所代表的是“like-a”的关系。子类只能单继承抽象类,但是可以实现多个接口; 抽象类和接口是java语言中两种不同的抽象概念,他们的存在对多态提供了非常好的支持,虽然他们之间存在很大的相似性。但是对于他们的选择往往反应了您对问题域的理解。只有对问题域的本质有良好的理解,才能做出正确、合理的设计。

  • Java基本数据类型: byte、short、int、long、float、double、char、boolean

    详见:http://www.cnblogs.com/simplefrog/archive/2012/07/15/2592011.html

  • String是基本类型吗? 不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。

  • Java中的装箱与拆箱: http://www.cnblogs.com/dolphin0520/p/3780005.html 如果整型字面量的值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象,否则需要重新new Integer(int)。

  • Java中final关键字有什么特点? 1、修饰类表示该类不能被继承 2、修饰方法表示方法不能被重写 3、修饰变量表示变量被赋值之后不能再修改

更多Java面试题查看: http://www.importnew.com/22083.html

#Android知识点:

  • 启动模式 Intent.Flags: http://blog.csdn.net/liuhe688/article/details/6761337

  • Android避免内存OOM的一些优化: 1、使用更加轻量级的数据结构 2、避免使用枚举 3、减小Bitmap对象的内存占用 (1)inSampleSize:缩放比例,在把图片加载到内存之前,先计算一个合适的缩放比例,避免不必要的大图加载 (2)decodeFormat:解码格式,选择ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差异。 4、使用更小的图片 在涉及给到资源图片时,我们需要特别留意这张图片是否存在可以压缩的空间,是否可以使用更小的图片。尽量使用更小的图片不仅可以减少内存的使用,还能避免出现大量的InflationException。假设有一张很大的图片被XML文件直接引用,很有可能在初始化视图时会因为内存不足而发生InflationException,这个问题的根本原因其实是发生了OOM。 5、内存对象的重复利用 1)复用系统自带的资源 2)注意在ListView/GridView等出现大量重复子组件的视图里对ConvertView的复用 3)Bitmap对象的复用 4)避免在onDraw方法里面执行对象的创建 5)StringBuilder 更多查看:http://www.csdn.net/article/2015-09-18/2825737/3 6、Android子线程真的不能更新UI么? http://www.cnblogs.com/lao-liang/p/5108745.html 7、SparseArray、ArrayMap: http://www.jianshu.com/p/a1141f92d2cd http://blog.csdn.net/as02446418/article/details/47428737 http://blog.csdn.net/u010687392/article/details/47809295 8、性能优化典范之多线程篇: http://www.cnblogs.com/bugly/p/5519510.html 9、屏幕适配: http://www.jianshu.com/p/ec5a1a30694b 10、Android加载高清巨图、长图:(BitmapRegionDecoder Rect) http://blog.csdn.net/lmj623565791/article/details/49300989/ http://blog.csdn.net/guolin_blog/article/details/9316683 http://www.jianshu.com/p/8872b7e0bb51

百度糯米: 1、单链表的反转: http://blog.csdn.net/guyuealian/article/details/51119499 2、Java中的equals、hashcode、==: http://blog.csdn.net/jiangwei0910410003/article/details/22739953 http://www.cnblogs.com/xudong-bupt/p/3960177.html 3、平时用过的三方库及其中的原理 4、菲波那切数列: http://blog.csdn.net/u010983881/article/details/50462951 5、算法的时间复杂度的定义以及数组和链表的时间复杂度:

时间复杂度定义:算法的基本操作的执行次数作为算法时间复杂度的度量,时间复杂度不是执行完一段程序的总时间,而是其中基本操作的总次数。明确哪些操作是基本操作,然后计算出基本操作重复的次数。

空间复杂度定义:是指在运行时所需的存储空间的度量,主要考虑在算法运行过程中临时占用的存储空间的大小

数组利用下标定位,时间复杂度为O(1),链表定位元素时间复杂度O(n); 数组插入或删除元素的时间复杂度O(n),链表的时间复杂度O(1)。

6、设计模式六大原则: http://www.uml.org.cn/sjms/201211023.asp 7、Gson解析原理: http://blog.csdn.net/qyl10241024/article/details/49473513 8、Handler原理 9、内存泄漏和内存优化

  • 单例(主要原因还是因为一般情况下单例都是全局的,有时候会引用一些实际生命周期比较短的变量,导致其无法释放)
  • 静态变量(同样也是因为生命周期比较长)
  • Handler内存泄露[7]
  • 匿名内部类(匿名内部类会引用外部类,导致无法释放,比如各种回调)
  • 资源使用完未关闭(BraodcastReceiver,ContentObserver,File,Cursor,Stream,Bitmap)

10、Okhttp 11、热修复Hook原理

转载于:https://juejin.im/post/5a33e7ee6fb9a0451d418a04

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值