应届入职一年总结(Scala)

分享 未结 置顶 精帖
1 2 1 645
梦境迷离 2020-06-05发布
收藏 点赞

原文已发布在个人博客和csdn博客上。

https://blog.csdn.net/qq_34446485/article/details/106566945

https://dreamylost.cn/


  本来这篇文章已经写了很久,原意是mentor让我写的,给以后入职的新人一些经验,对以后公司培养校招生做一个参考,后来发生了一些不愉快的事,也没有人提这件事了。

现在已经过去了一年,发出来仅供参考,并修改补充了一些。


入职前的主要经历

1. Java开发实习两个月,主要技术栈 Java/SpringBoot/SpringCloud/Redis/RabbitMQ/DDB/Dubbo

2. 测试开发实习四个月,主要技术栈 Java、Shell、Docker/Jenkins/Adb/Seleuim/Appuim

3. 在校期间关于Scala的学习:看过《快学Scala》

前面实习期间看过《Scala编程》,《响应式架构 消息模式Actor实现与Scala、Akka应用集成》,并写过一些SpringBoot+Scala的项目。实在没有练手的项目可以重构以前自己写的Java或其他语言的项目。


入职前的准备

从前面公司校招离职到入职这里期间,了解了Play、SBT,根据文档写Demo。

如果没有像我一样在校期间熟悉Scala语法,学习Play前还需去熟悉一下语法。

比如学Java的先熟悉Java 8 lambda,养成函数习惯和思维。Scala快学中的名词实在是太多了并不适合没有函数式基础的人入门,

可以看看Scala编程这本书。至少看到Future这章,前面的类似XML解析和后面的组合子、GUI这些章节就不用了。

具体根据需要选择,也不是一定。除了基本语法,后续想加强函数式理解与应用则需要学习小红书 cats shapeless等,

比如小红书中的例子自己动手实现,包括高阶函数,柯里化与部分应用函数,组合子,各种常见算子,Monoid/Monad,函数式数据结构,

纯函数编程,并行计算,流处理,函数式错误处理。这些不仅是入职前,入职后也可以学习,

能加强对Scala的理解,大多数概念也是很多语言都有的,只不过实现上的区别。


入职后

搭好环境,拉取backend项目,了解项目源代码的布局与结构以及该服务具体主要做什么。

使用看板、单图。参加公司的新人培训,技术培训时会了解到前中后端(在这里 中端是服务端,后端是大数据)主要的技术栈。

他们的项目在codes(代码库)上会有相应的service、data这种标签,来表明项目是哪个端负责的。

这个培训有时会在入职一个月后才开始。对于中端就是平常外面说的后端或服务端,技术栈主要是Scala、Play、Slick、SBT、Akka、Undertow、Redis、RabbitMQ、kafka等,

当然也有一些基于其他语言的小型服务。后面都比较常见,前面几个是Scala的生态中的。

这些在入职前看招聘要求也能知道。对于公司大多数的中端服务,都是以Play为主,Play的文档写的非常好,将文档的demo都做一遍最好。


熟悉具体的业务,比如广告的DeepLink是干嘛的,对应在代码里面的哪个地方,对应页面上的请求URI是哪个。(这就需要前面的Play和undertow的一点相关基础,如果是graphql,

那么就只能通过request的operationName和query xxx来看)。学习undertow我都是看例子,将以前写的简单的Scala秒杀系统重构为使用函数式异步的。自己可以在熟悉代码时写文档(此时文档可能不够准确)或画流程图,

数据流图,下次需要用到此处业务时,根据最新的理解再来修改。在大致了解某块业务后,尝试接收简单的需求。比如中间页配置,能熟悉gio-ads-api服务,也能熟悉play slick使用。

完成一个与其他业务不太多关联的独立任务的CRUD,在这个时候会比较艰难,代码review时很多语法不合适的问题。做图片裁剪时需要使用Python,可以熟悉一下脚本编写,

对后面数据迁移可选择性上有帮助。因为可以使用SQL也可以使用Python。中间页上线,可以了解到从需求到设计开发测试部署上线整个流程。期间对部署流程梳理,对后续排除CI问题有帮助。


通过实时bug定位顺便了解到新的服务ws、real-time。调试过程中还会涉及到权限,需要了解权限的构成。

比如authority、accounts、opm等相关的,以及查数涉及到chart-services、query-services,广告特有权限涉及backend。

进一步熟悉项目的整体结构。学习docker+k8s与capistrano部署,对测试环境的一些问题能知道原因。

比如依赖服务挂掉,服务重启失败,服务配置是如何读取的,配置的优先级,上线如何操作,服务的日志如何到kiban。

服务依赖的其他基础组件:dryad、consul、rabbitmq、redis。对于自由的框架工具,没有很好的文档,只能通过实践去折腾,这期间也很困难。


applinks开发,熟悉DeepLink技术,与前端、SDK合作,渠道回传与后端合作、权限种子数据熟悉基本的权限、DeepLink域名切换熟悉链接创建流程、deferred权限控制熟悉deeplink跳转流程、

DeepLink配置熟悉版本如何划分,每个小的需求都是一块业务知识,都是不同团队的合作。有机会了解一小块业务,刚好与之前自己看代码相结合,而对于广告业务本身来说,数据流较长,从前端到SDK,服务端都是需要关注的,

在没有将所有业务知识连成片时,同样很困难,因为很多时候不知理由,只知道现状。主要的难点是业务上,如果刚好有小的bug和需求,刚好时间不急,可以很好的有目的的熟悉具体代码和业务。

并尽可能在需求分到身上时,找到当前最可能是问题的问题。后续遇到隐藏的问题再在站会提出来。起码在这一步,解决掉最显然的疑问和问题。


新的一年

   

1. 疫情

2. 转了岗不再做SaaS广告

3. 并没有能回杭州修福报

4. 减少了福利,没有大小周了

5. 搬砖


学习的文档书籍


Scala Future https://docs.scala-lang.org/zh-cn/overviews/core/futures.html


Play https://www.playframework.com/documentation/2.7.x/ScalaHome

 

SBT入门 https://www.playscala.cn/article/view?_id=10-5d7a4b3beeab565f1f3f9687


Akka https://doc.akka.io/docs/akka/current/index-actors.html

 

Undertow代码例子(也有其他框架的) https://www.programcreek.com/java-api-examples/?ClassName=undertow&action=search&submit=Search


Scala大佬的博客 http://hongjiang.info/scala/


《Scala编程》


《响应式架构 消息模式Actor实现与Scala、Akka应用集成》


《反应式设计模式》


《Scala函数式编程》


《快学Scala》


回帖