面试笔记8.6

缓存

1.如何保证redis与数据库一致性

redis面试:如何保证缓存和数据库数据的一致性?_使用update更新数据,json缓存不更新-CSDN博客

如果先删除缓存,再删除数据库,数据不一致,

解决

1.先操作缓存但不删除缓存,

2.双删法则

先给缓存设置过期时间,

引入mq保证原子性操作

2.redis如何配置key的过期时间,时间原理是什么

Redis中如何配置key的过期时间?他的是实现原理是什么?_idea配置redis ke过期时间-CSDN博客

1. EXPIRE      

设置key之后,然后设置过期时间,设置key的同时设置过期时间

2. SETEX 

设置同时设置过期时间

原理:

1.定时删除

2. 延迟删除  获取get ,set 时判断是否过期,过期删除

时间单位默认s

Redis使用两种方式结合的形式

  1. 定期删除要注意执行频率和执行时长
    定期删除会遍历每个database(默认16个,从0开始),检查当前库中的随机20个(默认),随机抽查key,如果有过期,则删除;
    程序中有个全局变量会记录扫描到了哪个库;

3. 海量数据下如何快速查找一条记录

1.使用布隆过滤器快速过滤不存在的数据

2.redis中使用bitmap实现布隆过滤器

3.在redis中建立数据缓存

4.查询优化 安槽位分配数据

微服务

1.谈谈你对微服的理解,它的优点和缺点

微服务架构的概念、特点、优缺点以及最佳实践-阿里云开发者社区 (aliyun.com)

微服务是一种架构风格,大型单体应用变成较小的单位,降低了整个系统的复杂度

优点

1.微服务更加灵活,耦合性低,每个应用都是独立的

2.技术更新灵活,不依赖具体语言,灵活选择技术栈

3.应用的性能能够得到提升

4.更易组合专门的团队

5.代码复用性更高

缺点

1.服务调用复杂度提升,网络,容错问题

2.分布式事物尽量不适用微服务事物

3.测试难度提升

4.运维难度提升 

2.springclude 和阿里巴巴的组件

SpringCloud NetFlix

eureka 注册中心

hytirx 服务容错

feign 远程调用

ribbon 负载均衡

zuul 用于网管

config 配置中心,结合get仓库

get 配置中心

SpringCloudAlibaba 

nacos 注册中心 ,配置中心(优点,支持热更新)

sentinal 服务容错

dubbo 服务之间的调动 远程调用

RocketMQ用于消息处理

seata 分布式事物管理

springclode getway 适用于网管

2.怎么实现拆分实现高类聚,低耦合

1.微服务之间尽量不要有业务交叉,降低耦合度,

2.微服务之间只能通过接口调用数据,不要绕过接口访问数据

3.微服务之间主要通过同步接口调动,异步事件驱动方式实现高类聚,低耦合

ddd领域模型驱动

中台 

阿里退出去除中台,提出小前台,大中台,抽取各个可以复用的功能抽离出来,形成可复用的主键

业务中台,数据中台,技术中台,结合ddd实现领域相关东西

3.什么是spring 谈谈对ioc和aop的理解

sping是企业级框架,简化软件开发,配置过程,简化项目部署环境

优点:

1.低嵌入设计对业务代码污染很低

2.spring  di机制(依赖注入)将对象的管理机制交给框架处理,降低了耦合度

3.aop支持将通用功能集中式管理,提供更好的复用性

4.spring类主流框架提供非常好的支持

ioc 控制反转

创建对象的控制权交给spring管理

ioc-3种注入方式

1.selter注入

2.根据注解注入

3.构造器注入

aop 面向切面编程

用于将与业务无关,但却对多个对象产生影响的多个行为,抽取并封装成可重用的模块。

核心--动态代理

jdk 动态代理  被代理对象一定要使用接口  jkd模式使用

cglib 动态代理 被代理对象不一定使用接口 

补充:Spring AOP使用篇:熟悉使用前置通知、后置通知、返回通知、异常通知,并了解其相关特性_你在项目里写过前置通知后置通知,在什么业务场景下-CSDN博客

4.Spring容器启动的流程

使用AnnotationConfigApplicationContext 来跟踪一下启动流程:

 this();  初始化reader和scanner

scan(basePackages); 使用scanner组件扫描basePackage下的所有对象,将配置类的BeanDefinition注册到容器中。

refresh();  刷新容器。

​    prepareRefresh 刷新前的预处理

​    obtainFreshBeanFactory: 获取在容器初始化时创建的BeanFactory

​    prepareBeanFactory: BeanFactory的预处理工作,会向容器中添加一些组件。

​    postProcessBeanFactory: 子类重写该方法,可以实现在BeanFactory创建并预处理完成后做进一步的设置。

​    invokeBeanFactoryPostProcessors: 在BeanFactory初始化之后执行BeanFactory的后处理器。

​    registerBeanPostProcessors: 向容器中注册Bean的后处理器,他的主要作用就是干预Spring初始化Bean的流程,完成代理、自动注入、循环依赖等这些功能。

​    initMessageSource: 初始化messagesource组件,主要用于国际化。

​    initApplicationEventMulticaster: 初始化事件分发器

​    onRefresh: 留给子容器,子类重写的方法,在容器刷新的时候可以自定义一些逻辑。

​    registerListeners: 注册监听器。

​    finishBeanFactoryInitialization: 完成BeanFactory的初始化,主要作用是初始化所有剩下的单例Bean。

​    finishRefresh: 完成整个容器的初始化,发布BeanFactory容器刷新完成的事件。

5.spring容器中,bean的启动流程

1.实例化 当客户端向容器申请bean 容器会初始化bean 并保存到BeanDefinition

2.设置对象属性赋值,spring通过BeanDefinition找到对象的依赖,并将这些对象进行赋值

3.初始化 调用一下几个接口实现 BeanNameAware、BeanClassLoaderAware、BeanFactoryAware、ApplicationContextAware

4.前置处理器BeanPostProcessor 会调用方法,实现前置处理器的初始化

5.InitializingBean初始化 spring 执行set方法 定制初始化逻辑

6.配置init-method定义自定义的初始化逻辑

7.会执行后置处理器BeanPostProcessor,调用调用BeanPostProcessor的postProcessAfterInitialization方法,进行后置处理器

8.销毁 它会自动调用DisposableBean进行销毁 

当Bean实现了这个接口,在对象销毁前就会调用destory()方法

9.如果说我们配置destroy-method或者@PreDestroy注解会根据自己定义的销毁逻辑,进行销毁

6.spring中bean是安全的吗?怎么处理?

spring容器中bean没有提供安全的策略,不是性能安全的,因此在spring中,bean不是线程安全的。

sington 单列对象,不管创建多少对象都会返回一个,单列设计模式

prototype   生命周期,作用域  每创建一个对象都会创建一个新的

request 为每个请求产生对象

setion 为每个回话产生对象

global-session    为这个项目创建对象

解决问题:

多个线程修改共享数据会产生线程问题

大部分的bean是无状态的,没有保存值,不存在线程安全的问题。

bean有状态,保存数据 ThreadLocal解决线程安全问题

7.spring中处理循环依赖的问题

spring 循环依赖以及解决方案(吊打面试官)_循环依赖解决方案-CSDN博客

 通过构造循环依赖解决,三级缓存

第一级缓存对象最终的单列式缓存

private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);

第二级 缓存初始化对象

private final Map<String, Object> earlySingletonObjects = new ConcurrentHashMap<>(16);

第三级 对象的ObjectFactory对象

private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);

对于对象的普通引用,二级缓存会保存不完整的对象,当单列池中找不到依赖属性时,可以从二级缓存中获取到不完整对象,完成对象的创建,在后续的依赖注入过程中,在单列池的引用关系调整为完整的。

如果引用对象配置了aop,那么在单列池中,需要注入动态代理对象,而不是原对象,而生产动态代理需要完成对象初始化之后开始,因此spring增加里三级缓存保证动态代理对象。

8.sping中如何处理我们的事物

什么是事务?spring如何处理事务?_什么是事务?如何使用?如何事务回滚?-CSDN博客

支持两种事物

编程式事物 使用TransactionTemplate实现

声明式事物aop aop的基础上实现了事物实现机制 最大的优点就是不需要添加事物,需要相应的事物规则声明

区别在于

声明式事物只能针对方法级别

事物传播行为

Spring中对事务定义了不同的传播级别: Propagation

1、 PROPAGATION_REQUIRED:默认传播行为。 如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入到事务中。

2、PROPAGATION_SUPPORTS: 如果当前存在事务,就加入到该事务。如果当前不存在事务,就以非事务方式运行。

3、PROPAGATION_MANDATORY: 如果当前存在事务,就加入该事务。如果当前不存在事务,就抛出异常。

4、PROPAGATION_REQUIRES_NEW: 无论当前存不存在事务,都创建新事务进行执行。

5、PROPAGATION_NOT_SUPPORTED: 以非事务方式运行。如果当前存在事务,就将当前事务挂起。

6、PROPAGATION_NEVER : 以非事务方式运行。如果当前存在事务,就抛出异常。

7、PROPAGATION_NESTED: 如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则按REQUEIRED属性执行。

Spring中事务的隔离级别:

1、ISOLATION_DEFAULT: 使用数据库默认的事务隔离级别。

2、ISOLATION_READ_UNCOMMITTED: 读未提交。允许事务在执行过程中,读取其他事务未提交的数据。

3、ISOLATION_READ_COMMITTED: 读已提交。允许事务在执行过程中,读取其他事务已经提交的数据。

4、ISOLATION_REPEATABLE_READ: 可重复读。 在同一个事务内,任意时刻的查询结果是一致的。

5、ISOLATION_SERIALIZABLE: 所有事务依次执行。

9.spring 中控制器是不是单列模式,如果是怎么保证线程安全?

控制器是单列模式,是不安全的。

将控制器设置为无状态模式,里面没有数据,而是引用aop,servers。

mysql 

1.mysql中有哪几种存储引擎

show ENGINES查看引擎

MYSQL有哪些存储引擎,各自优缺点。_mysql有哪些存储引擎,各自优缺点-CSDN博客

MyISAM

mylsam每个表有两个文件,分别是MYD(存储数据文件)和MYISAM (存储索引文件)

InnoDB

idb索引和数据存储在一起的

2.mylsqm不支持事物,innodb支持事物,支持行级别的

3.mylsqm不支持xa事物,innodb支持xa事物

4.mylsqm不支持savePoints ,innodb支持savePoints

2.什么是脏读,幻读,不可重复读,怎么处理?

脏读 一个事务读取了另一个事务尚未提交的数据

处理

加锁 

事物隔离 

mvcc

幻读 一个事务在多次查询时,得到了不同数量的符合条件的记录,这是由于其他事务插入、删除了符合条件的记录导致的。

不可重复读 多次查询结果不一致

3.事物基本特征和四大隔离级别

事物的四大特性、四大隔离级别_事物特性-CSDN博客

① Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成 功,要么全部失败。

② Consistency(一致性):事务完成时,数据必须处于一致状态,数据的完整性约束没有被破坏,事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没    有执行过一样。

③ Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性 和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。

 4.Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。

4 事务的隔离级别
4.1 Read uncommitted (读未提交)
  如果一个事务A已经开始写数据,则另一个事务B不允许写操作。但是可以读取这个事务A修改但未提交的数据。最低级别,任何情况都无法保证。

4.2 Read Committed (读已提交)
  事务A只能读取事务B修改并且提交后的数据行,禁止访问事务B处于写状态的数据行。可以避免脏读。

4.3 Repeatable Read(可重复读取)
  事务A在读取数据行时,禁止其他事务对该数据行进行更改,但是可以进行读取操作。进行写操作时,禁止其他事务的任何操作。可以防止脏读和不可重复读。

4.4 Serializable (可串行化)
  提供严格的隔离级别,要求事务一个个的执行。不能并发执行。有效的防止脏读,不可重复读,幻读。

5 mysql与oracle的区别
mysql支持4中隔离级别,且自动提交,其中默认的隔离级别是repeatable read。
在mysql中查看当前的隔离级别,select @@tx_isolation;
在mysql中设置数据库的隔离级别,set tx_isolation=‘隔离级别名称’,一定要在开启事务之前,设置隔离级别。如果通过jdbc设置事务的隔离级别,也要在开启事务代码前,写上隔离级别代码。
oracle支持两种隔离级别(read committed,serializable),需要手动提交,默认的隔离级别是read committed。


4.数据库的锁

MySQL数据库的锁 --- 六种分类 - 14种锁详细介绍_mysql的锁-CSDN博客

行锁 力度小 加锁资源开销大 innerdb支持

 共享锁 读锁 他是多个事物可以对同一个数据共享同一把所 只能读数据

 排他锁  写锁 只有一个事物可以获取排他锁 增删改

 自增锁  对mysql自增字段的锁 自增锁可以重置crucate table不能回滚

 表锁 力度大 开销小 innerdb和myisam都支持

异向锁 不需要用户干预,自己维护自己

全局锁  读写分离 提高性能

全局锁

5.mysql索引结构是怎样的

MySQL的索引——索引的介绍及其数据结构B+树 & 索引的类型 & 索引的使用及其失效场景 & 相关名词解释_mysql的索引结构-CSDN博客

b+树

非叶子不存储数据,只进行数据索引

所有数据都存储在叶子节点中,

每个叶子节点都存有相邻的叶子节点指针

叶子节点按照本身关键字从小到大进行排序


6.聚簇索引和非聚簇索引

数据和索引在一起的索引是聚簇索引

myisam是非聚簇索引  数的叶子节点上的data是引用地址

innerdb 数的叶子节点上的是数据本身

一个表中一个聚簇索引,非聚簇索引有很多个

聚簇索引的物理存储数据和索引的地址是一样的

7.mysql集群怎么搭建

MySQL集群最全详解(图文全面总结)-CSDN博客

master主 slave从

从同步主  不能主同步从 

读用从来做 ,读用主来做

8.谈谈mysql分表,多大数据需要分库分表

当表中数据量过大时,整个查询效率降低得非常明显,进行分表,

mycat2

ShardingSphere 实现分表 

分片

垂直分片 

根据业务角度,能够解决数据库过大的问题

水平分片

数据角度拆分

数据文件超过2g 或者数据量超过500w

          

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/393461.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#使用NPOI进行Excel和Word文件处理(二)

文章目录 使用NPOI在C#中处理Excel和Word文件1. 什么是NPOI&#xff1f;2. 安装NPOI2.1 VisualStudio2019引入NPOI 3. 处理Excel文件读取Excel文件写入Excel文件 4. 处理Word文件读取Word文件写入Word文件 总结Github 地址链接参考例子 使用NPOI在C#中处理Excel和Word文件 在C…

linux maven仓库 删除未下载完成的包 lastUpdated文件

以下命令查找.lastUpdated文件所在目录&#xff0c;并删除所在目录(maven包的版本目录&#xff09;。 $ find ~/.m2/repository/ -regex ".*\.lastUpdated" | xargs dirname | xargs rm -rf查找未下载完成的文件 $ find ~/.m2/repository/ -regex ".*\.lastUp…

使用 docker 快速搭建独角数卡发卡网

docker版本的发卡程序搭建 项目1&#xff1a;https://github.com/assimon/dujiaoka 项目2&#xff08;基于项目1&#xff09;&#xff1a;https://github.com/Apocalypsor/dujiaoka-docker 一键安装脚本 curl -sS -O https://raw.githubusercontent.com/woniu336/open_shell/m…

系统化学习 H264视频编码(06)哥伦布编码解读

说明&#xff1a;我们参考黄金圈学习法&#xff08;什么是黄金圈法则?->模型 黄金圈法则&#xff0c;本文使用&#xff1a;why-what&#xff09;来学习音H264视频编码。本系列文章侧重于理解视频编码的知识体系和实践方法&#xff0c;理论方面会更多地讲清楚 音视频中概念的…

C语言典型例题28

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题2.5 输入一个华氏温度&#xff0c;要求输出摄氏温度。公式为C5/9(F-32)&#xff0c;要求输出要有文字说明&#xff0c;取两位小数 数学知识&#xff1a; &#xff08;1&#xff09;华氏温度与摄氏温度&#x…

E2000 RGMII0通讯异常问题总结

最近让新来小朋友做了一款E2000Q的板卡,使用了E2000Q上的两个RGMII资源,外接YT8521转出了电口。 但是他调试中遇到了一个比较奇怪的问题,两套YT8521的电路都一样,但是一路通一路不通。 也就是框图中MAC2(芯片RGMII0,系统对应eth1)那路网络不通,图中MAC3(芯片RGMII1,…

DITA发布PDF样式定制

- 1 - 概述 使用结构化写作/DITA写作&#xff0c;内容和样式是分离的。 编写的内容放在DITA文件中&#xff0c;样式是放在样式模板文件中。 而且针对不同的格式的输出&#xff08;如&#xff1a;PDF&#xff0c;MS Word&#xff09;&#xff0c;样式模板文件不同。 文档工程…

【优秀python案例】基于百度贴吧的数据采集与文本分析设计与实现

数据采集实现&#xff1a; 对百度贴吧帖子数据的采集。首先&#xff0c;使用requests库发送HTTP请求&#xff0c;通过设置请求头模拟浏览器访问&#xff0c;获取网页的HTML内容。然后&#xff0c;利用BeautifulSoup库对HTML内容进行解析&#xff0c;以便提取所需的信息。 在循…

c# .net core项目角色授权机制

前言 角色授权机制是确保应用程序安全性的重要组成部分&#xff0c;它允许开发者根据用户的角色来限制对应用程序中不同资源的访问。 基本概念&#xff1a; 角色授权基于用户角色的访问控制&#xff0c;即根据用户所属的角色来决定其能够访问的资源或执行的操作。在.NET Cor…

k8s—ingress应用

一、ingress和ingress-controller ingress对象&#xff1a; 指的是k8s中的⼀个api对象/资源对象&#xff0c;⼀般⽤yaml配置。作⽤是定义请求如何转发到service的规则&#xff0c;可以理解为配置模板。 ingress-controller&#xff1a; 具体实现反向代理及负载均衡的程序&…

鸿蒙第三方应用.hap打包、安装流程。

最近在华为手表上安装第三方应用&#xff08;源码打包构建应用&#xff0c;需要签名&#xff09;。网上看了教程&#xff0c;在此记录下。 准备工作&#xff1a;先安装DevEco Studio开发工具。 进入华为 appgallery connect网站&#xff08;注册、开发者实名认证&#xff09; …

【Material-UI】按钮组:按钮变体详解

文章目录 一、按钮变体概述1. 组件介绍2. 基本用法 二、按钮变体详细说明1. 轮廓按钮&#xff08;Outlined&#xff09;2. 文本按钮&#xff08;Text&#xff09;3. 填充按钮&#xff08;Contained&#xff09; 三、按钮变体的实际应用场景1. 界面设计2. 界面一致性3. 视觉层次…

面试笔记 8.5

面试常见: Jvm&#xff0c;高并发&#xff0c;多线程&#xff0c;数据库&#xff0c;redis&#xff0c;框架 1.N I/O有什么核心组件 Java NIO 基本原理以及三大核心组件_java nio核心组件有哪些-CSDN博客 Buffer 缓冲 Channel 一对一 Channel 读取数据 Selector对应线程…

双轮驱动产品持续商业成功

获取完整PPT见下图 更多有关华为研发管理/IPD、MBSE、PLM、ERP、MES、数据治理、数字样机等方面免费解决方案、资料获取&#xff0c;请见下图

前端(五):前端工程化

前端工程化是指在企业级的前端开发项目中&#xff0c;把前端开发所需的工具、技术、流程、经验等进行规范化、标准化。 一、环境准备 &#xff08;一&#xff09;环境准备 1、Vue-cli&#xff1a;是Vue官方提供的一个脚手架&#xff0c;用于快速生成一个Vue的项目模板。 2、…

myeclipse 2020 下载 安装 汉化

1&#xff0c;解压 myeclipse 2020 压缩包到当前目录下&#xff1a; 点击此处蓝色字体下载压缩包 提取码 k3x9 2&#xff0c;鼠标右键 点击 myeclipse 2020.exe 选择 以管理员身份运行 &#xff1a; 3&#xff0c;等待加载&#xff1a; 4&#xff0c;点击 Next &#xff1a; 5…

正则表达式测试工具

前言 正则表达式测试工具可供您输入正则表达式和测试文本&#xff0c;立即查看匹配结果. 下面是离线的HTML文件,同样可以提供相同的服务. 目录 使用说明 HTML代码 正则表达式的编写经验和方法 总结 使用说明 1.先将HTML代码存储成.html为后缀的文件; 2.然后用浏览器打开这个…

C++空指针(nullptr)

C空指针(nullptr) ​ 在C语言中我们把空指针定义成NULL&#xff0c;但是这在C中会有所问题&#xff0c;因为C对指针类型转换比较严格。下面让我来深入了解一下NULL与nullptr。 NULL实际就是一个宏&#xff0c;在C头文件(stddef.h)中&#xff0c;可以看到如下代码&#xff1a;…

【ML】transform 之 decoder 及其实现细节

【ML】transform 之 decoder 及其实现细节 1. decoder2. encoder 和decoder 之间是如何处理和传递讯息的&#xff1f;self-attention3. 查询&#xff08;Query&#xff09;、键&#xff08;Key&#xff09;、值&#xff08;Value&#xff09;是三个核心概念及其具体含义和计算方…

二十八、【人工智能】【机器学习】- 隐马尔可夫模型 (Hidden Markov Models, HMMs)

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…