一些常见的计算机面试题

2023年 1月 4日 26.0k 0

计算机基础

堆和栈

什么时候用堆?什么时候用栈?栈有什么作用?Golang 的变量在栈还是堆?堆、栈有没有上限?有的话和什么有关?

数据结构

Slice 空间是怎样分配的?双倍扩容,原来数据复制过去。Golang 的 map 是什么结构 Golang 的 map 是什么结构,遍历是否有序, 什么是 Hash 表? Hash 表的查询效率? 解决碰撞有什么方法?

线程

线程是否越多越好吗? 线程切换消耗大不大?协程是否越多越好吗?要区分线程调度(内核上下文切换)与协调调度时(进程内上下文切换)机制。

网络

TCP 协议

TCP 建立过程是怎样的,最要的工作是什么?协商序列号。TCP 关闭过程,为什么要四次挥手?因为TCP是全双工的。Client -> Server, Client 主动关闭链接, TIME_WAIT 发生在那端?服务器有很多 TimeWait 一般是什么情况 主动关闭端。有很多 Timewait 证明是服务主动关闭连接,存在有很多短链接。Client 和 Server 已建立了 TCP 连接, Client 正在调用 Read 阻塞,Server 进程崩溃后,Client 会怎样? 进程崩溃,操作系统会关闭文件描述符,Sever 进入主动关闭流程。通过 TCP 传输文件,为什么还需要对收到的文件做正确性校验?

HTTP 协议

简述 http 协议格式,文本协议能不能传输二进制?http 可传输图片的方法(content-length)。http 与 https 关系是什么?简述 https 协议作用,描述出 https 握手过程的加分 。什么是 http 中 的 keepalive,怎样做到 keepalive ? http1.1 才支持 keepalive,一个 tcp 连接顺序发送请求(遵守一问一答顺序),http2.0 多路复用。

数据库

索引知识

数据库索引使用了什么数据结构?为什么要使用这个数据结构?一个表的字符串字段 A 已经建立了索引,使用查询条 A == ‘abc’ 是否能用上索引?使用查询条A != ‘abc’ 是否能用上索引?为什么?因为 A!=‘abc’ 在 B+ 树查找过程无法比较大小,无法进一步定位孩子树有个表 a 有主键 id, 说明一下 select * from a order by id desc limit 10, 1select*from a order by id desc limit 100000, 1 的效率差别? offset 为多少,就要遍历多少一个表有一个联合索引(A,B),如果查询用 A=1 能用上索引吗,B=2 呢,为什么?

limit 的局限

用什么办法遍历一个有主键 id 的 3 亿数据表

算法

算法能力考察

有一个 100 万个不相等的乱序的整数, 用最快方法将其分成相等的两部分,要求前一部分每个数都比后一部分每个数小?使用快速排序的思路在内存中有 100 组有序数组, 每组 10 万个元素,用最快方法将他们合并成一个有序的数组。使用堆

基本知识

如何判断一个链表有闭环

Golang

多线程编程

如果多个线程并发读写一个 map,会产生什么结果?为什么会产生这种结果?有什么办法保证并发安全?Golang 中对一个 int64 进行高并发更新(增减),有什么办法保证并发安全? 并发编程的理解,可以有 3 种方式:(1)锁(2)atomic包(3)channel - 多生产者单消费者

协程,线程,进程

描述 goroutine 调度、切换机制。

Channel

Golang chan特性 chan 为什么不用锁,底层是怎么实现的?什么时候会阻塞,怎么判断会阻塞? 1)chan底层是用了锁+双向队列实现。2)投递前可cap、len函数判断是否相等,但要锁住。第2个方法是用select default,实际编程中select必需加 default处理逻辑。

Redis

基本数据结构

string、list、set、zset、hash,每种数据结构的使用场景,实现原理Redis Redis 用法如何用 Redis 实现一个分布式锁 最初级的回答是SETNX。更好的回答是考虑到原子性,用 Lua 脚本

原理

Redis对设置了TTL的key,是如何实现key的过期的? 能回答出 2 种过期方式:主动和被动(惰性)。如果能回答出主动方式的随机抽样流程,加分。Redis的key淘汰策略有哪些? 各有什么特点?常用的有volatile-lru、volatile-ttl。LRU 算法的流程是什么redis 有没有 stop the world 问题?什么时候会出现?为什么?回答:redis 是单进程、单线程服务,单个任务处理时间过长,就严重影响并发性能。如持久化时、处理返回大 values 值数据时、从一个很长的 list 中删除一个元素时等场景。

系统设计

短网址服务

  • 输入一个长网址,编码返回一个短网址(重点是编码方法的考虑,比如用什么方式表示短网址,能表示的量有多大)
  • 如何通过短网址找到长网址?
  • HTTP重定向是选301还是302? (1)编码方式:用ID生成器生成一个64bit整数,然后把这个整数编码成英文数字的字符串(注意考虑要多长的字符串?),如果回答md5之类的hash方法的,会有冲突问题。
  • 通过kv存储,key是短网址,value是长网址,redis mysql都可以
  • 301(永久重定向)和302(临时重定向)的区别主要在于搜索引擎的行为。如果想要统计用户请求信息,用302.
  • 高并发 ID 生成服务

  • 全局唯一
  • ID体积尽可能小
  • ID按照时间有序
  • 相关文章

    KubeSphere 部署向量数据库 Milvus 实战指南
    探索 Kubernetes 持久化存储之 Longhorn 初窥门径
    征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
    那些年在 Terraform 上吃到的糖和踩过的坑
    无需 Kubernetes 测试 Kubernetes 网络实现
    Kubernetes v1.31 中的移除和主要变更

    发布评论