前言

作者介绍:文景睿,花名幕辰,Github名luckysmg,一名来自哈尔滨工业大学软件工程系的大四学生,在闲鱼技术团队实习了三个月。先后参与了闲鱼音视频编辑器,图片编辑器的改版升级,以及Flutter Engine优化等相关工作,这篇文章主要是个大家分享一下我来实习的这段时间的一些心得体会。

初来乍到

之前,我在学校的实验室呆了三年,主要做的是移动端研发的相关工作,对项目工程也接触了不少,但是当看见闲鱼工程的巨量code的时候还是让我大吃一惊,初次编译项目要半个小时是我这辈子都不敢想的

在闲鱼实习是一种什么样的体验(在闲鱼实习是一种什么样的体验)(1)

。项目的各个模块分工很多很细,来了之后请教师兄,了解各个模块的功能和作用。由于Flutter是闲鱼中使用的主要技术,而我自己之前主要是做Native相关工作的,所以对于Flutter多少有些陌生,无论是从UI布局的思路,响应式数据流的处理还是交互等等和Native都有较大差别,我也花了一些时间来进行学习和适应。

进入状态 在熟悉了一段时间工程代码,整体研发模式之后,我也迫不及待的正式进入战斗模式开始输出

在闲鱼实习是一种什么样的体验(在闲鱼实习是一种什么样的体验)(2)

。之前提到,我参与了视频编辑器和图片编辑器的研发,主要就是以下两个页面:

在闲鱼实习是一种什么样的体验(在闲鱼实习是一种什么样的体验)(3)

在闲鱼实习是一种什么样的体验(在闲鱼实习是一种什么样的体验)(4)

这两个页面是闲鱼主发布链路的核心页面,每天会有数百万的用户接触到这个页面,刚接手的时候我也不敢想象,第一次想着自己每一行code都将会影响数百万的用户,心里难免会有些紧张和焦虑。两个页面的共同难点就是强交互,需要根据用户交互实时对页面内的组件进行响应,给用户良好的操作反馈。其中,图片编辑页面单指控制图片的需求甚至还要用到一些数学知识(向量的点乘和叉乘)来对控件进行角度的变换,以及放大缩小等等,如下图所示

在闲鱼实习是一种什么样的体验(在闲鱼实习是一种什么样的体验)(5)

再把这些数据经过一定的的计算,得到贴纸合成的数据,比如贴纸坐标,旋转角度,大小尺寸等参数,再利用源图片数据利用一些算法流程对图片进行合成为一张全新的图片。上面每一步,每一步都不能出任何差错,这个对我一个初出茅庐的学生而言,无疑是一个巨大挑战。但是,挑战也是提升自己的好机会,也是学习的好机会,在师兄的帮助和指点下,我也是顺利地完成了相关工作,并如期上线。

迎来挑战

在闲鱼团队,我感受到更多的是对技术进行学习和探索,而不是做完业务和需求就了事,在基本完成了相关比较紧急的事情之后,师兄开始带我了解Flutter的引擎层,并且着手开始优化Flutter引擎代码。引擎部分原本我认为比较底层,离我很远,自己触碰不到,但是进去之后发现其实并没有那么难,于是开始了解相关代码以及实现,也向Flutter官方提了一些PR对引擎层代码进行优化,这些都不算啥,真正的挑战,要从iPhone13发布说起。

大家都知道,iPhone13系列首次支持了120HZ高刷,然而,很不幸的是flutter在iOS侧的引擎部分并没有适配相关代码,并且帧回调中相关间隔时间也存在问题,导致闲鱼在iPhone13系列上收到大量反馈和用户舆情,卡顿,不顺滑,高刷无效等等等劈头盖脸等像我们撒过来......于是我拿出了我刚买的13,开始对引擎进行debug....尝试着能不能修改引擎的相关实现来解决问题。最后在翻看引擎的相关代码后,对iOS侧的刷帧回调进行修改,最后成功让闲鱼的Flutter页面在iPhone13系列机型拥有高刷(目前闲鱼最新版本已经上高刷)

另外,我自己也发现iOS侧还有一个键盘弹起没有动画的问题,而Android是有的,说明也是引擎层的问题,我也通过结合iOS系统特性对Flutter Engine进行修改,提升了键盘弹起场景下Flutter应用的体验,以下是实现对比(后续会有相关实现的文章)

在闲鱼实习是一种什么样的体验(在闲鱼实习是一种什么样的体验)(6)

在闲鱼实习是一种什么样的体验(在闲鱼实习是一种什么样的体验)(7)

总结

总的来说,实习三个月下来,感觉团队的技术氛围,团队氛围都非常不错,我个人技术方面有很大的进步和发展,也顺利拿到了转正offer,最后也决定秋招选择了闲鱼技术团队,在这里也非常感谢师兄们在我实习期间给我非常大的引导和帮助。

附上我跟我的小伙伴们的合影:

在闲鱼实习是一种什么样的体验(在闲鱼实习是一种什么样的体验)(8)

在闲鱼实习是一种什么样的体验(在闲鱼实习是一种什么样的体验)(9)

,