2025年swagger 默认端口(swagger2默认地址)

swagger 默认端口(swagger2默认地址)Bean 的生命周期 在什么情况下选择用 ArrayList or LinkedList 要在 List 后面添加删除元素和随机访问元素 则选择 ArrayList 更好 如果要在 List 前面或中间添加删除元素或者按顺序访问元素 则选择 LinkedList 更好 如何判断一个对象是否存活 如何对 GC 对象存活的判断方式 引用计数算法 为每一个对象创建一个引用计数器 每当一个地方引用改对象 计数器加一

大家好,我是讯享网,很高兴认识大家。



Bean的生命周期:

在什么情况下选择用ArrayList or LinkedList

要在List后面添加删除元素和随机访问元素,则选择ArrayList更好,如果要在List前面或中间添加删除元素或者按顺序访问元素,则选择LinkedList更好

如何判断一个对象是否存活(如何对GC对象存活的判断方式)

引用计数算法:为每一个对象创建一个引用计数器,每当一个地方引用改对象,计数器加一,当对象引用失效时,计数器减一,当计数器为0的对象,那么该对象是不能引用的,这个算法的缺点是对象相互循环引用,计数器永远不为0 可达性分析算法:一个GC Roots对象为起点,从这些节点向下搜索,这个路径被称为引用链,当对象没有被引用链相连时,该对象是不可取的 java对象通过可达性分析算法并不是马上死亡,还有一个过程看有没有必要调用finalize()方法,当这个方法已经被虚拟机调用过,或者这个对象没有重写finalize()方法,则证明这个对象已经死亡了 如果这个对象有必要执行finalize()方法,那么这个对象就会放在一个F Queue队列中,会去执行它,这里的执行不是等它调用完毕,而是触碰它,原因是万一在finalize()方法中出现死循环,或者执行缓慢,有可能导致这个F Queue队列永远被等待,甚至内存直接崩溃 回收对象有无用的类(①.这个类的实现对象已被回收,②.这个类的Class对象不能反射调用获取其方法属性,③.这个类ClassLoader对象已被回收)、废弃的字符串

HashMap的原理

HashMap的底层是数组+链表/红黑树,默认容量为16,加载因子为0.75,键值对完全可以把value看做key的附属,进行push时,会对这个key进行Hashcode()决定存储位置,如果另一个键值对的key发生hash碰撞时,这时在存储位置构建一个链表,jdk7采用头插法,jdk8采用尾插法,在jdk8中,当链表的节点个数达到8时,会转成红黑树结构,当红黑树节点降为6时,会重新变成链表,当数组的元素达到16的0.75倍时,扩大到原来的2倍,会对key进行reHash()存储。

TCP,HTTP

三次握手,四次挥手
三次握手

客户端发送带有SYN标志的数据包到服务端 服务端发送带有SYN/ACK标志的数据包到客户端 客户端发送带有ACK标志的数据包到服务端

四次挥手

客户端发送一个FIN,用来关闭客户端到服务端的数据传输 服务端收到这个FIN,发回一个ACK,确认序号为收到的序号加一,和SYN一样,一个FIN占用一个序号 服务端关闭与客户端的连接,发送一个FIN到客户端 客户端收到ACK报文确认,并把确认序号设置为收到序号加一

TCP UDP
TCP

面向连接的,能正确处理丢包,保证数据有序,有一个致命缺点连接和关闭时,要发送7个请求造成资源浪费

UDP

面向非连接的,只管发送,不管收没收到

状态码
2XX 成功
3XX 重定向
4XX 客户端错误
5XX 服务器错误
输入url到网页到底发生了什么
HTTP请求格式

线程池内部工作原理

线程创建
线程池执行流程

任务被提交到线程池,会先判断当前线程数量是否小于corePoolSize,如果小于则创建线程来执行提交的任务,否则将任务放入workQueue队列,如果workQueue满了, 则判断当前线程数量是否小于maximumPoolSize,如果小于则创建线程执行任务,否则就调用handler,以表示线程池拒绝接收任务

Java锁

公平锁和非公平锁
可重入锁(Reentrant Lock )

又称递归锁,是指在同一个线程在完成方法获取锁的时候,在进入内层方法会自动获取锁

synchronized就是一种可重入锁

共享锁和独享锁
互斥锁和读写锁

独享锁和共享锁就是一种广义的说法,互斥锁和读写锁是具体的实现

乐观锁和悲观锁

看到并发同步的角度

自旋锁

在java中,自旋锁是指测试获取锁的线程不会立即阻塞,而是采用循环的方式 去尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU

偏向锁、轻量级锁和重量级锁

指锁的状态

MySQL建索引有哪些原则

,表示字段不重复的比例

选择索引的目的是为了使查询的速度变快

MySQL面试题

MySQL中myisam与innoDB的区别

myisam

InnoDB

MySQL int和char隐式类型转换需要注意什么

case1:

case2

MySQL如何高效率随机获取N条数据

假设表叫做mm_account。

ID连续的情况下(注意不能带where,否则结果不好):

ID不连续的情况下:

如果有一个字段叫id,最快的方法如下(随机获取5条):

如果带where语句,上面就不适合了,带where语句请看下面:

MySQL索引类型及应用

普通索引:没有任何限制条件的索引,该索引可以在任何数据类型中创建

唯一索引:使用unique参数可以设置唯一索引。创建该索引时,索引项的值必须唯一,但允许有空值。通过唯一索引,用户可以快速地定位某条记录,主键索引是一种特殊的唯一索引

全文索引:仅可用于MyISAM表,针对较大的数据,生成全文索引,耗时耗空间

空间索引:只能建立在空间数据类型上。这样可以提高系统获取空间数据类型的效率。仅可用于MyISAM表,索引的字段不能为空值。使用SPATIAL参数可以设置索引为空间索引

单列索引:只对应一个字段的索引

多列索引:在表的多个字段上创建一个使用。该索引指向创建时对应的多个字段,用户可以通过这几个字段进行查询,想使用该索引,用户必须使用这些字段中的一个字段

MySQL优点
索引

数据库是收集表的集合,数据表是数据行和数据列的集合

提高查询速度的技术有很多,其中最重要的就是索引

索引的使用是影响查询速度的重要因素

操作索引
创建索引
查看索引
删除索引
索引的使用原则
查询优化建议
使用explain分析查询语句
select_type
type

type表示MySQL在表中找到所需行的方式,又称“访问类型”,常用的类型有:

ALL, index, range, ref, eq_ref, const, system, NULL。

从左到右,性能从差到好。

Key

key列显示MySQL实际决定使用的键(索引),如果没有选择索引,键是NULL。

possible_keys

possible_keys指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上如果存在索引则该索引将被列出,但不一定被查询使用。

ref

ref表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。

rows

rows表示MySQL根据表统计信息,以及索引选用的情况,找到所需记录需要读取的行数。这个行数是估算的值,实际行数可能不同。

声明not null
考虑使用数值类型代替字符串
考虑使用enum类型

索引是一个单独的,存储在磁盘上的数据结构,索引对数据表中的一列或者多列值进行排序,索引包含着对数据表中所有数据的引用指针

MySQL索引
存储引擎的比较

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SQLam1AC-95)(e:/typora/index.png)]

在MySQL中,主要有四种类型的索引

B-树、B+树概念
B树

即二叉搜索树

特点:


讯享网

B-树

是一种多路搜索树(并不是二叉的)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WygzEvX2-99)(E:/typora/B-Tree.png)]

特点:

B+树

B+树是B-树的变体

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lrrtQ7ga-01)(E:/typora/B+Tree.png)]

特点:

建索引的几大原则

点击跳转到MySQL建索引的几大原则

线程池的好处

线程池的重用

线程的创建和销毁的开销是巨大的,而通过线程池的重用大大减少了这些不必要的开销,既然减少了这么多浪费内存的开销,其线程执行速度也是突飞猛进的提升

控制线程池的并发数

并发:在某个时间段内,多个程序都处在执行和执行完毕之间,但在一个时间点上只有一个抽象在运行

并行:在某个时间段里,每个程序按照自己独立异步的速度执行,程序之间互不干扰

控制线程池的并发数可以有效的避免大量的线程池争夺CPU资源而造成阻塞

详解
ThreadPoolExecutor

后面两个参数基本不用

其它线程池
线程池的单例
单例模式

单例模式(Singleton Pattern)是Java中最简单的设计模式之一。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建,这个类提供了一种访问其唯一的对象方式,可以直接访问,不需要实例化该类的对象

注意:

线程池的单例

首先在ThreadPool类里面实现线程池的创建

然后对ThreadPool内部类,在类里面对它实例化,实现单例

Redis的过期删除策略

常见的三删除策略

其中定时删除和定期删除为主动删除策略,惰性删除为被动删除策略

定时删除策略

定时删除策略通过使用定时器,定时删除策略可以保证过期键尽可能快的被删除,并释放过期键所占的内存

惰性删除策略

惰性删除策略只会在获取键时才对键进行过期检查,不会在删除其它无关的过期键花费过多的CPU时间

定期删除策略

定期删除策略每隔一段时间执行一次删除过期操作,并通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响,同时,通过定期删除过期键,也有效减少了因为过期键带来的内存浪费

Redis使用的过期键删除策略

Redis服务器使用的是惰性删除策略和定期删除的实现

惰性删除策略的实现

过期键的惰性删除策略由expirelfNeeded函数实现,所有读写数据库的Redis命令在执行之前都会调用expirelfNeeded函数对输入键进行检查:

定期删除策略的实现

过期键的定期删除处理由activeExpireCycle函数实现,每当Redis服务器的周期性操作serverCron函数执行时,activeExpireCycle函数就会被调用,它在锁定的时间里,分多次遍历服务器中的各个数据库,从数据库的expires字典中随机检查一部分键的过期时间,并删除其中的过期键

activeExpireCycle函数的执行流程:

函数每次运行时,都从一定数量的数据库中随机取出一定数量的键进行检查,并删除其中的键,比如先从0号数据库开始检查,下次函数运行时,可能就是从1号数据库开始检查,直到15号数据库检查完毕,又重新从0号数据库开始检查,这样可以保证每个数据库都被检查到

SQL优化

基本概念
逻辑架构

数据库通过锁机制来解决并发场景-共享锁(读锁)和排他锁(写锁)。读锁是不会阻塞的,多个客户端可以在同一时刻读取同一资源。写锁是排他的,并且会阻塞其他的读锁和写锁

要锁定数据需要一定的锁处理来配合

但是MySQL的存储引擎的真实实现不是简单的行级锁,一般都是实现了多版本并发控制(MVCC),MVCC是行级锁的变种,开销更低。MVCC是通过保存数据的某个时间点快照实现的

事务

事务保证一组原子性的操作,要么全部成功,要么全部失败,一旦失败,回滚之前的所有操作。

MySQL采用自动提交,如果不是显示的开启一个事务,则某个查询都作为一个事务

隔离级别控制了一个事务值的修改,哪些事务内和事务间是可见的

四种常见的隔离级别:

存储引擎

InnoDB引擎,最重要,使用最广泛的存储引擎,被用来设计处理大量短期事务,具有高性能和自动崩溃恢复的特性

MyISAM引擎,不支持事务和行级锁,崩溃后无法安全恢复

创建时优化
Shema和数据类型优化
索引

索引包含一个或多个列的值。MySQL只能高效的利用索引的最左前缀列

优势

B-Tree索引

使用最多的索引类型。采用B-Tree数据结构来数据结构(每个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子结点的遍历)。B-Tree索引适用于全键值,键值范围,键前缀查找,支持排序

B-Tree索引限制:

哈希索引

只有精确匹配索引的所有类,查询才有效。存储引擎对所有的索引列计算一个哈希码,哈希索引将所有的哈希码存储在索引中,并保存指向每个数据行的指针

限制

优化建议点

查询时优化
查询质量的三个重要指标
查询优化点
补充内容

Spring用了哪些设计模式?

策略模式

本质上讲,策略模式就是一个接口下有多个实现类,而每一种实现类会处理某一种情况

注意

工厂方法模式

所谓的工厂方法模式,就是定义一个工厂方法,通过传入的参数,返回某个实例,然后通过该实例来处理后续的业务逻辑。一般的,工厂方法的返回值类型是一个接口类型,而选择具体子类实例的逻辑则封装到了工厂方法中了。通过这种方式,来将外层调用逻辑与具体的子类的获取逻辑进行分离

小讯
上一篇 2025-04-14 13:24
下一篇 2025-04-14 21:00

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/189212.html