Skip to content

Coding_DB_Tools 面试专题手册

💡 本章节共收录 7383 道面试真题,建议每天复习 10-20 题。


Q1: Linux中如何统计某个关键字在文件中出现的次数?

【核心解析】 使用grep -o keyword file | wc -l;或grep -c keyword file;注意-c只统计行数,-o统计所有匹配;结合管道和正则表达式;适用于日志分析


Q2: Python中可变数据类型和不可变数据类型的区别是什么?请举例说明。

【核心解析】 不可变类型(int、str、tuple)修改时创建新对象;可变类型(list、dict、set)可原地修改;内存地址变化;函数参数传递影响


Q3: Python如何实现多线程?多线程与异步编程的区别是什么?

【核心解析】 threading模块;GIL限制;多线程适合I/O密集型;asyncio实现异步;协程与事件循环;对比多进程


Q4: 数据库事务死锁是如何产生的?如何避免死锁?

【核心解析】 资源循环等待;事务隔离级别;锁顺序;超时机制;减少事务持有锁时间;使用乐观锁或悲观锁


Q5: 慢查询如何定位?常见原因有哪些?如何优化?

【核心解析】 开启慢查询日志;EXPLAIN分析执行计划;索引缺失或失效;数据量过大;SQL写法问题;分库分表或缓存


Q6: 对于一个数据量非常大的平台,如何设计测试数据表?

【核心解析】 考虑分库分表策略;索引设计;数据归档;读写分离;测试数据生成工具;数据一致性校验


Q7: Kubernetes(K8S)和Docker在测试环境中有哪些作用?

【核心解析】 容器化部署一致性;资源隔离;弹性伸缩;CI/CD集成;环境快速搭建与销毁;微服务测试


Q8: MySQL索引的分类、底层数据结构是什么?什么是事务?事务的四大特性?事务的隔离级别?

【核心解析】 索引分类:B+树索引、哈希索引、全文索引等;底层数据结构:B+树;事务定义;ACID特性;隔离级别:读未提交、读已提交、可重复读、串行化


Q9: Redis的数据持久化方式有哪些?Redis分布式锁怎么实现?请结合项目说明原理。

【核心解析】 RDB和AOF持久化;分布式锁实现:SETNX+过期时间、Redisson框架原理(看门狗、Lua脚本);结合项目场景说明


Q10: 算法题:合并两个有序数组。请根据你的算法设计测试用例,如果输入异常字符,你会如何处理?异常机制加在函数的哪里?

【核心解析】 合并算法(双指针);测试用例:正常输入、边界值、空数组、重复元素;异常处理:输入校验(类型、非空);异常放在函数入口处


Q11: 两道SQL题:请写出具体的SQL语句。

【核心解析】 涉及多表连接、聚合函数、子查询;常见场景:查询、分组、排序、去重


Q12: 常用的测试工具有哪些?

【核心解析】 接口测试:Postman;性能测试:JMeter;自动化:Selenium;抓包:Charles;缺陷管理:JIRA


Q13: MySQL的左连接和右连接有什么区别?请写出两个简单的SQL示例。

【核心解析】 左连接返回左表所有行;右连接返回右表所有行;示例:SELECT * FROM A LEFT JOIN B ON A.id=B.id;SELECT * FROM A RIGHT JOIN B ON A.id=B.id


Q14: Python中构造函数和析构函数是什么?如何用两个队列实现一个栈?装饰器的执行顺序是怎样的?

【核心解析】 构造函数__init__;析构函数__del__;两个队列实现栈:入栈入队,出栈将队列元素移到另一个队列;装饰器顺序:从内到外


Q15: Python中如何取字符串最后三位?如何给列表去重?continue和break的区别?is和==的区别?

【核心解析】 字符串切片[-3:];列表去重可用set或循环;break终止循环,continue跳过当前迭代;is比较对象身份(内存地址),==比较值


Q16: 手撕SQL查询题:如多表连接、分组统计等。

【核心解析】 SELECT、JOIN、GROUP BY、HAVING、子查询;索引优化;事务与锁


Q17: 手撕算法题:爬楼梯和连续递增数组的最大长度。

【核心解析】 爬楼梯:动态规划,f(n)=f(n-1)+f(n-2);连续递增数组:一次遍历,记录当前长度和最大长度


Q18: Python中深拷贝和浅拷贝的区别?

【核心解析】 浅拷贝只复制引用,不复制对象本身;深拷贝递归复制所有对象;copy模块的copy()和deepcopy();可变对象与不可变对象的影响


Q19: 请讲讲网络五层协议栈。

【核心解析】 应用层、传输层、网络层、数据链路层、物理层;每层功能及典型协议(HTTP、TCP、IP、以太网)


Q20: TCP和UDP的区别是什么?

【核心解析】 TCP面向连接、可靠、有序、流量控制;UDP无连接、不可靠、高效;应用场景:TCP用于文件传输,UDP用于视频流


Q21: HTTP和HTTPS的区别是什么?

【核心解析】 HTTPS有SSL/TLS加密;默认端口443 vs 80;安全性更高;需要证书


Q22: 请讲讲死锁及其产生的条件。

【核心解析】 互斥、请求与保持、不可剥夺、循环等待;预防:破坏任一条件;避免:银行家算法;检测与恢复


Q23: 了解虚拟内存吗?请解释。

【核心解析】 虚拟内存将物理内存扩展到磁盘;页表映射虚拟地址到物理地址;缺页中断;页面置换算法(LRU、FIFO)


Q24: Python有哪些数据类型?Python2和Python3的区别?

【核心解析】 int、float、str、list、tuple、dict、set;Python3默认Unicode,print为函数,整数除法返回浮点,range返回迭代器


Q25: Java中HashMap的底层实现原理?

【核心解析】 数组+链表/红黑树;哈希冲突处理;扩容机制;线程不安全


Q26: Java JVM的底层原理?

【核心解析】 类加载机制;内存区域(堆、栈、方法区等);垃圾回收算法(标记-清除、复制、标记-整理);GC调优


Q27: Linux如何杀掉所有的java进程?

【核心解析】 ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs kill -9;或pkill -9 java


Q28: 请写一条SQL更新语句。

【核心解析】 UPDATE table_name SET column1=value1 WHERE condition;注意事务和锁


Q29: 操作系统如何管理内存?请简要说明。

【核心解析】 分页/分段管理;虚拟内存;页面置换算法(LRU、FIFO);内存分配与回收;TLB加速


Q30: 有一张表student(student_id, course_id, grade),请用SQL查询每个学生的最高分,如果存在相同course_id,则返回course_id较小的那个。

【核心解析】 使用窗口函数ROW_NUMBER()按student_id分区,按grade降序、course_id升序排序;或子查询关联;注意处理并列情况


Q31: 给定一个数组表示签到日期,如[1,2,3,5,6,8,27,28,29,30],输出最长连续签到天数。

【核心解析】 排序后遍历,记录当前连续长度和最大长度;注意跨月边界;时间复杂度O(n)


Q32: 算法题:最长公共前缀(LeetCode 14)。

【核心解析】 横向扫描或纵向扫描;时间复杂度O(mn);注意空数组处理


Q33: 算法题:0-1背包问题,背包容量10kg,物品重量和价值分别为(2,6)、(2,10)、(3,12)、(6,20),求最大价值。

【核心解析】 动态规划,dp[i][j]表示前i个物品容量j的最大价值;状态转移;最终dp[4][10]=38


Q34: 算法题:给定n和k,列出所有从1..n中选k个数的组合。

【核心解析】 回溯法;剪枝;时间复杂度C(n,k)


Q35: SQL:查询所有科目都大于80分的学生ID。

【核心解析】 使用GROUP BY和HAVING MIN(score) > 80;或子查询


Q36: 手撕代码:无重复字符的最长子串。请写出代码并设计测试用例。

【核心解析】 滑动窗口算法;哈希表记录字符索引;边界条件(空串、全重复、全不重复);性能优化(O(n)复杂度)


Q37: SQL:查询销量最高的前三名商品,涉及三表联查。请写出SQL语句。

【核心解析】 JOIN连接商品表、订单表、订单明细表;GROUP BY与SUM聚合;ORDER BY与LIMIT;处理并列排名(窗口函数DENSE_RANK)


Q38: MySQL联合索引有什么特点?什么情况下可能用到联合索引?

【核心解析】 最左前缀原则;索引下推;覆盖索引;适用场景:多条件查询、排序、分组;避免索引失效(跳过最左列、范围查询后列)


Q39: 手撕代码:判断回文串。请写出代码并考虑测试用例。

【核心解析】 双指针法;忽略非字母数字字符;大小写不敏感;边界条件(空串、单字符、奇偶长度);性能优化(O(n))


Q40: 手撕代码:二叉树的最大深度。请写出递归解法。

【核心解析】 递归:max(left, right)+1;边界条件(空节点返回0);时间复杂度O(n);空间复杂度O(height);非递归解法(层序遍历)


Q41: MySQL索引的实现方式是什么?为什么选择B+树?

【核心解析】 B+树索引;B+树特点:非叶子节点只存键,叶子节点存数据且有序;优势:树高度低,IO次数少;范围查询高效;支持排序


Q42: Python是解释型语言还是编译型语言?

【核心解析】 解释型;Python代码被解释器逐行执行;但存在编译过程(.pyc字节码);动态类型;与C/C++对比


Q43: 在Python中,a, b = b, a是如何实现的?

【核心解析】 元组打包与解包;先计算右侧表达式(b, a)生成元组;再赋值给左侧变量;无需临时变量;底层通过栈操作


Q44: 会写C语言吗?对Java与安卓有了解吗?

【核心解析】 编程语言基础;项目经验;学习能力;与岗位匹配度


Q45: Linux下如何抓包?

【核心解析】 使用tcpdump命令;指定网卡和端口;保存为pcap文件;结合Wireshark分析;过滤条件


Q46: Python和Java哪个更熟练?请结合你的项目经验说明。

【核心解析】 Python在自动化脚本、数据处理优势;Java在大型框架、性能优势;个人实际项目中的使用情况;对两者核心特性的掌握


Q47: 你项目中哪些数据存放在关系型数据库中,哪些放在内存中?为什么?

【核心解析】 关系型数据库(结构化、持久化、事务性数据);内存(缓存、会话、高频访问数据);选型依据(一致性要求、访问速度、数据量)


Q48: 手写 SQL:查询学生表中分数最高的前三名姓名。

【核心解析】 使用ORDER BY DESC和LIMIT;考虑并列情况用DENSE_RANK;表结构假设


Q49: 写一道SQL:LEFT JOIN、RIGHT JOIN、INNER JOIN 有什么区别?

【核心解析】 INNER JOIN返回匹配行;LEFT JOIN返回左表所有行;RIGHT JOIN返回右表所有行;举例说明


Q50: 手撕:DFS深度遍历。

【核心解析】 递归实现;栈实现;避免重复访问;时间复杂度O(V+E)


Q51: SQL:学生表,学生名,班级名,总成绩,查询每个班级总成绩排名前三的学生姓名。

【核心解析】 使用窗口函数RANK或DENSE_RANK;PARTITION BY班级;ORDER BY成绩


Q52: 你主要使用CodeX(GPT-4)辅助编码,它在测试脚本生成中最常帮你处理哪些任务?

【核心解析】 生成样板代码、编写断言、数据准备、调试辅助


Q53: Java中重载和重写的区别是什么?

【核心解析】 重载发生在同一类中,方法名相同参数列表不同;重写发生在子类与父类间,方法签名相同;重载是编译时多态,重写是运行时多态;重写不能降低访问权限;重写不能抛出更宽泛的异常


Q54: 创建Java线程有哪几种方式?

【核心解析】 继承Thread类并重写run方法;实现Runnable接口并传入Thread;实现Callable接口配合FutureTask;使用线程池(ExecutorService);推荐使用Runnable或Callable避免单继承限制


Q55: 抓包的步骤是什么?

【核心解析】 配置代理(如Fiddler/Charles设置端口);安装并信任HTTPS证书;设置过滤条件(域名、类型);开始抓包并操作应用;分析请求/响应数据(状态码、参数、响应体);导出或保存会话


Q56: Linux中如何查看错误日志?

【核心解析】 使用tail -f实时查看日志文件;grep过滤关键字如ERROR;awk/sed提取特定字段;查看系统日志如/var/log/messages;结合时间戳定位问题;使用journalctl查看系统日志


Q57: MySQL中内连接和外连接的区别是什么?

【核心解析】 内连接只返回匹配的行;左外连接返回左表所有行,右表无匹配则NULL;右外连接返回右表所有行,左表无匹配则NULL;全外连接返回左右表所有行(MySQL不支持,用UNION模拟);内连接通常比外连接效率高


Q58: Linux中如何从日志文件中查找ERROR级别的记录并统计次数?

【核心解析】 使用grep 'ERROR' logfile | wc -l;或grep -c 'ERROR' logfile;结合awk提取时间戳和错误信息;使用sort/uniq统计不同错误类型;输出结果到文件


Q59: 请编写一个Python函数判断字符串是否为合法IP地址。

【核心解析】 分割字符串为四段;每段转为整数并检查范围0-255;检查是否以0开头且长度>1;使用正则表达式简化;处理前导空格和异常输入


Q60: 请找出下面Python代码中的Bug:多线程共享变量未加锁。

【核心解析】 识别竞态条件;解释为什么会出现数据不一致;使用threading.Lock保护共享变量;使用with语句管理锁;考虑使用threading.local或队列避免共享


Q61: 手撕SQL:查询不同种类商品在2023年消费最高的用户信息(多表联查)。

【核心解析】 连接用户表、订单表、订单详情表、商品表、种类表;使用GROUP BY按种类和用户分组;SUM计算消费总额;使用窗口函数或子查询取每组最高;过滤2023年数据


Q62: 手撕代码:二叉树的层序遍历。

【核心解析】 使用队列实现BFS;逐层遍历;记录每层节点数;返回二维列表;递归方法(按层索引插入)


Q63: 请解释堆和栈的区别,以及它们分别存储什么内容?

【核心解析】 栈存储局部变量和函数调用信息,自动分配释放;堆存储动态分配的对象,需手动管理;栈空间小但速度快;堆空间大但速度慢


Q64: 请描述Python的垃圾回收机制流程?

【核心解析】 引用计数为主;标记-清除解决循环引用;分代回收提高效率;gc模块可手动控制


Q65: MySQL索引的常用数据结构是什么?请说明其优缺点。

【核心解析】 B+树;叶子节点存储数据,非叶子节点存储索引;支持范围查询;InnoDB默认使用;哈希索引仅支持等值查询


Q66: 请比较数组和链表的区别?

【核心解析】 数组连续内存,随机访问O(1);链表非连续,插入删除O(1);数组大小固定,链表动态;数组缓存友好


Q67: SQL多表查询有哪些方式?请举例说明。

【核心解析】 内连接(INNER JOIN);左/右外连接(LEFT/RIGHT JOIN);全外连接(FULL JOIN);交叉连接(CROSS JOIN);自连接


Q68: 在Python中,如何将字符串'Hello world'倒序输出?

【核心解析】 切片[::-1];reversed()函数;循环遍历;注意空格处理


Q69: Python中列表和元组有什么区别?

【核心解析】 列表可变,元组不可变;列表用[],元组用();列表可增删改,元组不可;元组可作为字典键


Q70: 在Python中遇到报错时,你通常如何排查和解决?

【核心解析】 阅读错误堆栈;使用try-except捕获;打印调试信息;使用pdb调试;查阅文档或搜索引擎


Q71: MySQL的四大特性(ACID)是什么?隔离级别有哪些?

【核心解析】 原子性、一致性、隔离性、持久性;读未提交、读已提交、可重复读、串行化;InnoDB默认可重复读


Q72: Redis常见的分布式锁和三大缓存问题是什么?

【核心解析】 分布式锁:SETNX+过期时间;缓存穿透:布隆过滤器;缓存击穿:互斥锁;缓存雪崩:过期时间随机化


Q73: TCP与UDP的区别是什么?各自举一个使用场景。

【核心解析】 TCP面向连接、可靠、有序;UDP无连接、不可靠、高效;TCP用于文件传输、网页;UDP用于视频直播、DNS


Q74: Python中is和==的区别是什么?

【核心解析】 is比较对象内存地址;==比较值;小整数缓存可能影响is结果;字符串驻留机制


Q75: Linux常用命令有哪些?cp命令复制文件和文件夹有什么区别?

【核心解析】 ls、cd、cp、mv、rm、ps、grep;cp file1 file2复制文件;cp -r dir1 dir2复制目录


Q76: SQL中嵌套查询和连表查询哪个效率更高?为什么?

【核心解析】 连表查询通常效率更高;嵌套查询可能产生临时表;具体取决于优化器和索引;建议使用EXPLAIN分析


Q77: MySQL索引失效的场景有哪些?

【核心解析】 使用函数;隐式类型转换;LIKE以%开头;OR条件;联合索引未用最左前缀;数据量小


Q78: 请简述Python装饰器的理解,并列举常用Linux命令(特别是文件目录操作和日志查看如grep高级用法)。

【核心解析】 装饰器:高阶函数,用于扩展函数功能;常用Linux:ls、cd、cp、mv、rm、find;grep高级:-E正则、-v排除、-c计数、-A/-B上下文;日志查看:tail、less、awk


Q79: 算法题:1200瓶饮料,3个空瓶可以换1瓶饮料,请问总共可以喝多少瓶?请描述解题思路。

【核心解析】 模拟兑换过程;空瓶数循环;公式:总瓶数 = 初始瓶数 + floor((初始瓶数-1)/(空瓶数-1));结果:1799


Q80: 编程题:寻找字符串数组的公共前缀。

【核心解析】 横向扫描:逐个字符比较;纵向扫描:取第一个字符串,逐字符与其他比较;分治法;时间复杂度O(n*m);边界条件:空数组


Q81: 编程题:给定一个数组,其中少了一个数(非开头结尾),找出少的那个数。

【核心解析】 求和法:计算期望和与实际和之差;异或法:利用a^a=0;二分法:如果有序;时间复杂度O(n)


Q82: 编程题:给一个数组n与数字t,统计每个元素出现次数,返回前t个出现次数最多的数,次数一样则按元素升序排序。

【核心解析】 使用哈希表统计频率;排序或堆;自定义比较器;时间复杂度O(n log n)


Q83: 编程题:在二维字符串数组中找到“CSIG”,存在返回true,不存在返回false(广搜)。

【核心解析】 广度优先搜索;从每个起点开始;方向数组;标记已访问;时间复杂度O(mnlen)


Q84: 手撕:斐波那契变体,4个月生一对。

【核心解析】 动态规划;递推公式:f(n)=f(n-1)+f(n-4);初始条件;注意边界


Q85: MySQL的修改命令是什么?

【核心解析】 UPDATE table_name SET column1=value1 WHERE condition;注意WHERE条件避免全表更新;支持多列更新;可使用子查询;事务控制


Q86: 如何查看错误日志?

【核心解析】 Linux下查看应用日志(tail -f、grep);使用ELK集中管理;日志级别(DEBUG/INFO/ERROR);关键信息(时间戳、异常堆栈);结合监控工具


Q87: SQL题:学生表、成绩表,查找缺考同学的姓名。

【核心解析】 LEFT JOIN成绩表 ON 学生ID,WHERE成绩表ID IS NULL;或NOT IN子查询;注意NULL处理;考虑多表关联


Q88: MySQL的几种连接方式?

【核心解析】 INNER JOIN(内连接);LEFT JOIN(左外连接);RIGHT JOIN(右外连接);FULL JOIN(全外连接,MySQL不支持,用UNION模拟);CROSS JOIN(交叉连接)


Q89: SQL左连接和右连接的区别是什么?

【核心解析】 左连接:返回左表所有行,右表无匹配则NULL;右连接:返回右表所有行,左表无匹配则NULL;应用场景:左连接用于保留左表全部数据;性能:通常左连接更常用;示例:SELECT * FROM A LEFT JOIN B ON A.id=B.id


Q90: delete和drop的区别是什么?

【核心解析】 delete:删除表中数据,可回滚,不释放空间;drop:删除表结构及数据,不可回滚,释放空间;delete是DML,drop是DDL;delete可带where条件;drop速度更快


Q91: pytest.fixture的作用域有哪些?

【核心解析】 function:每个测试函数执行一次;class:每个测试类执行一次;module:每个模块执行一次;session:整个测试会话执行一次;作用域控制fixture的创建和销毁时机


Q92: pytest解析用例的底层原理了解吗?

【核心解析】 pytest通过收集器(Collector)发现测试用例;使用钩子函数(hooks)扩展功能;测试用例执行顺序由排序算法决定;参数化通过fixture实现;断言使用Python原生assert


Q93: 进程和线程的区别是什么?

【核心解析】 进程是资源分配最小单位,线程是CPU调度最小单位;进程间独立,线程共享进程资源;进程切换开销大,线程切换开销小;多进程更稳定,多线程更高效;通信方式不同:进程间IPC,线程间共享内存


Q94: 浏览器输入一个网址后,从回车到页面展示经历了什么?

【核心解析】 DNS解析域名;建立TCP连接(三次握手);发送HTTP请求;服务器处理请求并返回响应;浏览器解析HTML、CSS、JS;渲染页面;断开TCP连接(四次挥手)


Q95: C++中泛型是如何实现的?模板是在编译时还是运行时实现?

【核心解析】 C++泛型通过模板实现;模板在编译时实例化;编译器根据模板参数生成具体代码;模板支持类型参数和非类型参数;模板特化用于特定类型优化


Q96: C++中指针和引用的区别是什么?

【核心解析】 指针是一个变量,存储地址;引用是别名,必须初始化;指针可以重新赋值,引用不能;指针可以为NULL,引用不能;指针有多级,引用只有一级;sizeof结果不同


Q97: 什么情况下会导致内存泄漏?如何避免?

【核心解析】 动态分配内存未释放;循环引用(智能指针);异常导致释放代码未执行;容器中存储指针未清理;避免:使用智能指针、RAII、定期检查工具(Valgrind)


Q98: 删除数据库的方式有哪些?

【核心解析】 DROP DATABASE:删除整个数据库;DELETE FROM:删除表中数据;TRUNCATE TABLE:清空表数据,保留结构;DROP TABLE:删除表;区别:DROP和TRUNCATE不可回滚,DELETE可回滚


Q99: 一个SELECT语句执行很慢,如何排查和优化?

【核心解析】 使用EXPLAIN分析执行计划;检查是否使用索引;优化SQL语句:避免SELECT *、减少JOIN;考虑分区表、读写分离;调整数据库配置;使用缓存


Q100: 哪些字段适合创建索引?

【核心解析】 经常作为查询条件的字段;高选择性的字段(如唯一值多);经常用于排序、分组的字段;外键字段;避免:频繁更新的字段、小表、大量重复值的字段