自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SQL执行效率优化 小表驱动大表+索引失效原因

上述业务中 如果order表是大表,则in语句更合适,反之,order表是小表,则exists语句更好。用is null和is not null没注意字段是否允许为空。select_type(select类型)filtered(按表条件过滤的行百分比)partitions(匹配的分区)key_len(实际索引长度)id(select唯一标识)ref(与索引比较的列)使用or关键字时没有注意。Extra(附加信息)使用了select *table(表名称)type(链接类型)范围索引列没有放最后。

2023-07-20 15:12:16 352

原创 使用ServerWebExchange后进行数据导出excel/scv

【代码】使用ServerWebExchange后进行数据导出excel/scv。

2023-07-07 10:01:07 301

原创 枚举,根据key获取对应value的值

【代码】枚举,根据key获取对应value的值。

2023-07-07 09:28:22 513

原创 集合操作收录

实现类底层结构优点缺点ArrayList数组查询快,增删慢线程不安全LinkedList双向链表查询慢,增删快线程不安全实现类底层结构Key是否可以为null特点HashMap数组+链表+红黑树是无序,遍历时按照数组遍历TreeMap红黑树否遍历时可按照键的特定顺序遍历数组+链表+红黑树+双重连接链表是遍历时可按照插入顺序遍历HashSet、TreeMap、LinkedHashMap和对应的map一样。

2023-06-06 16:35:51 378

原创 自定义排序

(1)Comparator.compare(o1, o2),o1-o2为升序,o1.compareTo(o2)为升序;序,o2.compareTo(o1)为降序。Compare返回值为正数的时候就要交换o1,o2的顺序,负数和。零的时候不交换o1,o2顺序。

2023-06-06 16:01:03 36

原创 面试记录点-数据库篇

1、数据库使用limit进行分页查询 在偏移量(页数)小的时候加单一索引有效率提升,但偏移量大的时候反而会降低效率,因为回表也是需要消耗性能的,越往后回表次数越多反而不如全表扫描了。3、可以通过子查询进行优化,先查id,然后通过id手动回表查询其他字段,效率有效提升,但集合较多的时候也不推荐使用。2、可以加联合索引,能有效提升性能,但后期表中新增字段后会失效,可用性较低。

2023-03-21 16:43:02 42

原创 预防空指针异常

预防空指针异常

2023-02-24 14:57:01 66

原创 git 多次push后,版本回退

git 多次push不美观,版本回退 重新合并提交

2023-02-21 19:14:57 108

原创 Java实体映射工具:MapStruct

自用,java对象映射

2023-01-30 14:24:13 70

原创 HashMap和HashTable的区别

(1)两者父类不同HashMap是继承自AbstractMap类,而Hashtable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口。(2)对外提供的接口不同Hashtable比HashMap多提供了elments() 和contains() 两个方法。elments() 方法继承自Hashtable的父类Dictionnary。elements() 方法用于返回此Hashtable中的value的枚举。

2021-10-12 16:00:05 98

原创 String StringBuffer 和 StringBuilder 的区别是什么?

String是只读字符串,它并不是基本数据类型,而是一个对象。从底层源码来看是一个final类型的字符数组,所引用的字符串不能被改变,一经定义,无法再增删改。每次对String的操作都会生成新的String对象。private final char value[];每次+操作 :隐式在堆上new了一个跟原字符串相同的StringBuilder对象,再调用append方法 拼接+后面的字符。StringBuffer和StringBuilder他们两都继承了AbstractStringBuilder抽象类,从

2021-10-11 17:48:47 164

原创 equals与==的区别

== :== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。(1)比较的是操作符两端的操作数是否是同一个对象。(2)两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。(3)比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如:int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆。equals:equal

2021-10-11 17:46:32 164

原创 重载和重写的区别

重写(Override)从字面上看,重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。public class Father {public static void main(String[] args) {// TODO

2021-10-11 17:07:53 44

原创 Java自动装箱与拆箱

装箱就是自动将基本数据类型转换为包装器类型(int–>Integer);调用方法:Integer的valueOf(int) 方法拆箱就是自动将包装器类型转换为基本数据类型(Integer–>int)。调用方法:Integer的intValue方法在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:Integer i = new Integer(10);而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这

2021-10-11 17:06:10 55

原创 Java中序列化,有一部分字段不想进行序列化

解决办法:transient关键字用对于不想被序列化的变量,用transient关键字修饰。transient关键字的作用就是:阻止用这个关键字修饰的不想被序列化的变量序列化;transient只能修饰变量,不能修饰类和方法。...

2021-10-11 17:02:18 370

转载 oppo手机永久打开USB调试模式

现象:十分钟不使用就会自动关闭 usb 调试模式,重新打开还得输入验证码,真尼玛烦人。方法: 数字拨号盘 输入 *#8011# 就可以永久打开.

2021-09-26 09:54:50 2922

原创 mybatis 打印sql执行日志

mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2021-09-08 15:32:00 160

转载 springboot项目集成swagger-bootstrap-ui

springboot项目集成swagger-bootstrap-ui

2021-08-23 09:57:34 146

转载 Java 根据经纬度计算两点间的距离

Java实现public final class DistanceUtils { /** * 地球半径,单位 km */ private static final double EARTH_RADIUS = 6378.137; /** * 根据经纬度,计算两点间的距离 * * @param longitude1 第一个点的经度 * @param latitude1 第一个点的纬度 * @param lo

2021-08-03 14:41:58 9145 1

原创 MySQL集群架构

1、集群架构设计1.1 架构设计理念在集群架构设计时,主要遵从下面三个维度:可用性扩展性一致性1.2 可用性设计站点高可用,冗余站点服务高可用,冗余服务数据高可用,冗余数据保证高可用的方法是冗余(备份)。但是数据冗余带来的问题是数据一致性问题。实现高可用的方案有以下几种架构模式:主从模式:简单灵活,能满足多种需求。比较主流的用法,但是写操作高可用需要自行处理。双主模式:互为主从,有双主双写,双主单写两种方式,建议使用双主单写。1.3扩展性设计扩展性主要围绕着读操作扩展和写操

2021-07-28 16:19:09 149

原创 synchronized的实现原理与应用

在多线程并发编程中synchronized一直是元老级角色,很多人都会称呼它为重量级锁。但 是,随着Java SE 1.6对synchronized进行了各种优化之后,有些情况下它就并不那么重了。本文 详细介绍Java SE 1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级 锁,以及锁的存储结构和升级过程。先来看下利用synchronized实现同步的基础:Java中的每一个对象都可以作为锁。具体表现 为以下3种形式。·对于普通同步方法,锁是当前实例对象。·对于静态同步方法,锁是当前

2021-07-26 14:51:28 53

原创 MySQL事务和锁

1. ACID 特性在关系型数据库管理系统中,一个逻辑工作单位要成为事务,必须满足这4个特性,即所谓的ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。1.1 原子性原子性:事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。每一个写事务,都会修改BufferPool,从而产生相应的Redo/Undo日志,在BufferPool中的页被刷到磁盘之前,这些日志信息都会写入到日志文件中,如果Buffe

2021-07-26 10:56:56 102

原创 MySQL索引原理

1.索引类型索引可以提升查询速度,会影响where查询,以及order by排序。从索引存储结构划分:B Tree索引、Hash索引、FULLTEXT全文索引、R Tree索引从应用层次划分:普通索引、唯一索引、主键索引、复合索引从索引键值(字段)类型划分:主键索引、辅助索引(二级索引)从数据存储和索引键值逻辑关系划分:聚集索引(聚簇索引)、非聚集索引(非聚簇索引)1.1普通索引这是最基本的索引类型,基于普通字段建立的索引,没有任何限制。创建索引的方法如下:CREATE INDEX &lt

2021-07-20 17:07:35 161

转载 jdk unsafe类源码解析

一、CAS相关public final native boolean compareAndSwapObject(Object var1, long var2, Object var4, Object var5);public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5);public final native boolean compareAndSwapLong(Object v

2021-07-16 11:10:51 91

转载 JDK1.8 Unsafe类中的park和unpark方法解析

park是Unsafe类中的native方法,LockSupport类通过调用Unsafe类的park和unpark提供了几个操作。Unsafe的park方法如下public native void park(boolean isAbsolute, long time);第一个参数判断是否是绝对时间,第二个参数是等待时间值。如果isAbsolute为true则会实现ms定时,如果isAbsolute为false则会实现ns定时。locksupport类常用的park方法如下,无参方法public

2021-07-16 11:07:37 649

原创 MyBatis中一级缓存

一级缓存是什么是一个hashmap对象,在SQL session中的clearCache方法跳转到DefaultSqlSession中的clearCache方法@Override public void clearCache() { executor.clearLocalCache(); }Executor接口里面的clearLocalCache方法——>BaseExecutor中的clearLocalCache方法@Override public void clearL

2021-02-05 12:20:37 63

转载 mybatis中的#{}和${}区别

#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”.$将传入的数据直接显示生成在sql中。如:order by useriduser_iduseri​d,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id...

2021-02-04 20:48:20 52

原创 Nacos一直启动不了

按住shift,鼠标右键(选择在此打开命令窗口)输入 startup.cmd -m standalone

2020-11-05 17:44:09 2685 2

原创 开发的各种配置

开发文档

2020-10-30 20:58:33 62

原创 Solr 811安装

solrSolr是一个高性能,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。luceneLucene是apache jakarta项目的一个子项目,是一个开放源代码的全文检索引擎开发工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简

2020-10-12 22:13:22 189 1

原创 Maven配置 - settings.xml

Maven配置 - settings.xml<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/set

2020-10-12 21:35:16 101

原创 安装Lombok插件(Eclipse)

下载https://projectlombok.org/双击jar文件安装选择eclipse目录,安装Lombok插件确认安装成功启动eclipse,在“关于”中确认Lombok插件已安装成功

2020-10-12 21:30:21 162

原创 (购物项目)超时订单的处理

业务说明说明:如果订单提交之后如果30分钟没有完成付款,则将订单状态改为6.表示订单交易关闭.问题:如何实现每个订单30分钟超时呀???思路1: 利用数据库的计时的函数每当order入库之后,可以添加一个函数30分钟之后修改状态.该方法不友好, 100万的订单刚刚入库. 100万个监听的事件.思路2: 利用消息队列的方式实现 redis 开启线程向redis中存储数据之后设定超时时间.当key一旦失效则修改数据库状态.Redis主要做缓存使用. 但是不合适.思路3:开启单独的一个线程(异步)

2020-10-07 20:34:24 1073

原创 SSO单点登录/登出(cookie优化)

单点登录实现策略需求说明要求用户只需要登录一次,那么就可以访问其他的认证系统,无需用户再次登录.如果采用如下的配置,则必然会出现用户频繁登录的现象.SSO介绍单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消

2020-10-07 20:31:30 985

原创 SpringBoot整合Redis集群

入门案例测试 /** * redis集群的入门案例 * jedisCluster 操作整个redis集群,链接redis的所有的节点 */ @Test public void testCluster(){ Set<HostAndPort> sets = new HashSet<>(); sets.add(new HostAndPort("192.168.126.129", 7000));

2020-10-07 20:17:00 280

原创 Redis分片机制和集群搭建

需求数据如果需要在redis中进行海量的数据存储,如果只有一台redis显然不能实现该功能.如果通过扩大内存的方式也不能达到要求.因为时间都浪费在寻址中. 如何有效的存储海量的数据呢???Redis分片说明说明:一般采用多台redis,分别保存用户的数据,从而实现内存数据的扩容.对于用户而言:将redis分片当做一个整体,用户不在乎数据到底存储到哪里,只在乎能不能存.分片主要的作用: 实现内存扩容.Redis分片准备创建目录说明:在redis根目录中创建一个shards目录分片搭建策略

2020-10-07 19:55:23 669

原创 AOP实现Redis缓存服务

1.1 现有代码的分析说明:1.虽然在业务层service中完成了代码的实现.但是该代码不具有复用性.如果换了其他的业务则需要重新编辑.2.由于缓存的代码写在业务层service中,所以代码的耦合性高,不方便以后的扩展.需求:1.能否实现代码的复用.2.能否降低代码的耦合性.1.2 AOP1.2.1 AOP作用名称:面向切面编程.一句话总结: 在不改变原有代码的条件下,对功能进行扩展.公式: AOP = 切入点表达式 + 通知方法.专业术语:1.连接点: 在执行正常的业务过程中满足

2020-10-07 19:33:56 348

原创 Linux中使用和搭建redis

1.关于服务缓存说明1.1 关于缓存机制的说明缓存机制主要的目的就是降低用户访问物理设备的频次.提供用户的查询的效率.衍生: 可以利用缓存服务器有效的降低用户访问数据库的压力.1 .2 缓存要素1.如果实现缓存需要使用什么样的数据存储结构??? K-V2.缓存服务的开发应该使用什么语言?? C语言3.缓存服务运行的环境在内存中.4.缓存服务运行环境在内存中 如果断电之后数据将全部删除. 持久化(磁盘)5.缓存的数据都在内存中,如果一直存储数据则必然导致内存溢出. 内存优化LRU算法/LF

2020-10-07 19:27:20 131

原创 主从 分库 MySQL

数据库热备份说明: 可以实现数据库实时的备份,保证数据尽可能不丢失.备份原理:数据库备份原理:1.当数据库主库执行更新操作时,会将更新的内容写入到二进制日志文件中. 并且写入二进制文件的过程是一个异步的过程.2.从库会开启IO线程去读取主库的二进制日志文件,之后写入中继(临时存储)日志中.3.从库会开启SQL线程去读取中继日志中的信息.之后将数据同步到从库中.上述的操作是由从库向主库获取数据, 所以从库理论上可以配置无数个(一般2-3台即可);安装从库mysql根据安装主库的顺序安装从库

2020-10-05 21:47:54 358 1

原创 使用Linux虚拟机遇到的问题

修改虚拟机的固定IP打开虚拟机–然后输入 vi /etc/sysconfig/network-scripts/ifcfg-ens33命令。修改网卡配置文件按 i 键进行编辑。修改入下,原有的配置不要删,只要按下面修改就好。没有的配置项新增上去就好打开以后可以看到默认的配置就是dhcp,然后onboot=no,表示不会随着系统的启动而启动。我们需要修改这个配置然后在下面创建两个值ip和子网掩码加在上图任何位置就ok了IPADDR=192.168.0.116(填你的ip)

2020-10-05 21:13:09 502

空空如也

空空如也

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

TA关注的人

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