自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mark

没有伞的孩子只能努力奔跑

  • 博客(113)
  • 收藏
  • 关注

原创 java 中常见日期格式的设置

时间格式:yyyy-MM-dd HH:mm:ss 详解

2022-09-13 18:35:33 9459 5

原创 mysql查询数据是否存在优化

根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT count(*) 呢?普通耗费性能写法业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。普遍的SQL及代码写法如下SQL写法SELECT count(*) FROM table WHERE a = 1 AND b = 2Java写法int nums = xxDao.countXxxxByXxx(params);if ( nums > 0 ) { //当存

2022-05-09 13:39:47 609 1

原创 mysql的not in隐含陷阱

现象使用not int 子查询SELECT * FROM `users` WHERE username NOT IN ( SELECT uid FROM role_user )查询结果为:结果对吗?当然不对SELECT uid FROM role_user查询结果为:

2022-04-06 20:38:38 2331 3

原创 redis数据结构底层——SDS

1、什么是SDS比如说 **“SET name kobe”**这个命令,redis将在数据库中创建一个键值对。键值对的键是一个字符串对象,对象的底层实现是一个保存着字符串“name”的SDS键值对的值是一个字符串对象,对象的底层实现是一个保存着字符串“kobe”的SDSfree属性的值为0,表示这个SDS没有分配任何未使用空间。len属性的值为5,表示这个SDS保存了一个五字节长的字符串。buf属性是一个char类型的数组,数组的前五个字节分别保存了’R’、‘e’、‘d’、‘i’、‘s’五个字.

2021-08-29 16:14:58 378 5

原创 bean的生命周期

1、bean的生命周期2、Bean的内容2.1、定义JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。2.2、有无状态bean有状态对象:有实例变量可以标志其对象所处的状态。(有实例变量的对象,有存储数据能力

2021-08-29 15:54:27 1058 2

原创 HashMap的扩容原理

1、概述1.1、自身特点等public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { //..... }存储 key - value 类型结构,数据类型不限制根据 key 的 hashcode 值进行存储数据最多只允许一条记录的键(key)为 null(对 value 值不约束)它是无序的(其实一见 .

2021-08-08 15:29:23 1935 3

原创 java集合

克隆地址

2021-08-08 14:53:11 239 1

原创 ConcurrentHashMap?你真的懂了吗?

1、简介1.1、继承关系和特点ConcurrentHashMap是J.U.C(java.util.concurrent包)的重要成员,它是HashMap的一个线程安全的、支持高效并发的版本。在默认理想状态下,ConcurrentHashMap可以支持16个线程执行并发写操作及任意数量线程的读操作。1.2、底层结构1.3、如何保证的线程的安全性node + CAS + Synchronized 代替Segment2、jdk7与jdk8的区别取消了 segment 分段设计,.

2021-08-08 14:47:56 1439 3

原创 Mybatis的工作原理

1、工作原理读取 MyBatis 配置文件:mybatis-config.xml 为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息,例如数据库连接信息。**加载映射文件。**映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在 MyBatis 配置文件 mybatis-config.xml 中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。**构造会话工厂:**通过 MyBatis 的环境..

2021-07-20 15:30:20 8942 2

原创 sql预编译

1、什么是预编译 1.1、 sql的执行过程① 词法和语义分析② 优化sql语句,指定执行计划③ 执行并返回结果我们把这种普通语句称作Immediate Statements。select colume from table where colume=1;select colume from table where colume=2;但是很多情况,我们的一条sql语句可能会反复执行,或者每次执行的时候只有个别的值不同,那么这个时候会对上面两条语句生成两个执行计划,一千次查询就需要一千个执行计划,

2021-07-20 11:23:44 4191 4

原创 jdbc详解

1、jdbc连接数据库1.1、代码public class Application { public static void main(String[] args) { try { //1、加载驱动 Class.forName("com.mysql.cj.jdbc.Diver"); } catch (ClassNotFoundException e) { e.printStackTrace(.

2021-07-20 10:01:41 690 1

原创 缓存行,你听说过吗?

在讨论什么时候缓存行之前,我们先来了解一下计算机的基本组成结构1、计算机组成结构当使用一个程序,程序从硬盘中加载到内存当中,然后CPU将程序中的下一条指令地址读取到PC中,然后将相关数据存储到Registers(寄存器)中PC (Program Counter 程序计数器)记录这一个地址存放下一条执行的指令在哪里,cpu执行完一条就去内存取下一条。Register寄存器执行指令中的数据放到CPU执行,存储数据的就是寄存器ALU(Arithmetic Logic Unit)运算

2021-07-14 15:54:00 5388 4

原创 线程生命周期

1、线程状态1.1、线程的状态NEW尚未启动的线程处于此状态。RUNNABLE在Java虚拟机中执行的线程处于此状态。BLOCKED被阻塞等待监视器锁定的线程处于此状态。WAITING正在等待另一个线程执行特定动作的线程处于此状态。TIMED_WAITING正在等待另一个线程执行动作达到指定等待时间的线程处于此状态。TERMINATED已退出的线程处于此状态。1.2、线程方法1.2.1、线程常用方法![image.png](https://img-blog.csdnimg...

2021-07-14 11:00:09 839

原创 线程创建的方式

1、基本概念 1.1、普通方法调用与多线程 1.2、程序、进程、线程 程序程序是指令和数据的有序集合,本身没有任何运行含义,是一个静态概念。 进程在操作系统中运行的程序就是进程,比如QQ、包放弃、游戏、IDE等等。。进程是程序的一次执行过程,是一个动态概念,也是系统资源分配的单位一个进程开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能人为干预 线程一个进程中包含若干个线程,一个进程中至少要有一个线程线程是CPU调度和执行的单位.

2021-07-14 10:42:59 192

原创 mysql的逻辑架构解析

1、MySQL逻辑体系架构 可见mysql的组成部分有以下内容: 连接池组件 管理服务和工具组件 SQL接口组件 查询分析器组件 优化器组件 缓冲(Cache)组件 插件式存储引擎 物理文件 mysql的存储是基于表的,而不是数据库。 mysql的特点就是他是插件式的表存储引擎1.1、连接层 1.1.1、概述是一些客户端和连接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。 【基本功能】完成一些类似于连接处理、授权认证、及相关的

2021-07-13 22:57:37 389 1

原创 基于redis实现分布式锁

1、设置唯一键值实现1.1、实现原理 setnx key value——不存在时,添加该键时,如果存在,添加失败。(如果用set的话,key已经存在的话,value直接被覆盖) 使用例子://key不存在时,添加该键值对127.0.0.1:6379> setnx key4 "key44444"(integer) 1127.0.0.1:6379> setnx key4 "44"(integer) 0127.0.0.1:6379> get key4"key44444"

2021-06-18 15:43:51 6103 6

原创 数据库实现分布式锁

1、基于表记录对于数据库来说,实现分布式锁,最简单的方式就是直接创建一张锁表。然后通过操作表中的数据来实现,当你想要获取锁的时候,在表中添加一条新的记录,想要释放锁的时候就删除这条记录。1.1、创建一张表CREATE TABLE `database_lock` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `resource` int NOT NULL COMMENT '锁定的资源', `description` varchar(1024) NO

2021-06-18 11:46:39 3329 10

原创 分布式锁,你知道吗?

1、为什么需要分布式锁现在单机架构已经无法满足大批量用户的使用了,我们这个使用采用选择分布式架构如图所示的分布式架构:那么变量A存在三个服务器内存中(这个变量A主要体现是在一个类中的一个成员变量,是一个有状态的对象),现再三个请求分别操作三个不同内存区域的数据,变量A之间不存在共享,也不具有可见性!那么这个时候我们为了保证一个方法或属性在高并发情况下只能被同一个线程执行,在传统单体应用单机部署的情况下,可以使用并发处理相关的功能进行互斥控制。但是现在变成集群后,由于分布式系统多线程、多进程分布在不

2021-06-18 11:21:04 239 3

原创 CAS简介

1、CAS1.1、为什么会有CAS在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。一个线程持有锁会导致其它所有需要此锁的线程挂起。如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制,但是volatile不能保证原子性。因此对于同步最终还是要回到锁机制上来。那么synchronized和CAS的区别

2021-05-30 20:07:31 318 2

原创 静态代理与动态代理

1、什么是代理为其他对象提供一种代理以控制对这个对象的访问。其实就是有中间人帮你干了某些事情。比如一般都是厂家委托给代理商进行销售,顾客直接和代理商进行打交道,不和产品实际产生关联。2、为什么要用代理呢?代理模式可以将具体的实现与调用方法进行解耦,通过面向接口进行编码完全将具体的实现隐藏在内部。当我们需要在原代码的基础上添加业务时,不修改原代码,可以添加一个代理来在原来的方法上添加业务。3、代理模式代理模式为其他对象提供一种代理以控制对这个对象的访问。我们这里代理类与真正的类的对象之间

2021-05-17 09:55:38 316 9

原创 idea设置maven的全局配置

1、退回到idea的主页点击File选择关闭项目2、进入到全局配置页2021年版本其他版本3、设置maven仓库地址即可

2021-05-16 09:37:50 13843 4

原创 idea如何查看代码提交人

1、具体操作在代码的左侧栏,也就是打断点的地方,右击选中Annotate with Git Blame,显示git Blame注解就会看到代码对应的提交人 2、查看提交详情单机对应的git blame注解即可。就会看到对应提交记录改变的文件内容 3、关闭记录之间右击选择关闭即可...

2021-05-16 09:23:43 20582 3

原创 spring是如何解决循环依赖的呢?

1、什么是循环依赖?循环依赖就是循环引用,就是两个或多个bean相互之间的持有对方。A类中有一个B类型的成员变量,需要注入BB类中有一个A类型的成员变量,需要注入A1、循环依赖的场景 1.1、构造器的循环依赖//A类public Class A{ private B b; pubcli A(B b){ this.b=b; }}//B类public Class B{ private A a; public B(A a){

2021-05-14 21:45:12 12974 6

原创 Servlet程序处理请求报错-HTTP method GET is not supported by this URL

错误提示: 原因:情况一:继承自HttpServlet的Servlet没有重写对于请求和响应的处理方法:doGet或doPost等方法;public class ParameterServlet extends HttpServlet {}情况二:继承自HttpServlet的Servlet重中调用了父类HttpServlet的doGet或doPostpublic class ParameterServlet extends HttpServlet { @Override .

2021-05-01 20:52:27 364 2

原创 连接不上腾讯云的redis

一、问题今天学习redis时,在IDEA上尝试使用Jedis来操作命令,结果出现连接失败。代码如下:public class TestPing { public static void main(String[] args) { //1、new jedis的连接 Jedis jedis=new Jedis("49.232.xxx.xx",6379); jedis.auth("myRedis"); //jedis所有的命令就是之前学

2021-03-31 21:40:59 1384 1

原创 mybatis批量执行更新删除配置

1、foreach批量更新或删除<update id="update"> <foreach collection="xxList" item="item" index="index" open="" close="" separator=";"> update t_xxx <set> xxx = #{item.xxx} </set> where id = #{item.id} &

2021-03-31 21:37:24 171 1

原创 linux安装redis

1、将安装包直接拉取到linux上面2、解压redis包tar -zxvf redis-6.2.1.tar.gz3、进入解压后的文件看到redis的配置文件redis.config4、基本环境安装① 安装gcc-c++软件gcc-c++使用gcc -v命令来查看安装的版本② 在redis的解压包中运行make命令make命令可以将需要的软件下载make之后发现多出了redis-6.2.1/src文件夹③ 然后make install,安装所有的内容5、redis默认的安装路径:us

2021-03-31 21:34:38 137 2

原创 nginx,正?反?代理

什么是代理当客户端和服务器端由于某些原因无法访问的时候,我们就可以用到代理来帮助我们了。比如生活中,你买不到东西,选择代购,也是使用了代理的一种。 正向代理一开始客户端想访问某服务器被拒绝,然后客户端就找了代理来帮他去访问服务器。所以说正向代理,代理的是客户端。而且客户端是清楚自己最后要访问的服务器是谁。生活中的一个设置nginx正向代理的实例:考虑成本不浪费资源,小明在购买服务器的时候特意只购买一台带有带宽(可访问公网)的电脑A,而其他机器无法访问公网。实际使用中难免部署项目的时候,发.

2021-03-07 21:27:08 3337

原创 JPA-主键生成策略

hibernate主键标识为@Id, 其生成规则由@GeneratedValue设定的@GeneratedValue注解的strategy属性指定具体的策略基本使用的有四种策略 GenerationType.IDENTITY规则表示自增策略,主键由数据库生成(主要是自动增长型)比如:MYSQL可以在创建表时声明"auto_increment" 来指定主键自增长。该策略在大部分数据库中都提供了支持(指定方法或关键字可能不同),但还是有少数数据库不支持,所以可移植性略差。使用自增长主键生成策略是只需

2020-12-16 19:47:47 1748

原创 navicat连接mysql报错

1、提示无法连接主机1.1、方法一:设置授权创建一个用户并且授权所有的主机给他# %:表示从任何主机连接到mysql服务器,下一步刷新权限mysql> GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES; all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、

2020-11-15 22:27:00 579 6

原创 linux下mysql的安装

1、下载mysql在官网下载对应版本,然后上传到Linux系统中:下载地址或者直接使用命令在网站下载wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz2、解压安装包# 进入到安装包文件夹cd /root# 解压安装包tar -xzvf /root/mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz# 移动到指定位置mv /

2020-11-15 22:18:04 3195 1

原创 java生成word文件

java生成word详细解析——使用freemarker生成word文档1、引入freemarker依赖<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.28</version></dependency>2、新建wo

2020-11-05 22:52:53 3272 7

原创 springcloud手动打jar包详解

1、springcloud项目打包步骤父项目pom.xml文件中添加的内容<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.2.6.RELEASE</version&g

2020-11-01 21:46:39 4773 7

原创 mysql主主复制——windows

1、两台主机分别修改配置文件——my.ini在mysqld节点下添加主主复制信息,两服务器的server-id和auto-increment-offset参数不同即可#[必须]服务器唯一ID,每台服务器需不同server-id = 1#[必须]启用二进制文件log-bin = mysql-bin#[不是必须]二进制文件启用混合模式binlog_format = mixed#[不是必须]二进制文件过期时间,单位是天expire-logs-days = 14#[不是必须]当每进行1次事务提交

2020-10-28 23:03:20 1407 6

原创 @MapKey的使用

使用场景我这里的业务场景是:有字典表,其他表的很多字段都需要去字典表中查询,由于字典表的维护方便统一,所以将其他表对字典值的查询单独抽出来,那么我们可以将每次需要查询字典值的id拿到一起,直接查询字典信息,用map接收字典的内容,将id做为key,很方便拿到。dao层 @MapKey("id") Map<String,UserInfoEntity> selectUser();mybatis的xml文件 <select id="selectUser" resultMap="us

2020-10-28 22:54:28 18992 17

原创 主从复制原理

1、配置内容:主库开启binlog日志,记录对数据库的操作。从库将主库的binlog日志内容写到自己的relay-log日志当中从库读取relay-log重做日志文件,然后将这些在执行到自己的库中2、涉及到的三个线程主库线程binlog输出线程: 主库开启binlog日志,记录数据库的更改,当从库连接到主库的时,主库创建一个线程把binlog发送给从库。从库线程从库I/O线程(Slave_IO_Running):当START SLAVE执行时,从库创建一个I/O线程,用来连接主库,请求主

2020-10-23 23:22:25 1509 2

原创 redolog日志与binlog日志

文章目录1、redoLog工作层记录机制作用:存储:日志作用2、binLog工作层记录机制日志作用1、redoLogredo Log又成重做日志,redo log 是物理日志,记录的是在某个数据页上做了什么修改,不记录更新后的状态。工作层InnoDB引擎层特有记录机制作用:一般来说这个日志是InnoDB引擎来做的,先把需要更新的放置在redoLog中,并更新内存。InnoDB引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做,减少对磁盘的I/O操作。存储

2020-10-23 22:54:32 2150 3

原创 export与export default你真的了解吗

export的导入导出需要添加{},并且import的名称要和导出的保持一致export default相当于把里面的所有东西都给了default,然后导入的时候不需要使用{},并且可以随便起名字,因为是把所有的内容都给了default,然后我们再把default给我们所起的变量名称...

2020-07-04 14:59:33 5232 8

原创 意想不到的from表单以及input隐含操作

限制输入开头结尾输入空格直接在v-model后添加.trim即可<el-input v-model.trim="projectInfo.companyUserName" ></el-input>添加自定义校验方法:现在data()下面设置校验的变量,然后添加到rules校验当中data() { //校验邮箱 var checkEmail = (rule, value, callback) => { if (value) { var reg = /^[a-z

2020-07-02 12:26:59 2745 1

原创 超级甜的sync语法糖你尝过了吗?

为什么sync超级甜呢?因为他非常好用啊,可以使用sync让子组件改变父组件传过来的值,也就是可以在子组件中改变props中的变量了,嘿嘿,这样就可以子父组件同步了。具体怎么使用呢?首先父组件传值过来,并且在传值的时候添加.sync后缀<son :fromFather.sync="fromSon"></son>data(){ return{ fromSon:"父组件的值" }},子组件接收,并设置改变传过来的fromFather变量//props

2020-07-02 11:53:29 2889 1

空空如也

空空如也

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

TA关注的人

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