- 博客(42)
- 收藏
- 关注
原创 关于ES中Function_Score在自定义打分中的应用
应用背景现在有许多商品需要在商品列表中进行排序展示,排序要求使用ES并且尽量一次性查出来,有要求如下:重点商品,收藏商品,优质商品,普通商品的顺序展出在同一类商品发生冲突时,按照自主产品,非自主产品进行展出(是否自主产品是一个集合,只有集合里面有7才属于自主产品,没有7则属于非自主产品)如果继续发生冲突 按照商品录入时间展出最后用id来进行兜底优质商品首先根据商品的等级来排序,然后才走第二行ES中使用到的字。id (商品的序列号),create_time(创建商品时间) ,one_h
2022-01-07 17:03:02
2976
3
原创 值传递与引用传递区别
(1)在Java里面,当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响,就是值传递。(2)在Java里面,当调用方法时,如果传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响,就是引用传递。...
2021-11-04 15:25:16
372
原创 Redis保证高可用的两种方式
redis保证高可用有两种方式1、主从复制2、哨兵机制主从复制旧版本采用全量复制,其最大的问题是从服务器断线重连时,即便在从服务器上已经有一部分数据了,也需要进行全量复制,这样做的效率很低。全量复制使用snyc命令来实现,其流程是:从服务器向主服务器发送sync命令。主服务器在收到sync命令之后,调用bgsave命令生成最新的rdb文件,将这个文件同步给从服务器,这样从服务器载入这个rdb文件之后,状态就会和主服务器执行bgsave命令时候的一致。主服务器将保存在命令缓冲区中的写命令同步
2021-11-02 17:53:41
776
原创 线程、进程、协程
虚拟内存是操作系统为每个进程提供的一种抽象,实际上是不存在的,程序运行的时候需要加载到物理内存,而物理内存和虚拟内存之间有一个映射关系,整个映射关系存在页表上面,一个进程中的所有线程是共享该进程的虚拟空间地址的。线程线程是cpu调度的基本单位,线程切换的时候需要用户态到内核态的转换,整个过程中使用到了虚拟内存,线程切换的时候只需要将线程的上下文切换,就是替换线程放在寄存器里面的相关数据。进程进程是资源分配的基本单位。进程切换实际上就是把进程存放在处理器的寄存器中的中间数据找个地方存起来,从而把处理器
2021-10-24 15:08:12
79
原创 关系型数据库与非关系型数据库
关系型数据库1.存储方式:采用表格进行储存,数据以行和列的方式进行存储,读取和查询十分方便2.存储结构:结构化的方法存储数据,数据表必须定义好各个字段,再根据表的结构存入数据。a.优点:数据的形式和内容在存入数据之前就已经定义好了,所以整个数据表的可靠性和稳定性都比较高。b.缺点:一旦存入数据后修改表的结构会很困难3.存储规范:关系型数据库为了避免重复,规范化数据以及充分利用好存储空间,把数据按照最小关系表的形式进行存储,这样数据管理就可以变得很清晰,一目了然,当然这是一张表的情况。多张
2021-10-21 21:37:08
301
原创 HashMap的get、put、resize过程
get1、先计算出key对应的hash值2、对超出数组范围的hash值进行处理3、根据正确的hash值(下标值)找到所在的链表的头结点4、遍历链表,如果key值相等,返回对应的value值,否则返回nullput1、先计算出key对应的hash值2、对超出数组范围的hash值进行处理3、根据正确的hash值(下标值)找到所在的链表的头结点4、如果头结点==null,直接将新结点赋值给数组的该位置5、否则,遍历链表,找到key相等的节点,并进行value值的替换,返回旧的value值6
2021-10-20 18:39:31
487
原创 mysql当前读与快照读
快照读读取的是记录数据的可见版本(可能是过期的数据),不用加锁当前读读取的是记录数据的最新版本,并且当前读返回的记录都会加上锁,保证其他事务不会再并发的修改这条记录
2021-10-19 21:29:10
84
原创 线程池状态
1.RUNNING:接受新的任务,处理等待队列中的任务。2.SHUTDOWN:不接受新的任务提交,但是会继续处理等待队列中的任务。调用线程池的shutdown()方法时,线程池由RUNNING -> SHUTDOWN。3.STOP:不接受新的任务提交,不再处理等待队列中的任务,中断正在执行任务的线程。调用线程池的shutdownNow()方法时,线程池由(RUNNING or SHUTDOWN ) -> STOP。4.TIDYING:所有的任务都销毁了,workCount 为 0,线程池的
2021-10-14 21:19:15
158
原创 spring理解
Spring首先是一个框架,在我们整个开发流程中所有的框架生产几乎都依赖Spring,Spring帮我们起到一个Ioc容器的作用,用来承载我们整体的Bean对象,他帮我们进行了整个对象从创建到销毁整个生命周期的管理,我们在使用Spring的时候,可以使用配置文件和注解的方式来进行相关实现,但是当我们程序开始启动后,我要把注解或者相关文件配置好的bean对象转换成BeanDefinition,然后完成整个BeanDefinition的解析和加载过程,当我获取到这些完整对象后,下一步把BeanDefiniton
2021-10-08 16:37:40
62
原创 java对象建立过程(new)
1.当虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析、初始化过,如果没有,必须执行相对应的类加载过程(我的上篇文章提到过java类加载机制 )。2.类加载检查通过以后,接下来虚拟机为新生对象分配内存,分配内存有两种方法 1. 如果内存是整块的,使用指针碰撞法,2. 内存碎片多的话,使用空闲列表法,在指针碰撞法中,由于创建对象时时刻刻在发生,就会遇到线程安全问题,有两种可选方案 1. 采用CAS加上失败
2021-10-05 15:39:57
479
原创 java类加载机制(硬核)
类加载机制分为加载,链接(验证,准备,解析),初始化,使用,卸载加载 1. 通过一个类的全限定名来获取定义此类的二进制字节流。 2. 将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构。 3. 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据访问入口。验证 1.文件格式验证。 2.元数据验证。 3.字节码验证。 4.符号引用验证。准备 1.解析初始化...
2021-10-04 22:10:33
110
原创 SpringBean的生命周期
1、首先Spring是在ioc中创建一个实例;2、然后将属性填装到实例中;3、如果实例实现了beannameAware接口,会调用它实现的setBeanName(String)方法,此处传递的就是Spring配置文件中Bean的id值。4、如果实例实现了beanFactoryAware接口,会调用它实现的setBeanFactory(setBeanFactory(BeanFactory)传递的是Spring工厂自身;5、如果实例已经实现了ApplicationContextAware接口,会调用se
2021-10-02 21:55:26
68
原创 Spring和springMVC启动流程
首先Spring是建立在Servlet容器之上的,所有web工程的初始位置都是在web.xml文件中,它配置了servlet的上下文(context)和监听器(listener)。spring的启动过程其实就是ioc的启动过程,1、首先初始化上下文,通过web.xml文件中的context-param,然后通过linstenner来加载配置文件,其中调用spring包中的contextLoaderListenner这个上下文监听器。contextLoaderListenner是一个实现ServletCo
2021-10-02 18:28:15
747
原创 SpringBoot自动配置分析
SpringBoot主要精髓就是约定大于配置SpringBoot启动类中有一个@SpringBootApplication。这个注解是个复合注解,@SpringBootConfiguration其实是个就是表明这个类是个配置类而已,@EnableAutoConfiguration从名字就可以看出来,就是这个类开启自动配置的。嗯,自动配置的奥秘全都在这个注解里面。@AutoConfigurationPackage 。里面有一个Registrar.class bean 。在这个地方打个断点运行
2021-10-02 15:29:20
105
原创 reentrantlock与synch区别优点
1,reentrantlock首先在锁的粒度方面来看,比synch的锁粒度更小,在性能方面在jdk优化以前性能远远不如jdk,在通过借鉴reentrantlock的自旋锁以后,防止操作系统多次从用户态到内核态的转换,浪费系统资源,使的synch性能提高,2, synch是关键字,在jvm运行肯定比reentrantlock这个api锁更加优势3, synch可以主动放弃锁,reentrantlock不可以主动放弃自己的锁,这样可以很大程度上避免死锁,每次都得在finnaly里面unlock锁4,synch
2021-10-02 03:33:41
361
原创 mvcc匹配规则
1.当前快照读读出的事务id<readview中的最小值,则可见,反之不可见2.事务id>readview中的最大值+1,则可见3.在现在活跃事务中不存在,则可见,反之不可见不可见的情况下,需要在undo.log日志中找到前一个版本并且再次执行匹配规则,直到成功可见...
2021-09-14 20:24:28
134
原创 CyclicBarrier 使用详解
1、CyclicBarrier 是什么?从字面上的意思可以知道,这个类的中文意思是“循环栅栏”。大概的意思就是一个可循环利用的屏障。它的作用就是会让所有线程都等待完成后才会继续下一步行动。举个例子,就像生活中我们会约朋友们到某个餐厅一起吃饭,有些朋友可能会早到,有些朋友可能会晚到,但是这个餐厅规定必须等到所有人到齐之后才会让我们进去。这里的朋友们就是各个线程,餐厅就是 CyclicBarrier。2、怎么使用CyclicBarrier2.1构造方法public CyclicBarrier(int
2021-06-05 13:55:57
98
原创 InnoDB与MyISAM的区别
MYISAM:全表锁,拥有较高的执行速度,不支持事务,不支持外键,并发性能差,占用空间相对较小,对事务完整性没有要求,以select、insert为主的应用基本上可以使用这引擎Innodb:行级锁,提供了具有提交、回滚和崩溃回复能力的事务安全,支持自动增长列,支持外键约束,并发能力强,占用空间是MYISAM的2.5倍,处理效率相对会差一些Memory:全表锁,存储在内容中,速度快,但会占用和数据量成正比的内存空间且数据在mysql重启时会丢失,默认使用HASH索引,检索效率非常高,但不适用于精确查找,主
2021-05-19 16:58:21
80
原创 子父类加载顺序
1、首先加载的是父类静态变量,加载父类的静态代码块(一个类中多个静态代码块,按顺序加载)2、加载子类静态变量,加载子类的静态代码块(一个类中多个静态代码块,按顺序加载)3、加载父类非静态代码块4、默认加载父类的无参构造(没有无参构造的话,需要在子类的构造方法第一行写super(参数))5、加载子类的构造方法,6、如果子类没有覆盖父类的方法,执行的时候是执行的是父类的方法package text4;/** * 子类加载父类时候 * @author z2424 */public clas
2021-05-18 18:57:15
1900
原创 gc垃圾回收四种方法
标记清除算法标记清除(Mark-Sweep)算法,包含“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。标记清除算法是最基础的收集算法,后续的收集算法都是基于该思路并对其缺点进行改进而得到的。复制算法标记整理算法分代收集算法...
2021-05-12 17:13:05
1686
原创 integer对比==与equals区别
对于==与equals区别在于在于对象和值两者之间都会比较,而equals只是值得比较,大部分数据情况下最好用equlasinteger的取值范围在-128~127之间的,在这之间的值在integerCache.cache中产生无论出现多少都会复用已有的对象,而超出的值则会在堆中产生,并不会复用以前的对象,这是一个超级超级大的坑,上实例演示:...
2021-05-11 16:23:45
1077
原创 java线程池:3大方法、7大参数、4种拒绝策略
3大方法、7大参数、4种拒绝策略池化技术线程池好处==三大方法====7大参数====4种拒绝策略==池化技术程序的运行,本质:占用系统的资源! (优化资源的使用 => 池化技术)线程池、连接池、内存池、对象池///… 创建、销毁。十分浪费资源池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我。线程池好处1、降低系统资源的消耗2、提高响应的速度3、方便管理4、线程复用、可以控制最大并发数、管理线程三大方法import java.util.concurrent.E
2021-05-08 16:33:27
148
原创 .for 与.fori区别
for…in 语句用于对数组或者对象的属性进行循环操作。语法:for (变量 in 对象){ 在此执行代码}在这个for …in… 最大问题是不能赋值for循环是对数组的元素进行循环,而不能引用于非数组对象。语法:for(int 变量初始值;条件;递增或递减){ 在此执行代码}在这个for 这个是可以赋值的...
2021-04-07 19:20:01
3324
原创 软件设计七大原则
一、开闭原则定义:一个软件实体如类、模块函数应该对扩展开放,对修改关闭。是其他原则的基础或者说是总宗旨,其他原则可以说是此原则的一个延伸。说人话:不修改现有代码的基础上,去新增功能二、依赖倒置原则定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象。抽象不应该依赖细节;细节应该依赖抽象。说人话调用者:我只管用哪个接口,至于具体实现我不管实现者:我只管实现哪个接口,至于谁调用,我不管三、单一职责原则定义:不要存在多于一个导致类变更的原因。说人话:我只能做一件事,别的事情您另外找人。一个类(一
2021-03-23 09:13:16
137
原创 redis 分布式锁setnx的缺陷与替代方案
在分布式锁的时候应为setnx与锁超时不是原子操作,可能在加锁时候断开,没有加上过期时间,就会导致死锁,别人拿不到数据。这时候会用set来代替setnx与锁超时set zhangke chicken EX 30 NXkey: zhangke value: chicken EX 30: 过期时间30秒 NX:存在就不建立,不存在则建立用这中方式可以避免原子性问题!点赞哦!...
2021-03-07 15:38:52
2175
原创 Unrecognized token ‘code’: was expecting 解决方案
当redis在Java中使用的时候,碰到序列化的Jackson2JsonRedisSerializer的时候,从redis中取字符串值,一直报错取不出来,但是数字可以取出来,问题就出在了序列化后存储的规范。(错误:Unrecognized token ‘code’: was expecting (JSON String, Number, Array, Object,‘true’, ‘false’ or ‘null’) )通过序列化存到redis中的样子普通的样子可以看到是有区别的,所以取值错误,只
2021-03-05 23:17:49
13556
原创 redis详解
Redis优势速度快:读写性能达到10万/秒所有数据存放在内存 使用C语言实现,距离操作系统更近 单线程架构,避免多线程产生的竞争问题,以及多线程切换性能问题支持多种数据结构支持字符串、哈希、列表、集合、有序集合,并演变出了Bitmaps、HyperLogLog、GEO结构功能丰富提供了键过期功能,可以用来实现缓存 提供了发布订阅功能,可以用来实现消息系统 支持Lua脚本功能,可以利用Lua创造出新的Redis命令 提供了简单的事务功能,能在一定程度上保证事务特性 提供了流水线(Pipeline
2021-03-04 16:14:28
261
3
原创 spring-cloud-config学习(spring boot 2.4.2 spring cloud 2020.1 )
好长时间没有更新了,最近学习了springcloud,学习的头都大了,碰到了springcloud-config,真的是一个bug改一天啊!首先是有个远程仓库,我用的是giteeconfig是集中式的配置管理,更加方便管理配置,不用每次改配置要打开自己的源代码,采用的是cs架构,就必须有server和client,server作为中间配件,为client与gitee进行配置交流1、server整体的文件夹先导入依赖 <dependency> <group
2021-02-17 16:46:20
309
1
原创 项目开发中的一些小配置,随时更新(springboot版本)
这里是目录哦!1、appication.properties2、log4j.properties3、MySwaggerConfig.java4、MybatisplusConfig.java1、appication.propertiesspring.thymeleaf.cache=falsespring.datasource.username=rootspring.datasource.password=z1314520spring.datasource.url=jdbc:mysql://loca
2021-01-29 16:53:02
133
原创 mybatisplus代码自动生成器
1、引入依赖 <dependency> <groupId>com.alibaba</groupId>//我用的是这个数据源根据自己添加 <artifactId>druid</artifactId> <version>1.2.4</version> </dependency> <dependency&
2021-01-29 16:44:54
159
原创 springboot定时任务
1、配置在主函数加@EnableScheduling//定时任务package com.biubiu;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.scheduling.annotation.EnableScheduling;@SpringBootAp
2021-01-27 14:53:54
92
原创 springboot邮件发送
1、直接添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>2、打开pop3/smtp服务和配置文件中一样3、测试类package com.biubiu;
2021-01-27 14:03:18
435
5
原创 Swagger整体整理一下蛤
最近在学习springboot时候发现好多开源的项目里面都提到了swagger,原来是一个前后端分离开发过程中为了防止两只团队为了需求更改打架,毕竟前端需要加一个参数,后端就要改好多好多,多的不说,直接上货。1、导入依赖首先是导入依赖,既然咱是学习就一定要用最新的,才能体现一下咱的实力 <dependency> <groupId>io.springfox</groupId> <artifactId>spr
2021-01-26 17:20:08
114
原创 shiro重要配置
shiro重要配置UserRealm.javapackage com.biubiu.config;import com.biubiu.dao.Userdao;import com.biubiu.dao.Userdaoimp;import com.biubiu.dao.userr;import jdk.nashorn.internal.parser.Token;import org.apache.shiro.SecurityUtils;import org.apache.shiro.auth
2021-01-25 16:25:58
118
原创 shiro和thymealeaf整合
shiro和thymealeaf整合一、加入依赖 <dependency> <groupId>com.github.theborakompanioni</groupId> <artifactId>thymeleaf-extras-shiro</artifactId> <version>2.0.0</version> </dep
2021-01-25 16:18:48
141
原创 关于druid的一些设置(idea版本)
关于druid的一些设置(idea版本)1、首先是加入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.4</version> </dependency> 2、applo
2021-01-21 17:31:01
1038
原创 spring boot项目显示3行日志错误,内置tomcat不可使用
spring boot项目显示3行日志错误,内置tomcat不可使用首先这中错误是只显示三行第一种方法是没有用spring-boot-starter-web;在pom中将这个依赖放在第一个;第二种方法是继承ServletInitializer是Servlet初始化器,当本应用作为tomcat的一个webapp时,就调用configure函数,这是tomcat容器调用的,这时整个应用就相当于Servlet。 当作为SpringApplication运行时,会执行main函数,但是不会执行上面的con
2021-01-16 12:33:08
653
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人