一周前的 沸点,掘金团队请来了闲鱼技术团队 Leader、闲鱼客户端架构师、Flutter 布道者的做者 @宗心 (于佳) 作了为期三天的 Ask Me Anything (AMA) 活动。咱们在此精选了一些来自用户的提问及宗心的回答。前端
- 闲鱼技术团队 Leader
- 闲鱼客户端架构师
- Flutter 布道者
- 掘金我的主页:juejin.im/user/5b46c7…
- 技术团队专栏:juejin.im/user/5ac2db…
想问宗心两个问题:java
如何看待目前大前端这个概念的,大前端之因此为大,是由于涉及的面比较广,那前端的边界在哪里呢?先后端以 Nginx 为界么?那前端在 Nginx 以前的全部事情均可以作么?在咱们这边仍是有大前端的概念,咱们大前端甚至也会接触到后端 mysql 这些。不过我看在阿里集团内部,这个概念好像并无,内部好像是客户端终端团队,前端团队。mysql
我之因此会问前一个问题,实际上是由于在大前端的概念里,无论是前端的 leader 想带领好客户端同窗往前进,仍是客户端的 leader 想带领好前端的同窗往前进,都是挺不容易的,虽然二者有结合点,可是在纵深方向二者差别挺大的。阿里内部是如何处理好这种问题的呢?react
1.我其实以为工种的细分,必定仍是有缘由的,因此其实针对大前端的概念,一方面我但愿客户端的同窗能拥有部分前端的知识,扩展本身的边界,另外一方面,我很敬畏这件事情,曾经我觉得个人团队特别优秀,一个月就能够全团队切换到weex,并且还能保证大项目的落地,但在后续的过程当中随着对知识体系的深刻了解,我发现,不少事情咱们在短时间内是没法搞定的,好比咱们不擅长玩法和运营活动相关的事情,并且咱们在weex的代码规范和工具体系建设上,实话说仍是须要咱们的前端团队以及咱们本身的weex专家来帮助。因此我以为尤为在大公司,要保证某些场景下的专精的状况下,分工依然在。这也是为何公司没说你们都走全栈的缘由。但你们能够在各自栈的场景下多走一步,多创造一些可能性,好比客户端会了weex能够在部分产品上使用该技术,好比店铺,好比闲鱼号,另外客户端同窗能不能学点AI相关的东西呢,在端侧把tf-lite的工程体系用起来。总之,我但愿的大前端概念上,应该有必定的跨栈能力,但不用作到都很是专精,依然仍是在本身的领域有本身的专长。android
2.对于leader来说,在不停承担责任的同时,这个问题必定都会出现,试想我以前只作iOS带iOS团队,后来带android,我android勉强还能够吧,再作flutter要学flutter,再若是让我带服务端呢?我仍是要会,但做为TL,我需不须要都是团队第一,我以为不是,不然你带的团队必定很菜,全部人都不如你,那你就是团队的天花板,因此TL在技术上我来看,要有本身的专业度和方法论。再有就是业务TL必定要有广度,个人老板服务端出身,作客户端他确定作不过我,但他的广度上面,他看业务的角度以及破局的能力,老实说高我好几个段位,那这就是他给予团队的独特性,因此我以为若是从此我要作一个好的TL,我也须要补充这些内容,而深度的话,我以为会能找到更多比我更专业的同窗,一块儿作的更好。TL最重要的做用,是他有没有给公司带来一支有想象力的团队,这个应该就是阿里对TL的要求,聚人成事,借事修人webpack
你好,我本科读的机械专业转的安卓开发,如今在一个不到 20 人的初创小公司,请问像我这种非科班出身的程序员,在面大厂的时候,简历、面试该关注哪些点呢?或者换句话,大家找人的时候看中候选人的什么特性呢?学历我也是 985 的只是非计算机专业出身git
你好,我相信这个也是不少同窗关心的问题,校招的同窗若是有问题我单独再讲,社招的同窗,除了经验和技能上的要求之外,我想突出说两点,一个是但愿在作事情的时候有本身的思考和总结,好比你作的项目,好在哪里,有什么问题,后续要怎么解决,度量标准是什么,这个很重要,咱们但愿这个同窗是不断思考持续进步的,送你们一句话,
if you cannot measure it,how to improve it
。第二点,好奇心,除了你本职工做之外,想不想了解你上下游的同窗在作什么,这个业务总体架构是什么,大家公司在端侧核心竞争力的那些代码是怎么实现的,为何这么作,业内流行趋势是什么,有没有尝试过,怎么看这些技术的将来。我在面试每位同窗的时候,打内心但愿你们都能过,由于咱们真的很是缺人,但可能不少同窗在工做之后,没有以上两点意识,形成后续的积累就会比较慢,这里讲给你,也但愿能帮助更多同窗成就更好的本身,找到好工做。程序员
你好,新技术刚发布的时候,一般都有不少未知的坑要去填,风险比较大,因此不少技术团队都不会第一时间去选择新技术来开发业务,请问你和团队当时是基于什么考虑选择在闲鱼客户端中使用 Flutter ?github
讲一下心路历程,确切的说咱们是在去年flutter还在alpha版本的时候就已经跟进了,开始的时候更多的是作预研部分的事情,好比作了一个内部国际版的闲鱼,彻底基于flutter的,整个工具链和flutter的内部原理咱们都趟过一遍,在我看来flutter的设计思想比较先进,在ui的兼容性以及性能上,较其余的跨平台框架是有较大优点的,加上咱们跟google的flutter团队创建了长期的完善的交流机制,为后续的落地打下了比较坚实的基础,另外,我在flutter上看到了将来跨终端上友好的扩展性,据我所知google团队已经完成了flutter在mac上的demo,后续是否能够在其余桌面操做系统和iot设备上应用,让咱们拭目以待。咱们在一年的调研沉淀之后,基于上述的缘由,选择了flutter在闲鱼业务线的尝试和落地,目前看起来,会有少部分兼容性问题,但总体来看,距离大面积商业应用已经比较近了。web
请闲鱼使用 Flutter 开发时,移动客户端的分工是怎样的?会有专人进行 Flutter 的开发仍是 Android 和 iOS 都要参与到 Flutter 的开发和学习中?会考虑更大范围使用 Flutter 吗?
很好的问题,闲鱼在使用过程当中,采起了混合工程的场景,因此确实是有专人写flutter,部分同窗仍然开发native的代码的,因此这个过程当中,若是但愿平滑的作技术栈的切换,咱们在工程改造上作了很大的努力,研发模式上,咱们针对native和flutter的同窗有两种开发模式,比较好切换,对native同窗来讲,是感知不知道flutter存在的,固然,将来咱们但愿在业务代码测逐渐切换成flutter。
为什么阿里产出不了相似react, webpack, babel, flutter等框架/工具,一直在基于其余技术作改造 ?
我跟google团队接触的过程当中,确实能看到,跟世界最顶端的公司相比,咱们的技术水平上确实仍是有必定的差距,我以为没什么,正视差距跟优秀的团队看齐,继续努力学习他们的优点,把他们的优点带回来,另外,公司在工程化和技术的商业化上,我以为作的挺好,只要能产生商业价值,基于这些现有的架构体系改造是最快的。
问个无关的问题。不少人都已经把淘宝做为新时代的跑分软件了,卡的死人的淘宝为啥不把首页改成flutter ?
淘宝首页其实使用了另外一种模版引擎的技术叫dynamic,是个人其余同事作的,相比weex来说,主要负责模版的渲染,会更轻量一些,若是考虑首页的方案,建议也能够去看下天猫的同窗的Tangram的方案,是比较完善的。我看来现阶段flutter的初次加载,其实也比较慢一些,可能还达不到首页的加载效果,咱们正在考虑优化这个加载过程。
通常用flutter结合native去写的时候,怎么在flutter里面处理h5连接跳转,flutter和native之间的数据传递和状态保存又是怎么管理的呢?
1.第一个问题,我这边的场景会有一个统一的openurl方法,在native侧,native调用你们应该都很清楚,flutter的调用的话,写一个plugin,调用dart的openurl方法经过channel机制转到native的openurl统一处理便可,剩下的无论是什么连接,都跟native的处理方式是同样的。
2.第二个问题的数据传递和状态保存是个难点,由于flultter对native的数据传递都是copy生成一份的,因此native和flutter的状态就是两份,不一样步的,目前若是有变动咱们主要仍是采起通知的方式,但处理起来仍是有点不优雅,有更好的方案能够跟咱们交流哈,我本身的但愿是,可能后续都存在一边会比较好,无论是flutter仍是native,理论上来说多是flutter,由于后续但愿把剩余的native代码迁走。
19届的同窗看你投递的岗位哈,我目前也在负责闲鱼的校招,对大部分同窗来讲,建议投递工程相关的岗位,好比java研发,客户端开发等,要求通常是三点:1.基础,要求重点学科优秀,对数据结构/算法/操做系统原理/计算机网络等掌握扎实,或在某个领域有特别的特长 2.热情,了解目前普遍应用的技术,有本身的学习技术的路径,对某一领域有本身的强烈好奇心,并愿意额外投入不少精力,并最终能取得好的结果3.成果,这个主要指专一于某一个领域,深刻了解了技术在实际场景的应用,能够经过本身专一的领域去解决实际问题,或者有重要学术论文和专利。
知足两条的同窗是最低要求,知足三条的同窗通常比较合适。但愿能帮到你。
宗心大佬我想问下,大家技术团队如今有多少人?如何管理一个技术团队?在团队管理上你踩过那些坑?
咱们大技术团队大概70多人吧,还属于一个比较小的团队,固然咱们但愿能在今年招到更多优秀的同窗作同事,个人目前团队大概不到20名同窗,都是我招进来的。
我以为技术团队的管理相对简单一些,比较重要的实际上是要关注你们的成长,本身须要在大的框架目标肯定后,在过程当中放权和训练团队的思考能力,让团队同窗在重要的事情上面造成本身的判断和决定,引导他们思考,而不是直接给他们结论,其实总结起来也很简单,就是一切都是以团队同窗的成长为出发点思考,并不断沟通和对焦,怀着对你们负责的心,应该就能作好。
踩坑上面,我以为我犯得比较大的错误是我刚带团队那会儿,本身是p7,团队大部分同窗是p5和p6,招进来新同窗的时候,发现不少事情他们作不了,因此本身主动就把大的架构升级改造的迁移所有本身作了,也承担了不少业务,但最后的结果就是,新的同窗其实在试用期并无承担很大的压力,也没有得到快速的成长,后续的过程当中,表现的就比较很差,这个结果我一直都以为对两位同窗有所内疚,我以为若是当时对他们要求高一些,而不是当老母鸡同样护着他们,他们也许会有更好的发展,老母鸡是带不出雄鹰的,因此本身后续有了改变,知道TL更可能是作引导和训练,而不是直接给结论,并且你要容许下属在必定时间段内产能不如你,学会放手,下属的成长就是要主管给予指导和放权。
我去年本身也会看一些课程,推荐获得上的宁向东老师的清华管理学课,很是赞。不但对一线TL管用,对公司的中高层一样管用,后面课程里的战略地图等都是颇有效的方法。
大佬好,我最近在找 iOS 的工做,方便的话能够分享下你以前面试的时候提的面试题吗?以及闲鱼招 iOS 吗?具体的岗位要求是怎么样的呢?
我本身在阿里内部整理过比较多iOS的面试题,但后续随着时间推移,一个是知识已经比较过期了,另外一个本身在招聘上对人的思考也有提高,可能我以为面试题自己不太适合找到合适的人,因此更可能是从人自己的特质上去看一我的是什么样子的。
咱们有闲鱼的岗位JD,里面描述了一些知识层面的基本要求,岗位要求
我这里补一些闲鱼或者说阿里在这上面的软性的要求
我能够说下闲鱼但愿iOS开发是什么样子的 1.基础好,基本上iOS的一些基础的知识体系要知道,但可能我不会直接就问你题目,我但愿你能在本身作的项目或者实践中有体现,好比我问内存管理相关的知识,若是你只知道它的原理,但根本没用到过,我以为基本上也是属于死记硬背型的,没有项目或者技术方案落地的基础知识,我以为可能只能对工做2年内的同窗是work的,再工做久一些的我以为就不行了。 2.有好奇心的,关注最近产出的新技术,无论是wwdc也好,仍是github上的重点项目,并关注它的一些原理性的东西,这是很好的习惯,但我但愿能够再进一步,将你关注的这些内容落地,好比我以为如今大部分的iOS开发应该都了解一些RN和weex的知识,那原理是什么,有没有作过扩展,有没有踩过什么坑,能答上来有一些不同的思考我就以为很棒。3.精益求精,这点特别体如今性能和稳定性上,这里既能够考知识体系的基础,也能够考知识体系的系统性,专业性。好比每一个人看待性能优化都是不同的,你的总体解决方案是什么,哪一部分是你优化的重点,效果如何度量,你的方法能不能沉淀做为基础设施,都是很重要的。这里其实能看出P6/P7/P8在上面的区别。
因此我但愿能找到的同窗是--基础好/好奇心驱动/有匠心/理论结合实际有结果 这样的一我的。
闲鱼app里没有使用RN,但有很多页面使用Weex,在我看来,无论是Weex仍是RN,咱们去当作本1.前端体系的学习成本 2.debug和兼容性的成本 3.基础设施建设的成本 这三个成本是逃不过的,因此若是以为这三个成本大于你的收益,建议不要用。而对于闲鱼来讲 1.我团队有专门的weex专家带一些有前端知识体系的同窗 2.基础设施有阿里巴巴集团的基础设施作基础,本身须要再建设的很少。 这两个其实已经决定了咱们在使用过程当中成本没有那么高,目前最高的可能就是debug成本和兼容性问题了,暂时是能够接受的。再说收益1.咱们有一套从sketch到代码的生成工具,因此UI还原部分,咱们基于此少写了不少代码2.三端一致性,在部分业务上确实带来了好处,尤为闲鱼要在外部多端进行投放,无论是手淘仍是外部投放,我就写一份代码,相比来讲成本确定要低一些,因此这个要看场景3.做为前端使用,性能上比h5仍是会好不少,前端使用过程当中也有一些收益。 均衡来看,咱们仍是在对应的场景下会持续使用下去。
这里延伸一下flutter,成本可能会是1.flutter的学习成本2.debug体系和工程体系的成本3.基础设施的成本 这里没提到兼容性,由于从UI还原的角度上来,flutter的兼容性确定仍是好于weex,至少两端的一致性是比较强的。咱们看怎么解这个问题1.学习成本上dart比较接近java很是好学,基本上看一遍就会了,工具体系也像java,团队有成熟的android同窗彻底能够cover 2.debug体系和工程体系成本,确实是一个成本,目前在逐步解决,但怎么说,IDE开发flutter的时候,仍是相对更接近客户端的开发体验3.基础设施的成本,确实也有,因此咱们如今考虑,怎么后续经过创建一套基础设施能支持flutter/weex/h5/native等多个体系,也就是说,经过架构统一底层能力,而不用重复建设。咱们再看收益1.一样咱们有sketchToFlutter的工具,部分代码也能够不用写了,虽然还有一些bug,后续会持续作优化2.双端一致性,效率翻倍,这个过程前期只要兼容性问题咱们作好,后期应该不太会有兼容性问题 3.高性能,整个flutter的性能是很是好的,native的性能表现
这么看来,对native侧的需求来讲,flutter是另外一个比较好的选择。
本期 AMA 社区小伙伴提了许多实用问题,一样感谢宗心认真地为掘金小伙伴解答了很多疑问。浏览更多的问答,能够到宗心的 AMA 进行阅读和讨论。
下期 AMA 嘉宾为腾讯 NOW 直播技术团队的 Rand,你们记得准备好问题哟~ 下期 AMA 结束,嘉宾将会指定一名他以为提出好问题的小伙伴赠送一本书籍 《码农翻身》,一样的,官方会根据谁的提问得到最多点赞赠送他一本《码农翻身》哟~ 下期 AMA:2018.07.25 - 2018.07.27 见