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

Spring AOP基于注解的Around通知

@Around是一种建议类型,可确保方法执行前后的通知可以运行。 以下是@Around通知的语法: 语法 @Pointcut("execution(* com.yiibai.Student.getAge(..))") private void selectGetName(){} @Around("selectGetAge()") public void aroundAdvice(ProceedingJoinPoint proceedingJoinPoint){ System.out.println("[aroundAdvice] Around advice"); Object[] args=jp.getArgs(); if(args.length>0){ System.out.print("...阅读全文

博文 2020-04-23 06:23:23 Spring AOP教程™

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编码

Spring 踩坑之@Transactional 神奇失效 - 个人文章

小鱼儿 18 Spring 踩坑之@Transactional 神奇失效 事务处理 事务 spring java 发布于 2018-04-26 引言 对于追求数据强一致性的系统,事务扮演者十分重要的角色.最近在项目中遇到一个事务失效的问题,在此分享给大家。 情景回放 ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction ; SQL []; Lock wait timeout exceeded; try restarting transaction; nested exception ...阅读全文

博文 2020-07-21 12:57:12 SegmentFault 思否

【Java】利用反射执行Spring容器Bean指定的方法,支持多种参数自动调用

目录 使用情景 将定时任务录入数据库(这样做的好处是定时任务可视化,也可以动态修改各个任务的执行时间),通过反射执行对应的方法; 配合Netty实现简单的HTTP请求处理框架 其他需要使用反射执行Spring方法的业务亦可 目的 很多文章都提到了反射,但是对于方法参数处理这一块都是明确了类型,不支持按照实际参数动态转换,而本篇文章提供了一个思路怎么做到方法参数的动态调用。 大家也可以通过利用本文的方法结合自己的业务场景写出复用性更高、可扩展性更好的代码。欢迎各位指出文章中的错误,如果有更好的思路可以在下方评论,我们一起讨论。 欢迎转发,请注明出处。 实现方式 前提: 明确清楚需要执行的类和方法。 思路 通过Spring容器获取需要执行的类,注意:从spring容器中获取的类可能是被JDK或C...阅读全文

博文 2021-06-07 13:00:18 博客

定时器 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

scala中:: , +:, :+, :::, +++的区别

scala中:: , +:, :+, :::, +++的区别Jefffrey发布于 2016-05-08 初学scala的人都会被Seq的各种操作符所confuse。下面简单列举一下各个Seq操作符的区别。 4种操作符的区别和联系 :: 该方法被称为cons,意为构造,向队列的头部追加数据,创造新的列表。用法为 x::list,其中x为加入到头部的元素,无论x是列表与否,它都只将成为新生成列表的第一个元素,也就是说新生成的列表长度为list的长度+1(btw, x::list等价于list.::(x)) :+和+: 两者的区别在于:+方法用于在尾部追加元素,+:方法用于在头部追加元素,和::很类似,但是::可以用于pattern match ,而+:则不行. 关于+:和:+,只要记住冒号永远...阅读全文

博文 2021-02-22 07:42:28 SegmentFault 思否

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

JVM之G1回收器和常见参数配置

过去的几天里,我把JVM内部的垃圾回收算法和垃圾回收器。还剩下最后一个G1回收器没有说,我们今天数一下G1回收器和常见的参数配置。G1回收器G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器,以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征。我们会想一下我们上次课说的parNew+CMS回收器已经很厉害了,但是我们的服务器是那种超大内存的服务器呢?比如内存是32G的,可能最后我们的堆内存需要分配到十多个G,我们用parNew+CMS对于STW时间还是很长的,需要清理的越多,时间消耗越长啊,但是我们的G1垃圾回收器可以做到限制时间来收集,我们先看一下G1的模型图。来解释一下这个图,G1垃圾回收器,会把你的堆内存分为 大小相等 ...阅读全文

博文 2020-07-28 07:13:10 知乎

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

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并发(2)—PV机制与monitor(管程)机制

登录注册写文章首页下载APP抽奖JAVA并发(2)—PV机制与monitor(管程)机制小胖学编程关注赞赏支持JAVA并发(2)—PV机制与monitor(管程)机制在操作系统中,进程之间经常有互斥和协作两种关系,为了有效处理这两种情况,W.Dijkstra在1965年提出了信号量(semaphore 塞吗佛)和PV操作。 1. 信号量与PV机制 信号量是一种抽象的数据类型,由一个整型S变量和P原语、V原语组成(原语:即不可中断的过程)。并且这个整型变量只能由PV改变。 P(S)意味着S-1,若S-1<0,说明资源不够用,将进程加入到等待队列中; V(S)意味着S+1,若S+1<=0,说明等待队列中存在进程,那么唤醒一个等待进程; 信号是操作系统提供的一种协调共享资源访问的方法。信号量由操作...阅读全文

博文 2021-06-16 02:56:50 简书

mysql datetime与timestamp区别_wangjun5159的专栏

datetime: 1、保存格式为YYYYMMDDHHMMSS(年月日时分秒)的整数,所以,它与时区无关,存入的是什么值就是什么值,不会根据当前时区进行转换。 2、从mysql 5.6.4中,可以存储小数片段,最多到小数点后6位,显示时格式为 yyyy-MM-dd HH:mm:ss[.222222] mysql5.5中,没有小数片段,精确到秒。所以,我再从5.6版本迁移到5.5时,因生成的sql中datetime(6)有小数片段,无法导入。 3、存储范围:从1000-01-01 00:00:00 到'9999-12-31 23:59:59' 4、长度,8个字节,datetime(n),n不是存储长度,而是显示的小数位数,即使小数位数是0,存储是也是存储的6位小数,仅仅显示0位而已;要想显示小...阅读全文

博文 2020-12-23 10:48:57 CSDN博客

又一次线上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 中文开源技术交流社区

深入解析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项目的过程 - 小得盈满

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

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

数据库连接断开 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

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 思否

计算机浮点运算精度问题的一些探讨_薛梦冉

本篇博客要点如下: 浮点运算常见的一些精度问题 浮点运算精度问题产生的原因 浮点运算精度问题的几点疑问进制的相互转换 十进制和二进制整数转换十进制和二进制小数转换 浮点数据的存储 IEEE 754标准浮点数表示举例误差分析 浮点精度丢失问题的几种解决方案 转换成整型进行计算使用四舍五入计算使用Decimal函数计算 参考资料 浮点运算常见的一些精度问题 相信各位在进行浮点型数据运算的时候,出现过一些不符合常规认知,或者是我们不愿出现的结果, 比如下面这些示例(以MongoDB,Java,Python为例): mongoDB中对某种类型的交易金额聚合求和的时候: db.FACT_TRADE_POSP.aggregate([ {$match:{'AC_DT':'20200306','ETL_SO...阅读全文

博文 2020-09-29 03:44:41 CSDN博客

可能是最全面的G1学习笔记

引子最近遇到很多朋友过来咨询G1调优的问题,我自己去年有专门学过一次G1,但是当时只是看了个皮毛,因此自己也有不少问题。总体来讲,对于G1我有几个疑惑,希望能够在这篇文章中得到解决。 G1出现的初衷是什么? G1适合在什么场景下使用? G1的trade-off是什么? G1的详细过程? 如何理解G1的gc日志? G1的调优思路? G1和CMS的对比和选择? 一、基础知识1. 初衷在G1提出之前,经典的垃圾收集器主要有三种类型:串行收集器、并行收集器和并发标记清除收集器,这三种收集器分别可以是满足Java应用三种不同的需求:内存占用及并发开销最小化、应用吞吐量最大化和应用GC暂停时间最小化,但是,上述三种垃圾收集器都有几个共同的问题:(1)所有针对老年代的操作必须扫描整个老年代空间;(2)年轻...阅读全文

博文 2020-03-01 03:39:01 知乎

遍历中修改HashMap的Key_Dustin_CDS的博客

一、不可变对象 1.1 什么是不可变对象 immutable Objects就是那些一旦被创建,它们的状态就不能被改变的Objects,每次对他们的改变都是产生了新的immutable的对象,而mutable Objects就是那些创建后,状态可以被改变的Objects。 不可变的优势: (1)提高效率。如果你知道一个对象是不可变的,那么需要拷贝这个对象的内容时,就不用复制它的本身而只是复制它的地址。复制地址需要很小的内存,效率也很高;对于同时引用这个“ABC”的其他变量也不会造成影响。 (2)安全也简化了程序的开发。在多线程应用中可以不使用锁机制就能被其他线程共享。 1.2 String类为什么是不可变的 字符串常量池(String pool, String intern pool, St...阅读全文

博文 2021-04-01 12:36:27 CSDN博客_hashmap替换key

深入理解数据库编程中的超时设置 - 云+社区

数据库是开发过程中最常用的组件,然而我们经常会遇到各种各样的超时异常,如:connect timeout:建立数据库连接超时socket timeout:socket读取超时statement timeout:单个sql执行超时transaction timeout:事务执行超时,一个事务中可能包含多个sqlget connection timeout:从连接池中获取链接超时读完此文,你将彻底掌握各种超时产生的根本原因,以及对应的解决方案。1 connectTimeout与socketTimeoutconnect timeout和socket timeout都属于TCP层面的超时。以mysql为例,我们可以在jdbc url中指定connectTimeout和socketTimeout。如:...阅读全文

博文 2020-07-03 11:41:01 腾讯云

如何解决java.lang.SecurityException: Invalid signature file digest for Manifest main attributes_tongtong0704的博客

这个问题是在maven打包之后由于重复引用某些依赖导致生成了一些.SF等文件,运行jar时会抛出。 在遇到这个问题时,一时不知道是什么原因,上网查了很多解决方法,有的回答是: 原因:在META-INF下会有多余的以SF结尾的文件,删除后不会出现次问题 找到原因是因为引入的log4j版本有问题,当引入如下版本: log4j log4j 1.2.17 打包后不会出现如上问题 但我删除了META-INF下能看到的所有文件,打包时还是会生成还是会报错(因为是打包过程生成的); 然后又继续找答案,有说是rpc包版本冲突的,也...阅读全文

博文 2020-12-11 03:20:44 CSDN博客

JVM运行时内存数据区域

JVM运行时内存数据区域 2018-01-20 Tommy.Tesla JVM 虚拟机栈 方法区 Java堆 运行时常量池 1 讨论背景 周志明老师写的《深入理解Java虚拟机》应该很多程序员都读过,第二章中阐述了Java虚拟机在执行Java程序的过程中是如何管理内存的,以及这些内存是如何被划分成更细的逻辑区域的。如下图所示,按照书中的论述JVM运行时数据区域包含以下几个数据区[1]。 按照《Java虚拟机规范(Java SE 7版)》,各区域的功能简要介绍如下: 程序计数器:各线程私有。用于记录每个线程下一条待执行的字节码指令以及相关信息。这是唯一的不会抛出OOM异常的区域。 Java虚拟机栈:各线程私有。虚拟机栈由一个个的栈帧组成,每个栈帧包含了对应方法执行所需要的信息,具体包括:局部变...阅读全文

博文 2020-06-03 13:19:59 tbwork.org

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

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

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

项目中途引入Mybatis-plus后报错:Caused by: java.lang.ClassNotFoundException: org.mybatis.logging.LoggerFactory_杨四郎2018的博客

项目中途引入Mybatis-plus后报错:Caused by: java.lang.ClassNotFoundException: org.mybatis.logging.LoggerFactory 1、网上有提供解决办法1: 在引入mybatis-plus之前,是存在mybatis的包和pagehelper包的,把这两个注释掉就可以了。 分页就使用mybatis-plus自带的IPage。 org.springframework.data spring-data-redis 1.6.2.RELEASE redis.clients 阅读全文

博文 2020-11-02 07:13:08 博客园

idea编译项目很慢

如果你正在使用 IntelliJ IDEA 编译 Java 项目,遇到编译速度缓慢的问题,以下是一些可能的原因和解决方法: 内存不足:检查你的电脑内存是否足够支持 IDEA 运行,并确保为 IDEA 分配了足够的内存。你可以编辑 IntelliJ IDEA 安装目录下的 bin 目录下的 idea64.exe.vmoptions 文件,将-Xms和-Xmx参数值增加一些。 插件过多:禁用不必要的插件,因为一些插件可能会导致 IDEA 编译速度变慢。 外部依赖库:检查你的项目是否引用了大量的外部依赖库,如果是,建议尝试减少依赖库的数量或者更换为较小的依赖库。 编译设置:检查你的编译设置是否正确。例如,你可以在“File” -> “Settings” -> “Build, Execution, ...阅读全文

超好用的自带火焰图的 Java 性能分析工具 Async

如果你经常遇到 Java 线上性能问题束手无策,看着线上服务 CPU 飙升一筹莫展,发现内存不断泄露满脸茫然。别慌,这里有一款低开销、自带火焰图、让你大呼好用的 Java 性能分析工具 - async-profiler。 最近 Arthas 性能分析工具上线了火焰图分析功能,Arthas 使用 async-profiler 生成 CPU/内存火焰图进行性能分析,弥补了之前内存分析的不足。在 Arthas 上使用还是比较方便的,使用方式可以看官方文档。这篇文章介绍 async-profiler 相关内容。 Arthas 火焰图官方文档:alibaba.github.io/arthas/prof… 如果你想了解更多 Arthas 信息,可以参考之前文章:Arthas - Java 线上问题定位处...阅读全文

博文 2021-04-01 12:21:30 profiler 了解一下

理解ClassNotFoundException与NoClassDefFoundError的区别 - 云+社区

上篇文章已经介绍过Java的类加载机制,在类加载的过程中我们最常遇到的异常就是:ClassNotFoundException NoClassDefFoundError但是你知道他们的区别吗?以及什么情况下发生上面的异常? 如果你还不清楚,那么不着急,我们来仔细分析一下:先来说说第一个异常提示名字已经非常友好了,就是告诉我们使用类加载器就加载某个类的时候,发现所有的path下面都没有找到,从引导类路径,扩展类路径到当前的classpath下全部没有找到,就会抛出上面的异常,最常见的例子就是加载JDBC驱动包的时候,它的依赖jar并不在classpath里面,如下:. package class_loader.exception; public class ExceptionTest { pub...阅读全文

博文 2021-04-03 07:11:41 腾讯云

总第405篇2020年 第29篇很多低延迟高可用Java服务的系统可用性经常受GC停顿的困扰,作为新一代的低延迟垃圾回收器,ZGC在大内存低延迟服务的内存管理和回收方面,有着非常不错的表现。本文从GC之痛、ZGC原理、ZGC调优实践、升级ZGC效果等维度展开,详述了ZGC在美团低延时场景中的应用,以及在生产环境中取得的一些成果。希望这些实践对大家有所帮助或者启发。ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,它的设计目标包括:停顿时间不超过10ms;停顿时间不会随着堆的大小,或者活跃对象的大小而增加;支持8MB~4TB级别的堆(未来支持16TB)。从设计目标来看,我们知道ZGC适用于大内存低延迟服务的内存管理和回收。本文主要介绍ZGC在低...阅读全文

博文 2020-08-07 06:12:22 mp.weixin.qq.com

HeadFirst 设计模式学习笔记8--代理模式_Java_数据库天地

1.这一节的任务是我们需要完成对上一节的糖果机产生一个机器状况和余量的报告,若这个报告在本地(不是通过Internet)生成的话,那么我们的设计就很简单了,在糖果机中加入Location的信息,并且创建一个类GumballMonitor 完成报告的生成: public class GumballMonitor { GumballMachine machine; public GumballMonitor(GumballMachine machine) { this.machine = machine; } public void report() { System.out.println("Gumball Machine: " + machine.getLocation()); System...阅读全文

博文 2020-04-21 02:18:57 CSDN博客

排序算法(六)

前言我们在上篇文章 排序算法(五)-双调排序 介绍了双调排序,今天我们来看一下另一种排序算法 —— TimSort。TimSort是Tim Peters发明的一种混合排序,最早是Python语言的内置排序算法。关于Python内置的TimSort描述可以查看该 文档。关于TimSort的理论基础,可以查看该篇论文 Optimistic Sorting and Information Theoretic Complexity,这篇论文论证了插入排序和归并排序合并后效率提高的可能性,即TimSort的理论基础。Java自Java 7 后加入TimSort,其实现参考了Python版本的实现,我们可以在JDK源码的util包下找到它,java.util.TimSort,这个class不是publi...阅读全文

博文 2021-08-18 12:35:11 TimSort | SakuraTears的博客

TreeMap 实现原理

在用TreeMap之前我们要对TreeMap有个整体的认识。 1、TreeMap介绍 TreeMap是一个通过红黑树实现有序的key-value集合。 TreeMap继承AbstractMap,也即实现了Map,它是一个Map集合 TreeMap实现了NavigableMap接口,它支持一系列的导航方法, TreeMap实现了Cloneable接口,它可以被克隆 TreeMap introduction:A Red-Black tree based NavigableMap implementation. The map is sorted according to the natural ordering of its keys, or by a Comparator provided a...阅读全文

博文 2021-04-03 06:12:19 juejin.cn

JDK动态代理与运行时织入字节码

blog.csdn.net/u010061691/…java jdk动态代理其实是动态生成字节码与反射机制的一个结合,说到反射机制很多人都用到过反射,只要得到对应类的Class对象即可,调用方法,获取成员变量等等,那么jdk的动态代理就是在程序运行的过程中,动态的将我们维护的检查性的代码,放在正常的业务代码之前,那么怎么调用我正常的业务代码呢,因为业务可能有很多种,也就是说可能会有不同的类,但是都要执行相同的检查性代码,如我们要取钱,或者是修改身份证,都必须验证通过才可以,这显然是两个类,一个是Money,一个是ID,所以我们在调用正常业务代码的时候,其实不知道我们调用的是谁的代码,这时候就用到反射,通过反射,动态的识别类型,然后再调用方法,如我们要取钱,那么传入的应该是一个Money的实例...阅读全文

博文 2021-06-14 12:55:27 juejin.cn

antlr4 访问器模式实现四则运算_d64793946的博客

1.eclipse 或idea安装antlr4插件(以eclipse 为例 ) windows->Eclipse Marketplace->搜索antlr 搜索到antlr 4 ide 进行安装 2.插件安装完成后新建antlr4 项目 file ->new ->other->antlr4项目 填写项目名->完成 3.将项目转化为maven项目 右键项目-->configure->转化为maven项目 方便管理 加入如下依赖 org.antlr antlr4-runtime 4.7.2 ...阅读全文

博文 2020-09-16 08:57:16 CSDN博客

理解Java中的弱引用(Weak Reference) - absfree

本篇文章尝试从What、Why、How这三个角度来探索Java中的弱引用,理解Java中弱引用的定义、基本使用场景和使用方法。由于个人水平有限,叙述中难免存在不准确或是不清晰的地方,希望大家可以指出,谢谢大家:) 1. What——什么是弱引用? Java中的弱引用具体指的是java.lang.ref.WeakReference类,我们首先来看一下官方文档对它做的说明: 弱引用对象的存在不会阻止它所指向的对象变被垃圾回收器回收。弱引用最常见的用途是实现规范映射(canonicalizing mappings,比如哈希表)。 假设垃圾收集器在某个时间点决定一个对象是弱可达的(weakly reachable)(也就是说当前指向它的全都是弱引用),这时垃圾收集器会清除所有指向该对象的弱引用...阅读全文

博文 2021-04-27 05:57:37 博客园

Java并发基石——所谓“阻塞”:Object Monitor和AQS(2)_JAVA入门中

(接上文《Java并发基石——所谓“阻塞”:Object Monitor和AQS(1)》) 3、AQS 上文我们较为详细的介绍了Java线程调度中的Object Monitor机制以及其工作情况,本文我们开始介绍Java线程调度中的另一种实现机制AQS,包括它的使用方式和底层工作原理。 3.1、AQS介绍 JAVA中的AQS队列从根本上来讲是基于CAS的典型实现(也是使用volatile关键字的典型案例)。从技术层面的依赖关系上讲它首先依赖于java中的java.util.concurrent.locks.LockSupport类,这个类在本专题之前的文章中已经介绍过,专门用来实现应用程序级别对硬件级别的“同步多线程(SMT)”技术的封装。 同步多线程(SMT) 技术是一种硬件层面的技术,具...阅读全文

博文 2021-06-16 02:47:38 CSDN博客

Spring中集成Groovy的四种方式_蓝天之枫

groovy是一种动态脚本语言,适用于一些可变、和规则配置性的需求,目前Spring提供ScriptSource接口,支持两种类型,一种是 ResourceScriptSource,另一种是 StaticScriptSource,但是有的场景我们需要把groovy代码放进DB中,所以我们需要扩展这个。 ResourceScriptSource:在 resources 下面写groovy类 StaticScriptSource:把groovy类代码放进XML里 DatabaseScriptSource:把groovy类代码放进数据库中 工程模块为: ResourceScriptSource groovy的pom groovy-all阅读全文

博文 2021-07-09 02:58:30 CSDN博客

ThreadLocalMap里Entry为何声明为WeakReference? - waterystone

Java里,每个线程都有自己的ThreadLocalMap,里边存着自己私有的对象。Map的Entry里,key为ThreadLocal对象,value即为私有对象T。在spring MVC中,常用ThreadLocal保存当前登陆用户信息,这样线程在任意地方都可以取到用户信息了。 public class UserContext { private static final ThreadLocal userInfoLocal = new ThreadLocal(); public static UserInfo getUserInfo() { return userInfoLocal.get(); } public static void setUs...阅读全文

博文 2021-04-27 05:58:59 博客园

什么是FastJson中AutoType反序列化漏洞?_hosaos的博客

文章目录 频繁出现的反序列化漏洞parse()及parseObject()AutoType及安全校验AutoType安全校验AutoType黑名单机制SafeMode安全机制攻击思路 反序列化攻击模拟TemplatesImpl攻击调用链路攻击类Translet生成构造攻击JSON串攻击模拟 写在最后 频繁出现的反序列化漏洞 最近公司的小伙伴们收到了一波安全工单,因为FastJson存在高危漏洞,要求将FastJson版本号升级到1.2.69及以上 漏洞描述如下 在Fastjson<=1.2.68的版本中,通过新的Gadgets链绕过autoType开关,在autoType关闭的情况下仍然可能可以绕过黑白名单防御机制,实现了反序列化漏洞利用的远程代码执行效果,同时,此次修复补丁也补充了auto...阅读全文

博文 2022-05-23 08:07:38 CSDN博客_fastjson的autotype属性