笔记
迷茫的大学生
这个作者很懒,什么都没留下…
展开
-
Kafka结构
原创 2022-01-10 16:57:36 · 720 阅读 · 0 评论 -
关于ES中Function_Score在自定义打分中的应用
应用背景现在有许多商品需要在商品列表中进行排序展示,排序要求使用ES并且尽量一次性查出来,有要求如下:重点商品,收藏商品,优质商品,普通商品的顺序展出在同一类商品发生冲突时,按照自主产品,非自主产品进行展出(是否自主产品是一个集合,只有集合里面有7才属于自主产品,没有7则属于非自主产品)如果继续发生冲突 按照商品录入时间展出最后用id来进行兜底优质商品首先根据商品的等级来排序,然后才走第二行ES中使用到的字。id (商品的序列号),create_time(创建商品时间) ,one_h原创 2022-01-07 17:03:02 · 3058 阅读 · 3 评论 -
值传递与引用传递区别
(1)在Java里面,当调用方法时,如果传入的数值为基本数据类型(包含String类型),形式参数的改变对实际参数不影响,就是值传递。(2)在Java里面,当调用方法时,如果传入的数值为引用数据类型(String类型除外),形式参数的改变对实际参数有影响,就是引用传递。...原创 2021-11-04 15:25:16 · 403 阅读 · 0 评论 -
Redis保证高可用的两种方式
redis保证高可用有两种方式1、主从复制2、哨兵机制主从复制旧版本采用全量复制,其最大的问题是从服务器断线重连时,即便在从服务器上已经有一部分数据了,也需要进行全量复制,这样做的效率很低。全量复制使用snyc命令来实现,其流程是:从服务器向主服务器发送sync命令。主服务器在收到sync命令之后,调用bgsave命令生成最新的rdb文件,将这个文件同步给从服务器,这样从服务器载入这个rdb文件之后,状态就会和主服务器执行bgsave命令时候的一致。主服务器将保存在命令缓冲区中的写命令同步原创 2021-11-02 17:53:41 · 795 阅读 · 0 评论 -
线程、进程、协程
虚拟内存是操作系统为每个进程提供的一种抽象,实际上是不存在的,程序运行的时候需要加载到物理内存,而物理内存和虚拟内存之间有一个映射关系,整个映射关系存在页表上面,一个进程中的所有线程是共享该进程的虚拟空间地址的。线程线程是cpu调度的基本单位,线程切换的时候需要用户态到内核态的转换,整个过程中使用到了虚拟内存,线程切换的时候只需要将线程的上下文切换,就是替换线程放在寄存器里面的相关数据。进程进程是资源分配的基本单位。进程切换实际上就是把进程存放在处理器的寄存器中的中间数据找个地方存起来,从而把处理器原创 2021-10-24 15:08:12 · 102 阅读 · 0 评论 -
关系型数据库与非关系型数据库
关系型数据库1.存储方式:采用表格进行储存,数据以行和列的方式进行存储,读取和查询十分方便2.存储结构:结构化的方法存储数据,数据表必须定义好各个字段,再根据表的结构存入数据。a.优点:数据的形式和内容在存入数据之前就已经定义好了,所以整个数据表的可靠性和稳定性都比较高。b.缺点:一旦存入数据后修改表的结构会很困难3.存储规范:关系型数据库为了避免重复,规范化数据以及充分利用好存储空间,把数据按照最小关系表的形式进行存储,这样数据管理就可以变得很清晰,一目了然,当然这是一张表的情况。多张原创 2021-10-21 21:37:08 · 317 阅读 · 0 评论 -
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 · 515 阅读 · 0 评论 -
mysql架构
原创 2021-10-19 21:59:36 · 77 阅读 · 0 评论 -
mysql当前读与快照读
快照读读取的是记录数据的可见版本(可能是过期的数据),不用加锁当前读读取的是记录数据的最新版本,并且当前读返回的记录都会加上锁,保证其他事务不会再并发的修改这条记录原创 2021-10-19 21:29:10 · 108 阅读 · 0 评论 -
线程池状态
1.RUNNING:接受新的任务,处理等待队列中的任务。2.SHUTDOWN:不接受新的任务提交,但是会继续处理等待队列中的任务。调用线程池的shutdown()方法时,线程池由RUNNING -> SHUTDOWN。3.STOP:不接受新的任务提交,不再处理等待队列中的任务,中断正在执行任务的线程。调用线程池的shutdownNow()方法时,线程池由(RUNNING or SHUTDOWN ) -> STOP。4.TIDYING:所有的任务都销毁了,workCount 为 0,线程池的原创 2021-10-14 21:19:15 · 174 阅读 · 0 评论 -
java对象建立过程(new)
1.当虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析、初始化过,如果没有,必须执行相对应的类加载过程(我的上篇文章提到过java类加载机制 )。2.类加载检查通过以后,接下来虚拟机为新生对象分配内存,分配内存有两种方法 1. 如果内存是整块的,使用指针碰撞法,2. 内存碎片多的话,使用空闲列表法,在指针碰撞法中,由于创建对象时时刻刻在发生,就会遇到线程安全问题,有两种可选方案 1. 采用CAS加上失败原创 2021-10-05 15:39:57 · 511 阅读 · 0 评论 -
java类加载机制(硬核)
类加载机制分为加载,链接(验证,准备,解析),初始化,使用,卸载加载 1. 通过一个类的全限定名来获取定义此类的二进制字节流。 2. 将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构。 3. 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据访问入口。验证 1.文件格式验证。 2.元数据验证。 3.字节码验证。 4.符号引用验证。准备 1.解析初始化...原创 2021-10-04 22:10:33 · 129 阅读 · 0 评论 -
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 · 77 阅读 · 0 评论 -
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 · 762 阅读 · 0 评论 -
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 · 388 阅读 · 0 评论 -
AQS流程图
整个AQS加锁解锁过程原创 2021-09-30 13:54:51 · 222 阅读 · 0 评论 -
CyclicBarrier 使用详解
1、CyclicBarrier 是什么?从字面上的意思可以知道,这个类的中文意思是“循环栅栏”。大概的意思就是一个可循环利用的屏障。它的作用就是会让所有线程都等待完成后才会继续下一步行动。举个例子,就像生活中我们会约朋友们到某个餐厅一起吃饭,有些朋友可能会早到,有些朋友可能会晚到,但是这个餐厅规定必须等到所有人到齐之后才会让我们进去。这里的朋友们就是各个线程,餐厅就是 CyclicBarrier。2、怎么使用CyclicBarrier2.1构造方法public CyclicBarrier(int原创 2021-06-05 13:55:57 · 114 阅读 · 0 评论 -
InnoDB与MyISAM的区别
MYISAM:全表锁,拥有较高的执行速度,不支持事务,不支持外键,并发性能差,占用空间相对较小,对事务完整性没有要求,以select、insert为主的应用基本上可以使用这引擎Innodb:行级锁,提供了具有提交、回滚和崩溃回复能力的事务安全,支持自动增长列,支持外键约束,并发能力强,占用空间是MYISAM的2.5倍,处理效率相对会差一些Memory:全表锁,存储在内容中,速度快,但会占用和数据量成正比的内存空间且数据在mysql重启时会丢失,默认使用HASH索引,检索效率非常高,但不适用于精确查找,主原创 2021-05-19 16:58:21 · 95 阅读 · 0 评论 -
子父类加载顺序
1、首先加载的是父类静态变量,加载父类的静态代码块(一个类中多个静态代码块,按顺序加载)2、加载子类静态变量,加载子类的静态代码块(一个类中多个静态代码块,按顺序加载)3、加载父类非静态代码块4、默认加载父类的无参构造(没有无参构造的话,需要在子类的构造方法第一行写super(参数))5、加载子类的构造方法,6、如果子类没有覆盖父类的方法,执行的时候是执行的是父类的方法package text4;/** * 子类加载父类时候 * @author z2424 */public clas原创 2021-05-18 18:57:15 · 1932 阅读 · 0 评论 -
gc垃圾回收四种方法
标记清除算法标记清除(Mark-Sweep)算法,包含“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。标记清除算法是最基础的收集算法,后续的收集算法都是基于该思路并对其缺点进行改进而得到的。复制算法标记整理算法分代收集算法...原创 2021-05-12 17:13:05 · 1722 阅读 · 0 评论 -
integer对比==与equals区别
对于==与equals区别在于在于对象和值两者之间都会比较,而equals只是值得比较,大部分数据情况下最好用equlasinteger的取值范围在-128~127之间的,在这之间的值在integerCache.cache中产生无论出现多少都会复用已有的对象,而超出的值则会在堆中产生,并不会复用以前的对象,这是一个超级超级大的坑,上实例演示:...原创 2021-05-11 16:23:45 · 1119 阅读 · 0 评论 -
java线程池:3大方法、7大参数、4种拒绝策略
3大方法、7大参数、4种拒绝策略池化技术线程池好处==三大方法====7大参数====4种拒绝策略==池化技术程序的运行,本质:占用系统的资源! (优化资源的使用 => 池化技术)线程池、连接池、内存池、对象池///… 创建、销毁。十分浪费资源池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我。线程池好处1、降低系统资源的消耗2、提高响应的速度3、方便管理4、线程复用、可以控制最大并发数、管理线程三大方法import java.util.concurrent.E原创 2021-05-08 16:33:27 · 186 阅读 · 0 评论 -
.for 与.fori区别
for…in 语句用于对数组或者对象的属性进行循环操作。语法:for (变量 in 对象){ 在此执行代码}在这个for …in… 最大问题是不能赋值for循环是对数组的元素进行循环,而不能引用于非数组对象。语法:for(int 变量初始值;条件;递增或递减){ 在此执行代码}在这个for 这个是可以赋值的...原创 2021-04-07 19:20:01 · 3378 阅读 · 0 评论 -
软件设计七大原则
一、开闭原则定义:一个软件实体如类、模块函数应该对扩展开放,对修改关闭。是其他原则的基础或者说是总宗旨,其他原则可以说是此原则的一个延伸。说人话:不修改现有代码的基础上,去新增功能二、依赖倒置原则定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象。抽象不应该依赖细节;细节应该依赖抽象。说人话调用者:我只管用哪个接口,至于具体实现我不管实现者:我只管实现哪个接口,至于谁调用,我不管三、单一职责原则定义:不要存在多于一个导致类变更的原因。说人话:我只能做一件事,别的事情您另外找人。一个类(一原创 2021-03-23 09:13:16 · 150 阅读 · 0 评论