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:修改文件或目录的所属组。