java
文章平均质量分 82
thlzjfefe
这个作者很懒,什么都没留下…
展开
-
java内存模型(JMM)详解
Java内存模型可以理解为在特定的操作协议下,对特定的内存或者高速缓存进行读写访问的过程抽象描述,不同架构下的物理机拥有不一样的内存模型,Java虚拟机是一个实现了跨平台的虚拟系统,因此它也有自己的内存模型,即Java内存模型()Java所有的变量都存储在主内存()中每个线程都有一个私有的本地内存(),本地内存中存储了该线程以读/写共享变量的拷贝副本线程对变量的所有操作都必须在本地内存中进行,而不能直接读写主内存。不同的线程之间无法直接访问对方本地内存中的变量由于CPU。转载 2022-12-17 22:02:46 · 241 阅读 · 0 评论 -
java内存模型(JMM)详解
转载于: 面试官:说说什么是Java内存模型?为什么要有内存模型?要想回答这个问题,我们需要先弄懂传统计算机硬件内存架构。好了,要开始画图了硬件内存架构图含有一二三级架构的内存架构图去过机房的同学都知道,一般在大型服务器上会配置多个CPU,每个CPU还会有多个核,这就意味着多个CPU或者多个核可以同时(并发)工作。如果使用 起了一个多线程的任务,很有可能每个 都会跑一个线程,那么你的任务在某一刻就是真正并发执行了。也就是 。是 内部集成的,在寄存器上执行操作的效率要比在主存上高出几个数量级在中转载 2022-12-04 20:09:42 · 830 阅读 · 0 评论 -
java socket通信
1:简介Java语言从一开始就是为了让人们使用互联网而设计的,它为实现程序的相互通信提供了许多有用的抽象应用程序接口(API, Application Programming Interface),这类应用程序接口被称为套接字(sockets)。信息(information)是指由程序创建和解释的字节序列。在计算机网络环境中,这些字节序列被称为分组报文(packets)。一组报文包括了网络用来完成工作的控制信息,有时还包括一些用户数据。用于定位分组报文目的地址的信息就是一个例子。路由器正是利用了这些转载 2022-04-17 21:35:55 · 2523 阅读 · 0 评论 -
Native memory allocation (mmap) failed to map 6215958528 bytes for committing reserved memory
今天突然发现es报错,无法正常启动,报错信息如下:Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]output:## There is insufficient memory for the Java Runtime Environment to continue.# Native memory allocation (mmap) failed to map 621595852原创 2022-03-14 22:42:31 · 6284 阅读 · 1 评论 -
根据Magic Number(幻数)判断文件类型
通常我们根据文件的后缀名来判断文件的类型,一般情况下,这样做是没有问题的,但是如果手动的把文件的后缀名进行了修改(比如,test.txt,修改后的文件为test.doc),此时我们根据后缀名获取文件类型就是错误的。 如果要准确的获取到文件的类型,可以通过获取文件的幻数来判断文件的类型。可以参考以下的方式:一、获取方法参考:Find File Type From Magic Number Of File In MVC 5二、常用文件幻数参考:https://gis...原创 2022-01-20 16:04:25 · 1297 阅读 · 0 评论 -
搭建一套基于 Groovy 规则引擎的业务风控平台
黑灰产在互联网领域盛行,从反面推动了业务安全反欺诈领域的快速发展。互联网SAAS服务产品响应市场不断创新,也决定了业务风险的多样性。笔者所在财税领域常见的非财税业务互联网风控场景包括登陆注册、短信接口、营销活动、渠道引流推广、交易和支付等。本文以这些风控场景为基础,搭建一套基于规则引擎的业务风控反欺诈平台。本篇文章会讲到如下内容:1. 剖析羊毛党等黑产的运作体系、攻击手段等;2. 分享如何搭建一套基于 Groovy 规则引擎的业务风控平台,平台由事件中心、指标中心、规则决策中心、处罚中心等模块组成。转载 2021-05-17 09:05:44 · 1939 阅读 · 0 评论 -
Groovy从入门到精通
一、环境搭建安装好JDK环境 到groovy官网下载groovySDK,解压到合适位置 groovy官网:http://www.groovy-lang.org/ 安装后的文件如上图所示,我们需要关注的是bin和doc文件夹下的内容,其它文件夹下是一些配置和groovy自带的一些jar包 配置groovy环境变量二、与Java的不同之处1、默认 imports所有这些包和类都是默认导入的,您不必使用显式import语句来使用它们:java.io.*java...转载 2021-05-16 17:38:34 · 6494 阅读 · 1 评论 -
为什么Netty使用NIO而不是AIO?
NIO模型同步非阻塞NIO有同步阻塞和同步非阻塞两种模式,一般讲的是同步非阻塞,服务器实现模式为一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。AIO模型异步非阻塞服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,注:AIO又称为NIO2.0,在JDK7才开始支持。为什么Netty使用NIO而不是AIO?Netty不看重Windows上的使用,在Linux系转载 2021-04-24 17:37:42 · 177 阅读 · 0 评论 -
认识Netty
什么是Netty?Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。Netty 是一个广泛使用的 Java 网络编程框架(Netty 在 2011 年获得了Duke's Choice Award,见https://www.java.net/dukeschoice/2011)。它活跃和成长于用户社区,像大型公司 Facebook 和 Instagram 以及流行 开源项目如 Infinispan, HornetQ, Vert.x,转载 2021-04-24 17:13:48 · 85 阅读 · 0 评论 -
ASCII码字符对照表
ASCII码大致由三部分组成:1、ASCII 打印字符:数字 32–126 分配给了能在键盘上找到的字符,当您查看或打印文档时就会出现。注:十进制32代表空格 ,十进制数字 127 代表 DELETE 命令。下面是ASCII码和相应数字的对照表ASCII 码 字符 ASCII 码 字符 ASCII 码 字符 ASCII 码 字符 十进位 十六进位 十进位 十六进位 十...转载 2021-04-19 21:25:27 · 1972 阅读 · 0 评论 -
EventBus-实现java状态机
首先,了解状态机是什么,我们为什么需要状态机!举个最简单例子,请假,作为一个最底层程序员,每次请假都要领导层层审批,而假有分为很多种,事假,病假,婚假,年休假等等,当然选择请的假不同,审批标准也不同,不同的假单需要走的审批链也不一样,比如年休假,可能只需要领导审批扣掉年休假即可,请病假需要领导审批,领导审批之后,先休假,等休完假回来提交病假的材料,由hr审批之后才能完成整个请假过程。更有甚者,如果你要修一个一个月的长假,就不仅仅是需要直线领导hr审批,可能还需要公司ceo审批 ,审批通过后,才能通过。如下转载 2021-03-26 22:55:26 · 673 阅读 · 0 评论 -
Java 10:来看 var 的新玩法
作为每六个月新的发布周期,Oracle重新定义了Java的版本策略,并在3月20日推出了Java 10。此版本引入同JEPS(JDK增强建议)定义的12个增强功能。其中之一是局部变量类型推断(JEP 286)。在这一版本中,引入了var关键字,它可以允许编译器使用其初始值设定荐来推断局部变量的类型。这个功能在其它语言很常见,如Swift、Scala,Go,C#等。在Java 10中,var并非一个关键字,只是一个保留的类型名称。其原因也是为了避免对原有开发的代码,包括变量、方法或包名称有一.转载 2021-02-23 21:36:57 · 226 阅读 · 0 评论 -
Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
Java8 Stream1 Stream概述 2 Stream的创建 3 Stream的使用 案例使用的员工类 3.1 遍历/匹配(foreach/find/match) 3.2 筛选(filter) 3.3 聚合(max/min/count) 3.4 映射(map/flatMap) 3.5 归约(reduce) 3.6 收集(collect) 3.6.1 归集(toList/toSet/toMap) 3.6.2 统计(count/averaging) 3.6.3 分组(pa..转载 2021-02-03 22:49:04 · 84 阅读 · 0 评论 -
Java 8 中的 Streams API 详解
为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk转载 2021-02-01 09:04:34 · 73 阅读 · 0 评论 -
最通俗易懂搞定HashMap的底层原理
HashMap的底层原理面试必考题。为什么面试官如此青睐这道题?HashMap里面涉及了很多的知识点,可以比较全面考察面试者的基本功,想要拿到一个好offer,这是一个迈不过的坎,接下来我用最通俗易懂的语言带着大家揭开HashMap的神秘面纱一:HashMap的节点:HashMap是一个集合,键值对的集合,源码中每个节点用Node<K,V>表示static class Node<K,V> implements Map.Entry<K,V> { fi转载 2021-01-31 18:30:07 · 89 阅读 · 0 评论 -
dubbo实现原理简单介绍
一、什么是dubboDubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看, Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容,详见后面描述。总体架构Dubbo的总体架构,如图所示:Dubbo...转载 2021-01-12 22:56:04 · 177 阅读 · 0 评论 -
java并发编程与高并发解决方案
知识点线程安全,线程封闭,线程调度,同步容器,并发容器,AQS,J.U.C,等等高并发解决思路与手段扩容:水平扩容、垂直扩容缓存:Redis、Memcache、GuavaCache等队列:Kafka、RabitMQ、RocketMQ等应用拆分:服务化Dubbo与微服务Spring Cloud限流:Guava RateLimiter使用、常用限流算法、自己实现分布式限流等服务降级与服务熔断:服务降级的多重选择、Hystrix数据库切库,分库分表:切库、分表、多数据源高可转载 2020-11-29 19:48:57 · 147 阅读 · 0 评论 -
JConsole 使用总结
JVM调优工具:Jconsole,jProfile,VisualVM1) Jconsole :jdk自带,功能简单,可以在系统有一定负荷的情况下使用;对垃圾回收算法有很详细的跟踪。2) JProfiler :商业软件,需要付费;功能强大。3) VisualVM :JDK自带,功能强大,与JProfiler类似;推荐。如何调优观察内存释放情况、集合类检查、对象树,上面这些调优工具都提供了强大的功能,但是总的来说一般分为以下几类功能堆信息查看可查...转载 2020-11-29 17:51:48 · 353 阅读 · 0 评论 -
notify()是随机唤醒线程么?
大佬问我: notify()是随机唤醒线程么?我的内心戏: 这不是显而易见么! 肯定是啊! jdk关于notify()注释都写的很清楚!不过这么简单的问题?image机智如我, 决定再次装小小白, 回答: 不是!大佬: 很好, 小伙子你真的让我刮目相看了!!我:image大佬: 说说为什么?我: ………………image牢不可破的知识点被大佬一问, 瞬间感觉哪里有点问题!于是, 咸鱼君开启了求证模式.(大佬问我不懂的也就算了, 问...转载 2020-11-22 19:25:59 · 4155 阅读 · 12 评论 -
java并发编程之Condition
引言在java中,对于任意一个java对象,它都拥有一组定义在java.lang.Object上监视器方法,包括wait(),wait(long timeout),notify(),notifyAll(),这些方法配合synchronized关键字一起使用可以实现等待/通知模式。同样,Condition接口也提供了类似Object监视器的方法,通过与Lock配合来实现等待/通知模式。为了更好的了解Condition的特性,我们来对比一下两者的使用方式以及功能特性:对比项 Object监转载 2020-11-21 22:09:10 · 113 阅读 · 1 评论 -
ubuntu 安装jdk
1、下载JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads2、创建目录并解压cd ~mkdir java && cd javacp /home/Downloads/jdk-8u181-linux-x64.tar.gz .tar -zxvf jdk-8u181-linux-x64.tar.gz3、配置环境变量sudo vi /etc/profile在文件末尾添加:export J原创 2020-10-26 18:00:07 · 106 阅读 · 0 评论 -
Slf4j MDC机制
MDC 简介MDC ( Mapped Diagnostic Contexts ),它是一个线程安全的存放诊断日志的容器。Logback设计的一个目标之一是对分布式应用系统的审计和调试。在现在的分布式系统中,需要同时处理很多的请求。如何来很好的区分日志到底是那个请求输出的呢?我们可以为每一个请求生一个logger,但是这样子最产生大量的资源浪费,并且随着请求的增多这种方式会将服务器资源消耗殆尽,所以这种方式并不推荐。一种更加轻量级的实现是使用MDC机制,在处理请求前将请求的唯一标示放到MDC容器中转载 2020-07-08 10:02:36 · 802 阅读 · 0 评论 -
Java各种规则引擎
一. Drools规则引擎简介:Drools就是为了解决业务代码和业务规则分离的引擎。Drools 规则是在 Java 应用程序上运行的,其要执行的步骤顺序由代码确定,为了实现这一点,Drools 规则引擎将业务规则转换成执行树。特性:优点: 1、简化系统架构,优化应用 2、提高系统的可维护性和维护成本 3、方便系统的整合 4、减少编写“硬代码”业务规则的成本和风险3.原理:Drools.png使用方式:(1)Maven 依...转载 2020-07-07 09:48:16 · 886 阅读 · 0 评论 -
java接口中的default方法
在java8以后,接口中可以添加使用default或者static修饰的方法,在这里我们只讨论default方法,default修饰方法只能在接口中使用,在接口种被default标记的方法为普通方法,可以直接写方法体。实现类会继承接口中的default方法如果接口A中有default方法:public interface A { public default void a(){...转载 2020-04-11 11:30:09 · 310 阅读 · 0 评论 -
Java锁Synchronized对象锁和类锁区别
java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法。java内置锁是一个互斥锁,这就是意味着最多只有一个线程能够获得该锁,当线程A尝试去获得线程B持有的内置锁时,线程A必须等待或者阻塞,知道线程B释放这个锁,如果B线程不...转载 2020-04-02 09:31:11 · 181 阅读 · 0 评论 -
Spring Security做JWT认证和授权
上一篇博客讲了如何使用Shiro和JWT做认证和授权(传送门:https://www.jianshu.com/p/0b1131be7ace),总的来说shiro是一个比较早期和简单的框架,这个从最近已经基本不做版本更新就可以看出来。这篇文章我们讲一下如何使用更加流行和完整的spring security来实现同样的需求。Spring Security的架构按照惯例,在使用之前我们先讲一下简...转载 2020-02-23 17:32:13 · 552 阅读 · 0 评论 -
SpringDataJPA学习记录(四)--使用QueryDSL
1.问题的提出最近再看公司项目中有如下代码,看了后简直不能忍.缺点列出来的话,如下:返回类型Object[]数组,至于每一个下标对应哪个字段,没法直观的看到,例如object[11]是什么类型?字段名是什么?这个就无法直观得知. sql中复杂的关系导致不可维护,每一个接手的人都要研究sql半天 该种动态拼接条件方法导致类似的代码会大量重复,所以IDEA打开的时候黄了半边天. 该...转载 2020-02-19 15:01:16 · 471 阅读 · 0 评论 -
1-Hex编码
编码原理Hex编码就是把一个8位的字节数据用两个十六进制数展示出来,编码时,将8位二进制码重新分组成两个4位的字节,其中一个字节的低4位是原字节的高四位,另一个字节的低4位是原数据的低4位,高4位都补0,然后输出这两个字节对应十六进制数字作为编码。Hex编码后的长度是源数据的2倍,Hex编码的编码表为 0 0 1 1 2 2 3 3 4 4 ...转载 2020-01-02 21:59:35 · 1404 阅读 · 0 评论 -
jvm 对象奥秘
上一篇jvm博客中我们学习了jvm的内存模型,本篇中我们来探索对象是如何创建的,对象的内存布局,对象是如何访问到的。对象的创建过程第一步:类加载检查虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中(JDK1.7 及之后版本的 JVM 已经将运行时常量池从方法区中移了出来,在 Java 堆(Heap)中开辟了一块区域存放运行时常量池)定位到这个类的符号引用,...转载 2019-10-14 18:27:19 · 87 阅读 · 0 评论 -
探索CAS无锁技术
前言:关于同步,很多人都知道synchronized,Reentrantlock等加锁技术,这种方式也很好理解,是在线程访问的临界区资源上建立一个阻塞机制,需要线程等待其它线程释放了锁,它才能运行。这种方式很显然是奏效的,但是它却带来一个很大的问题:程序的运行效率。线程的上下文切换是非常耗费资源的,而等待又会有一定的时间消耗,那么有没有一种方式既能控制程序的同步效果,又能避免这种锁带来的消耗呢...转载 2019-10-13 17:18:05 · 75 阅读 · 0 评论 -
Java 执行linux scp 远程获取文件和上传
原文连接:https://www.cnblogs.com/shijiaoyun/p/4930906.html 需要的jar包:ganymed-ssh2-build210.jarimport java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io...转载 2018-10-24 17:57:13 · 1432 阅读 · 0 评论 -
A class file was not written
eclipse下编译mvn项目后,报错:A class file was not written. The project may be inconsistent, if so try refreshing this project ...,反复编译并发布几次,最后重启了eclipse,仍报该错,无奈求助百度,还是没有解决。最后又重新看了下该错误,恍然大悟,刚才通过linux客户端将编译路径t...原创 2018-08-14 16:12:14 · 1149 阅读 · 0 评论 -
java中类加载、初始化时机
原文链接:https://www.cnblogs.com/zwbg/p/5903527.htmljava虚拟机规范虽然没有强制性约束在什么时候开始类加载过程,但是对于类的初始化,虚拟机规范则严格规定了有且只有四种情况必须立即对类进行初始化,遇到new、getStatic、putStatic或invokeStatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这...转载 2018-07-30 10:05:59 · 159 阅读 · 0 评论 -
浅谈Java中的对象和引用
原文链接:http://www.cnblogs.com/dolphin0520/p/3592498.html浅谈Java中的对象和引用 浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然。今天我们就来一起了解一下对象和对象引用之间的区别...转载 2018-06-22 17:01:45 · 84 阅读 · 0 评论 -
Java:传值还是传引用?
原文链接:https://www.cnblogs.com/chen-kh/p/6696303.html这是一个Java的经典问题,大部分人从C,C++语言入门,C语言有三种传递方式:值传递,地址传递和引用传递。详细的对C语言指针,引用的我个人的理解,见链接。Java所有操作都是传值操作!都是传值操作!都是传值操作!重要的事情说三遍。疑问?那为什么别人讲的时候都是说,java的基本数据类型都是传值,...转载 2018-06-22 16:33:03 · 104 阅读 · 0 评论 -
A class file was not written. The project may be inconsistent, if so try refreshing this project and
今天遇到一个编译问题:A class file was not written. The project may be inconsistent, if so try refreshing this project and building it查找资料说是磁盘满了,看了下自己的磁盘剩余空间还挺多,所以排除,但是反复编译还是不通过,最后发现是自己的target目录被 Bitvise ssh cli...原创 2018-06-14 15:19:57 · 3117 阅读 · 0 评论 -
java之Pattern类详解
原文链接:https://www.cnblogs.com/SQP51312/p/6136304.html在JDK 1.4中,Java增加了对正则表达式的支持。java与正则相关的工具主要在java.util.regex包中;此包中主要有两个类:Pattern、Matcher。Pattern 声明:public final class Pattern implements java.io.Seri...转载 2018-06-22 10:02:11 · 19782 阅读 · 1 评论 -
Java正则表达式Pattern和Matcher类详解
原文链接:https://blog.csdn.net/yin380697242/article/details/52049999概述Pattern类的作用在于编译正则表达式后创建一个匹配模式.Matcher类使用Pattern实例提供的模式信息对正则表达式进行匹配Pattern类常用方法及介绍Pattern complie(String regex) 由于Pattern的构造函数是私有的,不可以直...转载 2018-06-22 10:01:08 · 244 阅读 · 0 评论 -
final 类和不可变类
原文链接:http://quanquan127.iteye.com/blog/1558401https://blog.csdn.net/topwqp/article/details/464332831.final 类 final修饰的类不可有子类,例如java.lang.Math类就是一个final类,它不可以有子类。 为了保证某个类不可以被继承,则可以使用final修饰这个类。下面的代码示范了f...转载 2018-05-17 23:20:57 · 2057 阅读 · 0 评论 -
Java将Nginx输出的日志有日期字符串转成Date类型
原文连接:http://mamicode.com/info-detail-348837.html原始的Nginx日期数据为:[28/Nov/2014:11:56:09 +0800]需要将[]替换掉: <pre name="code" class="java">timeLocal = [28/Nov/2014:11:56:09 +0800]timeLocal = t...转载 2018-10-24 19:50:06 · 2583 阅读 · 1 评论