国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android面試題問答整理

2019-10-21 21:32:01
字體:
供稿:網(wǎng)友

概述

找工作挺難,為更好的應(yīng)對(duì)面試,我將一些面試題收集整理起來,好讓自己隨時(shí)復(fù)習(xí)。

1.請(qǐng)談一下Android系統(tǒng)的架構(gòu)。

答:Android系統(tǒng)采用了分層架構(gòu),從高層到低層分別是應(yīng)用程序?qū)印?yīng)用程序框架層、系統(tǒng)運(yùn)行庫層和linux核心層。

2.談?wù)刟ndroid大眾常用的五種布局。

答:在Android中,共有五種布局方式,分別是:FrameLayout(框架布局),LinearLayout (線性布局),AbsoluteLayout(絕對(duì)布局),RelativeLayout(相對(duì)布局),TableLayout(表格布局)。

  • (1)FrameLayout 框架布局,放入其中的所有元素都被放置在最左上的區(qū)域,而且無法為這些元素指定一個(gè)確切的位置,下一個(gè)子元素會(huì)重疊覆蓋上一個(gè)子元素,適合瀏覽單張圖片。
  • (2)LinearLayout 線性布局,是應(yīng)用程序中最常用的布局方式,主要提供控件水平或者垂直排列的模型,每個(gè)子組件都是以垂直或水平的方式來定位.(默認(rèn)是垂直)
  • (3)AbsoluteLayout 絕對(duì)定位布局,采用坐標(biāo)軸的方式定位組件,左上角是(0,0)點(diǎn),往右x軸遞增,往下Y軸遞增,組件定位屬性為android:layout_x 和 android:layout_y來確定坐標(biāo)。
  • (4)RelativeLayout 相對(duì)布局,根據(jù)另外一個(gè)組件或是頂層父組件來確定下一個(gè)組件的位置。和CSS里面的類似。
  • (5)TableLayout 表格布局,類似Html里的Table.使用TableRow來布局,其中TableRow代表一行,TableRow的每一個(gè)視圖組件代表一個(gè)單元格。

3.談?wù)刟ndroid數(shù)據(jù)存儲(chǔ)方式。

答:Android提供了5種方式存儲(chǔ)數(shù)據(jù):

  • (1)使用SharedPreferences存儲(chǔ)數(shù)據(jù);它是Android提供的用來存儲(chǔ)一些簡單配置信息的一種機(jī)制,采用了XML格式將數(shù)據(jù)存儲(chǔ)到設(shè)備中。只能在同一個(gè)包內(nèi)使用,不能在不同的包之間使用。
  • (2)文件存儲(chǔ)數(shù)據(jù);文件存儲(chǔ)方式是一種較常用的方法,在Android中讀取/寫入文件的方法,與Java中實(shí)現(xiàn)I/O的程序是完全一樣的,提供了openFileInput()和openFileOutput()方法來讀取設(shè)備上的文件。
  • (3)SQLite數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù);SQLite是Android所帶的一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)庫,它支持SQL語句,它是一個(gè)輕量級(jí)的嵌入式數(shù)據(jù)庫。
  • (4)使用ContentProvider存儲(chǔ)數(shù)據(jù);主要用于應(yīng)用程序之間進(jìn)行數(shù)據(jù)交換,從而能夠讓其他的應(yīng)用保存或讀取此Content Provider的各種數(shù)據(jù)類型。
  • (5)網(wǎng)絡(luò)存儲(chǔ)數(shù)據(jù);通過網(wǎng)絡(luò)上提供給我們的存儲(chǔ)空間來上傳(存儲(chǔ))和下載(獲取)我們存儲(chǔ)在網(wǎng)絡(luò)空間中的數(shù)據(jù)信息。

4.Android中Activity, Intent, Content Provider, Service各有什么區(qū)別。

答:

  • Activity: 活動(dòng),是最基本的android應(yīng)用程序組件。一個(gè)活動(dòng)就是一個(gè)單獨(dú)的屏幕,每一個(gè)活動(dòng)都被實(shí)現(xiàn)為一個(gè)獨(dú)立的類,并且從活動(dòng)基類繼承而來。
  • Intent: 意圖,描述應(yīng)用想干什么。最重要的部分是動(dòng)作和動(dòng)作對(duì)應(yīng)的數(shù)據(jù)。
  • Content Provider:內(nèi)容提供器,android應(yīng)用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件、SQLite數(shù)據(jù)庫中,甚至是任何有效的設(shè)備中。當(dāng)你想將你的應(yīng)用數(shù)據(jù)和其他應(yīng)用共享時(shí),內(nèi)容提供器就可以發(fā)揮作用了。
  • Service:服務(wù),具有一段較長生命周期且沒有用戶界面的程序。

5.View, surfaceView, GLSurfaceView有什么區(qū)別。

答:

  • view是最基礎(chǔ)的,必須在UI主線程內(nèi)更新畫面,速度較慢。
  • SurfaceView 是view的子類,類似使用雙緩機(jī)制,在新的線程中更新畫面所以刷新界面速度比view快
  • GLSurfaceView 是SurfaceView的子類,opengl 專用的

6.Adapter有什么作用?常見的Adapter有哪些?

答:

Adapter是連接后端數(shù)據(jù)和前端顯示的適配器接口。常見的Adapter有ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, SpinnerAdapter, WrapperListAdapter等

7.Manifest.xml文件中主要包括哪些信息?

答:

  • manifest:根節(jié)點(diǎn),描述了package中所有的內(nèi)容。
  • uses-permission:請(qǐng)求你的package正常運(yùn)作所需賦予的安全許可。
  • permission: 聲明了安全許可來限制哪些程序能你package中的組件和功能。
  • instrumentation:聲明了用來測試此package或其他package指令組件的代碼。
  • application:包含package中application級(jí)別組件聲明的根節(jié)點(diǎn)。
  • activity:Activity是用來與用戶交互的主要工具。
  • receiver:IntentReceiver能使的application獲得數(shù)據(jù)的改變或者發(fā)生的操作,即使它當(dāng)前不在運(yùn)行。
  • service:Service是能在后臺(tái)運(yùn)行任意時(shí)間的組件。
  • provider:ContentProvider是用來管理持久化數(shù)據(jù)并發(fā)布給其他應(yīng)用程序使用的組件。

8.請(qǐng)寫一段代碼(SAX, DOM, 或者pull )來解析XML文檔。

答:下面是要解析的XML文件:

張三 
22 李四 
23 定義一個(gè)名為Person的javaBean用于存放上面解析出來的xml內(nèi)容

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文件;它采用的是事件驅(qū)動(dòng),并不需要解析完整個(gè)文檔,速度快并且占用內(nèi)存少。需要為SAX提供實(shí)現(xiàn)ContentHandler接口的類。PersonDefaultHandler.javaimport 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 persons;private Person person ; //記錄當(dāng)前personprivate String perTag; //記錄前一個(gè)標(biāo)簽的名稱/*** 重寫父類的開始文檔方法。用于初始化*/@Overridepublic void startDocument() throws SAXException {persons = new ArrayList();}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {if(“person”.equals(localName)){Integer id = new Integer(attributes.getValue(0)); //取idperson = new Person();person.setId(id);}perTag = localName;}/**參數(shù):* ch 整個(gè)XML字符串* start 節(jié)點(diǎn)值在整個(gè)XML字符串中的索引位置* length 節(jié)點(diǎn)值的長度*/@Overridepublic 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));}}}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {if(“person”.equals(localName)){persons.add(person);person = null;}perTag = null;}public List getPersons() {return persons;}}SAXPerson.javaimport 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 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文件時(shí),會(huì)將XML文件的所有內(nèi)容讀取到內(nèi)存中,然后允許您使用DOM API遍歷XML樹、檢索所需的數(shù)據(jù)。DOMPerson.javaimport 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 getPerson() throws Exception{List pers = new ArrayList();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.javaimport 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 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”); //personserializer.attribute(“”, “id”, “”+person.getId());serializer.startTag(“”, “name”); //nameserializer.text(person.getName());serializer.endTag(“”, “name”); //nameserializer.startTag(“”, “age”); //ageserializer.text(person.getAge().toString());serializer.endTag(“”, “age”);//ageserializer.endTag(“”, “person”); //person}serializer.endTag(“”, “persons”);serializer.endDocument();outStream.close();}public static List getPersons() throws Exception{List 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(); //觸發(fā)第一個(gè)事件while(eventType!=XmlPullParser.END_DOCUMENT){switch(eventType){case XmlPullParser.START_DOCUMENT:persons = new ArrayList();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: //結(jié)束元素事件if(“person”.equals(parser.getName())){persons.add(person);person = null;}break;default:break;}eventType = parser.next();}return persons;}}以上三種方式任選其一即可。

9.根據(jù)自己的理解描述下Android數(shù)字簽名。

答:

  • (1)所有的應(yīng)用程序都必須有數(shù)字證書,Android系統(tǒng)不會(huì)安裝一個(gè)沒有數(shù)字證書的應(yīng)用程序
  • (2)Android程序包使用的數(shù)字證書可以是自簽名的,不需要一個(gè)權(quán)威的數(shù)字證書機(jī)構(gòu)簽名認(rèn)證
  • (3)如果要正式發(fā)布一個(gè)Android ,必須使用一個(gè)合適的私鑰生成的數(shù)字證書來給程序簽名,而不能使用adt插件或者ant工具生成的調(diào)試證書來發(fā)布。
  • (4)數(shù)字證書都是有有效期的,Android只是在應(yīng)用程序安裝的時(shí)候才會(huì)檢查證書的有效期。如果程序已經(jīng)安裝在系統(tǒng)中,即使證書過期也不會(huì)影響程序的正常功能。

10.已知單鏈表的頭結(jié)構(gòu)head,寫一個(gè)函數(shù)把這個(gè)鏈表逆序。

答: 如下所示

Node.javapublic 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.javapublic class ReverseSingleLink {public static Node revSingleLink(Node head){if(head == null){ //鏈表為空不能逆序return head;}if(head.getNextNode()==null){ //如果只有一個(gè)結(jié)點(diǎn),當(dāng)然逆過來也是同一個(gè)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();}}} 

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 苍南县| 东山县| 安丘市| 广饶县| 永顺县| 襄垣县| 泸水县| 宜兴市| 大埔县| 安龙县| 会泽县| 西城区| 杨浦区| 静乐县| 盐亭县| 普宁市| 井冈山市| 河南省| 长寿区| 青岛市| 资阳市| 社会| 周口市| 巴林右旗| 山阳县| 康平县| 宜阳县| 上思县| 百色市| 陆河县| 修武县| 江门市| 松滋市| 垣曲县| 天峨县| 沛县| 宣威市| 喀什市| 阿图什市| 綦江县| 南召县|