- 博客(46)
- 资源 (10)
- 问答 (1)
- 收藏
- 关注
转载 Kafka Streams架构概述
9.1 概述Kafka Streams是一个客户端程序库,用于处理和分析存储在Kafka中的数据,并将得到的数据写回Kafka或发送到外部系统。Kafka Stream基于一个重要的流处理概念。如正确的区分事件时间和处理时间,窗口支持,以及简单而有效的应用程序状态管理。Kafka Streams的入口门槛很低: 你可以快速的编写和在单台机器上运行一个小规模的概念证明(proof-of-concep...
2017-01-31 21:39:13 859
转载 scala 类的继承机制
extends// Scala中,让子类继承父类,与Java一样,也是使用extends关键字// 继承就代表,子类可以从父类继承父类的field和method;然后子类可以在自己内部放入父类所没有,子类特有的field和method;使用继承可以有效复用代码// 子类可以覆盖父类的field和method;但是如果父类用final修饰,field和method用final修饰,则该类是...
2017-01-27 00:56:34 426
翻译 scala 多态方法(POLYMORPHIC METHODS)
Scala 中的方法可以通过类型和值进行参数化。语法和泛型类类似。类型参数用方括号[]括起来,而值参数用圆括号()括起来。
2017-01-24 21:25:10 1561
转载 JackSonUtil
引用Maven库:<!-- Jackson --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.4.3</version> </
2017-01-24 21:03:13 562
转载 scala- object and companion object
转载自:Scala:伴生对象的实现原理参考:Scala object and trait having same namescala API -Singleton ObjectsTraits and classes can have companion objects (an object with the same name as the class/trait).Compan...
2017-01-24 20:20:12 742
转载 Nginx高并发原理
转载自:初步探索Nginx高并发原理首先要明白,Nginx 采用的是多进程(单线程) & 多路IO复用模型。使用了 I/O 多路复用技术的 Nginx,就成了”并发事件驱动“的服务器。多进程的工作模式1、Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程。2、接收来自外界的信号,向各worker进程发送信号,每个进程都有可能来处理这个连接。3、 ma...
2017-01-24 20:18:52 1315
转载 scala trait
将trait作为接口使用// Scala中的Triat是一种特殊的概念// 首先我们可以将Trait作为接口来使用,此时的Triat就与Java中的接口非常类似// 在triat中可以定义抽象方法,就与抽象类中的抽象方法一样,只要不给出方法的具体实现即可// 类可以使用extends关键字继承trait,注意,这里不是implement,而是extends,在scala中没有imple...
2017-01-24 19:40:12 714
转载 Kafka文件存储机制
1.前言一个商业化消息队列的性能好坏,其文件存储机制设计是衡量一个消息队列服务技术水平和最关键指标之一。下面将从Kafka文件存储机制和物理结构角度,分析Kafka是如何实现高效文件存储,及实际应用效果。2.Kafka文件存储机制Kafka部分名词解释如下:Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。Topic:一类消息,例...
2017-01-24 00:51:50 248
原创 日志打印规范
code为-500的日志要打印异常堆栈, 除此之外不能使用-500的错误码 参数校验错误, 需要给出具体的参数名. 使用MessageFormat实现参数精细化. aop切面的try catch异常捕获不能是catch exception, 而应该是catch throwable.防止出现栈溢出等Error 而无法捕获. 自定义业务异常BusinessException, 需要继承RuntimeException, 而不是继承Exception. 非预期异常需要接入告警. 禁止打印过长日志...
2017-01-23 04:14:32 252
转载 kafka消息格式——Commit Log
摘要Kafka作为一个消息中间件系统,面临的首要问题就是消息如何持久化,如何方便地进行读写和解析。本文将就Kafka的消息存储问题开一个头,后续将会对重要的代码部分一一讲解。Kafka的消息概念,首先我们在此谈论的不是网络传递中的消息,而更多偏向于记录的意思,也就是消费者和生产者所在意的实际对象。消息是Kafka造作的最小单元,并不允许更改消息的实际内容,一条消息本质上是一个键值可缺省的键值对。消...
2017-01-23 04:04:35 2223
转载 scala 泛型的6种使用方式
/** * 1,scala的类和方法、函数都可以是泛型。 * * 2,关于对类型边界的限定分为上边界和下边界(对类进行限制) * 上边界:表达了泛型的类型必须是"某种类型"或某种类型的"子类",语法为“<:”, * 下边界:表达了泛型的类型必须是"某种类型"或某种类型的"父类",语法为“>:”, * * 3, "<%" :view bounds可
2017-01-23 03:39:02 1307
转载 scala class
主构造器Scala 声明主构造函数的过程和 Java 区别很大; Java 中构造器函数的定义一目了然, 由于Scala 的设计者认为每敲一个键都是珍贵的, 所以把 Scala 主构造器的定义和类的定义交织在一起, 导致 Scala 的主构造器没法像 Java 的构造器那样清晰了。Scala 之父 Martin Odersky 建议我们这样来看待主构造器, "在 Scala 中, 类也接受参...
2017-01-22 23:32:10 372
转载 分布式缓存重建并发冲突问题
什么是分布式缓存重建并发冲突问题?很简单,多个缓存服务实例提供服务,发现缓存失效,那么就会去重建,这个时候回出现以下几种情况: 多个缓存实例都去数据库获取一份数据,然后放入缓存中 新数据被旧数据覆盖 缓存 a 和 b 都拿了一份数据,a 拿到 12:00:01 的数据,b 拿到 12:00:05 的数据 缓存 b 先写入 redis,缓存 a 后写入。 以上问题有多重解决方案,如: 利用 hash 分发 相同商品分发到同一个服务中,服务中再用队列去重建 但是这就
2017-01-21 15:06:00 6073
转载 scala 下划线用法
概述下划线最常用的地方是:scala中要显式指定初始值。可以用_让编译器自动帮你设置初始值。private var reporterThread: Thread = _1、作为“通配符”类似Java中的*。如import scala.math._2、可变参数序列:_*作为一个整体,告诉编译器你希望将某个参数当作参数序列处理!例如val s = sum(1 to 5:_*)...
2017-01-20 16:59:38 393
转载 scala-传名函数和传值函数
scala函数的参数可以是一般的数值,也可以是一个函数。例如:scala> def time() = { | println("Getting time in nano seconds") | System.nanoTime | }time: ()Longscala> def delayed(t: Long)={ | println(...
2017-01-20 01:12:18 286
原创 MQ消息堆积的解决和预防方案
MQ消息堆积的原因消息堆积即消息没及时被消费,是生产者生产消息速度快于消费者消费的速度导致的。 消费者消费慢可能是因为:本身逻辑耗费时间较长、阻塞了。预防方案增加消费者 关注单个消费者消费能力的上限,提升单个消费者的处理能力 mq的消息堆积的监控告警...
2017-01-19 13:03:16 2162
翻译 scala.Function1和scala.Function2
Function1带一个参数的方法,声明时,它需要两个泛型参数,第一个是传入的数据类型,第二个表示返回的数据类型,Function1是 trait ,它有一个apply方法,用来对输入参数进行处理了,使用Function1,必须实现apply接口object Main extends App {val succ = (x: Int) => x + 1val anonfun1 =...
2017-01-19 03:03:13 1269
翻译 kafkaProducer
kafkaProducer概述kafkaProducer是由一池Buffer space(即缓冲池)组成的,buffer space会保持还没提交到server的record,同时background I/O线程把这些record转换成request并传输到cluster中。使用后如果没有关闭producer会导致resource溢出。kafkaProducer的send()方法是异步的,当调用这...
2017-01-19 02:29:43 608
翻译 scala introduce
这篇文档给予了scala语言及其编译器的快速介绍。假设阅读者具有面向对象编程,尤其是在java上的经验。使用hello world作为第一个例子object HelloWorld { def main(args: Array[String]) { println("Hello, world!") }}Java程序员应该熟悉这个程序的结构:它包含一个名为main的方法,...
2017-01-19 00:20:42 630
转载 ref属性用于获取真实的节点
获取真实的DOM节点组件并不是真实的 DOM 节点,而是存在于内存之中的一种数据结构,叫做虚拟 DOM (virtual DOM)。只有当它插入文档以后,才会变成真实的 DOM 。根据 React 的设计,所有的 DOM 变动,都先在虚拟 DOM 上发生,然后再将实际发生变动的部分,反映在真实 DOM上,这种算法叫做 DOM diff ,它可以极大提高网页的性能表现。但是,有时
2017-01-18 23:39:57 7670 1
转载 双指针扩张法+排列组合解抓捕孔连顺
题目描述:我叫王大锤,是一名特工。我刚刚接到任务:在字节跳动大街进行埋伏,抓捕恐怖分子孔连顺。和我一起行动的还有另外两名特工,我提议1. 我们在字节跳动大街的N个建筑中选定3个埋伏地点。2. 为了相互照应,我们决定相距最远的两名特工间的距离不超过D。我特喵是个天才! 经过精密的计算,我们从X种可行的埋伏方案中选择了一种。这个方案万无一失,颤抖吧,孔连顺!……万万没想到,计划还是失败了,孔连顺化妆成小龙女,混在cosplay的队伍中逃出了字节跳动大街。只怪他的伪装太成功了,..
2017-01-18 16:51:57 416
翻译 Transactions in Kafka
本文翻译Confluent官网,原文地址:https://www.confluent.io/blog/transactions-apache-kafka/ 在之前的博客文章(见尾部链接)中,我们介绍了ApacheKafka的exactly once语义,介绍了各种消息传输语义,producer的幂等特性,事务和Kafka Stream的exactly once处理语义。现在我们将从上篇文章结尾的地...
2017-01-18 15:13:56 1897
转载 fetch api
Making fetch requestsEDITA basic fetch request is really simple to set up. Have a look at the following code:var myImage = document.querySelector('img');fetch('flowers.jpg').then(function(res
2017-01-18 10:12:05 452
转载 TCP协议中的三次握手四次挥手以及11种状态转换
准备工作:服务器必须准备好接受外来的连接。这通常通过调用socket,bind和listen这三个函数来完成。我们称之为被动打开。第一次握手:客户端通过调用connect发起主动打开。客户端向服务器发出连接请求的TCP报文段,其TCP首部中的同步比特SYN置为1,并TCP首部中序号seq设置为x(TCP规定SYN报文段不能携带数据,但是要消耗一个序号),表明要转送数据时初始序列号是x。通常SYN分节不携带数据,其所在IP数据报只含有一个IP首部,一个TCP首部。
2017-01-18 00:41:21 443
转载 某生鲜电商平台的库存扣减方案
目录一、 问题二、 下单的步骤三、 什么时候进行预占库存?四、 分析五、 重复下单问题六、 解决办法一、 问题一件商品只有100个库存,现在有1000或者更多的用户来购买,每个用户计划同时购买1个到几个不等商品。如何保证库存在高并发的场景下是安全的?(1)不多发(2)不少发二、 下单的步骤(1)下单(2)下单同时预占库存(3)支付(4)支付成功真正减扣库存(5)取消订单(6)回退预占库存三、 什么时候进行预占库存?(1)
2017-01-18 00:34:45 654
转载 物理删除、逻辑删除以及逻辑删除保留唯一索引的方案
删除数据库记录是一个非常常见的需求,当数据失去价值时,我们便会删除它,但是如果操作不当,往往就会把一些有价值的数据误删掉,造成重要数据的丢失,合理采用删除方式才能更好地利用数据资源,下面介绍几种常用的删除方式。删除方式物理删除物理删除就是直接从数据库中删除一条或多条记录,将数据从磁盘上擦除,可以使用DELETE FROMSQL语句实现,这种方式产生的后果就是记录永久性删除,无法找回,一般适用于小型或数据重要性不高的项目,可以提高数据库资源利用率。物理删除方式是一种最简单最基本的数据删除方式,这里
2017-01-18 00:15:30 784
原创 稳定性保障思维导图
系统风险点梳理数据库是否存在慢查询 数据库磁盘容量是否足够 数据库负载是否在高位缓存缓存命中率是否合理 是否存在缓存穿透问题 是否存在缓存击穿问题 缓存容量是否足够 缓存负载是否在高位服务是否接入熔断 是否接入限流 是否存在读,写请求放大问题 是否存在panic问题降级依赖的服务与接口,是否有容错降级处理 目前的降级设计是否合理热点针对热点问题的方案设计是否合理 是否对热点数据进行了压测压测接口压测预期值评估是否合理,是否考虑了活动的突发流量以..
2017-01-17 23:50:30 930
转载 isMounted is an Antipattern
https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html主题 ECMAScriptAs we move closer to officially deprecating isMounted, it's worth understanding why the function is
2017-01-16 19:02:40 325
转载 Spark Streaming运行流程及源码解析
源码中的一些类这里先列举一些源码中的类,大家先预热一下。StreamingContext:这是Spark Streaming程序的入口,提供了运行时上下文环境DStream:是RDD在Spark Streaming中的实现,是连续的RDD(相同类型)序列,表示连续的数据流JobScheduler:生成和调度jobDStreamGraph:保存DStream之间的依赖关系JobGenerator:根据DStream依赖生成jobReceiverTracker:Driver端用于管理
2017-01-15 09:56:37 1017
转载 长列表分页缓存策略
通常,对于长列表加载的场景,都需要进行分页, 如最近的世界杯体育垂站项目中的赛程页,评论流,直播流。而为了提高分页加载的性能,往往需要对分页进行缓存。 下面总结对两种常见的分页缓存的策略, 适用场景以及各自的优缺点。策略一: 直接对分页结果缓存顾名思义,就是直接缓存每次分页查询的结果。适用场景 列表长度无法提前预知 数据和排序不经常变更 优点: 实现简单 通常能获得不错的性能。由于直接缓存分页的结果,因此只需一次IO就能把数据...
2017-01-13 20:40:25 15781
转载 服务端性能优化–最大QPS推算及验证
影响QPS(即吞吐量)的因素有哪些?每个开发都有自己看法,一直以为众说纷纭,例如:QPS受编程语言的影响。(PHP是最好的语言?) QPS主要受编程模型的影响,比如不是coroutine、是不是NIO、有没有阻塞? QPS主要由业务逻辑决定,业务逻辑越复杂,QPS越低。 QPS受数据结构和算法的影响。 QPS受线程数的影响。 QPS受系统瓶颈的影响。 QPS和RT关系非常紧密。 more…嗯,这些说法好像都对,但是好像又有点不对,好像总是不太完整,有没有一个系统点的说法能让人感觉一听就豁
2017-01-13 20:13:03 993
转载 Java异常(exception)性能优化
在Java中,构造异常对象是"十分"耗时的,其原因是在默认情况下,创建异常对象时会调用父类Throwable的fillInStackTrace()方法生成栈追踪信息,JDK中的源码如下:public synchronized Throwable fillInStackTrace() { if (stackTrace != null || backtrace != null /* Out of protocol state */ ) { .
2017-01-13 19:57:15 344
转载 JSX 的基本语法规则
JSX 的基本语法规则:遇到 HTML 标签(以 开头),就用 HTML 规则解析;遇到代码块(以 { 开头),就用 JavaScript 规则解析。三、JSX 语法上一节的代码, HTML 语言直接写在 JavaScript 语言之中,不加任何引号,这就是 JSX 的语法,它允许 HTML 与 JavaScript 的混写(查看 Demo02 )。
2017-01-13 14:54:11 3437
转载 Kafka Producer异步发送的流程
Producer API入门 ProducerRecord 说明异步发送流程 2.1 用户线程调用send将record压缩到BufferPool中 2.2 发送调度Producer设计说明Producer Configuration1. Producer API入门:KafkaProducer是一个发送record到Kafka Cluster的客户端API。这个类线程安全的。在...
2017-01-13 12:53:42 9583
转载 js插件的经典写法与总结
之前写了一篇关于js插件的方法,可以传入参数,当时不能够拓展方法,而且模式也不是很好,虽然能够满足一定的业务要求。下面是对js插件的完善,可以实现参数传入,方法拓展,链式操作,设计模式更加清晰。[html] view plain copy print?> html> head> title>js插件测试title>
2017-01-09 23:44:12 493
转载 异地多活场景下的数据同步之道
在当今互联网行业,大多数互联网从业者对"单元化"、"异地多活"这些词汇已经耳熟能详。而数据同步是异地多活的基础,所有具备数据存储能力的组件如:数据库、缓存、MQ等,数据都可以进行同步,形成一个庞大而复杂的数据同步拓扑。本文将先从概念上介绍单元化、异地多活、就近访问等基本概念。之后,将以数据库为例,讲解在数据同步的情况下,如何解决数据回环、数据冲突、数据重复等典型问题。1 什么是单元化如果仅仅从"单元化”这个词汇的角度来说,我们可以理解为将数据划分到多个单元进行存储。"单元"是一个抽象的概念,.
2017-01-09 13:15:54 923
转载 Redis五大数据结构使用场景
Redis是一种基于键值对的NoSQL数据库,它的值主要由string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)五种基本数据结构构成,除此之外还支持一些其他的数据结构和算法。key都是由字符串构成的,那么这五种数据结构的使用场景有哪些?一起来看看!一 字符串字符串类型是Redis最基础的数据结构,字符串类型可以是JSON、XML甚至是二进制的图片等数据,但是最大值不能超过512MB。1.1 内部编码Redis会根据当前值的类型和长度决定使用哪种内部编
2017-01-09 11:06:35 14034
转载 Spring 参数校验的异常处理
对于不同的参数解析方式,Spring 抛出的异常也不同,而且这些异常没有继承关系,异常的内部也各不相同,只能对每种异常单独处理。感觉这块地方 spring 没有设计好,处理起来比较麻烦。跟参数相关的异常主要有三个需要手动处理。org.springframework.validation.BindException org.springframework.web.bind.MethodArgumentNotValidException javax.validation.ConstraintViol
2017-01-09 02:28:07 1174
原创 spark2.3源码分析之RDD算子combineByKey
概述combineByKey通过使用聚合函数,把键值对中每一个key对应的value进行聚合,将JavaPairRDD[(K, V)]转换成JavaPairRDD[(K, C)]的结果,C是聚合后的类型。用户需要提供以下三个函数:createCombiner:在一个partition中创建每个key对应的累加器的初始值。 mergeValue:在一个partition中,将同一个ke...
2017-01-05 22:27:16 334
原创 JavaRDDLike.mapPartitions方法
spark java api调用mapPartitions方法的例子如下:package com.dsinpractice.spark.samples.core;import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.api.java.Java...
2017-01-05 22:22:58 1464
viewpager实现页面导航之三
2015-07-22
viewpager与预编译的点布局实现页面导航效果
2015-07-20
导入第三方类库却出现the importXXX can not be resolved
2015-06-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人