自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 登录、安全加密、异常处理

4.在网关全局过滤器中,一进来就会以old token作为键去redis 获取value,如果获取不到,说明token为过期,就使用old token,如果获取到了,存在续期操作,就使用reids 中的token作为新token。用户输入用户名、密码,查询用户信息,校验密码,校验成功后生成jwt token,封装信息到载荷,响应令牌给前端,登陆成功。3.如果解析成功,会将token中存入的用户信息(userID),放入请求头放行,根据网关动态路由到对应的微服务。

2024-03-10 15:58:11 406 3

原创 mybatis

1.一级缓存:基于PerpetualCache的hashmap本地缓存,存储作用域为session,当session被flush或close后,session中的缓存就被清空,保存在内存中,不适合持久化存储。mybatis有两级缓存,一级缓存是sqlsession级别的,默认开启,二级缓存是mapper级别的默认关闭。Mybatis 在处理#{}时,会将 sql 中的#{}替换为?使用#{}可以有效的防止 SQL 注入,mapper 级别的,如果你配置了二级缓存,那么查询数据的顺序应该为:二级缓存→一级。

2024-03-09 21:03:44 371

原创 B+树和B树的异同、二叉树、链表和红黑树

Mysiam的索引和数据分两个文件进行存储,MYI文件存索引,MYD存数据,所以只存了数据索引key的地址,真正的数据存在MYD文件,叶子节点存地址值,非叶子节点存索引值。Innodb的数据和索引都存在一个文件,ibd文件,既存储了索引又存储了数据,叶子节点存真实的数据。4.B+树非叶子节点存索引值,叶子节点存的是真实的数据;2.B+树在B的基础上增加了叶子节点间的顺时针访问指针,加快范围查询的效率。3.B+树每个节点的指针上限为2d,B每个节点的指针上限为2D+1。1.B+树和B树的区别。

2024-03-08 17:06:19 363 1

原创 索引相关、算法、索引数据结构、类型、失效

如果查询的数据不在索引列,则需要普通索引中进行第一次查询得到主键值,然后通过主键索引去索引中第二次查询到真实的数据,这种需要二次查询的现象叫做回表查询。如果需要查询的数据在索引中,如A+B联合索引,根据A查B,一次查询就能直接拿到索引上的数据。4,用or分割开的条件,or前有索引,or后没有索引,索引会失效。1.范围查询,右边的列不能使用索引,否则右边的索引也会失效。索引列的值可以为空,但是必须唯一,如果是组合索引,则列值的组合必须。是在多个字段上创建索引,只有在查询条件中使用了创建索引的第一个字。

2024-03-08 16:45:19 345 1

原创 SQL调优、事务、mysql数据结构

一个事务中的所有 SQL 语句,要么全部执行成功,要么全部执行失败,不会结束在中间的某个环节。表结构和存储引擎:我们都知道数据库表结构设计对于业务来说时非常重 要的,良好的表结构设计时高性能的基石,同时Mysql也支持多种储存引擎,每种存储引擎都有自己的特点,针对不同的的表使用不同存储引擎。:相对于来说把所有压力都给到数据库,其实我们在应用层还有很多操作可以让数据库减轻压力,也是一种对于数据库的调优,比如缓存,限流,异步。B+树将真实的数据放在叶子节点,数据项占的空间越小,数据项的数量越多,树的高度越低。

2024-03-08 12:44:40 380 1

原创 SQL、索引、B+树、分库分表

7.优化group by语句:在我们对某一个字段进行分组的时候,mysql默认是帮我们排序的,但是排序又不是我们业务所必须的,额外的排序会降低效率,所以可以禁止排序,order by null。6.优化order by语句,在使用 order by 语句时不要使用select * ,select后面要查有索引的列,如果一条语句对多个列进行排序,在业务允许的情况下,同时排序或降序。b:哪些步骤产生的数据量多,数据量的多少用线条的粗细表示,很直观。2.多表连接的字段上需要建立索引,极大的提高表连接的效率。

2024-03-07 22:58:29 350

原创 volatile关键字、ThreadLocal关键字、单例模式

接下来t2获得锁,创建实例。对于线程池里面不会销毁的线程,里面总会存在着《threadlocal,localVarible》的强引用,因为final static修饰的ThreadLocal并不会释放,而ThreadLocalMap对于key虽然是弱引用,但强引用没有释放,弱引用会一直存在,同时创建的localVarible对象也不会释放造成内存泄漏;为提高执行效率,在不影响最终执行结果的前提下,代码在编译成字节码的时候有可能进行指令重新排序,这在单线程情况下是没有问题的,但是在多线程的情况下会出现问题。

2024-03-07 19:08:22 331

原创 AQS、CAS,CAS的ABA问题,JUC工具类

如ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore都是基于它来实现的,它解决了在实现同步容器时设计的大量细节问题,它的核心构成部分为:使用一个 先进先出的FIFO的队列存储排队等待锁的线程,使用一个用volatile修饰的int类型的state同步状态来记录当前是否有线程持有锁,0表示没有线程获得锁,1表示有,上锁state就加1,释放锁就对应减1,有重入锁现象,这个值就大于1,然后需要逐级去释放。解决方案:加个版本号,比较版本号。

2024-03-07 18:10:12 344

原创 线程安全、死锁、synchronized锁、lock锁

当一个线程第一次运行到synchronize代码,获取到了 myObject对象的monitor锁,然后计数器就会+1,然后同一个线程第二次运行到synchronize代码,会再次获取到 myObject对象的monitor锁,这个就是重入加锁,计算器在加1,变成2,这个时候其他线程运行到第一次synchronize代码,会发现 myObject对象的monitor锁的计数器是大于0的,意味着被别人给加锁了,线程就会进入block阻塞状态,等待获取锁。1.lock是JUC包下提供封装好的锁,是类的概念;

2024-03-07 16:16:57 401

原创 多线程、线程池

指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数 量达到线程池初始的最大数,则将提交的任务存入到池队列中。单线程化的Executor,即只创建唯一的工作者线程来执行任务,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序执行。定长的线程池,而且支持定时的以及周期性的任务执行,支持定时及周期性任务执行。可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。没达到核心线程时会创建新的线程,达到核心线程,任务进入队列。

2024-03-07 13:33:42 336

原创 类的实例化、双亲委派、http相关

因为Bootstrap ClassLoader在加载的时候,只会加载JAVA_HOME中的jar包里面的类,如java.lang.Integer,那么这个类是不会被随意替换的,除非有人跑到你的机器上, 破坏你的JDK。我们可以将这些抓包 工具看做是一个代理 ,请求和响应都需要路过代理,这时候在代理上就很容易获取到请求和响应的详细信息了,我当前使用的是Fiddler。1.通过委派的方式,可以避免类的重复加载,当父加载器已经加载过一个类时,子加载器就不会再重新加载这个类。状态码的描述:描述当前状态码的含义。

2024-03-07 12:41:55 349

原创 IO流、反射、JDK8的新特性有关知识点

反射里的Constructor,Field,Method三个类都有一个 getDeclaredXxx 方法, 可以不受权限 控制的获取类的构造函数,字段,方法,如果想要私有构造函数创建对象,字段赋 值,方法调用的 话, 会自动的访问类的isAccessable,默认的是false, 所以,想要访问类中的私有成员的时候,就要 调用 setAccessable()方法,将其改为true,这样, 就可以对类中的私有成员进行操作了。1.比较相邻的两个元素。

2024-03-07 12:08:37 839

原创 java集合有关知识点

集合类有关知识点

2024-03-06 18:31:03 357 1

原创 Java基础技术

java基础知识巩固

2024-03-06 16:47:15 377

原创 swagger 和 knife4j接口测试

文档说明:根据Swagger的规范说明,详细列出接口文档的说明,包括接口地址、类型、请求示例、请求参数、响应示例、响应参数、响应码等信息,使用swagger-bootstrap-ui能根据该文档说明,对该接口的使用情况一目了然。接口排序:自1.8.5后,ui支持了接口排序功能,例如一个注册功能主要包含了多个步骤,可以根据swagger-bootstrap-ui提供的接口排序规则实现接口的排序,step化接口操作,方便其他开发者进行接口对接。接口的文档在线自动生成,降低后端开发人员编写接口文档的负担。

2023-10-26 00:15:19 67 1

原创 Java修饰符的使用

抽象类:封装成一个公共的父类,子类继承必须实现父类的功能。更像是一个辐射性的模式。final:修饰不可以被继承,修饰的变量为常量。接口:将属性和方法组成一个特定的功能,接口是一个行为规范。abstract:抽象类或抽象方法。protected:受保护的。主要分为两种:访问修饰符、非访问修饰符。public :公共的。default:默认的。private:私有的。static:静态方法。2.抽象类和接口的区别。

2023-08-25 19:13:13 55 1

原创 面试题:SQL优化详解

在日常的开发应用中,由于初期数据量小,开发人员更加注重功能上的实现,但是当应用正式上线后,随着数据的增长,很多SQL语句出现性能问题,对性能的影响越来越大,因此我们需要对它们进行优化,本文将详细介绍mysql中SQL语句的优化方法。慢查询日志:通过慢查询日志定位那些执行效率较低的SQL语句,可以通过show日志文件查看。id:查询的序列号,是一串数字,序列号代表SQL的查询顺序,序列号越大,执行级别越高。当面对一个有SQL性能问题的数据库时,怎么快速定位SQL并解决问题?extra:额外的执行计划分析。

2023-08-16 12:40:53 48 2

空空如也

空空如也

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

TA关注的人

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