- 篮子里有100个苹果,将这些苹果进行编号,从0开始到99。现在将这些苹果分成4份,第一份20个,第二份30个,第三份38个,最后一份12个,要求是苹果的编号不能连续。
【思路】通过构造性方法分配苹果,确保每份内部无连续编号:
第一份(20 个苹果):选取前 20 个奇数(1, 3, 5, …, 39)。奇数之间相差 2,无连续编号。
第二份(30 个苹果):选取剩余的奇数(41, 43, …, 99)。 同样无连续编号。
第三份(38 个苹果):选取前 38 个偶数(0, 2, 4, …, 74)。这些苹果之间相差 2,无连续编号。
第四份(12 个苹果):选取后 12 个偶数(76, 78, …, 98)。同样无连续编号。
1 | # 生成各分组的苹果编号 |
- 编写一个函数,在字符串数组中查找最长的公共前缀字符串。 如果没有公共前缀,则返回空字符串” “。
输入:strs = [“present”,”promotion”,”protect”]
输出:”pr”
输入:strs = [“al”,”trace”,”mtr”]
输出:” “
【思路】
先确定拿到的strs里最少的单词的长度,然后就拿第一个单词的第一个字母开始对比,如果跟第二个单词的第一个字母相同,再比较第三个单词的第一个字母,如果三个都相同,则比较第二个字母。一直到不相同结束。
【代码】
1 | def longest_common_prefix(strs): |
- 给定一个整数x,如果x是回文整数,则返回true。 当一个整数向后读取与向前读取相同时,它就是一个回文。例如,121是回文,而123不是。
1 | def is_palindrome(x): |
- 在一个整型数组中, 找到两个index,其对应的两个数相加为给出的目标数字。 你可以假设每个输入都有且仅有一个解。给定一个整数数组nums和一个整数目标值target,返回两个数字的索引,使它们相加到目标值。
您可以假设每个输入都只有一个答案,但是不能两次使用同一元素。可以按任何顺序返回答案。
示范
输入:nums = [3,2,4], target = 6
输出:[1,2]
输入:nums = [1,2,9], target = 10
输出:[0,2]
【思路】先拿到nums里每一个元素的index和对应的值,然后用目标数target逐一减去每一个元素,看剩下的值是否在,因为是要求返回两个数字的索引,所以存在就拿到另一个值的index,如果不存在就返回空就得了。
1 | def two_sum(nums, target): |
select * from A where exists (select * from B where A.id=B.id);和select * from A where A.id in (select id from B);如果A表有100条数据,B表有10000条,请问哪个sql语句执行效率高?
【答案】EXISTS 可以利用索引快速查找并提前终止,减少不必要的扫描。IN 需要生成并存储较大的结果集,可能导致内存开销和性能下降。所以,EXISTS 语句的执行效率更高。简述CGROUP如何限制进程cpu使用
【答案】首先需要在系统中创建一个CGroup,并为其配置相应的资源限制。这通常涉及到创建目录结构和设置文件。例如,在/sys/fs/cgroup/cpu/下创建一个名为my_cgroup的CGroup:mkdir /sys/fs/cgroup/cpu/my_cgroup
然后,设置CPU份额。CGroup提供了两种方式来限制CPU使用:CPU份额(CPU shares)和CPU配额(CPU quotas)。CPU份额决定了各个任务之间的相对优先级。例如,如果两个任务A和B的CPU份额分别是1024和512,那么任务A将获得大约两倍于任务B的CPU时间。
设置CPU份额:echo 1024 > /sys/fs/cgroup/cpu/my_cgroup/cpu.shares
CPU配额允许你精确地限制任务在一定时间内能够使用的CPU时间。例如,你可以设置一个任务在一个周期内最多只能使用50%的CPU时间。
1 | echo 50000 > /sys/fs/cgroup/cpu/my_cgroup/cpu.cfs_quota_us |
这里,cpu.cfs_quota_us 表示在一个周期内允许的最大CPU时间(单位是微秒),而 cpu.cfs_period_us 表示周期的长度(单位也是微秒)。上面的例子表示在一个周期(100000微秒,即0.1秒)内,最多使用50000微秒(即0.05秒)的CPU时间。
最后,将特定的进程添加到CGroup中,以便它们受到资源限制的影响。例如,将PID为1234的进程添加到 my_cgroup 中:echo 1234 > /sys/fs/cgroup/cpu/my_cgroup/tasks
现在可以通过读取相关文件来监控CGroup的状态和统计信息。cat /sys/fs/cgroup/cpu/my_cgroup/cpuacct.usage
- http 301 500和502 含义
【答案】
1 | 301 Moved Permanently(永久重定向),此时客户端会缓存新 URL。而302(临时重定向),客户端不会缓存新 URL。 |
- 如何限制单个容器的最大磁盘占用?
【答案】
1 | docker create \ |
A和B两台服务器,如何让A可以访问B的ssh,B不能访问A的ssh服务
【答案】这里主要是“B不能访问A的ssh服务”,iptables配置如下:1
2
3
4
5
6
7
8
9
10# 假设 A 的 IP 是 192.168.1.100,
# 需要在B侧配置
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j DROP
解释:
-A INPUT:添加到输入链。
-p tcp --dport 22:针对 SSH 的 TCP 22 端口。
-s 192.168.1.100:指定源 IP 为 A 的地址。
-j DROP:丢弃该流量(即拒绝连接)。
sudo service iptables save #保存如果需要 完全禁止 B 访问 A 的所有服务,而不仅仅是 SSH,则在A侧配置:
sudo iptables -A INPUT -s B的IP地址 -j DROP谈谈DNS 两种方式
【答案】
1 | 递归 DNS(Recursive DNS) |
- 谈谈bind高可用机制
【答案】
1 | 主从服务器(Primary/Secondary):通过主服务器(Primary)和从服务器(Secondary)的协作,确保在主服务器故障时,从服务器仍能提供解析服务。 |
- mysql主从同步的全同步复制和半同步复制是啥?
【答案】
1 | mysql默认的复制方式是异步的,主库把日志发送给从库后不关心从库是否已经处理,这样会产生一个问题就是假设主库挂了,从库处理失败了,这时候从库升为主库后,日志就丢失了。由此产生两个概念。 |
- free -m 这个命令的输出是啥意思?
【答案】
1 | total:总内存大小(单位:MB)。used + free + buff/cache ≈ total,这是正常现象。 |
- tair的读写RT都有升高,跟有热点 key是什么关系?
1 | (1)单节点负载过载 |
- 什么场景下的GC耗时很长可以通过增加容器数来有效解决?
GC(垃圾回收)耗时长通常由以下原因导致:
堆内存过大:Full GC 扫描的堆内存越大,耗时越长。
高并发负载:单容器处理大量请求,导致对象分配速度快,GC 频率升高。
增加容器数 的本质是 水平扩展,通过分散负载和减少单容器内存压力,间接降低 GC 耗时。
- 无序正整数数字中找出所有元素拼接后的最小值,比如 [1,3,2],得到 123。
【思路】这个题不能简单的用sort从小到大排序然后组合起来就交卷,因为有一种情况,假设给的列表是[1,30,2,15],直接sort后的得到的答案是121530,但是实际最小的值应该是115230,核心原因就是2虽然小于15,但是放在数字里作为百位数或者千位数这个逻辑就不对了。
但是sort还是要sort的,毕竟它是唯一一个python具备排序的功能。核心点是sort是可以带入key的,比如sort(key=len),这个的效果就是按照各个元素的字符串长度来排序了,不要简单的以为sort只能排数字大小。
但是这个key怎么来?这里还有一个问题,就是如何判断我们上面说的“2和15谁前谁后”了,这里用字符串的比较功能,因为”2”+”15” = “215”, 而 “15”+”2” = “152”,通过字符串的比较,返回1 -1 和0这三种情况,然后用这三种情况作为key就行了。
这题比较难的地方就是用到了cmp_to_key这个东西,估计在笔试的时候用python的同学很难想到它。我当时面字节数据中台的时候就让写这道题,我就没写出来,很囧。这道题是明显的java更好写(Comparator是自带的模块),但是python反而不好写的典型。
1 | from functools import cmp_to_key |
你如何确保监控不遗漏?
【AI回答】监控四维模型:
infrastructure: # 基础设施层- 服务器:CPU、内存、磁盘、网络
- 容器:Pod状态、资源使用、重启次数
- 网络:带宽、延迟、丢包率
application: # 应用层 - 服务:QPS、成功率、延迟
- 业务:核心指标、转化率、用户行为
- 依赖:数据库、缓存、消息队列
user_experience: # 用户体验层 - 前端:页面加载时间、JS错误
- 移动端:崩溃率、ANR、启动时间
- API:可用性、响应时间、错误率
business: # 业务层 - 收入:交易额、支付成功率
- 用户:DAU、留存率、活跃度
- 成本:资源利用率、单位成本
缓存的监控你都关注哪些指标?
【AI回答】
🔴 第一优先级(必须监控):命中率 - 缓存有效性的核心指标
响应时间 - 直接影响用户体验
内存使用 - 系统稳定性的基础
服务可用性 - 业务连续性的保障
🟡 第二优先级(强烈推荐):连接池状态 - 并发处理能力
数据一致性 - 业务正确性保障
热点key分析 - 性能优化关键
成本效率 - 资源优化方向
🟢 第三优先级(高级监控):智能异常检测 - 预测性运维
根因分析 - 快速故障定位
自动化优化 - 系统自愈能力
ROI分析 - 业务价值评估