
Java基础
文章平均质量分 67
Java基础
小老犇
谁能帮我处理一下这个异常:NoGirlFriendException
展开
-
SpringSecurity中BCryptPasswordEncoder加密原理
SB相关问题想对SB中的密码进行解密,就去了解了一下怎么解密。SB中的加密方式,是哈希算法,听说这种算法是不可逆的。那SB是怎么对密码进行验证的。百度一下,我就知道百度出来了两个名词,加密算法和哈希算法。他们都说加密算法和哈希算法是不同的概念,因为加密算法,可解密,而哈希算法,不可逆。但是SB就是用哈希算法加密的,所以说,哈希算法是加密算法。没毛病。actually,加密算法,包罗万象。加密算法包括哈希算法,对称加密算法,非对称加密算法。即:哈希算法是加密算法,但是加密算法不是哈希算法原创 2021-08-29 23:34:35 · 1667 阅读 · 4 评论 -
IDEA启动报错:Error:Abnormal build process termination
报错信息如下:Error:Abnormal build process termination: D:\weblogic\jdk1.8\bin\java.exe -Xmx700m -Djava.awt.headless=true -Djava.endorsed.dirs=\"\" -Djdt.compiler.useSingleThread=true Build process started. Classpath: D:/softLocation/IntelliJ IDEA 2019.1.3/lib原创 2021-08-22 23:06:44 · 2996 阅读 · 2 评论 -
@NotBlank注解不生效解决方法
问题:@NotBlank用于字符串的空值空串校验。但是在实体类属性A中加上注解后,Controller层的外部调用实体类,前端传参时,不传属性A,仍然可以反序列化成功,@NotBlank无效。解决:应该都知道,当@NotBlank注解用于实体类的某个属性时,Controller层的实体对象前,要搭配@Valid注解使用。但是如果加了,仍然没有效果呢?不用考虑了,肯定是版本问题,适当的升高或降低校验依赖的版本。我们引入的一般是这两个常用的:Java 和 Hibernate &原创 2021-08-19 23:05:43 · 28376 阅读 · 2 评论 -
mapstruct引入不生效:解决mapstruct与lombok二者版本冲突问题
问题:引入了mapstruct的依赖,但是转换器的实现类中,并没有该实体的get/set方法进行属性赋值。解决:版本问题,mapstruct、lombok、maven的版本不对劲。mapstruct 使用1.2.0lombok使用1.16.22是可行的。或者在pom文件中加入这样一段:升高maven-compiler-plugin的版本,同样可以解决问题。 <build> <plugins> <plugin>原创 2021-08-19 23:02:52 · 12878 阅读 · 4 评论 -
自定义注解完成校验枚举类型的三种方法。
自定义注解完成校验枚举类型的三种方法。校验枚举类--自定义的各种Enum类型校验单一枚举类校验各种枚举类校验枚举值--Integer类型校验枚举名称--String类型注解在实体类的字段上,要确定这个字段是什么类型。有三种类型:1、校验枚举类–自定义的各种Enum类型2、校验枚举值–Integer类型3、校验枚举名称–String类型使用枚举涉及到前后端数据库类型转换的问题,相比之下,Integer和String使用简单。校验枚举类–自定义的各种Enum类型校验单一枚举类仅仅作用于单个枚举原创 2021-08-11 23:59:10 · 4178 阅读 · 4 评论 -
实体类中使用枚举类作为字段类型,前后端数据库类型转换的方法
分析:在开发过程中,碰到枚举类型的字段,比如人的性别,用户的状态,订单的状态,我们往往在数据库层中使用数字 1、2等来存储数据。在后端实体定义时,字段类型使用数字类型。使用这种方法,需要对前端传来的数据进行合法性校验,业务代码上比较啰嗦,所以使用枚举类来定义字段类型为更好的选择。但是在一个实体类中使用枚举类型,有两个问题:1、前端传来的参数,如何反序列化构造这个实体,如何构造实体中的这个枚举类。2、后端使用的这个实体,如何保存到数据库中。常见的实体类中的类型String对应数据库中的varcha原创 2021-08-10 23:45:08 · 5329 阅读 · 0 评论 -
mybatis-plus自定义数值类型枚举类转换器
mybatis-plus自定义数值类型枚举类转换器MyBatis 内置了大部分基本类型的类型处理器,TypeHandler 类型处理器用于 JavaType 与 JdbcType 之间的转换。所以对于基本类型可以直接处理,比如默认的这些IntegerTypeHandler,BigDecimalTypeHandler基本上不会去碰她。当我们需要处理其他类型的时候,比如枚举类型,mybaits依然服务周到,提供两个常用的。EnumOrdinalTypeHandler每个枚举类中的值都自带下标,从0开始原创 2021-08-10 23:25:57 · 2919 阅读 · 0 评论 -
Jackson中@JsonIgnore,@JsonValue,@JsonCreator注解作用
@JsonIgnore,@JsonValue,@JsonCreator使用详解原创 2021-08-10 23:13:08 · 4253 阅读 · 0 评论 -
字节、位概念
我和Jack Ma的工资平均一下,我也是身价几百亿的人了。1GB=1024MB ----- GB是千兆1MB=1024KB ----- MB是兆1KB=1024Byte ----- KB是千字节有的人喜欢看电影,下载下来,存硬盘里,当做自己的宝藏,一部电影大约两个G吧。有的人喜欢拍照,把照片上传上去,还能挣钱,一张照片大约几个MB。有的人喜欢文字,文学爱好者,一篇文章几个KB。这是我们平常打交道的单位,GB,MB,KBByte基本上就没啥计量单位了,因为他太小原创 2021-08-08 23:20:18 · 291 阅读 · 1 评论 -
微信支付之Native付款(拿来吧你!)
开通微信企业付款到零钱业务,需要有交易流水,所以任选一种支付方式付钱。原创 2021-08-01 23:02:11 · 1991 阅读 · 5 评论 -
【HashMap】基本概念及扩容机制
基本概念由数组和链表组成。数组中每一个元素在java7叫entry,在java8叫node。每一个元素都是k-v结构。每一个节点都会保存自身的hash、key、value以及下个节点。工作流程1、一个元素要插入进来,首先计算key的Hash值,确定该元素的index,也就是应该插在哪个位置。2、另一个元素也要插入进来,如果两个hash值一样,就挂在上边那个元素下边,形成链表结构。3、此时另有一个元素也要插入这个index下边,如何插入这个链表呢。如何将元素插入链表中头部插入法在java原创 2021-02-25 22:40:04 · 665 阅读 · 3 评论 -
【HashMap】扩容机制中尾插法造成环形链表导致死循环问题
目录同花顺1、指针顺序不同2、头插法导致环形链表同花顺这两个不同之处,在源码上都可以体现出来。就好比,第一个,指针顺序不同。源码中,首先获取旧的数组,之后遍历。遍历的第一个就是A,之后将A放到新数组的Index位上。遍历的第二个是B,之后将B放到新数组的Index位上。慢慢的A就被挤到最下边了,形成了顺序倒置。这个是很好理解的,比较难以理解的是第二个不同。环形链表以及死循环是如何产生的。1、指针顺序不同头插法与尾插法和栈与队列非常相似。栈是先进后出,队列是先进先出。这种比喻其实是不原创 2021-02-13 22:24:37 · 4272 阅读 · 6 评论 -
【多线程】多线程及锁常见问题集合
问题集合多线程常见问题之多线程安全问题多线程常见问题之多线程乱跑传参问题多线程常见问题之多线程安全问题明确一点,不操作共享变量就不会有线程安全问题。有线程安全问题,什么时候加锁共享数据有可能同时被两个线程操作,再加锁。不能碰到多线程就想到线程安全,然后加锁。锁的前提是你操作了共享变量,如果没有共享变量,是不存在数据安全问题的,并且不能盲目的追求速度快,忽视了数据的安全,本末倒置。乱用锁的后果是性能降低或者死锁。效率和数据安全是个跷跷板,A高了,B就低,合理的运用锁,才是正解。多线程常见问题原创 2021-02-12 23:30:48 · 1103 阅读 · 4 评论 -
【锁】如何实现死锁
目录1、创建死锁2、创建线程任务类3、测试结果4、总结1、创建死锁package lao.ben.juc.deadLock;import org.junit.Test;//死锁条件:两个线程互相持有对方想要的锁,对方又释放不了,就卡住了。public class DeadLock { //方法一 String xiaowang = "xiaownag"; String xiaohong = "xiaohong"; public void together1(原创 2021-02-11 23:29:23 · 2582 阅读 · 5 评论 -
【锁】Synchronized与ReentrantLock详解
目录不是一家人,不进一家门SynchronizedJDK1.6进行了哪些优化锁的升级过程五大特性ReentrantLockAQSReentrantLock实现原理如何实现公平锁亮点不是一家人,不进一家门二者同属于可重入锁,同一个线程可以重入上锁,不同的线程进行阻塞。隐式:Synchronized,JVM系统层次,你看不到源码,是个关键字。显式:ReentranLock,JDK层次,可以看到源码。SynchronizedJDK1.6进行了哪些优化1、为了减少获得锁和释放锁带来的性能消耗引入了偏向原创 2021-02-03 00:01:31 · 389 阅读 · 2 评论 -
【锁】乐观锁存在的问题
目录定义如何实现线程安全CAS执行流程CAS存在的问题1、循环时间太长。2、只能保证一个共享变量原子操作。3、ABA问题。定义乐观锁总是认为你不会修改我。如何实现线程安全乐观锁不加锁,通过CAS操作来实现线程安全。Compare And Swap。CAS执行流程现在要修改一个数据,执行流程如下:1、查询这个数据,得到一值。2、准备修改这个数据,修改前判断一下值变了没。3、真正修改这个数据。CAS在真正修改数据时,会判断一下这个数据的值被人改了没,乐观一点,不会被别人改的,就真正的去改。原创 2021-02-10 22:19:46 · 3006 阅读 · 1 评论 -
【锁】ReentrantLock如何实现公平锁/非公平锁
目录同花顺源码分析执行流程有什么不同说人话公平锁/非公平锁优劣公平锁非公平锁为什么非公平锁的性能优于公平锁同花顺物竞天择,优胜劣汰。源码分析直接上源码执行流程 /** * * ReentrantLock类中有三个内部类 * Sync:继承AQS * NonfairSync:继承Sync * FairSync:继承Sync */ 公平锁与非公平锁就是等待队列中的线程排队不排队的问题。非公平锁1、各个线程争夺CPU的执行权,线程小王争夺到原创 2021-02-09 20:39:29 · 4233 阅读 · 0 评论 -
【锁】ReentrantLock底层原理
概括ReentrantLock类里一共由三部分组成。ReentrantLock类中有三个内部类。Sync:继承AQS。NonfairSync:继承Sync。FairSync:继承Sync。ReentrantLockpackage java.util.concurrent.locks;import java.util.concurrent.TimeUnit;import java.util.Collection;public class ReentrantLock implemen原创 2021-02-04 00:18:15 · 355 阅读 · 2 评论 -
【锁】乐观锁和悲观锁的实现机制
目录乐观锁1、版本号机制2、CAS操作悲观锁1、synchronized2、lock乐观锁1、版本号机制数据库的MVCC机制就是这种,MVCC更加严格一点,后边增加了创建版本及删除版本两个字段。详情参考:https://blog.youkuaiyun.com/numbbe/article/details/109300087版本号机制也是CAS操作的一种,先比较再替换。比如我有一个学生表,有两个字段,饭卡余额和版本,初始化为,饭卡余额为100,版本为1。1、线程A吃饭刷了20块钱,修改余额为80,首先进行原创 2021-02-01 23:30:31 · 400 阅读 · 1 评论 -
【锁】可重入锁和不可重入锁的区别
王炸可重入锁也会导致死锁。不可重入锁容易导致死锁。两种锁都有可能导致死锁,并不是只要死锁了就是不可重入锁。不可重入锁可重入锁原创 2021-01-31 22:39:53 · 2239 阅读 · 0 评论 -
【锁】细数多线程中的十三种锁
目录乐观锁/悲观锁公平锁/非公平锁可重入锁/不可重入锁自旋锁偏向锁/轻量级锁/重量级锁独享锁/共享锁分段锁乐观锁/悲观锁乐观锁:每次读数据的时候都认为别人不会修改,所以不上锁,只有在写的时候判断一下别人有没有修改过。悲观锁:每次读数据的时候都认为别人会修改,所以都上锁,这样别人读数据需要阻塞等待拿到锁。公平锁/非公平锁公平锁:先等待的线程先获得锁。非公平锁:随机唤醒线程。tips:可重入锁可通过构造方法指定生成公平锁或者非公平锁。可重入锁/不可重入锁可重入锁:同一个线程,可以上两次锁就是可原创 2021-01-31 20:00:07 · 1296 阅读 · 3 评论 -
【多线程】线程池工作流程
线程池简介使用多线程编程时,线程的数量并不是越多越好,并且一直开新线程,对资源的消耗很大,你处理一段逻辑消耗的资源可能仅仅占用百分之十,而新建线程销毁线程这些生命周期就占据了资源的百分之九十。所以线程最好可以回收利用,不是说你这个线程执行了这个任务,你就可以go die了,不,你还可以继续给老板挣法拉利。线程做到了重复使用,但是不能让线程给你瞎搞吧,天天划水怎么办,光吃不干,领导们不喜欢这样的线程,所以线程池们要对你们进行管理,让你打狗不要去撵鸡。线程的生命周期线程有生命周期,线程池有状态。线程原创 2021-01-29 23:04:44 · 703 阅读 · 0 评论 -
【多线程】三个特性及其实现原理
同花顺数据库事务有ACID四种特性,多线程同样有三种特性。不同的数据库支持不同的事务,支持不同的特性。同样的,多线程由使用者来保证三个特性。原子性要么一起成功,要么一起失败。银行转账案例:账户A向账户B转1000,A-1000了,机器死了,B没有+1000,这就是没有原子性的后果。可见性当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。线程1执行代码 int i = 0; i = 10; 线程2执行代码 j = i 如果没有可原创 2021-01-29 00:16:55 · 507 阅读 · 0 评论 -
【多线程】内涵
目录同花顺多线程应用场景多线程优势线程的种类君生我未生,君死我未死(用户线程)君生我也生,君死我也死(守护线程)线程停止线程优先级同花顺有很多人对多线程很陌生,离它很遥远,没有使用过多线程。但实际上处处都有多线程的痕迹。举一个最基础的例子:Java程序的进程里至少包含两个进程,主线程也就是main()方法线程,另一个是垃圾回收机制线程。我们的java程序就不是单线程跑的。多线程应用场景1、短信验证码登录时,一般单独开一个线程去调用这个短信接口,主线程返回。2、前端经常使用的ajax发送请求原创 2021-01-27 23:12:10 · 354 阅读 · 1 评论 -
【多线程】小二上菜经典案例详解线程通信技术
目录场景场景厨师,顾客,小二。厨师和顾客两个线程任务是有关系的。顾客来了,点了鱼香肉丝,厨师就做鱼香肉丝。顾客没来,厨师就等待。厨师(线程任务类)1、等顾客。2、做菜。3、通知小二上菜。顾客(线程任务类)1、上门。2、等菜。3、吃菜。4、通知小二报菜。...原创 2021-01-27 00:04:24 · 540 阅读 · 1 评论 -
【多线程】线程通信技术
目录应用场景线程状态wait/notify应用场景两个线程任务要相互沟通,相互通知,那么就要使用线程通信技术。 比如等待唤醒机制。注意,这里是两个线程任务,而不是两个线程,两个概念一定要分清楚。其实,多个线程中,为了线程安全,使用同一个锁,已经隐约间有线程通信内味儿了。线程通讯的前提也是使用同一个锁。线程状态新建(NEW): 新new的线程(尚未启动)。运行(RUNNABLE): 正在运行的线程(已调用start)。受阻塞(BLOCKED):执行到同步代码块,没有锁,等待获取锁的线程。无原创 2021-01-26 22:39:21 · 360 阅读 · 0 评论 -
【多线程】卖票经典案例细述线程安全
目录场景版本一(有问题)线程任务类测试类所遇问题重复卖超卖版本二(改进)线程任务类测试类测试结果场景有三个售票窗口24小时无休的卖一百张车票。版本一(有问题)线程任务类package lao.ben.juc.ticket;public class Ticket implements Runnable { int num = 100; public void run() { while (true) { if (num > 0)原创 2021-01-25 21:09:29 · 366 阅读 · 1 评论 -
【多线程】线程安全问题简单分析
目录同花顺本质流程同步代码块/同步方法锁解决线程安全的两种方法synchronizedlock同花顺有看过有人买火车票,一个人在飞猪买,一个人在12306买,买到了同一张票。也有看到过,库存中已经没货了但是仍然卖出去了。超买,超卖,秒杀等问题就是线程安全问题。本质多个线程操作同一个共享变量。流程代码为 A->B->CA处有判断,B处有相关业务,C处有共享变量数据改变。在某个时间,有三个线程:1、线程1首先来到了A代码,接着往下执行,在执行C之前。2、线程2来到了A代码,判原创 2021-01-24 23:17:59 · 322 阅读 · 0 评论 -
Ajax常见错误
目录1、Ajax不支持下载文件2、Ajax不支持页面跳转1、Ajax不支持下载文件https://blog.youkuaiyun.com/numbbe/article/details/1089936372、Ajax不支持页面跳转比如:我想通过Ajax跳转到Tomcat首页,是不可行的。解决跨域后,依然不会跳转,状态码是200,就是不跳转。function onAbc(e) { $.ajax({ url: "http://localhost:8080/",原创 2021-01-14 22:10:09 · 526 阅读 · 1 评论 -
解决跨域的N种方法
最简单的解决方法谷歌浏览器解决 跨域问题 简单粗暴–user-data-dir=“C:\MyChromeUserData” --test-type --disable-web-security跨域分析同为跨域问题,但是报错是不一样的。解决预检请求,可以允许option访问,也可以简单点,碰到后直接返回200,预检请求不支持重定向已经配置跨域,但还是失败。response.setHeader(“Access-Control-Allow-Origin”, “");response.setHe原创 2021-01-13 21:36:13 · 855 阅读 · 0 评论 -
后端开发报错指南
目录同花顺一针见血疑难杂症同花顺遇到各种各样的奇奇怪怪的奇葩BUG,怎么解决。一针见血最简单的方法:关机重启。卸载安装。重装系统。换笔记本。疑难杂症换jar包。换tomcat。有时候会遇到很多莫名其妙的问题,比如我在tomcat中加入了CORS的配置信息,然后启动报错:java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed如果你百度,非常多原创 2021-01-13 20:11:18 · 973 阅读 · 0 评论 -
月浅灯深,梦里jar包何处寻
目录同花顺自己动手,丰衣足食方法一:依赖引入(推荐)方法二:maven仓库(呆瓜)方法三:源代码打包(闲得慌)方法四:网站下载(そうですね)同花顺首先,强烈谴责某些人,下载jar包,还要收费,你们看。收费也就算了,竟然还有这么多人买。小老犇我就不明白了,自己下不就好了吗?后来我才知道了,贫穷限制了我的想象,小丑竟是我自己。自己动手,丰衣足食我想找下边几个jar包,最快速的方法是什么?加入jar包后,项目报错,会不会是我从不良网站上下载的jar包有问题?所以还是自己从官网下载的比较安心啊。原创 2021-01-04 20:10:17 · 456 阅读 · 1 评论 -
HTTP请求头中的长连接和短连接详解
目录顺子长连接的作用长连接的体现TCP长连接流程TCP短连接流程长连接的使用场景短连接的使用场景如何判断长连接和短连接Transfer-Encoding顺子项目中,发现一个问题,有的文字显示不全,显示一半就结束了,然后,我看响应头,发现状态码为200的响应头有Transfer-Encoding:chunked。显示不全的请求中,没有这个Header,所以我怀疑是不是这个问题导致的。下边这个参考链接,写的非常好:参考链接:https://imququ.com/post/transfer-encod原创 2021-01-03 21:46:27 · 3314 阅读 · 0 评论 -
过滤器与拦截器的区别
同花顺web项目有三个顶梁柱,扛把子。servletfilterlistener今天介绍filter。过滤器原理过滤器,简单来说,在你的请求到达内部资源Controller之前,拦截住你的请求,进行特殊处理,或者判断是否符合我们的要求,然后执行放行操作。过滤器很像生活中的净水器,高铁安检,顾名思义。起到过滤作用和增强作用。符合我们规则的才让你走,你走的时候,我还可以加点料,比如处理一下字符编码,敏感字符替换成星星你个星星。图片来源:https://www.cnblogs.com/pan原创 2021-01-02 23:55:57 · 315 阅读 · 1 评论 -
舔狗面经
你有什么爱好?热爱免费加班,不让加班就和领导着急。你的职业规划是什么?我的职业规划是在最短的时间内成为公司需要的人才。你为什么离开上家公司?领导不让我义务加班,我很生气,把领导打了一顿,被辞退了。你最大的优点是什么?领导让干什么就干什么。··········································································美女,和其他人相比,你有哪些优势?我会各种姿势。那说说你的优点吧!美女:我勤劳能干。hr:就这一个优原创 2020-12-04 21:49:16 · 389 阅读 · 1 评论 -
JDK8新特性汇总
JDK8新特性之函数式接口传送门:https://blog.youkuaiyun.com/numbbe/article/details/109632362JDK8新特性之Lambda表达式传送门:https://blog.youkuaiyun.com/numbbe/article/details/109631638JDK8新特性之Stream流传送门:https://blog.youkuaiyun.com/numbbe/article/details/109566846····························原创 2020-11-11 22:08:56 · 298 阅读 · 0 评论 -
JDK8新特性之函数式接口
函数式接口定义(直接上图)这就是函数式接口,有且仅有一个需要被重写的抽象方法的接口。Lambda表达式的前提就是该接口必须是函数式接口。那么如何校验一个接口是函数式接口呢,如果你清楚函数式接口的定义,那么你可以用肉眼去看,如果你不清楚的话,你需要用显微镜去看。@FunctionalInterface,这个接口可以检测是否为函数式接口,放到接口上边,如果报错,就不是。常见的两个函数式接口(如果不出意外的话,兄弟们这辈子都用不到它)Consumer(消费者,可以消费使用一个数据) 抽象方法原创 2020-11-11 22:01:19 · 327 阅读 · 1 评论 -
JDK8新特性之Lambda表达式
前言Lambda表达式是匿名内部类的简化写法,是函数式编程思想的体现。我们平常开发都是面向对象开发,注重对象的方法,对象如何实现这个功能。how函数式编程思想,注重什么!做什么事,实现什么功能。whatLambda格式(不用看,直接往下滑) 匿名内部类格式: new 父类或接口() { 重写的方法 } Lamabda表达式的标准格式: (参数类型 参数名) -> { 方法体; return 返回值; } 可以看得出来:原创 2020-11-11 21:37:20 · 541 阅读 · 2 评论 -
JDK8新特性之Stream流
Stream流思想类似于电子厂的流水线作业。从初始源头一步一步往下流,在往下流的过程中,每一个节点都进行一定的操作,最终完成这个产品的组装。获取流单列集合获取流:直接调用集合的stream()方法。数组获取流:方法一:Stream.of(T… values)方法二:Arrays里的静态方法 //单列集合获取流,直接调用其中的stream()方法 List<String> list = new ArrayList<>(); list.原创 2020-11-08 23:14:27 · 1204 阅读 · 2 评论 -
强烈推荐,线程池是怎么工作的!
线程池简介使用多线程编程时,线程的数量并不是越多越好,并且一直开新线程,对资源的消耗很大,你处理一段逻辑消耗的资源可能仅仅占用百分之十,而新建线程销毁线程这些生命周期就占据了资源的百分之九十。所以线程最好可以回收利用,不是说你这个线程执行了这个任务,你就可以go die了,不,你还可以继续给老板挣法拉利。线程做到了重复使用,但是不能让线程给你瞎搞吧,天天划水怎么办,光吃不干,领导们不喜欢这样的线程,所以线程池们要对你们进行管理,让你打狗不要去撵鸡。线程的生命周期线程有生命周期,线程池有状态。线程原创 2020-10-28 21:08:50 · 366 阅读 · 1 评论