• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            life02

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              197 隨筆 :: 3 文章 :: 37 評論 :: 0 Trackbacks
            http://www.cnblogs.com/sinber/archive/2011/05/05/2037842.html
            筆試,共10道題,不限時間。(答案整理自互聯(lián)網(wǎng),不保證完全正確,僅供參考。)
             
            1.請談一下Android系統(tǒng)的架構(gòu)。
            答:Android系統(tǒng)采用了分層架構(gòu),從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運行庫層和linux核心層。
             
            2.談?wù)刟ndroid大眾常用的五種布局。
            答:在Android中,共有五種布局方式,分別是:FrameLayout(框架布局),LinearLayout (線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)。
            (1)FrameLayout  框架布局,放入其中的所有元素都被放置在最左上的區(qū)域,而且無法為這些元素指定一個確切的位置,下一個子元素會重疊覆蓋上一個子元素,適合瀏覽單張圖片。
            (2)LinearLayout  線性布局,是應(yīng)用程序中最常用的布局方式,主要提供控件水平或者垂直排列的模型,每個子組件都是以垂直或水平的方式來定位.(默認是垂直)
            (3)AbsoluteLayout 絕對定位布局,采用坐標軸的方式定位組件,左上角是(0,0)點,往右x軸遞增,往下Y軸遞增,組件定位屬性為android:layout_x 和 android:layout_y來確定坐標。
            (4)RelativeLayout 相對布局,根據(jù)另外一個組件或是頂層父組件來確定下一個組件的位置。和CSS里面的類似。
            (5)TableLayout 表格布局,類似Html里的Table.使用TableRow來布局,其中TableRow代表一行,TableRow的每一個視圖組件代表一個單元格。
             
            3.談?wù)刟ndroid數(shù)據(jù)存儲方式。
            答:Android提供了5種方式存儲數(shù)據(jù):
            (1)使用SharedPreferences存儲數(shù)據(jù);它是Android提供的用來存儲一些簡單配置信息的一種機制,采用了XML格式將數(shù)據(jù)存儲到設(shè)備中。只能在同一個包內(nèi)使用,不能在不同的包之間使用。
            (2)文件存儲數(shù)據(jù);文件存儲方式是一種較常用的方法,在Android中讀取/寫入文件的方法,與Java中實現(xiàn)I/O的程序是完全一樣的,提供了openFileInput()和openFileOutput()方法來讀取設(shè)備上的文件。
            (3)SQLite數(shù)據(jù)庫存儲數(shù)據(jù);SQLite是Android所帶的一個標準的數(shù)據(jù)庫,它支持SQL語句,它是一個輕量級的嵌入式數(shù)據(jù)庫。
            (4)使用ContentProvider存儲數(shù)據(jù);主要用于應(yīng)用程序之間進行數(shù)據(jù)交換,從而能夠讓其他的應(yīng)用保存或讀取此Content Provider的各種數(shù)據(jù)類型。
            (5)網(wǎng)絡(luò)存儲數(shù)據(jù);通過網(wǎng)絡(luò)上提供給我們的存儲空間來上傳(存儲)和下載(獲取)我們存儲在網(wǎng)絡(luò)空間中的數(shù)據(jù)信息。
             
            4.Android中Activity, Intent, Content Provider, Service各有什么區(qū)別。
            答:Activity: 活動,是最基本的android應(yīng)用程序組件。一個活動就是一個單獨的屏幕,每一個活動都被實現(xiàn)為一個獨立的類,并且從活動基類繼承而來。
            Intent: 意圖,描述應(yīng)用想干什么。最重要的部分是動作和動作對應(yīng)的數(shù)據(jù)。
            Content Provider:內(nèi)容提供器,android應(yīng)用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件、SQLite數(shù)據(jù)庫中,甚至是任何有效的設(shè)備中。當你想將你的應(yīng)用數(shù)據(jù)和其他應(yīng)用共享時,內(nèi)容提供器就可以發(fā)揮作用了。
            Service:服務(wù),具有一段較長生命周期且沒有用戶界面的程序。
             
            5.View, surfaceView, GLSurfaceView有什么區(qū)別。
            答:view是最基礎(chǔ)的,必須在UI主線程內(nèi)更新畫面,速度較慢。
            SurfaceView 是view的子類,類似使用雙緩機制,在新的線程中更新畫面所以刷新界面速度比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é)點,描述了package中所有的內(nèi)容。
            uses-permission:請求你的package正常運作所需賦予的安全許可。
            permission: 聲明了安全許可來限制哪些程序能你package中的組件和功能。
            instrumentation:聲明了用來測試此package或其他package指令組件的代碼。
            application:包含package中application級別組件聲明的根節(jié)點。
             activity:Activity是用來與用戶交互的主要工具。
             receiver:IntentReceiver能使的application獲得數(shù)據(jù)的改變或者發(fā)生的操作,即使它當前不在運行。
             service:Service是能在后臺運行任意時間的組件。
             provider:ContentProvider是用來管理持久化數(shù)據(jù)并發(fā)布給其他應(yīng)用程序使用的組件。
             
            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內(nèi)容
            publicclass Person {
            private Integer id;
            private String name;
            private Short age;

            public Integer getId() {
            return id;
            }

            publicvoid setId(Integer id) {
            this.id = id;
            }

            public String getName() {
            return name;
            }

            publicvoid setName(String name) {
            this.name = name;
            }

            public Short getAge() {
            return age;
            }

            publicvoid setAge(Short age) {
            this.age = age;
            }
            }
             (1)使用SAX讀取XML文件;它采用的是事件驅(qū)動,并不需要解析完整個文檔,速度快并且占用內(nèi)存少。需要為SAX提供實現(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;

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

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

            @Override
            publicvoid 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 整個XML字符串
            * start 節(jié)點值在整個XML字符串中的索引位置
            * length 節(jié)點值的長度
            */
            @Override
            publicvoid 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);
            }
            elseif("age".equals(perTag)){
            person.setAge(
            new Short(data));
            }
            }
            }

            @Override
            publicvoid 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;
            publicclass SAXPerson{
            publicstatic 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文件的所有內(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;
            publicclass DOMPerson {
            publicstatic 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()));
            }
            elseif("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;
            publicclass PullPerson {

            publicstaticvoid 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();
            }

            publicstatic 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(); //觸發(fā)第一個事件
            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)));
            }
            elseif(person!=null){
            if("name".equals(parser.getName())){
            person.setName(parser.nextText());
            }
            elseif("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)不會安裝一個沒有數(shù)字證書的應(yīng)用程序
            (2)Android程序包使用的數(shù)字證書可以是自簽名的,不需要一個權(quán)威的數(shù)字證書機構(gòu)簽名認證
            (3)如果要正式發(fā)布一個Android ,必須使用一個合適的私鑰生成的數(shù)字證書來給程序簽名,而不能使用adt插件或者ant工具生成的調(diào)試證書來發(fā)布。
            (4)數(shù)字證書都是有有效期的,Android只是在應(yīng)用程序安裝的時候才會檢查證書的有效期。如果程序已經(jīng)安裝在系統(tǒng)中,即使證書過期也不會影響程序的正常功能。
             
             
            10.已知單鏈表的頭結(jié)構(gòu)head,寫一個函數(shù)把這個鏈表逆序。
            答: 如下所示
            Node.java
            publicclass Node {
            private Integer count;
            private Node nextNode;

            public Node(){

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

            }
            ReverseSingleLink.java
            publicclass ReverseSingleLink {
            publicstatic Node revSingleLink(Node head){
            if(head ==null){ //鏈表為空不能逆序
            return head;
            }
            if(head.getNextNode()==null){ //如果只有一個結(jié)點,當然逆過來也是同一個
            return head;
            }
            Node rhead
            = revSingleLink(head.getNextNode());
            head.getNextNode().setNextNode(head);
            head.setNextNode(
            null);
            return rhead;
            }
            publicstaticvoid 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();
            }
            }
            }
            posted on 2012-02-21 15:43 life02 閱讀(234) 評論(0)  編輯 收藏 引用 所屬分類: 筆試
            久久中文娱乐网| 久久久久亚洲AV无码专区首JN | 日韩精品久久久肉伦网站 | 久久夜色精品国产欧美乱| 久久精品亚洲精品国产色婷| 亚洲国产成人久久综合一| 色播久久人人爽人人爽人人片aV| 久久夜色精品国产噜噜麻豆| 93精91精品国产综合久久香蕉| 色狠狠久久综合网| 久久综合久久综合久久| 久久婷婷五月综合成人D啪 | 精品久久人人爽天天玩人人妻 | 精品精品国产自在久久高清| 久久久WWW成人免费精品| AV无码久久久久不卡蜜桃| 亚洲人成网站999久久久综合| 97久久精品人妻人人搡人人玩| 亚洲天堂久久久| 久久激情亚洲精品无码?V| 99久久99久久精品免费看蜜桃 | 久久成人18免费网站| 97久久精品国产精品青草| 99久久国产精品免费一区二区| AAA级久久久精品无码区| 国产精品久久久天天影视| 亚洲香蕉网久久综合影视 | 久久精品视频免费| 麻豆成人久久精品二区三区免费 | 亚洲伊人久久成综合人影院 | 久久久久亚洲AV无码专区首JN| 久久久久人妻一区精品| 狠狠精品久久久无码中文字幕| 国产欧美久久一区二区| 69久久精品无码一区二区| 久久精品国产亚洲av高清漫画| 亚洲AV无码一区东京热久久| 亚洲精品高清国产一线久久| 亚洲国产精品无码久久98| 久久香综合精品久久伊人| 久久亚洲精品成人av无码网站|