面试归来

     最近面试两次,怎么说呢?开始的时候都是抱着紧张的心情去的,但是 没有给我想要的感觉,我想要的是让我知道我的不足,而不是单纯的聊聊天而已。。。。

今天  我进行了第三次面试,这一次算是让我知道了自己好像真的很失败哦!他呢,一共问了我三个方向的问题。。。。Android,Ios,Html5.。。。。表示自己当时真的很衰。。。。

    这里呢!我把今天的面试题公布出来,希望对大家有帮助,个人觉得这次的面试官还不错哦!至少让我紧张了,而且问的东西是属于那种简而精的那种类型。

Android

1:怎样优化ListView?

      丫丫,这道题其实应该想到会出现在面试题中,毕竟对于Android这块来说,listView算是一个值得我们花时间去深究的一个控件了,虽然,现在我们会经常用到这个控件,但是我们并没有完全的理解到ListView的其他更强大的功能以及用途。

         在这里我们考虑优化主要是从两方面出发:

第一:   如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用。在这个方法中,尽可能少创建view   

第二:给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果   3,如果listview需要显示的item很多,就要考虑分页加载。比如一共要显示100条或者更多的时候,我们可以考虑先加载20条,等用户拉到列表底部的时候,再去加载接下来的20条。

这里给条链接,自己可以深究。。

http://www.360doc.com/content/13/0114/16/7857928_260130465.shtml

2:线程的工作原理?

   喔喔,其实看到前两个问题,就已经知道这两个问题在面试很中的命中率以及在面试官心目中的地位:

     线程,做个应用的都知道他的作用是不可或缺的。所以,他的原理我们是必须要理解到脑髓里面去:

 andriod提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。

  1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。

       2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来的消息。

  3) Message Queue(消息队列):用来存放线程放入的消息。

  4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue。

这里给一个承影的博客链接:http://blog.csdn.net/chengyingzhilian/article/details/7646895

3:怎样优化Android的内存?

   因为这里有太多的原因导致内存上的一个怠慢,所以,我这里就只是提供链接咯哦!

http://wenku.baidu.com/view/8c61d5380912a2161479290e.html

4:百度地图是利用哪个方法获取自己的位置?

     在onLocationChanged方法里获得自己当前的坐标
然后方法里写 mSearch.reverseGeocode

(new GeoPoint((int)(location.getLatitude()*1e6),(int)(location.getLongitude()*1e6)));
然后再通过代码实行这个方法功能
public class MySearchListener implements MKSearchListener { 
public void onGetAddrResult(MKAddrInfo result, int error){
MKGeocoderAddressComponent kk=result.addressComponents;
String city=kk.city;

这里再跟一个demo的例子链接:

http://blog.csdn.net/daditao/article/details/16888931

5:Android中有哪些布局?说说他们的区别?

    哇!今天真的是脑袋发热了,我竟然在这个问题上迟疑了!

       

   一应该先回答有五种布局呀!然后将其罗列出来:

           分别是:FrameLayout(帧布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。 

  第二步,再进行介绍呀:

  1.FrameLayout    

       这个布局可以看成是墙脚堆东西,有一个四方的矩形的左上角墙脚,我们放了第一个东西,要再放一个,那就在放在原来放的位置的上面,这样依次的放,会盖住原来的东西。这个布局比较简单,也只能放一点比较简单的东西。    

  2.LinearLayout    

       线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局 (android:orientation="vertical")和水平布局(android:orientation="horizontal" )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。    

LinearLayout中有一个重要的属性 android:layout_weight="1",这个weight在垂直布局时,代表行距;水平的时候代表列宽;weight值越大就越大。    

  3.AbsoluteLayout    

       绝对布局犹如div指定了absolute属性,用X,Y坐标来指定元素的位置android:layout_x="20px" android:layout_y="12px" 这种布局方式也比较简单,但是在垂直随便切换时,往往会出问题,而且多个元素的时候,计算比较麻烦。    

4.RelativeLayout    

    相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:    

    相对于某一个元素    

    android:layout_below="@id/aaa" 该元素在 id为aaa的下面    

    android:layout_toLeftOf="@id/bbb" 该元素在 id为bbb的左边     

     相对于父元素的地方    

     android:layout_alignParentLeft="true"  父元素左对齐    

     android:layout_alignParentRight="true" 父元素右对齐    

     还可以指定边距等,具体详见API        

5.TableLayout    

     表格布局类似Html里面的Table。每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素,设定他的对齐方式 android:gravity="" 。    

     每一个布局都有自己适合的方式,另外,这五个布局元素可以相互嵌套应用,做出美观的界面。

  第三步:再回答自己的喜好!

6:Android中有几种存储方式?你喜欢用哪种?

          

                1 使用SharedPreferences存储数据

               2 文件存储数据

              3 SQLite数据库存储数据

              4 使用ContentProvider存储数据

              5 网络存储数据

 详细解答链接:http://wenku.baidu.com/view/75f3b8366c85ec3a87c2c5f8.html

7:Sqlite如何创建一个表?

       说到这个问题,我都替自己感到失望!我竟然把它想数据库一样给说了出来,其实当面试官问我确定不的时候,我都应该知道我自己回答错误了!

第一步,我们想到应该是先建立一个库,然后再到表

private static final String TAG = "DatabaseHelper";
private DatabaseHelper dbOpenHelper=null;
public DatabaseHelper(Context context) {
super(context, "test.db", null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
//1.创建第一个数据表
db.execSQL("create table tiku(id integer primary key," +
"imgsrc varchar(70)," +
"key varchar(30)," +
"keynum integer," +
"preparekey varchar(200)," +
"achievement varchar(500));");


}

    这是一个demo的链接:

http://yangguangfu.iteye.com/blog/850726

8:在做手机应用的时候遇到了什么问题?

   在回答这个问题的时候,我是拿的自己的一个小应用去说的,而且记忆有一些生疏了,但是不知道自己是怎么的还是扯了一些乱七八糟额问题出来,但我估计面试官也没有搞清楚我的状况吧!但是,亲们今后去面试一定要记得对自己的应用以及流程这方面进行一个逐步的渗透哦!

9:做过第三方框架吗?

   这个我回答的是也,但是我告知他的并不是他想要的答案。算了,我看见面试官的那种无语的笑容,我都想找一个洞躲进去了,这还是一个Android程序员吗?

10:Android的界面尺寸?你做的应用的的界面尺寸是多少?

     在回答这里的时候,,我是很自豪的说的,但是,他又问了一句确定,然后,我就开始有点怀疑,但是我还是点头说确定,但是回来搜了一下,才发现自己还是答对了,其实我是根据iPhone手机的尺寸来计算的。但是当他问我的应用规格的尺寸是,我迟疑了。汗。

11:Android中有哪几种界面的尺寸,你是如何处理他们之间的转换的?

 这个问题真的没料想到。

在我的理解中,应该有三种不同的界面尺寸吧!

    

换算方式:

72像素/英寸=28.346像素/厘米

300像素/英寸=118.11像素/厘米

1 厘米=0.3937 英寸

1 英寸=2.54 厘米

像素不能直接换算成英寸、厘米,要在dpi下才能换算!

对于他们之间的换算其实就是:

应该在values文件夹下面分别放置values-hdpi, values-mdpi分别对应的样式,就OK了 

这里有详细解答:http://www.jb51.net/article/33238.htm

12:解析网络数据时,你是用的什么协议?如何取到数据的?

我当时回答的是Http(TCP/IP),然后将他们的三次握手附上。。。其实还是要谢谢我们的老师前几天刚好将这个告知我们,这才排上用场,谢了!

13:你是如何处理在listView上图片与数字并存的下拉刷新的那种效果的?

   其实这里我还没有明白面试官的用意,他说类似于微信,其实怪也只能怪自己美用过微信。

但是在网上找了一个类似于是针对Listview点击刷新的资料:

http://wenku.baidu.com/view/a50a782f453610661ed9f42f.html

在问完Android后,没想到他竟然还问我IOS,还好,我学了的,但是。。。。你问吧

IOS

1:IOS中有哪些控件

栏控件: UINavigationBar,UIToolBar,UIBarButtonItem; UITabBar,UITabBarItem

这里有一篇详细文档:

http://www.cnblogs.com/syxchina/archive/2012/09/04/2669844.html

2:UITableView的继承

其实我在回答这个问题的时候,我疑惑的是他想要知道的是:是谁继承了它,还是它继承了谁?

    其实大家都知道IOS中每个控件都是继承的NSOBJECt,其余的   我只能说UITABLEVIEWCELL继承的是UITABLEVIEW、

详细链接:

http://www.cnblogs.com/smileEvday/archive/2012/06/28/tableView.html

3:IOs中给lable添加下划线有哪几种方式?分别是说出来?

   怎么感觉就没有这个属性呢?

好吧,网上看了一下,好像是自定义的,毕竟这是一个显示自己需要的文本。所以,就自己动动手,自定义咯,可惜的是我今天真不知道,就联想到Android,然后把Android的按到上面说,丫丫,这次真的是一个坑,还是自己挖的。。。。

亲们,下面是自定义的链接哦!去看看大神是如何实现的吧:

http://blog.csdn.net/wangchaojie1215/article/details/8806369

好吧,终于完了,可是   者面试官真给力呀!HTML5也会,不顾,赞一个:

HTML5

1:画布是怎样实现的?

  这里就不详说了,代码见分晓:

   //取得canvas元素及其绘图上下文

        var canvas = document.getElementByIdx_x("diagonal");

        var context = canvas.getContext('2d');       

       

        //用绝对坐标来创建一条路径

        context.beginPath();

        context.moveTo(10,140);

        context.lineTo(140,70);

       

        //将这条线绘制到canvas

        context.stroke();

其实Canvas的用法很强大的,详细就的同学可以链接:

http://hi.baidu.com/wungking/item/0fefe75d41c5c1a3acc857cf

   其实当时我真的感觉自己很失败!  所以   只能这样,让别人指出自己看不见的不足,才能一步步的完善自己。

                                                   ok啦,Talk  is cheap,show the  world the code.

一切只是为了充实自己!!stay hungry and stay foolish!!
原文地址:https://www.cnblogs.com/Catherine-Brain/p/3617797.html