具体代码请看:NDKPractice项目的opencv64
小的需求:优化下Bitmap加载图片的源码(严格控制下内存)
1. 苏宁体育面试题讲解(一面)
- HashMap 的实现,如何判断超出了原存储空间,超出了如何扩容,如果存入 key 相同,值如何存入。(之前手写过)
- 你所了解的设计模式,谈谈你对工厂设计模式的理解,单例设计模式如何避免内存泄露
- 事件分发机制
- 二叉树找最大
- Activity 的启动模式,几种模式具体的应用。
- 静态方法存储在哪儿,堆和栈的垃圾回收机制
面试考两点:1.基础牢不牢
2.能不能搞定目前的项目
2. NDK 学到什么程度
c/c++ 少不了,基础,进阶,linux内核,shell脚本,cmake语法
opencv,ffmpeg
android开发:c/c++工程师开发(精通),java 工程师(精通),native 和 java 层互通 NDK 开发(熟悉c/c++,熟悉android)
- 知道:有这么个东西,模糊
- 熟悉:知道这个东西,讲明白,项目中也能直接用上
- 精通:知道这个东西,讲明白,项目中也能直接用,知道原理(四种启动模式,怎么解析,怎么压栈弹栈,声明周期怎么调用)
读:第三方的源码,opencv,ffmpeg,openGL,android native.
写:那么多套路
部门:引擎部门(.so库,java的sdk)有专门的 c/c++ 工程师,android 应用层开发
3.如何封装 java 层 sdk 模型
假设我对一张图片做操作
- 掩膜操作
- 模糊操作
- 又来一个关于 filter2D 的操作
规则考虑周到
- 细节拆分
- 尽量不要改 native 层的代码,可以改 java 层的(
针对上面的需求可以把 filter2D 方法提到 java 层
) - 思考:时间空间复杂度
4.动手封装OpenCV的Mat.java 对象
filter2D -> Mat
Java层的Mat.java 对应 native 层的 Mat.cpp
Java层写 Mat.java -> Bitmap.java, Bitmap.java -> Mat.java
5.NDK异常处理需要注意的地方
在前面有篇博客讲过 NDK 中的异常处理
6.java和C++的回收机制
java的 GC 会调用 finalize
方法。
c 中需要自己回收