除了核心的coding skill,一些面试官常常问到的问题,准备一下,这里仅仅是拿我对某个公司的面试准备作例,回答的方向根据对公司的判断以及与员工的沟通得出。
新技术--学习经历,技术风向的理解,新特性
新行业--区块链,5G,flutter,kotlin
设计能力--性能优化、用户体验优化、兼容性设计、需求评估
细节把控--数据结构
职业价值观--职业规划,个人追求,对公司的期望
方法论--个人学习的方法、工作方法、业余所做的事情
深刻经历--处理过的难题
选择倾向--为什么选择这家公司,和之前offer的对比?
9、沟通能力
1、新技术--学习经历,技术风向的理解,新特性
技术风向的理解:新鲜血液开始纷纷涌向AI和区块链等技术,移动开发增量减少,存量厮杀,或者纷纷出海谋求新市场。产品质量和开发效率决定了能否继续生存下去。移动开发不再是风口,但是人们在移动设备上花的时间不会减少,各种新技术大部分也是由移动端作为载体发挥作用的。所以移动端不应该仅仅是APP开发,大部分新技术浪潮都能融入其中,大前端、开源库、IoT、音视频、边缘计算、VR/AR、区块链、AI等等。
移动开发者的未来更可能是跨终端,产品、运营、数据分析、后端,技多不压身。
为此,必然要选择一个未来有潜力的行业方向,即接触底层原理,也根据行业需求尽量多接触新技术。将新技术浪潮融入进移动端体系,即是大势所趋,也是自我成长必然要经历的。
技术新特性:
Android 10 新特性:
隐私和安全改善:限制应用在后台访问用户位置、限制后台启动activity、移除了联系人的亲密程度信息、扫描网络时需要精确位置权限;安全方面,引入新加密模式 Adiantum、默认启用 TLS 1.3
行为变更,限制非 SDK 接口
新功能和api,可折叠设备、增强API支持5G平台、通知中的智能回复——提供基于上下围的操作建议、启用手势导航(vivo早就有了)
Android P/9 新特性:
- 加入手势导航(非默认)、防沉迷管理机制、适配刘海屏、利用AI管理电量和亮度、通知能被再通知栏上就地回复,也能查看更多图片
Android O/8 新特性:
- 通知渠道改善,程序通知会按类别分类至不同的组(“渠道”),用户还可暂时延后某则通知;画中画模式;优化开机启动,后台服务限制;增加 TensorFlow Lite;智能文本选择;账号密码自动填充机制
Android N/7 新特性
- 多窗口模式、改进的Doze模式,只要息屏一段时间且未接电源,就会进入低功耗模式。
Jdk 5 特性
自动装箱拆箱
静态导入
枚举
可变参数(int... a )
泛型
for each 循环
注解
Jdk 6 特性
对脚本语言的支持
轻量级http server api
Jdk 7 特性
switch中可以用String
支持二进制数字
调用泛型类的构造方法时,可以省去泛型参数,编译器会自动判断。之前版本使用泛型类型时这样写 ArrayList<User> userList= new ArrayList<User>();,这个版本只需要这样写 ArrayList<User> userList= new ArrayList<>();
异常处理多个catch
Jdk 8 特性
Lambda表达式
多重注解
新的时间和日期 API
静态链接 JNI 程序库
Jdk 9 特性
- 集合工厂方法,通常,您希望在代码中创建一个集合(例如,List 或 Set ),并直接用一些元素填充它。 实例化集合,几个 “add” 调用,使得代码重复。 Java 9,添加了几种集合工厂方法:
Set<Integer> ints = Set.of(1,2,3);
List<String> strings = List.of("first","second");
HTTP/2 替代 HttpURLConnection
Java Shell 使用脚本写出简单的代码,省去建类的痛苦
Jdk 10 特性
var类型推断
统一的GC接口
Jdk 11 特性
在Lambda表达式中使用var
标准化的HTTP Client API
2、新行业--区块链,5G,flutter,kotlin
3、设计能力--性能优化、兼容性设计
https://www.jianshu.com/writer#/notebooks/39713378/notes/53109880/preview
兼容性设计:
版本兼容维度:api一般就是新增、修改、废弃,不用太担心突然间删除的问题;
代码中可能需要使用sdk运行时检查;
如果版本差异大,考虑使用兼容库
屏幕适配维度:
使用dp,或者svg图片,对需要拉伸的图片使用.9图
使用百分比布局或者weight属性
对于平板这样屏幕尺寸和比例和手机明显不同的,重新设计layout放在不同文件夹
其他维度:
app升级时候,考虑不同版本对接不同服务器,或者在服务器上实现兼容
尽量不使用非sdk接口
4、细节考量--数据结构
5、职业价值观--职业规划,个人追求,对公司的期望
选择一个有潜力行业,有潜力额公司发展。个人方便以Android为基础,精华业务能力,并不断拓展知识面。
对公司的期望就是行业和产品本身符合我的预期,比较年轻有活力,没有严格的层级制度大家都比较上进,环境不要差。
6、方法论--个人学习的方法、工作方法、业余所做的事情
看博客,看demo和官网,然后自己记笔记、敲代码学习。
一般早上起来列一下今天做的事情,早上和下午3/4点之后做核心的任务,过几天自己总结下事情的进度和需要改进的地方
业余我就约朋友,爬山,没事就泡一个咖啡店看书
7、深刻经历--处理过的难题
摩托车模式中,关于进程意外被杀,欢迎界面处理
框架代码在9.0中更新了,8.0中没更新,但是app代码在8.0和9.0是一样的,判断SDKversion、反射都不是长久之计,只能使用mk动态加载不同java文件实现
动画导致内存泄露
CTS测试问题,MTK框架代码下有那个call函数参数不符合Google规范
8、选择倾向--为什么选择这家公司,和之前offer的对比?
你们更好。
9、沟通能力
大公司和小公司沟通上的区别:大公司流程多,环节繁琐,但是规范严谨;小公司扁平化、沟通高效、但是突变比较多。
公司目前的架构就是app开发端、区块链设计、大数据后台、量化交易模型维护和市场运营。核心就是需要有一个整体性团队思维,做好自己分内工作,并坚持自己的原则。
1、定位自我位置——基于需求设计做好APP产品,流畅,减少因为技术问题导致的差错和运营损失,我们不像亚马逊那样可以乱玩
2、处理问题原则——重大的问题包括严重的APP技术问题、市场变化或技术升级需要我们及时变更业务并调整APP设计、风控部门根据模型监控出比较严重的风险问题需要及时修补、用户反馈和投诉等,这些问题需要第一时间上升,并有过程记录和结果总结,反馈到所有参与的人中;如果其他问题、比如UI、技术细节、app性能,就在组内自行处理。
3、沟通方式原则——
典型流程中涉及的沟通
- 设定排期时候先列出理想排期,然后乘以1.5
- 在开发初期,先做出一个模糊版本,或者PPT,在会议上和利益相关者展示自己的思路和产品形态,双方及时纠正
- 遇到冲突,在爆发之前让对方解释ta为什么这么想,同理心就能起作用;同时你也做同样的事情并列出底线,站在公司的角度思考问题,处理不了就上升。
- 如何表达问题:先想好,比喻+图文并茂
比如:
7号的交易板块USD列表有几个币种本来是上升的变成绿色图标了,不知道是服务器的问题还是APP的问题,数据先过你们这边的能不能先帮看下。
7号的交易板块USD列表出现了百分之7的数据异常下跌,经过分析,APP端没有异常,请帮忙检查服务器端7号的某段数据记录并核对APP上的记录。
如何接受问题
及时回复是一种美德,当然要列出自己专心开发的时间,如果是能快速处理的问题,就快速处理,如果是一时处理不了的问题,就先回复,下午帮你看,下午就一定要分配时间帮别人看。其他的tip:
1、富足心态:分享
2、会议目的要清晰
3、对事不对人
4、保持透明度
5、尊重差异,了解对方优势劣势;
6、保持沟通,面对面+白板
待补充:简历上关于沟通的点,间隔时间
例子~ 主题适配,和产品妹妹沟通,陈春浩的坦白