面试试试试试试题-答

愿我们都记忆力惊人又会忽悠人。

1. 数据结构

1.1 HashMap、ArrayList、LinkedList、堆、栈

1.1.1 ArrayList与LinkedList的区别
  • ArrayList是动态数组,头部插入慢,访问通过索引访问非常快,仅存储数据和数组容量因此内存占用小

  • LinkedList是双向链表,头部插入快,访问需要从头到尾遍历慢,每个节点需要存储前后节点的指针因此内存开销较大

1.1.2 堆、栈是什么
1.1.3 怎么如果有2个数组的数据,怎么给它变成栈
1.1.4 选择

一般是用ArrayList,除了一些特殊常见外

  • 频繁按索引随机访问元素(读多写少),用 ArrayList

  • 需要遍历列表元素,需要频繁在列表头部或中间进行插入和删除操作(写操作多),需要实现栈(Stack)、队列(Queue)或双端队列(Deque),不确定操作类型,但不会进行大量的随机访问,选LinkedList

2. 语言

2.1. JAVA

2.1.1. JVM
2.1.2. 介绍一下java内存模型、gc生命周期、对双亲委托机制有什么理解

双亲委托机制是指:当一个类加载器收到类加载请求时,它首先不会自己去尝试加载这个类,而是把请求委托给父类加载器去完成。父类处理不了才交给子类处理,保证了类不会重复加载,核心API不会被改变(因为最终会走到父类去加载),每个加载器都有明确的加载范围,形成了清晰的层次结构。跟安卓事件分发有点点像,都用到了责任链模式

2.2. Kotlin

2.2.1. 怎么理解空安全检测

3. 多线程

3.1. 使用方式、状态切换、安卓主线程与子线程切换handler、同步/异步(aync、await)/并发编程、ThreadLocal、LooperThread
3.2. 异步,银行家等待资源拿完了又怎么办

任务发起后,不必等待其完成,可以立即返回去做别的事情。任务完成后,通过回调、Future/Promise 等机制通知发起者。

4. 内存

4.1. 弱引用、每次GC弱引用都会被回收吗?no、虚引用、弱引用、软引用的区别

4.2. 内存泄漏

4.2.1. 表现、原理、怎么检测和分析、怎么避免、怎么线上检测和分析

5. 安卓

5.1. 进程启动流程

5.2. activity和fragment的区别

5.3. 事件分发原理

5.3.1. 手指触摸屏幕开始会经历什么、具体分发策略、怎么解决事件冲突、ACTION_CANCEL在什么情况下会花生、nestedRecyclerView、ViewPager怎么解决的内部view事件冲突
  • 传递过程:物理触摸 -> IMS(InputManagerService) -> WMS(WindowManagerService) -> App Process -> ViewRootImpl -> DecorView -> Activity,然后触摸事件开始分发。

  • 具体分发策略:由Activity的dispatchTouchEvent向下分发。事件到达ViewGroup后,会先调用onInterceptTouchEvent判断是否拦截。如果不拦截,就继续分发给子View。子View的dispatchTouchEvent会调用onTouchEvent来处理事件。如果某一层的onTouchEvent返回true消费了事件,传递就终止。如果所有子View都不消费,事件会逐级回传给父容器和Activity的onTouchEvent。并且,一旦某个View消费了ACTION_DOWN,后续的MOVE和UP事件会直接分发给它。核心3个方法:dispatchTouchEvent(事件分发)、onInterceptTouchEvent(事件拦截)onTouchEvent(事件处理),true表示事件消费或者拦截,false表示否

  • 滑动冲突解法:(外层解决法/内层解决法)requestparentdisallow、如果业务过于复杂可使用原生已经处理好滑动冲突的组件,比如recyclerView、viewPager

  • ACTION_CANCEL:当父视图的 onInterceptTouchEvent() 方法从返回 false 变为返回 true 时,子视图会收到 ACTION_CANCEL。触摸边界超出控件范围、系统事件打断(压后台/锁屏/来电/弹出系统弹窗/)、窗口失去焦点、滚动容器开始滚动

  • nestedRecyclerView:

  • viewPager

其他拦截场景:比如horizaly、requestparentdisallow等非常规场景,

常见组件:recyclerview、nestedRecyclerView、viewpager1、viewpager2

与之关联的还有onClick、Gesture、手势

5.4. Handler

5.4.1 消息队列怎么work的
5.4.2. 一个APP只有一个MessageQueue吗

5.5. 自定义view

继承自View或ViewGroup(...Layout)、style、attr、三个构造函数

onMeasure(测量)、onLayout(布局)、OnDraw(绘制)

基础(找到view、位移、透明度、缩放)、动画、弹性事件、贝塞尔曲线、canvas、事件分发(点击/触摸/fling)、屏幕宽高、跟手交互、3D、画面分屏、模糊效果

偏展示的自定义view(如歌词,需要根据解析到的lrc文件来展示信息,如果需要根据声音来展示高亮需要框架返回源数据)、偏交互的自定义view(如自定义自适应文本indicator)、折叠屏适配、其他都是根据业务来,一般需要与业务联动

5.6. IPC

5.6.1. 常见IPC方式及aidl原理

bundle(四大组件)、aidl(代理模式)、binder池、Messenger、文件共享、contentprovider、socket、共享内存

5.7. SQLite

5.7.1. 使用步骤

6. 没听过的

Retrofit、hook、钩子

7. 多媒体&音视频

7.1. 音频长短焦点

7.1.1. 音频焦点策略,丢焦点和恢复时机,优先级

7.2. MediaPlayer

7.2.1. 创建流程、原理
7.2.2. 为什么一个MediaPlayer只能设置一个surface

7.3. ijkplayer

7.4. MediaCodec

7.4.1可以配置的参数

7.5. camera

使用和原理

7.6. ffmpeg

7.6.1. 使用流程调了哪些接口
7.6.2. 使用中有什么缺点

8. 设计

8.1. 面向对象编程

8.1.1 封装、继承、抽象
8.1.2. 优点、缺点、不使用它有什么不好的地方、继承有什么缺点、怎么解决,类膨胀怎么解决

继承容易嵌套太深,类膨胀,容易被子类篡改,复杂情况下不容易看出程序走向造成失败。只能继承一个父类,没有很多功能

使用泛型和设计模式针对有缺点的业务场景优化,有的时候可以使用接口代替

8.2. MVC/MVVM/MVP

8.2.1. 有什么区别
8.2.2. 只是影响UI刷新吗?hhhhhh

8.3. 设计模式

8.3.1. 讲一下常用的设计模式和应用场景

单例、构造、观察者、代理、外观、解释器、责任链、工厂、适配器

8.4. 低耦合

8.4.1. 什么时候需要解耦、解耦场景、举措

when:一个项目有超级多的功能时,多人协同开发,需要组件化模块化来解耦,壳工程、独立编译运行

why:

  • 避免循环引用

  • 抽象出通用公共组件库避免重复造轮子

  • 独立出某一个功能、服务给其他多个模块使用

how:组件化、模块化、观察者模式、广播(pass性能太差报用)

9. 性能

9.1 平时关注的性能指标有哪些

启动耗时、卡顿掉帧(页面跳转/动画/音视频同步)、点击事件响应

内存大小、包体积

app存活时长(煲机)

10. 跨端

10.1. 公司跨端借鉴的语法和开源的语法的区别,编译生成的产物有什么

只支持少量标签、for循环只支持嵌套一层,不然性能不好、不支持webkit相关css属性

.js .json,出问题可以在构建产物进行排查

11. 技术方案相关

11.1. 怎么在OS桌面上展示一个视频播放小窗

service可后台播放视频,参考b站,缺点:无法播放页面和小窗口同时播放,因为MediaPlayer只能设置一个surface

11.2. 保活

双进程守护,一挂就再次马上拉起

service守护

还有一些在framework层做处理,没用过

11.3. 图片预览时怎么处理大图加载

11.4. 视频录制到一半把进程杀了,怎么拿到已经保存到本地的数据

传统视频录制需要在视频录制结束的时候手动封装成mp4,如果录制过程中打断录制,数据保存不下来会丢失。

解决方法:

1、使用一些流媒体技术,ts流,缺点:体积略大

2、录制缓存,定时刷新,缺点:消耗略大,如果时间间隔太长,中间时间端仍然可能会丢失

12. 其他

12.1 怎么做好一个软件,质量标准有哪些

13. 笔试题

13.1. 正则表达式

14. 项目

14.1. 挑一个参与感重或者有技术难点的项目讲讲,讲一下主要流程

排除太久的、排除没上线和刚上线的app、排除跨行的

做了什么事、功能流程、遇到什么事请、怎么解决、原理

相关推荐
前端布鲁伊5 小时前
再来聊聊,Vue3 项目中 Pinia 的替代方案
前端·面试
好学且牛逼的马6 小时前
【MyBatis-Plus | 常见问题与面试重点】
面试·mybatis
一只叫煤球的猫7 小时前
从 JDK1.2 到 JDK21:ThreadLocal的进化解决了什么问题
java·后端·面试
随风飘的云8 小时前
synchronized 的底层原理及优化机制
面试
绝无仅有8 小时前
面试日志elk之ES数据查询与数据同步
后端·面试·架构
绝无仅有9 小时前
大场面试之最终一致性与分布式锁
后端·面试·架构
踏浪无痕11 小时前
@Transactional做不到的5件事,我用这6种方法解决了
spring boot·后端·面试
yoke菜籽13 小时前
面试150——区间
面试·职场和发展
Java天梯之路13 小时前
上篇讲坑,这篇讲 “根”!Java 数据类型底层逻辑全解析
java·面试