面试(gin框架,操作系统)

585 阅读13分钟

gin框架有关面试题

1.请简要介绍一下Gin框架以及它的优点。

Gin框架是一种基于Go语言的轻量级Web框架,具有高效、快速、易用等优点。Gin采用了类似于Express.js的中间件机制,并提供了简单易用的路由、错误处理、模板引擎等功能

2.Gin支持哪些HTTP请求方式?

Gin框架支持常见的HTTP请求方式,包括GET、POST、PUT、PATCH、DELETE、HEAD和OPTIONS。这些请求方式可以通过使用gin.Context对象的方法来处理请求,例如c.Request.Method获取当前请求的HTTP方法。

3.如何在Gin中处理GET和POST请求参数?

在Gin中,可以通过c.Query()方法获取GET请求参数,该方法返回一个字符串类型的值,也可以通过c.DefaultQuery()方法设置默认值。对于POST请求,可以通过c.PostForm()或c.DefaultPostForm()方法获取POST请求参数,其中c.PostForm()方法只能解析Content-Type为application/x-www-form-urlencoded的表单数据,而c.DefaultPostForm()方法除了可以解析该类型的表单数据外,还可以解析multipart/form-data类型的表单数据。

4.Gin框架中如何实现路由?

Gin框架通过路由来确定函数执行的路径,可以使用router := gin.Default()创建默认路由组,然后使用router.GET()、router.POST()等方法添加不同请求方式的路由。路由可以包含参数,例如/:name可以匹配任意名称的路径片段,并将该片段存储在name变量中。

5.如何在Gin中处理文件上传?

Gin框架可以通过c.SaveUploadedFile()方法来处理文件上传,该方法需要传递两个参数:表单中的文件字段名和保存的文件名。此外,Gin框架还可通过c.FormFile()方法来获取上传的文件对象,该方法返回一个multipart.FileHeader类型的值。

6.Gin框架中间件有哪些常见用途?有什么作用?(中间件简单理解应该就是一个函数能够实现某种功能)

Gin框架的中间件可用于添加日志、认证、数据校验、跨域访问等常见功能。可以通过使用gin.Use()方法来添加全局中间件,也可以通过group.Use()方法在指定路由组中添加中间件。中间件可以通过gin.Context对象来访问请求和响应上下文。

中间件 middlewares 在 Gin框架 起到了 功能层 的作用。 当用户提交了 数据请求 时,功能层 负责将这些请求进行 预处理,再向数据库发出 数据交互。

7.Gin框架与其他常用Go web框架(例如Beego、Echo等)的区别是什么?

相较于其他常用的Go web框架,如Beego、Echo等,Gin框架更加轻量级,具有更快的性能和更好的扩展性能力。Gin框架的API设计与其他框架相比更加简洁明了,使用起来更加方便快捷。

8.如何在Gin中使用模板引擎?

Gin框架内置了多种模板引擎,包括HTML、JSON、XML等格式,可以通过c.HTML()、c.JSON()、c.XML()等方法来渲染页面。Gin框架还支持自定义模板引擎,可以通过gin.SetHTMLTemplate()方法将自定义的模板引擎注册到Gin框架中。

9.Gin框架的错误处理机制是怎样的?

Gin框架的错误处理机制主要是通过中间件来处理异常,同时还可以通过panic/recover机制处理运行时异常。Gin框架提供了很多钩子函数和回调函数,可以帮助开发者实现自定义的错误处理逻辑。

10.Gin框架如何处理并发请求?

Gin框架默认使用多协程处理并发请求,每个请求都会被分配到一个独立的协程中执行,可以充分利用CPU资源提高并发处理能力。此外,Gin框架还提供了异步HTTP请求处理的功能,可以通过使用context.Context对象来控制异步请求的超时时间和取消操作。

11.你还知道那些框架 (Echo、Beego)?有什么特点?

Echo: 比 gin框架 更轻量, 非常适合于开发 轻量级的微服务。 Beego: 模块很全, 适合开发 工业级项目。

12.Gin框架的开发步骤?

1.加载配置: 通过 github.com/spf13/viper 指定 配置文件,并从 配置文件 中加载 配置信息。 2.初始化 MySQL 配置、Redis 配置、日志 配置等。 3.初始化路由配置,注册路由。 4.启动项目: r.Run()。

13.Gin框架如何实现跨域?

1.写一个 中间件 来配置 跨域。通过 router.Use 方法使用了一个中间件来处理跨域请求。在中间件中,设置了必要的 CORS 头部信息,如 "Access-Control-Allow-Origin"、"Access-Control-Allow-Methods" 和 "Access-Control-Allow-Headers"。此外,对于预检请求(OPTIONS 请求),直接返回 204 状态码。 2.使用官网提供的 插件: github.com/gin-contrib/cors。

14.Gin框架中的Context有什么作用?如何使用Context?

使用Context对象来访问和修改请求和响应数据,以及与中间件进行交互。

15.Gin框架中如何处理静态文件?

要在Gin框架中处理静态文件,我们可以使用Static方法。这个方法接受两个参数:静态文件根目录和文件系统对象。

16.谈谈你对 protocol buffers 的理解?

1.Protocol Buffers (protobuf) 是 除了 json 和 xml 之外的另一种 数据传输方式。 2.一条 数据,用 protobuf 序列化后的大小是 json 的 10分之一, 性能却是它的 5~100倍。

简洁高效的数据结构定义语言:Protocol Buffers 使用一种类似于结构体的语法来定义数据结构,包括字段名、字段类型和标识符等。这种定义语言非常简洁明了,且支持嵌套、默认值、枚举等丰富的数据结构定义。

跨语言、跨平台:Protocol Buffers 生成的序列化代码可以在多种编程语言中使用,因此可以轻松地在不同的系统和语言之间进行数据交换和通信。

高效的序列化和反序列化:由于 Protocol Buffers 使用二进制格式进行数据编码,因此序列化后的数据体积小,序列化和反序列化的速度也很快,适合对性能有要求的场景。

自描述性:序列化后的数据会携带字段的标识符和类型信息,因此读取数据时不需要事先知道数据结构的定义,使得数据结构更具灵活性。

向后兼容性和向前兼容性:Protocol Buffers 支持向后和向前兼容性,新增字段不会破坏已有的数据格式,这使得系统升级和维护更加方便。

3.缺点: 由于是 二进制格式 存储的,所以 可读性较差。

17.什么是 ORM 框架?

对象-关系映射(ORM)系统,实现了 程序对象 到 关系数据库数据 的映射。

ORM 框架是一种将对象模型与关系数据库映射起来的技术,可以简化数据访问层的代码,减少重复性的工作,提高开发效率。ORM 框架通常需要在应用程序中定义数据模型,并提供一组 API 实现对数据库的 CRUD 操作。ORM 框架还提供了一些高级特性,比如事务处理、对象关系映射、延迟加载等功能,以提高应用程序的性能和可维护性。

18.事务处理 有哪些主要注意的点?

1.首先启动事务时一定要做 错误判断。 2.建议在 启动事务 之后马上写 defer方法。 3.在 defer方法 内对 err 进行判断,如果 全局 中有 err!=nil 就回滚 (全局中 err 都为 nil 才能 提交事务) 4.在 提交事务 之后我们可以定义一个 钩子函数 afterCommit,来统一处理事务提交后的 逻辑。

tx, err := g.DB().Begin()  // 启动事务
if err != nil {
   return errors.New("启动事务失败")
}
​
defer func() {
   if err != nil {
      tx.Rollback()  // 回滚
   } else {
      tx.Commit()    // 事务完成
      //定义钩子函数
      afterCommmit()
   }
}()
​

Linux有关面试题

SSH连到一个服务器上的命令是什么

ssh username@server_address

查看CPU/内存/磁盘空间等。这些命令是什么

查看CPU信息:

使用 top 命令可以查看实时的CPU使用情况和进程列表。

使用 mpstat 命令可以查看每个CPU的详细使用情况。

使用 lscpu 命令可以查看CPU的硬件信息和配置。

查看内存信息:

使用 free 命令可以查看系统内存的使用情况,包括已用、剩余、缓存等。

使用 top 命令也可以查看系统内存的使用情况,其中的 MEM 行显示了内存使用情况。

查看磁盘空间:

使用 df 命令可以查看文件系统的磁盘空间使用情况,包括总容量、已用、可用等。

使用 du 命令可以查看指定目录下的磁盘空间使用情况,包括子目录和文件的大小。

shutdown命令详解

格式化 shutdown.exe -a         取消关机

shutdown.exe -f         强行关闭应用程序。

shutdown.exe -m 计算机名   控制远程计算机

shutdown.exe -i         显示图形用户界面,但必须是Shutdown的第一个参数。

shutdown.exe -l         注销当前用户。

shutdown.exe -r         关机并重启。

shutdown.exe -t时间       设置关机倒计时。

shutdown.exe -c”消息内容”    输入关机对话框中的消息内容(不能超127个字符)。

什么是shell ,怎么知道自己正在使用的 shell 是哪一个?

Shell 是一种命令行解释器,它是用户与操作系统之间进行交互的接口。通过 Shell,用户可以输入命令并与操作系统进行通信和控制。不同的操作系统可能会采用不同的 Shell 实现

在使用命令行界面时,你所使用的 Shell 可能是以下几种常见的其中之一:

在 Linux 和 macOS 系统中,常见的默认 Shell 是 Bash(Bourne Again SHell)。

在 Windows 系统中,常见的默认 Shell 是 Command Prompt(cmd.exe)或 PowerShell。 除了上述默认的 Shell,还有其他的 Shell 实现可供选择,例如在 Linux 中常见的有 Zsh、Fish 等。 要确定自己当前正在使用的是哪个 Shell,可以执行以下操作:

在 Linux 和 macOS 中,打开终端,通常默认使用的是 Bash。可以通过运行 echo $SHELL 命令查看当前 Shell 的路径。

在 Windows 中,默认使用的是 Command Prompt(cmd.exe)。可以通过在命令提示符下运行 echo %COMSPEC% 命令来确定当前 Shell 的路径。 如果你使用了其他的 Shell,可以通过类似的方法查询对应的环境变量或使用 Shell 特定的命令来确认。

包管理工具

以下是一些常见的包管理工具:

APT (Advanced Package Tool):主要用于 Debian 和 Ubuntu 等基于 Debian 的 Linux 发行版。通过使用 apt-get 或 apt 命令,可以从官方软件仓库中安装、升级和删除软件包。

YUM (Yellowdog Updater, Modified):主要用于 CentOS、Fedora 和 Red Hat 等基于 RPM 的 Linux 发行版。通过使用 yum 命令,可以从软件仓库中安装、更新和删除软件包。

DNF (Dandified YUM):DNF 是 YUM 的下一代版本,目前在较新的 Fedora 发行版中已经取代了 YUM。它提供与 YUM 类似的功能,并且支持一些额外的特性。

Pacman:Pacman 是 Arch Linux 发行版的包管理工具。通过使用 pacman 命令,可以从官方软件仓库或第三方仓库中安装、更新和删除软件包。

Homebrew:Homebrew 是 macOS 上的包管理工具,它允许用户从源代码构建软件包,或者直接从预编译二进制文件安装软件包。通过使用 brew 命令,可以安装、更新和卸载软件包。

Chocolatey:Chocolatey 是 Windows 上的包管理工具,它类似于 Homebrew。通过使用 choco 命令,可以从 Chocolatey 的软件库中安装、更新和卸载软件包。

在不小心忘掉 root 账户密码的情形下,怎么成功把机器救回来

如果你不小心忘记了 root 账户的密码,以下是一种常见的方法来恢复机器的访问权限:

重启机器:首先,尝试重启机器。在引导过程中,按下启动按键(通常是 F2、F12 或者 Del 键)进入 BIOS 或 UEFI 设置。

进入恢复模式:在 BIOS 或 UEFI 设置中,找到启动选项并选择进入恢复模式或修复模式。具体步骤可能因计算机品牌和型号而异,请参考计算机的说明手册。

挂载文件系统:进入恢复模式后,选择挂载文件系统的选项,以便能够访问和修改硬盘上的文件。

进入单用户模式:通过编辑启动选项,在命令行中添加 single 或 init=/bin/bash 参数,然后启动系统。这将使系统进入单用户模式,以 root 用户身份启动,而无需密码验证。

修改 root 密码:一旦进入单用户模式的命令行界面,输入以下命令来修改 root 用户的密码:

passwd root

重启机器:修改 root 密码后,输入 reboot 命令重启机器。

使用新密码登录:在重启后,使用新设置的 root 密码登录系统。

linux下改文件名用什么命令?

可以使用 mv 命令来改变文件或目录的名称。 例如,要将文件 old_name.txt 改为 new_name.txt,可以使用以下命令:

mv old_name.txt new_name.txt

mount是干啥的?

mount 是一个用于挂载文件系统的命令。在 Linux 下,挂载是将存储设备(如硬盘、USB 驱动器)连接到文件系统中的特定目录,使其可访问和使用。通过挂载,可以将新的存储设备添加到现有的文件系统层次结构中,允许用户访问和管理存储设备上的文件和数据。

man是干啥的?

man 是一个用于查看命令手册页面的命令。通过在终端中输入 man 后跟命令或程序的名称,可以获取关于该命令的详细文档和信息。man 命令提供了命令的语法、选项、示例和相关说明,帮助用户理解和正确使用特定的命令。可以使用箭头键和页面导航命令(如 PgUp、PgDn)来浏览手册页面,按 q 键退出手册页面。

系统管理命令

ps:列出当前正在运行的进程;

top:动态显示当前系统进程的状态;

kill:终止指定的进程;

df:显示磁盘使用情况;

du:显示目录或文件的磁盘使用情况;

free:显示系统内存使用情况;

ifconfig:显示网络接口的配置信息;

ping:测试网络连接是否正常;

netstat:显示网络连接状态;

who:显示当前登录系统的用户信息;

date:显示系统日期和时间;

uname:显示系统信息。

权限管理命令

chmod:修改文件或目录的访问权限;

chown:修改文件或目录的所有者;

chgrp:修改文件或目录的所属组。

go有关面试题

内容来自 Go常见面试题【由浅入深】2022版 - 知乎 (zhihu.com)