java技术圈 为您找到相关结果 582

Antlr4简易快速入门

1. 简介 Antlr (ANother Tool for Language Recognition) 是一个强大的跨语言语法解析器,可以用来读取、处理、执行或翻译结构化文本或二进制文件。它被广泛用来构建语言,工具和框架。Antlr可以从语法上来生成一个可以构建和遍历解析树的解析器。2. 谁在使用HiveSparkOraclePrestoElasticsearch3. 常见的语法分析器AntlrJavaccSqlParser (位于Alibaba的Druid库中)其中Antlr和Javacc都是现代的语法解析器,两者都很优秀,其中Antlr要更胜一筹。而SqlParser只能解析sql语句,功能比较单一。 :本人基于Antlr和SqlParser分别写了一套elasticsearch-sql...阅读全文

博文 2020-09-16 09:35:11 知乎

JVM1.8参数大全

前言碎语 JVM内存模型,java GC垃圾内存回收,Jvm性能调优等等是个老生常谈的话题,故将官方JVM参数详情直译(Google翻译)记录在此,以备做jvm参数调优之时方便查询,同时给大家提供便利 jvm1.8参数详情: -Xcomp 在第一次调用时强制编译方法。默认情况下,客户端VM(-client)执行1,000个已解释的方法调用,Server VM(-server)执行10,000个已解释的方法调用以收集有效编译的信息。指定该-Xcomp选项会禁用已解释的方法调用,从而以牺牲效率为代价来提高编译性能。 您还可以使用该-XX:CompileThreshold选项在编译之前更改已解释的方法调用的数量。 -Xloggc:filename 设置应将重定向的GC事件信息重定向到的文件以进行日...阅读全文

博文 2020-07-28 06:52:44 jvm性能调优速查手册 | KL博客

MapReduce:实现join的几种方法_sofuzi的博客

reduce side join reduce side join是一种最简单的join方式,其主要思想如下: 在map阶段,map函数同时读取两个文件File1和File2,为了区分两种来源的key/value数据对,对每条数据打一个标签> (tag),比如:tag=0表示来自文件File1,tag=2表示来自文件File2。即:map阶段的主要任务是对不同文件中的数据打标签。> 在reduce阶段,reduce函数获取key相同的来自File1和File2文件的value list, 然后对于同一个key,对File1和File2中的数据进行join(笛卡尔乘积)。即:reduce阶段进行实际的连接操作。 map side join 之所以存在reduce side join,是因为在m...阅读全文

博文 2021-01-12 08:20:45 CSDN博客

ES多个字段group by操作_-阿布-的博客

以下操作基于es6.8 第一种方式 这种方式查询出来的数据不是扁平化的,而是一层套一层的,比如字段一套字段二。 GET 索引name/索引type/_search { "size": 0, "aggregations": { "字段一的结果命名": { "terms": { "field": "要group的字段" }, "aggregations": { "字段二的结果命名": { "terms": { "field": "要group的字段" } } } } } } 结果,one下面的buckets里面是two,每个two下面有自己的bukets,就是two的值和count。 java代码实现 public void demo1(RestHighLevelClient client) {...阅读全文

博文 2022-07-11 12:31:54 CSDN博客_es多字段聚合

错误:Unable to locate Spring NamespaceHandler for XML schema_裴大帅2020_新浪博客

一、错误背景: 在java程序中加入了spring的成分,然后使用mvn clean package -Dmaven.test.skip=true进行打包,打包完毕后通过java -jar xx.jar执行程序,结果就报错了。更加详细的错误见如下: [QC] WARN [main] org.springframework.context.support.AbstractApplicationContext.refresh(546) | Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.parsing.BeanDe...阅读全文

博文 2020-12-11 03:14:35 blog.sina.com.cn

在spark中使用UDF函数

spark-udf虽然spark.sql.function中的已经包含了大多数常用的函数,但是总有一些场景是内置函数无法满足要求的,此时就需要使用自定义函数了(UDF)。刚好最近用spark时,scala,java,python轮换着用,因此这里总结一下spark中自定义函数的简单用法。这里总结了scala,java,python 三种接口的DataFrame和sparkSQL的自定义函数定义和使用方法,对于比较复杂的分组自定义函数未涉及,对于这类复杂需求,应该有变通之法吧。1、pyspark接口的UDF1.1、在dataframe中使用# 定义自定义函数 import numpy as np def log_py(num): return float(np.log(num)) # 注册自定...阅读全文

博文 2020-11-19 06:49:07 知乎

关于Java中bytes到String的转换

为什么想要写这个,是因为在上周,表格存储的一个客户,告知我们在将数据通过DataX从OTS导出到ODPS后,发现数据『丢失』了。而在调查过后,发现数据并不是所谓的『丢失』了,而是数据被『改变』了。 什么原因导致数据发生了『改变』呢?却是因为一个大部分Java程序员都会忽略的问题导致的,所以我觉得有必要单独拿出来讲讲。 首先看下如下代码: byte[] original1 = new byte[]{(byte)0xef, (byte)0x8f, (byte)0x8f}; byte[] transformed1 = new String(original1).getBytes(); System.out.println(Arrays.toString(original1)); System.ou...阅读全文

博文 2022-03-27 06:14:42 阿里云开发者社区

ZGC简介

ZGC简介 JDK14 2020年3月份,JDK14发布,可能我们大部分小伙伴的生产环境还停留在JDK8。目前LTS版本的JDLK主要是7,8,以及11。其他版本的支持周期都比较短,一般不建议在生产环境中使用的,不过这不影响我们了解最新的JDK的一些特性,这些可能是后面Java语言的发展方向。这次JDK14就带来了非常多的新特性,主要如下: Pattern Matching for instanceof (Preview) Packaging Tool (Incubator) NUMA-Aware Memory Allocation for G1 垃圾收集中分层,冷对象移出,需要硬件层面的支持。 JFR Event Streaming Non-Volatile Mapped Byte Buf...阅读全文

博文 2020-07-31 03:55:11 掘金

理解 Linux 的虚拟内存

前言 前不久组内又有一次我比较期待的分享:”Linux 的虚拟内存”。是某天晚上加班时,我们讨论虚拟内存的概念时,leader 发现几位同事对虚拟内存认识不清后,特意给这位同学挑选的主题(笑)。 我之前了解一些操作系统的概念,主要是毕业后对自己大学四年的荒废比较懊恼,觉得自己有些对不起计算机专业出身,于是在工作之余抽出时间看了哈工大在网易云课堂的操作系统公开课,自己也读了一本讲操作系统比较浅的书 《Linux内核设计与实现》,而且去年自己用 C 写简单的服务器时,也追根究底了解了更多的系统底层知识。多亏了这些知识,让我对应用层的知识更有掌控感,也在上次排查问题时(从应用到内核查接口超时)助了我一臂之力。 前几天另一位同事来问另一个虚拟内存相关的问题,我才发现对于虚拟内存,我的理解还不够深刻,...阅读全文

博文 2019-06-20 08:48:00 枕边书

GO语言中封装,继承,和多态

##封装 go中的封装和java的不太一样,在go里面是没有java中的class,不过可以把struct看成一个类,封装可以简单地看作对struct的封装,如下 ``` type obj1 struct { valte1 string } type obj2 struct { valte2 string } ``` ##继承 把struct看做类,struct中可以包含其他的struct,继承内部struct的方法和变量,同时可以重写,代码如下 ``` package main import "fmt" type oo struct { inner ss1 string ss2 int ss3 bool } type inn...阅读全文

简洁又快速地处理集合——Java8 Stream(上)

Java 8 发布至今也已经好几年过去,如今 Java 也已经向 11 迈去,但是 Java 8 作出的改变可以说是革命性的,影响足够深远,学习 Java 8 应该是 Java 开发者的必修课。今天给大家带来 Java 8 Stream 讲解,为什么直接讲这个,是因为只要你学完,立刻就能上手,并能让它在你的代码中大展身手。值得注意的是:学习 Stream 之前必须先学习 lambda 的相关知识。本文也假设读者已经掌握 lambda 的相关知识。本篇文章主要内容:介绍 Stream 以及 Stream 是如何处理集合的介绍 Stream 与集合的关系与区别Stream 的基本方法介绍一. 什么是 StreamStream 中文称为 “流”,通过将集合转换为这么一种叫做 “流” 的元素序列,通...阅读全文

博文 2020-09-03 07:31:50 知乎

JVM 不稳定参数 - 286

选项 默认值 描述 -XX:-CITime 默认启用 打印JIT编译器编译耗时。 -XX:ErrorFile=./hs_err_pid.log Java1.6引入 如果JVM crashed,将错误日志输出到指定文件路径。 -XX:-ExtendedDTraceProbes Java6引入,限于solaris,默认关闭 启用dtrace诊断 -XX:HeapDumpPath=./java_pid.hprof 默认是java进程启动位置 堆内存快照的存储文件路径。 什么是堆内存快照?当java进程因OOM或crash被OS强制终止后,会生成一个hprof(Heap PROFling)格式的堆内存快照文件。该文件用于线下调试,诊断,查找问题。文件名一般为java__...阅读全文

博文 2019-11-27 08:11:12 ITeye博客

B+树的Java实现

B+树 B+ Tree定义B+树是一种多路平衡查找树,是对B树(B-Tree)的扩展.首先,一个M阶的B树的定义为: 每个节点最多有M个子节点; 每一个非叶子节点(除根节点)至少有ceil(M/2)个子节点; 如果根节点不是叶子节点,那么至少有两个子节点; 有k个子节点的非叶子节点拥有k-1个键,键按照升序排列; 所有叶子节点在同一层; 从定义可以看出来,一个M阶的B树,其叶子节点必须在同一层,每一个节点的子节点数目和键数目都是有规定的.其实不看定义,简单来说,B树是平衡的,而且非叶子节点的子节点是有限制的.最重要的一点是,B树的键是有序的,节点内部的键从左到右依次增大,而且对应的子节点的最小值和最大值在左右两个键之间,这样可以尽可能减少IO次数,提高查询效率.而B+树基本定义与B树相同,不...阅读全文

博文 2021-04-08 10:44:38 桐小木

JAVA反序列化 - 反射机制

推荐阅读时间:30min 全文字数:1w 前言 真正反序列化漏洞的利用,肯定需要了解java反射原理。因为java反序列化的payload大多与反射机制密切相关。 那么这篇文章就是主要讲述反射机制,算是基础知识。 除了反射机制之外,后续还基于commons-collections链最后的反射机制触发点,进行了详细的反射机制特性的绕过说明。由于它与反射机制密切相关,就放在这边进行统一归纳理解。 可以配合本人的另一篇文章commons-collections食用 java反射机制 在Java中的反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为Java语言的反射机制。 让jav...阅读全文

博文 2020-06-05 08:55:41 先知社区

JDK动态代理为什么必须用接口_Java_秀才的专栏

jdk的动态代理及为什么需要接口 05-14 阅读数 3437 参考文章:https://blog.csdn.net/zxysshgood/article/details/78684229动态代理有关,无非是使用JDK动态代理,和cglib动态代理。一直不待明白的... 博文 来自: 可爱马莲花的博客 深入分析JDK动态代理为什么只能使用接口 11-02 阅读数 403 初学JDK代理时,我们只知道调用一段构造方法Proxy.newProxyInstance(ClassLoader loader, Class[] interfaces, Invoca... 博文 来自: u014301265的博客 Java 动态代理为啥需要接口??? 03-08 阅读数 845 我们通过查看源码new...阅读全文

博文 2020-04-21 02:36:36 CSDN博客

Java 类隔离加载的正确姿势

什么是类隔离技术只要你 Java 代码写的足够多,就一定出现这种情况:系统新引入了一个中间件的 jar 包,编译的时候一切正常,一运行就报错:java.lang.NoSuchMethodError,然后就哼哧哼哧的开始谷歌找解决方法,最后在几百个依赖包里面找的眼睛都快瞎了才找到冲突的 jar,把问题解决之后就开始吐槽中间件为啥搞那么多不同版本的 jar,写代码五分钟,排包排了一整天。上面这种情况就是 Java 开发过程中常见的情况,原因也很简单,不同 jar 包依赖了某些通用 jar 包(如日志组件)的版本不一样,编译的时候没问题,到了运行时就会因为加载的类跟预期不符合导致报错。举个例子:A 和 B 分别依赖了 C 的 v1 和 v2 版本,v2 版本的 Log 类比 v1 版本新增了 er...阅读全文

博文 2021-10-22 02:10:23 知乎

Mac下MySQL中LOAD DATA INFILE出现The used command is not allowed with this MySQL version问题_数据库_AeroZhou

解决“LOAD DATA local INFILE”时出现The used command is not allowed with this MySQL version问题 09-07 阅读数 6440 “LOAD DATA local INFILE”时出现The used command is not allowed with this MySQL version问题。第一是版本确实过低,低于5.0... 博文 来自: ziyou434的博客 使用HeidiSQL连接Mysql数据库:导入本地csv文件,报错解决方法 02-16 阅读数 1241 第一次使用HeidiSQL连接MySQL,数据库连接成功后,进行csv文件的导入。本地文件存储于:尝试在heidiSQL中采用导入csv加载本地...阅读全文

博文 2020-04-24 08:13:46 CSDN博客

java和golang中的unsafe包

### 首先聊聊反射 java和golang都有各自的反射机制,为什么标准库会提供反射机制呢? 反射(reflection)允许程序在运行时(runtime)检查、修改程序(比如对象,struct等)的结构与行为,跳过编译检查,越过访问权限,运行时对象生成,方法调用等。如果没有反射,那么需要完全手动进行硬编码,比如如果没有反射,那么在spring的ioc容器管理实现就需要我们使用new来创建对象,那么也就不叫spring ioc,不会有spring ioc的诞生了。 静态编译(多数静态语言):在编译时确定类型,绑定对象。 动态编译(多数动态语言):运行时确定类型,绑定对象。可以实现动态创建对象和编译,体现出很大的灵活性(特别是在J2EE的开发中它的灵活性就表现的十分...阅读全文

Elasticsearch聚合学习之五:排序结果不准的问题分析_程序员欣宸的博客

Elasticsearch上的索引如果有多个分片,那么在聚合排序后取TopN时,返回的结果可能是不准的,今天我们就通过实战来研究分析此问题,并验证解决方法; 环境信息 以下是本次实战的环境信息,请确保您的Elasticsearch可以正常运行: 操作系统:Ubuntu 18.04.2 LTSJDK:1.8.0_191Elasticsearch:6.7.1Kibana:6.7.1 系列文章列表 《Elasticsearch聚合学习之一:基本操作》;《Elasticsearch聚合学习之二:区间聚合》;《Elasticsearch聚合学习之三:范围限定》;《Elasticsearch聚合学习之四:结果排序》;《Elasticsearch聚合学习之五:排序结果不准的问题分析》; 复现问题第一步:创...阅读全文

博文 2021-05-27 14:01:01 CSDN博客

模式匹配 · 傻瓜函数式编程 · 看云

## 模式匹配 模式匹配并不是什么新功能。而事实上它和函数式编程也没有什么太大的关系。它之所以常常被认为是FP的一个特性,是因为在函数式语言已经支持模式匹配很长一段时间后的今天,指令式语言是还没有这个功能。 还是直接用例子来看看什么是模式匹配吧,这是一个用Java写的Fibonacci函数: ~~~ int fib(int n) { if(n == 0) return 1; if(n == 1) return 1; return fib(n - 2) + fib(n - 1); } ~~~ 再看看用我们基于Java修改过的新语言写出来的Fibonacci函数,这种新语言就支持模式匹配: ~~~ int fib(0) { return 1; } int fib(1) { return 1; }...阅读全文

博文 2019-08-17 02:21:05 www.kancloud.cn

JVM 系列文章之 Full GC 和 Minor GC

Full GC Full GC 就是收集整个堆,包括新生代,老年代,永久代(在JDK 1.8及以后,永久代会被移除,换为metaspace)等收集所有部分的模式 RednaxelaFX大在Major GC和Full GC的区别是什么?触发条件呢?- 知乎这个问题有关于 GC分类的回答: 针对 HotSpot VM的实现,它里面的GC其实准确分类有两种: Partial GC(局部 GC): 并不收集整个 GC 堆的模式 Young GC: 只收集young gen的GC,Young GC还有种说法就叫做 "Minor GC" Old GC: 只收集old gen的GC。只有垃圾收集器CMS的concurrent collection 是这个模式 Mixed GC: 收集整个young gen...阅读全文

博文 2019-11-27 07:00:30 掘金

Linux利用iptables实现真

对于经常要浏览油管等被墙网站的人而言,利用代理来实现fq是非常有必要的。现在fq的方法中,最为主流的应该要数ssr了,因此本教程都是基于ssr的socks5代理而言的。 在windows中,ssr客户端设置的系统代理,大部分应用还是能够起到作用的,但是也有不少却不走代理。这里有个不错的解决方案就是通过sstap来实现网卡层的代理,这样一来,所有的流量都会通过代理流通转发出去了。 然而,windows并不是我们的全部,偶尔我也会用用linux,这样的话,对于linux有没有较好的全局代理方案呢?这就是本文将要介绍的。 下面我将简单介绍了linux常见的设置代理方法,以及全局代理的方法。 常见代理 最为常见的是 http_proxy=http://localhost:1080 https_pro...阅读全文

博文 2021-10-09 06:25:48 全局代理

G1垃圾回收器详解

G1垃圾回收器详解在前一篇的文章《HotSpot垃圾回收算法概述》里面,对于Serial, Parallel和CMS几种垃圾回收器做了比较详细的描述。但是对于G1的叙述是比较粗糙的。这篇文章则是提供了G1垃圾回收器的详细分析。 概述 G1垃圾回收器是在Java7 update 4之后引入的一个新的垃圾回收器。G1是一个分代的,增量的,并行与并发的标记-复制垃圾回收器。它的设计目标是为了适应现在不断扩大的内存和不断增加的处理器数量,进一步降低暂停时间(pause time),同时兼顾良好的吞吐量。G1回收器和CMS比起来,有以下不同: G1垃圾回收器是compacting的,因此其回收得到的空间是连续的。这避免了CMS回收器因为不连续空间所造成的问题。如需要更大的堆空间,更多的floating...阅读全文

博文 2020-03-01 03:39:46 简书

java - Elasticsearch Java客户端初始化失败

我在尝试运行连接到Elasticsearch的应用程序时收到此错误消息。An attempt was made to call the method org.elasticsearch.client.RestHighLevelClient.(Lorg/elasticsearch/client/RestClientBuilder;)V but it does not exist. Its class, org.elasticsearch.client.RestHighLevelClient, is available from the following locations: jar:file:/path/application/target/application-0.0.1-S...阅读全文

博文 2020-11-24 11:12:37 IT工具网

深度解析Java线程池的异常处理机制 · Issue #3 · aCoder2013/blog · GitHub

前言 今天小伙伴遇到个小问题,线程池提交的任务如果没有catch异常,那么会抛到哪里去,之前倒是没研究过,本着实事求是的原则,看了一下代码。 正文 小问题 考虑下面这段代码,有什么区别呢?你可以猜猜会不会有异常打出呢?如果打出来的话是在哪里?: ExecutorService threadPool = Executors.newFixedThreadPool(1); threadPool.submit(() -> { Object obj = null; System.out.println(obj.toString()); }); threadPool.execute(() -> { Object obj = null; System.out.println(obj.toString())...阅读全文

博文 2019-12-18 06:35:40 github.com

进群送千G学习资料,欢迎扫码加入"Java技术圈"微信群,和大家一起成长......

进群送千G学习资料,一个开放,和谐,互帮互助,知识分享的IT技术社区。旨在为解决各种实际运用的技术问题和相关技术分享而成立的问答,知识分享社区。目前主要对标服务于Java,Golang,容器技术Docker,Kubernetes,以及机器学习相关生态 欢迎大家常驻 [http://www.itsharecircle.com](http://www.itsharecircle.com) 进群送千G学习资料 微信扫描如下二维码(或者微信搜索用户Anteoy)添加我为好友,备注Java技术圈,我拉你进群 ![webwxgetmsgimg.jpg](http://ppa2bjqre.bkt.clouddn.com/190404/fb3697a712827c101c1047b01089a448...阅读全文

Spark大数据之DataFrame和Dataset

DataFrame和Dataset*DataFrame产生背景*DataFrame简述*DataFrame对比RDD*DataFrame基本API常用操作*DataFrame与RDD互操作*DataFrame API操作案例*Dataset简述No.1 DataFrame产生背景首先我们看一些图这些图是Google trends上面的趋势图,我们看到dataframe的搜索量是逐年增长,并且增长速度不慢,可以说还挺快的。以中国搜索最多,当然这或许和中国人口有关系,anyhow,dataframe正处于用户量快速增长,关注度不断提升的状态。就是说很火啊!这也是了解和学习它的一个重要原因!Dataframe不是spark sql提出的,而是早期在R、pandas就已经有了的。1、Spark RD...阅读全文

博文 2021-02-09 06:06:52 知乎

Java动态编译执行_zleven的博客

在某些情况下,我们需要动态生成java代码,通过动态编译,然后执行代码。JAVA API提供了相应的工具(JavaCompiler)来实现动态编译。下面我们通过一个简单的例子介绍,如何通过JavaCompiler实现java代码动态编译。 一、获取JavaCompiler JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 获取JDK提供的java编译器,如果没有提供编译器,则返回null; 二、编译 //获取java文件管理类 StandardJavaFileManager manager = compiler.getStandardFileManager(null, null, null); //获取java文件对象...阅读全文

博文 2021-07-09 03:49:10 CSDN博客_java 编译执行

go协程goroutine与Java多线程比较

### 引言: #### 个人理解的线程,协程和单,多核线程 1. 单核CPU上运行的多线程程序, 同一时间只能一个线程在跑, 系统帮你切换线程而已(cpu时间切片), 系统给每个线程分配时间片来执行, 每个时间片大概10ms左右, 看起来像是同时跑, 但实际上是每个线程跑一点点就换到其它线程继续跑,效率不会有提高的,切换线程反倒会增加开销(线程的上下文切换),宏观的可看着并行,单核里面只是并发,真正执行的一个cpu核心只在同一时刻执行一个线程(不是进程)。 2. 多线程的用处在于,做某个耗时的操作时,需要等待返回结果,这时用多线程可以提高程序并发程度。如果一个不需要任何等待并且顺序执行能够完成的任务,用多线程是十分浪费的。 3. 个人见解,对于Thread Runable以及Thr...阅读全文

基于SonarQube代码质量检查工具总结

作者 陈彩华 文章转载交流请联系 caison@aliyun.com 复制代码最近公司引入了代码自动检查平台,技术选型是选择SonarQube,总结如下: 1 概述 SonarQube(sonar)是一个开源平台,用于管理源代码的质量。 SonarQube不只是一个质量数据报告工具,更是代码质量管理平台。 支持java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十几种编程语言的代码质量管理与检测。 SonarQube可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题。 (1) 不遵循代码标准 SonarQube可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。 (2) 潜在的...阅读全文

博文 2020-07-02 09:28:04 掘金

java.lang.OutOfMemoryError:GC overhead limit exceeded

### 前言 在我们写的java service里,需要加载一个比较大的算法模型pmml文件.在此模型文件由500M+变为1G+的时候,在测试环境中出现了此问题 ### 异常由来 > GC overhead limt exceed检查是Hotspot VM 1.6定义的一个策略,通过统计GC时间来预测是否要OOM了,提前抛出异常,防止OOM发生。Sun 官方对此的定义是:“并行/并发回收器在GC回收时间过长时会抛出OutOfMemroyError。过长的定义是,超过98%的时间用来做GC并且回收了不到2%的堆内存。用来避免内存过小造成应用不能正常工作。 代码中使用静态对象的方式用来在多线程中共享此文件模型,由于加载文件过大,并且长时间的GC回收了不到2%的内存,于是抛...阅读全文

Mybatis详解系列(五)--Mybatis Generator和全注解风格的MyBatis3DynamicSql - 子月生

简介 Mybatis Generator (MBG) 是 Mybatis 官方提供的代码生成器,通过它可以在项目中自动生成简单的 CRUD 方法,甚至“无所不能”的高级条件查询(MyBatis3DynamicSql,有了它根本不需要 Mybatis Plus),让我们避免了进行数据库交互时需要手动创建对象和配置 Mybatis 映射等基础工作。 另外,MBG 有很好地扩展性,它提供了大量的接口和插件用来给我们自定义生成的代码应该是什么样子,例如我们可以自定义注释、代码格式化、添加 toString 方法等。本文将讲解如何使用这些接口。 本文内容大致如下,由于篇幅较长,可选择阅读: 如何使用 MBG 生成代码; 详解 MBG 的配置,将配置使用自定义注释生成器、实体类中添加 toString/...阅读全文

博文 2021-03-02 08:57:32 博客园

HTTPS双向认证指南

HTTPS双向认证指南作者:黄湘龙 研究HTTPS的双向认证实现与原理,踩了不少坑,终于整个流程都跑通了,现在总结出一篇文档来,把一些心得,特别是容易踩坑的地方记录下来。 1.原理 双向认证,顾名思义,客户端和服务器端都需要验证对方的身份,在建立Https连接的过程中,握手的流程比单向认证多了几步。单向认证的过程,客户端从服务器端下载服务器端公钥证书进行验证,然后建立安全通信通道。双向通信流程,客户端除了需要从服务器端下载服务器的公钥证书进行验证外,还需要把客户端的公钥证书上传到服务器端给服务器端进行验证,等双方都认证通过了,才开始建立安全通信通道进行数据传输。 1.1 单向认证流程 单向认证流程中,服务器端保存着公钥证书和私钥两个文件,整个握手过程如下: 单向认证流程 客户端发起建立HTT...阅读全文

博文 2021-11-12 09:33:21 简书

用nio实现Echo服务

今天突然间想用nio实现个Echo服务,程序实现起来实现不算困难,但跑起来后,在Server端的ServerSocket完成accept之后,我的CPU总是跳到100%。嗯,小郁闷,后来,才发现自己在Server端注册了多余的监听事件SelectionKey.OP_WRITE,改过来后好多了,希望记住这个教训。 EchoServer.java package edu.dlut.zxf.nio; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.Select...阅读全文

博文 2021-08-27 08:09:43 51CTO.COM

使用google perf工具来排查堆外内存占用

现象线上机器内存不足,经常被系统oom killer干掉。 如果tomcat运行的好好的,突然被干掉了,没有任何线索,那么就可以使用下面的命令看看是不是oom killer搞的鬼 1234sudo dmesg | grep -i kill | lessOut of memory: Kill process 23195 (java) score 558 or sacrifice childKilled process 23195, UID 40001, (java) total-vm:81176732kB, anon-rss:64507900kB, file-rss:2604kB 其中anon-rss是程序占用的物理内存, 64507900kB = 61.519527435302734 GB系...阅读全文

博文 2020-04-22 10:40:11 KL's blog

BeanUtils对象属性copy的性能对比以及源码分析 - kancy

1. 对象属性拷贝的常见方式及其性能 在日常编码中,经常会遇到DO、DTO对象之间的转换,如果对象本身的属性比较少的时候,那么我们采用硬编码手工setter也还ok,但如果对象的属性比较多的情况下,手工setter就显得又low又效率又低。这个时候我们就考虑采用一些工具类来进行对象属性的拷贝了。 我们常用的对象属性拷贝的方式有: Hard Code net.sf.cglib.beans.BeanCopier#copy org.springframework.beans.BeanUtils.copyProperties org.apache.commons.beanutils.PropertyUtils.copyProperties org.apache.commons.beanutils.B...阅读全文

博文 2021-03-05 11:01:14 博客园

从科学记数法到浮点数标准IEEE 754 - 微信公众号:二进制之路

很遗憾,由于这篇文章有大量的公式,如果直接发表内容公式会显示不了,因此只能发成图片。 如果想获得更好的阅读体验,请点击:从科学记数法到浮点数标准IEEE 754 参考 https://zh.wikipedia.org/wiki/IEEE_754 https://zh.wikipedia.org/zh-hans/%E6%B5%AE%E7%82%B9%E6%95%B0 https://zh.wikipedia.org/wiki/%E7%A7%91%E5%AD%A6%E8%AE%B0%E6%95%B0%E6%B3%95 https://zh.wikipedia.org/wiki/NaN 《Java虚拟机规范(Java SE 7)》 《深入理解计算机系统》第2版 《码出高效》Java开发手册 htt...阅读全文

博文 2019-07-29 10:15:02 ITeye博客

LDAP入门

LDAP入门LDAP入门 首先要先理解什么是LDAP,当时我看了很多解释,也是云里雾里,弄不清楚。在这里给大家稍微捋一捋。 首先LDAP是一种通讯协议,LDAP支持TCP/IP。协议就是标准,并且是抽象的。在这套标准下,AD(Active Directory)是微软出的一套实现。 那AD是什么呢?暂且把它理解成是个数据库。也有很多人直接把LDAP说成数据库(可以把LDAP理解成存储数据的数据库)。像是其他数据库一样,LDAP也是有client端和server端。server端是用来存放资源,client端用来操作增删改查等操作。 而我们通常说的LDAP是指运行这个数据库的服务器。 可以简单理解AD =LDAP服务器+LDAP应用。 那LDAP这种数据库有什么特殊的呢? 我们知道,像MySQL...阅读全文

博文 2021-06-14 12:48:46 简书

Elasticsearch Java API的基本使用

Elasticsearch Java API的基本使用说明 在明确了ES的基本概念和使用方法后,我们来学习如何使用ES的Java API. 本文假设你已经对ES的基本概念已经有了一个比较全面的认识。 客户端 你可以用Java客户端做很多事情: 执行标准的index,get,delete,update,search等操作。 在正在运行的集群上执行管理任务。 但是,通过官方文档可以得知,现在存在至少三种Java客户端。 Transport Client Java High Level REST Client Java Low Level Rest Client 造成这种混乱的原因是: 长久以来,ES并没有官方的Java客户端,并且Java自身是可以简单支持ES的API的,于是就先做成了Trans...阅读全文

博文 2020-11-29 08:39:46 简书

死磕 java同步系列之JMM(Java Memory Model) - 极术社区

彤哥读源码 · 2019年10月06日 死磕 java同步系列之JMM(Java Memory Model) Java (手机横屏看源码更方便)简介Java内存模型是在硬件内存模型上的更高层的抽象,它屏蔽了各种硬件和操作系统访问的差异性,保证了Java程序在各种平台下对内存的访问都能达到一致的效果。硬件内存模型在正式讲解Java的内存模型之前,我们有必要先了解一下硬件层面的一些东西。在现代计算机的硬件体系中,CPU的运算速度是非常快的,远远高于它从存储介质读取数据的速度,这里的存储介质有很多,比如磁盘、光盘、网卡、内存等,这些存储介质有一个很明显的特点——距离CPU越近的存储介质往往越小越贵越快,距离CPU越远的存储介质往往越大越便宜越慢。所以,在程序运行的过程中,CPU大部分时间都浪费在了...阅读全文

博文 2020-02-20 14:55:10 AIoT 开发者之家

聊聊 TCP 中的 KeepAlive 机制

服务端的系统设置中经常会和底层协议打交道,我们有必要重温一下曾经那些“听过”却不熟悉的名词。今天聊的话题是 KeepAlive,在实际应用中又是怎么使用的?为什么有Keepalive?大家都做过电梯吧,假设电梯来了你先进去,你朋友还没进来,过一段时间电梯门就会自动关闭,你应该没遇到过哪个电梯会一直等你朋友来了才关门的。如果真是那样,那别的楼层的小姐姐们会炸了~我们举个编程中的例子来解释下,我编写了一个服务端程序S和一个客户端程序C,客户端向服务端发送一个消息:客户端发送消息服务端收到消息后一看,瞧给你牛*的,然后没理客户端,傻狗客户端一直在等待,但是不知道是不是服务器挂掉了?这时候TCP协议提出一个办法,当客户端端等待超过一定时间后自动给服务端发送一个空的报文,如果对方回复了这个报文证明连接...阅读全文

博文 2020-11-04 11:28:37 知乎

内存屏障

内存屏障(Memory barrier) 为什么会有内存屏障 每个CPU都会有自己的缓存(有的甚至L1,L2,L3),缓存的目的就是为了提高性能,避免每次都要向内存取。但是这样的弊端也很明显:不能实时的和内存发生信息交换,分在不同CPU执行的不同线程对同一个变量的缓存值不同。 用volatile关键字修饰变量可以解决上述问题,那么volatile是如何做到这一点的呢?那就是内存屏障,内存屏障是硬件层的概念,不同的硬件平台实现内存屏障的手段并不是一样,java通过屏蔽这些差异,统一由jvm来生成内存屏障的指令。 内存屏障是什么 硬件层的内存屏障分为两种:Load Barrier 和 Store Barrier即读屏障和写屏障。 内存屏障有两个作用: 阻止屏障两侧的指令重排序; 强制把写缓冲区/...阅读全文

博文 2019-06-20 09:18:04 简书

jvm 基础篇-(5)-jvm-对象年龄(-XX:+PrintTenuringDistribution)

jvm 基础篇-(5)-jvm-对象年龄(-XX:+PrintTenuringDistribution)-XX:+PrintTenuringDistribution 赠送银弹: -XX:SurvivorRatio 作用:输出显示在survivor空间里面有效的对象的岁数情况。 {Heap before GC invocations=0 (full 0): par new generation total 1887488K, used 1677824K [0x00000006e0c00000, 0x0000000760c00000, 0x0000000760c00000) eden space 1677824K, 100% used [0x00000006e0c00000, 0x0000000...阅读全文

博文 2020-07-28 06:52:09 简书

Java并行编程-lock中使用多条件condition(生产者消费者模式实例)_记忆力不好的博客

Java 并发包下的提供Lock,Lock相对于Synchronized可以更好的解决线程同步问题,更加的灵活和高效,并且ReadWriteLock锁还能实现读、写的分离。但线程间仅仅互斥是不够的,还需要通信,本篇的内容是基于上篇之上,使用Lock如何处理线程通信。阻塞队列(BlockingQueue)就是使用condition的和lock实现的。可以查看:Java并发编程-阻塞队列(BlockingQueue)的实现原理 Condition 那么引入本篇的主角,Condition,Condition 将 Object的通信方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set (wait-...阅读全文

博文 2021-06-16 02:44:42 CSDN博客

Thrift笔记(六)--单端口 多服务 - luckygxf

多个服务,使用监听一个端口。先上一个demo Test.thrift namespace java com.gxf.thrift enum RequestType { SAY_HELLO, //问好 QUERY_TIME, //询问时间 } struct Request { 1: required RequestType type; // 请求的类型,必选 2: required string name; // 发起请求的人的名字,必选 3: optional i32 age; // 发起请求的人的年龄,可选 } exception RequestException { 1: required i32 code; 2: optional string reason; } // 服务名 ser...阅读全文

博文 2021-05-02 16:26:40 博客园

Chapter 9. Jetty Logging

.LEVEL=Sets the logging level for all loggers within the name specified to the level, which can be (in increasing order of restriction) ALL, DEBUG, INFO, WARN, OFF. The name (or hierarchy) can be a specific fully qualified class or a package namespace, for example, -Dorg.eclipse.jetty.http.LEVEL=DEBUG is a package namespace approach to...阅读全文

博文 2021-01-28 12:12:21 docs.huihoo.com

java的synchronized锁实现与Monitor(管程)机制_ystyaoshengting的专栏

在《操作系统同步原语》 这篇文章中,介绍了操作系统在面对 进程/线程 间同步的时候,所支持的一些同步原语,其中 semaphore 信号量 和 mutex 互斥量是最重要的同步原语。 在使用基本的 mutex 进行并发控制时,需要程序员非常小心地控制 mutex 的 down 和 up 操作,否则很容易引起死锁等问题。为了更容易地编写出正确的并发程序,所以在 mutex 和 semaphore 的基础上,提出了更高层次的同步原语 monitor,管程就可以对开发者屏蔽掉这些手动细节,在语言内部实现,更加简单易用。 不过需要注意的是,操作系统本身并不支持 monitor 机制,实际上,monitor 是属于编程语言的范畴,当你想要使用 monitor 时,先了解一下语言本身是否支持 monit...阅读全文

博文 2021-06-16 02:57:45 CSDN博客

Flink task和subTask_大数据私房菜的博客

Flink-Task、SubTask、并行度 ldc2013的博客 08-01 292 Task与SubTask 一个算子就是一个Task. 一个算子的并行度是几,这个Task就有几个SubTask 对应关系: 算子=Task 并行度=SubTask task是抽象概念,subtask是物力概念 Parallelism并行度 默认并行度--cpu核数 关键点 不同的并行度(subtask),肯定在不同的slot,但也可能在不同的taskmanager 一个流程序的并行度,可以认为就是其所有算子中算子并行度最大的并行度 数据传输模式: One-to-one:. 【白话Flink基础理论】Flink运行时(Runtime)架构(三)并行度&Task&SubTask&Slot&Flink中的并行剖...阅读全文

博文 2022-08-04 06:54:20 CSDN博客_flink subtask

关于log4j root logger 标签 以及additivity 属性_大鑫不列迭的博客

今天和两个同事讨论Log4j,他们都需要解决一个问题,怎么分开输出Logger。这么讲不清楚,举个例子: Java代码 package com.gmail.at.ankyhe.log4jtest; import org.apache.log4j.Logger; public class ClassA { private static Logger logger = Logger.getLogger(ClassA.class.getName()); public ClassA() { logger.info("ENTER ClassA()"); } public void foo() { logger.info("foo()"); bar(); } public void bar() { Lo...阅读全文

博文 2022-04-25 03:30:24 CSDN博客_log4j root