JAVA
包括java底层原理、jvm、框架、日常解决的bug的文章
Zero .
待到山花烂漫时
展开
-
【设计模式】系列之模板模式
模板方法模式,官方解释是这样的:模板模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类提供不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。模板模式的关键在于:父类提供框架性的公共逻辑,子类提供个性化的定制逻辑。也就是说,父类提供公共方法,子类提供自定义方法。这里,我想模拟一个场景,就是比如我们去买手机,品牌手机都会送礼物,不同的品牌送的礼物不一样。这样,我们就可以让父类实现固定逻辑,子类实现不同品牌送礼物的逻原创 2022-03-08 14:58:16 · 484 阅读 · 0 评论 -
Springboot通过自定义工具类获取bean
/** * Created with IntelliJ IDEA. * * @Auther: zp * @Date: 2021/03/26/13:32 * @Description: 通过beanFactory获取spring管理的bean对象 */public class ApplicationContextUtil implements ApplicationContextAware { private static ApplicationContext context; .原创 2021-03-26 13:39:22 · 649 阅读 · 0 评论 -
基于Redisson实现分布式锁并分析其原理
分布式锁主要是为了解决高并发场景下的数据一致性问题的。一般就是涉及到多线程资源争抢时通过加锁来保证数据的安全性场景:首先模拟一个抢购场景:redis依赖:代码:在redis数据库存了一个stock值,相当于是库存,value是200逻辑:首先去从redis里面取库存,判断当前库存是否大于0,如果大于0则库存减一问题:没加锁,高并发场景下会出现超卖问题。比如当前有三个线程同时访问这段代码,同时判断当前库存大于0,都减一,然后保存,结果三个线程都减一然后保存,但是st原创 2020-11-29 14:52:52 · 1206 阅读 · 2 评论 -
@PostConstruct注解作用
参考链接:https://blog.csdn.net/nisen6477/article/details/90240643转载 2020-11-17 11:46:18 · 3416 阅读 · 0 评论 -
jackson中@JsonProperty、@JsonIgnore等常用注解总结
最近用的比较多,把json相关的知识点都总结一下,jackjson的注解使用比较频繁,jackson的maven依赖<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.3</version></d转载 2020-09-27 14:28:12 · 899 阅读 · 0 评论 -
@Component注解的作用
Spring自带的@Component注解及扩展@Component:定义Spring管理Bean@AspectJ风格的切面可以通过@Compenent注解标识其为Spring管理Bean,而@Aspect注解不能被Spring自动识别并注册为Bean,必须通过@Component注解来完成Java代码@Component@AspectpublicclassTestAspect{@Pointcut(value="execution(...原创 2020-09-21 10:19:38 · 49728 阅读 · 0 评论 -
Lambda的reduce元素规约
规约:大致可以理解为将一个数组或集合转换成一个String或integer类型的一个对象。最终只拿到一个结果。关键字:reduce reduce(a,(b,c)->{b+c});a:规约初始值 b:阶段性的累加结果 c:当前遍历的元素若是整数类型求和 (Integer),b和c 可换成方法引用 Integer::sum先回顾一下map: stream().map 可以把数组中的元素从一种类型转换成另一种类型,也可以将多类型的集合变成单纯的只有一种类型的集合。p..原创 2020-07-26 20:35:29 · 721 阅读 · 0 评论 -
StringUtils.isEmpty()以及StringUtils.xxxx()的用法
StringUtils 方法的操作对象是 java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数 String 为 null 则不会抛出 NullPointerException ,而是做了相应处理,例如,如果输入为 null 则返回也是 null 等,具体可以查看源代码)。除了构造器,StringUtils...原创 2019-08-04 09:04:27 · 652 阅读 · 0 评论 -
Map.entrySet() 实现原理
Map.entrySet() 这个方法返回的是一个Set<Map.Entry<K,V>>,Map.Entry 是Map中的一个接口,他的用途是表示一个映射项(里面有Key和Value),而Set<Map.Entry<K,V>>表示一个映射项的Set。Map.Entry里有相应的getKey和getValue方法,即JavaBean,让我们能够从一个...转载 2019-07-11 16:56:41 · 1250 阅读 · 0 评论 -
解决github图片不显示和加载速度慢的问题
之前就在github上看到自己的头像和网站上的图片不显示,还以为是网速问题,也一直没管。到现在还是不显示,终于忍无可忍了,网络好好的,可为啥就是图片加载不出来呢?在github上F12看了一下,发现图片的url解析不出来报红线了,之后百度了一圈,把报红线的url拷贝到IPAddress.com,之后把搜索到的IP地址写入本地host文件中,保存就行了(如果之后发现github变慢图片又...原创 2020-01-02 13:33:10 · 1327 阅读 · 2 评论 -
String.valueOf()方法的使用
一、由基本数据型态转换成String String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 ,也就是String.valueOf()这个参数多载的方法有以下几种(1)String.valueOf(boolean b): 将 boolean 变量 b 转换成字符串(2)String.valueOf(char c): 将 char 变量 ...转载 2019-12-25 15:28:46 · 238 阅读 · 0 评论 -
字符串转十六进制和反十六进制
//正十六进制: tranCard() { let childData = this.form.data.cardId; childData = (parseInt(childData).toString(16).toUpperCase()); // 转16进制大写 this.$set(this.for...原创 2019-12-23 13:30:12 · 682 阅读 · 0 评论 -
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 解决办法
解决办法:看看你的电脑屏幕右下角的网络标识是不是多了个黄色的感叹号或者是没网...如果是,想办法联网重启服务即可...原创 2019-12-12 11:05:11 · 3805 阅读 · 0 评论 -
Java之数组转集合&集合转数组
一、数组转换为集合需要注意的是,转换只能转换为List集合。那么为什么不能转换为Set集合呢?原因是:Set不能存放重复元素,所以若转换为Set集合可能出现丢失元素的情况。。。数组转换为集合使用的是数组的工具类Arrays的静态方法asList。查看API文档可知该方法返回由指定数组支持的固定大小的列表。eg:import java.util.Arrays;import...转载 2019-12-09 15:21:23 · 656 阅读 · 0 评论 -
代码洁癖 --- 如何优化代码以提高效率?
背景:如何更规范化编写Java 代码的重要性想必毋需多言,其中最重要的几点当属提高代码性能、使代码远离Bug、令代码更优雅。一、MyBatis 不要为了多个查询条件而写 1 = 1当遇到多个查询条件,使用where 1=1 可以很方便的解决我们的问题,但是这样很可能会造成非常大的性能损失,因为添加了 “where 1=1 ”的过滤条件之后,数据库系统就无法使用索引等查询优化策略,数据库系...原创 2019-11-01 10:07:26 · 199 阅读 · 0 评论 -
failed to lazily initialize a collection of role
今天在使用hibernate多对多时出现failed to lazily initialize a collection of role这个异常,上网查阅资料后发现,是因为延迟加载的问题。这里把多对多的映射文件的 lazy="true" 改为fasle即可。...原创 2019-09-26 21:41:31 · 2395 阅读 · 0 评论 -
把‘yyyy-MM-dd’格式的String类型日期转换为‘yyyy-MM-dd’类型的Date类型
在实际应用中,很多时候会用到String和Date类型之间的转换,比如:在javaEE项目中,有时候会把String类型的日期字符串转换为Date格式,就会用到java.sql.Date.valueOf(String date)方法。1.将“yyyy-MM-dd”格式的String转换为‘yyyy-MM-dd’类型的Date类型public class StringToDate ...原创 2019-09-18 15:50:59 · 10715 阅读 · 0 评论 -
Linux服务器下查看tomcat服务是否启动,重启等基本操作
首先要进入tomcat的bin目录cd /你的安装目录/tomcat/bin查看服务启动情况ps -ef|grep java此条命令具体含义ps:将某个进程显示出来-A 显示所有程序。 -e 此参数的效果和指定"A"参数相同。-f 显示UID,PPIP,C与STIME栏位。 grep命令是查找 通过输出情况判断服务是否启动如果返回类似以下信息说明...转载 2019-09-11 16:54:45 · 9336 阅读 · 0 评论 -
在写左关联时SQL语句出现 Duplicate column name 'NAME'名字重复错误解决方法
话不多说直接上代码:SELECT * FROM `personrequireupdate` a LEFT JOIN (select p.*,o.officeid,o.name as officename from person_modifyinf p LEFT JOIN office o on o.officeid=p.officeid)p ...原创 2019-04-23 09:56:57 · 7756 阅读 · 2 评论 -
Java代码中的->是什么?关于Lambda表达式的学习以及应用
这个->是Lambda 表达式。关于Lambda,它是JDK8的新特性。Java 8 Lambda 表达式Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。语法lambda 表达式的语法格式如下:(parame...原创 2020-01-14 10:06:13 · 8196 阅读 · 1 评论 -
JDK1.8安装和环境配置
一、前言虽然jdk1.9版本已经问世,但是许多其他的配套设施并不一定支持jdk1.9版本,所以这里仅带领你配置jdk1.8。而jdk1.9的操作也几乎是相同的。本教程适用于windows10 64位操作系统 配置jdk1.8二、下载并安装2.1下载进入官网的下载地址jdk1.8下载地址出现如下界面按照红色方框的指示,先选中 [Accept License Agreeme...原创 2019-04-17 14:48:07 · 412 阅读 · 0 评论 -
死锁产生的原因以及解决方法
一.什么是死锁? 死锁是由于两个或以上的线程互相持有对方需要的资源,导致这些线程处于等待状态,无法执行。二.产生死锁的四个必要条件 1.互斥性:线程对资源的占有是排他性的,一个资源只能被一个线程占有,直到释放。 2.请求和保持条件:一个线程对请求被占有资源发生阻塞时,对已经获得的资源不释放。 3.不剥夺:一个线程在释放资源之前,其他的线程无法剥夺占用。...原创 2019-10-22 11:50:24 · 230 阅读 · 0 评论 -
多线程面试题
1、什么是线程,什么是进程,它们有什么区别和联系,一个进程里面是否必须有个线程 进程本质是一个正在执行的程序,一个进程可以有多个线程.线程是进程的最小执行单位,一个进程至少有一个线程区别:1:多进程程序不受java控制,而多线程则受java控制, 2:多线程比多进程需要更少的管理成本2、实现一个线程有哪几种方式,各有什么优缺点,比较常用的是那种,为什么...原创 2019-08-14 11:23:35 · 158 阅读 · 0 评论 -
JAVA通过反射获取类信息
每个类被加载之后,系统就会为该类生成一个对应的Class对象,通过该Class对象就可以访问到JVM中的这个类。在Java程序中获得Class对象通常有如下3种方式1. 使用Class类的forName(String clazzName)静态方法。该方法需要传入字符串参数,该字符串参数的值是某个类的全限定类名(必须添加完整包名)。2. 调用某个类的class属性来获取该类对应的Class对象。例如,Person.class将会返回Person类对应的Class对象。3. 调用某个对象的getClas原创 2020-07-01 11:20:18 · 580 阅读 · 0 评论 -
map.entrySet() 和 map.containsKey()
set<String> keySet= map.entrySet() :将map集合的key返回给set集合 public void test111(){ Map<String, String> map = new HashMap<String, String>(); map.put("01", "zhangsan");...原创 2019-09-07 10:12:55 · 472 阅读 · 0 评论 -
关于fegin调用其他服务的问题Method get not annotated with HTTP method type (ex. GET, POST);
开发中我使用的是SpringCloud,有个服务就是要调用其它服务里的读取文件的接口,于是我使用fegin来进行调用。package com.becypress.card.feign;import feign.Param;import feign.RequestLine;import org.springframework.cloud.openfeign.FeignClient;i...原创 2019-12-30 15:56:30 · 4453 阅读 · 0 评论 -
七、单例模式 ( Singleton Pattern )
单例模式(Singleton Pattern)提供了一种创建对象的最佳方式单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象单例模式设计要点1、单例类只能有一个实例2、单例类必须自己创建自己的唯一实例3、单例类必须给所有其他对象提供这一实例单例模式属于创建型模式摘要...转载 2020-01-02 22:18:37 · 582 阅读 · 0 评论 -
六、抽象工厂模式 ( Abstract Factory Pattern )
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂该超级工厂又称为其他工厂的工厂在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类每个生成的工厂都能按照工厂模式提供对象抽象工厂模式属于创建型模式,它提供了一种创建对象的最佳方式。摘要1、意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体...转载 2020-01-02 16:05:00 · 171 阅读 · 0 评论 -
五、工厂模式 ( Factory Pattern )
工厂模式(Factory Pattern)提供了一种创建对象的最佳方式工厂模式在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象工厂模式属于创建型模式摘要1、意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行2、主要解决:主要解决接口选择的问题3、何时使用:我们明确地计划不同条件...转载 2020-01-02 15:39:45 · 116 阅读 · 0 评论 -
四、设计模式 – 六大原则
在 23 +8 中设计模式中,我们提炼出了 六大面向对象设计原则我们可以不知道那数量繁多的设计模式,但一定要记住这 六大设计原则1. 开闭原则(Open Close Principle)开闭原则的意思是:对扩展开放,对修改关闭在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果简言之,是为了使程序的扩展性好,易于维护和升级想要达到这样的效果,我们需要使...转载 2020-01-02 15:27:10 · 98 阅读 · 0 评论 -
二、设计模式 – 简介
设计模式(Design pattern)是重构解决方案这点很重要,尤其是现在 B/S 一统天下的局面,过早考虑设计模式,得不偿失设计模式(Design pattern)代表了最佳的实践,通常被面向对象的软件开发人员所采用很多教程都说设计模式是被有经验的人使用,其实只要定义了一个类,或多或少都在使用它们,而不是有没有经验 只是有经验的人知道自己在使用设计模式,而且知道怎么做的更好...转载 2020-01-02 15:21:44 · 117 阅读 · 0 评论 -
一、设计模式
设计模式(Design pattern)是重构解决方案这点很重要,尤其是现在 B/S 一统天下的局面,过早考虑设计模式,得不偿失设计模式(Design pattern)代表了最佳的实践,通常被面向对象的软件开发人员所采用很多教程都说设计模式是被有经验的人使用,其实只要定义了一个类,或多或少都在使用它们,而不是有没有经验 只是有经验的人知道自己在使用设计模式,而且知道怎么做的更好...转载 2020-01-02 15:18:30 · 128 阅读 · 0 评论 -
java 泛型详解 [转载] 可能是关于泛型介绍最详细的
对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下。本文参考java 泛型详解、Java中的泛型方法、java泛型详解1. 概述泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。什么是泛型?为什么要使用泛型? 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参...转载 2020-06-04 17:03:40 · 191 阅读 · 0 评论