Russ Xia Blog

身处寒夜,把握星光。

Scala入门学习笔记(二)

Scala入门学习笔记

Scala基础 Twitter提供的 Scala School 类 Scala中默认缺省的访问级别是public的。 如果没有任何显式的返回语句,Scala将返回方法中最后一个计算得到的值。 Scala中的方法参数,都是val的。如果想在方法内给参数重新赋值,会导致编译失败。 class ChecksumAccumulator { private var sum = 0 ...

Scala入门学习笔记(一)

Scala入门学习笔记

Scala基础 Twitter提供的 Scala School 变量 定义不可变量:val, val类似于Java中的final变量。与之对应的var类似于Java中的非final变量。Scala自带类型推断(type inference), scala> val a = 2 a: Int = 2 scala> var b = 3 b: Int = 3 scala>...

PySpark中遇到过的问题合集

PySpark中遇到过的问题合集

TypeError: ‘Builder’ object is not callable Spark structured streaming 参考PySpark时,quick-start中的一个demo运行失败,报错。 """SimpleApp.py""" from pyspark.sql import SparkSession logFile = "YOUR_SPARK_HOME/RE...

Dubbo源码笔记(二)

Dubbo源码学习笔记

dubbo spi: 官方文档 dubbo框架设计:官方文档 dubbo源码分析:官方文档 服务发现 Dubbo服务引用分两种:饿汉式和懒汉式,默认使用的时懒汉式。第一种饿汉式在Spring容器初始化时,调用ReferenceBean的afterPropertiesSet方法时引用服务;第二种懒汉式,在对应服务被注入到其他类中时,Spring会调用getObject()方法...

Dubbo源码笔记(一)

Dubbo源码学习笔记

官方文档目前的内容时基于2.6.x版本的,我下载的源码是2.7.2的。大体内容以官方文档为主,这里记一些官方文档不全的/自己看文档时迷惑过的内容。 dubbo spi: 官方文档 dubbo框架设计:官方文档 dubbo源码分析:官方文档 服务导出 Dubbo以ServiceConfig, ReferenceConfig 为中心,对应的Spring入口就是ServiceB...

Dubbo反序列化抛出的空指针异常问题

Dubbo线上踩坑问题排查记录

起因 线上出现了一段空指针异常,根据异常栈和经验,第一时间的反应是消费者段在发序列化的时候报错了,觉得应该是返回值在反序列化时出问题。但是前前后后检查了好几次返回值,都没有发现有什么有问题的地方。下面是异常堆栈: java.lang.NullPointerException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(N...

Kafka的三种消息投递语义

Kafka的三种消息投递语义以及如何保证幂等

Kafka的三种消息投递语义 Kafka支持的三种消息投递语义: at most once:至多一次,消息可能会丢,但不会重复 at least once:至少一次,消息肯定不会丢失,但可能重复 exactly once:有且只有一次,消息不丢失不重复,且只消费一次。 at least once 和 at most once 消息的投递和消费分为两端:producer-br...

Kafka+Flume+HDFS的实时采集

Kafka+Flume+HDFS的实时采集,组件配置

准备 zookeeper: https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/ kafka: https://www.apache.org/dyn/closer.cgi?path=/kafka/2.2.0/kafka_2.11-2.2.0.tgz flume: http://www.apache.org/dy...

CountDownLatch、CyclicBarrier与Semaphore

Java中的信号量及其源码解析

CountDownLatch CountDownLatch可以实现多线程之间的计数功能,并实现了阻塞功能。其内部通过实现了AQS的java.util.concurrent.CountDownLatch.Sync保证线程之间同步修改count值。 在构造CountDownLatch的时候,传入计数值,并在构造函数内完成sync的初始化。 public CountDownLatch(int ...

Java线程池ThreadPoolExecutor详解

线程池ThreadPoolExecutor设计架构&源码分析

为什么要使用线程池 线程是系统资源,多线程技术主要是为了合理利用cpu的并行处理能力(cpu的快速切换以及多核心),但是创建和销毁线程的开销还是比较耗费时间的,如果系统频繁地创建和销毁线程,那么会造成资源的大量浪费(线程也是一种计算机资源)。 线程池技术就是为了减少线程的创建和销毁,降低资源消耗,提高响应速度。而且线程池的引入,也为管理线程提供了入口,我们可以为线程池指定上限(当然也有无界...