本文最后更新于 120 天前,其中的信息可能已经有所发展或是发生改变。
峰岹科技一面(技术面 20min)
问题
八股
- 自我介绍
- 对硬件相关的经历有哪些
- mysql的索引机制你了解吗,原理是什么
- redis有什么用
- linux的常用指令
- redis字符串是如何创建的
- 动态链接和静态链接有什么区别
项目
项目你是负责哪一部分的?
后端你是如何设计开发的,包括了哪些模块?
单元测试和集成测试你是怎么进行的?
评论接口你是怎么开发的?
答案(gpt+个人理解)
- Mysql的索引机制你了解吗,原理是什么
数据结构:
- B-tree:常用的索引结构,支持范围查询。通过分层节点加速查找。
- 哈希索引:用于等值查询,基于哈希算法进行快速查找,但不支持范围查询。
索引类型:
- 主键索引:唯一标识每条记录,自动创建。
- 唯一索引:确保索引列的值唯一,但可以有 NULL 值。
- 普通索引:没有唯一性限制,提高检索速度。
- 全文索引:用于快速检索文本数据。
索引的优点:
- 加速查询速度,减少 I/O 操作。
- 提高数据检索效率,优化 SQL 执行计划。
索引的缺点:
- 增加存储空间需求。
- 插入、更新和删除操作时会带来额外的开销。
- redis有什么用
缓存:用于缓存热点数据,减轻数据库负担,提高数据访问速度。
会话存储:存储用户会话信息,实现用户状态保持。
实时数据分析:支持高并发读写,适合实时统计、分析和监控。
消息队列:提供发布/订阅(pub/sub)功能,支持消息的异步处理。
排行榜:使用排序集合(Sorted Set)实现实时排行榜。
分布式锁:实现分布式环境中的锁机制,确保数据一致性。
数据结构支持:提供多种数据结构(如字符串、列表、集合、哈希等),满足不同的应用场景。
持久化:支持数据持久化选项(如 RDB 和 AOF),在重启后恢复数据。
- redis字符串是如何创建的
创建字符串: 使用
SET
命令创建或更新一个字符串键值对:SET key value SET user "Alice"
获取字符串: 使用
GET
命令获取字符串的值:GET key GET user
设置带有过期时间的字符串: 可以使用
SETEX
设置键的值并同时指定过期时间(秒):SETEX key seconds value SETEX session 3600 "session_data"
追加字符串: 使用
APPEND
命令将值追加到现有字符串末尾:APPEND key value APPEND user "Bob"
- linux的常用指令
文件和目录操作:
ls
:列出目录内容。cd
:切换目录。pwd
:显示当前工作目录。mkdir
:创建新目录。rmdir
:删除空目录。rm
:删除文件或目录。cp
:复制文件或目录。mv
:移动或重命名文件或目录。文件查看和编辑:
cat
:查看文件内容。less
:分页查看文件内容。more
:逐页查看文件内容。head
:查看文件开头的几行。tail
:查看文件结尾的几行。nano
/vim
:文本编辑器,用于编辑文件。系统管理:
top
:实时查看系统进程。ps
:查看当前运行的进程。kill
:终止进程。df
:显示文件系统的磁盘空间使用情况。du
:显示文件和目录的磁盘使用情况。网络操作:
ping
:测试网络连接。ifconfig
/ip
:查看或配置网络接口。netstat
:显示网络连接、路由表和网络接口状态。文件权限:
chmod
:修改文件或目录的权限。chown
:改变文件或目录的所有者。搜索和查找:
find
:查找文件和目录。grep
:在文件中搜索文本模式。压缩与解压:
tar
:打包和压缩文件。gzip
/gunzip
:压缩和解压缩文件。
- 动态链接和静态链接有什么区别
静态链接:
- 链接时机:在编译时,将库文件的代码直接复制到可执行文件中。
- 文件大小:生成的可执行文件较大,因为库的代码嵌入其中。
- 性能:由于库代码已经嵌入,运行时不需要查找外部库,启动速度快。
- 独立性:静态链接的可执行文件不依赖外部库,即使库发生变化,程序也不受影响。
- 缺点:当库更新时,需要重新编译整个程序。
动态链接:
- 链接时机:在运行时加载库文件,可执行文件本身不包含库代码,而是通过动态链接库(如
.so
文件)加载。- 文件大小:可执行文件较小,因为库代码不包含在文件内。
- 性能:运行时需要查找和加载动态库,启动时稍慢。
- 共享性:多个程序可以共享同一个动态库,节省内存资源。
- 灵活性:库可以独立更新,而不需要重新编译程序,只要接口不变,程序能正常运行。