自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 做一个简单的查询接口,有什么考量

如果这个接口是放在一个后台管理系统使用的,那肯定需要分页操作,肯定就会有pageNumber,pageSize这种分页参数,可能会遇到查询缓慢的问题。那我们就可以分库分表,或者是用子查询优化啊,或者是用游标的思想等等。首先要考虑这个接口是在什么场景下使用的。因为在不同的地方查询,实现方式是不一样的,甚至优化策略也是不一样的。如果是多个操作符合,可以异步调用@async。如果是经常访问,可以存到缓存里面。如果是数据库接口,SQL优化。

2023-09-29 16:18:12 125

原创 SQL优化--update优化

当我们开启多个事务,在执行上述的SQL时,我们发现行锁升级为了表锁。导致该update语句的性能 大大降低。InnoDB的行锁是针对索引加的锁,不是针对记录加的锁 ,并且该索引不能失效,否则会从行锁 升级为表锁。当我们在执行删除的SQL语句时,会锁定id为1这一行的数据,然后事务提交之后,行锁释放。但是当我们在执行如下SQL时。

2023-09-16 19:33:42 156

原创 SQL优化--count优化

在之前的测试中,我们发现,如果数据量很大,在执行count操作时,是非常耗时的。MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个 数,效率很高;但是如果是带条件的count,MyISAM也慢。InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出 来,然后累积计数。

2023-09-16 19:29:46 397

原创 SQL优化--分页优化(limit)

通过测试我们会看到,越往后,分页查询效率越低,这就是分页查询的问题所在。因为,当在进行分页查询时,如果执行 limit 2000000,10 ,此时需要MySQL排序前2000010 记 录,仅仅返回 2000000 - 2000010 的记录,其他记录丢弃,查询排序的代价非常大。优化思路: 一般分页查询时,通过创建 覆盖索引 能够比较好地提高性能,可以通过覆盖索引加子查 询形式进行优化。在数据量比较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低。

2023-09-16 19:24:44 365

原创 SQL优化--分组优化(group by)

所以,在分组操作中,我们需要通过以下两点进行优化,以提升性能:A. 在分组操作时,可以通过索引来提高效率。B. 分组操作时,索引的使用也是满足最左前缀法则的。

2023-09-16 19:16:28 353

原创 SQL优化--排序优化(order by)

根据排序字段建立合适的索引,多字段排序时,也遵循最左前缀法则。尽量使用覆盖索引。多字段排序, 一个升序一个降序,此时需要注意联合索引在创建时的规则(ASC/DESC)。如果不可避免的出现filesort,大数据量排序时,可以适当增大排序缓冲区大小sort_buffer_size(默认256k)。如果排序超出了缓冲区就会在磁盘文件中进行排序,性能较低。

2023-09-16 18:42:08 244

原创 SQL优化--主键查询

在上一小节,我们提到,主键顺序插入的性能是要高于乱序插入的。这一小节,就来介绍一下具体的 原因,然后再分析一下主键又该如何设计。

2023-09-13 10:37:24 369

原创 SQL优化--插入数据

如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。

2023-09-12 21:14:09 276

原创 一亿条数据如何优化

根据业务场景回答,什么叫查询优化,有瓶颈才叫优化。首先在常规的数据设计中,就不应该让一张表存储一亿条数据你是主键查询慢还是条件查询慢,是分组聚合慢,还是深度分页慢,到底怎么慢,怎么影响业务了数据库查询优化是一个综合工程。再往细说,

2023-09-12 19:58:28 103

原创 JWT解决跨域问题详解

在前后端不分离时,我们利用前面讲过的Spring Security的各种知识点,就可以实现对项目的权限管控。但是在前后端分离时,尤其是在引入了Spring Security后的前后端分离时,我们从前端发来的请求,就会存在一些问题。这些问题就是跨域而导致的问题!跨域问题的产生,源自浏览器的一个同源策略。

2023-09-04 19:36:14 323

原创 业务中如何过滤敏感词

在我们访问网站的时候,如果发现我们发布的内容有色情暴力的东西等等,会屏蔽掉,这种行为就是过滤敏感词。从技术层面实现起来,其实比较简单,因为我们输入的内容就是一个大型的字符串,我们要调用某些api来判断这个字符串有没有敏感词,比如我们可以使用jdk自带的方法,比如String里面有个replace方法可以直接替换字符串。但是网站在运行过程中,敏感词可能比较多,有几十个,甚至上百个。

2023-08-09 16:44:20 120

原创 企业场景--技术场景

如果有了elk还需要命令来查询日志吗?其实没什么必要性,但是作为基本功我们任然需要掌握。

2023-08-05 23:49:55 123

原创 JVM面试题--实践

Java内存泄露的排查思路虚拟机栈,一般是递归产生的问题方法区,一般是动态加载的类太多了堆空间,大型对象一直存活那如果是服务器上部署的项目,无法部署,或者部署一段时间宕机了,又应该怎么办呢?如何排查呢1获取堆内存快照dump2VisualVM去分析dump文件3通过查看堆信息的情况,定位内存溢出问题CPU飙高排查方案与思路?1.使用top命令查看占用cpu的情况2.查看是哪一个进程占用cpu较高上图所示的进程为:409403.

2023-08-03 21:25:52 347 1

原创 JVM面试题--垃圾回收

JVM有哪些垃圾回收器?在jvm中,实现了多种垃圾收集器,包括:串行垃圾收集器并行垃圾收集器CMS(并发)垃圾收集器G1垃圾收集器Young Collection(年轻代垃圾回收)g1里面新生代的内存占比不是固定的,在5%到6%进行调整Young Collection + Concurrent Mark (年轻代垃圾回收+并发标记)因为存活对象少,性价比高,可以释放更多内存,所以会挑出回收价值比较高的老年代和eden区和幸存者区进行垃圾回收。

2023-08-03 12:06:47 281

原创 JVM面试题--类加载器

类加载子系统,当java源代码编译为class文件之后,由他将字节码装载到运行时数据区 BootStrap ClassLoader 启动类加载器或者叫做引导类加载器,是用c++实现的,嵌套在jvm内部,主要是用来加载java的核心库的ExtClassLoader拓展类加载器,主要是加载jdk安装目录下,jre下的lib下的ext,也就是拓展目录,加载其中的jar包,如果用户把自己的文件也放到当前目录下,也会自动使用加载器来加载这些类AppClassLoader应用类加载器,负责加载的是环境变量,同时他也是默

2023-08-01 23:23:06 204

原创 JVM面试题--JVM组成

什么是虚拟机栈垃圾回收是否涉及栈内存?垃圾回收主要指就是堆内存,当栈帧弹栈以后,内存就会释放栈内存分配越大越好吗?未必,默认的栈内存通常为1024k栈帧过大会导致线程数变少,例如,机器总内存为512m,目前能活动的线程数则为512个,如果把栈内存改为2048k,那么能活动的栈帧就会减半方法内的局部变量是否线程安全?如果方法内局部变量没有逃离方法的作用范围,它是线程安全的如果是局部变量引用了对象,并逃离方法的作用范围,需要考虑线程安全什么时候会出现栈内存溢出?

2023-08-01 18:37:28 438

原创 多线程面试题--使用场景

在使用的时候,首先会给一个初始值,比如图中是3,然后在其他线程中调用countdown()方法,当count=0则继续执行。线程池使用场景(CountDownLatch、Future)线程池使用场景(CountDownLatch、Future)在我们项目上线之前,我们需要把数据库中的数据一次性的同步到。异常),当时我就想到可以使用线程池的方式导入,利用。来控制,就能避免一次性加载过多,防止内存溢出。多线程使用场景一( es数据批量导入)万左右,一次性读取数据肯定不行(索引库中,但是当时的数据好像是。

2023-07-27 14:51:52 294

原创 多线程面试题--线程池

首先有一个问题,为什么要使用线程池呢?有两个原因,第一个,每一次创建线程的时候都会占用一定的内存空间,如果无限的创建线程,可能会浪费内存,严重的情况可能会内存溢出。第二个,cpu是有限的,同一时刻一个cpu只能处理一个线程,如果有大量的请求来了,我们创建了大量的线程,很多线程没有cpu的执行权,这些线程都得出去等待,会造成大量的线程之间的切换,也会造成性能变慢所以一般来说都会使用线程池来管理线程,创建线程线程池的核心参数/执行原理核心参数核心线程数目:线程池中主要执行任务的数量(不会释放)

2023-07-27 11:35:42 146

原创 多线程面试题--线程安全

Monitor实现的锁属于重量级锁,你了解过锁升级吗?对象的内存结构volatile一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:①保证线程间的可见性②禁止进行指令重排序保证线程间的可见性那为什么线程2可以读到线程1的值,而线程3不行呢。

2023-07-25 23:49:56 200

原创 多线程面试题--线程基础

目录线程与进程的关系什么是进程 什么是线程区别并行和并发的区别单核情况多核情况 区别线程创建的方式继承Thread类实现Runnable接口 实现Callable接口线程池 runnable 和 callable 有什么区别? 什么时候抛出异常,处理异常?线程的 run()和 start()有什么区别?线程包括哪些状态,状态之间如何变化的? 变化图解​编辑总结 如何保证不同线程执行顺序notify()和 notifyAll()有什么区别?wait和sleep方法的不同?如何停止一个正在运行的线程?

2023-07-24 21:40:53 188

原创 ElasticSearch学习--自动补全

自定义分词器只在当前库中有效。

2023-07-24 10:37:27 577

原创 ElasticSearch学习--数据聚合

数据聚合可以帮助我们对海量的数据进行统计分析,如果结合kibana,我们还能形成可视化的图形报表。自动补全可以根据用户输入的部分关键字去自动补全和提示。数据同步可以帮助我们解决es和mysql的数据一致性问题。集群可以帮助我们了解结构和不同节点的职责和角色注意:参与聚合的字段类型一定不能是text,但是可以是一些其他不分词的,结构化的类型,比如keyword,数值,日期,布尔 上面这种聚合是全局的聚合,如果数据量特别大,对效率影响很大,所以我们需要一种可以指定范围的办法 与之前的搜索功能类似,也分为请求条

2023-07-23 15:03:39 391

原创 ElasticSearch学习--RestClient及案例

目录RestClient查询文档快速入门 总结全文检索(match)查询精确查询复合查询查询总结排序,分页 高亮 多种查询的差异都在做类型和条件上,别的地方都是一样的,包括返回的结果和格式也是一样的

2023-07-21 21:17:33 278

原创 ElasticSearch学习--搜索

【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)_es match must_朱友斌的博客-CSDN博客 过滤条件:决定了哪些文档要加分算分函数:算分的结果加权模式:最终的算法

2023-07-20 21:53:17 107

原创 ElasticSearch学习--操作

其实索引库是不能修改的,因为当他创建完成,他的mapping映射已经定义好了,我们的es会根据mapping去创建倒排索引。如果要修改一个字段,就会让原本的倒排索引全部失效。虽然es禁止直接去修改一个原有的字段,但是它允许你修改索引库的过程中添加新的字段。

2023-07-20 16:41:41 203

原创 ElasticSearch学习--概念

可视化可以用自己的网站。代替数据抓取也可以自己写,然后通过es计算,这些都是官方提供,并且可以替换的es的底层是一种叫做lucene的技术做局部内容索引,效率较差es是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储到es中。

2023-07-20 08:43:52 90

原创 集合面试题--HashMap

HashMap的put方法的具体流程HashMap的扩容机制当第一次扩容的时候,oldCap是0,肯定是不成立的,如第一行当不是第一次扩容时,就会让旧容量*2可以参考这个HashMap扩容时的rehash方法中(e.hash & oldCap) == 0详解_上进的小镇青年的博客-CSDN博客hashMap的寻址算法hashmap在1.7情况下的多线程死循环问题。

2023-07-18 23:41:03 200

原创 集合面试题--二叉树,红黑树,散列表

红黑树(Red Black Tree):也是一种自平衡的二叉搜索树(BST),之前叫做平衡二叉B树(Symmetric Binary B-Tree)在HashMap中的最重要的一个数据结构就是散列表,在散列表中又使用到了红黑树和链表散列表又名哈希表/Hash表,是根据键(Key)直接访问在内存存储位置值(Value的数据结构,它是由数组演化而来的,利用了数组支持按照下标进行随机访问数据的特性。

2023-07-18 14:13:53 195

原创 SpringSecurity--权限管理架构介绍

也有很多公司选择⾃定义权限,即⾃⼰开发权限管理。但是⼀个系统的安全,不仅 仅是登录和权限控制这么简单,我们还要考虑种各样可能存在的⽹络政击以及防彻 策略,从这个⻆度来说,开发者自己实现安全管理也并⾮是⼀件容易的事情,只有 ⼤公司才有⾜够的⼈⼒物⼒去⽀持这件事情。

2023-07-13 17:02:14 1452 1

原创 集合面试题--LinkedList数组

ArrayList和LinkedList的区别是什么?

2023-07-10 16:28:55 213

原创 集合面试题--ArrayList数组

数组(Array)是一种用连续的内存空间存储相同数据类型数据的线性数据结构。数组(Array)是一种用连续的内存空间存储相同数据类型数据的线性数据结构。因为int占4个字节,所以也可以理解为占四块内存数组如何获取其他元素的地址值一般来说问的比较多的就是,添加数据的逻辑,如果添加多个数据,他的扩容方式。

2023-07-08 11:08:42 249 1

原创 Spring面试题--Spring框架常见注解

使用在方法上,标注将该方法的返回值存储到。配置类,创建容器时会从该类上加载注解。Spring 的常见注解有哪些?使用在字段上用于根据类型依赖注入。一起使用用于根据名称进行依赖注入。在初始化容器时要扫描的包。使用在类上用于实例化。

2023-07-06 16:04:30 389

原创 Spring面试题--SpringBoot自动配置原理

该注解通过 @Import 注解导入对应的配置选择器。关键的是内部就是读取了 该项目和该项目引用的Jar包的的classpath路径下METAINF/spring.factories文件中的所配置的类的全类名。在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要 将其导入到Spring容器中。一般条件判断会有像 @ConditionalOnClass 这样的注解,判断是否有对应的 class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器 中使用。

2023-07-06 14:56:44 332

原创 集合面试题--复杂度分析

时间复杂度分析为什么要进行复杂度分析?1指导编写出性能更优的代码2评判别人写的代码的好坏时间复杂度分析。

2023-07-05 17:56:58 89

原创 集合面试题

算法复杂度分析。

2023-07-05 15:52:18 31

原创 Spring面试题--SpringMVC的执行流程

前后端分离阶段(接口开发,异步)Springmvc的执行流程是这个框架最核心的内容视图阶段(老旧JSP等)前后端分离阶段(接口开发,异步)视图阶段(老旧JSP等)1当请求放出,接收请求,他相当于一个调度中心,所有的请求都要经过他,同时他也是被tomcat容器初始化的。当这个类加载之后,就会在内部加载一些组件类包括2在中,它保存的信息就是当前的路径和handler方法,handler可以理解为某一个控制器中的某一个方法,当处理器映射器处理完之后,就会返回给。

2023-07-05 15:40:13 132

原创 Spring面试题--Spring中的循环引用(循环依赖)

Spring三级缓存解决循环依赖我们以上述代码为例分析一下死循环产生的过程为什么A是半成品呢?如果熟悉bean的生命周期,那么在实例化对象A的时候,首先去调用的是构造函数,像是依赖注入还有接口的实现重写什么的,还有后置处理器,初始化方法都还没有执行如图,然后发生了死循环,或者说是循环依赖Spring三级缓存解决循环依赖一级缓存单例池,缓存已经经历了完整的生命周期,初始化完成的bean对象二级缓存缓存早期的bean对象(生命周期还没走完)三级缓存缓存的是。

2023-07-02 19:42:27 383

原创 Spring面试题--Spring的bean的生命周期

Spring容器在进行实例化时,会将xml配置的<bean>的信息封装成一个对象,Spring根据来创建Bean对象,里面有很多的属性用来描述Bean。

2023-07-02 10:48:01 381

原创 Spring面试题--Spring中事务失效的场景有哪些

Spring中事务失效的场景有哪些?异常捕获处理事务通知只有捉到了目标抛出的异常,才能进行后续的回滚处理,如果目标自己处理掉异常,事务通知无法知悉在catch块添加throw new(e)抛出为什么。

2023-07-02 09:42:25 574

原创 Spring面试题--AOP

什么是AOP,你们项目中有没有使用到AOP?AOP称为,用于将那些,抽取并封装为一个,这个模块被命名为“”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。而AOP的底层用的就是常见的AOP使用场景:记录操作日志因为日志属于公共行为,比如我们的每一个service,可能都需要去记录这个日志,但是我们不可能在每一个service中都去编写这个操作日志的逻辑比如当前有一个要求,就是记录每一次获取请求的用户名、请求方式、访问地址、模块名称、登录。

2023-07-02 08:53:07 163

代码审计与WEB安全110道自测题

代码审计与WEB安全110道自测题 大学生

2023-06-19

空空如也

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

TA关注的人

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