java高级部分
文章平均质量分 58
有趣的灵魂_不世俗的心
这个作者很懒,什么都没留下…
展开
-
解决多线程批量插入中的事物一致性问题
在开发当中我们,我们有时为了加快执行速度,会使用到多线程!尤其在大量数据插入数据库时,我们需要使用多线程进行批量插入,加快程序的执行效率!但是由于多线程中每个线程的事物是不一致的导致程序不一致!为了保证多个线程执行插入时,事物的一致性!我们需要将每个线程的事物状态保存到一个集合当中,当其中某个线程抛出异常时,我将所有线程的事物进行回滚!实现思路:1、将所有线程的事物状态保存到一个集合里面,该集合必须是线程安全的!2、定义一个集合,当线程发生异常时,往集合里面添加数据!3、当异常标志集合中原创 2020-05-22 14:51:05 · 5155 阅读 · 8 评论 -
高并发下秒杀商品设计思路
高并发下如何设计秒杀系统?这是一个高频面试题。这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。秒杀一般出现在商城的促销活动中,指定了一定数量(比如:10个)的商品(比如:手机),以极低的价格(比如:0.1元),让大量用户参与活动,但只有极少数用户能够购买成功。这类活动商家绝大部分是不赚钱的,说白了是找个噱头宣传自己。虽说秒杀只是一个促销活动,但对技术要求不低。下面给大家总结一下设计秒杀系统需要注意的9个细节1 瞬时高并发一般在秒杀时间点(比如:12点)前几分钟转载 2021-11-01 14:26:35 · 354 阅读 · 0 评论 -
延时队列实现方式
延时队列的定义:延时队列在进入队列是会设定一个延迟时间,在达到指定的延迟时间后执行相关操作。应用场景:1、订单成功后,在30分钟内没有支付,自动取消订单2、外卖平台发送订餐通知,下单成功后60s给用户推送短信。实现方案:1、使用java延迟队列2、使用redis的过期监听3、使用redis的zset数据结构实现方式一:引入组件 <dependency> <groupId>cn.hutool</groupId>原创 2021-09-16 18:09:58 · 1051 阅读 · 0 评论 -
SpringBoot项目实现多数据源的三种方式
在开发过程中,我们经常被要求在一个项目中使用多数据源下面是总结下,使用多数据源的几种方式:方式一:在同一实例下的不同数据库(在写SQL的时候用(数据库名称+"."+表名))方式二:AOP+注解实多数据源方式三:分不同的包实现多数据源方式四:使用dynamic-datasource-spring-boot-starter实现多数据源方式一:不用对程序做任何更改,只是写SQL时加上...原创 2020-04-23 17:31:25 · 2586 阅读 · 2 评论 -
LCN解决分布式事物简单使用
分布式事物产生的背景:在微服务环境下,因为会根据不同的业务会拆分成不同的服务,比如会员服务、订单服务、商品服务等,让专业的人做专业的事情,每个服务都有自己独立的数据库,并且是独立运行,互不影响。服务与服务之间通讯采用RPC远程调用技术,但是每个服务中都有自己独立的数据源,即自己独立的本地事务。两个服务相互通讯的时候,两个本地事务互不影响,从而出现分布式事务产生的原因。下面我们就来讲解如...原创 2019-12-06 10:57:09 · 326 阅读 · 0 评论 -
springboot自定义参数解析HandlerMethodArgumentResolver,实现接口访问设备信息记录
在项目开发中,我们经常需要记录用户是通过什么设备和操作系统来访问接口,以此来做不通的操作处理。尤其是公司软件针对多国用户,可以切换语言。我们后台经常需要根据语言来做不同的操作。下面我们讲解如何通过实现HandlerMethodArgumentResolver的方法来实现用户访问接口时的设备信息首先我们们需要准备一些必要的jar包 <!-- https://mvnre...原创 2019-11-22 21:33:37 · 570 阅读 · 0 评论 -
解决 Jackson反序列化 Unexpected token ... , expected VALUE_STRING: need JSON String that contains type id
首先看到这类提示错误,我们应该知道这个肯定是锁获取的数据不符合JSON格式例如在Redis中我们存储的如下集合[ { "inviterId": 1747, "userName": "x1**11@qq.com", "currencyId": null, ...原创 2019-11-13 16:57:44 · 3372 阅读 · 0 评论 -
MyBatisPlu自动生成代码简介(一)
MyBatis-Plus(简称 MP)是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus的官网地址:https://mp.baomidou.com/MyBatis-Plus的作用:自动生成数据库相关表的基本CRUD操作,可以通过自定模板的方式自动生成xml,Mapper,Service,ServiceIm...原创 2019-11-06 22:54:50 · 368 阅读 · 0 评论 -
解决java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder问题
java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder看到这个报错,我们便可以断定这是由于Spring Cloud和Spring Boot的版本不必配造成的。所以我们需要去Spring官方查找对应版本匹配信息。我们搭建微服务环境的时候只需要根据这个匹配关系进行以来匹...原创 2019-09-09 18:29:35 · 1653 阅读 · 0 评论 -
windows Apache ab安装及压力测试
ab 是apachebench的缩写。ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。ab命令对发出负载的计算机要求很低,它既不会占用很高CPU,也不会占用很多内存。但却会给目标服务器造成巨大的负载,其...转载 2019-08-28 17:18:36 · 118 阅读 · 0 评论 -
Spring AOP详解
AOP(Aspect-OrientedProgramming,面向方面编程), 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。实现场景日志记录,性能统计,安全控制,事务处理,异常处理等等。AOP与OOP的区别OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。AOP则是针对业务处理过程中的切面进行提取,它所面...原创 2019-07-08 22:42:57 · 102 阅读 · 0 评论 -
SpringBoot配置信息参考大全
SpringBoot常用配置信息官方参考地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#common-application-properties#服务启动的端口号(用Tomcat运行时无效)server.port=8080#项目的部署名称(用Tomcat运行时无...原创 2019-07-08 21:40:11 · 354 阅读 · 0 评论 -
Java内存模型详解
定义:java内存模型简称jmm,定义了一个线程对另一个线程可见。共享变量存放在主内存中,每个线程都有自己的本地内存,当多个线程同时访问一个数据的时候,可能本地内存没有及时刷新到主内存,所以就会发生线程安全问题。在了解Java内存模型之前,我们先来了解一下Java多线程的三大特性:原子性,可见性、有序性。原子性:在执行一个或多个操作时,被当做一个完整的整体,要么全部成功,要么全部失败。...原创 2019-06-24 14:07:50 · 88 阅读 · 0 评论 -
Spring解决单例bean线程不安全问题
首先我们应该知道线程安全问题一般发生在成员变量上,这是为什么啦? 因为成员变量是存放在堆内存中,而堆内存又是线程共享的,这就造成了线程安全问题因为Spring中的Bean默认是单例的,所以在定义成员变量时也有可能会发生线程安全问题。下面我们就来研究下如何解决Spring中单例Bean的线程安全问题@RestController//@Scope("prototype")publ...原创 2019-05-27 17:32:11 · 13431 阅读 · 2 评论 -
浅谈Java注解
注解的定义:注解是一种能被添加到java代码中的元数据,类、方法、变量、参数和包都可以用注解来修饰。注解对于它所修饰的代码并没有直接的影响。元数据定义:元数据是指用来描述数据的数据,更通俗一点,就是描述代码间关系,或者代码与其他资源(例如数据库表)之间内在联系的数据。对struts来说,元数据指的是struts-config.xml;对hibernate来说就是hbm文件。注解分为...原创 2019-05-22 21:53:02 · 94 阅读 · 0 评论 -
线程池原理浅谈
线程池的核心类ThreadPoolExecutor我常用的线程池的创建,都是使用基于ThreadPoolExecutor的类去实现的工具类Executors首先我们来了解一下提供的构造方法// 第一种构造方法public ThreadPoolExecutor(int corePoolSize, int maximumPo...原创 2019-05-20 21:48:03 · 112 阅读 · 0 评论 -
浅谈JVM虚拟机
虚拟机,通俗一点讲就是模拟一台真实机器环境。主要分为系统虚拟机和程序虚拟机。系统虚拟机:Visual Box、Vmar程序虚拟机:典型的就是Java虚拟机Java虚拟机:HotSpot、Jrockit(现在都是oracle旗下的)JVM内存结构主要有三大块:堆内存、方法区和栈。堆内存是JVM中最大的一块由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From S...原创 2019-04-23 16:13:58 · 228 阅读 · 0 评论 -
浅谈单例模式
单例模式的定义:一个对象在JVM中只能有一个实例。在Java中通常有两种实现方法:懒汉式、饿汉式懒汉式与饿汉式的区别1、线程问题:懒汉式线程不安全,饿汉式线程安全2、实例化的时机:懒汉式在第一次使用时初始化,饿汉式在加载.class(字节码文件)文件时初始化3、内存消耗:懒汉式占用内存更小,饿汉式占用内存更多4、效率:懒汉式比饿汉式更低效(因使用了同步关键字(synchro...原创 2019-03-20 17:49:58 · 98 阅读 · 0 评论 -
Spring中Bean的生命周期
首先我们应该知道,不管是Spring还是SpringBoot其实在底层也都实现了Servlet接口。因而在了解Spring中Bean的生命周期之前,我们先来了解一下Servlet的生命周期,然后按照这个流程去追寻Bean的生命周期。Servlet生命周期:1、实例化 在第一次访问servlet的时候创建servlet对象,只调用一次。证明servlet对象在Tomcat中是单例。...原创 2019-05-28 11:31:08 · 103 阅读 · 0 评论 -
nignx实现HTTP服务器、虚拟主机、反向代理、负载均衡
Nignx概念定义:Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定,所以现在很多知名的公司都在使用nginx。Nignx功能作用:HTTP服务器:Nginx是一个htt...原创 2019-06-05 18:17:43 · 211 阅读 · 0 评论 -
mybatis和hibernate的区别
1、 开发速度上的对比Hibernate:对数据结构提供较为完整的映射,只需定义好了POJO到数据库表的映射关系,不需要熟练sql语句,故开发速度快。Mybatis:sql语句需要自定义,故需要熟悉sql语句。Sql语句编写需要耗时,因而开发速度更慢2、 Sql语句方面Hibernate:主要通过对象来操作数据库,因而对于sql语句的自定义,性能优化较难。在面对复杂的业务逻辑时...原创 2019-06-19 16:31:16 · 119 阅读 · 0 评论 -
MySQL深度分页问题优化
MySQL大数据量分页性能优化mysql大数据量使用limit分页,随着页码的增大,查询效率越低下。测试实验1. 直接用limitstart,count分页语句,也是我程序中用的方法:select*fromproductlimitstart,count当起始页较小时,查询没有性能问题,我们分别看下从10,100,1000,10000开始分页的执行时间(...原创 2019-06-20 17:44:00 · 139 阅读 · 1 评论 -
Spring中bean的作用域问题
当在Spring中定义一个Bean时,你必须要声明改bean的作用域。可能很多人会说我在开发中没有设置过什么作用域啊!那是应为Spring找那个有设置Bean的默认作用域singleton,当作用域为singleton时,Spring在需要该bean时,都会返回同一个Bean实例。也就说说Spring中默认是单例模式。为了强制 Spring 在每次需要时都产生一个新的 bean 实例,你应该声...原创 2019-05-27 14:07:55 · 235 阅读 · 0 评论