android八股文

  • List《String》中插入Int?

泛型再编译时期确认,利用反射再运行时期可以插入

  • 点击App图标,应用的启动流程
  • 线程池队列满了的操作?

如果线程数量没有达到线程池设置的最大值,创建一个非核心线程执行任务,否则抛出异常来拒绝。

  • 面向对象的三大基本特征

封装、继承、多态。

  • 线程池构造函数的含义

corePoolSize线程池中的核心线程数,核心线程一直存活在线程池中,即便他们在线程池中处于闲置状态。 maximumPoolSize线程池中所容纳的最大线程数,如果活动的线程达到这个数值以后,后续的新任务将会被阻塞。keepAliveTime非核心线程闲置时的超时时长,对于非核心线程,闲置时间超过这个时间,非核心线程就会被回收。unit用于指定keepAliveTime参数的时间单位。天(TimeUnit.DAYS),小时(TimeUnit.HOURS),分钟(TimeUnit.MINUTES),毫秒(TimeUnit.MILLISECONDS),微秒(TimeUnit.MICROSECONDS, 千分之一毫秒)和毫微秒(TimeUnit.NANOSECONDS, 千分之一微秒);workQueue线程池中保存等待执行的任务的阻塞队列。我们还能够通过实现BlockingQueue接口来自定义我们所需要的阻塞队列。threadFactory线程工厂,为线程池提供新线程的创建。ThreadFactory是一个接口,里面只有一个newThread方法。 默认为DefaultThreadFactory类。handler是RejectedExecutionHandler对象,而RejectedExecutionHandler是一个接口,里面只有一个rejectedExecution方法。

  • 泛型在编译时期有用吗

在运行时期泛型就被擦除了,可以用反射在运行时期加入不同类型。

  • 注解

内建注解,自定义注解,元Annotation

  • Volatile

对于可见性,Java提供了volatile关键字来保证可见性。
当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。
而普通的共享变量不能保证可见性,因为普通共享变量被修改之后,什么时候被写入主存是不确定的,当其他线程去读取时,此时内存中可能还是原来的旧值,因此无法保证可见性。

  • APK编译流程

1:打包资源文件,生成R.java文件
2:处理aidl文件,生成相应的java文件(如果项目中没有定义aidl则这一步跳过)
3:编译工程源码,生成响应的class文件
4:转换所有的class文件生成class.dex文件
5:打包生成apk文件
6:对apk文件进行签名
7:对签名后的apk文件进行对齐处理

  • APK 签名类型

V1签名:
来自JDK(jarsigner), 对zip压缩包的每个文件进行验证, 不对zip本身校验,所以签名后还能对压缩包修改(移动/重新压缩文件)
对V1签名的apk/jar解压,在META-INF存放签名文件(MANIFEST.MF, CERT.SF, CERT.RSA),
其中MANIFEST.MF文件保存所有文件的SHA1指纹(除了META-INF文件), 由此可知: V1签名是对压缩包中单个文件签名验证
V2签名:
来自Google(apksigner), 对zip压缩包的整个文件验证, 签名后不能修改压缩包(包括zipalign),
对V2签名的apk解压,没有发现签名文件,重新压缩后V2签名就失效, 由此可知: V2签名是对整个APK签名验证
V2签名优点很明显:
签名更安全(不能修改压缩包)
签名验证时间更短(不需要解压验证),因而安装速度加快
注意: apksigner工具默认同时使用V1和V2签名,以兼容Android 7.0以下版本

  • Fragment传参问题

不用构造方法而,而是用setArgument() 和newInstance(),newInstace内部就是调用的setArgument,用这种方式创建的Fragment会把参数保存在bundle中,当横竖屏切换时,fragment会重建,参数也不会消失。

    • 性能优化

https://lrh1993.gitbooks.io/android_interview_guide/content/android/advance/performance-optimization.html

  • Activity四种启动模式

标准模式(standard)
栈顶复用模式(singleTop)
栈内复用模式(singleTask)
单例模式(singleInstance)

  • Activity的三种运行状态

Resumed(活动状态)Paused(暂停状态)Stopped(停止状态)

  • 进程间通信方式

Intent,contentProvider,sharedPreference,Messenger,AIDL,Socket

  • binder
  • App启动流程

Launcher进程向system_server进程发送startActivity请求,zygote创建子进程用作app的进程,app进程向system_server发送attachApplication请求,system_server再向app进程发送scheduleLaunchActivity请求,app进程收到请求通过handler向主线程发送LAUNCH_ACTIVITY消息,app主线程收到message消息后通过发射机制创建activity,在回调oncreate等方法,ui渲染后界面就显示出来。

  • Binder
  • HTTPS为什么安全
  • 并发和并行
  • http(s)的实现原理,请求报文格式,相应格式
  • 多线程,kotlin如何实现多线程,多线程加锁原理
  • tcp的三次握手
  • tcp/ip层,传输层的作用,http,https在那一层作用是什么
  • 算法

你可能感兴趣的:(android)