
java
文章平均质量分 57
WQ同学
这个作者很懒,什么都没留下…
展开
-
volatile 如何实现保证可见性和有序性
可见性lock指令,对volatile修饰的变量,执行写操作的话,JVM会发送一条lock前缀指令给CPU,CPU在计算完之后会立即将这个值写回主内存,同时因为有MESI缓存一致性协议,所以各个CPU都会对总线进行嗅探,自己本地缓存中的数据是否被别人修改如果发现别人修改了某个缓存的数据,那么CPU就会将自己本地缓存的数据过期,然后这个CPU上执行的线程在读取那个变量的时候,就会从主内存重新加载最新的数据。lock前缀指令 + MESI缓存一致性协议有效性(2)内存屏障:禁止重排序JVM提供的内存转载 2021-08-15 23:02:11 · 1070 阅读 · 0 评论 -
Java虚拟机OOM之GC overhead limit exceeded
GC回收时间过长时会抛出OutOfMemoryError。过长的定义是:超过98%的时间用来做GC并且回收了不到2%的堆内存。连续多次GC都只回收了不到2%的极端情况下才会抛出。假如不抛出GC overhead limit错误会发生什么情况呢?那就是GC清理的这么点内存很快会再次填满,迫使GC再次执行,这样就会形成恶性循环,CPU使用率一直是100%,而GC却没有任何成果示例代码:public class GCOverheadLimitExceededDemo { public stat转载 2021-08-10 23:39:59 · 368 阅读 · 0 评论 -
Java虚拟机OOM之运行时常量池溢出
在 JDK 1.7 之前如果要向运行时常量池中添加内容,最简单的做法就是使用 String.intern()这个 Native 方法。该方法的作用是:如果池中已经包含一个等于此 String 对象的字符串,则返回代表池中这个字符串的String 对象;否则,将此 String 对象包含的字符串添加到常量池中,并且返回此 String 对象的引用。由于常量池分配在方法区内,我们可以通过-XX:PermSize 和-XX:MaxPermSize 限制方法区的大小,从而间接限制其中常量池的容量代码运行时常量池导原创 2021-08-10 23:36:41 · 352 阅读 · 0 评论 -
Java虚拟机OOM之方法区溢出
方法区用于存放 Class 的相关信息,如类名、访问修饰符、常量池、字段描述、方法描述等。对于这个区域的测试,基本的思路是运行时产生大量的类去填满方法区,直到溢出。虽然直接使用 JavaSE API 也可以动态产生类(如反射时的GeneratedConstructorAccessor 和动态代理等),但在本次实验中操作起来比较麻烦。在代码清单 2-5 中,笔者借助 CGLib①直接操作字节码运行时,生成了大量的动态类。值得特别注意的是,我们在这个例子中模拟的场景并非纯粹是一个实验,这样的应用经常会出现在转载 2021-08-10 23:07:31 · 333 阅读 · 0 评论 -
Java虚拟机OOM之虚拟机栈和本地方法栈溢出
由于HotSpot虚拟机中并不区分虚拟机栈和本地方法栈,因此,虽然设置本地方法栈大小的参数(-Xoss)存在,但是无效,栈容量只能由-Xss参数设定。关于虚拟机栈和本地方法栈溢,在java虚拟机规范中描述了两种异常:(1)如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常(2)如果虚拟机在扩展栈时无法申请到足够内存空间,则抛出OutOfMemoryError异常(3)与虚拟机栈一样,本地方法栈区域也会抛出 StackOverflowError 和OutO转载 2021-08-10 23:00:52 · 426 阅读 · 0 评论 -
Semaphore 信号量限流 ,这东西真管用吗
最近参与公司的服务治理项目,主要目的是为了保证生产服务高可用性,以及高稳定性。为了更好的参与的这个项目,这段时间一直在充电学习这方面的相关知识,包括限流,熔断,服务降级等等。那在学习限流的时候,看到网上很多文章中直接使用了JDK 中 Semaphore 实现了限流器。虽然到达的限流的目的,但是实际上其还是存在很大缺陷。那你如果没有经过完整测试,直接将这套限流方式照搬过来,发到了生产环境,那就等着背这口大锅吧。好了,今天我们主要来聊聊 Semaphore ,文章主要内容如下图所示:semaph转载 2021-08-07 23:54:21 · 810 阅读 · 0 评论 -
线程的几种状态以及sleep/wait/yield/join的区别
一.线程通常有五种状态:新建状态(New):新创建了一个线程对象。就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待 获取CPU的使用权。运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进...转载 2020-04-14 22:24:50 · 682 阅读 · 0 评论 -
Leetcode 数组生成二叉树的工具
在刷leetcode 很多树题目的时候经常遇到这种情况,For example:Given BST [1,null,2,2], 1 \ 2 / 2发现测试的例子给的是一个数组 然而 需要输入的结果是一个树形结构每次手动的去创建比较麻烦,写了一个数组到树的一个小工具由于其中有null 的情况所以用的是装箱类,实现过程也比较简单,就是先创建根节点然后在...原创 2020-04-13 23:58:34 · 1849 阅读 · 0 评论 -
Happens-before原则
如果一个操作Happens-before另一操作,那么第一个操作结果对第二个操作可见.而且第一个执行操作顺序在第二个之前执行.两个操作之间存在Happens-before关系,并不意味着一定要按照Happens-before制定的顺序执行操作,如果重排序后与Happens-before顺序执行的操作结果一致,这样的重排序并不非法happen-before 原则规则:程序次序规则...转载 2020-04-12 19:37:28 · 231 阅读 · 0 评论 -
Java volatile 有什么作用
在由Java语言编写的程序中。有时候为了提高程序的执行效率,编译器会自己主动对其进行优化,把经常被訪问的变量缓存起来,程序在读取这个变量的时候有可能会直接从缓存(比如寄存器)中来读取这个值。而不会去内存中读取。这样做的一个优点是提高了程序的执行效率,但当遇到多线程编程时。变量的值可能由于别的线程而改变了,而该缓存的值不会相应改变,从而造成应用程序读取的值和实际的变量值不一致。比如,在本次线程内,当...原创 2020-04-12 19:20:38 · 478 阅读 · 0 评论 -
单例模式与线程安全
单例模式我想是平时大家都会经常用到,需要用线程安全的方式去保证对象的唯一。通常会使用两种方式去创建单例模式:1.饿汉式单例这种方式实现起来比较简单 但是会造成资源的浪费如果不使用这个类的话。package Singleton; public class HungerSingleton { private static HungerSingleton singleton=ne...转载 2020-04-12 19:05:58 · 189 阅读 · 0 评论 -
Synchronized与Lock区别
Java里面的两种管程模型之前我们了解了Java里面的一种管程模型monitor,synchronized就是基于Monitor实现的管程模型,在这个模型里面,synchronized中用锁解决了资源互斥问题,然后提供了wait(),notify(),notifyAll() 一组方法解决了线程同步问题,Java里面另一种管程模型就是Lock+Condition, 在此模型中 Lock是用来解决资...原创 2020-04-12 18:23:07 · 359 阅读 · 0 评论 -
synchronized在JDK6做了哪些优化
记得在大学中那个时候刚开始学习java, 需要遇到多线程需要加锁的操作时,不管不顾全部都用synchronized,相对于当时的我们来说synchronized是这么的神奇而又强大,那个时候我们赋予它一个名字“同步”,也成为了我们解决多线程情况的百试不爽的良药。但是,随着我们学习的进行我们知道synchronized是一个重量级锁,相对于Lock,它会显得那么笨重,以至于我们认为它不是那么的高效而...转载 2020-04-12 16:18:33 · 1482 阅读 · 0 评论 -
多边形重心问题 java
多边形重心问题 题目描述: 描述 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接),所有线段不和其他线段相交,但是可以重合,可得到一个多边形或一条线段或一个多边形和一个线段的连接后的图形; 如果是一条线段,我们定义面积为0,重心坐标为(0,0).现在求给出的点集组成的图形的面积和重心横纵坐标的和;原创 2017-08-07 00:12:08 · 3241 阅读 · 0 评论 -
一种排序
题目链接 点这里 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大);1.按照编号从小到大排序2.对于编号相等的长方形,按照长方形的长排序;3.如果编号和长都相同,按照长方形的宽排序;4.如果编号、长、宽都相同,就只保留一个长方形用于排序,删除多余的长方形;最后排好序按照指定格式原创 2017-08-09 13:09:58 · 2818 阅读 · 0 评论 -
java 处理收到的微信用户消息并给出回复 --文字类消息
java 处理收到的微信用户消息并给出回复 --文字类消息转载 2017-08-25 22:05:46 · 5219 阅读 · 0 评论 -
iava 实现将office 文件转成pdf
做一个项目需要文件预览效果,于是将office 文件转成pdf 进行预览,但是在网上找了很多发现很多大神都是用openoffice实现的,本地还要安装,感觉有点麻烦,难道就没有第三发就jar支持么,于是乎找了很久很久终于找到了一片博客 地址点这里转载 2017-08-27 23:44:30 · 2876 阅读 · 0 评论 -
ACM 喷水装置2 java
acm 喷水装置 2 java 练习原创 2017-09-13 22:57:26 · 2853 阅读 · 0 评论 -
java sdk 上传文件到阿里云 oos
oos java 文件上传原创 2017-09-13 23:54:44 · 4148 阅读 · 0 评论 -
oos 私有bucket 获取访问链接
阿里云oos 私有bucket 通过key 访问链接原创 2017-09-14 22:55:14 · 22992 阅读 · 7 评论 -
acm 会场安排问题
acm 会场安排问题 链接地址 题目描述:描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安原创 2017-09-14 22:23:46 · 3181 阅读 · 0 评论 -
oos 文件下载
前两篇写到了oos 上传 ,获取访问链接,那怎么下载呢。有两种方式 第一种使用文档里面的方法下载文件到本地,在读取文件下载给用户。第二种直接通过访问链接进行下载。第一种下载方式首先先写一个js 用来发起下载请求。传送一个key 作为参数key 是什么请参考获取访问链接那篇文章。 先写一个工具类将oos 的文件下载到本地具体代码如下//key 为存储oos 的key 值 fil原创 2017-09-25 01:07:37 · 4253 阅读 · 0 评论 -
acm 括号匹配(二)
描述 给你一个字符串,里面只包含”(“,”)”,”[“,”]”四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。转载 2017-09-25 13:27:59 · 3004 阅读 · 0 评论 -
聊聊java反射机制
一. 反射机制概念 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。在java中,只要给定类的名字 或者该类的对象实例, 那么就可以通过反射机制来获得类的所有信息。 反射是Java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。但是反射使用不当会成本原创 2017-09-26 17:39:01 · 3444 阅读 · 0 评论 -
Spring Boot学习之旅:(三)springboot热部署
相信做开发的程序猿们都体验过修改一次代码就要重启一次的滋味吧简直不要太爽,也比较影响工作效率,本来热部署准备后面介绍的但是为了方便就先讲了把。本文主要介绍两种方法配置热部署,下面请听细细道来原创 2017-09-26 22:42:02 · 2962 阅读 · 0 评论 -
Spring Boot学习之旅:(二)两种配置文件
springboot 的两种配置文件 .properties .yml 以及各种方式的优先级别。springboot采纳了建立生产就绪Spring应用程序的观点。 Spring Boot优先于配置的惯例,旨在让您尽快启动和运行。在一般情况下,我们不需要做太多的配置就能够让spring boot正常运行。在一些特殊的情况下,我们需要做修改一些配置,或者需要有自己的配置属性。原创 2017-09-24 19:19:58 · 3023 阅读 · 0 评论 -
高并发秒杀之秒杀优化
前三章节基本将秒杀的系统开发完成但是之前那种设计真的可以承受高并发下的秒杀么本篇文章结合该高并发系统考虑,哪些是可能出现的高并发点呢?转载 2017-10-05 12:51:21 · 4635 阅读 · 0 评论 -
将微信订阅号的用户消息发到自己的服务器
将微信订阅好的用户消息发到自己的服务器,这样就可以在自己的后台给出回复了,以可以在自己的后台设置客服机器人回复用户,和保存消息数据原创 2017-08-24 23:45:52 · 4063 阅读 · 0 评论 -
Spring Boot学习之旅:(五)Spring Boot 使用 junit 单元测试
最近刚好时间写了一些关于SpringBoot的帖子,正好现在把Junit再拿出来从几个方面再说一下。 那么先简单说一下为什么要写测试用例 1. 可以避免测试点的遗漏,为了更好的进行测试,可以提高测试效率 2. 可以自动测试,可以在项目打包前进行测试校验 3. 可以及时发现因为修改代码导致新的问题的出现,并及时解决那么本文从以下几点来说明怎么使用Junit,Junit4比3要方便很多,细节大家原创 2017-10-06 23:18:07 · 2944 阅读 · 0 评论 -
Spring Boot学习之旅:(六)springboot 整合 redis 以及 redis 通用工具类
这编文章主要介绍了springboot整合redis,以及redis配置和一些redis操作数据的工具类。原创 2017-10-08 08:27:20 · 11857 阅读 · 0 评论 -
单调递增最长子序列
题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=17 描述: 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4输入 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不会超过10000输出原创 2017-10-09 23:40:53 · 3017 阅读 · 0 评论 -
深入了解@RequestParam 注解
之前在控制层 一直都是采用test(String name);test(@RequestParam String name);test(@RequestParam(name=”username”) String name); 类似的方式赋值对这个注解了解的比较少,今天刚好有空就来深入了解一下这个注解。原创 2017-10-10 11:55:17 · 7222 阅读 · 2 评论 -
高并发秒杀API之Service
上篇文章介绍了秒杀的dao 这边将介绍秒杀的业务逻辑代码。主要有统一异常的控制,统一的枚举表示秒杀的状态,秒杀的业务逻辑,通用返回。 R_原创 2017-10-04 00:15:27 · 2839 阅读 · 0 评论 -
高并发秒杀系统API之Web层
实现完dao 和service 层后,接下来自然就是web层了。原创 2017-10-04 01:23:37 · 4093 阅读 · 0 评论 -
Spring Boot学习之旅:(一)HELLO WORLD
Spring一直是很火的一个开源框架,在过去的一段时间里,Spring Boot在社区中热度一直很高,所以决定花时间来了解和学习,为自己做技术储备。正文首先声明,Spring Boot不是一门新技术,所以不用紧张。从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置。它使用“习惯优于配置”原创 2017-09-21 22:47:25 · 2935 阅读 · 0 评论 -
实现一个自己的Validator 注解
近日开发rsetapi 做数据校验的时候,多次接触 到hibernate.validator 的注解校验,那能否自己也写一个注解校验呢原创 2017-10-19 23:45:34 · 3042 阅读 · 0 评论 -
Spring Boot学习之旅:(八)过滤器 Filter
1.Filter简介Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。 它主要用于对用户请求进行预处理,也可以对HttpServ...原创 2017-10-28 14:49:42 · 2818 阅读 · 0 评论 -
异步处理rest服务-多线程提升rest性能
1 异步处理的优点异步编程最大的特点是吞吐量大,延迟小,因为没有堵塞,这就容易挖掘现有硬件和操作系统等底层系统的潜力,同样的成本投入,异步系统要比传统铁板一块的同步系统更能应付爆发式涌潮的瞬间大流量 传统处理流程: 异步处理流程: 在tomcat 线程池中线程的数量的有限的,是线程达到上限请求就没法处理了。使用异步处理的话,主线程就可以空闲下来处理其他请求这样,服务器的吞吐量就...原创 2017-10-29 12:06:56 · 8186 阅读 · 0 评论 -
SwaggerUI 自动生成文档
swagger ui是一个API在线文档生成和测试的利器,目前发现最好用的。 为什么好用?支持API自动生成同步的在线文档, 这些文档可用于项目内部API审核,方便测试人员了解API,这些文档可作为客户产品文档的一部分进行发布,支持API规范生成代码,生成的客户端和服务器端骨架代码可以加速开发和测试速度. 不多说下面进行一下配置 首先引入pom 依赖<dependency>...原创 2017-10-29 22:53:09 · 5690 阅读 · 0 评论 -
Longest Substring Without Repeating Characters
LeetCode(3):Given a string, find the length of the longest substring without repeating characters.原创 2017-11-07 11:24:20 · 2755 阅读 · 0 评论