您的位置:首页 > 移动开发 > Android开发

【internship life】小米android面经

2017-09-06 17:04 155 查看
2017/7/10日入职,到现在,在小米实习了将近两个月,这两个月总体来说还是挺愉快的,导师特别负责任,教给我很多东西,比起在学校自己学习,在这里实习收获很多。小组的成员也都对我好好,也体验了五彩城附近几乎所有的好吃的,哈哈哈哈哈哈哈,感觉自己月底回学校都可能无法适应。前几天提出能不能转正,这两天开始面试,把面试的问题总结下来。感觉这个面试比较注重应用,好多我都没有接触到,也和实习的小组的项目有点联系。最后,希望自己好运,可以转正。

一面(不按顺序,记得的就这么多了)

jpg、png、webp 区别和转换

有损压缩和无损压缩

​ 有损(不可逆,损失部分图片的信息,按照一定的算法将临近的像素点进行合并)

索引色和直接色

​ 索引:256种,用一个字节的数字来索引一种颜色。

​ 直接:四个数字表示,红绿蓝以及透明度。

点阵图和矢量图

​ 点阵图:位图,像素图。缩放会失真

​ 矢量图:也叫向量图。缩放不失真。并不记录画面上每一点的信息,而是记录了元素形状及颜色的算法,当打开的时候,软件对图像对应的函数进行计算,将运算结果显示出来。

BMP:

​ 是无损的、及支持索引色也支持直接色的点阵图。较大。

jpg:

​ 有损的采用直接色的点阵图。

png-8

​ 无损的,使用索引色的点阵图。具有更小的体积,支持透明度的调节。

png-24

​ 无损的,使用直接色的点阵图。体积较大,支持透明度的调节。

webp

​ 支持有损和无损、使用直接色的点阵图。体积更小,支持透明度的调节。

在无损压缩的情况下,相同质量的WebP图片,文件大小要比PNG小26%;

在有损压缩的情况下,具有相同图片精度的WebP图片,文件大小要比JPEG小25%~34%;

WebP图片格式支持图片透明度,一个无损压缩的WebP图片,如果要支持透明度只需要22%的格外文件大小。

sharedpreferences 的 apply/commit 方法区别? ANR

apply()
没有返回值而
commit()
返回
boolean
表明修改是否提交成功。

apply()
是将修改数据院子操作提交到内存,而后异步真正提交到硬盘,而多个并发的提交
commit()
的时候,他们会等待正在处理的
commit()
保存到磁盘后再操作,从而降低了效率。apply()效率高一些。

apply()
方法不会提示任何失败的信息。

由于在一个进程中,sharedpreferences时单示例,一半不会出现并发冲突,如果对提交的结果不关系的话,可以使用
apply()
,如果需要确保提交成功而且有后续操作的话,还是需要使用
commit()
的。

git merge / git cherry-pick提交到一个分支之后,提交到另一个分支

A ———> B (将A分支merge到B分支)

git checkout A

git pull

git checkout B

git merge A

(提交到一个分支之后,提交到另一个分支)

git checkout 另一个分支

git cherry-pick

打包流程、优化(减小包大小)、lint、混淆原因

listview/recyclerview 显示不同样式的item

ListView:重写
getItemViewType()
getViewTypeCount()
getView()
的时候,根据类型加载。

RecyclerView:重写
onCreateViewHolder()
onBindViewHolder()
getItemViewType()
。根据类型自定义viewholder。

dex 怎么能让方法不被65535限制

Activity、DecorView、Window

自定义view混淆后,构造方法会少吗

自定义view默认不会被混淆

三个构造方法

​ public View (Context context)是在java代码创建视图的时候被调用,如 果是从xml填充的视图,就不会调用这个

​ public View (Context context, AttributeSet attrs)这个是在xml创建但是没有指定style的时候被调用

​ public View (Context context, AttributeSet attrs, int defStyle)给View提供一个基本的style,如果我们没有对View设置某些属性,就使用这个style中的属性

EventBus和handler有什么区别

EventBus注册两次有什么后果

注册一般是在
onCreate
onStart
里注册,尽量不要在
onResume
,可能出现多次注册的情况。

EventBusException: Subscriber class already registered to event class

可以先判断:

if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}


取消注册要写到
onDestroy
,不要写到
onStop
里。

不要盲目相信官方文档,官方文档写的是在
onStart()
onStop()
里面注册和取消注册。但是实际使用中,Activity的这两个生命周期可能会因为各种跳转而执行多次,所以不太适合做这样的事情。

内存泄漏分析方式

MAT、android Monitor等工具

anr处理

滑动冲突(两种,父子)

不同应用的contentprovider的authority可以一样吗 (不可以)

给一个界面,让写xml

二面

聊人生,为什么学android

android7.0新特性,权限

mvc/mvp

recycler/listview区别、优化 viewholder是什么

一个viewholder描述一个条目视图和元数据对应在recyclerview的地方。

实习期间都做了什么,有什么感受,有什么收获

对公司有什么建议、对研发有什么建议、对研发方式有什么建议

说说测试给你提的bug,以及解决方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息