- 博客(54)
- 资源 (5)
- 收藏
- 关注
原创 Mysql为什么要使用索引,一般索引结构是什么样的?
1、Mysql引擎InnoDb下,使用索引能快速定位到数据。索引分类:主索引(一级索引,聚簇索引),二级索引(非主键索引)注:聚簇索引的特点是该列数据具有唯一性的,并不一定聚簇索引就一定是主键索引,但主键索引一定是聚簇索引。2、Mysql的索引数据结构是B+树为什么是B+tree呢,而不是单链表,或者是Btree这是B+tree的性质决定的。链表显然有致命的缺点:千万数据的索引,如果用链表作为索引,最差情况需要千万次IO,因为数据只有读到内存中才能比较是否拿到需要的数据。链表一个节点
2021-03-21 10:52:24
2783
原创 Mysql MVCC多并发版本控制
mysql mvcc理解1.mysql事务隔离级别1.1).读未提交 | read uncommitted : 读取尚未提交的数据 :就是脏读1.2).读已提交 | read committed:读取已经提交的数据 :可以解决脏读,存在重复读,幻读问题(RC)1.3).不可重复度 | repeatable read:重读读取:可以解决脏读 和 不可重复读 ,存在幻读问题(RR,mysql默认隔离级别)1.4).serializable:串行化:可以解决 脏读 不可重复读 和 幻读---相当于锁表(
2021-03-03 14:10:25
185
原创 java高级面试总结
面试总结### **Java基础** 1.Java序列化,怎么让一个字段不参与序列化,序列化serialVersionUID有什么用Redis1.速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)2.序列化两种:RDB,AOF3.怎么防止redis击穿4.redis的优势是什么5.redis有什么需要注意的地方,master不要备份,主从最好在局域网中,slave做备份6.Redis Sentinel着眼于高可用,在master宕机
2021-03-02 11:45:16
187
1
原创 HashMap结构
HashMap结构及版本区别1、HashMap:继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。是散列分布存储的,通过key/value结构实现。其中key和value都可以是null,是无序的。2、HashMap的结构2.1、jdk1.7采用数组+ 单链表的数据结构hashMap 在1.7的结构hash表是一个数组,根据索引将条目存入hash表中,如果出现hash索引相同的时候,将会以链表的形式在同一个索引处储.
2020-12-15 17:43:29
2444
原创 hashmap死锁的产生
都说hashmap是线程不安全的,多线程时候容易造成死锁死锁的原因就在扩容的时候原hashmap结构图假如如下,A、B是hashmap其中两个Entry,在扩容之前具有相同的index,形成链表结构,如图1、线程一运行到Entry A, B = A.next,运行完这行后。线程一进入线程等待(此时链表关系A.next = B)2、线程二正常运行,顺利完成扩容,在偶尔情况下恰好扩容之后A、B,在newTable中还是拥有相同的index,但此时由于经过了一次扩容,由于扩容过程也是.
2020-12-15 17:39:38
1089
原创 hashMap1.7头插法及扩容
hashmap头插法是在jdk1.7之前版本中存在的。1、什么是头插法hashmap结构内部table表,当不同的元素hash相等的时候,在改位置table[i]形成链表,相同位置后来者插入到链表表头的位置 public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key == null)
2020-12-15 15:16:05
2793
5
原创 为什么hashmap的容量必须是2的n次幂
要明白为什么是2的n次幂,这要从hashmap的hashCode方式说起,hashmap的容量期望就是用来均匀散列存放map中的元素。hashmap根据hash值把元素放到hashmap内部数组的一个位置上。1、为什么hashmap的容量必须是2的n次幂??我们不妨先看看hashCode的原理,以String为列,获取hashCode的方法源码 public int hashCode() { int h = hash; if (h == 0 &...
2020-11-18 18:31:06
3221
1
原创 mysql 数据库索引b+树深度问题
常见面试题:mysql数据库一颗b+数据深度大概是多少?这要从b+树的结构和数据库索引大小去分析问题,索引字段占内存大小,指针占内存大小(6字节 6Byte,或者6B)1、先看看b+树结构下面看一颗树第一行中,1,320为索引数据排序后的数据范围,1-30,320-32 对应的是页指针,指向下一页* b+树非叶子节点存放的都是key+nest指针。叶子节点存放数据*在mysql索引b+树中,非叶子节点键值数=子节点数2、计算在mysql索引中索引页默认大小16kS.
2020-11-05 16:36:00
4150
1
原创 spring cloud feign 熔断hystrix
熔断是为了避免雪崩现象。eureka-server和eureka-provider就不在赘述。consumer项目pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.a.
2020-09-24 11:56:22
2229
原创 springcloud + ribbon重试策略
1、本例采用spring cloud feign + eureka 实现2、feign底层其实用的ribbon实现负载均衡3、代码分析provider1代码如下:@Slf4j@RestControllerpublic class TestController { @GetMapping("/hello") public Object hello() throws InterruptedException { log.info("service prov
2020-09-18 18:28:54
1591
原创 spring cloud之ribbon负载均衡,eureka分布式服务注册
目录一、目标二、组成成员三、示例一、目标学会使用spring cloud ribbon进行服务负载调度,所有微服务由eureka发现注册服务。二、组成成员整个模块可以分化为3个部分:server管理中心(eureka-server),微服务群(eureka-provider),调用发起端(consumer)eureka-server:提供服务注册和发现 eureka-provider:服务提供方将自身服务注册到Eureka,从而使服务消费方能够找到(向注册中心服务注册.
2020-09-17 17:48:35
624
1
原创 vue element-ui el-form表单验证表单验证,数值输入验证踩坑
1、官网介绍表单验证使用https://element.faas.ele.me/#/zh-CN/component/form#biao-dan-yan-zheng2、所遇到的问题,当字段是数字类型的时候,输入input后,验证不通过原因是el-input默认值的类型是字符串类型输入即使是数字,也被el-input 自己处理成了字符换数字。3、解决办法<el-form-item class="base_block" label="渠道号" prop="channelId" l
2020-07-31 16:06:56
4008
原创 vue刷新浏览器后,存在全局getters的数据丢失
问题:vue项目登陆后,将用户相关信息存在getters中,然后在项目中取getters中的username显示在右上角。登陆进入后,显示没问题浏览器直接刷新后:先记录问题,解决后更新
2020-07-24 11:15:34
1651
原创 vue 启动报错,但是没有错误信息 Failed to compile with 1 errors
vue webpack2.0 有报错但是没有错误提示完全看不到错误信息,懵逼昨天还运行好好的项目,今天一来启动搞这搜了下码友们遇到类似的问题;npm run build打印出详细信息:意思就是找不到:/workspace/wp_202002/myroject_name/index.vue.html联想到我刚把其中一个module的index.vue删掉了,然后idea给我提示啥玩意,没看完就手一哆嗦点了确定。事实上,这一哆嗦修改了基础配置文件webpack..
2020-07-24 11:08:15
15531
4
原创 怎样理解快速排序
一.原理快速排序:干说原理先从数组中选出一个值,作为权重temp,然后从数组最右边high(其中一边都行)开始,向左边遍历(记最左边为low) 如果arr[high]比temp大,那么不管,high继续向左移动 如果arr[high]比temp小,那么此时 arr[low] = arr[high] 当找到第一个赋值的地方的时候,不在继续high--;这个时候从左边开始 如果arr...
2019-12-28 16:19:48
229
原创 怎样理解插入排序
插入排序,把数组从第一个元素开始,每往后一个,将后一个元素插入到前面,使得前面的是序的.给定无序数组如下:把数组的首元素5作为有序区,此时有序区只有这一个元素:第一轮让元素8和有序区的元素依次比较。8>5,所以元素8和元素5无需交换。此时有序区的元素增加到两个:第二轮让元素6和有序区的元素依次比较。6<8,所以把元素6和元素8进行交换:...
2019-12-28 10:09:09
179
原创 怎样理解选择排序
为什么叫选择排序:就是先选择出最小的放前边(最大放后边)选择排序,和冒泡排序一样,还是双层循环用内层for选择出最小,然后把最小交换到最前,只需要交换一次.原数组:[5, 8, 6, 3, 9, 2, 1, 7]第0轮[] - [5,8,6,3,9,2,1,7]剩余最小数array[6]=1.交换5和1第1轮[1] - [8,6,3,9,2,5,7]剩余最小数array[5]=2....
2019-12-27 17:02:51
212
原创 怎样理解冒泡排序
一.什么是冒泡排序1.不断比较两个相邻元素,将大的往后或者往前排,就像水里的泡泡一样,越往后越接近水面泡泡体积越大,由此得名.用图来说明:冒泡排序2.用java代码实现冒泡排序 // ============================= 第0版 开始 ====================== @Test public void sort01...
2019-12-27 13:14:40
376
原创 延迟调度实现
很多时候我们想把事件在某些事件之后执行如:提交失败的数据每隔一些时间段执行一次(1min,30min,2h)如:订单下单没有付款,第1天,第3天发短信提示一、这就需要延迟调度实现,本文介绍两种方式1、使用消息中间件rabbitmq延迟死信队列实现rabbitmq方式类图展示rabbitmqpackage cn.quantgroup.cashloanflow.confi...
2019-12-24 14:59:53
648
1
原创 认识rabbitmq死信队列
rabbitmq死信队列:当消息在队列中过期,消息就会被投放到是死信Exchangedemo地址:https://github.com/foxiaotao/springboot-rabbitmq-demo1、消息的过期分为两种:一种方式是设置队列的TTL,该队列中所有的消息的过期时间都一样,当消息过期后,消息跟根据Queue设置的死信Exchang 和routingkey路由到某个队列...
2019-12-24 14:33:15
181
1
原创 rabbitmq学习及简单运用
前言本文结合springboot学习rabbitmq(springboot版本2.2.2)demo地址:https://github.com/foxiaotao/springboot-rabbitmq-demorabbitmq就是生产者把消息放到Exchange,Exchange根据规则把消息路由到Queue,消费者从Queue消费消息。一、RabbitMq 构成1、Exc...
2019-12-20 19:48:19
395
原创 spring的BeanUtils属性copy
1、使用BeanUtils.copyProperties将一个对象的属性copy到另外一个对象中。2、copy的原理是获取需要copy属性的属性描述器(PropertyDescriptor),获取目标属性的PropertyDescriptor,并获取writeMethod,获取源属性的readMethod,将readMethod得到的结果(Object)写入到writeMethod中,所...
2019-12-02 18:04:17
3846
原创 idea 常用快捷键
Ctrl+Alt+L格式化代码shift + f6 重命名ctrl + d 复制行ctrl + shift + 上移动行ctrl + / 注释一行(ctrl + shift + / 注释多行)ctrl + enter 补全代码ctrl + g 到第几行ctrl + z 撤销 (ctrl + shift + z 取消撤销)ctrl + 鼠标,多行编辑ctrl ...
2019-11-18 16:59:32
183
原创 fastjson
jar: <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.42</version> &l...
2019-11-16 11:36:52
135
原创 jackson
Spring Boot 内置Jackson ,所以spring boot 默认json解析为jacksonjar: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifact...
2019-11-16 11:35:58
175
原创 Gson
主要介绍Gson用法<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.0</version></dependency>json...
2019-11-16 11:35:07
275
原创 enum枚举类valueOf("name")当name不存在的时会抛出参数异常
1、通过枚举类名获取枚举类KANoticeType kaNoticeType = KANoticeType.valueOf("ss"); System.out.println(kaNoticeType == null);valueOf("name")当name不存在的时候,会抛出参数异常,并不会得到 kaNoticeType == null 的结果;异常:java.l...
2019-11-16 11:22:14
4582
原创 intellij idea 内容正则替换,看似很简单的东西,其实骚操作还是有很多的
替换快捷键ctrl+ridea 正则替换1、替换demo原:private String period_nos;目标@SerializedName("period_nos")private String period_nos;使用替换Ctrl + r替换正则private (.*) (.*);@SerializedName("$2")\npriva...
2019-11-13 16:26:09
567
1
原创 try、catch、finally用法总结
try、catch、finally用法总结: 1、不管有没有异常,finally中的代码都会执行 2、当try、catch中有return时,finally中的代码依然会继续执行 3、finally是在return后面的表达式运算之后执行的,此时并没有返回运算之后的值,而是把值保存起来,不管finally对该值做任何的改变,返回的值都不会改变,依然返回保存起来的值。也就是说方法的...
2019-11-07 19:33:08
212
原创 一个账号某一时刻只能在一处登陆
一个账号禁止多人使用,如果前一个人登陆了账号A,那么另一个人用账号A登陆将会把前一个人挤掉下线。废话多说,上菜1.定义一个全局线程安全变量 存放用户最后登陆时间2.用户登陆时,将用户登陆时间loginTime存在map中(可以用ConcurrentHashMap)key为用户id,value为用户最后登陆时间。3.登陆过程中,获取session,在session中存放用户登陆时间...
2019-11-01 11:57:09
312
原创 spring boot elastic job 整合-定时任务
一、采用当当网elastic job,实现spingboot启动注入定时任务,任务配置在数据库,可以动态加载任务配置。上干货引入jar <properties> <elastic-job.version>2.1.5</elastic-job.version> </properties> &...
2018-07-13 17:35:08
1232
原创 小白的我告诉你本地项目如何上传到github
1、进入项目所在的文件夹cd /Users/simon/Documents/workspace/wp_201804/elastic-job-springboot-starter执行:git init把这个文件夹变成Git可管理的仓库结果:Initialized empty Git repository in /Users/simon/Documents/workspace/wp_201804/el...
2018-07-13 11:03:33
227
原创 redis搭建集群mac环境,Redis版本4.0.6
1、下载最新redishttps://redis.io2、下载之后文件redis-4.0.6.tar.gz解压,得到3、安装进入到该目录make命令安装安装成功会在当前目录下,src目录下 生成redis-server命令文件4、进入utils文件夹/usr/local/redis-cluster/redis01/utils/create-clu
2017-12-07 16:14:46
293
原创 springMVC获取项目真实路径
1、原生httpservletrequest例如访问地址是:http://localhost:8080/testrequest.getContextPath(); 获取到工程名称: /testrequest.getServletContext().getRealPath("/"); 获取到实际路径例如:E:\Java\tomcat7\apache-tom
2017-03-08 17:19:21
10208
原创 Gson、fastJson、jackJson基本应用
主要介绍Gson,jackJson,fastJson等用法一、gsonhttps://blog.youkuaiyun.com/styhm/article/details/103096774二、fastJsonhttps://blog.youkuaiyun.com/styhm/article/details/103096806三、jackJsonhttps://blog.youkuaiyun.com/styh...
2017-03-08 15:27:34
4014
原创 java制造死锁
package suo;public class DeadLockTest implements Runnable{ private int flag; static Object o1 = new Object(), o2 = new Object(); //静态的对象,被DeadLockTest的所有实例对象所公用 public void run(){ Syst
2017-03-03 10:05:19
638
原创 js模拟form表单提交
var items = this.searchForm.getForm().items.items; var dataParam = this.getDailyDataParam(items); var tempform = document.createElement("form"); tempform.action = this.ctx + '/
2017-03-02 17:32:32
2449
原创 spring 启动打印所有beans
1.自定义类实现BeanPostProcessor接口import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;public class InstantiationTracingBeanPostProcessor imp
2017-01-06 14:55:45
3003
原创 git 开发注意问题和冲突解决办法
1、分支切换,一般需要将当前分支全部提交。如不提交,考虑当前分支未提交部分是否需要merge到目标分支,如果需要,直接切换,如果不要先提交或者暂存。git checkout [branch-name] 如果[branch-name] 远程分支有,本地分支没有,则新建本地[branch-name] 分支,并跟踪至远程[branch-name] 分支;若本地[branch-name] 存在,则
2016-12-29 18:39:06
2705
原创 git常用命令, 使用sourceTree协助开发
git clone url 克隆远程分支项目到本地git branch -r 查看所有远程分支git branch -a 查看所有本地、远程分支git branch [new-branch-name] 创建本地新分支,依然停在当前分支git checkout [branch-name] 切换到指定分支,并更新工作区git branch -b 删除分支git merge
2016-12-29 17:54:40
828
springmvc+spring4.1.5+mybatis+maven空项目
2017-01-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人