---
title: 应届入职一年总结
categories:
- 随笔
tag: [随笔]
---

   本来这篇文章已经写了很久，原意是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》
