新浪、京东golang一面整理

news2025/7/17 19:32:31

在这里插入图片描述
在这里插入图片描述

Mysql怎么去查询的,什么时候走索引,什么时候不走

在这里插入图片描述

微服务治理

我们要做到服务上下线对调用方无感知,熔断限流需要考虑,还要考虑监控和告警,链路追踪,安全,支持灰度发布、蓝绿部署、快速缩容扩容等。


1. 定义与背景
“微服务治理是一套保障微服务架构高效、稳定运行的机制和规范。随着单体应用拆分为多个独立服务,服务数量增多、交互复杂,治理成为解决服务间通信、监控、故障处理等问题的关键手段。”


2. 核心目标
用关键词概括核心目标,体现结构化思维:

  • 可用性:服务注册发现、负载均衡、容错(熔断、降级)。
  • 可观测性:日志聚合、链路追踪、监控告警。
  • 安全与合规:API鉴权、流量加密、敏感数据保护。
  • 高效协作:统一配置管理、API版本控制、开发规范标准化。
  • 自动化:服务自愈、弹性扩缩容、CI/CD流水线。

3. 关键组件与工具
结合具体技术举例,展现实践经验:

  • 服务发现:Consul(分布式)、Kubernetes Service(云原生)。
  • 配置中心:Spring Cloud Config(Git集成)、Nacos(动态推送)。
  • 流量治理:Istio(服务网格的流量镜像、金丝雀发布)、Sentinel(限流规则可视化)。
  • 容错机制:Hystrix(线程隔离)、Resilience4J(重试策略)。
  • 监控体系:Prometheus(指标采集)+ Grafana(可视化)+ ELK(日志分析)。

4. 治理模式演进
对比不同方案,体现技术选型思考:

  • 传统集中式:Spring Cloud全家桶,适合中小规模,强绑定Java生态。
  • 服务网格(Service Mesh):Istio通过Sidecar代理解耦业务代码,支持多语言,适合复杂云环境。
  • Serverless延伸:如Knative的事件驱动治理,适应无服务器架构。

5. 实际场景举例
用案例说明价值,增强说服力:
“比如在电商系统中,订单服务调用库存服务时,若库存服务宕机,熔断机制可快速失败,避免级联故障;同时,通过链路追踪定位到延迟高的服务节点,优化数据库查询逻辑,提升整体性能。”


6. 挑战与趋势
展现深度思考与行业洞察:

  • 挑战:分布式事务(Saga模式)、多环境配置漂移、服务依赖图谱管理。
  • 趋势:AIOps(智能告警降噪)、混沌工程主动测试、GitOps驱动治理策略版本化。

实现服务的平滑升级

在微服务架构中,实现服务的平滑升级(Zero Downtime Deployment)是保障系统高可用的关键需求。以下是完整的技术实现方案,结合策略、工具和最佳实践:


1. 核心策略

(1) 滚动更新(Rolling Update)
  • 原理:逐步替换旧版本实例,新实例启动并健康后再销毁旧实例。
  • 工具实现
    # Kubernetes Deployment 配置示例
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-service
    spec:
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxSurge: 25%        # 允许临时超出副本数的比例
          maxUnavailable: 25%  # 升级过程中最大不可用比例
      replicas: 4
      template:
        spec:
          containers:
          - name: my-service
            image: my-service:v2.0  # 新版本镜像
            readinessProbe:         # 就绪探针确保新实例可用
              httpGet:
                path: /health
                port: 8080
    
(2) 蓝绿部署(Blue-Green Deployment)
  • 原理:同时运行新旧两套环境,通过流量切换实现瞬间切换。
  • 实现步骤
    1. 部署新版本环境(Green)并验证。
    2. 通过负载均衡器(如Nginx、Istio)将流量从旧环境(Blue)切换到Green。
    3. 确认无问题后下线Blue环境。
  • 工具示例
    # Istio VirtualService 流量切换
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: my-service
    spec:
      hosts:
      - my-service
      http:
      - route:
        - destination:
            host: my-service
            subset: green  # 指向新版本
    
(3) 金丝雀发布(Canary Release)
  • 原理:先让少量用户请求到新版本,逐步扩大范围。
  • 实现方式
    • 流量比例控制:如将5%的流量导向新版本。
    • 按用户特征灰度:如特定Header、用户ID范围。
  • 工具示例
    # Istio 金丝雀发布配置
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: my-service
    spec:
      hosts:
      - my-service
      http:
      - route:
        - destination:
            host: my-service
            subset: v1  # 旧版本
          weight: 95    # 95%流量
        - destination:
            host: my-service
            subset: v2  # 新版本
          weight: 5     # 5%流量
    

golang的gmp

参考:https://www.cnblogs.com/MelonTe/p/18550611
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分布式算法知道哪些

  1. 一致性算法
    Paxos: 用于在不可靠的网络中达成一致。
    Raft: 旨在提供更易理解的一致性算法,简化了 Paxos 的实现。
  2. 负载均衡算法
    轮询(Round Robin): 将请求依次分配给每个节点。
    最少连接数(Least Connections): 将请求分配给当前连接数最少的节点。

Raft

在这里插入图片描述

Paxos

在这里插入图片描述

Mysql了解什么

  • 关系型
  • A 原子性 事务 undo log
  • C 一致性
  • I 隔离性 MVCC next-key lock
  • D 持久性 redo log
  • 锁 :全局锁、表级锁(表锁、元数据锁、意向锁)、行锁(记录锁、间隙锁)
  • 高可用架构 主从复制 集群
    在这里插入图片描述
    在这里插入图片描述

Mysql数据放在什么地方?分引擎讨论,指数据结构的什么位置

在 MySQL 中,数据的物理存储位置和逻辑结构因存储引擎而异。以下是分引擎讨论的详细解析:


1. InnoDB 引擎

物理存储位置
  • 表空间(Tablespace)
    • 系统表空间(ibdata1):存储数据字典(元数据)、Undo Log(回滚日志)等全局信息(默认路径:/var/lib/mysql/ibdata1)。
    • 独立表空间(.ibd 文件):每个表的数据和索引存储在独立的 .ibd 文件中(默认路径:/var/lib/mysql/<database>/<table>.ibd)。
    • 通用表空间(General Tablespace):用户可自定义的表空间,可包含多个表(需手动创建)。
  • 日志文件
    • Redo Log(重做日志)ib_logfile0ib_logfile1,记录事务修改(保证持久性)。
    • Undo Log(回滚日志):默认在系统表空间,也可配置独立存储。
数据结构中的位置
  • 数据行(Row)
    • 存储于 .ibd 文件的**数据页(Page,默认 16KB)**中,页内按主键顺序组织(聚集索引)。
    • 每行数据包含隐藏字段:事务ID(DB_TRX_ID)、回滚指针(DB_ROLL_PTR)、行ID(DB_ROW_ID)。
  • 索引(Index)
    • 主键索引(聚集索引):叶子节点直接存储行数据。
    • 二级索引:叶子节点存储主键值(非数据行本身),需回表查询。
  • 内存结构
    • 缓冲池(Buffer Pool):缓存数据页和索引页,加速读写(内存中)。
    • Change Buffer:缓存非唯一二级索引的变更,减少磁盘随机IO。

2. MyISAM 引擎

物理存储位置
  • 数据文件(.MYD):存储表的所有行数据(默认路径:/var/lib/mysql/<database>/<table>.MYD)。
  • 索引文件(.MYI):存储表的索引结构(默认路径:/var/lib/mysql/<database>/<table>.MYI)。
  • 表结构文件(.frm):存储表定义(所有引擎通用,MySQL 8.0 后改为数据字典)。
数据结构中的位置
  • 数据行
    • 按插入顺序存储在 .MYD 文件中,无聚集索引,数据与索引分离。
    • 行记录为堆表(Heap Table),通过行号(ROWID)定位。
  • 索引
    • B-Tree 索引:存储在 .MYI 文件中,叶子节点指向 .MYD 文件中的行地址(物理偏移量)。
    • 全文索引:基于倒排表实现,独立于 B-Tree 索引。

3. 其他引擎对比

引擎数据存储位置索引结构事务支持适用场景
InnoDB表空间(.ibd)B+Tree(聚集索引)支持OLTP、高并发写入
MyISAM数据文件(.MYD)+ 索引文件(.MYI)B-Tree(非聚集索引)不支持读多写少、全文搜索
Memory内存哈希/B-Tree不支持临时表、缓存
Archive压缩文件(.ARZ)无索引不支持日志归档、高压缩比

系统设计:微信设计(消息和用户,消息具体设计)

  1. 用户管理
    用户模型
    用户 ID: 唯一标识符。
    用户名: 显示名称。
    头像: 用户头像 URL。
    状态: 在线/离线状态。
    好友列表: 存储好友关系(可用图数据库或关系数据库)。
    用户注册与登录
    注册: 通过手机号码或邮箱进行注册,发送验证码以验证身份。
    登录: 支持密码和第三方登录(如微信、QQ)。
  2. 消息管理
    消息模型
    消息 ID: 唯一标识符。
    发送者 ID: 发送消息的用户。
    接收者 ID: 接收消息的用户。
    消息内容: 文本、图片、视频等。
    时间戳: 消息发送时间。
    消息类型: 文本、图片、视频、语音等。
    状态: 已发送、已接收、已读等。
    消息存储
    即时消息: 使用 Redis 进行短期存储,实现快速访问。
    持久化存储: 将消息存储在关系型数据库中,便于查询和历史记录管理。
  3. 消息发送与接收
    发送流程
    用户发送消息请求。
    服务器验证用户状态和接收者状态。
    消息存储到 Redis 作为缓存,持久化到数据库。
    通过 WebSocket 或推送服务将消息推送给接收者。
    接收流程
    接收者通过长连接(WebSocket)或轮询获取新消息。
    消息到达后更新 UI,标记为已读。
    在这里插入图片描述

用Go实现一个死锁

  • 互斥条件
  • 占有并等待条件
  • 不可剥夺条件
  • 环路等待条件
package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	var m1, m2 sync.Mutex
	go func() {
        fmt.Println("a等待1,,,")
		m1.Lock()
		time.Sleep(time.Second)
        fmt.Println("a等待2,,,")
		m2.Lock()
		time.Sleep(time.Second)
		m2.Unlock()
		m1.Unlock()
	}()
	go func() {
        fmt.Println("b等待2,,,")
		m2.Lock()
		time.Sleep(time.Second)
        fmt.Println("b等待1,,,")
        m1.Lock()
		time.Sleep(time.Second)
		m1.Unlock()
		m2.Unlock()
	}()
    select{}
}

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

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

相关文章

[250516] OpenAI 升级 ChatGPT:GPT-4.1 及 Mini 版上线!

目录 ChatGPT 迎来重要更新&#xff1a;GPT-4.1 和 GPT-4.1 mini 正式上线用户如何访问新模型&#xff1f;技术亮点与用户体验优化 ChatGPT 迎来重要更新&#xff1a;GPT-4.1 和 GPT-4.1 mini 正式上线 OpenAI 宣布在 ChatGPT 平台正式推出其最新的 AI 模型 GPT-4.1 和 GPT-4.…

【完整版】基于laravel开发的开源交易所源码|BTC交易所/ETH交易所/交易所/交易平台/撮合交易引擎

功能说明 源码简介与安装环境说明&#xff1a; 开源交易所&#xff0c;基于laravel开发的交易所 | BTC交易所 | ETH交易所 | 交易所 | 交易平台 | 撮合交易引擎。本项目有完整的撮合交易引擎源码、后台管理&#xff08;后端前端&#xff09;、前台&#xff08;交易页面、活动页…

Android Framework学习七:Handler、Looper、Message

文章目录 简介LooperMessageMessageQueueHandlerFramework学习系列文章 简介 Looper当做一台传送装置&#xff0c;MessageQueue是传送带&#xff0c;传送带上放的是Message&#xff0c;Handler用于发送Message分发与接收处理。 Looper frameworks/base/core/java/android/app…

MyBatis:简化数据库操作的持久层框架

1、什么是Mybatis? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由 apachesoftwarefoundation 迁移到了google code,由谷歌托管,并且改名为MyBatis 。 2013年11月迁移到Github。 iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框…

【001】RenPy打包安卓apk 流程源码级别分析

1. 入口在下图 2. SDK版本及代码入口 &#xff08;renpy-8.3.7-sdk&#xff09; 由于SDK一直在升级&#xff0c;本文采用 标题中的版本进行分析&#xff0c;整体逻辑变化不太大。 实际执行逻辑是调用的rapt 2.1 点击按钮实际执行逻辑 def AndroidIfState(state, needed, acti…

物理信息神经网络(PINNs)在悬臂梁分析中的应用研究

一、引言 物理信息神经网络(Physics-Informed Neural Networks, PINNs)是近年来兴起的一种结合深度学习与传统物理建模的创新方法。本文将探讨PINNs在悬臂梁力学分析中的应用&#xff0c;展示如何利用这一技术解决工程力学中的经典问题。 二、PINNs基本原理 PINNs的核心思想是…

论文浅尝 | HOLMES:面向大语言模型多跳问答的超关系知识图谱方法(ACL2024)

笔记整理&#xff1a;李晓彤&#xff0c;浙江大学硕士&#xff0c;研究方向为大语言模型 论文链接&#xff1a;https://arxiv.org/pdf/2406.06027 发表会议&#xff1a;ACL 2024 1. 动机 多跳问答&#xff08;Multi-Hop Question Answering, MHQA&#xff09;技术近年来在自然语…

jenkins使用Send build artifacts over SSH发布jar包目录配置

本测试用ruoyi-plus的代码。 1 [GitLab 自动触发 Jenkins 构建_jenkins构建触发器没有build when a change is pushed to git-CSDN博客](https://blog.csdn.net/wangyiyungw/article/details/81776972) 2 [jenkins使用Send build artifacts over SSH遇到的坑-CSDN博客](https…

uni-app小程序登录后…

前情 最近新接了一个全新项目&#xff0c;是类似商城的小程序项目&#xff0c;我负责从0开始搭建小程序&#xff0c;我选用的技术栈是uni-app技术栈&#xff0c;其中就有一个用户登录功能&#xff0c;小程序部分页面是需要登录才可以查看的&#xff0c;对于未登录的用户需要引…

【深度学习基础】从感知机到多层神经网络:模型原理、结构与计算过程全解析

【深度学习基础】从感知机到多层神经网络&#xff1a;模型原理、结构与计算过程全解析 1. 引言 神经网络的重要性&#xff1a; 作为人工智能的核心技术之一&#xff0c;神经网络通过模拟人脑神经元的工作机制&#xff0c;成为解决复杂模式识别、预测和决策任务的利器。从图像分…

解决Power BI Desktop导入Excel数据第一行不是列标题问题

选中第一行不是列标题的表→鼠标右键→选择编辑查询→进入Power Query界面→点击“将第一行用作标题”→点击左边的“关闭并应用” 第一行就提升为标题了

springboot3.x只需两步快速整合nacos作配置中心

一、下载依赖 我在网上找了各种资料&#xff0c;都是要先确定springcloud版本&#xff0c;实际操作却可能由于版本或者镜像或者maven等问题报红&#xff0c;出现各种情况。 实际只需要指定特定版本号就行&#xff0c;添加下面两个依赖 <dependency><groupId>com.…

<uniapp><vuex><状态管理>在uniapp中,如何使用vuex实现数据共享与传递?

前言 本专栏是基于uniapp实现手机端各种小功能的程序&#xff0c;并且基于各种通讯协议如http、websocekt等&#xff0c;实现手机端作为客户端&#xff08;或者是手持机、PDA等&#xff09;&#xff0c;与服务端进行数据通讯的实例开发。 发文平台 CSDN 环境配置 系统&…

数据湖和数据仓库的区别

在当今数据驱动的时代&#xff0c;企业需要处理和存储海量数据。数据湖与数据仓库作为两种主要的数据存储解决方案&#xff0c;各自有其独特的优势与适用场景。本文将客观详细地介绍数据湖与数据仓库的基本概念、核心区别、应用场景以及未来发展趋势&#xff0c;帮助读者更好地…

【论文阅读 | AAAI 2025 | FD2-Net:用于红外 - 可见光目标检测的频率驱动特征分解网络】

论文阅读 | AAAI 2025 | FD2-Net&#xff1a;用于红外 - 可见光目标检测的频率驱动特征分解网络 1.摘要&&引言2. 方法2.1总体架构2.2特征分解编码器2.3多模态重建机制2.4训练损失 3.实验3.1实验设置3.2主要结果3.3消融研究 4.结论 题目&#xff1a;FD2-Net: Frequency-…

济南国网数字化培训班学习笔记-第三组-1-电力通信传输网认知

电力通信传输网认知 电力通信基本情况 传输介质 传输介质类型&#xff08;导引与非导引&#xff09; 导引传输介质&#xff0c;如电缆、光纤&#xff1b; 非导引传输介质&#xff0c;如无线电波&#xff1b; 传输介质的选择影响信号传输质量 信号传输模式&#xff08;单工…

OAT 初始化时出错?问题可能出在 PAM 配置上|OceanBase 故障排查实践

本文作者&#xff1a;爱可生数据库工程师&#xff0c;任仲禹&#xff0c;擅长故障分析和性能优化。 背景 某客户在使用 OAT 初始化OceanBase 服务器的过程中&#xff0c;进行到 precheck 步骤时&#xff0c;遇到了如下报错信息&#xff1a; ERROR - check current session ha…

1-机器学习的基本概念

文章目录 一、机器学习的步骤Step1 - Function with unknownStep2 - Define Loss from Training DataStep3 - Optimization 二、机器学习的改进Q1 - 线性模型有一些缺点Q2 - 重新诠释机器学习的三步Q3 - 机器学习的扩展Q4 - 过拟合问题&#xff08;Overfitting&#xff09; 一、…

Hass-Panel - 开源智能家居控制面板

文章目录 ▎项目介绍&#xff1a;预览图▎主要特性安装部署Docker方式 正式版Home Assistant Addon方式详细安装方式1. Home Assistant 插件安装&#xff08;推荐&#xff09;2. Docker 安装命令功能说明 &#xff1a;3. Docker Compose 安装升级说明Docker Compose 版本升级 功…

Ubuntu搭建NFS服务器的方法

0 工具 Ubuntu 18.041 Ubuntu搭建NFS服务器的方法 在Ubuntu下搭建NFS&#xff08;网络文件系统&#xff09;服务器可以让我们像访问本地文件一样访问Ubuntu上的文件&#xff0c;例如可以把开发板的根文件系统放到NFS服务器目录下方便调试。 1.1 安装nfs-kernel-server&#…