百度golang研发一面面经

news2025/6/4 19:51:43

输入一个网址,到显示界面,中间的过程是怎样的

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

IP 报文段的结构是什么

在这里插入图片描述

Innodb 的底层结构

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

知道几种设计模式

  • 工厂模式
    • 简单工厂模式:根据传入类型参数判断创建哪种类型对象
    • 工厂方法模式:由子类决定实例化哪个类
    • 抽象工厂模式:创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类
      在这里插入图片描述
  • 单列模式:确保一个类只有一个实例,并提供一个全局访问点来访问该实例。
  • 建造者模式:在软件系统中,一个复杂对象的创建通常由多个部分组成,这些部分的组合经常变化,但组合的算法相对稳定。
  • 观察者模式:创建了对象间的一种一对多的依赖关系,当一个对象状态改变时,所有依赖于它的对象都会得到通知并自动更新。

单例模式的应用场景

单例模式的核心在于确保一个类只有一个实例,并提供全局访问点。它适用于那些需要严格控制资源访问、保证状态一致或避免重复创建开销的场景。以下是其典型使用场景:

  1. 访问共享资源或硬件:

    • 数据库连接池: 创建多个数据库连接开销巨大。单例的数据库连接池管理所有连接,确保高效复用,避免资源耗尽。
    • 日志记录器: 应用所有部分都需要写入同一个日志文件。单例日志器保证所有日志消息被顺序、一致地写入同一个目标文件,避免并发写入冲突。
    • 打印机后台处理程序: 多个打印任务需要有序排队处理同一个物理打印机。单例的后台处理程序管理队列,确保一次只有一个任务访问打印机。
    • 文件系统/硬件驱动: 访问物理资源(如特定硬件设备、配置文件)通常需要唯一访问点,单例确保请求被有序处理且状态一致。
  2. 全局配置管理器:

    • 应用配置(如数据库URL、API密钥、应用设置)通常只需加载一次并在全局共享。单例配置管理器在启动时加载配置,并提供全局访问点,确保所有组件使用同一份、最新的配置信息,避免重复读取文件或解析的开销。
  3. 缓存:

    • 应用级缓存(如内存缓存)需要被所有组件访问和更新。单例缓存实例确保所有组件共享同一份缓存数据,提高访问速度,并可通过单例集中管理缓存的失效、刷新策略。
  4. 上下文对象:

    • 运行时上下文信息(如Web应用中的当前用户会话、应用上下文、线程池)通常在整个应用生命周期或特定作用域内需要唯一且全局可访问。单例(或结合ThreadLocal实现的线程单例)能有效管理这类状态。

关键特征总结(判断是否适用单例):

  • 全局唯一性: 系统中确实必须只有一个该类的实例存在。
  • 全局访问: 该实例需要被系统中的许多不同部分方便地访问。
  • 控制共享资源: 需要管理对共享资源(数据库、文件、硬件)的并发访问。
  • 集中管理状态: 需要维护一份全局共享、一致的状态或配置信息。
  • 昂贵初始化: 对象创建和销毁开销非常大,需要严格控制创建次数。

重要注意事项(避免滥用):

  • 测试困难: 单例的全局状态使得单元测试复杂化(测试之间状态污染)。可通过依赖注入(注入单例接口的模拟实现)或提供重置机制来缓解。
  • 隐藏依赖: 单例通过全局访问点引入依赖,破坏了代码的显式依赖关系,降低了可读性和可维护性。
  • 违反单一职责原则: 单例类除了自身业务逻辑,还承担了控制实例化的责任。
  • 潜在并发问题: 多线程环境下需要小心实现(双重检查锁定、静态内部类、枚举等),确保线程安全。
  • 过度全局化: 不是所有“只需要一个”的对象都适合单例。如果对象作用域有限(如请求作用域),考虑其他模式(如依赖注入容器管理作用域)。

观察者模式

拍卖系统:拍卖师作为主题,竞价者作为观察者,拍卖价格更新时通知所有竞价者。
观察者模式(Observer Pattern)是一种行为设计模式,用于定义对象之间的一对多依赖关系,使得当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。以下是对观察者模式的详细介绍:

1. 结构

观察者模式主要包含以下几个角色:

  • 主题(Subject): 被观察的对象,维护观察者的列表,并提供添加、删除观察者的方法。
  • 观察者(Observer): 依赖于主题的对象,定义一个更新接口,以便在主题状态改变时进行通知。
  • 具体主题(Concrete Subject): 实现主题接口,维护状态并在状态变化时通知所有观察者。
  • 具体观察者(Concrete Observer): 实现观察者接口,接收主题的通知并作出相应的处理。

2. 工作原理

  1. 注册观察者: 观察者通过主题的注册方法订阅主题。
  2. 状态变化: 当主题的状态发生变化时,主题会调用所有注册观察者的更新方法。
  3. 通知观察者: 观察者在收到通知后,可以获取主题的新状态并作出相应的反应。

3. 使用场景

  • 事件驱动系统: 例如 GUI 组件中的事件监听。
  • 数据模型: 在 MVC(模型-视图-控制器)架构中,模型状态变化时通知视图更新。
  • 消息推送: 实现消息订阅和推送机制,如社交媒体应用中的通知。
  • 实时数据监控: 例如股票价格变化时通知投资者。

4. 优缺点

优点
  • 解耦: 观察者与主题之间松散耦合,易于扩展和维护。
  • 动态性: 可以在运行时动态添加或移除观察者。
缺点
  • 性能问题: 如果观察者数量众多,通知所有观察者可能会造成性能开销。
  • 循环依赖: 如果观察者与主题之间存在循环依赖,可能导致不必要的复杂性。

总结

观察者模式是一种强大且灵活的设计模式,适用于需要实现对象间动态交互的场景。通过定义清晰的接口和方法,观察者模式能够有效地管理对象之间的关系,提高代码的可维护性和可扩展性。

既然 IP 层会分片,为什么 TCP 层还需要 MSS 呢?

在这里插入图片描述

如何优化 TIME_WAIT?

  • 复用处于 TIME_WAIT 的 socket 为新的连接所用
  • 当系统中处于 TIME_WAIT 的连接一旦超过net.ipv4.tcp_max_tw_buckets(默认18000)值时, 系统就会将后面的 TIME_WAIT 连接状态重置
  • 程序中使用 SO_LINGER跳过time_wait 直接调用close 发送RST

服务器出现大量 TIME_WAIT 状态的原因有哪些?

  • http没有使用长连接
  • http长连接超时
  • 长连接数量请求达到上限

服务器出现大量 CLOSE_WAIT 状态的原因有哪些?

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

如果已经建立了连接,但是客户端突然出现故障了怎么办?

保活机制,探测报文
在这里插入图片描述

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

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

相关文章

TC3xx学习笔记-启动过程详解(一)

文章目录 前言Firmware启动过程BMHD Check流程ABM启动Internal Flash启动Bootloader ModeProcessing in case no valid BMHD foundProcessing in case no Boot Mode configured by SSW 总结 前言 之前介绍过UCB BMHD的使用,它在启动过程中起着重要的作用&#xff0…

Scratch节日 | 六一儿童节抓糖果

六一儿童节怎么能没有糖果?这款 六一儿童节抓糖果 小游戏,让你变身小猫,开启一场甜蜜大作战! 🎮 游戏玩法 帮助小猫收集所有丢失的糖果,收集越多分数越高! 小心虫子一样的“坏糖果”&#xff…

通信算法之280:无人机侦测模块知识框架思维导图

1. 无人机侦测模块知识框架思维导图, 见文末章节。 2. OFDM参数估计,基于循环自相关特性。 3. 无人机其它参数估计

【Doris基础】Apache Doris中的Coordinator节点作用详解

目录 1 Doris架构概述 2 Coordinator节点的核心作用 2.1 查询协调与调度 2.2 执行计划生成与优化 2.3 资源管理与负载均衡 2.4 容错与故障恢复 3 Coordinator节点的关键实现机制 3.1 两阶段执行模型 3.2 流水线执行引擎 3.3 分布式事务管理 4 Coordinator节点的高可…

【Kubernetes-1.30】--containerd部署

文章目录 一、环境准备1.1 三台服务器1.2 基础配置(三台机通用)1.3 关闭 Swap(必须)1.4 关闭防火墙(可选)1.5 加载必要模块 & 配置内核参数 二、安装容器运行时(containerd 推荐&#xff09…

相机--相机标定

教程 内外参公式及讲解 相机标定分类 相机标定分为内参标定和外参标定。 相机成像原理 相机成像畸变 链接 四个坐标系的转变 内参标定 内参 相机内参通常用一个 33 矩阵(内参矩阵,KK)表示,形式如下: (1)焦距&…

MongoDB(七) - MongoDB副本集安装与配置

文章目录 前言一、下载MongoDB1. 下载MongoDB2. 上传安装包3. 创建相关目录 二、安装配置MongoDB1. 解压MongoDB安装包2. 重命名MongoDB文件夹名称3. 修改配置文件4. 分发MongoDB文件夹5. 配置环境变量6. 启动副本集7. 进入MongoDB客户端8. 初始化副本集8.1 初始化副本集8.2 添…

131. 分割回文串-两种回溯思路

我们可以将字符串分割成若干回文子串,返回所有可能的方案。如果将问题分解,可以表示为分割长度为n-1的子字符串,这与原问题性质相同,因此可以采用递归方法解决。 为什么回溯与递归存在联系?在解决这个问题时&#xff0…

[Java恶补day13] 53. 最大子数组和

休息了一天,开始补上! 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 示例 1: 输入:nums …

摩尔投票算法原理实现一文剖析

摩尔投票算法原理&实现一文剖析 一、算法原理1.1 基本思想1.2 数学原理 二、算法实现2.1 Python实现2.2 Java实现2.3 C实现 三、复杂度分析四、应用场景4.1 多数元素问题4.2 扩展应用:寻找出现次数超过n/3的元素 五、算法优势与注意事项5.1 优势5.2 注意事项 总…

MyBatis操作数据库(2)

1.#{}和${}使用 Interger类型的参数可以看到这里显示的语句是:select username,password,age,gender,phone from userinfo where id? 输入的参数并没有在后面进行拼接,,id的值是使用?进行占位,这种sql称之为"预编译sql".这里,把#{}改成${}观察情况:这里可以看到…

C++面向对象(二)

面向对象基础内容参考: C面向对象(一)-CSDN博客 友元函数 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定…

【C语言入门级教学】冒泡排序和指针数组

文章目录 1.冒泡排序2.⼆级指针3.指针数组4.指针数组模拟⼆维数组 1.冒泡排序 冒泡排序的核⼼思想:两两相邻的元素进⾏⽐较。 //⽅法1 void bubble_sort(int arr[], int sz)//参数接收数组元素个数 { int i 0;for(i0; i-1; i) { int j 0; for(j0; j-1; j) { …

shell脚本中常用的命令

一、设置主机名称 通过文件的方式修改通过命令修改 二、nmcli 查看网卡 ip a s ens160 (网卡名称) ifconfig ens160 nmcli device show ens160 nmcli device status nmcli connection show ens160 2.设置网卡 a)当网卡没有被设置时 b)网卡被设定,需要修改 三…

Nuxt3部署

最近接了一个项目,需要用到 nuxt3 技术来满足甲方所要求的需求,在部署的时候遇到了很多问题,这里我一一给大家讲述部署流程,以及所遇到的坑 打包部署 部署分为俩种方式: 静态(spa)部署 和 ssr部署 静态部署 静态部…

网络攻防技术一:绪论

文章目录 一、网络空间CyberSpace1、定义2、基本四要素 二、网络空间安全1、定义2、保护对象3、安全属性4、作用空间 三、网络攻击1、攻击分类2、攻击过程 四、网络防护1、定义2、安全模型3、安全服务5类4、特定安全机制8种5、普遍性安全机制5种 五、网络安全技术发展简史1、第…

【人工智能】deepseek七篇论文阅读笔记大纲

七篇文章看了整整五天,加上整理笔记和问ds优化,大致的框架是有了。具体的公式细节比较多,截图也比较麻烦,就不列入大纲去做笔记了。 DeepSeek-LLM:一切的起点,所以探索的东西比较多,包括&#x…

【算法】分支限界

一、基本思想 (分支限界, 分枝限界, 分支界限 文献不同说法但都是一样的) 分支限界法类似于回溯法,也是一种在问题的解空间树上搜索问题解的算法。 但一般情况下,分支限界法与回溯法的求解目标不同。回溯…

数据库管理与高可用-MySQL全量,增量备份与恢复

目录 #1.1MySQL数据库备份概述 1.1.1数据备份的重要性 1.1.2数据库备份类型 1.1.3常见的备份方法 #2.1数据库完全备份操作 2.1.1物理冷备份与恢复 2.1.2mysqldump备份与恢复 2.1.3MySQL增量备份与恢复 #3.1制定企业备份策略的思路 #4.1扩展:MySQL的GTID 4.1.1My…

从gitee仓库中恢复IDEA项目某一版本

神奇的功能&#xff01;&#xff01;&#xff01;代码改乱了&#xff0c;但是还有救&#xff01; 打开终端&#xff0c;输入git log 复制想要恢复版本的提交哈希值&#xff0c;打开终端输入git reset --hard <哈希值> &#xff0c;就能修复到那时的提交版本了