JAVA
文章平均质量分 71
hy_coming
不忘初心 方得始终
展开
-
为什么HashMap线程不安全?
假设线程1和线程2同时执行put,线程1执行put(“1”, “A”),线程2执行put(“5”, “B”),hash算法就是用key mod 表的长度,表长度为4,在mod 4 以后都冲突在table[1]这里了。注:下面的例子,只演示了。JDK1.7中的 HashMap 使用头插法插入元素,在多线程的环境下,扩容的时候有可能导致环形链表的出现,形成死循环。我们来看看多线程下的ReHash,假设现在有两个线程同时进行,线程1和线程2,两个线程都会新建新的数组,下面是resize 的过程。转载 2023-04-10 22:19:55 · 322 阅读 · 1 评论 -
Mysql tinyint长度为1时在java中被转化成boolean型
Mysql tinyint长度为1时在java中被转化成boolean型转载 2022-08-15 19:41:13 · 733 阅读 · 0 评论 -
MySQL批量更新死锁案例分析(转载)
问题描述在做项目的过程中,由于写SQL太过随意,一不小心就抛了一个死锁异常,如下:com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction at sun.reflect.GeneratedConstructorAccessor247.newInstance(Unknown S...转载 2022-03-26 13:16:47 · 1271 阅读 · 0 评论 -
Preconditions 使用总结
1 .checkArgument(boolean) :功能描述:检查boolean是否为真。 用作方法中检查参数失败时抛出的异常类型: IllegalArgumentException2.checkNotNull(T): 功能描述:检查value不为null, 直接返回value;失败时抛出的异常类型:NullPointerException3.checkState(boolean):功能描述:检查对象的一些状态,不依赖方法参数。 例如, Iterator可以用来next是否在re...转载 2021-04-28 10:25:53 · 371 阅读 · 0 评论 -
【延时队列】——实现方式
在开发中,往往会遇到一些关于延时任务的需求。例如 生成订单30分钟未支付,则自动取消 生成订单60秒后,给用户发短信 其实实现方式有很多种,这篇文章写得不错:https://www.cnblogs.com/wangwust/p/9467783.html...转载 2020-11-30 21:53:32 · 95 阅读 · 0 评论 -
【转】Java new一个Object对象占用多少内存?
Java的自动内存管理机制(automatic storage management system known as a garbage collector)省却了很多编码工作,大大地提高了Java的生产力,而且JVM的性能也越来越好,特别是G1的出现,改善了垃圾回收中stop the world的状况。也许很多人都没有考虑过这个问题,new一个Object对象到底占用多少内存呢( Object obj = new Object() )?这里很明确的是obj是一个指向对象的引用(refe..转载 2020-11-11 20:57:18 · 1227 阅读 · 0 评论 -
dependencyManagement和dependencies区别
dependencies:依赖,jar包管理。dependency:具体的依赖项。dependencyManagement:依赖,jar包管理。dependencyManagement和dependencies区别:1)dependencies:自动引入声明在dependencies里的所有依赖,并默认被所有的子项目继承。如果项目中不写依赖项,则会从父项目继承(属性全部继承)声明在父项目dependencies里的依赖项。2)dependencyManagement里只是声明依赖,并不实..原创 2020-09-22 19:21:07 · 803 阅读 · 0 评论 -
普通的登录权限流程,结合jwt+redis
废话不多说,直接上图吧其实上面用到的jwt只是一个生成token 的作用,并没有用到jwt优化资源的作用(但是安全性就是比较大的问题),当然你也可以自行生成token也是可以的,具体的代码也就不写了,网上一搜一大堆,稍微说下token相对于传统的session、cookie的优势吧支持跨域访问,将token置于请求头中,而cookie是不支持跨域访问的; 无状态化,服务端无需存储to...原创 2020-05-03 12:22:14 · 862 阅读 · 0 评论 -
如何设计一个秒杀系统
前言其实秒杀系统可以看成是现实系统的一个升级版,也可以说是对平时所有技术的一个高效的、综合的运用,下面简单看下之前做过的一个基于redis+mysql的一个简单秒杀流程上面这种其实适用于一些秒杀用户量和奖品都不是很多的情况,如果用户量特别大的情况,可能就需要更加复杂的设计了。正文其实上面的方案中减库存虽然使用库存量大于0作为条件,但是对于并发超过500,访问量超过2000依然可...原创 2020-04-19 15:55:14 · 241 阅读 · 0 评论 -
java split()使用“.” “\” "|" "*" "+"要转义
java中\\表示一个\,而regex中\\也表示\,所以当\\\\解析成regex的时候为\\,同理其他的转义就会是\\.,\\\,\\|,\\*,\\+原创 2020-03-26 17:34:51 · 265 阅读 · 0 评论 -
Java中序列化实现原理研究
原文地址:https://blog.csdn.net/weixin_39723544/article/details/80527550转载 2020-03-25 10:32:59 · 144 阅读 · 0 评论 -
关于parallelStream()引发线程不安全问题
一、问题代码public class ParallelStreamTest { public static void main(String[] args) { List<DataA> dataAList =new ArrayList<>(); List<DataB> dataBList = new ArrayLi...原创 2020-03-19 17:46:17 · 1147 阅读 · 2 评论 -
SpringBoot @Transactional注解失效排查
问题描述:最近发现一个加了@Transactional注解的事务没有生效问题分析:一、注解特性1、service类标签(一般不建议在接口上)上添加@Transactional,可以将整个类纳入spring事务管理,在每个业务方法执行时都会开启一个事务,不过这些事务采用相同的管理方式。2、@Transactional 注解只能应用到 public 可见度的方法上。 如果应用在prot...原创 2020-03-15 14:12:33 · 2403 阅读 · 0 评论 -
put请求:报错(Content type 'text/plain;charset=UTF-8' not supported")
解决办法:重置消息头 Content-Type:application/json;charset=UTF-8原创 2020-02-25 11:39:11 · 1446 阅读 · 0 评论 -
分布式ID——雪花算法
背景随着现在业务量的越来越大,数据库的划分也变的越来越细,分库分表的理念也渐渐的落地,自增主键或者序列之类的主键id生成方式已经不再满足需求,所以分布式ID的生成就应运而生,总的来说就是生成规则更加负责,减少重复的概率。一、雪花算法雪花算法的原始版本是scala版,用于生成分布式ID(纯数字,时间顺序),订单编号等。自增ID:对于数据敏感场景不宜使用,且不适合于分布式场景。GU...原创 2020-01-18 15:40:21 · 2125 阅读 · 0 评论 -
pinyin4j的使用
maven依赖:https://mvnrepository.com/artifact/com.belerweb/pinyin4jpinyin4J 是一个可以将汉字转换成拼音的lib,非常实用,在我们的日常开发过程中可能会用到,这里记录一下@Slf4jpublic class PinyinUtil { /** * 汉字转拼音 * * @param c...原创 2020-01-16 16:17:36 · 799 阅读 · 3 评论 -
各种加密算法比较
各种加密算法比较算法选择:对称加密AES,非对称加密: ECC,消息摘要: MD5,数字签名:DSA对称加密算法(加解密密钥相同) 名称 密钥长度 运算速度 安全性 资源消耗 DES 56位 较快 低...转载 2020-01-16 11:15:29 · 2531 阅读 · 0 评论 -
spring常用的工具类
原文地址:https://www.jianshu.com/p/1d8efe684f48转载 2020-01-14 16:54:37 · 183 阅读 · 0 评论 -
apache-commons 常用工具类
原文地址:https://blog.csdn.net/sanri1993/article/details/99698674转载 2020-01-14 16:42:24 · 244 阅读 · 0 评论 -
Mybatis拦截器
1、拦截器@Component@Slf4j@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})public class MyInterceptor implements Interceptor { @Ove...原创 2020-01-10 16:31:06 · 178 阅读 · 0 评论 -
Javassist 的使用
原文:https://www.jianshu.com/p/43424242846b转载 2020-01-03 11:52:23 · 176 阅读 · 0 评论 -
Java内部类
转载 2020-01-03 11:01:41 · 87 阅读 · 0 评论 -
拦截器和过滤器的区别
一、概览二、区别拦截器是基于java的反射机制的,而过滤器是基于函数回调。 拦截器不依赖与servlet容器,是spring容器的,是spring支持的,过滤器依赖与servlet容器。 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。 拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用...原创 2019-12-20 20:49:51 · 177 阅读 · 0 评论 -
java.toString() ,(String),String.valueOf的区别
1、Object#toString()方法在这种使用方法中,因为java.lang.Object类里已有public方法.toString(),所以对任何严格意义上的java对象都可以调用此方法。但在使用时要注意,必须保证object不是null值,否则将抛出NullPointerException异常。采用这种方法时,通常派生类会覆盖Object里的toString()方法。2、采用...原创 2019-12-02 15:21:37 · 147 阅读 · 0 评论 -
为什么需要继承SpringBootServletInitializer
在说这个之前先来说一下java中jar包和war包的区别:war包:是做好一个web应用后,通常是网站,打成包部署到容器中,包含所有的资源信息,是可以直接运行的web模块。 jar包:通常是开发时要引用通用类,打成包便于存放管理,通常只是包括一些class文件,在声明了Main_class之后是可以用java命令运行的好,接下来说下为什么需要继承SpringBootServletIni...原创 2019-11-29 11:21:59 · 3216 阅读 · 1 评论 -
@JsonFormat、@JSONField、@DateTimeFormat的使用以及其区别
三者出处1、JsonFormat来源于jackson,Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。Jackson所依赖的jar包较少,简单易用并且性能也要相对高些,并且Jackson社区相对比较活跃,更新速度也比较快。2、JSONField来源于fastjson,是阿里巴巴的...转载 2019-06-28 14:53:26 · 657 阅读 · 0 评论 -
通过实现ConstraintValidator完成自定义校验注解
链接地址:https://blog.csdn.net/qq_38439885/article/details/81227063转载 2019-06-28 17:56:25 · 1961 阅读 · 0 评论 -
在非controller中获取HttpServletRequest (如在service中获取)
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();原创 2019-08-12 18:45:35 · 1058 阅读 · 0 评论 -
urlEncoder和urlDecoder的作用和使用
背景说明:用rsa加密了一个参数传到前端,前端通过get请求将参数放在url中传给后端,结果后端解密的时候失败了,是因为浏览器会自动对url中的特殊字符进行转义,所以我们需要将数据以一种格式进行编码,然后以相同的格式进行解码,这样就能够得到原始数据。URLEncoder.encode(String s, String enc)使用指定的编码机制将字符串转换为 application/x...原创 2019-08-29 19:22:51 · 734 阅读 · 0 评论 -
Dump文件分析
本文主要介绍Dump文件结构,理解Dump文件对于分析线程高占用、死锁、内存溢出等高级问题有非常重要的指导意义。什么是Dump文件Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。Dump文件是用来给程序编写人员调试程序用的,这种文件必须用专用工具软件打开。如何生成Dump文件使用命令:jstack pid可以查看到当前运行的java进程的dump信...转载 2019-09-25 16:00:06 · 3504 阅读 · 0 评论 -
ServiceLoader使用及原理分析
简介说这个原理之前首先需要了解一下SPI。SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议,比如AT91RM9200。试想,早先我们的app在图片加载...转载 2019-04-05 21:40:21 · 1071 阅读 · 0 评论 -
单点登录原理与简单实现
一、单系统登录机制1、http无状态协议 web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系 但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求;要限制浏览器请求,必...转载 2019-02-16 14:56:26 · 100 阅读 · 0 评论 -
【微信机器人】——你懂的
最近在脉脉上看到别人发的微信机器人能够定时给女朋友发送微信消息,嘘寒问暖,还能够自动回复,太有趣了,于是就是找到了地址,自己弄了一下,感觉还可以,地址是https://github.com/sfyc23/EverydayWechatps:弄完之后才发现自己根本就没有女朋友。。。。。。。。...原创 2019-06-24 08:48:09 · 477 阅读 · 0 评论 -
【字符转换】——全角和半角转换
背景在我们使用搜狗输入法的时候会有全角和半角的切换,首先看一下这两者的区别吧全角,指一个字符占用两个标准字符位置的状态,也是排字的度量单位,宽度等于所使用的文字的磅数汉。半角,即一个字符占用一个标准字符的位置,排字的量度单位,宽度等于同一磅数全角的一半。全角和半角的使用1、在中文输入法中,切换全角和半角格式的快捷键为SHIFT+空格。2、一般的系统命令是不用全角字符的,只是...原创 2019-06-23 17:29:17 · 11801 阅读 · 0 评论 -
【合成图片】——Graphics2D
背景在之前的文章当中我们已经说过【二维码】——生成解析,可是现实中需要将二维码合成到海报的指定位置中,这样来扩展我们的产品销售渠道,基于这样的一种需求我们就需要将之前的二维码合成到另外一张海报图片中,所以接下来说一说怎么合成两张图片一、代码/** * @author 2019/6/23 15:32 */@Slf4jpublic class MergeImg { pr...原创 2019-06-23 16:48:00 · 2113 阅读 · 0 评论 -
如何给老婆解释什么是RESTful
这是在知乎上看到,觉得讲的很好,所以这里就转载了一下,方便以后阅读,下面是原文:老婆经常喜欢翻看我订阅的技术杂志,她总能从她的视角提出很多有趣的问题。一个悠闲的周日下午,她午觉醒来,又习惯性的抓起这个月的杂志,饶有兴趣地看了起来。果不其然,看着看着,她又对我发难了,“Restful是什么呀,老公?是restaurant的形容词吗,突然就觉得好饿了啊......”作为一个合格的程序员...转载 2019-02-26 11:44:25 · 109 阅读 · 0 评论 -
“时间复杂度”的另类解释
这篇博文是别人那里转载过来的,觉得把时间复杂度诠释的很好,这里给大家分享一下,希望大家看完都能秒懂。 时间复杂度的意义 究竟什么是时间复杂度呢?让我们来想象一个场景:某一天,小灰和大黄同时加入了一个公司......一天过后,小灰和大黄各自交付了代码,两端代码实现的功能都差不多。大黄的代码运行一次要花100毫秒,内存占用5MB。小灰的代码运行一次要...转载 2019-02-25 22:29:54 · 183 阅读 · 0 评论 -
Java常用集合源码级深度解析
Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Collections)。 Java集合类的整体框架如下: 从上图中可以看出,集合类主要分为两大...转载 2019-02-23 21:34:14 · 188 阅读 · 0 评论 -
RabbitMQ——简介
RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。消息中间件在互联网公司的使用中越来越多,刚才还看到新闻阿里将RocketMQ捐献给了apache,当然了今天的主角还是讲RabbitMQ。消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在...转载 2019-02-18 15:31:51 · 1180 阅读 · 0 评论 -
RabbitMQ——背景
RabbitMQ是一个异步消息通信中间件,用erlang语言开发,实现了AMQP(Advanced Message Queue )协议,是一个开源产品,官方网站:http://www.rabbitmq.com/。应用场景:对于一个大型的软件系统来说,它会有很多的组件或者说模块或者说子系统或者(subsystem or Component or submodule)。那么这些模块的如何通信?这和...转载 2019-02-18 15:27:09 · 383 阅读 · 0 评论