一时间不晓得怎么开头,恩,昨天去面了个试
人生中第一次面试,算是中型企业,老师内推,笔试过了,技术面没过,在杭州比较偏僻的山沟沟
说实话第一次面试面中型企业没过好像也不是很丢脸,先不吐槽公司的位置以及杭州到处施工的山沟沟,先说说笔试。
笔试的问题还算简单,很基础,我记得多少就写多少吧。
笔试
<b>Q:</b>Android四大组件
<b>A:</b>Activity,Service,广播,内容提供者
<b>E:</b>是广播接收器而不是广播。。。吗?后面两个不会拼,应该是Activity,Service,Broadcast Receiver,Content Provider
<b>Q:</b>Android 4.4后用()虚拟机代替Dalvik虚拟机
<b>A:</b>ART
<b>E:</b>ART(Android runtime),Dalvik每次运行程序都要编译,ART会预编译一次并存储,不用每次运行都编译
<b>Q:</b>说出一个Android 6.0或7.0的新特性
<b>A:</b>权限。6.0以后在需要权限的情况下要自己手动写代码进行请求
<b>E:</b>我不晓得是写编程上面的变化,还是用户体验上的新功能
<b>Q:</b>Service的启动方式。Service是否运行在主线程。
<b>A:</b>startService()和bindService()。Service是运行在主线程。
<b>E:</b>后面还有一个问题,不记得了,也没回答出来。
<b>Q:</b>Intent能传递哪些类型的数据
<b>A:</b>Bundle,String,int,long,boolean,float,double,可串行化对象
<b>E:</b>Serializable不会拼,Parcelable也不会拼,而且两个都不会读=。=
<b>Q:</b>String,StringBuilder,StringBuffer之间的区别
<b>A:</b>String是字符串常量,StringBuilder和StringBuffer是字符串变量,StringBuilder非线程安全,StringBuffer线程安全
<b>E:</b>这个问题。。。网上一堆
<b>Q:</b>final和static关键词的用法
<b>A:</b>final修饰的变量,在初始化(第一次赋值后)就不能更改;final修饰的方法,不能重写;final修饰的类,不能被继承;static修饰的变量,该类的所有实例化对象的该变量都共享同一个内存地址;static修饰的方法,可以用类直接调用该方法,不需要实例化;static修饰的内部类,实例化后不会持有外部类的引用
<b>E:</b>忘了一个static静态代码块,会在加载类的时候执行
<b>Q:</b>Android的数据存储方式
<b>A:</b>
<b>E:</b>因为写在那页纸的最后一行,所以没看到,所以。。。好吧我承认我很粗心=。=
<b>Q:</b>Android的生命周期
<b>A:</b>—→onCreate()
| ↓
| onStart() ← onRestart()
| ↓ ↑
| onResume() |
| ↓ |
killed running |
| ↓ |
| onPause() |
| ↓ |
|—— onStop() ——— |
| ↓
|— onDestroy()
onPause(),失去焦点但还能看到界面
onStop(),被完全覆盖
<b>E:</b>其实有一个细节错了,onDestroy()左边的线应该放到onPause()左边,被destroy了还怎么被kill=。=
<b>Q:</b>线程间通信的方式
<b>A:</b>Handler,AIDL(进程间)。其中Handler,Looper.prepare()为当前线程添加Looper,然后Looper.loop()开启消息循环(死循环),通过MessageQueue.next()得到Message,调用Message.target.handleMessage()
<b>E:</b>其实原问题的大意是,请列举你所知道的线程间通信的方式,一开始写了Handler,后来看他题目好像意思不止一个,就写了AIDL,毕竟两个进程也是不同的线程~所以到底一共有哪几种=。=
最后还有一题开放题,你做过的最有成就感的事。
笔试过了之后就是面试了,说实话第一次不紧张是不可能的,毕竟没见过这么大的场面=。=
不过有好几个问题,等我出来之后还是没想到,不晓得怎么回答。后来还是在回去的路上仔细回想他的问题,反复想了好几遍才有点想明白过来。
面试这部分,我到现在还没有上网查过。所以下面所有的之后反复仔细才想到答案的题应该算本该回答上来的题。
面试
首先他叫我自我介绍一下,恩,很怂很尴尬,这段就不说了
接着他看了我做的APP问我图片用的什么框架。
我说Glide。
然后问我Glide有什么优点。
缓存。。。?图片质量。。。?
其实我现在有点想一板砖拍死我自己
后来我仔细回想的时候想到Glide的用法,Glide.with(),恩,等等,这他么不是有个绑定activity或Fragment生命周期么(在onPause()和onStop()的时候停止加载?),然后继续想,可以加载数据很大的图,可以加载GIF,提供了流式的接口(那个怎么叫,可以一直点下去的),能够流畅的滑动(所以在滑动的时候停止加载?)
而我偏偏回答了个那什么。。。WTF?
然后问我不用框架自己加载图片。
突然脑子空白了。
框架用傻了?把图片下载下来,加载到内存,加载到ImageView想不到?(ImageView可以直接加载文件路径。。。么?)
又是一板砖。
内心充满了绝望。
然后。。。恩,我记不清问题的顺序了,就先说还有一个没回答上的问题。
他问我网络用的什么框架。
我说Retrofit+OkHttp。
接着问这个好用么。
我他么又是一板砖,说学的时候就用OkHttp,没对比
后来回去的时候想到这个问题,也学着Glide想着怎么用。恩@POST,@GET,这不是有个注解么;然后API的接口类,Observable,Retrofit 2.0不是支持RxJava的Observable接口了么;然后想到Retrofit的初始化,可以自己设置Http Client,可以设置数据转换器
说实话这三个问题的回答没有把我直接赶出去我觉得已经够不错了。这中间有个问题,Handler,Looper,MessageQueue,Message这个问题,因为看过部分源码,所以我回答的看的出他还挺满意的
好像还有一个没有回答出的问题。。。别打我,这个我真不知道。
他问自定义ViewGroup要重写哪些方法。
我说onLayout()。
他说onMeasure()不用么。
一定要重写onMeasure()么,虽然有重写过View的onDraw(),但是自定义ViewGroup确实没有接触过,所以也只是猜的。
我之前笔试不是有一题忘了写么,他就问我那个问题,Android的数据存储方式。
我说,SQLite,SharedPreference,文件
他点了点头,不晓得是不太满意还是在想下一个问题。
所以有哪里不对么,还是有什么漏下了?
最后两个我记得的问题。
一个是提到笔试题中的Intent能传哪些类型的数据,说我写了很多int,float,long之类的,能不能概括一下。
我说都是基本数据类型。
然后他给我补充,基本数据类型,基本数据类型的数组,还有两种可序列化对象和Bundle
另外一个是问我有哪几种引用。
我说强引用,软引用,弱引用,虚引用。
他说软引用和弱引用有什么区别。
我说软引用,内存不够时,会先回收这部分内存;弱引用,如果只有弱引用,那在下次GC的时候就会被回收,不管内存够不够。
接着他补充说,在java中确实是这样,但是Android在3.0还是几的时候,已经把软引用用弱引用来实现了,就是软引用和弱引用是一样的,因为软引用不可控
后面还提了两句LruCache
差不多就是这样了,面试官态度也很好,所以确实是自己发挥的不够好。
其实这次面试,让我有点爱上面试的感觉。在面试官的技术比你NB的情况下,是可以学到很多细节的东西的,因为面试官会对你的回答做补充或纠正,每次面试都是一次和大牛讨教的机会
晚上还有开题报告要改,嘿呀,好气呀
网友评论