面试打底稿③ 专业技能的第三部分

news2024/12/23 12:13:09

简历原文

抽查部分 

  • 基本了解RabbitMQ、Elasticsearch等微服务技术,对分布式事务、分布式缓存等有所学习;
  • 熟悉数据库的基本操作,写过C#与数据库交互的项目;

模拟问答

1.你是如何保障消息可靠性的

从消息生产者到交换机,用return回调保证消息可靠性,这是消息级可靠,放在消息中定义;

从交换机到队列,用confirm回调保障消息可靠性,这是对象级可靠,放在template中定义;

从交换机到队列,做消息的持久化;

以上是发送的可靠性保障。

然后消费的可靠保障,就设置消息重试,包括发送消息重试、消费者重试,还有重试失败后的入库。

2.es有哪些数据类型?

常见类型:

  1. 数字类型:long integer short byte double float half_float scaled_float unsigned_long
  2. 关键字:
       keyword  用于索引的关键字
       constant_keyword  始终包含相同值的关键字字段
       wildcard  可用于通配符模糊查询的关键字
  3. 时间类型dates:包括date和date_nanos。
  4. 别名alias
  5. 文本text:分词查询的文本。

 对象关系类型:

  1. object:单个JSON对象
  2. nested:JSON对象数组
  3. join:定义同一索引中的文档的父子关系

结构化类型:

  1. geo-point:维度、经度
  2. geo-shape:描述多边形等形状的
  3. point:笛卡尔坐标点
  4. shape:笛卡尔任意集合图形

3.你是用什么做分布式事务的,能介绍一下吗

我用的是Seata做分布式事务管理的。

Seata事务管理中有3个角色,分别是事务协调者TC(Transaction Coordinator)、事务管理器TM(Transaction Manager)还有资源管理器RM(Resource Manager)。可以简单理解为公司里的Boss、领导和员工。而公司一般有3中运营模式:

①XA模式

第一阶段

首先Boss定方向,要开始做项目了,叫领导们开始管员工,员工上班打卡(1.1开启全局事务  1.2调用分支  1.3注册分支事务)

然后员工开始做事(1.4执行业务sql,但不提交)

然后员工报告给boss(1.5报告事务状态)

第二阶段

然后领导说boss你看看着项目咱还要不要接着干,要不要重新干,要不要finish(2.1提交、回滚全局事务)

boss看项目的报表,看事情办的怎么样(2.2检查分支事务状态)

boss一看,哎呀这A组没办好啊,给我重新做!(①如果有失败,通知所有RM回滚事务)

或者boss一看,哎呀办的不错啊,好,项目做完了,放假放假,发奖金发奖金(②如果都成功,通知所有RM提交事务)

XA模式牺牲了可用性,保证了强一致性

这是什么意思呢?就是3个组程序组客户组扫地组在干活,程序组写完项目了,扫地组地也拖好了(RM执行分支业务sql),兴致勃勃的跑到办公室准备把结果告诉给boss,让他完结项目,领奖金假期了(TC提交事务),结果看到boss黑着脸在拉着A组员工一顿训,原来是客户组办事不力,全员摸鱼(RM中有的事务失败),好了,这下项目失败了,啥也别想了,假期泡汤了,奖金飞走了,啥也不说了,项目只能推倒重来了。

你说程序组扫地组气不气?气死了,把客户组成员祖宗十八代给*¥%^&,但你说他们咋想的?看到客户组成员后来陪着笑脸发了3天零食,看到客户小姐姐快要哭出来的眼睛,还是想,哎,咱还是一个team,对内对外都要一致,不一起搞出来项目还是不去找客户了

②AT模式

AT模式也大差不差。

第一阶段

boss投钱开始搞项目(1.1开启全局事务),叫领导开管(1.2调用分支),员工开始上班打卡(1.3注册分支事务),开始做事(1.4执行业务sql并提交),做完之后报告(1.5报告事务状态)

不同的地方在于,这次程序组客户组扫地组都留了个心眼,程序做完一部分代码就买一部分服务,客户组小姐姐陪完一个客户就拉到公司搞定一个,扫地组每天都勤勤恳恳扫地让老板看见……(1.4执行业务sql并提交

第二阶段

第二阶段也大差不差,领导提议要不要继续下去(2.1提交、回滚全局事务),boss检查项目做的怎么样(2.2检查分支事务状态),boss觉得做的好项目就finish了(2.3提交)客户资料就放那垫桌角生灰去了(2.4删除log),做的不好就不干了/重新做(2.3回滚),顺便把客户绑回来叫他把程序吐出来(2.5恢复log数据)。

正按这个流程走呢,结果第二天扫地组出去度假了,地没拖好,boss进门滑了一跤,摔进了icu,好,项目又泡汤了。

AT模式牺牲了一致性,保证了可用性

接下来该咋办?程序组呆在家里突突突、博德之门3去了,客户组出去陪小姐姐了,扫地组哭天喊地去了,项目搞完了把我晾在一边,拿着我的工资享受,还把我给摔了,躺在病床上的boss越想越气,越想越气,于是把呼吸机的管拔了,拄着拐杖一瘸一拐的来到公司,直接把客户资料和服务器都烧了。

AT模式在事务失败的情况下,保证了微服务对外提供服务,但最终的状态一致性无法保证。一旦出问题,还是要把之前处理好的业务推倒重来。

③TCC模式

 就点拨一句,TCC就相当于员工影分身,一个分身3个,一个人干活,一个人准备成功情况给boss报喜,一个准备失败了赶紧删资料跑路。

优点是一致性、可用性都很高,缺点是代码量很大

4.你说你学习了分布式缓存,你们处理了缓存穿透问题吗

我们碰到了缓存穿透问题,并作了相应处理。

缓存穿透说的是这样一个问题:如果一个数据在各个多级缓存包括数据库中,比如Redis和MySQL中都没有,那么我在查询的时候每次都会进入数据库查询,这就会造成资源被占用,恶意利用可能会导致服务器崩溃。

一种解决方法是将这个key值置null放入缓存。但这样空占空间,最后可能导致业务数据都没地方放。

还有一种比较合理成熟的方案,就是采用布隆过滤器。

布隆过滤器将传输进来的数据根据算法,映射到一个二进制向量/位图上。

我们将所有已有的数据传入,根据哈希算法,映射到位图上。接下来传入其他数据,再用哈希算法检验,如果得出结果为1,则说明有数据,则放行访问;如果结果为0,说明没有,则直接返回。

值得注意的是,只有一个哈希算法时,检验结果可能很不准确,大量不存在的数据可能还是能访问到穿透的地方。这时候我们可以引入更多的不同的哈希算法,来进行检验,增加数据的准确性。

但过多的哈希算法,又会带来性能的下降。所以我们一般用适当数量的哈希算法。

5.有没有做过数据库优化,怎么做呢

就拿MySQL来说吧。对于需要优化的,查询慢的数据库,分三种情况讨论:

  1. 单条SQL运行慢
  2. 部分SQL运行慢
  3. 整个SQL运行慢

单条SQL运行慢

对于第一种情况,单条SQL运行慢,一般有两种常见原因:

  1. 未正常创建或使用索引
  2. 表中数据量太多了

首先,我们检查是否正常创建了索引;

然后,检查是否正常触发了索引查询。

以下情况不能触发索引,应该避免:

  1. 在 where 子句中使用 != 或者 <> 操作符,查询引用进行的是全表扫描;

  2. 前导模糊查询时触发的时全索引扫描或全表扫描,因为它不能利用索引的顺序、得一个个去找。也就是查询时不能用这样的字段: '%XX' 或 '%XX%';

  3. 带有条件or,or条件中不是每个列都有索引时。这时候必须在每个列上面都加上索引才能触发索引查询;

  4. 在 where 子句中对字段进行表达式操作。

以下技巧可以优化索引查询的速度:

  1. 尽量使用主键查询,而非其他索引,因为主键查询不会触发回表查询;

  2. 查询语句尽可能简单,大语句拆小语句,减少锁时间;

  3. 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型;

  4. 用 exists 替代 in 查询;

  5. 避免在索引列上使用 is null 和 is not null。

其次,对于数据量过大的数据库,我们可以作数据拆分。

数据拆分分为垂直拆分和水平拆分。

垂直拆分一般这样来拆分:

  • 把不常用的字段单独放在一张表;

  • 把 text,blog 等大字段拆分出来放在附表中;

  • 经常组合查询的列放在一张表中。

表的行数一般超过200万行时,查询就会变慢。这时候就可以拆分成多个表来存放数据。 这就是水平拆分。

部分SQL运行慢

为了定位这些慢查询的SQL,我们可以开启慢查询分析。

整个SQL运行慢

我们可以进行读写分离。

6.简单介绍一下你这个C#数据库项目

我这是一个自动拨叉脚整形机项目,从前端WPF界面输入数据,然后传入后端,存入数据库;还可以从前端输入拨叉数据,然后调用机器学习模型,得到预测结果显示到WPF界面上。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言 数据类型

变量声明 格式&#xff08;变量类型变量名称&#xff09; 变量类型&#xff1a;整数类型&#xff08;int&#xff09;&#xff0c;浮点数类型&#xff08;float&#xff09; float类型可以存储带小数的数字。 用printf()打印变量&#xff0c;使用%d来处理整数值&#xff0c…

AI指令百科全书:1000条AI指令,一次性全给你!

这是一位&#xff0c;国外博主哈桑 整理的&#xff0c;1000条ChatGPT实用指令&#xff0c;涵盖目前几乎所有的&#xff0c;主流提示需求。 全文超过40000字。 我把它们翻译成更适合大家理解的「中文版Prompt」&#xff0c;并根据具体的内容&#xff0c;拆解成一二级目录&…

【C++STL基础入门】list交换、翻转,排序、合并和拼接操作

文章目录 前言一、交换list二、翻转list三、排序list四、合并list五、拼接list总结 前言 在C的标准模板库&#xff08;STL&#xff09;中&#xff0c;list是一个双向链表容器&#xff0c;提供了丰富的功能和操作。本文将介绍list容器在交换、翻转、排序、合并和拼接等方面的基…

Sip多按键对讲分机,洁净室专用对讲终端

Sip多按键对讲分机&#xff0c;洁净室专用对讲终端 嵌入式洁净室电话机广泛应用于手术室&#xff0c;实验室&#xff0c;制药厂车间&#xff0c;无尘车间等 环境要求高的场所&#xff0c;整机是SUS304不锈钢工艺&#xff0c;喇叭&#xff0c;按键&#xff0c;麦克风无间隙&…

三维模型3DTile格式轻量化顶点压缩主要技术方法分析

三维模型3DTile格式轻量化顶点压缩主要技术方法分析 三维模型顶点压缩是3DTile格式轻量化压缩的重要组成部分&#xff0c;能有效减小数据大小&#xff0c;提高数据处理效率。下面将详细分析几种主要的顶点压缩技术方法&#xff1a; 预测性编码&#xff1a;预测性编码也被称为差…

串口电平信号分析--一下看懂不同的串口通信信号

串口电平信号分析–一下看懂不同的串口通信信号

C#,数值计算——Primpolytest的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Primpolytest { private int N { get; set; } 32; private int nfactors { get; set; } 5; private ulong[] factors { get; set; } private int[] t { get…

九日集训 LCR.190 加密运算

计算机安全专家正在开发一款高度安全的加密通信软件&#xff0c;需要在进行数据传输时对数据进行加密和解密操作。假定 dataA 和 dataB 分别为随机抽样的两次通信的数据量&#xff1a; 正数为发送量负数为接受量0 为数据遗失 请不使用四则运算符的情况下实现一个函数计算两次…

MySQL索引看这篇就够了

能简单说一下索引的分类吗&#xff1f; 例如从基本使用使用的角度来讲&#xff1a; 主键索引: InnoDB 主键是默认的索引&#xff0c;数据列不允许重复&#xff0c;不允许为 NULL&#xff0c;一个表只能有一个主键。唯一索引: 数据列不允许重复&#xff0c;允许为 NULL 值&…

Vue.js2+Cesium1.103.0 十二、绑定多个 DOM 弹窗,并跟随视角实时更新位置

Vue.js2Cesium1.103.0 十二、绑定多个 DOM 弹窗&#xff0c;并跟随视角实时更新位置 Demo 基于 element-ui 的 Message 封装一个自定义弹窗&#xff0c;添加到页面中&#xff0c;并实时更新位置。 <template><divid"cesium-container"style"width: 1…

【RocketMQ】浅谈消息发送机制

【RocketMQ】浅谈消息发送机制 参考资料&#xff1a; 消息发送核心参数与工作原理详解 RocketMQ消息发送流程 RocketMQ 消息发送 原理详解 源码剖析 结合实际应用场景谈消息发送 《RocketMQ技术内幕》 文章目录 【RocketMQ】浅谈消息发送机制一、认识RocketMQ消息——Message二…

java语言对异常处理运行的初步探索(try-catch-finally)

​​​​​​异常处理机制 java中的异常处理机制使得即使程序出现异常&#xff0c;代码也能够继续执行下去而不是直接退出程序。下面我们先来简单的了解一下异常处理是怎么使用。 在引用异常处理之前&#xff0c;代码运行中存在异常会导致JVM直接中断该程序并输出异常信息&am…

stack的使用以及模拟实现

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

活动预告|Dragonfly 与你相约 2023 KubeCon Shanghai!

KubeCon CloudNativeCon Open Source Summit China 2023&#xff0c;由 Linux 基金会、CNCF 主办&#xff0c;将在 9 月 26-28 日于上海跨国采购会展中心盛大开幕。本次峰会将聚集全球社区&#xff0c;共同探讨云原生和开源领域的前沿洞察、核心技术与最佳实践&#xff0c;会…

Java基于SpringBoot的藏区特产销售系统的研究与实现

今天为大家带来的是基于 Java SpringBootVue 的藏区特产销售系统&#xff0c;大家有兴趣的可以看一下 博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目…

ruoyi(若依)接口拦截路径配置,接口访问要授权,放开授权直接访问

1.找到文件SecurityConfig.java文件&#xff0c;里面配置相应的放行路径

[计算机入门] Windows附件程序介绍(办公类)

3.13 Windows附件程序介绍(办公类) 3.13.1 写字板 Windows系统中的写字板程序是一款简单而实用的文本编辑工具&#xff0c;它被广泛应用于快速记录笔记、绘制草图和进行简单的文档编辑。以下是写字板程序的主要功能和作用&#xff1a; 文本输入和编辑&#xff1a;写字板程序允…

数据结构-----二叉树的创建和遍历

目录 前言 二叉树的链式存储结构 二叉树的遍历 1.前序遍历 2.中序遍历 3.后序遍历 二叉树的创建 创建一个新节点的函数接口 1.创建二叉树返回根节点 2.已有根节点&#xff0c;创建二叉树 3.已有数据&#xff0c;创建二叉树 前言 在此之前我们学习了二叉树的定义和储…

HTML5+CSS3小实例:脉冲波纹催眠动画特效

实例:脉冲波纹催眠动画特效 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=&qu…

ThingsBoard 前端项目背景图片部件开发

前言 ThingsBoard 是目前 Github 上最流行的开源物联网平台&#xff08;14.4k Star&#xff09;&#xff0c;可以实现物联网项目的快速开发、管理和扩展, 是中小微企业物联网平台的不二之选。 本文介绍如何在 ThingsBoard 前端项目中开发背景图片部件。 产品需求 最近接到产…