有php转go项目经验者优先?

新的一周又来了,今天分享的是上海某公司的一面面经,内容主要就是go、mysql和项目,职位要求如下:

发现一个很有意思的点—有php转go项目经验者优先。想不到还有这种好事,本人就是php转go,跟我有相同经历的朋友可以加我微信,我们一起聊聊。

面试问题

Go 相关

往已关闭的channel里读写数据会发生什么?
  • 写操作:向已关闭的channel写入数据会导致运行时panic。
  • 读操作:从已关闭的channel读取数据会立即返回,如果channel中还有值,则按顺序返回剩余值;当channel为空后,读操作将返回channel类型的零值。
Channel的底层原理

Go语言中的channel是通过一个结构体实现的,这个结构体包含了一个队列来存储发送到channel的数据元素。当一个goroutine向channel发送数据时,数据会被添加到这个队列中;另一个goroutine从channel接收数据时,它会从队列中移除数据。channel可以是带缓冲或无缓冲的,无缓冲channel在发送方和接收方同步时直接传递数据,而带缓冲channel则允许在没有接收方的情况下暂存数据。

GMP调度

Go的并发模型基于Goroutines(G)、M(Machine)和P(Processor)。每个程序开始时都会创建一个运行时,运行时负责管理所有的Goroutines。P代表逻辑处理器,用于执行任务;M是一个操作系统线程,可以执行用户代码或运行时代码;G是用户定义的goroutine。运行时使用工作窃取算法来平衡各个P上的负载,确保高效利用多核处理器。

Go的协程之间要如何通信?

Go推荐使用channel进行协程间的通信。通过channel,协程可以安全地交换数据而无需担心竞态条件。此外,也可以使用互斥锁等同步原语来保护共享资源。

MySQL 相关

Explain里哪些指标需要关注?

在MySQL的EXPLAIN输出中,应该关注以下指标:

  • type:连接类型,显示了表之间的连接方式,如全表扫描、索引扫描等。
  • key:实际使用的索引。
  • rows:查询优化器估计为了找到所需行必须检查的行数。
  • Extra:提供了关于MySQL如何解析查询的额外信息,例如是否使用临时表、排序等。
这些指标对SQL性能从低到高分别有哪些?
  • 全表扫描(ALL)通常是最慢的,因为它需要扫描整个表。
  • 索引范围扫描(range)比全表扫描快,但仍可能涉及大量行。
  • 使用索引(ref, eq_ref, const)可以显著提高查询速度,因为它们限制了需要访问的行数。
  • 索引覆盖(index)是指查询可以在索引树中完成,而不需要回表查找数据,这通常是最快的。
MySQL的事务了解吗?什么是事务的ACID?

事务是一系列操作,作为一个整体一起成功或者一起失败。ACID是事务的四个基本特性:

  • 原子性(Atomicity):事务的所有操作要么全部完成,要么完全不发生。
  • 一致性(Consistency):事务前后数据库保持一致状态。
  • 隔离性(Isolation):并发事务的执行结果与串行执行的结果相同。
  • 持久性(Durability):一旦事务提交,其效果就是永久性的,即使系统发生故障也不会改变。
事务的ACID分别是怎么保证的?
  • 原子性:通过事务日志记录事务的操作,如果事务失败,可以根据日志回滚到事务开始前的状态。
  • 一致性:通过约束机制确保事务执行前后数据的一致性。
  • 隔离性:通过锁定机制或其他并发控制策略来实现,比如MVCC(多版本并发控制)。
  • 持久性:事务提交后,确保数据已经写入到持久存储中,即使系统崩溃也能恢复。
Redo Log、Undo Log、BinLog有哪些区别?
  • Redo Log:重做日志,用于记录事务对数据页所做的修改,以便在实例恢复时能够重做这些修改,保证数据的持久性和一致性。
  • Undo Log:撤销日志,用于支持事务的回滚操作,并且在MVCC中用于提供事务开始时的数据快照。
  • BinLog:二进制日志,记录了所有更改数据库的数据事件,用于数据恢复、复制和审计。
BinLog文件有几种格式类型?分别有哪些优劣?
  • Statement:记录的是SQL语句,适用于大多数情况,但不能处理某些非确定性操作,如UUID()函数。
  • Row:记录的是每行数据的变化,可以准确地反映数据变化,但日志量较大。
  • Mixed:结合了前两种格式的优点,自动选择合适的格式来记录日志。
主从复制的原理是什么?复制的类型有几种?

主从复制的基本原理是主服务器将更改操作记录到二进制日志中,从服务器通过I/O线程读取这些日志并保存到本地的中继日志,然后通过SQL线程执行这些日志中的操作来保持与主服务器数据的一致性。

复制类型主要有:

  • 异步复制:最常用的复制方式,主服务器不等待从服务器确认即可继续处理新的请求。
  • 半同步复制:主服务器在收到至少一个从服务器的确认后才会认为事务已提交。
  • 同步复制:所有从服务器都确认后主服务器才提交事务,这种方式延迟较高。
数据写入redo log是不是一定不会丢失?

不是绝对的。虽然redo log是设计用来防止数据丢失的,但如果在数据写入redo log后但在数据真正持久化之前系统发生故障,仍然可能导致数据丢失。但是,一旦事务提交并且redo log条目已经被写入磁盘,那么即使系统崩溃,恢复过程中也可以根据这些日志恢复未完成的事务。

Buffer Pool是什么?有什么作用?Buffer Pool满了之后会发生什么?
  • Buffer Pool:是InnoDB存储引擎中的内存区域,用于缓存表的数据和索引页面,目的是减少磁盘I/O操作,提高查询性能。
  • 作用:加快数据检索速度,减少磁盘读写次数。
  • 满了之后:当Buffer Pool满时,InnoDB会使用LRU(最近最少使用)算法来替换旧的数据页,为新读取的数据页腾出空间。如果数据页被频繁访问,可能会导致频繁的页面替换,从而影响性能。

项目

  1. 为什么要重构?
  2. 项目中的业务流程问题你是怎么梳理的?用哪些工具梳理?
  3. 为什么通过canal与binlog来校验和修复数据?你还有其他方案吗?
  4. 是采用批量校验吗?
  5. 重构的周期大概多久?
  6. 分片计算肯定要消耗大量资源,这里你一共部署来几台实例呢?
  7. 项目中你是如何进行深度分页优化的?除了用lastId,有没有其他方案?
  8. 谈谈你对DDD的理解

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

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

相关文章

【AI换脸整合包及教程】AI 换脸新潮流:FaceFusion 3.0.0,开启无限创意之旅

在科技飞速发展的今天,人工智能已经深入到我们生活的各个角落。其中,AI 换脸技术以其惊人的创造力和趣味性,吸引了无数人的目光。而在众多 AI 换脸工具中,FaceFusion 3.0.0 脱颖而出,成为了引领潮流的佼佼者。 一、AI …

【智慧中控项目】

智慧中控 前言一、搭建开发环境1.需要做什么?1.1 刷机和启动OrangePi Zero2(全志H616芯片)1.2 在PC上安装虚拟机VM(安装VirtualBox或VMware:这是常用的虚拟机软件工具)1.3 在虚拟机VM(VirtualBo…

“短线看涨”,上升周期中,抓以小波段行情,落袋为安

使用技巧 短线看涨指标属于副图公式,短线怎么操作?看蓝色短期安全线 这个公式主要是在上升周期中,抓以小波段行情为主,落袋为安 弱水三千 只取一瓢 公式 DIFM:(EMA(C,240)-EMA(C,520)); DEAM:EMA(DIFM,180); MACD&#xff08…

21_双端 diff 算法

目录 双端比较的原理非理想状况的处理方式添加新元素移除不存在的元素 在上一节中,我们实现了简单的 diff 算法,简单的 diff 算法利用 key 属性,尽可能的复用 DOM 元素,并通过移动 DOM 元素来完成更新,从而减少不断创建…

微服务实战系列之玩转Docker(十六)

导览 前言Q:基于容器云如何实现高可用的配置中心一、etcd入门1. 简介2. 特点 二、etcd实践1. 安装etcd镜像2. 创建etcd集群2.1 etcd-node12.2 etcd-node22.3 etcd-node3 3. 启动etcd集群 结语系列回顾 前言 Docker,一个宠儿,一个云原生领域的…

注册信息的提交

动态网页是指能够根据用户的操作或输入动态变化的网页。与静态网页相比,动态网页具有交互性和可变性。 一 动态网页概念 动态网页通常使用脚本语言(如JavaScript)与服务器进行交互,从服务器获取数据并动态更新网页内容。常见的动…

aws 部署测试环境服务+ip域名绑定

aws 部署springboot vue ip域名绑定域名 1.新建实例之后,作为测试环境开放mysql入出站规则,route53域名,红框中放入阿里云域名 1.设置出入站规则 实例应用安全组 2.mysql aws部署,redis,java环境,参见之前文章腾讯…

《数字图像处理基础》学习05-数字图像的灰度直方图

目录 一,数字图像的数值描述 1,二值图像 2,灰度图像 3,彩色图像 二,数字图像的灰度直方图 一,数字图像的数值描述 在之前的学习中,我知道了图像都是二维信息&…

书生大模型第四期 | L0G3000 git 基础知识

1、破冰行动 fork项目 PR链接:跳转访问 https://github.com/InternLM/Tutorial/pull/21632、构建个人项目 创建一个仓库保存LLM学习的笔记,以md文件为主 博客页面项目

使用 OpenTelemetry 定制跨度名称并丰富跨度而无需更改代码 - 第 1 部分

作者:来自 Elastic David Hope OpenTelemetry Collector 提供强大的功能,可以在遥测数据到达可观察性工具之前丰富和细化遥测数据。在这篇博文中,我们将探讨如何利用 Collector 在 Elastic Observability 中创建更有意义的 transaction 名称&…

成都睿明智科技有限公司正规吗靠谱吗?

在这个短视频风起云涌的时代,抖音电商以其独特的魅力,成为了无数商家竞相追逐的新蓝海。而在这片浩瀚的商海中,成都睿明智科技有限公司犹如一艘装备精良的航船,引领着众多企业破浪前行,探索抖音电商的无限可能。今天&a…

GHuNeRF: Generalizable Human NeRF from a Monocular Video

研究背景 研究问题:这篇文章要解决的问题是学习一个从单目视频中泛化的人类NeRF模型。尽管现有的泛化人类NeRF已经取得了令人印象深刻的成果,但它们需要多视图图像或视频,这在某些情况下可能不可用。此外,一些基于单目视频的人类…

中聚企服:打造智能企业服务助手,“中聚AI”解答一切企业难题

近日,一款专为企业用户设计的智能问答助手——“中聚AI”正式亮相市场。这款AI由中产聚融有限公司旗下的中聚企服团队自主研发,旨在帮助企业用户快速、高效地解答经营过程中的各种难题,覆盖从公司注册、财税规划到知识产权和资质办理等多领域…

手把手教你轻松掌握~Air780E软件UDP应用示例!快来看!

还不会的小伙伴看过来!通过本文的介绍,相信大家已经掌握了Air780E模组UDP应用的基本操作和常见问题的解决方法。赶快动手实践吧,让你的项目更加高效稳定! 1、UDP概述 UDP(用户数据报协议,UserDatagramProt…

Win10搭建SFTP服务器

1、下载安装 Release v9.5.0.0p1-Beta PowerShell/Win32-OpenSSH GitHub 下载OpenSSH-Win64.zip 解压之后放入到:C:\Program Files (x86)\OpenSSH-Win64以管理员身份打开CMD进入到 C:\Program Files (x86)\OpenSSH-Win64 文件夹执行命令 powershell.exe -Exec…

1分钟解决Excel打开CSV文件出现乱码问题

一、编码问题 1、不同编码格式 CSV 文件有多种编码格式,如 UTF - 8、UTF - 16、ANSI 等。如果 CSV 文件是 UTF - 8 编码,而 Excel 默认使用的是 ANSI 编码打开,就可能出现乱码。例如,许多从网络应用程序或非 Windows 系统生成的 …

构建灵活、高效的HTTP/1.1应用:探索h11库

文章目录 构建灵活、高效的HTTP/1.1应用:探索h11库背景这个库是什么?如何安装这个库?库函数使用方法使用场景常见的Bug及解决方案总结 构建灵活、高效的HTTP/1.1应用:探索h11库 背景 在现代网络应用中,HTTP协议是基础…

【算法】C++深度优先搜索(DFS)全解析

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

汽车免拆诊断案例 | 2010款起亚赛拉图车发动机转速表指针不动

故障现象  一辆2010款起亚赛拉图车,搭载G4ED 发动机,累计行驶里程约为17.2万km。车主反映,车辆行驶正常,但组合仪表上的发动机转速表指针始终不动。 故障诊断  接车后进行路试,车速表、燃油存量表及发动机冷却温度…

【环境搭建】Apache ZooKeeper 3.8.4 Stable

软件环境 Ubuntu 20.04 、OpenJDK 11 OpenJDK 11(如果已经安装,可以跳过这一步) 安装OpenJDK 11: $ sudo apt-get update$ sudo apt-get install -y openjdk-11-jdk 设置 JAVA_HOME 环境变量: $ sudo gedit ~/.bash…