顺丰科技IOS客户端-线下一面二面+hr面
一面二面(60min)
自我介绍
TCP的三次握手和四次挥手
答:常规回答。
http和https区别
答:ssl/tls协议,混合加密,数字证书验证,数字签名(同时结合了DNS放劫持来讲解)。
get和post有什么区别,除此还知道哪些请求吗?
答:get是获取资源,post是创造新的资源,还知道put和delete,分别讲了功能。
讲一下Flutter渲染流程和结构
答:Widget Element RenderObject三者关系,结合项目Getx框架和setstate刷新机制的framework层代码和原理以及Engine层的渲染引擎skia2和openGL。
讲Flutter的优点和缺点
答:优点:支持即时编译和预编译,热重载便于编译,独特的垃圾回收机制,独特的内存分配机制以及Isolate单进程的处理任务流程。
缺点:库偏少,需要自己造轮子。
面试官反问Flutter还有别的缺点吗
答:不清楚,但是感觉跟单进程有关。
面试官答:共享状态复杂:在单进程中,多个 Isolate 之间共享状态是困难的。由于每个 Isolate 都有自己的内存空间和执行上下文,共享数据需要通过消息传递或其他机制进行同步。这增加了代码的复杂性,特别是在处理大量共享状态的复杂应用程序中。
内存占用增加:每个 Isolate 都需要一定的内存来维护其执行上下文和数据。当创建大量 Isolate 时,会增加应用程序的内存占用。这可能会对设备的资源消耗产生影响,并且在一些资源受限的环境中可能导致性能问题。(管道并不能解决内存分配问题,只能解决不同isolate之间的通信)
讲一下MVVM MVP MVC的区别
答:结合项目Flutter的Getx框架讲自己对MVVM的理解,简单描述了MVC和MVP。三个模式耦合度的变化。
应用出现卡死状态怎么解决?
答:使用debug模式找出报错地方,增加该地区的widget复用,优化代码,减少内存消耗。
项目的app启动时间有了解吗
答:没有,但是一般只是需要初次登陆需要缓存会比较久。
面试官:顺丰的软件每天的使用量很大,需要对不同的手机机型启动时间进行兼容,有什么解决方案吗
答:没有接触过这方面的问题,但是认为可以通过逻辑实现?
有监听过大量用户的响应时间吗
答:(完全没听懂)没有,然后听面试官给我解释也没听懂。
在项目中token如何使用?
答:对全局的网络请求进行封装,在用户登录时候接收后端返回的token存入文件中,读取文件中中的token将其添加在请求头中。
项目中使用WebSocket实现点赞和用户对话,讲讲怎么使用的。
答:用户对话图片转成进制后存入oss服务器中,文字的话就是简单的json,点赞功能使用websocket监听再利用Getx回调刷新。
怎么优化Flutter性能?
答:多复用已有的Widget,优化图片资源,使用异步的方式加载数据。
面试官反问:看到有使用缓存来存储常用数据,缓存存在什么地方,以什么样的形式存储呢?
答:结合了很多存储缓存的方法,使用getstorage持久化缓存(基于其他插件类似创建本地数据库会影响客户端性能)
面试官反说:这个不怎么影响,反说getstorage是将数据存储在应用文件私有目录中。(这个我确实没弄清楚)
Flutter是如何实现跨平台的功能呢,相比于react native有什么缺点呢?
答:没用过react native,我认为跨平台Flutter实现是基于底层的Flutter vm虚拟机可以实现跨平台(不是很清楚)
面试官反说:Flutter是使用自带的skia图形引擎进行绘制导致无聊iOS还是android两边表现出来的效果是一样的都是跟画画一样画出来的,而RN可以通过js可以更好的和原生进行复用。
介绍部门业务
android是使用RN技术栈,IOS使用oc或者swift进行原生开发,业务分为客户和内部软件,询问意愿。
答:更倾向于iOS原生,面客方面的软件。
面试官反问:为什么认为自己为什么更适合面向客户的软件。
答:之前项目的更多是面向用户不是p2p的形式,个人认为对app外观和性能更有追求,面向客户更有挑战性。
反问环节
问:base在哪个城市
答:深圳南山区
问:如果入职会优先分配去哪个部门
答:看统一入职后的安排,反问我的是否愿意接受学习RN,OC,Swift
答:愿意的,更倾向于oc,swift。
问:您认为跨端开发对iOS开发产生了什么样的影响?
答:跨端毕竟还是存在一部分的局限性,实际的app开发中是需要两者复用的。