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

理解 Linux 的虚拟内存

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

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

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博客

happens

学习Java并发,到后面总会接触到happens-before偏序关系。初接触玩意儿简直就是不知所云,下面是经过一段时间折腾后个人对此的一点浅薄理解,希望对初接触的人有帮助。如有不正确之处,欢迎指正。 synchronized、大部分锁,众所周知的一个功能就是使多个线程互斥/串行的(共享锁允许多个线程同时访问,如读锁)访问临界区,但他们的第二个功能 —— 保证变量的可见性 —— 常被遗忘。 为什么存在可见性问题?简单介绍下。相对于内存,CPU的速度是极高的,如果CPU需要存取数据时都直接与内存打交道,在存取过程中,CPU将一直空闲,这是一种极大的浪费,妈妈说,浪费是不好的,所以,现代的CPU里都有很多寄存器,多级cache,他们比内存的存取速度高多了。某个线程执行时,内存中的一份数据,会存在...阅读全文

博文 2020-03-20 10:44:58 before俗解 | 并发编程网 – ifeve.com

java和golang中的unsafe包

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

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博客

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博客

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 先知社区

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 掘金

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...阅读全文

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博客

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

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

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

java - Maven shade unable to locate Spring NamespaceHandler for XML schema namespace

I've a small Spring project, that I've booted up with roo 1.2.2 I can run the main class just fine within Eclipse Juno. However when I try to run the JAR file built with mvn package, I get the following error: Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate...阅读全文

博文 2020-12-11 03:17:02 Stack Overflow

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 掘金

在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 知乎

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 知乎

进群送千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...阅读全文

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

## 模式匹配 模式匹配并不是什么新功能。而事实上它和函数式编程也没有什么太大的关系。它之所以常常被认为是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

go协程goroutine与Java多线程比较

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

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%的内存,于是抛...阅读全文

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工具网

netty笔记(1)--ctx.write()和channel().write()的区别

写博客 CSDN 中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。 教程 文章 帮助 视频 讨论 华为云入门 华为云资源专属DeC 华为云计算架构设计 华为云DevCloud实战 华为云专家_开发者中心-华为云 华为云强化实战营 WeLink免密登录华为云 单点登录华为云 钉钉免密登录华为云 华为云ModelArts送你降温神器—鬼故事生成器 华为云_CS_入门视频 华为云平台之大模型上传 前端小白历险记(二)原来是你腾讯搞的鬼! 最新文章 为你推荐 Netty 系列笔记之开篇 netty 入门 Netty源码分析 (八)----- write过程 源码分析 ...阅读全文

博文 2021-09-02 12:29:08 华为云

基于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 掘金

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多字段聚合

内存屏障

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

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

从科学记数法到浮点数标准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博客

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 简书

HTTPS双向认证指南

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

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

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博客

使用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

JVM GC 日志详解

本文采用的JDK版本: java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01) Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode) 复制代码一、GC 日志参数 设置JVM GC格式日志的主要参数包括如下8个: -XX:+PrintGC 输出简要GC日志 -XX:+PrintGCDetails 输出详细GC日志 -Xloggc:gc.log 输出GC日志到文件 -XX:+PrintGCTimeStamps 输出GC的时间戳(以JVM启动到当期的总时长的时间戳形式) -XX:+PrintGCDateStamps 输出G...阅读全文

博文 2019-06-20 10:18:28 掘金

简洁又快速地处理集合——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 知乎

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 全局代理

又一次线上OOM排查经过 - 黄亿华的个人空间 - OSCHINA

昇腾众智计划火热上线!140个算子/模型等你来挑战!>>> 最近线上一个服务又出现了频繁Full GC的情况,导致提供的业务经常超时。问题出现非常不稳定,经过两周的时候,终于又捕捉到了一次Full GC,于是联系运维做Heap Dump之后,经过一系列分析,终于解决问题。这次的问题稍微复杂一点,但是也比较有代表性,用到了VisualVM和MAT两个工具,继续记录如下。 现象 这次使用公司的CAT监控平台看到的内存表现如下: 可以看到,具体表现是: 在很长一段时间内(数个小时),New GC比较频繁,Full GC较少(一小时个位数)。 过了某一时间点后,Full GC增加,New GC则减少。 将服务切换下线后,Memory Free逐渐回升,Full GC减少。 然后观察某一时刻的JMAP...阅读全文

博文 2021-03-18 07:58:50 中文开源技术交流社区

手动编译并运行Java项目的过程 - 小得盈满

现在Java开发基本上就是IDE调试,如果跨平台打个jar包过去运行一般就可以了,但是有些情况比如需要引入外部依赖的时候,这个时候是不能直接运行的,还需要引入一些外部的参数,并不是简单的javac和java的关系了,下面来详细说一下 一般情况下,在本地都是使用eclipse开发工具进行开发,很多东西基本上就不用我们考虑了,如果我们要将项目放到Linux下运行的话,那么就需要进行转移的操作,当然有Maven、Ant这样的自动化部署工具,简直是太方便了,为了做到更进一步认识的话,我们纯手动的去打包一个java的项目 首先,项目名称为JarTest,在eclipse结构如下图所示: 包名和类名都看的非常清楚了,App是主类,包含有main方法;TestBean是一个JavaBean实体;TestS...阅读全文

博文 2019-10-19 09:37:43 博客园

定时器 OOM(OutOfMemoryError) 了,其他线程受影响吗? – 业余草

你的位置:业余草 > JAVA > 定时器 OOM(OutOfMemoryError) 了,其他线程受影响吗? 定时器 OOM(OutOfMemoryError) 了,其他线程受影响吗? JAVA herman 3年前 (2018-09-22) 3347浏览 0评论 公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:codedq,发送下载链接帮助你免费下载! 本博客日IP超过2000,PV 3000 左右,急需赞助商。 极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:codedq,之前的微信号好友位已满,备注:返现 受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码 所有面试题(java、前端...阅读全文

博文 2021-03-18 06:21:24 www.xttblog.com

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 知乎

Java 为什么使用 UTF-16 而不是更节省内存的 UTF-8?

因为当时 Java 选择的是 UCS-2,是一个定长的编码,在当时以单个码元能表示所有字符,以下标获取字符的开销基本等同于在数组中索引一个字符,用起来是最方便的,多占用的内存大小也是可以接受的。到了后来 UCS-2 无法表示所有 Unicode 字符的时候,过渡到了兼容它的 UTF-16 上也是最自然以及迁移成本最低的选择,这很好理解。至于 UTF-16 浪费内存的问题,在 JEP 254 Compact Strings 中优化了这个问题,Java 9 已经实现了这个 JEP。翻翻源码就能看到,现在 String 内部是存储了一个 byte[],以及对应的编码标记,而不再是 char[] :public final class String { ... private final byte[...阅读全文

深入解析String#intern

在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。8种基本类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用方法有两种:直接使用双引号声明出来的String对象会直接存储在常量池中。如果不是用双引号声明的String对象,可以使用String提供的intern方法。intern 方法会从字符串常量池中查询当前字符串是否存在,若不存在就会将当前字符串放入常量池中接下来我们主要来谈一下String#intern方法。首先深入看一下它的实现原理。1,JAVA 代码/** * Returns a canonical representat...阅读全文

博文 2019-08-09 06:31:26 美团技术团队

死磕 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 开发者之家

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

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

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

Java并发编程:volatile关键字解析 - Matrix海子

Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用volatile关键字的场景。 以下是本文的目录大纲: 一.内存模型的相关概念 二.并发编程中的三个概念 三.Java内存模型 四..深入剖析volatile关键...阅读全文

博文 2021-09-13 07:04:52 博客园

深度解析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

数据库连接断开 Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure - 为了美好的明天的个人空间

报错信息如下: Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 97,130 milliseconds ago. The last packet sent successfully to the server was 24 milliseconds ago. ; SQL []; Communications link failure .... Caused by: com.mysql.jdbc.exceptions.jdbc4.Communic...阅读全文

博文 2020-07-03 10:54:29 OSCHINA

一文探讨堆外内存的监控与回收 | 徐靖峰

引子记得那是一个风和日丽的周末,太阳红彤彤,花儿五颜六色,96 年的普哥微信找到我,描述了一个诡异的线上问题:线上程序使用了 NIO FileChannel 的 堆内内存(HeapByteBuffer)作为缓冲区,读写文件,逻辑可以说相当简单,但根据监控,却发现堆外内存(DirectByteBuffer)飙升,导致了 OutOfMemeory 的异常。 由这个线上问题,引出了这篇文章的主题,主要包括:FileChannel 源码分析,堆外内存监控,堆外内存回收。 问题分析 & 源码分析根据异常日志的定位,发现的确使用的是 HeapByteBuffer 来进行读写,但却导致堆外内存飙升,随即翻了 FileChannel 的源码,来一探究竟。 FileChannel 使用的是 IOUtil 进行...阅读全文

博文 2020-04-22 10:55:31 个人博客

Get请求与URL编码解码_Boboma_dut的博客

Get请求传参,与编码解码 @1 Get请求流程: 在get请求中,参数直接添加在了url后面,同url一起提交到服务器。 常用的url参数的格式为: http://ip:port/path/file?参数1=值1&参数2=值2…. 多个参数之间使用&分割,参数与值之间使用=分割 例如: http://localhost:8080/http/test?p1=zhangsan&p2=18 服务器端Servlet通过 req.getParameter(“参数名”)就可以获取相应参数的值。 @2 问题的产生 这是正常的使用情况,我们需要考虑某些特殊情况,如下: 假如p1参数的值是 “zhang&san”,那么url地址变为: http://localhost:8080/http/test?p1=z...阅读全文

博文 2022-04-13 07:07:46 CSDN博客_get请求url编码

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 简书

Jackson 快速入门 - 捏造的信仰

捏造的信仰 2.3k Jackson 快速入门 java jackson json 发布于 7月14日 本文是对 Jackson 的快速入门介绍,主要分为四部分: 基本使用 基础配置 自定义序列化/反序列化 对泛型的处理 上面这几个话题足以覆盖日常开发的场景了。限于篇幅所限,本文力求读者读完后能掌握 Jackson 在日常使用中的绝大部分场景,以及了解如何着手探索 Jackson 的深层定制。 基本使用 引入 Jackson 本文假设读者熟悉 Maven 的使用,那么只需要在项目中添加下面的依赖关系就可以了: com.fasterxml.jackson.core jackson-databind阅读全文

博文 2020-09-02 02:51:58 SegmentFault 思否