当前位置: 首页 > 面试经验 >

哈啰24校招 客户端一面

优质
小牛编辑
76浏览
2023-09-24

哈啰24校招 客户端一面

面试的面试官比较年轻,问的东西感觉都挺广的,而且不怎么爱问八股,所以面完感觉心里面也没谱,不确定是否有把握。所以面对一些不太会的问题,回答的时候就比较放飞自我了。

面试内容:

  1. 询问了在上家实习过程中与硬件相关的事情
  2. 刚刚提到JNI,那你理解JNI在Android开发里面的作用是什么?
  3. 访问低级系统资源:有些系统级的功能,Java API可能无法提供,或者提供的接口不够灵活。通过JNI,可以直接使用C/C++代码来访问这些资源,如直接操作硬件、调用系统底层API等。
  4. 丰富功能:对于一些计算密集型的操作,如图像处理、视频编解码、物理模拟等,使用C/C++编写的本地代码通常比Java代码更快,通过JNI可以方便调用。
  5. JNI方法的注册主要有哪些?
  6. 静态注册:根据函数名来建立 java 方法与 JNI 函数的一一对应关系,Java+包名+类名+方法名(native方法)
  7. 用javah 和javac命令生成包含native方法的.h头文件。
  8. 查找起来效率比较低
  9. Java方面改了方法名,C/C++也需要改
  10. 动态注册:JNI 允许我们提供一个函数映射表,注册给 JVM,这样 JVM 就可以用函数映射表来调用相应的函数, 而不必通过函数名来查找相关函数,流程更加清晰可控,效率更高.。
  11. 会用到JNI_OnLoad函数,后面会走到RegisterNatives(clazz, gMethods, numMethods),其中 JNINativeMethod 表示的是native方法与Java方法的映射关系。
  12. 静态链接库和动态链接库的区别
  13. 静态链接库:静态链接是在编译时将库中的代码直接嵌入到目标程序中,形成一个独立的可执行文件
  14. 动态链接库:动态链接是在编译时不将库的代码嵌入到目标程序中,而是在运行时从动态链接库中加载这些代码
  15. 使用livedata的缺点:
  16. LiveData只能在主线程转换更新数据
  17. postValue也是需要切换到到主线程的,当我们想要更新LiveData对象时,我们会经常更改线程(工作线程→主线程),如果在修改LiveData后又要切换回到工作线程那就更麻烦了,同时postValue可能会有丢数据的问题,在一段时间内发送数据的速度 > 接受数据的速度,LiveData 无法正确的处理这些请求。
  18. 只在 Observer 至少处于 STARTED 状态时才能收到事件通知。
  19. Activity 只有在 onStart 后和 onStop 前才能收到事件通知
  20. LiveData没有内建的区分数据是否已被处理的机制,如果需要实现这样的逻辑,则需要额外的封装
  21. livedata发的数据是黏性的吗?
  22. 是粘性的,假设存在一个静态的 LiveData 变量,且已经包含了数据,对其进行监听的 Activity 都会收到其当前值的回调通知,即收到了黏性消息。
  23. 当一个Activity或Fragment因为配置改变(如屏幕旋转)或其他原因被销毁并重新创建时,新的Activity或Fragment实例会立即接收到最新的数据,从而可以正确地恢复UI状态。
  24. activity绑定一个livedata,activity在后台,还能收到没?
  25. LiveData遵循Android的生命周期,只有当Activity(或其他LifecycleOwner,如Fragment)处于活跃状态(即在onStart()onResume()之间)时,LiveData才会向其发送更新
  26. LivaData实现后台也能收到消息?
  27. 使用LiveData.observeForever()方法,而不是LiveData.observe()方法。observeForever()方法会创建一个不受生命周期限制的观察者
  28. LiveData实现观察生命周期的原理是什么?
  29. 内部会创建生命周期感知的观察者包装类LifecycleBoundObserver(把注册进来的observer包装成 一个具有生命周边边界的观察者)
  30. 利用Lifecycle,把观察者注册到LifecycleBoundObserver进去,就能监听到宿主生命周期状态的变化
  31. 它能监听宿主被销毁的事件,从而主动的把自己反注册,避免内存泄漏
  32. 此时观察者是否处于活跃状态就等于宿主是否可见, 监听宿主的生命周期,并且宿主不可见时不分发任何数据
  33. 说到阿里的Arouter框架,它解决的场景有哪些?
  34. 解决集中的URL管理:
  35. 多人协同开发的时候,大家都去AndroidManifest.xml文件中,定义各种<Intent-filter>,然后使用隐式Intent实现跳转。最终发现AndroidManifest.xml中充斥着各种Schame、各种Path,需要经常解决Path冲突的问题
  36. 自定义拦截器,自定义拦截顺序,可以对路由进行拦截,比如登陆判断,和埋点处理
  37. 支持直接解析标准Url进行跳转,并自动注入参数到目标页面中
  38. 工程上,不同的modle怎么加载一个成app
  39. 在主应用模块的build.gradle文件中声明对这两个库模块的依赖
  40. OKhttp空闲链接怎么清除掉的
  41. OkHttp的连接池会保持连接最多5分钟的空闲时间,如果连接在这段时间内没有被复用,那么这个连接就会被关闭并从连接池中移除。这个空闲时间是可以配置的

反问:询问业务和技术方向

#24届软开秋招面试经验大赏##Android面经##哈啰##客户端面经#
 类似资料: