盖娅计划

加强彼此联系,努力实现盖娅星系!


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

JAVA IO 操作

发表于 2019-10-14 | 更新于 2021-01-21 | 分类于 JAVA

概要

在上一节我们介绍了操作系统的IO操作,详细描述了网络IO的5种模式。每种模式主都有2个角色,分别是系统内核和用户程序,而上节主要是以系统内核的角度来定义描述这5种模式。本章将从用户程序的角度再来说说IO交互模式。这里我们选择的用户程序是我们熟知的JVM虚拟机,着重介绍JAVA是如何运用操作系统提供的IO模型实现自己的BIO,NIO,AIO操作的。

由于涉及知识太多且作者能力有限,所以本文主要写作方式是以点盖面,列出作者认为主要的知识点,在整体逻辑上可能会比较碎。

阅读全文 »

再谈阻塞与非阻塞,同步与异步

发表于 2019-10-14 | 更新于 2021-01-21 | 分类于 JAVA

前言

作为程序猿经常会听到阻塞非阻塞,同步异步的概念,前辈也经常告诫我们这些概念是经常会使用到的,面试经常会问。网上的经典解释是以一个烧开水的例子说明的,内容如下:

老张烧水,水壶放到炉子上,然后专心等待水烧开——同步阻塞
老张烧水,水壶放到炉子上,然后去客厅看电视,时不时去看看水有没有烧开——同步非阻塞
老张烧水,使用响水壶,水放到炉子上后等待水壶响——异步阻塞
老张烧水,使用响水壶,水放到炉子上后就去客厅看电视,等待水壶响后提壶——异步非阻塞

但我觉得解释的十分别扭,因此自己做了些研究并有了些心得,在这里与大家分享一下。

概要

本文首先提出这四个词是形容词,理解必须包含上下文。它们多用来形容网络I/O模型。然后对linux 5种网络I/O模型进行了介绍从中抽象概念。作者认为阻塞和非阻塞主要是形容流程的,同步异步是形容交互模式的。请求方的流程因为数据请求而被阻塞则这种交互模式是同步的,反之没有因为数据请求而阻塞流程的交互模式是异步的。最后作者阐述了对使用烧开水来解释这四个词的看法。

阅读全文 »

elasticsearch解析器插件开发介绍

发表于 2019-10-02 | 更新于 2021-01-21 | 分类于 elasticsearch

概要

本文主要介绍如何开发ES解析器插件。在文章中会介绍一个自定义解析插件的主要过程。该插件的核心功能是可以将词”abcd”分为[“abcd”,”bcd”,”cd”,”d”]。源码地址在此。由于本次开发的是解析器插件,因此本文会顺带介绍ES解析器的基本原理,核心功能chartFilter,Tokenzier,TokenFilter如何实现。

在开始前还需要说明的是,根据高人指点,上篇文章中提四种分词方案即将”abcd”分词为[“abcd”,”bcd”,”cd”,”d”],其实使用ES自带的edge_ngram tokenizer加reverse token filter就可实现相似的功能。即将”abcd”分词为[“a”,”ba”,”cba”,”dcba”],搜索时借助prefix查询就可以完成字符串包涵的搜索需求。这里还有一个需要注意的点是,使用prefix查询时需要自行将查询词逆序。当然也可以使用match_phrase_prefix使用analyzer配置只带reverse token filter的解析器对查询词进行反转。使用match_phrase_prefix还有个好出会自行根据出现频率排序。

阅读全文 »

Spark Launcher(v 2.3.2)

发表于 2019-09-14 | 更新于 2021-01-21 | 分类于 spark

概述

Spark Launcher的主要有两个功能:1、通过JAVA程序启动Spark任务。2、监控Spark任务的运行情况,可以根据任务状态等的变法设置不同的执行逻辑同时提供主动停止Application的功能。
通常发布spark任务是通过shell运行spark-submit命令。但是在实际生产活动中存在业务直接启动Spark任务的情况。对于这种情况目前的做法是Java使用Runtime.getRuntime().exec(cmd)的方式运行spark-submit。这种方式虽然可以正常启动spark任务,收集spark-submit产生的日志,但是容错率低,不容易使用程序监控spark任务的状态,主动停止任务。对于这种情况可以使用Spark官方封装的任务启动器——Spark Launcher。虽然其底层也是通过JAVA启动子进程发布Spark任务,但是程序启动了监听spark application的线程,可以在任务状态或信息发生变化时触发相应的listenter。
本文首先用一个例子展示了如何用JAVA启动一个Spark任务,监控其运行状态以及如何主动停止任务。然后着重分析了启动任务的SparkLauncher、监控任务的ChildProcAppHandle、接收任务信息的LauncherServer、发送任务信息的LauncherBackend的代码逻辑。

阅读全文 »

elasticsearch中字符串包含查询

发表于 2019-08-23 | 更新于 2021-01-21 | 分类于 elasticsearch

概要

本文从业务需求出发,提出elasticsearch中字符串包含查询的业务场景。然后介绍了解决这一问题的4种方法并提出预测结果。这四种方式是在使用不同分词方式的基础上运行term、queryString、Wildcard、prefix查询实现的。接着通过实验验证预测结果。最后分析得出结论,使用prefix查询并结合本人开发的rockstone分词器的搜索效率最高且数据膨胀率可控。

阅读全文 »

spark学习————spark架构

发表于 2019-06-30 | 更新于 2021-01-21 | 分类于 spark

概述

本文首先从spark对MapReduce的改进开始介绍spark的主要特点。然后罗列了spark的重要概念。接着从集群结构,编程模型以及计算模型概述spark。最后列举spark代码实现的核心模块及其功能概述。本文参考的spark版本为v2.1.0。

阅读全文 »

降维算法介绍

发表于 2019-04-09 | 更新于 2021-01-21 | 分类于 AI

简介

特征工程直接决定机器学习的质量。在采用独热编码后,特征会成指数型增长,比如做文本分类时每个词都是1个特征,这样特征通常会有上万个,这时就需要使用降维算法减少特征个数,加快学习效率。降维算法主要可以分为:特征抽取和特征选择。

阅读全文 »

JAVA注解

发表于 2019-03-08 | 更新于 2021-01-21 | 分类于 JAVA

介绍

JAVA annotation(注解)的官方解释是:

Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。

阅读全文 »

JAVA函数式接口及lambda表达式

发表于 2019-03-08 | 更新于 2021-01-21 | 分类于 JAVA

概要

本文从构造线程的新方式出发,首先介绍了函数式接口,然后介绍了lambda表达式,接着分析了JDK提供的函数式接口,着重介绍了Function接口。最后稍带介绍了闭包和方法引用。

阅读全文 »

JAVA BIO 与 NIO 简介

发表于 2019-03-08 | 更新于 2021-01-21 | 分类于 JAVA

概述

I/O操作是系统中十分基础且重要的操作,同样也很容易产生性能瓶颈。本文以网络IO为使用场景,首先介绍IO是什么以及Linux常见的5中IO模型,然后介绍java BIO,分析了它的不足,最后介绍NIO是如何解决BIO的问题及NIO的Reactor模式。

阅读全文 »
1…456
Phoenix Luo

Phoenix Luo

骆潇龙开脑洞的地方

56 日志
13 分类
42 标签
© 2022 Phoenix Luo 京ICP备19007490号
由 Hexo 强力驱动 v3.8.0
|
主题 – NexT.Pisces v6.7.0
本站总访问量 次 | 有人看过我的博客啦