当前位置: 首页 > news >正文

全栈面试(一)Basic/微服务


文章目录

  • 项目地址
  • 一、Basic InterviewQuestions
        • 1. tell me about yourself?
        • 2. tell me about a time when you had to solve a complex code problem?
        • 3. tell me a situation that you persuade someone at work?
        • 4. tell me a about a confict with a teammate and how you resolved it
        • 5. tell me a about a time where you demonstarted leadership
        • 6. imagine that your teammate was not performing well how would you handle the situation ?
        • 7. what would you manager say about you
        • 8 . why do you want to work here
      • 9. tell me about a time when you above call the of duty
      • 10. what project are you most proud of and why
  • 二、全栈
    • 2.1 微服务
        • 1. 订单搜索功能
      • 2. RabbitMQ
        • 2.1 RabbitMQ的架构或者组成部分
        • 2.2 延迟队列和死信
        • 2.3 如何保证消息发送或者接收
        • 2.4 常用的队列
        • 2.5 如何保消息不被重复消费
        • 2.6 消息队列的优缺点以及场景
      • 3. Kafka
        • 3.1 简述kafka的架构设计
        • 3.1 简述kafka的rebalance机制
      • 4. Redis
        • 4.1 分布式ID的生成方案
        • 4.2 分布式锁的应用场景以及解决方法
        • 4.3 死锁的情况有哪些
        • 4.4 redis持久化RDB 和AOF
        • 4.5 redis如何淘汰过期的key
        • 4.6 缓存回收


项目地址

  • 教程作者:
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:
dbt 
airflow

一、Basic InterviewQuestions

在这里插入图片描述

1. tell me about yourself?

First of all, thank you very much for give me this opportunity,I am a software engineer, I enjoy sloving complex problems I have experience as a Data enginner for one half year and 2 years building and mantaining Full stactk web app. I enjoy working with all layers of the stack. 在我之前工作中,I’v experienced with include .net for building mvc and web api and as well as experience with different various javascript framworks such as react and vue. So i believe my passion and my experience would make me a great asset for you company

2. tell me about a time when you had to solve a complex code problem?

Use S.T.A.R

3. tell me a situation that you persuade someone at work?

my previous company our team support different web applications and there was really uniformity in terms of what kind of technic or framework we should use. 之前有个项目是需要从一个网站获取接口数据,将数据结合bi系统数据,进行实时的展示,所以刚开始领导决定使用和后端一样的.net 完成功能。我提出了可以使用python完成,因为更加轻量化的定时系统和更快的开发周期。就写了一个小的demo在周会上演示利与弊,最后,小组的成员以及leader同意了我的想法

4. tell me a about a confict with a teammate and how you resolved it

star

5. tell me a about a time where you demonstarted leadership

star

  1. 先说一个leadership应该有啥:可以将项目有条不紊的组织起来,并且善于发掘每个人的特长
  2. 之前有个新来的同事,领导让我带着他熟悉公司的业务,之后一起合作开发
6. imagine that your teammate was not performing well how would you handle the situation ?

不要用star

  1. 如何更好的像teammate传达坏消息,但是不要贬低他,先赞扬,在讲出问题,最后再 赞美和鼓励
7. what would you manager say about you
  1. 有创造力,善于学习,学习的很快
  2. 公开演讲,或者小组开会上,我说话并不是很多,不是一个能活跃气氛的人?
8 . why do you want to work here
  1. 对产品兴奋,对公司的业务感兴趣
  2. 你的技术和公司的技术很匹配

9. tell me about a time when you above call the of duty

star

  1. 新年回去了,但是,我的服务器报警了,我的定时任务报警,原本应该有1000w的吞吐,但是,当日只有10w数据,

10. what project are you most proud of and why

多平台协作+微服务

二、全栈

2.1 微服务

1. 订单搜索功能
  • 数据同步架构图

在这里插入图片描述

执行流程:
1.数据存储,数据到达订单数据库后,会到Canal服务器,Canal服务器通过
同步通讯,到ElasticSearch服务
2. Canal和Els默认使用的时http通讯,使用RabbitMQ进行通讯或kafka
3. 数据回源:解决异步通讯实时延迟问题,出现延迟的数据,直接再订单数据库里进行查询
4. 数据回源并发量大会导致订单数据库性能下降,所以需要添加一个redis缓存服务

技术:
5. 电商微服务系统
6. Elasticsearch
7. Nest
8. Cannal
9. RabbitMQ
10.Redis

具体实现:

  1. 使用Nest提供的ElasticClient

2. RabbitMQ

2.1 RabbitMQ的架构或者组成部分
  1. broker :服务节点
  2. queue:队列,用户存储消息,多个消费者订阅一个队列,这是队列的消息会被轮询 平摊给多个消费者。
  3. exchange: 交换器,生产者发送消息给exchange,然后exchange将消息放入一个或者多个队列中
  4. RoutingKey:当消息到达exchange的时候,会指定一个RoutingKey,用来指定路由规则,必须和bindingKey一起使用才可以生效
  5. Binding:通过绑定,将exchange和queue里的消息绑定,
2.2 延迟队列和死信

在这里插入图片描述

2.3 如何保证消息发送或者接收

发送方:需要发送confirm,当消息到达生产者的时候,使用comfirmCallback回调接口,成功则回调,失败则调用ReturnCallback接口
接收方: 消费者接收的每一条消息后必须确认,只有确认了的消息,才会从队列里删除。但是如果消费者 返回ack之前断开了连接,消息会被从新发给下一个订阅的消费者,这样会产出重复消费,需要进行去重
broker: 同步刷盘,等待slave复制完成才会返沪确认

2.4 常用的队列
  1. 镜像队列:队列会在集群上的多个节点创建副本,主节点处理请求, 子节点负责同步数据,当主节点宕机,子节点接管,保证高可用
  2. 优先队列:处理系统预警
  3. 延迟队列:订单超时(20分钟内,用户未支付,取消订单)
2.5 如何保消息不被重复消费
  • MQ是无法保证消费端是否正常消费的
  • 需要程序员从应用端保证消息不被重复消息,需要保证消息的幂等性:
    1. 如果使用redis,每次都是set, 天然幂等
    2. 生产者发送消息带上全局唯一uuid,消费者拿到消息后,根据id在redis里查询,没消费过就处理,并且写入id到redis里,如果消费过,就不处理
2.6 消息队列的优缺点以及场景

有点: ①异步 ②解耦 ③消弱峰值
缺点: ①复杂度②数据一致性,消费者会失败
场景: ①日志采集 ② 订阅发布 ③多系统调用

3. Kafka

在这里插入图片描述

3.1 简述kafka的架构设计
  1. broker:服务器节点,可以有多个
  2. topic: 一个Topic 以多个partition的方式分布在多个broker上,每个p
  3. Customer group:消费者分组
3.1 简述kafka的rebalance机制

4. Redis

4.1 分布式ID的生成方案
  1. 全局的uuid:优点:降低全局节点压力;缺点:占空间大,不是递增的
  2. 数据库主键自增:优点:数字类型查询效率高于字符;缺点:并发性能不好,分库分表复杂
  3. Redis自增: 优点:并发性能高;缺点:数据丢失,自增
  4. 雪花算法:优点:分布式ID的经典算法; 缺点:时钟回拨
4.2 分布式锁的应用场景以及解决方法

应用场景:

  1. 处理分布式系统集群中的锁,如果都是用独立的锁,锁就没有意义
  2. 操作共享资源:如数据库里唯一用户资源,订单系统,优惠卷系统,财务系统
  3. 同步访问:多个进程同时操作共享资源

解决方案:
4. 使用redis做分布式锁,使用setnx key nx ex 10s(需要给key设置过期时间5-10s)确保不会有死Key;其次,如果锁设置了10s释放 ,但是 执行了15s,另外一个程序已经获取到了锁,会出现数据不一致,需要使用watch dog进行,实际上直接使用框架lock 和unlock
5. 基于zookeeper,临时节点(客户端和zookeeper连接后一直生效,断开后连接失效),顺序节点:1号服务拿锁,执行结束后,再给2号
6. 基于基于数据库,主键或者唯一索引

4.3 死锁的情况有哪些
  1. 加锁,但是没释放锁,需要添加Delete key
  2. 加锁后,程序还没执行释放锁,程序挂了,需要添加key的过期机制
4.4 redis持久化RDB 和AOF

RDB:
1. 数据快照,指定间隔时间内,对数据进行快照存储;
2. 保存某个时间点的数据,如每小时保存过去24小时数据,同时每天保存过去30天的数据;
3. 方便传入到blob里
4. 缺点:①意外停止,会丢失数据;②fork子进程进行数据备份会导致性能降低;

AOF(优先):
1. 每秒的fsync策略,AOF可以将数据丢失降低到1s
2. AOF只是一个日志追加文件,所以即使宕机,也可以恢复到未执行完整的写入命令
3. AOF保存数据库所有执行写入的操作
4. 缺点:体积大

4.5 redis如何淘汰过期的key
  1. 自动:每10s 随机检测20个keys进行过期检测,删除所有的过期keys,如果多于25%就重复1
  2. 手动:设置master执行DEL命令,如果Master不执行,slaver是不会执行的
  3. 扩展:绝对时间点和相对时间点以及时钟轮算法
4.6 缓存回收

相关文章:

全栈面试(一)Basic/微服务

文章目录 项目地址一、Basic InterviewQuestions1. tell me about yourself?2. tell me about a time when you had to solve a complex code problem?3. tell me a situation that you persuade someone at work?4. tell me a about a confict with a teammate and how you…...

python安装完成后可以进行的后续步骤和注意事项

安装Python3完成后,你可以开始使用它进行编程和开发。以下是一些安装完成后可以进行的后续步骤和注意事项: 验证安装 检查Python版本: 打开“终端”应用程序。输入python3 --version,应该显示安装的Python3版本号。 检查pip版本…...

[Qt] 窗口 | 菜单栏MenuBar

目录 QMainWindow 概述 一、菜单栏 1、创建菜单栏 2、在菜单栏中添加菜单 3、创建菜单项 4、在菜单项之间添加分割线 5、添加快捷键 6、添加子菜单 7、添加图标 综合示例 QMainWindow 概述 Qt 窗口是通过 QMainWindow 类来实现的。 QMainWindow 是一个为用户 提供主…...

[读书日志]从零开始学习Chisel 第十三篇:Scala的隐式参数与隐式转换(敏捷硬件开发语言Chisel与数字系统设计)

10. 隐式转换与隐式参数 假设编写了一个向量类MyVector,并且包含一些向量的基本操作。因为向量可以与标量做数乘运算,所以需要一个计算数乘的方法“*”,它应该接收一个类型为基本值类的参数,在向量对象myVec调用该方法时&#xf…...

CMake学习笔记(1)

1. CMake概述 CMake 是一个项目构建工具,并且是跨平台的。关于项目构建我们所熟知的还有Makefile(通过 make 命令进行项目的构建),大多是IDE软件都集成了make,比如:VS 的 nmake、linux 下的 GNU make、Qt …...

cursor+deepseek构建自己的AI编程助手

文章目录 准备工作在Cursor中添加deepseek 准备工作 下载安装Cursor (默认安装在C盘) 注册deepseek获取API key 在Cursor中添加deepseek 1、打开cursor,选择设置 选择Model,添加deepseek-chat 注意这里去掉其他的勾选项&…...

Kotlin实现DataBinding结合ViewModel的时候,提示找不到Unresolved reference: BR解决方案

在用Kotlin语言实现DataBinding结合ViewModel的代码的时候,如下所示: class UserModel(private val userName: String, private val userAge: Int) : BaseObservable() {get:Bindablevar name: String userNameset (value) {field valuenotifyPropert…...

java项目启动时,执行某方法

1. J2EE项目 在Servlet类中重写init()方法,这个方法会在Servlet实例化时调用,即项目启动时调用。 import javax.servlet.ServletException; import javax.servlet.http.HttpServlet;public class MyServlet extends HttpServlet {Overridepublic void …...

详解如何自定义 Android Dex VMP 保护壳

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 前言 Android Dex VMP(Virtual Machine Protection,虚拟机保护)壳是一种常见的应用保护技术,主要用于保护 And…...

Grails应用http.server.requests指标数据采集问题排查及解决

问题 遇到的问题:同一个应用,Spring Boot(Java)和Grails(Groovy)混合编程,常规的Spring Controller,可通过Micromete Pushgateway, 采集到http.server.requests指标数据,注意下面的指标名称是点号&#…...

开源临床试验软件OpenClinica的安装

本文是为帮网友 A萤火虫 解决安装问题做的记录; 简介 什么是 OpenClinica ? OpenClinica 是世界上第一个商业开源临床试验软件,主要用于电子数据捕获(EDC)和临床数据管理(CDM)。它的设计旨在优…...

网络安全 | 网络安全法规:GDPR、CCPA与中国网络安全法

网络安全 | 网络安全法规:GDPR、CCPA与中国网络安全法 一、前言二、欧盟《通用数据保护条例》(GDPR)2.1 背景2.2 主要内容2.3 特点2.4 实施效果与影响 三、美国《加利福尼亚州消费者隐私法案》(CCPA)3.1 背景3.2 主要内…...

深入学习 Python 爬虫:从基础到实战

深入学习 Python 爬虫:从基础到实战 前言 Python 爬虫是一个强大的工具,可以帮助你从互联网上抓取各种数据。无论你是数据分析师、机器学习工程师,还是对网络数据感兴趣的开发者,爬虫都是一个非常实用的技能。在本文中&#xff…...

element plus 使用 upload 组件达到上传数量限制时隐藏上传按钮

最近在重构项目,使用了 element plus UI框架,有个功能是实现图片上传,且限制只能上传一张图片,结果,发现,可以限制只上传一张图片,但是上传按钮还在,如图: 解决办法&…...

音频DSP的发展历史

音频数字信号处理(DSP)的发展历史是电子技术、计算机科学和音频工程共同进步的结果。这个领域的进展不仅改变了音乐制作、音频后期制作和通信的方式,也影响了音频设备的设计和功能。以下是对音频DSP发展历史的概述: 早期概念和理论…...

2025低代码与人工智能AI新篇

在当今数字化浪潮汹涌澎湃的时代,低代码开发与人工智能(AI)犹如两颗璀璨的星辰,正逐渐交汇融合,为企业解锁前所未有的智能业务解决方案。今天,咱们就深入探讨一下低代码平台是如何集成 AI 技术,…...

【HarmonyOS Next NAPI 深度探索1】Node.js 和 CC++ 原生扩展简介

【HarmonyOS Next NAPI 深度探索1】Node.js 和 CC 原生扩展简介 如果你用过 Node.js,应该知道它强大的地方在于能处理各种场景,速度还很快。但你有没有想过,Node.js 的速度秘密是什么?今天我们来聊聊其中一个幕后英雄——原生扩展…...

redis的学习(四)

13. 渐进式遍历 通过渐进式遍历能够获取当前所有的key,又不会讲当前的服务器卡死。不是一个命令将所有的key获取,而是每执行一次命令,只获取到其中的一部分。所以想要获取到所有的key就需要多次遍历,即化整为零的思想。 渐进式遍历…...

C# winform 多线程 UI更新数据 报错:无法访问已释放的对象。

System.ObjectDisposedException HResult0x80131622 Message无法访问已释放的对象。 ObjectDisposed_ObjectName_Name SourceSystem.Windows.Forms StackTrace: at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, …...

error: linker `link.exe` not found

开始学习rust,安装好rust的环境,开始从hello world开始,结果用在win10环境下,使用vs code或cmd窗口编译rust报错: PS E:\study_codes\rust-demo\chart01> rustc hello.rs error: linker link.exe not found| note:…...

Python基础语法:访问器@property和修改器@xxx.setter

一、简介 访问器和修改器也是装饰器的一种。 property: 访问器,getter xxx.setter: 修改器,setter 访问器和修改器的根本目的是想将属性私有化,提供getter&setter去访问。 访问器和修改器能够做到访问属性其实在调用getter方法&#xff0…...

CVPR 2023反无人机数据集实战:用ModelScope上的开源模型快速上手目标检测

CVPR 2023反无人机数据集实战:用ModelScope上的开源模型快速上手目标检测无人机技术的普及带来了新的安全挑战,从隐私侵犯到关键设施威胁,反无人机技术正成为计算机视觉领域的热点。CVPR 2023反无人机竞赛提供的开源数据集和基线模型&#xf…...

别再手动改路径了!用LabVIEW + MATLAB Script做自动化测试,这份环境配置指南让你效率翻倍

LabVIEW与MATLAB深度整合:构建自动化测试系统的工程实践指南在工业自动化与测试测量领域,LabVIEW和MATLAB的组合堪称黄金搭档。LabVIEW擅长硬件接口和实时控制,而MATLAB在算法开发和数据分析方面具有无可比拟的优势。本文将深入探讨如何将两者…...

利用DiSEqC协议与AVR单片机驱动卫星天线电机改造户外设备

1. 项目概述:用卫星天线电机驱动一切如果你手头有一些需要承受风吹日晒、还得精确转动的设备,比如一个户外的大型定向天线,或者一个需要定期调整角度的太阳能板支架,甚至是一个坚固的监控云台,你可能会为驱动机构发愁。…...

自制射频功率计:基于AD8317芯片,成本43欧元实现1MHz-10GHz测量

1. 项目概述:为什么我要亲手打造一台射频功率计在无人机和模型飞行器的圈子里,尤其是在我们荷兰FMS Spaarnwoude俱乐部,合规飞行是头等大事。我给我的八轴飞行器加装了云台相机和图传系统,工作在5.8GHz频段。根据本地法规&#xf…...

苏州创新药20年,站上全球产业洗牌暴风眼

一个城市的创新药产业集群如何从无到有,又如何在全球化临界点寻找自己的位置。文|徐鑫编|任晓渔过去一年多,苏州是全球创新药产业版图中一个绕不过去的城市。大额海外授权交易频繁传出,在中国高端制造走出去的背景下&a…...

FM3773 低功耗离线式恒流/恒压 PSR 控制器

概述 FM3773 是一种高性能的交流/直流用于电池充电器和适配器的电源控制器,内置 850V 功率三极管。该设备采用脉冲频率调制(PFM)的方法来建立非连续导通模式(DCM)反激式电源。 FM3773 提供精确的恒定电压,恒…...

告别数据饥荒:用PyTorch手把手实现原型网络(Prototypical Networks)做电影评论情感分类

告别数据饥荒:用PyTorch手把手实现原型网络做电影评论情感分类 在自然语言处理领域,情感分析一直是热门研究方向,但现实中的开发者常面临一个尴尬困境:标注数据太少。传统深度学习方法动辄需要成千上万的标注样本,而实…...

LizzieYzy:你的智能围棋教练,让AI分析变得简单有趣 [特殊字符]

LizzieYzy:你的智能围棋教练,让AI分析变得简单有趣 🎯 【免费下载链接】lizzieyzy LizzieYzy - GUI for Game of Go 项目地址: https://gitcode.com/gh_mirrors/li/lizzieyzy 还在为复盘找不到关键点而烦恼吗?想提升棋力却…...

全球无障碍宣传日:iOS 26 辅助功能大升级,这些实用小功能你用过吗?

辅助功能发展与升级很多人对辅助功能的印象还停留在 "小白点",但随着 iPhone 进入全面屏时代,它逐渐变得陌生。实际上,Apple 每年都会为其增添功能,方便身体有障人士使用 iPhone。而且,这些功能不仅惠及有障…...