第一篇:1Android筆試總結(jié)(答案全)
筆試,共10道題,不限時(shí)間。(答案整理自互聯(lián)網(wǎng),不保證完全正確,僅供參考。)
1.請(qǐng)談一下Android系統(tǒng)的架構(gòu)。
答:Android系統(tǒng)采用了分層架構(gòu),從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和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ǔ)一些簡(jiǎn)單配置信息的一種機(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ù)庫(kù)存儲(chǔ)數(shù)據(jù);SQLite是Android所帶的一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù),它支持SQL語(yǔ)句,它是一個(gè)輕量級(jí)的嵌入式數(shù)據(jù)庫(kù)。
(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ù)庫(kù)中,甚至是任何有效的設(shè)備中。當(dāng)你想將你的應(yīng)用數(shù)據(jù)和其他應(yīng)用共享時(shí),內(nèi)容提供器就可以發(fā)揮作用了。
Service:服務(wù),具有一段較長(zhǎng)生命周期且沒有用戶界面的程序。
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:聲明了用來測(cè)試此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文件:
定義一個(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.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
persons;private Person person;//記錄當(dāng)前person
private String perTag;//記錄前一個(gè)標(biāo)簽的名稱
/** * 重寫父類的開始文檔方法。用于初始化 */
@Override public void startDocument()throws SAXException { persons = new ArrayList
();}
@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;}
/**參數(shù):
* ch 整個(gè)XML字符串
* start 節(jié)點(diǎn)值在整個(gè)XML字符串中的索引位置 * length 節(jié)點(diǎn)值的長(zhǎng)度 */
@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
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
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.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
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
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
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
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.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){ //如果只有一個(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();} } }
第二篇:中國(guó)移動(dòng)筆試(答案全)
中國(guó)移動(dòng)筆試題集
一、填空
1:中國(guó)移動(dòng)三大品牌是哪個(gè)______,_____,______,其口號(hào)分別為____,______,______.未來在我手中--全球通,我的地盤聽我的--動(dòng)感地帶,輕松有我---神州行
2:中國(guó)六大運(yùn)營(yíng)商分別為中國(guó)移動(dòng),_____,______,______,_____,______,______.中國(guó)移動(dòng),中國(guó)聯(lián)通,中國(guó)電信,中國(guó)網(wǎng)通,中國(guó)鐵通和中國(guó)衛(wèi)通
3:白日依山盡,黃河入海流,_____,______.此詩(shī)為著名詩(shī)人_____所著。
欲窮千里目,更上一層樓
王之渙
4:用加減乘除使得給出的4個(gè)數(shù)字得出以下答案:24。
(一)5,6,7,8;
(二)3,3,8,8
二:?jiǎn)柎?/p>
1:用十種方法向和尚推銷梳子,請(qǐng)自圓其說
2:有兩個(gè)桶,一個(gè)三斤,一個(gè)五斤,水無限,如何得出精確的四斤水
3:三筐蘋果,一筐全紅色,一筐全綠色,一筐紅綠混雜,蘋果筐子上分別貼了三張假標(biāo)簽(例如:若帖“紅蘋果”標(biāo)簽的筐子里裝的一定不是全紅色的,有可能為綠或混合)。請(qǐng)問如何在只拿出一只蘋果的情況下得出三筐蘋果的實(shí)際顏色 答:選擇
4:夜晚過一橋,甲過需要一分鐘,乙兩分鐘,丙五分鐘,丁十分鐘。橋一次最多只能承受兩人,過橋必須使用手電筒,現(xiàn)在只有一只手電筒。請(qǐng)問4人如何在17分鐘內(nèi)全部過橋
5:如何用一句最經(jīng)典的話來批評(píng)犯錯(cuò)的美麗女性
6:顧客永遠(yuǎn)是對(duì)的嘛?
7:你為什么想進(jìn)入本公司,你有何優(yōu)缺點(diǎn)?(可以用漢或英語(yǔ),只能選其中一種)
8:一個(gè)董事會(huì)有10個(gè)人,近視6個(gè),50歲以上7個(gè),大學(xué)生8個(gè),結(jié)婚的9個(gè),男性10個(gè)。如果滿足所有條件的最多有6個(gè)。那么最少有幾個(gè)?
答 :最少0個(gè)人全滿足要求,即沒有人全滿足條件
10個(gè)人中 全部滿足是“男性”的條件
9個(gè)人已婚
1人未婚(此人已滿足不符合全部條件的要求)
剩下只要使目前滿足要求的9人中符合條件的人越少越好
則令8個(gè)大學(xué)生中 7個(gè)符合9人已婚的條件 一個(gè)符合未婚的條件 則不滿足全部條件的人又多了2個(gè) 累計(jì)3個(gè)
令7個(gè)50歲以上的 3個(gè)是以上累計(jì)3人中的 則這7人中還有4人滿足目前的全部條件
令6個(gè)近視的 全部為除去那4個(gè)滿足累計(jì)到上一步條件之外的六人 則這四個(gè)人也不能滿足全部條件
即可使10個(gè)人都不能達(dá)到全部條件
9、玩一個(gè)容器裝豆子,每秒裝入的豆子是前一秒的翻倍,1分鐘后能裝滿,問裝滿容器的1/8,用多少時(shí)間?
10、三個(gè)甲零件和三個(gè)乙零件混合,兩兩放入三個(gè)分別貼著“甲甲”、“乙乙”、“甲乙”標(biāo)簽的瓶子里。標(biāo)簽和瓶子里的實(shí)際零件名都不符合。問:要是選擇一個(gè)瓶子,只能拿出該瓶子里的一個(gè)零件識(shí)別,問拿哪一個(gè),就能知道所有瓶子內(nèi)的所有零件的組合? 答:拿“甲乙”的瓶子
若掏出的是甲 說明這瓶是甲甲 標(biāo)著“甲甲”的是乙乙 標(biāo)著“乙乙”的是甲乙
若掏出的是乙 說明這瓶是乙乙 標(biāo)著“甲甲”的是甲乙 標(biāo)著“乙乙”的是甲甲
11、一個(gè)長(zhǎng)寬高16米、12米、8米的倉(cāng)庫(kù),能放多少個(gè)長(zhǎng)寬高4市寸、3市寸、2市寸的物品? 1米=30市寸
倉(cāng)庫(kù)尺寸:480市寸*360市寸*240市寸
(4*120)*(3*120)*(2*120)
也就是長(zhǎng)寬高都是120倍的關(guān)系
12、面積相同的正五邊形、正方形、圓、正三角形,周長(zhǎng)最大和最小的分別是?(三角形,圓)
13、質(zhì)量、長(zhǎng)度都不知道的一個(gè)天平式重量秤,平衡時(shí),左右秤桿不一樣長(zhǎng),現(xiàn)有兩個(gè)500g砝碼,問是否可以準(zhǔn)確稱出1市斤(斤:500g)的白糖?
14、一個(gè)公司調(diào)查,選擇10名員工,其中吸煙的6個(gè),本科學(xué)歷的7個(gè),大于50歲的八個(gè),高級(jí)職稱的9個(gè),男性的10個(gè),如果符合全部條件的人最多是6個(gè),那么最少是幾個(gè)?0個(gè) 同8
15、有26個(gè)小球!其中一個(gè)球比其他球稍微重一點(diǎn),給你一個(gè)天平,只有稱三次機(jī)會(huì),問怎樣將這個(gè)小球找出來 答:分三組,9個(gè)9個(gè)8個(gè)
稱量9個(gè)的兩組,若是一樣重,則那個(gè)小球在八個(gè)那組;若是有一組稍重,那小球就在稍重一組。將找出的一組拿出六個(gè),分別兩邊放三個(gè)稱量,若是一樣重,則那個(gè)小球在剩下的里面;若是有一組稍重,那小球就在稍重一組。最后剩三個(gè)或者兩個(gè),再用同樣的方法進(jìn)行鑒別。
部分題回答: 一 填空
4、(5+7)*(8-6)=24 6*(5+7-8)=24 [6÷(7-5)]×8=24;8÷(7-5)×6=24 8÷(3-8÷3)=24 二 問答:
1.推銷梳子的故事
有一個(gè)單位招聘業(yè)務(wù)員,由于公司待遇很好,所以很多人面試。經(jīng)理為了考驗(yàn)大家就出了一個(gè)題目:讓他們用一天的時(shí)間去推銷梳子,向和尚推銷。很多人都說這不可能的,和尚是沒有頭發(fā)的,怎么可能向他們推銷?于是很多人就放棄了這個(gè)機(jī)會(huì)。但是有三個(gè)人愿意試試。第三天,他們回來了。
第一個(gè)人賣了1把梳子,他對(duì)經(jīng)理說:“我看到一個(gè)小和尚,頭上生了很多虱子,很癢,在那里用手抓。我就騙他說抓頭用梳子抓,于是我就賣出了一把。”
第二個(gè)人賣了10把梳子。他對(duì)經(jīng)理說:“我找到廟里的主持,對(duì)他說如果上山禮佛的人的頭發(fā)被山風(fēng)吹亂了,就表示對(duì)佛不尊敬,是一種罪過,假如在每個(gè)佛像前擺一把梳子,游客來了梳完頭再拜佛就更好!于是我賣了10把梳子?!?/p>
第三個(gè)人賣了3000把梳子!他對(duì)經(jīng)理說:“我到了最大的寺廟里,直接跟方丈講,你想不想增加收入?方丈說想。我就告訴他,在寺廟最繁華的地方貼上標(biāo)語(yǔ),捐錢有禮物拿。什么禮物呢,一把功德梳。這個(gè)梳子有個(gè)特點(diǎn),一定要在人多的地方梳頭,這樣就能梳去晦氣梳來運(yùn)氣。于是很多人捐錢后就梳頭又使很多人去捐錢。一下子就賣出了3000把?!?/p>
說明:在溝通時(shí),我們要找到對(duì)方的需求并給予解決,只有增加了對(duì)方的價(jià)值,才能達(dá)成自己的期望。2、5斤桶取滿倒入3斤桶 然后 3斤桶的 水倒掉,然后 5斤桶剩了2斤在倒入3斤桶,然后 5斤桶在取滿 此時(shí) 3斤桶中有2斤水,5斤桶把3斤桶倒?jié)M 此時(shí) 5斤桶就是4斤水。
3、選擇貼有“混合”的蘋果那筐
取出的是紅色蘋果,說明此筐蘋果為全紅色蘋果,那么貼有“全紅色”的是全綠色,貼有“全綠色”的是混合。取出的是綠色蘋果,說明此筐蘋果為全綠色蘋果,那么貼有“全紅色”的是混合色,貼有“全綠色”的是紅色。
4、甲乙過橋 甲回 丙丁過橋 乙回 甲乙一起過橋。
5、這是一個(gè)美麗的錯(cuò)誤。
6、客戶永遠(yuǎn)是對(duì)的 錯(cuò)了也是對(duì)。9、57秒
15、解決此類問題方法:類似這樣的問題一般不容易正向推出結(jié)果 即:不要先盲目地稱這26個(gè)球,這樣成功的幾率不是很大(遍歷的次數(shù)太多),而是應(yīng)該考慮:如果只稱一次就能找出重球的情況中 最多原始球應(yīng)該有幾個(gè)?
即: 原始球有3個(gè)(如果原始球是4個(gè) 稱一次是不能找到重球的,原始球是兩個(gè)或一個(gè)一定能 但不是最多的原始球)所以問題應(yīng)該圍繞3進(jìn)行研究,來逆向推理:
3×3 = 9
9×3=27 26 =9+9+(9-1)
所以即使是原始球有27個(gè)我們也一定能做出來,何況是26個(gè)
我認(rèn)為此題就是怕答題人想到27 = 9+ 9+ 9 所以才弄個(gè)26 來故意讓答題者想不出26=9+9+8 的分法
第三篇:Android總結(jié)
Android四大組件:
Activity—表現(xiàn)屏幕界面
Service—后臺(tái)服務(wù)
BroadcastReceiver—實(shí)現(xiàn)廣播機(jī)制
ContentProvider—實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)
Intent類:用來啟動(dòng)程序并傳遞信息的類
用于Activity、Receiver、Service之間進(jìn)行交互的類,通過無參構(gòu)造方法創(chuàng)建對(duì)象,增加其action、category、data、extra等屬性進(jìn)行信息傳遞,并通過Activity中的startActivity(Intent intent)進(jìn)行界面的跳轉(zhuǎn);通過Context中的StartService(Intent intent)進(jìn)行服務(wù)跳轉(zhuǎn);通過Context中的registerReceive(Intent intent)對(duì)廣播進(jìn)行注冊(cè),并通過sendBroadcast()進(jìn)行無序消息發(fā)送,或可以通過SendOrderedBroadcast()進(jìn)行有序的消息發(fā)送。Handler類:
用來發(fā)送和處理消息,并配合主線程完成UI的更新;消息Message/Runnable傳遞通過MessageQueue(消息隊(duì)列,先進(jìn)先出)進(jìn)行傳遞,并通過Lopper進(jìn)行接收,傳遞的消息可以為Message對(duì)象,也可以是Runnable對(duì)象;接收方法通過HandleMessage(Message msg)進(jìn)行獲取。SharedPreferences類:
一般用于第一次登錄時(shí)的設(shè)置,或者是各個(gè)界面的一些小型格式設(shè)置,如字體等。是本地的小型共享數(shù)據(jù)庫(kù),可以通過Context的靜態(tài)方法getSharedPreferences獲得其對(duì)象,對(duì)象內(nèi)的值均為鍵值對(duì)進(jìn)行儲(chǔ)存。通過SharedPreferences對(duì)象調(diào)用editor()獲取SharedPreferences.Editor對(duì)象,向共享數(shù)據(jù)庫(kù)中增加數(shù)據(jù),putString(),并提交數(shù)據(jù),commit();通過SharedPreferences對(duì)象獲取共享數(shù)據(jù)庫(kù)中的數(shù)據(jù),getString()。
ViewPager:實(shí)現(xiàn)界面滑動(dòng)的類;
通過設(shè)置OnPagerChangedListener設(shè)置ViewPager的監(jiān)聽事件;
實(shí)現(xiàn)流程:
①布局文件中設(shè)置ViewPager控件;
②代碼中進(jìn)行綁定控件;
③通過繼承PagerAdapter抽象類進(jìn)行設(shè)置適配器,并傳遞數(shù)據(jù)源;
④適配器中實(shí)現(xiàn)兩個(gè)抽象方法,兩個(gè)重寫方法:getCount()—獲取滑動(dòng)界面的數(shù)量,isViewFromObject()—判斷視圖是否是來自于Object文件中;重寫兩個(gè)方法,分別為destoryItem—銷毀指定位置的視圖;InstantiateItem(),設(shè)置指定位置的視圖;
Timer與TimerTask類:
Timer為計(jì)時(shí)器的類,通過無參構(gòu)造方法可以獲取對(duì)象,通過Timer.schedule(TimerTask task,long time)進(jìn)行設(shè)置多久后執(zhí)行某任務(wù),當(dāng)任務(wù)執(zhí)行完后,取消計(jì)時(shí)的功能,Timer.cancle();TimerTask類為抽象類,實(shí)例化時(shí),必須重寫run方法;執(zhí)行的內(nèi)容,均在run方法中進(jìn)行設(shè)置,并且執(zhí)行時(shí),已在子線程中進(jìn)行執(zhí)行。自定義View:用到的類有Paint、Canvas、Spec、SpecF、Path、View.MeasureSpec、Timer、TimerTask;
抽象類,通過子類繼承,獲取對(duì)象;在布局文件中綁定后,通過代碼,設(shè)置自定義View的屬性;自定義View中,通過重寫OnMeasure方法,對(duì)布局文件中的尺寸進(jìn)行測(cè)量,并由View中的setMeasureDimenson()方法,進(jìn)行數(shù)據(jù)的保存;通過重寫Ondraw方法,進(jìn)行繪圖;當(dāng)需要繪制動(dòng)態(tài)圖形時(shí),使用計(jì)時(shí)器Timer的schedule(TimerTask,long time,delay time2)方法,在time時(shí)間后,每隔time2時(shí)間,重寫執(zhí)行run方法中的內(nèi)容;將耗時(shí)的操作設(shè)置在run方法中,并通過View中的invalidate()方法刷新主線程中的繪的圖形,通過postInvalidate()刷新子線程中的圖形。數(shù)據(jù)庫(kù):
常用的數(shù)據(jù)庫(kù)有Oracle,需要安裝和配置的大型收費(fèi)數(shù)據(jù)庫(kù);MySQL是中型數(shù)據(jù)庫(kù),同樣需要安裝配置,但不需要收費(fèi);Sqlite是小型免費(fèi)的嵌入式數(shù)據(jù)庫(kù),占用內(nèi)存低,最新版本為3.0。Sqlite數(shù)據(jù)庫(kù)需要通過SqliteDatabaseOpenHelper進(jìn)行創(chuàng)建數(shù)據(jù)庫(kù),并通過SqliteDatabase進(jìn)行數(shù)據(jù)庫(kù)的操作。輔助類是抽象類,通過繼承,重寫兩個(gè)方法,并在子類的構(gòu)造方法中通過OpenHelper的構(gòu)造方法(Context context,String SqlName,SqliteDatabase.CursorFactory factory,int version)進(jìn)行數(shù)據(jù)庫(kù)的創(chuàng)建,在onCreate方法中,進(jìn)行數(shù)據(jù)庫(kù)表的創(chuàng)建,在onUpdate中進(jìn)行數(shù)據(jù)庫(kù)的版本更新。在數(shù)據(jù)庫(kù)的操作類中,執(zhí)行exect方法,通過sql語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。Create table student(_id integer primary key auto increament ,name text);insert into student(_id,name)values(1,zx);delete from student where _id=1;update student set _id=2 where name=zx;select *from student;ListView、GridView適配器的優(yōu)化:
將布局文件中的控件進(jìn)行封裝,當(dāng)視圖加載時(shí),判斷可變視圖是否存在,當(dāng)不存在時(shí),通過布局文件獲取視圖,并新建封裝類,將地址通過setTag()進(jìn)行發(fā)送;當(dāng)視圖存在時(shí),重復(fù)利用地址—getTag()。反射:
存儲(chǔ)數(shù)據(jù)的方式:
共享數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)、文件、網(wǎng)絡(luò)、內(nèi)容提供者
廣播:
廣播傳播時(shí),需要接收者、發(fā)送者、廣播頻道;根據(jù)發(fā)送者的發(fā)送方式不同,分為有序廣播、無序廣播;有序廣播為接收者有接收順序,根據(jù)設(shè)置的優(yōu)先級(jí)不同,確定先后順序,接收者同時(shí)也是發(fā)送者,向后面的廣播發(fā)送消息,發(fā)送過程中,可以添加信息,也可以停止廣播的傳輸;無序廣播,接收者之間無聯(lián)系,均從發(fā)送者處接收信息;廣播在傳輸過程中,不能被添加信息,也不可能被停止。廣播在發(fā)送前,需要對(duì)接收者進(jìn)行注冊(cè),注冊(cè)方式有兩種,動(dòng)態(tài)注冊(cè)、靜態(tài)注冊(cè)。動(dòng)態(tài)注冊(cè),是在代碼中進(jìn)行,通過Context對(duì)象調(diào)用靜態(tài)方法進(jìn)行注冊(cè),所有的廣播均可以用動(dòng)態(tài)注冊(cè),其生命周期依賴于應(yīng)用,相對(duì)于靜態(tài)注冊(cè),比較節(jié)省內(nèi)存;靜態(tài)方法在清單文件中進(jìn)行注冊(cè),部分系統(tǒng)廣播不能通過靜態(tài)注冊(cè)進(jìn)行,其生命周期依賴于系統(tǒng),當(dāng)系統(tǒng)啟動(dòng),即運(yùn)行接收廣播,較耗內(nèi)存。廣播接收者需要繼承BroadcastReceiver,并實(shí)現(xiàn)抽象方法onReceive(),通過回調(diào)接口,進(jìn)行數(shù)據(jù)的傳輸。注意:廣播發(fā)送前,必須進(jìn)行接收者的注冊(cè),并且,當(dāng)顯示跳轉(zhuǎn)時(shí),不需要意圖過濾器。安卓布局:九種布局
線性布局,水平或垂直方向兩種格式,主要特點(diǎn)為權(quán)重,即規(guī)定各控件在視圖中的占有的比例;
相對(duì)布局,相對(duì)于父控件或兄弟控件的布局,各控件需指定相對(duì)位置; 絕對(duì)布局,指定各控件在視圖中的絕對(duì)位置,幾乎不再使用; 表格布局,子布局放在行中,列由控件表示(TableRow); 幀布局:覆蓋前面布局的布局,一般用于暫停按鈕等; 風(fēng)格布局:可以跨行、跨列的布局,占滿換行;
左右側(cè)滑:可以實(shí)現(xiàn)左右側(cè)滑,通過設(shè)置主菜單和二級(jí)菜單設(shè)置左右兩個(gè)菜單; 下拉刷新:設(shè)置下拉刷新、上拉加載的功能; 抽屜布局;
安卓版本及對(duì)應(yīng)的API:
1.6—4;2—7;3—11;4—15;4.3—18;5—20;5.1—21;6—23;7—25; 安卓四層架構(gòu):
應(yīng)用層:Java語(yǔ)言開發(fā),主要從事App開發(fā);
運(yùn)行庫(kù)層:Java語(yǔ)言與C語(yǔ)言,View視圖、管理類等的開發(fā); 架構(gòu)層:C語(yǔ)言與Linux語(yǔ)言,各種框架、瀏覽器等; 內(nèi)核層:Linux、C語(yǔ)言,開發(fā)各種驅(qū)動(dòng); 安卓四大組件:
Activity:界面,實(shí)現(xiàn)程序與用戶之間的交換,有自己的生命周期,七個(gè)生命周期;4種啟動(dòng)模式 Service:
BroadcastReceive:三要素,發(fā)送者、接收者、發(fā)送頻道(Intent);類型:有序(接收有序,有數(shù)據(jù)傳送,可以攔截?cái)?shù)據(jù))、無序廣播(相對(duì));注冊(cè)方式:靜態(tài)注冊(cè),持久監(jiān)聽,占用內(nèi)存比較高生命周期跟隨系統(tǒng),動(dòng)態(tài)注冊(cè)(代碼中),所有廣播都可以動(dòng)態(tài)注冊(cè),部分系統(tǒng)廣播不能動(dòng)態(tài)注冊(cè),臨時(shí)監(jiān)聽,占用內(nèi)存較少,生命周期隨應(yīng)用進(jìn)行;
ContentProvide:不能存放數(shù)據(jù),五種存放數(shù)據(jù)方式之一,特點(diǎn)為:①為數(shù)據(jù)的獲取等操作添加一個(gè)統(tǒng)一的接口②可以實(shí)現(xiàn)跨應(yīng)用訪問數(shù)據(jù);③可以實(shí)現(xiàn)Android中通訊錄、消息、音頻、視頻等的訪問或操作;通過ContentReceive進(jìn)行數(shù)據(jù)的訪問,可以對(duì)數(shù)據(jù)進(jìn)行增刪改查操作。
動(dòng)畫: IO流: 序列化: AlertDialog:
Set實(shí)現(xiàn)類: 手機(jī)電量檢測(cè):
自定義SurfaceView:
自定義View:三個(gè)構(gòu)造方法的區(qū)別
Message:Handler.obtain/new/Message.obtain
HttpUriConnection訪問網(wǎng)絡(luò)
gride 異步任務(wù) 動(dòng)畫
抽象類和接口 反射 克隆 序列化 側(cè)滑的實(shí)現(xiàn) 數(shù)據(jù)庫(kù) Socket:
Gson解析
異步任務(wù)和子線程區(qū)別 WebView 版本更新 照片的圓角化
Collection與Collections Sql語(yǔ)句
MVP框架與MVC: TCP與UDP的區(qū)別: 一鍵分享的流程: Http協(xié)議的理解: 不使用框架訪問網(wǎng)絡(luò): List集合與set集合: 自定義View的流程: 線性布局的特點(diǎn): ViewPager的原理: 服務(wù)的啟動(dòng)方式:
Activity的啟動(dòng)方式: Xml數(shù)據(jù)解析:
第四篇:Android WebView總結(jié)
Android WebView總結(jié)
1、添加權(quán)限:AndroidManifest.xml中必須使用許可“Android.permission.INTERNET”,否則會(huì)出web page not available錯(cuò)誤。
2、在要Activity中生成一個(gè)WebView組件:WebView webView = new WebView(this);
3、設(shè)置WebView基本信息:
如果訪問的頁(yè)面中有Javascript,則webview必須設(shè)置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
觸摸焦點(diǎn)起作用
requestFocus();
取消滾動(dòng)條
this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
4、設(shè)置WevView要顯示的網(wǎng)頁(yè):
互聯(lián)網(wǎng)用:webView.loadUrl("");本地文件存放在:assets文件中
5、如果希望點(diǎn)擊鏈接由自己處理,而不是新開Android的系統(tǒng)browser中響應(yīng)該鏈接。給WebView添加一個(gè)事件監(jiān)聽對(duì)象(WebViewClient)
并重寫其中的一些方法
shouldOverrideUrlLoading:對(duì)網(wǎng)頁(yè)中超鏈接按鈕的響應(yīng)。
當(dāng)按下某個(gè)連接時(shí)WebViewClient會(huì)調(diào)用這個(gè)方法,并傳遞參數(shù):按下的url
onLoadResource
onPageStart
onPageFinish
onReceiveError
onReceivedHttpAuthRequest6、如果用webview點(diǎn)鏈接看了很多頁(yè)以后,如果不做任何處理,點(diǎn)擊系統(tǒng)“Back”鍵,整個(gè)瀏覽器會(huì)調(diào)用finish()而結(jié)束自身,如果希望瀏覽的網(wǎng)頁(yè)回退而不是退出瀏覽器,需要在當(dāng)前Activity中處理并消費(fèi)掉該Back事件。
覆蓋Activity類的onKeyDown(int keyCoder,KeyEvent event)方法。
public boolean onKeyDown(int keyCoder,KeyEvent event){
if(webView.canGoBack()&& keyCoder == KeyEvent.KEYCODE_BACK){
webview.goBack();//goBack()表示返回webView的上一頁(yè)面
return true;
}
return false;
}
第五篇:Android 課程總結(jié)
一、Android開發(fā)環(huán)境的搭建。
1、Android SDK的安裝;
2、ADT的安裝和配置;
3、Android 模擬器的配置。
二、編寫第一個(gè)Android程序───Hello World(1學(xué)時(shí))
1、創(chuàng)建一個(gè)Android應(yīng)用程序的步驟;
2、Android 應(yīng)用程序目錄結(jié)構(gòu);
3、AndroidManidest.xml文件的作用;
4、Android相關(guān)資源文件的作用。
三、Activity及Activity和Intent(2學(xué)時(shí))
1、Activity的主要作用;
2、創(chuàng)建一個(gè)Activity的方法;
3、在AndroidManifest.xml文件中的注冊(cè)應(yīng)用Activity的方法;
4、在Activity中添加控件的方法;
5、多個(gè)Activity之間的切換;
6、Intent的基本作用;
7、在一個(gè)Activity中啟動(dòng)另一個(gè)Activity的方法;
8、使用Intent在Activity中傳遞數(shù)據(jù)的基本方法。
四、常見控件的使用方法(基礎(chǔ))
1、TextView的使用方法;
2、EditText的使用方法;
3、Button的使用方法;
4、Menu的使用方法。
五、Activity的生命周期(2學(xué)時(shí))
1、Activity的七個(gè)周期:
① OnCreate();② OnDestroy();③ OnPause();④ OnRestart();⑤ OnResume();⑥ OnStart();⑦ OnStop();
2、Task的基本概念;
3、Activity和Task之間的關(guān)系;
4、對(duì)話框風(fēng)格的Activity的使用方法。
六、Activity的布局(3學(xué)時(shí))
1、LinearLayout的使用方法;
2、TableLayout的使用方法;
3、LinearLayout和TableLayout的嵌套使用;
4、RelativeLayout的使用方法(重點(diǎn)、難點(diǎn))
七、常用控件是使用方法二(2學(xué)時(shí))
1、RadioGroup和RadioButton的使用方法;
2、CheckBox的使用方法;
3、Toast的基本用法。
4、ProgressBar的使用方法;
5、ListView的用法。
八、Handler的使用方法(2學(xué)時(shí))
1、Handler的基本概念;
2、Handler的基本用法;
3、使用Handler更新ProgressBar
4、Handler與線程;
5、Bundle的用法;
6、在新線程中處理消息的方法。
九、SQLite使用方法
1、SQLite介紹;
2、SQLiteOpenHeper使用方法;
3、使用adb訪問SQLite
4、增、刪、改、查。
十、Android文件下載
1、使用HTTP協(xié)議下載文件;
2、將下載的文件寫入SDCARD。
十一、Content Provider初步(2學(xué)時(shí))
1、Content Provider的基本概念;
2、Uri;
3、Content Provider的實(shí)現(xiàn)方法。
十二、XML文件的解析方法
1、什么是SAX;
2、SAX的基本原理;
3、SAX常用接口;
4、SAX解析。
十三、廣播機(jī)制(2學(xué)時(shí))
1、Android的廣播機(jī)制(圖鑒);
2、BroadCastReceive的作用;
3、BroadCastReceive的編寫方法;
4、BroadCastReceive的生命周期。
5、注冊(cè)BroadCastReceive的方法;
6、Android內(nèi)置BroadCastReceive Actions。
十四、WIFI網(wǎng)絡(luò)的使用
1、什么是WIFI;
2、獲取WIFI網(wǎng)卡的狀態(tài);
3、操作WIFI所需要的權(quán)限;
4、改變WIFI網(wǎng)卡的狀態(tài)。
十五、Socket編程
1、什么是Socket;
2、Socket基本通信模型(見圖);
3、使用基于TCP協(xié)議的Socket;
4、使用基于UDP協(xié)議的Socket。
十六、Service
1、Service是什么;
2、Service不是什么;
3、Service的生命周期;
4、啟動(dòng)和停止Service;