疫情被裁?不要愁!给你2020安卓开发精选面试题及答案!

近日,一位在家的某互联网员工匿名发帖称:**疫情期间,通知被裁员?           **

疫情被裁?不要愁!给你2020安卓开发精选面试题及答案!_第1张图片

真的是过年没得剩,年后没得挣!

受疫情影响,不少企业已延长假期或开启了远程办公,大家终于实现了躺着挣钱的梦想了;但这种舒适的背后,更多的却是让人忧愁。

现国内很多行业已遭受一定的经济冲击,今后绝大部分的企业都将面临资金问题,不出意外,未来是残酷的。

嗅觉敏锐的人已开始一边放着假,一边启动着plan B的计划(找下家),通过线上学习提高自己的竞争力,把握金三银四的面试机会!

接下来我们针对Android高级展开的完整面试题

#1、请解释下在单线程模型中Message,Handler,Message Queue,Looper之间的关系。

拿主线程来说,主线程启动时会调用Looper.prepare()方法,会初始化一个Looper,放入Threadlocal中,接着调用Looper.loop()不断遍历Message Queue,

Handler的创建依赖与当前线程中的Looper,如果当前线程没有Looper则必须调用Looper.prepare()。Handler , sendMessage到MessageQueue,Looper不断

从MessageQueue中取出消息,回调handleMessage方法。

2、如果有个100M大的文件,需要上传至服务器中,而服务器form表单最大只能上传2M,可以用什么方法。

这个问题不是很明确我觉得,首先来说使用http协议上传数据,特别在android下,跟form没什么关系。传统的在web中,在form中写文件上传,其实浏览器所做

的就是将我们的数据进行解析组拼成字符串,以流的方式发送到服务器,且上传文件用的都是POST方式,POST方式对大小没什么限制。

回到题目,可以说假设每次真的只能上传2M,那么可能我们只能把文件截断,然后分别上传了。

3、内存溢出和内存泄漏有什么区别?何时会产生内存泄漏?内存优化有哪些方法?

内存溢出通俗理解就是软件(应用)运行需要的内存,超出了它可用的最大内存。

内存泄漏就是我们对某一内存空间的使用,使用完成后没有释放。

内存优化:Android中容易内存溢出的部分,就是图片的加载,我们可以使用图片的压缩加上使用LruCache缓存的目的来控制图片所能够使用的内存。

还有对于比较耗资源的对象及时的关闭,例如Database Conn , 各种传感器 , Service 等等。

4、AsyncTask使用在哪些场景?它的缺陷是什么?如何解决?

AsyncTask 运用的场景就是我们需要进行一些耗时的操作,耗时操作完成后更新主线程,或者在操作过程中对主线程的UI进行更新。

缺陷:AsyncTask中维护着一个长度为128的线程池,同时可以执行5个工作线程,还有一个缓冲队列,当线程池中已有128个线程,缓冲队列已满时,如果

此时向线程提交任务,将会抛出RejectedExecutionException。

解决:由一个控制线程来处理AsyncTask的调用判断线程池是否满了,如果满了则线程睡眠否则请求AsyncTask继续处理。

5、Activity用SharedPreferences保存数据,大小有木有限制?

这个真心查不到。。。

6、Activity间通过Intent传递数据大小有没有限制?

貌似是40K。

7、 启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么区别?

是因为启动程序(主界面也是一个app),发现了在这个程序中存在一个设置为的activity,

所以这个launcher会把icon提出来,放在主界面上。当用户点击icon的时候,发出一个Intent:

Intent intent = mActivity.getPackageManager().getLaunchIntentForPackage(packageName);

mActivity.startActivity(intent);

跳过去可以跳到任意允许的页面,如一个程序可以下载,那么真正下载的页面可能不是首页(也有可能是首页),这时还是构造一个Intent,startActivity.

这个intent中的action可能有多种view,download都有可能。系统会根据第三方程序向系统注册的功能,为你的Intent选择可以打开的程序或者页面。所以唯一的一点

不同的是从icon的点击启动的intent的action是相对单一的,从程序中跳转或者启动可能样式更多一些。本质是相同的。

8、程序之间的亲和性的理解。

1、默认情况下一个应用的所有Activity都是具有相同的affinity,都是从application中继承,application的affinity默认就是manifest的包名。

2、affinity对Activity来说,就像是身份证一样,可以告诉所在的Task,自己属于其中的一员。

3、应用场合:

a:根据affinity重新为Activity选择合适的宿主Task;

b:与allowTaskReparenting属性配合;

c:启动Activity使用Intent设置了FLAG_ACTIVITY_NEW_TASK标记。

9、同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?

可以放在不同的Task中。需要为不同的activity设置不同的affinity属性,启动activity的Intent需要包含FLAG_ACTIVITY_NEW_TASK标记。

10、横竖屏切换时候Activity的生命周期。

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

2、设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

11、AIDL的全称是什么?如何工作?

12、dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

Dvm的进程是dalivk虚拟机进程,每个android程序都运行在自己的进程里面,每个android程序系统都会给他分配一个单独的liunx uid(user id),

每个dvm都是linux里面的一个进程.所以说这两个进程是一个进程.

最后

暂且分享这些,在此我还有一份安卓开发面试指南,1612页的PDF文档,25个模块

  • Java基础
  • Java并发
  • Java虚拟机
  • Android基础
  • Android进阶
  • 开源框架
  • 线性表
  • 栈和队
  • 散列查找
  • 排序
  • 海量数据处理
  • 剑指offer
  • LeetCode
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • TCP/IP
  • HTTP
  • HTTPS
  • 操作系统
  • 进程与线程
  • 内存管理
  • SQL语句

现在大家学习的时间比较多,刚好可以来学习准备

免费领取方式:点赞+评论,关注我,私信【面试指南】获取,满满的都是干货,学习完可以帮助大家心里有个底,好好准备,疫后去升职加薪!

你可能感兴趣的:(Android,面试)