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

滴滴-golang后端开发-企业事业部门-二面

在这里插入图片描述

简单工厂和抽象工厂的区别 ?

参考:https://www.zhihu.com/question/27125796
在这里插入图片描述

工厂方法模式

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

简单/静态工厂模式

在这里插入图片描述

抽象工厂模式

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

TCP粘包分包?

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

TCP与UDP的区别?

在这里插入图片描述

TCP的头信息组成占用多少的字节 ?

在这里插入图片描述
TCP 头信息(Header)的标准长度是 20 字节,但如果包含可选的选项字段(Options),最大可以扩展到 60 字节。以下是 TCP 头信息的详细组成:


TCP 头信息结构(固定部分:20 字节)

字段占用字节数说明
源端口(Source Port)2 字节发送方的端口号(范围:0~65535)。
目的端口(Destination Port)2 字节接收方的端口号(范围:0~65535)。
序列号(Sequence Number)4 字节当前报文段数据部分的第一个字节的编号。
确认号(Acknowledgment Number)4 字节期望接收的下一个报文段的序列号(仅在 ACK 标志为 1 时有效)。
数据偏移(Data Offset)4 位(0.5 字节)表示 TCP 头部的长度(单位:4 字节),用于定位数据的起始位置。
保留(Reserved)6 位(0.75 字节)保留字段,必须设为 0。
控制标志(Flags)6 位(0.75 字节)包含 6 个标志位:URG、ACK、PSH、RST、SYN、FIN(各占 1 位)。
窗口大小(Window Size)2 字节接收方的接收窗口大小(流量控制)。
校验和(Checksum)2 字节用于检测头部和数据的错误。
紧急指针(Urgent Pointer)2 字节标识紧急数据的末尾位置(仅在 URG 标志为 1 时有效)。
选项(Options,可选)0~40 字节可选字段(如 MSS、窗口缩放因子、时间戳等),长度可变,需按 4 字节对齐填充。
填充(Padding)可变确保选项字段按 4 字节对齐的填充位(全 0)。

关键说明

  1. 固定部分

    • 前 20 字节是 TCP 头的固定部分,所有 TCP 报文必须包含。
    • 数据偏移字段(4 位)的取值范围为 5~15(单位:4 字节),因此 TCP 头的总长度为 (5~15) × 4 = 20~60 字节
  2. 选项字段

    • 常见的选项包括:
      • MSS(Maximum Segment Size):协商最大报文段长度(4 字节)。
      • Window Scale:窗口缩放因子(3 字节)。
      • Timestamp:时间戳(10 字节)。
    • 选项总长度必须为 4 字节的整数倍,不足时用填充(Padding)补齐。

示例

  • 无选项的 TCP 头:20 字节(固定部分)。
  • 带 MSS 和 Window Scale 选项的 TCP 头
    • 固定部分:20 字节。
    • 选项:MSS(4 字节) + Window Scale(3 字节) + 填充(1 字节)= 8 字节。
    • 总长度:20 + 8 = 28 字节

总结

  • 最小长度:20 字节(无选项)。
  • 最大长度:60 字节(选项占满 40 字节)。
  • 选项字段的实际长度取决于具体协议需求(如握手阶段的 SYN 报文通常携带 MSS 等选项)。

TCP可靠性传输通过什么保证?

在这里插入图片描述

滑动窗口机制?

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

TCP为什么三次握手,两次不行?

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

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

mysql中一张表有7条数据,id为1-7,现在删除最大两条,重启mysql,再插入一条数据,这个id是多少?

一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 MySQL 数据库,又插入了一条数据,此时 id 是几?
  一般情况下,我们创建的表的类型是InnoDB,如果新增一条记录(不重启mysql的情况下),这条记录的id是8;但是如果重启(文中提到的)MySQL的话,这条记录的ID是6。因为InnoDB表只把自增主键的最大ID记录到内存中,所以重启数据库或者对表OPTIMIZE操作,都会使最大ID丢失。

但是,如果我们使用表的类型是MylSAM,那么这条记录的ID就是8。因为MylSAM表会把自增主键的最大ID记录到数据文件里面,重启MYSQL后,自增主键的最大ID也不会丢失。

注:如果在这7条记录里面删除的是中间的几个记录(比如删除的是3,4两条记录),重启MySQL数据库后,insert一条记录后,ID都是8。因为内存或者数据库文件存储都是自增主键最大ID

ACID含义?

在这里插入图片描述

mysql左链接右链接内连接的区别?

在 MySQL 中,左连接(LEFT JOIN)、右连接(RIGHT JOIN)和内连接(INNER JOIN) 是三种常见的表关联方式,它们的核心区别在于 匹配规则结果集范围。以下是详细对比:


1. 内连接(INNER JOIN)

  • 作用:返回 两个表中匹配的行
  • 特点
    • 只保留两个表中共有的数据。
    • 不匹配的行会被丢弃。
  • 语法
    SELECT * FROM 表A
    INNER JOIN 表B ON 表A.字段 = 表B.字段;
    
  • 示意图
    | 表A ∩ 表B | → 结果集
    
  • 示例
    查询所有有订单的客户信息(客户表和订单表匹配的记录)。

2. 左连接(LEFT JOIN)

  • 作用:返回 左表所有行 + 右表匹配的行(右表无匹配时填充 NULL)。
  • 特点
    • 左表数据全部保留。
    • 右表无匹配时补充 NULL
  • 语法
    SELECT * FROM 表A
    LEFT JOIN 表B ON 表A.字段 = 表B.字段;
    
  • 示意图
    | 表A | → 结果集(包含表A全部,表B匹配部分)
    
  • 示例
    查询所有客户及其订单信息(包括没有订单的客户)。

3. 右连接(RIGHT JOIN)

  • 作用:返回 右表所有行 + 左表匹配的行(左表无匹配时填充 NULL)。
  • 特点
    • 右表数据全部保留。
    • 左表无匹配时补充 NULL
  • 语法
    SELECT * FROM 表A
    RIGHT JOIN 表B ON 表A.字段 = 表B.字段;
    
  • 示意图
    | 表B | → 结果集(包含表B全部,表A匹配部分)
    
  • 示例
    查询所有订单及其客户信息(包括未关联到客户的订单)。

三者的核心区别

连接类型保留的数据范围未匹配时的填充常见用途
INNER JOIN两表匹配的行不保留精确关联数据(如订单和客户)
LEFT JOIN左表全部 + 右表匹配的行右表填充 NULL保留左表所有记录(如客户分析)
RIGHT JOIN右表全部 + 左表匹配的行左表填充 NULL保留右表所有记录(较少使用)

直观对比(示例场景)

假设有两张表:

  • 表A(客户)

    idname
    1Alice
    2Bob
    3Charlie
  • 表B(订单)

    order_idcustomer_idamount
    1011100
    1023200
不同连接的结果
  1. INNER JOIN(匹配客户和订单):

    | Alice  | 101 | 100 |
    | Charlie| 102 | 200 |
    
  2. LEFT JOIN(所有客户 + 订单信息):

    | Alice   | 101 | 100 |
    | Bob     | NULL| NULL|
    | Charlie | 102 | 200 |
    
  3. RIGHT JOIN(所有订单 + 客户信息):

    | Alice   | 101 | 100 |
    | Charlie | 102 | 200 |
    

使用建议

  1. 优先使用 LEFT JOIN
    右连接可以通过调换表顺序用左连接实现(A RIGHT JOIN B = B LEFT JOIN A)。
  2. 明确需求
    • 需要保留主表数据 → 用左/右连接。
    • 需要精准匹配 → 用内连接。
  3. 性能注意
    外连接(左/右)通常比内连接更耗时,避免对大表无限制使用。

一句话总结

  • INNER JOIN:只要匹配的行。
  • LEFT JOIN:左表全要,右表匹配的才要。
  • RIGHT JOIN:右表全要,左表匹配的才要。

乐观锁和悲观锁?

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

怎么避免死锁?

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

分页和分段管理的区别 ?

分段

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

分页

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

操作系统内存偏高了,怎么分析?用到常用命令?

当操作系统内存使用偏高时,可以通过以下方法和常用命令进行分析:

1. 使用 top 命令

  • 描述:实时查看系统的资源使用情况,包括 CPU 和内存使用。
  • 命令
    top
    
  • 关注点
    • 查看 %MEM 列,了解各个进程的内存占用情况。
    • M 可以按内存使用量排序。

2. 使用 htop 命令

  • 描述:比 top 更加友好的交互式进程查看工具。
  • 命令
    htop
    
  • 关注点
    • 可以直观地看到各个进程的内存使用情况。
    • 支持进程的筛选和排序。

3. 使用 free 命令

  • 描述:查看系统内存的使用情况。
  • 命令
    free -h
    
  • 关注点
    • 查看 totalusedfreeavailable 内存。
    • -h 选项可以以人类可读的格式输出。

4. 使用 vmstat 命令

  • 描述:查看系统的内存、进程、IO 等状态。
  • 命令
    vmstat 1
    
  • 关注点
    • 每秒更新一次内存和进程状态。
    • 查看 siso 列,了解交换内存的情况。

5. 使用 ps 命令

  • 描述:查看当前运行的进程及其资源使用情况。
  • 命令
    ps aux --sort=-%mem | head
    
  • 关注点
    • 显示内存使用最多的前几个进程。

6. 使用 smem 命令

  • 描述:查看每个进程的共享内存和独占内存使用情况。
  • 命令
    smem -r -k
    
  • 关注点
    • 计算出实际的内存使用情况,考虑了共享内存。

7. 使用 sar 命令

  • 描述:收集和报告系统活动信息。
  • 命令
    sar -r 1 3
    
  • 关注点
    • 显示内存使用情况,提供历史数据。

8. 检查系统日志

  • 描述:查看系统日志以获取内存使用异常的线索。
  • 命令
    dmesg | grep -i "memory"
    journalctl -xe
    

分析步骤

  1. 使用 tophtop 确定高内存使用的进程。
  2. 使用 freevmstat 检查整体内存状态。
  3. 使用 pssmem 深入分析具体进程的内存使用情况。
  4. 查看系统日志以查找潜在的内存泄漏或错误。

通过这些工具和命令,可以有效地分析和诊断内存使用偏高的问题。

一个文件,第9列有很多数字,统计一下前十的数字有哪些?(linux命令)

参考:https://blog.csdn.net/weixin_48539059/article/details/131379880
在这里插入图片描述
在这里插入图片描述

sed -n '8p' text.log | grep -o '[0-9]\+' | sort -n
1
1
1
2
2
2
2
3
4
5
9
34
sed -n '8p' text.log | grep -o '[0-9]\+' | sort -n | uniq -c | sort -k11 31 341 41 51 93 14 2
sed -n '8p' text.log | grep -o '[0-9]\+' | sort -n | uniq -c | sort -k1,1nr4 23 11 31 341 41 51 9

1-100首尾相接,每隔四个剔除出一个,最后剩一个

https://leetcode.cn/problems/W7yuXW/

type ListNode1 struct{val intnext *ListNode1
}
func Joseph_circle(people []int, k int) []int {ans := []int{}n := len(people)if n==0{return ans}idx := 0// 构建初始列表head := &ListNode1{val:people[0]}q := headfor i:=1;i<n;i++{q.next = &ListNode1{val:people[i]}q = q.next}last := qq.next = headq = headfor len(ans)<n{idx ++if idx%k==0{ans = append(ans, q.val)last.next = q.next}last = qq = q.next}return ans
}

相关文章:

  • 黑盒测试——等价类划分法实验
  • 日常记录-logback脱敏
  • 准确--CentOS 7 配置 Chrony 同步阿里云 NTP 时间服务器及手动同步指南
  • 代理设计模式:从底层原理到源代码的详细解释
  • opencv图像的梯度处理,边缘检测
  • 基于国产 FPGA+ 龙芯2K1000处理器+翼辉国产操作系统继电保护装置测试装备解决方案
  • 联邦元学习实现个性化物联网的框架
  • 类加载器与jvm的内存
  • 【数学建模】孤立森林算法:异常检测的高效利器
  • 3.1goweb框架gin下
  • 大模型学习笔记------Llama 3模型架构之分组查询注意力(GQA)
  • 轻量级别的htpp客户端--Forest
  • Mysql 读写分离(3)之 schema.xml基本配置
  • Linux系统之----进程的概念
  • 【动手学强化学习】番外8-IPPO应用框架学习与复现
  • [预备知识]4. 概率基础
  • DES、3DES、SM4 加密算法简介
  • 【RuleUtil】适用于全业务场景的规则匹配快速开发工具
  • Post-Processing PropertySource instance详解 和 BeanFactoryPostProcessor详解
  • 信息系统项目管理师_第十三章 项目干系人管理
  • 我国对国家发展规划专门立法
  • 政治局会议深读|首提“持续巩固房地产市场稳定态势”,楼市政策还有哪些优化空间
  • 云南鲁甸县一河滩突然涨水致4死,有人在救人过程中遇难
  • 印巴在克什米尔实控线附近小规模交火,巴防长发出“全面战争”警告
  • 对排出黑烟车辆出具合格报告,广州南沙一检测公司被罚十万元
  • 神二十成功对接空间站