android面试题记1

一、java基础部分(这次主要考核的问题都是java基础)

1. & 与&&操作符有什么区别

都是与运算,&&的运算更快,当判断条件是否成立时,如果左侧的等式不成立,则不再进行右侧判断。而&需要两边都判断。

2. 创建线程有哪几种方式

一种是实现Runnable接口,另一种是集成Thread类,最终都是重写run方法。

3.StringBuilder与StringBuffer的区别

StringBuilder是线程不安全的,可以理解为适合单线程使用,而StringBuffer是线程安全的,用于多线程使用没问题。

----------------------------------------------------------------------------------------------------

                              String                 StringBuffer          StringBuilder

----------------------------------------------------------------------------------------------------

Storage Area| Constant String       Pool  Heap            Heap

Modifiable|       No (immutable)      Yes( mutable )    Yes( mutable )

Thread Safe|          Yes                        Yes                    No

Performance|          Fast                    Very slow            Fast

4. 字节流和字符流的区别

https://www.cnblogs.com/absfree/p/5415092.html

5.Object.wait与Thread.sleep方法的使用和区别

https://www.cnblogs.com/softidea/p/4162724.html

6. 请手写一个简单的线程池

https://www.cnblogs.com/jkavor/p/7234965.html

7. 线程与进程的区别

链接:https://www.zhihu.com/question/25532384/answer/81152571

首先来一句概括的总论:进程和线程都是一个时间段的描述,是CPU工作时间段的描述。

下面细说背景:CPU+RAM+各种资源(比如显卡,光驱,键盘,GPS, 等等外设)构成我们的电脑,但是电脑的运行,实际就是CPU和相关寄存器以及RAM之间的事情。

一个最最基础的事实:CPU太快,太快,太快了,寄存器仅仅能够追的上他的脚步,RAM和别的挂在各总线上的设备完全是望其项背。那当多个任务要执行的时候怎么办呢?轮流着来?或者谁优先级高谁来?不管怎么样的策略,一句话就是在CPU看来就是轮流着来。

一个必须知道的事实:执行一段程序代码,实现一个功能的过程介绍 ,当得到CPU的时候,相关的资源必须也已经就位,就是显卡啊,GPS啊什么的必须就位,然后CPU开始执行。这里除了CPU以外所有的就构成了这个程序的执行环境,也就是我们所定义的程序上下文。当这个程序执行完了,或者分配给他的CPU执行时间用完了,那它就要被切换出去,等待下一次CPU的临幸。在被切换出去的最后一步工作就是保存程序上下文,因为这个是下次他被CPU临幸的运行环境,必须保存。

串联起来的事实:前面讲过在CPU看来所有的任务都是一个一个的轮流执行的,具体的轮流方法就是:先加载程序A的上下文,然后开始执行A,保存程序A的上下文,调入下一个要执行的程序B的程序上下文,然后开始执行B,保存程序B的上下文。。。

========= 重要的东西出现了========

进程和线程就是这样的背景出来的,两个名词不过是对应的CPU时间段的描述,名词就是这样的功能。

进程就是包换上下文切换的程序执行时间总和=CPU加载上下文+CPU执行+CPU保存上下文

线程是什么呢?

进程的颗粒度太大,每次都要有上下的调入,保存,调出。如果我们把进程比喻为一个运行在电脑上的软件,那么一个软件的执行不可能是一条逻辑执行的,必定有多个分支和多个程序段,就好比要实现程序A,实际分成 a,b,c等多个块组合而成。那么这里具体的执行就可能变成:

程序A得到CPU =》CPU加载上下文,开始执行程序A的a小段,然后执行A的b小段,然后再执行A的c小段,最后CPU保存A的上下文。

这里a,b,c的执行是共享了A的上下文,CPU在执行的时候没有进行上下文切换的。这里的a,b,c就是线程,也就是说线程是共享了进程的上下文环境,的更为细小的CPU时间段。

总结:进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。

8. synchronized与 lock 的区别

https://www.cnblogs.com/handsomeye/p/5999362.html

10. 多线程下载,并实现断点续传原理

http://blog.csdn.net/tgbus18990140382/article/details/55050011

11. 测试题:

Please implement a simple Android app:

· Display a list of all installed apps (exclude system apps)

· Every list item should contains app icon, app name and app version

· The list should be sorted by update time (latest first)

· The list will update accordingly if some apps are installed or uninstalled

12. 请写出下列程序运行的结果

public class Parent {

static {

Log.i("vvvv","111111");

}

public Parent() {

Log.i("vvvv","22222");

}

}

public class Childextends Parent{

static {

Log.i("vvvv","aaaaa");

}

public Child() {

Log.i("vvvv","bbbbb");

}

}

private void testParent() {

Parent parent =new Child(); // 1111aaaa2222bbbb

parent =new Child();//2222bbbb

}

结果:

13. 一个arraylist对象中有若干个字符串元素。想要遍历list,删除其中所有值为abc的字符串,请问下列实现是否正确,不正确,如何改对。

int size = l.size();

for (int j =0; j < size ; j++){          //size 改为l.size()实时获取最新的数组长度

        if("abc".equals(l.get(j))){

                l.remove(j);

                j--;// 添加此句,调整下标

        }

}

你可能感兴趣的:(android面试题记1)