阿里一面总结

阿里面试总结

1 自我介绍

听了回放感觉挺失败的,各位还是好好准备一个吧

2 聊一聊项目

简单介绍了刚做完了的(印象最深,笑)

3 项目里还用过什么框架吗

没有,有就直接开始问原理源码了qaq(根据后面答原理推测)

4 为什么地图选了高德api

我哪知道啊qaq

5为什么项目里用户登录用了cookie,cookie有时间限制怎么办?

从服务端和客户端的角度答了答

6 如果突然用户登录状态失效,怎么突然回退掉所有页面跳到登录页?

感觉是在问启动模式,答了一下用singletask,然后开始深挖

fragment如何回退所有页面(只是用过fragment是吧,被鄙视了qaq),onsaveinstance的场景(只知道没用过)

什么才能保障全部回退掉(回答的启动模式,gg)

知识点:activity四种启动模式(要会示例)

activity的回退栈

四种模式

standard

每次启动都会放入一个实例,每个所在的栈是其存在实例的任务栈

singletop

栈顶复用模式,新activity如果位于栈顶,则其此activity不会重建,回调onnewIntent,如果不在栈顶则仍会被重建

singletask

只要在栈里存在,则不会新建,如果其启动栈并不存在,则新建并压入

注 singletask自带清栈效果,把他前面的全部清出去

singleinstance

具有此模式的activity会被单独放进任务栈

这里个人感觉把主页面作为singletask然后跳转是可以的(瞎答)

标准答案应该是用flag的activity标志位

用FLAG_ACTIVITY_CLEAR_TOP

7 了解过okhttp3的源码吗?

没有QAQ

8 既然用了网络请求的话,那tcp,udp区别是什么,说一下吧

常规题

9 tcp的三次握手四次挥手说一下吧

常规题

10 activity的生命周期说一下吧

这里还是要记牢各种场景的,被深问又gg了

知识点

回退前台然后再回来是什么

onpause onstop onstart onresume

按back回退

onpause onstop ondestory

被回收再打开

oncreate onstart onresume

异常情况下的

被杀死重建

onsaveinstancestate

onrestoreinstancestate

资源不足情况下

旋转屏幕如何保障activity不重建

设置configchanges为orientation

11 遇到过oom或者anr吗

oom最简单的就是递归爆栈居然没答出来,哭惹

知识点

加载大图,项目中有可能会碰到加载高清图片或是长图(微博那种),在低端机上很容易直接OOM,所以要先对bitmap进行压缩再放入imageView中显示。
Bitmap使用完没有释放,bitmap在使用完后要recycle后置null。
文件流使用后没有关闭,文件流用后要close掉。
使用RXJAVA的时候,在observable中调完onNext或者onError,结束的时候没有调用onComplete。如果没有调用onComplete,那么会认为你没有完成发送,这个线程会一直wait。特别是在使用RXJAVA的io线程池时,这个线程池没有上线,多个线程的上下文会吃掉你的所有内存。
滥用Activity的context,比如一个单例中需要在创建的时候传入一个context的,而你传入的是Activity的context,当你的Activity想要销毁的时候,这个单例却一直持有这个Activity的context引用,造成Activity无法被GC回收。

anr 主线程调用耗时操作

12 用过service吗

介绍了一下mediacompact

13 handler提过是吧,知道内部实现吗

大概答了一下消息队列,looper什么的

handler内部的looper在主线程和子线程分别是谁的(开始深挖qaq)

问深了gg

14 recycleview同时有多个item怎么办

(没答出来)

重写getItemViewType()

参考这篇

https://www.jianshu.com/p/66702b7a6881

15 项目里有react native,为什么要用

课设qaq

16 知道原理吗

大概讲了一下

映射表什么的

参考这个吧https://www.jianshu.com/p/3bd1eea3fd6a

了解过其他这类框架吗

用过吗,知道原理吗

不知道,gg

问点java吧

17 进程和线程的概念

学过操作系统的应该都会

18 提到了进程,知道怎么进程通信吗

知道点,提了一下,主动提没用过,gg

19 解决并发问题的线程有什么办法

答了锁,生产者消费者,gg

参考这篇https://blog.csdn.net/weixin_40459875/article/details/80290875

20 Android最多有多少线程

感觉是再问线程池?其实只有硬件限制吧

21 说一下gc吧

大概答了一下,太紧张了,说了一下居然反问还要说什么

22 类的加载机制了解过吗

只知道双亲委派

优势是啥,不知道

知识点

当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。

类加载器的类别

BootstrapClassLoader(启动类加载器)

c++编写,加载java核心库 java.*,构造ExtClassLoaderAppClassLoader。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作

ExtClassLoader (标准扩展类加载器)

java编写,加载扩展库,如classpath中的jrejavax.*或者
java.ext.dir 指定位置中的类,开发者可以直接使用标准扩展类加载器。

AppClassLoader(系统类加载器)

java`编写,加载程序所在的目录,如`user.dir`所在的位置的`class

CustomClassLoader(用户自定义类加载器)

java编写,用户自定义的类加载器,可加载指定路径的class文件

双亲委派机制的作用

1、防止重复加载同一个.class。通过委托去向上面问一问,加载过了,就不用再加载一遍。保证数据安全。
2、保证核心.class不能被篡改。通过委托方式,不会去篡改核心.clas,即使篡改也不会去加载,即使加载也不会是同一个.class对象了。不同的加载器加载同一个.class也不是同一个Class对象。这样保证了Class执行安全。

23 强引用,软引用,弱引用,虚引用,区别是什么

常规题

24 学新语言,新知识的方法是什么

敏捷开发(笑)

25 有什么兴趣爱好吗

模拟飞行,尬了几秒2333

你有什么想问我的

登录的cookie应该咋搞,感觉并没有get到我提的点2333

调用文件管理器返回闪退(很蠢的问题,自己的逻辑写错了2333)

我应该多学习点Android还是java

多补点Android吧,常识性问题都不知道qaq

大概总结一下就是

第一次面试,太紧张了,很多会的都卡住了

面试官尽力了,我太菜了,凉凉

还是要深入学习到源码层次的

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页