
Java学习
java-cp
本人专职【Java后端开发】,但历经互联网电商、政务行业、教育行业等,工作涉及后端、前端、小程序、APP、运维。。。兴趣广泛,热爱探索,乐于拥抱变化!
座右铭:
苟有恒,何必三更眠五更起;最无益,莫过一日曝十寒。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
身份证号规则校验
我们国家目前公民身份证号为15位或者18位,且最后一位可能出现字母X。其中,前1、2位数字表示:所在省份的代码;第3、4位数字表示:所在城市的代码;第5、6位数字表示:所在区县的代码;第7-14位数字表示:出生年、月、日;第15、16位数字表示:所在地的派出所的代码;第17位数字表示性别:奇数表示男性,偶数表示女性;第18位数字是校检码:也有的说是个人信息码,一般是随计算机的随机产生,用来检验身份证的正确性。 //假设18位身份证号码:41000119910101123...原创 2022-05-09 18:38:22 · 9337 阅读 · 0 评论 -
mybatis-plus 包引用踩坑
开发过程经常使用mybatis-plus插件对mybatis进行增强操作,它对mybatis的一般操作做了一层封装,使用起来简单快捷但是,往往也隐藏着风险。今天就有一个问题,导致自己查找了好久,最后发现是引用包的问题导致。。。问题现象:保存操作,执行成功数据库返回data为插入数据返回id,但是这个id一看就是未指定自增情况先导致的。首先,排查数据库,数据库表主键是否设置自增:数据库没有勾上自增,勾上,执行命令truncate table xxxx;再查看entity定义:原创 2021-12-06 14:32:36 · 3671 阅读 · 2 评论 -
MybatisPlus之likeRight
在使用Mybatis-plus的时候,使用like方法发现匹配的方法和自己想的相反,特此记录下:使用场景:我想要查询分类的某一层级下的订单,如下图,我想查询所有“男装”订单那么,如果是写SQL查询就是这样select xx,xx from order_info where category_id like '10,20%';可是,项目如果使用的是Mybatis-plus,那么我们该怎么写呢?最开始我想的是,likeLeft就是左匹配嘛,就按照下面这么写:this.lis.原创 2021-11-18 14:50:36 · 22634 阅读 · 0 评论 -
springboot自定义注解
我们在一些实际项目中需要实现对登录用户的实时监控,以及对用户部分相关操作进行埋点统计。以前我们实现这种场景基本上都是采用springaop操作,但是如果应用场景多就需要多个切面切入。到了springboot,我们实现这种场景就容易多了,这里我使用了自定义注解,对需要监控的接口使用注解进行切点切入,然后处理相关逻辑即可。自定义注解类:@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @i原创 2021-02-03 23:20:19 · 285 阅读 · 0 评论 -
springboot分页插件PageHelper整合
这是mybatis常用的分页插件引入依赖jar包:<!--分页插件pagehelper--><dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.5</version></depen原创 2021-01-29 21:22:24 · 383 阅读 · 0 评论 -
Springboot整合mybatis-plus
我们在使用mybatis的时候,需要在xml中去编写sql文件。那么,我们能不能像hibernate那样,直接写个实体,就能自动映射sql呢?有的,那就是mybatis-plus,顾名思义:mybatis加强版。引入依赖:版本号:3.3.2添加配置代码中主要是实现mapper一级的CURD,继承BaseMapper实现类中新加入更新操作,使用接口updateById:测试结果:update成功!!!查看更新效果:...原创 2021-01-26 21:13:24 · 139 阅读 · 0 评论 -
springboot整合mybatis
mybatis是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO为数据库中的记录。今天,总结如何快速整合mybatis。老步骤,引入依赖jar:<!-- mybatis引入 --><dependency> <groupId>org.mybatis.spring.b原创 2021-01-26 20:37:30 · 180 阅读 · 0 评论 -
springboot整合Swagger
做过前后端分离的童鞋,对于这个插件应该不陌生。在最初的前后端开发模式中,系统开发前前后端的童鞋大家坐下来先定义一下接口,商量好入参出参,然后后端按着开发设计文档去开发接口。但是,再好的设计都有遗漏的地方,然后做着做着就会发现这里少了个参数,那里参数类型不对等等问题,这个时候不光要改代码,还要忙着把接口定义文档给修改一遍。如果这个时候,产品经理再来插一脚,那个场面,大家自己脑补吧。有什么东西能够在线编辑,同步更新呢?钉钉和腾讯文档已经帮你解决了,但是这个文档谁去维护?前端?后端?前端:这个接口是你开发原创 2021-01-25 22:49:27 · 147 阅读 · 0 评论 -
负载均衡基本算法
负载均衡的基本算法,分为一下几种:1)随机算法:负载均衡方法随机的把负载分配到各个可用的服务器上,通过随机数生成算法选取一个服务器,然后把连接发送给它。虽然许多均衡产品都支持该算法,但是它的有效性一直受到质疑,除非把服务器的可运行时间看的很重。2)轮询算法:轮询算法按顺序把每个新的连接请求分配给下一个服务器,最终把所有请求平分给所有的服务器。轮询算法在大多数情况下都工作的不错,但是如果原创 2020-07-28 23:33:19 · 2187 阅读 · 0 评论 -
Java面试——乐观锁和悲观锁
乐观锁:我是狱警,我不怕你们来搞“劫狱”——更新,我连锁都懒得加,每次领导过来视察,我就验一下通行证(版本号,不可伪造),对上号,我就让进去。悲观锁:我是狱警,我好怕他们来“劫狱”——更新,所以每次领导来视察——怕被后面的领导捷足先登,都得战战兢兢的把整个牢房——表,都得锁得死死地,谁都不能进来,连只苍蝇都不行,必须得这个领导完事了,才能放下一个进来。上面一看,就能发现它们的差异:① 乐观锁是个行级锁,悲观锁是表级锁;② 乐观锁不对数据进行强制加锁,只是在更新数据的时候去校验下版本。增加吞吐原创 2020-07-28 00:19:43 · 385 阅读 · 0 评论 -
Java面试——共享锁和独占锁
将这两个锁之前,我先讲下上一章遗留的问题,就是ReentrantLock中的链表,就是下图中的这个内部静态类:其实这个类,一看就明白了,这个Node中包含了prev和next,这就是一个双向链表嘛。这个链表的作用就是用来存储线程的,给线程排队用的。并且由里面的waitStatus来实现锁的CAS操作。并由这个双向链表实现锁的自旋。共享锁和独占锁共享锁,顾名思义,就是这个锁是共享的,咱们能一起使用这个锁。这个就像进男厕所,以前的那种小便池,可以站很多人。一般共享锁,使用是在读数据的基础上加原创 2020-07-27 23:57:13 · 566 阅读 · 0 评论 -
Java面试——神秘的锁
Java的锁有哪几种?公平锁vs非公平锁(2020-7-14)共享锁vs独占锁(排它锁)乐观锁vs悲观锁可重用锁自旋锁啊啊啊~~~~~~怎么这么多的锁?它们的出现是解决什么问题的?公平锁和非公平锁说到这两个分类的锁,那就要说它们判断公平和非公平的标准是什么?锁我们都知道,是Java在多线程的情况下,会对某一资源进行竞争,那么竞争就会产生排队,就像咱们春节买车票,大家到火车站都得排着队买(这里就有人要抬杠,现在手机买,根本不用排队,都是靠抢的。说这话的人,我只能说,小伙原创 2020-07-14 22:54:02 · 315 阅读 · 0 评论 -
Java面试宝典——ArrayList构造函数剖析
构造函数:无参构造在这里就不必再讲了。下面讲讲连个有参构造函数:1、传入初始容量值这个构造函数的源码比较好懂,就是传入参数大于0,则初始化一个固定长度的Object数组给elementData;如果传入初始长度为0,则直接赋值Empty_ElEMENTDATA。否则,抛出异常。2、传入集合Collection这个方法就是我们经常用的,将一个list初始化给另一个list。如:List A = new ArrayList(); List B = new ArrayList(A);这里第原创 2020-05-19 00:01:43 · 480 阅读 · 0 评论 -
Java面试宝典——ArrayList源码解析
下面这个代码输出是什么?A. 运行时异常B. 正确运行,输出str1C.正确运行,输出str2D.编译时出现异常答案:A答案中首先排除D选项,代码是编译肯定是通过的。其他的先上机操作验真伪:的确是运行时异常。我们看下报错的行数第51行。为什么是这行报错?上源码:这个是List类接口定义的源码,看方法上的注释最后一行。if the index is out of range(如果传入的index参数值小于0或者大于size)抛出IndexOutOfBou..原创 2020-05-15 10:36:00 · 305 阅读 · 0 评论 -
Java面试——深入了解HashMap
jdk1.8的HashMap采用的是数组+链表或红黑树这么做的目的,我们上篇文章已经解释了一部分:① 解决链表逆序和死循环的问题② 优化发生hash碰撞情况下,get速度。时间由O(n)提升到O(logn)。这里HashMap的链表和红黑树是随着链表的长度或树的深度动态转换的:当链表的长度超过8时,自动转为红黑树。当红黑树的深度小于6时,自动转为链表。为什么转为红黑树是8,而转为链表为6?为什么两者不能都设置为8呢?首先,转为红黑树,设置成8,是同过一定的概率总结归纳出来,当链表的长度超原创 2020-05-13 22:49:46 · 203 阅读 · 1 评论 -
Java面试——浅谈HashMap
Map是一种键值对方式存储的集合;key值是唯一不可重复的,value可重复;实现map的接口实例:HashMap底层数据结构实现为:数组+链表(1.7) 数组+链表+红黑树(1.8)长度可变(默认16),可扩容,扩容阈值为:当前数组长度*加载因子(0.76)扩容长度为2的幂次方哈希碰撞HashMap中最常使用的两个方法put和get,put是将一个键值对的数据存放在hash表中。在HashMap中,数据的存放是通过hashCode()方法计算计算键值得到对应得hashcode,原创 2020-05-12 23:38:11 · 356 阅读 · 0 评论 -
List 中subList 慎用(减法陷阱)
查找java原代码我们可以看到:tempList的subList实现代码在AbstractList类里边,然而无论如何,最终 的结果都是返回一个AbstractList的子类:SubList(该类是一个使用默认修饰符修饰的类,其源代码位于 AbstractList.java类文件里边), SubList类的构造方法: SubList(AbstractList list, int fromInde原创 2015-02-28 17:37:28 · 13865 阅读 · 1 评论 -
eclipse 本地工程单元测试出现can not run program"XXXX/javaw.exe" error=87
报这个错有2个解决方法:1. 修改长路径:http://www.myexception.cn/ruby-rails/439356.html当eclipse控制台报出Cannot run program “"C:\Program Files\Java\jre6\bin\javaw.exe" (in directory "D:\workspace\test"): CreatePro转载 2015-03-23 12:48:46 · 2349 阅读 · 0 评论 -
Java多线程生命周期
关于Java中线程的生命周期,首先看一下下面这张较为经典的图:上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点,Java中的多线程也就基本上掌握了。主要包括:Java线程具有五中基本状态新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();就绪状态(Runnable):当调用线转载 2017-02-13 22:08:08 · 240 阅读 · 0 评论 -
java 多线程学习(Java中Thread 和 Runnable的区别)
今天刚学习java多线程在网上查了几篇博文学习,个人觉得写的不错,但是有的地方有个疑问:Java中Thread 和 Runnable的区别。然后,在网上查找相关资料,发现几乎都是一样的。下面贴出相关的代码:如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。/** * @author Rollen-Holt原创 2015-02-01 11:12:41 · 364 阅读 · 0 评论