<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    夢想飛翔

    自強不息
    posts - 111, comments - 30, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Android筆試總結

    Posted on 2011-05-29 23:47 love1563 閱讀(2652) 評論(0)  編輯  收藏 所屬分類: 項目總結

    Android筆試總結

    筆試,共10道題,不限時間。(答案整理自互聯網,不保證完全正確,僅供參考。)
    1.請談一下Android系統的架構。
    答:Android系統采用了分層架構,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和linux核心層。
     
    2.談談android大眾常用的五種布局。
    答:在Android中,共有五種布局方式,分別是:FrameLayout(框架布局),LinearLayout (線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)。
    (1)FrameLayout  框架布局,放入其中的所有元素都被放置在最左上的區域,而且無法為這些元素指定一個確切的位置,下一個子元素會重疊覆蓋上一個子元素,適合瀏覽單張圖片。
    (2)LinearLayout  線性布局,是應用程序中最常用的布局方式,主要提供控件水平或者垂直排列的模型,每個子組件都是以垂直或水平的方式來定位.(默認是垂直)
    (3)AbsoluteLayout 絕對定位布局,采用坐標軸的方式定位組件,左上角是(0,0)點,往右x軸遞增,往下Y軸遞增,組件定位屬性為android:layout_x 和 android:layout_y來確定坐標。
    (4)RelativeLayout 相對布局,根據另外一個組件或是頂層父組件來確定下一個組件的位置。和CSS里面的類似。
    (5)TableLayout 表格布局,類似Html里的Table.使用TableRow來布局,其中TableRow代表一行,TableRow的每一個視圖組件代表一個單元格。
     
    3.談談android數據存儲方式。
    答:Android提供了5種方式存儲數據:
    (1)使用SharedPreferences存儲數據;它是Android提供的用來存儲一些簡單配置信息的一種機制,采用了XML格式將數據存儲到設備中。只能在同一個包內使用,不能在不同的包之間使用。
    (2)文件存儲數據;文件存儲方式是一種較常用的方法,在Android中讀取/寫入文件的方法,與Java中實現I/O的程序是完全一樣的,提供了openFileInput()和openFileOutput()方法來讀取設備上的文件。
    (3)SQLite數據庫存儲數據;SQLite是Android所帶的一個標準的數據庫,它支持SQL語句,它是一個輕量級的嵌入式數據庫。
    (4)使用ContentProvider存儲數據;主要用于應用程序之間進行數據交換,從而能夠讓其他的應用保存或讀取此Content Provider的各種數據類型。
    (5)網絡存儲數據;通過網絡上提供給我們的存儲空間來上傳(存儲)和下載(獲取)我們存儲在網絡空間中的數據信息。
     
    4.Android中Activity, Intent, Content Provider, Service各有什么區別。
    答:Activity: 活動,是最基本的android應用程序組件。一個活動就是一個單獨的屏幕,每一個活動都被實現為一個獨立的類,并且從活動基類繼承而來。
    Intent: 意圖,描述應用想干什么。最重要的部分是動作和動作對應的數據。
    Content Provider:內容提供器,android應用程序能夠將它們的數據保存到文件、SQLite數據庫中,甚至是任何有效的設備中。當你想將你的應用數據和其他應用共享時,內容提供器就可以發揮作用了。
    Service:服務,具有一段較長生命周期且沒有用戶界面的程序。
     
    5.View, surfaceView, GLSurfaceView有什么區別。
    答:view是最基礎的,必須在UI主線程內更新畫面,速度較慢。
    SurfaceView 是view的子類,類似使用雙緩機制,在新的線程中更新畫面所以刷新界面速度比view快
    GLSurfaceView 是SurfaceView的子類,opengl 專用的
     
    6.Adapter有什么作用?常見的Adapter有哪些?
    答:Adapter是連接后端數據和前端顯示的適配器接口。常見的Adapter有ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, SpinnerAdapter, WrapperListAdapter等
     
    7.Manifest.xml文件中主要包括哪些信息?
    答:manifest:根節點,描述了package中所有的內容。
    uses-permission:請求你的package正常運作所需賦予的安全許可。
    permission: 聲明了安全許可來限制哪些程序能你package中的組件和功能。
    instrumentation:聲明了用來測試此package或其他package指令組件的代碼。
    application:包含package中application級別組件聲明的根節點。
     activity:Activity是用來與用戶交互的主要工具。
     receiver:IntentReceiver能使的application獲得數據的改變或者發生的操作,即使它當前不在運行。
     service:Service是能在后臺運行任意時間的組件。
     provider:ContentProvider是用來管理持久化數據并發布給其他應用程序使用的組件。
     
    8.請寫一段代碼(SAX, DOM, 或者pull )來解析XML文檔。
    答:下面是要解析的XML文件:
    <?xml version="1.0" encoding="UTF-8"?>
    <persons>
    <person id="1">
    <name>張三</name>
    <age>22</age>
    </person>
    <person id="2">
    <name>李四</name>
    <age>23</age>
    </person>
    </persons>
    定義一個名為Person的javaBean用于存放上面解析出來的xml內容
    public class Person {
    private Integer id;
    private String name;
    private Short age;

    public Integer getId() {
    return id;
    }

    public void setId(Integer id) {
    this.id = id;
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public Short getAge() {
    return age;
    }

    public void setAge(Short age) {
    this.age = age;
    }
    }
     (1)使用SAX讀取XML文件;它采用的是事件驅動,并不需要解析完整個文檔,速度快并且占用內存少。需要為SAX提供實現ContentHandler接口的類。
    PersonDefaultHandler.java
    import java.util.ArrayList;
    import java.util.List;

    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;

    import com.sinber.domain.Person;

    public class PersonDefaultHandler extends DefaultHandler {
    private List<Person> persons;
    private Person person ; //記錄當前person
    private String perTag; //記錄前一個標簽的名稱

    /**
    * 重寫父類的開始文檔方法。用于初始化
    */
    @Override
    public void startDocument() throws SAXException {
    persons
    = new ArrayList<Person>();
    }

    @Override
    public void startElement(String uri, String localName, String qName,
    Attributes attributes)
    throws SAXException {
    if("person".equals(localName)){
    Integer id
    = new Integer(attributes.getValue(0)); //取id
    person = new Person();
    person.setId(id);
    }
    perTag
    = localName;
    }

    /**參數:
    * ch 整個XML字符串
    * start 節點值在整個XML字符串中的索引位置
    * length 節點值的長度
    */
    @Override
    public void characters(char[] ch, int start, int length)
    throws SAXException {
    if(perTag!=null){
    String data
    = new String(ch,start,length);
    if("name".equals(perTag)){
    person.setName(data);
    }
    else if("age".equals(perTag)){
    person.setAge(
    new Short(data));
    }
    }
    }

    @Override
    public void endElement(String uri, String localName, String qName)
    throws SAXException {
    if("person".equals(localName)){
    persons.add(person);
    person
    = null;
    }
    perTag
    = null;
    }

    public List<Person> getPersons() {
    return persons;
    }
    }
    SAXPerson.java
    import java.io.InputStream;
    import java.util.List;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    import com.sinber.domain.Person;
    public class SAXPerson{
    public static List<Person> getPerson() throws Exception{
    //通過類裝載器獲取文件
    InputStream inStream = SAXPersonService.class.getClassLoader().getResourceAsStream("person.xml");
    SAXParserFactory factory
    = SAXParserFactory.newInstance();
    SAXParser saxParser
    = factory.newSAXParser();
    PersonDefaultHandler handler
    = new PersonDefaultHandler();
    saxParser.parse(inStream, handler);
    inStream.close();

    return handler.getPersons();
    }
    }
     
    (2)DOM解析XML文件時,會將XML文件的所有內容讀取到內存中,然后允許您使用DOM API遍歷XML樹、檢索所需的數據。
    DOMPerson.java
     
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;

    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import com.sinber.domain.Person;
    public class DOMPerson {
    public static List<Person> getPerson() throws Exception{
    List
    <Person> pers = new ArrayList<Person>();
    InputStream inStream
    = SAXPersonService.class.getClassLoader().getResourceAsStream("person.xml");
    DocumentBuilderFactory factory
    =DocumentBuilderFactory.newInstance();
    DocumentBuilder builder
    = factory.newDocumentBuilder();
    Document dom
    = builder.parse(inStream);
    Element root
    = dom.getDocumentElement();
    NodeList persons
    = root.getElementsByTagName("person");
    for(int i=0;i<persons.getLength();i++){
    Element personNode
    =(Element)persons.item(i);
    Person person
    = new Person();
    person.setId(
    new Integer(personNode.getAttribute("id")));
    NodeList childNodes
    = personNode.getChildNodes();
    for(int j=0;j<childNodes.getLength();j++){
    Node childNode
    = childNodes.item(j);
    if(childNode.getNodeType()==Node.ELEMENT_NODE){
    Element element
    = (Element)childNode;
    if("name".equals(childNode.getNodeName())){
    person.setName(
    new String(element.getFirstChild().getNodeValue()));
    }
    else if("age".equals(childNode.getNodeName())){
    person.setAge(
    new Short(element.getFirstChild().getNodeValue()));
    }
    }
    }
    pers.add(person);
    }
    inStream.close();
    return pers;
    }
    }
    (3)使用Pull解析器讀取XML文件
    PullPerson.java
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    import org.xmlpull.v1.XmlPullParser;
    import org.xmlpull.v1.XmlSerializer;
    import android.os.Environment;
    import android.util.Xml;
    import com.sinber.domain.Person;
    public class PullPerson {

    public static void save(List<Person> persons) throws Exception{
    XmlSerializer serializer
    = Xml.newSerializer();
    File file
    = new File(Environment.getExternalStorageDirectory(),"person.xml");
    FileOutputStream outStream
    = new FileOutputStream(file);
    serializer.setOutput(outStream,
    "UTF-8");
    serializer.startDocument(
    "UTF-8", true);
    serializer.startTag(
    "", "persons");
    for(Person person:persons){
    serializer.startTag(
    "", "person"); //person
    serializer.attribute("", "id", ""+person.getId());
    serializer.startTag(
    "", "name"); //name
    serializer.text(person.getName());
    serializer.endTag(
    "", "name"); //name
    serializer.startTag("", "age"); //age
    serializer.text(person.getAge().toString());
    serializer.endTag(
    "", "age");//age

    serializer.endTag(
    "", "person"); //person
    }
    serializer.endTag(
    "", "persons");
    serializer.endDocument();
    outStream.close();
    }

    public static List<Person> getPersons() throws Exception{
    List
    <Person> persons = null;
    Person person
    = null;
    XmlPullParser parser
    = Xml.newPullParser();
    InputStream inStream
    = PullPersonService.class.getClassLoader().getResourceAsStream("person.xml");
    parser.setInput(inStream,
    "UTF-8");
    int eventType = parser.getEventType(); //觸發第一個事件
    while(eventType!=XmlPullParser.END_DOCUMENT){
    switch(eventType){
    case XmlPullParser.START_DOCUMENT:
    persons
    = new ArrayList<Person>();
    break;

    case XmlPullParser.START_TAG: //開始元素事件
    if("person".equals(parser.getName())){
    person
    = new Person();
    person.setId(
    new Integer(parser.getAttributeValue(0)));
    }
    else if(person!=null){
    if("name".equals(parser.getName())){
    person.setName(parser.nextText());
    }
    else if("age".equals(parser.getName())){
    person.setAge(
    new Short(parser.nextText()));
    }
    }
    break;

    case XmlPullParser.END_TAG: //結束元素事件
    if("person".equals(parser.getName())){
    persons.add(person);
    person
    = null;
    }
    break;

    default:
    break;
    }
    eventType
    = parser.next();
    }
    return persons;
    }
    }
    以上三種方式任選其一即可。
     
    9.根據自己的理解描述下Android數字簽名。
     答:(1)所有的應用程序都必須有數字證書,Android系統不會安裝一個沒有數字證書的應用程序
    (2)Android程序包使用的數字證書可以是自簽名的,不需要一個權威的數字證書機構簽名認證
    (3)如果要正式發布一個Android ,必須使用一個合適的私鑰生成的數字證書來給程序簽名,而不能使用adt插件或者ant工具生成的調試證書來發布。
    (4)數字證書都是有有效期的,Android只是在應用程序安裝的時候才會檢查證書的有效期。如果程序已經安裝在系統中,即使證書過期也不會影響程序的正常功能。
    10.已知單鏈表的頭結構head,寫一個函數把這個鏈表逆序。
    答: 如下所示
    Node.java
    public class Node {
    private Integer count;
    private Node nextNode;

    public Node(){

    }
    public Node(int count){
    this.count = new Integer(count);
    }
    public Integer getCount() {
    return count;
    }
    public void setCount(Integer count) {
    this.count = count;
    }
    public Node getNextNode() {
    return nextNode;
    }
    public void setNextNode(Node nextNode) {
    this.nextNode = nextNode;
    }

    }
    ReverseSingleLink.java
    public class ReverseSingleLink {
    public static Node revSingleLink(Node head){
    if(head == null){ //鏈表為空不能逆序
    return head;
    }
    if(head.getNextNode()==null){ //如果只有一個結點,當然逆過來也是同一個
    return head;
    }
    Node rhead
    = revSingleLink(head.getNextNode());
    head.getNextNode().setNextNode(head);
    head.setNextNode(
    null);
    return rhead;
    }
    public static void main(String[] args){
    Node head
    = new Node(0);
    Node temp1
    = null,temp2 = null;
    for(int i=1;i<100;i++){
    temp1
    = new Node(i);
    if(i==1){
    head.setNextNode(temp1);
    }
    else{
    temp2.setNextNode(temp1);
    }
    temp2
    = temp1;
    }
    head
    = revSingleLink(head);
    while(head!=null){
    head = head.getNextNode();
    }
    }
    }
    主站蜘蛛池模板: 国产卡二卡三卡四卡免费网址 | 亚洲中文字幕一二三四区| 成人区精品一区二区不卡亚洲| 337P日本欧洲亚洲大胆艺术图| 亚洲日韩在线观看免费视频| 日韩精品免费在线视频| 国产无人区码卡二卡三卡免费| 日本不卡视频免费| 亚洲中文字幕在线乱码| 亚洲男女性高爱潮网站| 国产精品亚洲lv粉色| 在线观看免费黄网站| 99热在线精品免费全部my| 免费一级毛片免费播放| 亚洲国产成人久久精品影视| 亚洲欧美日韩一区二区三区在线| 一级毛片aa高清免费观看| 8x成人永久免费视频| 国产乱子伦片免费观看中字| 亚洲AV无码第一区二区三区| 亚洲综合无码一区二区痴汉| eeuss免费天堂影院| 国产乱子精品免费视观看片| 亚洲成a人片在线观看国产| 久久精品蜜芽亚洲国产AV| 国产亚洲综合久久| 99久久精品国产免费| 亚洲av高清在线观看一区二区| 亚洲综合婷婷久久| 久久精品国产亚洲av天美18 | 成人a毛片视频免费看| 亚洲毛片在线免费观看| 亚洲国产精品嫩草影院久久| 亚洲另类小说图片| 国产高清视频免费在线观看| 毛片在线看免费版| 亚洲AV日韩AV鸥美在线观看| 国产亚洲精品免费| 中文字幕无码播放免费| 亚洲人成色77777| 亚洲国产精品ⅴa在线观看|