首页 文章 精选 留言 我的

精选列表

搜索[scala],共1922篇文章
优秀的个人博客,低调大师

聊聊JavaScript和Scala的表达式 Expression

先看下这段神奇的Java代码: public static void main(String[] args) throws Exception { doSomethingMagic(); System.out.printf("2 + 2 = %d", 2 + 2); } 执行结果:2 + 2 = 5 那么doSomethingMagic到底做了什么神奇的事情呢?先看代码: private static void doSomethingMagic() throws Exception { Class cache = Integer.class.getDeclaredClasses()[0]; Field c = cache.getDeclaredField("cache"); c.setAccessible(true); Integer[] array = (Integer[]) c.get(cache); array[132] = array[133]; } 所以这个例子其实包含了Java中整型类型Integer的一个知识点。 可能有的朋友对于doSomethingMagic里面的代码有点摸不着头脑,让我们先查看上图第17行 2 + 2反编译出来的代码: 编辑器将2+ 2的值先计算出来,等于4。最后System.out.println打印出来的值,实际上是Integer.valueOf(4)的返回值。 那么我们就查看JDK里Integer.valueOf的实现: 上面的实现代码,从830行到832行,逻辑非常清楚:如果valueOf的参数i在IntegerCache.low和IntegerCache.high之间,即[-128, 127]的闭区间,则直接从IntegerCache这个缓存区域里返回。只有当输入参数i不在[-128,127]区间内,才执行代码832,基于输入参数i创建一个新的Integer实例。 带着这个理念,我们再看doSomethingMagic就清楚多了。这个方法通过Java反射将上图IntegerCache的成员cache设置成可访问:setAccessible(true), 然后将IntegerCache的第132个元素的值用第133个元素的值覆盖。 我们从Eclipse调试器里发现,Integer cache里第132个元素的值为4,第133个元素的值为5。本来Integer.valueOf方法,对于输入4,从Integer cache里返回第132个元素的值,即4。现在这个元素的值被第133个元素即5覆盖了,所以最后得到了 2 + 2 = 5。 用一句话概括这个场景: 2 + 2 = 4 = Integer.valueOf(4) = 5 ( 因为4在Integer cache里对应的记录已经被我们的代码显式替换成了5)。 要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

优秀的个人博客,低调大师

每天学一点Scala之 匿名函数

1、定义 如果一个函数没有名字的话,就是匿名函数了。只使用一次,并没有多次调用 2、匿名函数的使用场景 将匿名函数,直接赋值给变量 将匿名函数,作为函数的参数进行使用 3、匿名函数的几种表现形式?或者呈现形式 没有参数输入,没有返回值的匿名函数 有参数输入,没有返回值的匿名函数 有参数输入,有返回值的匿名函数 4、匿名函数的语法规则,有两种形式吧:[一种有输入参数,一种没有输入参数] (参数名:参数类型) =>函数体 函数体 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package com.xej.learning.nimingFunction object AnonymousFunction{ def main(args : Array[String]) : Unit = { //对于有参数输入的匿名函数,调用时,同样要用参数输入哦 kafkaName( "apachekafka" ) println( "--->:\t" +flumeName( "apacheflume" )) sparkName //匿名函数的使用场景--1,作为参数,传入给高阶函数 //下面,map,foreach里,就是匿名函数 Array( 3 , 2 , 1 , 5 ).map{(x : Int) = >x+ 2 }.foreach(x = >print(x+ "" )) println( "\n----------------------------------------------------" ) Array( 3 , 2 , 1 , 5 ).map{ _ + 1 }.foreach(x = >print(x+ "" )) } //匿名函数的使用场景--2,直接赋值给变量 //参数:有参数输入,函数体:无返回值,形式的匿名函数//函数体里,可能有很多条语句哦, //只是最终结果,是有返回值的 val kafkaName = (name : String) = >println( "--kafka-->" +name) //参数:有参数输入,函数体:有返回值,形式的匿名函数 val flumeName = (name : String) = > "--flume-->" +name //参数:无参数输入,函数体:无返回值,形式的匿名函数 val sparkName = println( "----thisisspark------" ) } spark源码,marathon源码中,都大量使用了匿名函数 下面是marathon源码中的样例 本文转自故新51CTO博客,原文链接:http://blog.51cto.com/xingej/1962419,如需转载请自行联系原作者

优秀的个人博客,低调大师

Scala机器学习》一一3.2 理解Spark的架构

3.2 理解Spark的架构并行化是将工作负载划分为在不同线程或不同节点上执行的子任务。下面介绍Spark实现并行化的原理,以及它如何管理子任务的执行和子任务之间的通信。3.2.1 任务调度Spark工作负载的划分由弹性分布式数据集(Resilient Distributed Dataset,RDD)的分区数决定,这是Spark的基本抽象和管道结构。RDD是一种可并行操作的、不可变元素的分区集合。具体细节可能取决于Spark的运行模式,图3-2为Spark任务/资源调度的示意图。 图3-2 通用的Spark任务调度示意图。尽管在图中没有明确标识,Spark Context通常会在端口4040上打开一个HTTP UI(并发情形将打开4041、4042等),在任务执行期间会一直这样。Spark Master UI的端口通常是8080(虽

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册