开发者学堂课程【Scala 核心编程 - 进阶:温故知新】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9118
温故知新
内容介绍:
一、项目开发的大致流程
二、程序框架图
三、并发编程模型 Akka
四、Actor 模型开发流程
五、Akka 网络编程基础
一、项目开发的大致流程
作为一个项目,前期会有可行性分析(拉项目,找产品需求),市场部或销售部拿到单子或者产品并且做了报告之后,要进行需求分析。由需求分析师负责,某些大单子,需求分析师一般会去甲方公司“坐班“,因为对接的是老板或者负责人,甲方老板或者负责人时间不空闲,并且有时想要看甲方的工作流程,所以需求分析师往往要到甲方公司上班,需求分析师出需求分析报告(要完成什么功能),然后进入设计阶段,通常是项目经理或者架构师完成该工作,涉及到很多事情,比如,用什么技术,用什么架构等等。
一般来说,项目经理擅长什么技术往往就会选用什么技术,建议到公司跟着该公司最核心的项目走,设计完成后将设计文档交给程序员,在这里可能会遇到一些问题,参加工作后,有可能你参加的项目已经开始运作,作为一个程序员,加入时进入实行阶段,这时你前期是不知道的,所以一般来说,项目小组长或者项目经理会将文档交给你看,在前一周或者两周都不会让你参加写代码。
看完文档后才开始让你慢慢写代码,甚至一些好一点的公司会有一个需求反讲的工作,如果你看懂了文档,小组长或者项目经理会单独找一个小房间让你表达你对需求的理解。
然后才让你去做代码。在写代码的过程中,项目经理往往会指定一个测试人员,你将与他对接,测试人员会专门测试你的模块。
测试人员一旦发现问题可能会以邮件或者有专门的 Bug 提交系统告诉你代码的 bug 。这时你将每天调试好 bug ,否则有很多 bug 没有被调货,你有可能不能通过试用期,项目经理会认为你态度有问题或者能力不够。
如果你与测试人员在邮件交流不顺畅,也可以通过开会来解决。每到一个月或者一个大的里程碑时,一般来说,项目中要组织人员开会,大家可能要汇总进行集成测试。
一般来说,一个正规的公司,你只负责你的模块,将自己的模块做完之后,会写一个 demo 来测试。
测试完成后将代码提交到版本控制,然后项目经理进行测试,测试没有问题后进入实施阶段。实施阶段一般来说与程序员无关,该代码通过内测。一般大公司在实施阶段会部署到甲方的内网。实施阶段完成后进入维护阶段,如果有问题会打电话给项目经理。
二、程序框架图
在自己写代码、写模块时,可以写一个自己模块的程序结构图,程序结构图利于我们分析,也利于自己与其他程序员交流,参加工作以后,有很多东西不知道,有很多技术难题,你是想要别人给你帮助的,问问题不能太频繁也不能什么都不问。
如果有一个有技术有检验的程序员,你想要跟他学习,你可以将自己画的程序结构图与他一起交流,让自己成长更快。不懂就问,要善于交流。
三、并发编程模型 Akka
学 akka 最主要的目的是为 Scala 打基础
1.基础内容
1)Akka 是 JAVA 虚拟机 JVM 平台上构建高并发、分布式和容错应用的工具包和运行时,你可以理解成 Akka 是编写并发程序的框架。谈到构架,说明已经将整体结构做好了,我们要做的是按照其规范去进行开发,提供框架的好处,高效并且性能得到保障。
2) Akka 用 Scala 语言写成,同时提供了 Scala 和 JAVA 的开发接口。
3)Akka 主要解决的问题是:可以轻松的写出高效稳定的并发程序,程序员不再过多的考虑线程锁和资源竞争等细节。
2. Actor模型用于解决什么问题
1)处理并发问题关键是要保证共享数据的一致性和正确性,因为程序是多线程时,多个线程对同一个数据进行修改,若不加同步条件,势必会造成数据污染。
但是当我们对关键代码加入同步条件synchronized后,实际上木并发就会阻塞在这段代码,对程序效率有很大影响。
2)若是用单线程处理,不会有数据一致性的问题,但是系统的性能又不能保证。
3)Actor模型的出现解决了这个问题,简化并发编程,提升程序性能。你可以理解:Actor模型是一种处理并发问题的解决方案,很厉害!
3.Actor 模型整体的机制示意图
四、Actor 模型开发流程
在 Actor 模型中有一个 System ,简单回顾一下其开发流程
Actor 是公布在 ActorSystem 的体系之下,在该体系之下有很多 Actor 。
1.说明
Actor 与 ActorRef 是一个指向关系,Actor 发信息时是将信息通过 ActorRef 发送给 Dispatcher Message(消息分发器),运行时是 mes 程序的,Dispatcher Message 是 runnable ,runnable 接管了所有 actor ,在 Dispatcher Message 中可以找到一个集合,可以认为里面有一个 Hashmap ,Hashmap 可以找到这个 actor同一个体系下面 actor 不能有相同的名字,将信息发给另一个Actor 对应的 MailBox。
如果该邮箱有很多 message,会进行排队,然后将信息推给这个 Actor。
Actor 中有一个 receive 方法,会被MailBox 调用(该 Actor 与 MailBox 是关联关系),于是最后可以得到消息。
2.步骤
1)先创建Actorsystem
2)通过Actorysytem创建对应的Actor /ActorRef
3)通过ActorRef!消息〔这里表示将消息发送到ActorRef对应的Actor的MailBox]
4)先将消息发送给Dispatcher Message
5)由DispatcherMessage将消息转发对应的Actor的MailBox
6)当Actor的MailBox 收到消息后,就会调用Actor的receive方法,把消息推送给Actor
7)如果希望回复消息通过sender() ! "消息"
后面我们做所有 actor 开发的时候,这个机制都是不变的,无论远程和本地。
五、Akka 网络编程基础
后面讲了 Akka 网络编程基础,下图需要注意
一个客户端A他们之间相互通讯,假设这个服务器监听的是80端口,又有一个客户端B,个80端口是可以被多个程序连接的,因为这不是监听而是连接,这就叫并发。
另外,一旦连接形成,客户端也会有端口与之对应,该端口一般是随机分配的。
整个机制的底层在进行通讯的时候,不依赖于操作系统,因为有 tcp/ip 协议,与操作系统无关。