Android面试笔记总结(二)

有总结的工作才有意义,有总结的人生才会有进步。

本系列面试笔记所有问题,源自面试过程中的记录总结,主要涉及Java和Android,但是由于面试过程中任何问题都有可能被问到,所以也会涉及一些其他方向的知识。部分答案参考网上朋友的文章,如有错误之处,欢迎批评指正。奋斗

1 在Android中,如何使用Http协议编程?

答:实例代码如下

<span style="font-size:18px;">HttpClient hclient  = new DefaultHttpClient();
Httppost hpost = new HttpPost(url);
HttpResponse response = null;
try{
     response = hclient.execute(hpost);
     if(response.getStatusLine.getStatusCode()==200){
           return EntityUtils.toByteArray(Response.getEntity());
     }
}catch(Exception e){
 //catch the Exception
}</span>
2 Http和Https有什么区别?

答: Https协议是由ssl+http协议构建的可以进行加密传输、身份认证的网络协议,要比Http协议安全。Http协议使用80端口,Https默认使用443端口。Https使用需要到CA申请一个证书,该证书可以证明服务器的用途,只有拥有该证书的Server才能被客户端所信任,才能进行连接。

3 Http协议的get和post方法的区别有哪些?

答:Get是从服务器端请求数据,而Post是像服务器发送数据。Get方式传输的数据量特别小,一般在2KB左右,效率高。Post方式由于是将表单数据封装在数据报中,它是等服务器来读取数据,因此传输的数据量较大,但是效率也低于Get方式。get方式是直接将表单数据追加到URl的后面,明文传输安全性较差。Post讲表单数据封装在数据报中,不是明文传输,安全性较高。

4 Android中的异步任务AsyncTask怎么使用?

答:AsyncTask是Android中的轻量级的异步类,可以通过直接继承这个Asynctask类实现异步操作,其主要特点是任务在主线程之外运行,而回调方法在主线程中运行。AsyncTask类的使用步骤大致如下:

① 子类继承AsyncTask类

② 在子类中重写AsyncTask中的几个方法。

 1)onPreExecute() 该方法在执行实际的后台操作前被主线程调用,在这里可以做些准备工作,比如显示一个进度条等工作。

 2)doInbackground() 该方法在执行onPreExecute()方法之后被子线程(后台线程)调用,在这里进行一个后台的、耗时的操作,最终返回一个result。

 3)onPostExceute() 在doInbackground()方法执行完毕之后,该方法被主线程调用,后台的计算结果result将通过这个方法传递给主线程,在这里可以进行UI界面的更新操作。

5 二叉排序树的定义是什么?

答:二叉排序树又称为二叉查找树/二叉搜索树。其性质:每一个节点有不超过两个子节点,并且左子树节点小于或等于父节点,右节点大于等于父节点。

6 什么是平衡二叉树?

答:AVL数的定义:首先它是一种特殊的二叉排序树,其次它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差不超过1。

    平衡因子:可以定义为左子树减去右子树的深度。

    平衡二叉树查找元素的次数不超过树的深度,时间复杂度为 Log N。

7 静态内部类和匿名内部类的区别是什么?

答:首先都是内部类,静态的话就从static关键字说起,不能违背JVM的定义规则,一段代码符合不符合要求可以通过变量的实例化时间谈起,匿名内部类的主要就是匿名,像一般按钮等监听方法都喜欢使用匿名内部类的形式。

8 谈谈对Java反射机制的理解。

答:反射主要是指程序可以访问、检测和修改他的本身状态或行为的一种能力。可以将java的反射机制理解为一面镜子,如果我们可以通过一个类的名字推出类的内部结构、可以访问成员和方法(public和private都可以)。

9 Java强引用、弱引用、软引用之间的区别有哪些?(新浪微博面试题)

答:1)强引用:平时创建的引用变量都是强引用变量。A a = new A(); 即使OOM(内存溢出),a变量也不会被系统回收。

    2)软引用:softReference,当JVM内存不足时,软引用类对象会被系统Kill掉,一般用来实现高速缓存,最大限度的使用内存并且不会发生OOM现象。

    3)弱引用:weakReference,一旦弱引用变量被JVM发现,无论当时内存还剩余多少可用,JVM都会将这个弱引用变量回收。一般适合生存周期较长,重新创建开销不打的对象。

    4)虚引用: 虚引用必须和ReferenceQueue(引用队列)联合使用,一般用于跟踪对象被gc回收的活动。

10 谈谈对Java线程池概念的理解。

答:线程池是java5之后新增的功能。线程池就是提前准备的若干个线程等待执行任务,只要任务来了,就从线程池中取出一个线程执行任务,当任务执行结束时,将该线程重新放回线程池等待新的任务。

优点:对于大量的任务来说,节省资源,不用频繁的创建线程和销毁线程,节省了系统开销。

ExecutorService pool = new Executors.new FixedThreadPool(10);//创建10线程等待执行任务
pool.execute(new Runnale(){});//参数是实现了Runnable接口的对象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章