Scala
文章平均质量分 75
scala
梦境迷离
点关注不迷路,您的点赞就是我的动力。
展开
-
zio1升级到zio2踩坑和总结
这里不用直接更新到最新版,这样可以保证迁移是最小改动,迁移后再升级即可。不过仍有一些方法是被删除的没有修正,或者遗漏的一些方法没有被重写,需要自己手动改了,基本不需要什么大的改动,删除的方法可以在。首先,从1.0迁移到2.0,可以使用官方的scalefix规则完成一部分方法自动替换(迁移主要解决方法重命名,去掉。,并且使用方式有些变化,不是改个名字就能编译的,甚至调用方还需要略微改动。后,官方发现迁移工作可能非常庞大,后来出了个过渡方案,允许暂时不迁移。并不够通用,在流式解码中性能并不好,所以被弃用了。原创 2023-03-04 20:24:47 · 805 阅读 · 0 评论 -
【Scala问题大全】每日一题,劝退系列
【2022-10-08】akka:给出一个actor 系统的actor的(树形)层次结构?【2022-10-11】akka:比较classic actor和typed actor?【2022-10-09】akka:简述actor的死信消息和unhandle消息的区别?【2022-10-06】akka:简述actor模型是什么?【2022-10-12】简述zio-stream和akka stream区别?【2022-10-13】akka:简述akka-remote的通信原理?原创 2022-08-25 11:51:36 · 349 阅读 · 0 评论 -
Kamon 采样原理
采样方式通过kamon.trace.sampler可以配置一个采样器,这可以决定哪些 span 应该被发送到 span 报告器。采样器类型有几个可能的值,分别是:always:报告所有 trace,会忽略配置的其他规则。ConstantSampler类never:不报告任何 trace,会忽略配置的其他规则。ConstantSampler类random:随机采样器,由于概率设置中定义的概率决定。RandomSampler类,默认概率为 1%adaptive:自适应采样器,为每个操作保留动态采样器原创 2022-05-17 17:43:46 · 375 阅读 · 0 评论 -
Scala CSV转case class对象,支持自定义解析
背景转为对象:方便地读取CSV文件到Scala类型,便于使用已知数据。构造数据:随机Scala对象,写入CSV文件,便于创建或Mock新数据。要求&目标不引入任何第三方库,能够定制CSV某列的格式,可以解析复杂的CSV结构,而不仅限于普通的简单格式,最终能配置解析的一些规则。能使用类型安全的方式编程。下面这个使用shapeless实现,比较简洁,能处理一般的转换,主要问题是我们需要处理CSV中的JSON,而并不需要shapeless的其他功能,所以,嗯。。为了一个方法引入了一个库,不可取。原创 2022-05-03 01:03:41 · 628 阅读 · 0 评论 -
Scala zio-streams 与 akka-stream 的集成 & ZStream错误处理
zio-streams 与 akka-stream 的集成总的来说,我在 zim 中集成 akka-stream,其实只是为了集成 akka-http,众所周知,akka-http 是构建在 akka-stream 上的,而 akka-stream 依赖 akka-actor。对于任意 zio 应用,无外乎就是返回ZIO或ZStream类型的数据。zim 中为了省事,所有接口都使用了ZStream,这点其实很不好,因为ZStream比ZIO操作更多,更复杂。所以 zim 代码中到处都是runHead,原创 2022-03-31 15:21:53 · 410 阅读 · 0 评论 -
Scala ZIO 的流处理介绍和应用
zio 流处理介绍摘自官网流式库的主要目标是引入一个高级 API,该 API 抽象了使用数据源和目标进行读写操作的机制。在 zio 中 需要添zio-streams为依赖才能使用流。流式库帮助我们专注于业务逻辑,并将我们与低级实现细节分开。有很多人们可能不认识的流式库的示例,这是一个常见问题,尤其是对于初学者而言。初学者可能会说“我不需要流式库。我为什么要使用它?”。这是因为他们看不到流。一旦我们使用流式库,我们就会开始到处看到流,但在那之前我们不知道它们在哪里。在深入了解 ZIO Stream原创 2022-03-29 14:41:35 · 819 阅读 · 0 评论 -
Scala ZIO 的 Module Pattern 二 应用
即 Module Pattern 2.0基本介绍使用 Module Pattern 2.0 编写服务比上一章介绍的 1.0 模式容易得多。2.0 中删除了某种程度的间接性,与编写服务时的面向对象方法更为相似。Module Pattern 2.0 与面向对象的服务定义方式有更多的相似之处。我们使用类来实现服务,我们使用构造函数来定义服务依赖;归根结底,我们将类构造函数提升到ZLayer。Service Definition 服务定义 —— 在这个版本中定义服务与之前的版本相比略有变化。我们将获取.原创 2022-03-29 14:35:12 · 192 阅读 · 0 评论 -
Scala 传名参数和传值参数
Scala 传名参数和传值参数传名参数 call-by-name传值参数 call-by-value在Scala中,当参数通过传值调用函数时,它会在调用函数之前计算一次传入的表达式或参数值。但是使用传名调用函数时,在函数内部访问参数时会重新计算传入表达式的值。这里的示例显示了它们的差异和语法。也就说传名参数被函数使用时会被重新计算且可能会被计算多次。传值参数对形式参数所做的更改不会传回给调用者。任何对被调用函数或方法内部形参变量的修改只影响单独的存储位置,不会反映在调用环境中的实参中。此方法也原创 2022-01-13 15:41:07 · 1185 阅读 · 0 评论 -
Scala ZIO 的 Module Pattern 应用
ZIO 的 Module PatternModule Pattern 1.0让我们通过编写一个Logging服务开始学习这种模式:Bundling 捆绑 —— 定义一个为模块提供名称的对象,这可以(不一定)是一个包对象。我们创建一个logging对象,所有的定义和实现都将包含在这个对象中。Service Definition 服务定义 —— 然后我们创建Logging伴生对象。在伴生对象中,我们使用名为Service的trait来定义服务定义。特质是我们定义服务的方式。服务可以是与具有单一责任的一原创 2022-01-12 18:33:47 · 421 阅读 · 0 评论 -
Scala中如何基于ZIO构建可组合的程序(命令行)
设计一个命令行程序大多数命令行程序都是无状态的,这是理所当然的,因为它们可以很容易地集成到脚本中并通过shell管道链接。然而,对于本文,我们需要一个稍微复杂一点的程序。让我们写一个SQL命令行程序。用户将通过文本命令与之交互,根据不同的SQL命令创建不同的程序命令以输出不同的字符,同时我们还希望可以循环输入。对于这些问题中的每一个,我们将创建一个独立的模块,该模块依赖于其他模块,如下所示:基本程序ZIO 应用程序的基本构建块是ZIO[R, E, A]类型,它描述了有效的计算,其中:R 是运原创 2021-12-21 17:11:03 · 948 阅读 · 0 评论 -
Scala中使用SOFA jraft 实现rpc的优化 二
背景继第一版实现Processable宏之后,各方面已经满足需求,也正常使用,并引入进bitlap,使得我们能以方法的形式管理所有Processor对象,而不需要创建太多的类文件。但是细心的人会发现,为了实现这个小小的功能,我们在scala-macro-tools中引入了重量级包"com.alipay.sofa" % "jraft-core" % "1.3.9"。同时为了测试,我们还引入了protobuf-java。特别是sofa这个包,场景有限,当我们不需要使用Processable宏,却被迫引入了原创 2021-12-07 16:17:53 · 317 阅读 · 0 评论 -
Scala中使用SOFA jraft 实现rpc的优化
背景项目基于sofa jraft构建,顺便使用了其自带的rpc服务,协议使用protobuf,使用jraft创建一个rpc服务RaftRpcServerFactory.createRaftRpcServer(serverId.getEndpoint),并新增的rpc接口,这通常需要定义自己的Processor并继承com.alipay.sofa.jraft.rpc.RpcRequestProcessor,然后创建一个实例,使用rpcServer.registerProcessor将实例暴露的rpc注册到原创 2021-12-05 21:04:30 · 2955 阅读 · 0 评论 -
Scala 集成Mybatis和SpringBoot改进
Scala 集成Mybatis和SpringBoot改进Mybatis构造对象缺少默认的无参构造?通常Scala是这么定义实体类或领域对象的case class A(a: Int, b: String)但是这个类在Mybatis中是无效的,因为Mybatis通过反射无参构造来生成对象。1.一种方法是为样例类定义副构造函数case class A(a: Int, b: String) { def this()= { this(0, null) }}以上如果原创 2021-11-26 11:44:38 · 1223 阅读 · 0 评论 -
代码生成之Scala宏编程 类Lombok工具的实现
Scala 中的宏Scala 中的宏要复杂的多,但它对生成代码的方式,提供了更大的灵活性。Scala 宏仍然是用 Scala 写的,一定程序上保证了开发体验的一致。Scala 宏总是要返回一个AST,这需要你对 Scala AST 有一定的了解。但 Quasiquotes 可以帮你轻松生成 AST。import scala.reflect.macros.blackboximport scala.language.experimental.macrosobject Hello { d原创 2021-08-16 11:52:35 · 870 阅读 · 0 评论 -
Scala宏编程实战之宏的注解拓展 - 实现toString,builder,constructor,equalsAndHashCode等
项目地址Intellij IDEA 插件@toString@toString注解用于为Scala类生成toString方法。说明verbose 指定是否开启详细编译日志。可选,默认false。includeFieldNames 指定是否在toString中包含字段的名称。可选,默认true。includeInternalFields 指定是否包含类内部定义的字段。它们不是在主构造函数中。可选,默认true。callSuper 指定是否包含super的toStri原创 2021-07-20 16:48:31 · 323 阅读 · 0 评论 -
Scala 宏注解和IDEA插件
用宏解决一切。配套idea插件也已经开始准备了。优点 少写代码 编译期检查 几乎不会造成运行时错误。注 目前仅有有限的单元测试案例保证,不要上生产。且宏是实验性的,scala3宏设计改变,不可用。只支持2.11 2.12 2.13,基于白盒宏 注解拓展 语法树插值实现,代码简陋。作者1.陌陌 Java研发 ,scala编译器贡献者 scala组织成员作者2.快手 大数据研发 carbondata贡献者项目地址 https://github.com/jxnu-liguobin/scala-mac原创 2021-07-08 10:01:29 · 238 阅读 · 0 评论 -
Aux模式介绍
Aux 模式介绍Aux模式不是一种模式而是一种在每个库中使用的技术,它正在进行某种类型级别的编程,我们需要使用它来克服一个Scala限制。每次我们在Scala中进行类型级计算时,我们都会在另一个类/特质中定义一个类型别名,让我们看一个例子:trait Foo[A] { type B def value: B}例如,在这种情况下,类型级计算的结果将存储在B中。所以让我们定义一些实例:implicit def fi = new Foo[Int] { type B = String翻译 2021-07-02 16:12:48 · 4213 阅读 · 0 评论 -
动态代理与Scala反射/Java反射在Java、Scala、Kotlin中的使用
一、Java反射被代理对象这个也是我使用graphql-java-codegen生成的一个resolver,这里我们需要了解这些,只知道我们有个接口,其中有个方法,需要被动态代理使用即可。public interface QueryResolver { UserTO user(String login) throws Exception;}InvocationHandler实现通常我们在Java中使用,实现InvocationHandler接口。如下:final public cla原创 2021-03-12 12:19:12 · 428 阅读 · 0 评论 -
graphql-java-codegen - 基于模式驱动构建GraphQL应用程序 Scala
基于模式驱动构建GraphQL应用程序 release 4.0.0 发布支持生成Scala代码(预览阶段),新增配置项generatedLanguage := com.kobylynskyi.graphql.codegen.model.GeneratedLanguage.SCALA默认生成Java代码。只需要导入插件。sbtlibraryDependencies += "io.github.jxnu-liguobin" % "graphql-codegen-sbt-plugin" % "4.0.0原创 2020-11-27 18:20:08 · 616 阅读 · 0 评论 -
javap反编译和ASM的基础分析和应用介绍
本文是ASM与CGLIB的简单使用的后续,更多的是提供思路和总结自己觉得比较有用的内容javap 是 Java class 文件分解器,可以反编译(即对 javac 编译的文件进行反编译),也可以查看 java 编译器生成的字节码。用于分解 class 文件。先看看 javap 都有哪些参数(java 8):参数说明-help --help -?输出此用法消息-version版本信息-v -verbose输出附加信息-l输出行号和本地变量表-p原创 2020-09-03 15:09:32 · 733 阅读 · 0 评论 -
应届入职一年总结
本来这篇文章已经写了很久,原意是mentor让我写的,给以后入职的新人一些经验,对以后公司培养校招生做一个参考,后来发生了一些不愉快的事,也没有人提这件事了。现在已经过去了一年,发出来仅供参考,并修改补充了一些。虽然总结是针对自己所在公司的,但是我想对想入行Scala的还是有参考的地方的,发出来仅供参考。入职前的主要经历Java开发实习两个月,主要技术栈 Java/SpringBoot/SpringCloud/Redis/RabbitMQ/DDB/Dubbo测试开发实习四个月,主要技术栈 Ja原创 2020-06-05 11:27:27 · 766 阅读 · 0 评论 -
layim实现 springboot+akka http websocket
俗尘四不像应用。http://im.dreamylost.cn/原创 2020-05-30 02:34:16 · 493 阅读 · 0 评论 -
Scala的Seq集合中的排序实现
原文 https://dreamylost.cn/%E7%AE%97%E6%B3%95/%E7%AE%97%E6%B3%95-Scala%E4%B8%ADSeq%E7%9A%84%E6%8E%92%E5%BA%8F%E5%AE%9E%E7%8E%B0.html对Scala Seq进行排序,常见的是使用sortBy、sorted、sortWith三个函数。其中sortBy实现很简洁,如下 d...原创 2020-04-29 17:13:55 · 1230 阅读 · 0 评论 -
Scala的Seq实现的初步分析
对于Scala Seq集合有常见操作:val platformTypes = Seq("ANDROID", "IOS", "WEB")该Seq类型在顶级包scala中被定义:type Seq[+A] = scala.collection.Seq[A]val Seq = scala.collection.Seq查看Seq源码,实际Seq本身的定义是非常简单的,且Scala的所有集合基...原创 2020-03-31 18:15:48 · 2211 阅读 · 0 评论 -
Scala使用Jedis时,将List集合传入可变长参数
这里集合使用了别名List->JavaList,ArrayList->JavaArrayList def scanKeys(key: String): JavaList[String] = { var jedis: Jedis = null try { jedis = jedisPool.getResource() ...原创 2018-05-28 17:31:37 · 2753 阅读 · 1 评论 -
项目重构03 解决Scala类型与Java类型冲突
package cn.edu.jxnu.base.controller.admin.systemimport org.springframework.stereotype.Controllerimport org.springframework.web.bind.annotation.RequestMappingimport org.springframework.beans.factor...原创 2018-05-16 11:34:05 · 533 阅读 · 0 评论 -
项目重构02 Scala中继承Java类,Spring依赖注入,返回视图等等
1、首先是Java基类控制器package cn.edu.jxnu.base.controller;import java.io.IOException;import java.util.Date;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;...原创 2018-05-16 11:20:46 · 1196 阅读 · 2 评论 -
项目重构01 Scala中,实现Java接口,重写Java方法
1、Java 类,打印环境变量package cn.edu.jxnu.base;import org.springframework.boot.bind.RelaxedPropertyResolver;import org.springframework.context.EnvironmentAware;import org.springframework.context.annotati...原创 2018-05-16 11:00:19 · 2681 阅读 · 0 评论 -
【源码分享】慕课网秒杀系统Scala版
具体链接 https://github.com/jxnu-liguobin/SpringBoot-SecKill-Scala原创 2018-05-21 20:54:02 · 671 阅读 · 1 评论 -
Scala中没有break和continue, 如何退出循环
package cn.edu.jxnu.leetcode.scalaimport util.control.Breaks._/** * Java是指令式风格,Scala是函数式风格。 * 在Scala中,应该尽量适用循环,而是应用函数的方式来处理。 * Scala并没有提供break和continue语句来退出循环,那么如果我们又确实要怎么办呢,有如下几个选项: * 1. 使用Bo...转载 2018-07-19 20:59:57 · 1428 阅读 · 2 评论 -
Scala基础语法、面向对象、面向函数式基础部分的笔记~
Scala基础语法 已得作者同意 CSDN富文本不支持Scala语法,所以不喜欢在博客写、一般都用Git写,需要阅读可以使用CTRL+F查询,因为大多数都是使用了注释进行说明~~可能不准确、或有误、仅供参考。 Scala对象、类、等面向对象基础操作、部分使用了《Scala编程》例子并精简了package cn.edu.jxnu.scala.basic/** * 面向对象的类...原创 2018-12-21 21:43:18 · 281 阅读 · 0 评论 -
Scala中(of class scala.Tuple2)异常,match case匹配失败
使用UntypedAbstractActor时,出现message匹配不上自定义的对象,但是debug时发现类型确实是,而且用了case class,各种方法都不行类结构,最终有效代码:abstract class Master(latch: CountDownLatch) extends UntypedAbstractActor {override def onReceive(mes...原创 2019-02-24 15:25:28 · 1571 阅读 · 0 评论 -
Play2.7+Slick3.0集成Postgresql+Mysql实现多数据源 Restful
1.需要的sbt依赖 "org.scalatestplus.play" %% "scalatestplus-play" % "3.0.0" % Test, "mysql" % "mysql-connector-java" % "5.1.47", "com.typesafe.play" %% "play-slick" % "3.0.0", "com.typesaf...原创 2019-04-04 17:30:49 · 724 阅读 · 0 评论 -
Play framework Scala 使用ajax表单和普通表单的文件上传
1.编写文件上传需要的模板fileupload.scala.html@(title: String)<!DOCTYPE html><html> <head><title>@title</title></head> <body> <h1>普通的文件上传</...原创 2019-03-27 14:49:22 · 343 阅读 · 0 评论 -
Play framework 学习例子大全 Scala实现
学习Play时自己写的,主要参考官网。新手学习时坑比较多,所以写成仓库记录下来了,有完整的注释,仅供参考,有问题提交PR即可。PS:可以先看官网,照着敲,本项目基本覆盖大部分官网提到的知识点。地址https://github.com/jxnu-liguobin/scala-play-learnVersionPlay 2.7 Scala 2.12Main concepts ...原创 2019-04-15 13:28:02 · 932 阅读 · 3 评论 -
二元组箭头表达式背后的语法糖
二元组表达式除了标准的小括号表达方式:("a","b")还可以有箭头表达式:"a"->"b",看看背后是怎么被翻译的:在 Predef里定义了从类型A隐式转换到 ArrowAssoc 的方法: @deprecated("use `ArrowAssoc`", "2.11.0") def any2ArrowAssoc[A](x: A): ArrowAssoc[A] ...转载 2019-05-26 11:34:48 · 280 阅读 · 0 评论 -
Scala 中的空值处理(Option/Json)
Option类型最近简书不能发文章了,一言难尽。。/** * * 下面是常用的Option类型的操作 */ //有一个Option类型,无法估计Option值不存在时,是否有默认类型,但是可以预估到经过函数F后的默认类型,这种情况很适合使用fold(play的表单验证) val opt = Option("ssss") //不清楚opt的默认值,但是知道opt经过F函数...原创 2019-09-08 00:10:47 · 4272 阅读 · 0 评论 -
项目重构00 Java maven项目下,集成Scala混合开发
作为补充我找了个Scala项目,但这不是我重构的了,旨在说明问题,没什么区别。pom文件,这个是我的项目的pom,其他依赖可以不用写。项目地址 github https://github.com/jxnu-liguobin/SpringBoot-Base-System<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="...原创 2018-05-19 12:23:46 · 409 阅读 · 0 评论