自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 收藏
  • 关注

原创 彻底理解synchronized关键字

先看现象,再做总结。业务场景,模拟很多人在抢票。public class SynchronizredDemo { static int tickets = 1000; public void saleTickets() { int i = 1; while (i > 0) { i--; ...

2020-03-11 11:34:31 182

原创 jpa或者hibernate源码分析之Unable to locate appropriate constructor

org.hibernate.hql.internal.ast.DetailedSemanticException: Unable to locate appropriate constructor on class背景一次维护别人未开发完成的项目,做下之前的查询接口测试,发现报上面的错误。然后第一时间百度,很遗憾百度这次让我失望了,没有搜索出我想要的答案。于是不断的debug去到最底层看看发生了什么。这个查询接口主要是jpa自定义VO来接收多表查询关联出来的数据。首先在hibernate

2020-06-12 16:04:57 1027

原创 git-----------撤销pull操作

背景不小心pull了一个远程分支到我本地分支上,想撤销pull操作怎么办?如下图所示 可以使用git reflog操作 列出历史记录 可以看出有个行为pull了 bugfix/00611分支到我的本地feature/32773分支上如下图所示 可以使用git reset --hard HEAD@{1} 还原到 1 这个版本上, 以此类推可以用数字还原到任何一次行为上...

2020-06-12 15:19:36 1393

原创 泛型中? super T和? extends T的理解

? super T 代表T本身和T的父类? extends T 代表T本身和T的子类这个玩意有什么用呢,起到限定作用,比如你要实现一个list集合拷贝的方法,即Collect.copy(listD,listS);如果不加任何限制,那么任何类型的两个List都能进行拷贝肯定是不正确的,因为里面的字段千差万别。假设ListD代表目的集合 listS代表源集合 请问哪个代表? super T 哪个代表? extends T按照正常思维思考一下 源集合肯定是来者不拒 越多越好 能拷贝的...

2020-05-09 17:59:53 403

转载 JDK8新特性:函数式接口@FunctionalInterface的使用说明

我们常用的一些接口Callable、Runnable、Comparator等在JDK8中都添加了@FunctionalInterface注解。通过JDK8源码javadoc,可以知道这个注解有以下特点:1、该注解只能标记在"有且仅有一个抽象方法"的接口上。2、JDK8接口中的静态方法和默认方法,都不算是抽象方法。3、接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么也不算抽象方法。4、该注解不是必须的,如果一个接口符合"函数式接口"定义,那.

2020-05-09 11:05:49 179 1

转载 掌握 analyze API,一举搞定 Elasticsearch 分词难题

  初次接触 Elasticsearch 的同学经常会遇到分词相关的难题,比如如下这些场景: 为什么明明有包含搜索关键词的文档,但结果里面就没有相关文档呢?我存进去的文档到底被分成哪些词(term)了?我自定义分词规则,但感觉好麻烦呢,无从下手 如果你遇到过类似的问题,希望本文可以解决你的疑惑。 1. 上手 让我们从一个实例出发,如下创建一个文档: 然后我们做一个查询,我...

2020-04-30 10:29:03 260

原创 JAVA基础之重写equals和hashcode

前言我之所以写些以前学的JAVA基础的东西是为了以后假如作为面试官,去招聘初级程序员时候,对自己招聘的人负责,不管他是否应聘成功,他能从这里学到点什么,毕竟成年人时间很宝贵,再就是我想为公司招聘到真正有想法的人。虽然说能力很强有个性的人太多也不好,但是总比一群庸碌的人要好。首先谈下hashcode基本类型int double等是没有hashcode方法的 包装类型Integer的h...

2020-03-30 15:57:38 866

原创 如何面向接口编程以及读acegi框架有感

首先acegi框架是什么,它是一个权限框架.很多人不知道,我一说spring-security很多人就知道。acegi框架是spring-security的前身,后面随着版本演化更名为spring-security的。为什么不直接读spring-security源码读acegi源码,因为框架随着时间推移,抽象程度更高,不容易体会思想,一旦领会了思想,那么框架后面的更新只是更加抽象而已,...

2020-03-30 11:27:33 123

原创 JAVA基础之Serializable

先看现象再做总结如果User类没有实现Serializable接口的话 就会被下面异常此时将User实现Serializable接口即可正常写入文件。还有一个serialVersionUID需要说道说道 当在代码里面加入serialVersionUID后此时先写入 然后把serialVersionUID这行注释掉或者改为2L 不为1L即可 然后再读会报下面的错误...

2020-03-30 11:03:28 213

原创 Spring中BeanFactory与FactoryBean接口的区别详解

前言Spring框架中的BeanFactory接口和FactoryBean接口因为名称相似,老是容易搞混淆,而且也是面试过程中经常会碰到的一个问题。所以本文就专门给大家整理出来。一、BeanFactory接口BeanFactory接口是Spring容器的核心接口,负责:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。Spring为我们提供了许多易用的BeanFa...

2020-03-27 09:40:32 323

原创 谈谈Object对象的wait和notify

大家都知道java中的object对象除了hashcode equals这些方法外,还有非常重要的两个方法就是wait和notifywait 等待notify 唤醒先看现象 再做推导和结论 如下所示上图直接运行会报异常 如下所示上面异常百度会搜索很多答案出来 我来简单概括一下一个对象要想用wait方法 则调用wait方法的这个对象所处的线程必须持有这个对象的锁, ...

2020-03-20 15:02:20 363

原创 设计模式之观察者模式

一:观察者模式简介 有时又被称为发布(publish)-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。这段话引自百度百科...

2020-03-11 15:56:35 155

转载 Arthas - Java 线上问题定位处理的终极利器

...

2020-03-06 17:44:07 332

原创 并发与高并发编程实战05--线程安全性之可见性

导致共享变量在线程间不可见的原因1)线程交叉执行2)重排序结合线程交叉执行3)共享变量更新后的值没有在工作内存与主存间及时更新JMM(java内存模型)关于synchronized的两条规定:1)线程解锁前,必须把共享变量的值刷新到主内存2)线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新读取最新的值(注意,加锁和解锁是同一把锁)可见性-volatile通过加入内存屏...

2020-03-05 13:47:13 104

原创 jvm优化之Jenkins优化

之前由于在jenkins装在测试服务器上 由于测试服务器上安装了很多其他服务 导致装了jenkins后内存就剩下一百多M了free -m命令可以查看内存先top命令 再大写M 可以查看jvm各个进程排行用ps -ef|grep java 查看jenkins进程id用jmap -heap -PID 可以查看jenkins默认分配的堆内存居然是4个G原来不对一个java应用设置内存...

2020-03-05 09:48:38 2351

原创 一行命令同时修改maven项目中多个module的版本号的方法

Maven,是一个Java开发比较常用的项目管理工具,可以对 Java 项目进行构建、依赖管理。对于很多Java程序员来说,分层架构都是不陌生的,至少MVC三层架构都是不陌生的,甚至有人说:"Any problem in computer science can be solved by anther layer of indirection."想要在代码中进行分层,比较好的做法就是创建多...

2020-03-05 09:39:21 1044 1

转载 使用 Jenkins 执行持续集成的几个实用经验分享

...

2020-03-05 09:28:22 597

原创 深入理解JVM虚拟机——JVM内存分析命令

JVM内存分析命令工欲善其事,必先利其器!JVM本身和开源界提供了很多丰富的方法和工具来帮助开发者查看和分析JVM内存状况。通过这些分析,可以排查程序中内存问题及调优程序的性能。下面介绍几个常用的命令工具。测试环境:java version "1.8.0_171"Java(TM) SE Runtime Environment (build 1.8.0_171-b11)Java Hot...

2020-03-05 09:21:09 680

转载 spring解决循环依赖

本文主要是分析Spring bean的循环依赖,以及Spring的解决方式。 通过这种解决方式,我们可以应用在我们实际开发项目中...

2020-02-25 23:16:35 222

转载 spring如何解决循环依赖

1. 过程演示        关于Spring bean的创建,其本质上还是一个对象的创建,既然是对象,读者朋友一定要明白一点就是,一个完整的对象包含两部分:当前对象实例化和对象属性的实例化。在Spring中,对象的实例化是通过反射实现的,而对象的属性则是在对象实例化之后通过一定的方式设置的。这个过程可以按照如下方式...

2020-02-25 23:13:10 94

转载 java线程池详解

Java线程池详解 构造一个线程池为什么需要几个参数?如果避免线程池出现OOM?Runnable和Callable的区别是什么?本文将对这些问题一一解答,同时还将给出使用线程池的常见场景和代码片段。基础知识Executors创建线程池Java中创建线程池很简单,只需要调用Executors中相应的便捷方法即可,比如Executors.newFixedThreadPool(i...

2020-02-24 22:54:50 114

转载 mysql 联合索引生效的条件、索引失效的条件

1.联合索引失效的条件联合索引又叫复合索引。两个或更多个列上的索引被称作复合索引。 对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c)。 可以支持a | a,b| a,b,c 3种组合进行查找,...

2020-02-24 13:31:29 1027

原创 mysql共享锁和排他锁

mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流。共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁...

2020-02-24 10:41:01 164

转载 redis持久化 rdb aof 混合

前言Redis是基于内存操作的单线程缓存中间件。一 RDB快照(snapshot)在默认情况下,Redis将内存数据库快照保存在dump.rdb二进制文件中,Redis服务重新启动时根据dump.rdb文件重写Redis内存。dump.rdb文件默认在redis安装目录下面。可以在redis.co...

2020-02-23 23:04:37 320

原创 redis数据结构

Redis五种数据结构如下:对redis来说,所有的key(键)都是字符串。1.String 字符串类型是redis中最基本的数据类型,一个key对应一个value。String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。使用:get 、 set 、 del 、 incr、 decr 等...

2020-02-23 22:57:57 310

原创 谈谈面试

在疫情时期,我做了一个最不明智的选择,就是提出辞职。辞职原因主要是由于业务的底层设计耦合性太强,写代码写的心很累。我个人不是喜欢去背面试题,如面试宝典之类的那种,但是我没想到应试教育这个问题在程序员行业依然存在的很严重。像我们java程序员大部分是业务,那么我觉得最重要的是写出来的代码可维护性,可扩展性,毕竟也很少会用一些底层知识,那面试总该要问些什么吧.发现大部分面试官真的是没法根...

2020-02-23 20:27:58 123

原创 CQRS与CURD

浅谈命令查询职责分离(CQRS)模式在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同的实体。在一些业务逻辑简单的系统中可能没有什么问题,但是随着系统逻辑变得复杂,用户增多,这种设计就会出现一些性能问题。虽然在DB上可以做一些读写分离的设计,但在业务上如果在读写方面混合在一起的话,仍然会出现一些问题。本文介绍了命令查询职责分离模式(Command Qu...

2020-02-20 23:58:48 473

原创 领域驱动设计或者说如何沟通一个需求

上面一个图适合所有的需求拿到手以后该想哪些问题或者问哪些问题。因为有的时候你从老板或者产品经理那只是拿到一个大概的需求比如 开发一个网上叫车的系统,系统自动分配离客户最近的司机。一、业务领域1. 业务子域那么要分三个业务子域. 身份认证子域 (这应该是所有系统都有的) 打车管理子域(核心业务子域) 报表子域(这也应该是所有系统都有的)确定业务...

2020-02-20 23:35:26 163

原创 电商场景秒杀分析之防止库存超卖

如上图所示,假设数据库中有个商品库存为100, 悲观锁(基于mysql行锁机制)和乐观锁基于版本好的两种实现如上。建议场景2,因为场景2更支持高并发。...

2020-02-17 22:43:28 564

原创 常用的服务启动停止命令

因为一种服务有很多启动方式,在不同服务器版本上启动方式又不一样。比如centos6.5和centos7有些服务启动就不一样.如防火墙。所以在这里记录下一些服务的标准启动方式。以后总结的一些标准启动方式都会加入到里面nginx 停止 ps -ef|grep nginx kill -QUIT master进程id 启动 /usr/loca...

2020-02-17 13:44:01 384

原创 docker+jenkins自动化部署

写在前面,jenkis不建议用docker安装,因为会涉及到很多环境参数,很麻烦,以及像gogs这种开源git服务器,最好老老实实传统安装一下,因为这种软件基本是一次性的,不会到处安装,不像很多服务或者类似做政府项目的,一套代码需要部署到各个地市。那么用docker就非常方便了。另外linux下rz命令很好用。不是默认支持的,请自行百度。众所周知,java生态中比较重要的就是软件的...

2020-02-03 00:24:17 312

原创 Docker笔记

1、背景是一天我用jenkis容器做自动化部署,然后第二天容器挂了,我再次重启容器后,发现容器里面的文件都丢失了。命令如下docker run \ -u root \ -p 9999:8080 \ -v /opt/jenkins-data:/var/jenkins_home \ -v /opt/jenkinsci/blueocean:/home \ jenkinsci/...

2020-02-02 22:09:35 67

原创 浅出了解JAVA虚拟机之程序计数器(1)

首先 上面的图要记下来 背下来 脑海中有印象先说下程序计数器 这个名字我觉得翻译的不好,给人的直观印象就是给程序计数的,为什么要给程序计数。不是很好理解。我觉得叫成程序恢复器都比程序计数器容易理解。为什么,因为程序计数器记录的是正在执行的虚拟机字节码指令的地址。为什么要记录这个。因为在多线程环境下,JVM的多线程是通过CPU时间片轮转来实现的,某个线程在执行的过程中可...

2020-01-21 14:22:17 161

原创 Redis连接数不释放问题

1、发现问题我用的是springboot构建的项目,网关中连接redis存放每次请求的参数,以此达到不能重复请求的目的。发现经常控制台报远程主机关闭一个连接的错误,每次报这样的错误,我就必须重启项目才行。非常麻烦,之前没有时间深究,现在今天痛下决心向百度请教一下。2、定位问题查询redis相关命令客户端远程连接redisredis-cli.exe -h IP -p 63...

2020-01-16 18:19:28 4466

原创 为什么要写博客

我其实是个很懒的人,能动嘴绝对不动手,能用简单的代码实现绝对不用复杂的代码实现业务。能尽量用流式编程也不用传统的for循环来实现业务,讨厌臃肿冗余的代码,像老太太的裹脚布又臭又长。那么我一直在想,为什么要写博客,知识难道不是一直存在脑海里面的吗。其实不然。所以说为什么会存在江郎才尽这回事。会存在灵感这回事。比如周杰伦,以前能写很多首脍炙人口的经典歌曲。难道不是随着年纪越大阅历越多,会更有思想能...

2020-01-11 10:14:05 99

原创 Java笔记之谈谈java这个平台的一部分内容

Java运行机制 源代码----》javaC编译成字节码----》JVM解释成0101的机器码JAVA运行两种模式Server模式与client模式启动。最主要的差别在于:-Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很大的提升。JVM工作在Server模式下可以大大提高性能,Server模式下应用的启动速度会比client模式慢大概10%,但运行速度比Client ...

2020-01-10 11:11:30 71

原创 Nginx笔记

1、通过nginx访问静态文件配置,均是在server模块中配置。有两种方式:alias关键字和root关键字区别是它们对路径的解析方式不同,alias会把指定路径当作文件路径,而root会把文件路径拼接到指定路径后,再进行访问。2、...

2020-01-07 13:59:52 84

原创 设计模式一句话总结 模板模式

固定不变的步骤提取出来形成一个模板,然后具体的可变的部分再交给子类去实现,方便于日后的扩展。具体详细参考https://www.cnblogs.com/wyq178/p/7501962.html...

2019-12-27 15:26:33 84

原创 RabbitMQ Centos6.8安装

笔者所在业务环境 springcloud 1.5.8 jdk1.8软件安装包百度网盘链接: https://pan.baidu.com/s/1Augp_VYZTfRMSQkchkbx-w 提取码: neqh也是目前产品中线上用的版本一、安装编译工具,安装Erlang之前需要进行编译工具安装,通过执行以下命令就可以完成安装。yum -y install make gcc gcc-c++ k...

2019-12-25 09:28:51 141

原创 redis面试集锦

1、缓存雪崩、缓存穿透、缓存击穿不管是缓存雪崩、缓存穿透、缓存击穿。都在讲一件事,请求不经过缓存,直接打到数据库上。只不过粒度或者程度不一样而已。缓存雪崩 很明显这个最严重 从名词上来说 面积更大 当大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。缓存穿透和缓存击穿 概念上有点模糊穿透代表的是如遇无人之境,指代的是缓存或者数据库 或者二者都不存...

2019-12-04 16:59:26 85

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除