面试总结-Android基础篇

来源:互联网 发布:2016年淘宝双十一销售额 编辑:程序博客网 时间:2024/04/30 09:37

写在前面

以下有关Android的基础,基本都是面试中涉及到的。然后我在网上找了些比较靠谱的解答,也会有一些我的理解。
而且为了更好的应聘Android开发职位,还特意系统的学习了Android开发视频课程(花了银子滴)

Android基础组件

可能觉得Android基础,也就是四大组件,网络,数据库。对的~,就是这些基础,但是让你自己看的话,没有那么多的时间和毅力。

视频教程

网上应该有的,别人推荐我看【开课吧-android开发-张文旭】,只是觉得不错,推荐下,是不是该给我广告费勒? ==> :(
学习了这个课程,Android基本开发是没问题的。但是在面试中,还是有些公司会面试一些其他的东西。以下细细说来。

Android Activity

  • 基本的生命周期知道,那他的四种lunchmode是不是需要掌握呢?不重复造轮子了,直接参考:
    基础总结篇之二:Activity的四种launchMode
    以及这个大拿讲解的其他总结,他的基础写的详细,再配合代码练习,收获会不小。

  • 启动Activity有哪几种方式,以及他们的区别
    自己寻找答案

  • 如何在Activity中传递数据
    自己寻找答案
  • Fragment是什么,既然有了Activity, 为什么还需要Fragment?
    Fragment与Activity生命周期的关系如何?
    android之Fragment(官网资料翻译)
    Android Fragment 真正的完全解析(上)

小结如下:

Activity Fragment (1) onCreate (2) onAttach … … (3) onCreate … … (4) onCreatView … … (5) onViewCreate (7) onStart (6) onActivityCreated (9) onResume (8) onStart … … (10) onResume … … … … (12) onPause (11) onPause (14) onStop (13) onStop … … (15) onDestroyView … … (16) onDestroy (18) onDestroy (17) onDetch

Android Service

  • Service是什么,有什么作用?
  • Local Service & RemoteService区别?
  • Service 和 Thread有什么关系?
  • Service开启方式有哪些,有什么区别?
  • IntentService是什么,作用如何?
  • AIDL是什么,如何使用?
    Android中Service的使用详解和注意点(LocalService)
    Android中Local Service最本质的作用是什么?
    Android开发实践:使用Service还是Thread
    Android之Service与IntentService的比较
    Android如何让Service不被杀死
    Android Service被系统回收的解决方法

Android Broadcast

  • 广播有什么好的作用?
  • 广播的分类有哪些?
  • 广播注册方式如何?
  • 广播的内部机制是怎么的?
  • 执行onReceive函数的最大时间有没有规定?
    广播发送者与广播接收者
    品茗论道说广播(Broadcast内部机制讲解)
    Android发送有序广播sendOrderBraodCast截断广播和广播之间的数据传递

Android ContentProvider

  • ContentProvider是什么?
  • 如何实现自己的ContentProvider?

android-关于ContentProvider的使用
Android开发之ContentProvider的使用详解
ContentProvider和Uri详解
Android之ContentProvider总结

Android 事件分发机制

  • 自定义View的touch事件是如何分发的?
  • 说说你对Android 事件分发机制的理解?
    推荐看 guolin的专栏
    Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
    Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
    Android触摸事件分发机制

Android 网络相关

  • 对于Android网络编程,你使用过哪些?
  • http连接超时该如何设定?
  • socket,如何理解和使用?
    这几个问题都很大,当时我就说以前做了一个扫描ISBN码获取书籍信息的Android程序,使用httpURLConnection http连接去获取信息,然后解析jason格式数据,再封装成信息类,保存到数据库,还可以导出成特定内容的txt文件。 (额,扯远了, 回到正题)
    Http连接分为:
    1) URLConnection & HttpURLConnection
    这个在javaSE 1.x系列就能找到,属于javaSE本来就有的。java.net.*
    2) HttpClient
    这个是属于org.apache.http.*
    还有一个是Android特有的,Android.net.*
    参考例子:
    Android.net、org.apache.http联网实现
    为android的HttpClient添加请求超时时间
    Android Socket通信如何设置超时时间
    Android访问网络,使用HttpURLConnection还是HttpClient?

Android输入输出流

在使用网络编程的时候,必须使用读取数据函数。java提供了丰富的API。
数据流可以分为:字节流,字符流
经常能看到如下的代码:

InputStream inputStream = null;==>inputStream的获取,可以来自httpConnection 还可以是 socket <==BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
PrintWriter pout = null;... ...pout = new PrintWriter(new BufferedWriter(      new OutputStreamWriter(mSocket.getOutputStream())), true);pout.println(msg);

那就总结下我对他们的理解 。参考jdk文档。

InputStream获得的是字节流,比如你从socket中或是httpConnection中获得的。获得了这个字节流,要么你就保存字节流,要么你就继续转成字符流。
这需要API InputStreamReader,会把获得的字节流转成字符流。
都到这一步了,那你就干脆转成字符文本形式的吧, 那就是API
BufferedReader的工作了,然后你就可以使用readline之类的函数读取了。

===============================================1) InputStream & OutputStream===============================================InputStream//此抽象类是表示字节输入流的所有类的超类。 //需要定义 InputStream 子类的应用程序必须总是提供返回下一个输入字节的方法。 public int read(byte[] b)         throws IOExceptionpublic int read(byte[] b,                int off,                int len)         throws IOException OutputStream//此抽象类是表示输出字节流的所有类的超类。输出流接受输出字节并将这些字节发送到某个接收器。//需要定义 OutputStream 子类的应用程序必须始终提供至少一种可写入一个输出字节的方法。 public void write(byte[] b)           throws IOExceptionpublic void write(byte[] b,                  int off,                  int len)           throws IOException         ===============================================2) InputStreamReader & OutputStreamWriter===============================================//InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。//它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。 //为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。例如:  BufferedReader in   = new BufferedReader(new InputStreamReader(System.in));//OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。//它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。//为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter。例如: Writer out   = new BufferedWriter(new OutputStreamWriter(System.out));===============================================3) BufferedReader & BufferedWriter===============================================//从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。//可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了public class BufferedWriter extends Writer/* 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。 可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。该类提供了 newLine() 方法,它使用平台自己的行分隔符概念, 此概念由系统属性 line.separator 定义。并非所有平台都使用新行符 ('\n') 来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。 通常 Writer 将其输出立即发送到底层字符或字节流。除非要求提示输出,否则建议用 BufferedWriter 包装所有例如, */ PrintWriter out   = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));===============================================4) PrintWriter===============================================public class PrintWriter extends Writer/* 向文本输出流打印对象的格式化表示形式。此类实现在 PrintStream 中的所有 print 方法。它不包含用于写入原始字节的方法,对于这些字节,程序应该使用未编码的字节流进行写入。 与 PrintStream 类不同,如果启用了自动刷新,则只有在调用 printlnprintfformat 的其中一个方法时才可能完成此操作,而不是每当正好输出换行符时才完成。这些方法使用平台自有的行分隔符概念,而不是换行符。*/   

Android 其他面点

draw 和 onDraw有什么区别?

==>onDraw是在draw中调用的

layout的invelidate & postinvalida区别

==>invelidate 在主线成更新UI, postinvalida其他线程中更新UI

Runtime Exception 的类型

http://blog.csdn.net/jaycee110905/article/details/45154039
http://my.oschina.net/xubohui/blog/73512

在实现menu的时候哪些方法可以被重写

http://www.devstore.cn/essay/essayInfo/389.html

oncreateOptionsMenuonOptionsItemSelectedonCreateContextMenuonContextItemSelected

assets中如何使用loadUrl 来加载html/hello.html page?

互联网用:webView.loadUrl(“http://www.google.com“);
本地文件用:webView.loadUrl(“file:///android_asset/XX.html”); 本地文件存放在:assets文件中

//加载assets/win8_Demo/目录下的index.html网页webView.loadUrl("file:///android_asset/win8_Demo/index.html");

http://blog.csdn.net/fengyuzhengfan/article/details/38360017
http://blog.csdn.net/lostinai/article/details/7857521

延展:res/raw & assets
http://blog.csdn.net/zuolongsnail/article/details/6444806

Intent能传递哪些数据类型?

ContentValue的形式是?

key-value based, key 应该是 String only.

handler的理解

提供IPC?
Handler更新UI?
它有msg queue 用于存储Msg?
在threads间 提供了通信可能?

如何让服务被杀死后重启

http://www.cnblogs.com/kobe8/archive/2013/05/15/3079839.html
http://www.eoeandroid.com/forum.php?mod=viewthread&tid=324006&page=1#pid3711971

应用自适应屏幕

http://wiki.eoeandroid.com/Supporting_Multiple_Screens

<manifest ... >    <supports-screens android:requiresSmallestWidthDp="600" />    ...</manifest> 

“+”in android:id=”@+id/my_id”

在Dev Guide -> User interface -> Declaring Layout 里面看到的。
The at-symbol (@) at the beginning of the string indicates that the XML parser should parse and expand the rest of the ID string and identify it as an ID resource. The plus-symbol (+) means that this is a new resource name that must be created and added to our resources (in the R.java file). When referencing an Android resource ID, you do not need the plus-symbol, but must add the android package namespace, like so:
android:id=”@android:id/empty”

The plus-symbol (+) means that this is a new resource name that must be created and added to our resources (in the R.java file)

android View SurfaceView GlsurfaceView有什么关系, 区别?

http://blog.csdn.net/zcmain/article/details/14454953

常用的Adapter

http://www.cnblogs.com/devinzhang/archive/2012/01/20/2328334.html

BaseAdapter
ArrayAdapter
SimpleAdapter
SimpleCursorAdapter

1)BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;
2)ArrayAdapter支持泛型操作,最为简单,只能展示一行字。
3)SimpleAdapter有最好的扩充性,可以自定义出各种效果。
4)SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。

如何添加Fragment 到back stack entry中,方便你后续能访问到它?

http://www.cnblogs.com/mengdd/archive/2013/01/09/2853254.html

每个transaction是一组同时执行的变化的集合。用add(), remove(), replace()方法,把所有需要的变化加进去,然后调用commit()方法,将这些变化应用。

在commit()方法之前,你可以调用addToBackStack(),把这个transaction加入back stack中去,这个back stack是由activity管理的,当用户按返回键时,就会回到上一个fragment的状态。

比如下面的代码就是用一个新的fragment取代之前的fragment,并且将前次的状态存储在back stack中。

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();

小结

本篇主要是列举了Android 开发过程中的基础知识方面,其实还有其他的点没有小结。但是这些都是我在面试过程中遇到的基础问题。下篇小结下我遇到的JAVA的基础点。

0 0
原创粉丝点击