版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年软件工程师面试题集与解答指南一、编程能力测试(共5题,每题10分,总分50分)题目1(Java编程,10分)请用Java实现一个方法,输入一个字符串,返回该字符串中所有唯一字符的集合。例如,输入"abaccde",返回"a,c,d,e"。javaimportjava.util.;publicclassUniqueCharacters{publicstaticSet<Character>getUniqueChars(Stringinput){if(input==null||input.isEmpty()){returnCollections.emptySet();}//使用HashSet存储唯一字符Set<Character>uniqueChars=newHashSet<>();//使用HashMap记录字符出现次数Map<Character,Integer>countMap=newHashMap<>();for(charc:input.toCharArray()){countMap.put(c,countMap.getOrDefault(c,0)+1);}//添加出现次数为1的字符到结果集for(Map.Entry<Character,Integer>entry:countMap.entrySet()){if(entry.getValue()==1){uniqueChars.add(entry.getKey());}}returnuniqueChars;}publicstaticvoidmain(String[]args){Stringinput="abaccde";Set<Character>result=getUniqueChars(input);System.out.println(String.join(",",result));}}解析:1.首先判断输入字符串是否为空,若为空则直接返回空集合2.使用HashMap记录每个字符出现的次数3.遍历HashMap,将出现次数为1的字符添加到结果集4.最后返回结果集,保持字符顺序(Java9+可以使用LinkedHashSet)题目2(Python编程,10分)请实现一个函数,接收一个整数列表,返回一个列表,其中包含原始列表中所有子列表的最小值。如果子列表为空,则返回0。例如,输入[[4,2,5],[1],[],[7,6,3]],返回[2,1,0,3]。pythondefmin_of_sublists(lst):result=[]forsublistinlst:ifnotsublist:result.append(0)else:result.append(min(sublist))returnresult测试代码test_input=[[4,2,5],[1],[],[7,6,3]]print(min_of_sublists(test_input))#输出:[2,1,0,3]解析:1.遍历输入列表中的每个子列表2.对于每个子列表,检查是否为空3.如果为空,添加0到结果列表4.如果不为空,使用内置min()函数找到最小值并添加到结果列表5.返回最终结果列表题目3(JavaScript编程,10分)请实现一个函数,接收一个字符串,返回一个对象,其中包含每个字母出现的次数。忽略大小写和非字母字符。例如,输入"Hello,World!",返回{"h":1,"e":1,"l":3,"o":2,"w":1,"r":1,"d":1}。javascriptfunctioncountLetters(str){constresult={};//转换为小写并移除非字母字符constcleanedStr=str.toLowerCase().replace(/[^a-z]/g,'');for(letcharofcleanedStr){if(result[char]){result[char]++;}else{result[char]=1;}}returnresult;}//测试代码constinput="Hello,World!";console.log(countLetters(input));解析:1.将输入字符串转换为小写2.使用正则表达式移除所有非字母字符3.遍历清理后的字符串4.对于每个字符,在结果对象中记录其出现次数5.返回结果对象题目4(C++编程,10分)请实现一个函数,接收一个整数n,返回斐波那契数列的第n项。假设n从0开始计数。例如,n=6返回8(斐波那契序列:0,1,1,2,3,5,8)。cppinclude<iostream>//递归方法(效率较低)intfibonacciRecursive(intn){if(n<=1){returnn;}returnfibonacciRecursive(n-1)+fibonacciRecursive(n-2);}//动态规划方法(效率更高)intfibonacciDP(intn){if(n<=1){returnn;}intprev=0;intcurr=1;for(inti=2;i<=n;i++){intnext=prev+curr;prev=curr;curr=next;}returncurr;}intmain(){intn=6;std::cout<<"FibonacciDP:"<<fibonacciDP(n)<<std::endl;//std::cout<<"FibonacciRecursive:"<<fibonacciRecursive(n)<<std::endl;return0;}解析:1.斐波那契数列定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n>1)2.递归方法简单但效率低(时间复杂度O(2^n))3.动态规划方法使用迭代存储中间结果,效率高(时间复杂度O(n))4.动态规划方法只需要O(1)空间复杂度5.示例中提供了两种实现方式,推荐使用动态规划方法题目5(算法设计,10分)请设计一个算法,找出数组中第三大的数。如果数组中的最大数出现多次,则不计算在内。例如,输入[1,2,-2147483648,2,3],返回-2147483648。pythondefthird_largest(nums):初始化三个变量存储前三大的数first=second=third=float('-inf')fornuminnums:跳过等于最大值的数ifnum==firstornum==secondornum==third:continueifnum>first:third=secondsecond=firstfirst=numelifnum>second:third=secondsecond=numelifnum>third:third=numreturnthirdifthird!=float('-inf')else-1测试代码test_cases=[[1,2,-2147483648,2,3],[1,1,2],[1,2],[1],[1,2,2,5,3,5]]forcaseintest_cases:print(f"Input:{case}->Output:{third_largest(case)}")解析:1.初始化三个变量存储前三大的数,初始值为负无穷2.遍历数组中的每个数3.跳过等于前三大的数4.如果当前数大于第一大的数,更新前三大的数5.否则如果当前数大于第二大的数,更新第二、三大小的数6.否则如果当前数大于第三大的数,更新第三大的数7.最后返回第三大的数,如果不存在则返回-1二、系统设计测试(共3题,每题15分,总分45分)题目6(分布式系统设计,15分)设计一个高可用的短链接服务。要求:1.支持每天千万级访问量2.链接生成快速3.支持自定义短链接前缀4.需要考虑垃圾回收机制解答要点:1.系统架构:-使用无状态服务架构,便于水平扩展-采用微服务设计,分为API网关、短链接生成服务、存储服务、缓存服务-部署在Kubernetes集群中,实现自动扩缩容2.短链接生成:-使用62进制的短码(a-z,A-Z,0-9)-采用Base62编码:将ID转换为62进制字符串-使用分布式唯一ID生成器(如TwitterSnowflake算法)3.数据存储:-使用Redis缓存热点链接,TTL设置为24小时-使用MySQL/PostgreSQL存储链接映射关系-使用分布式文件系统(如Ceph)存储原始长链接内容4.垃圾回收:-设置软删除机制,链接访问后增加访问计数-定期扫描低访问量的链接,进行软删除-超过30天未访问的链接进行硬删除-提供管理后台手动回收功能5.自定义前缀:-在API网关中验证前缀有效性-使用前缀+随机码的方式生成唯一链接-前缀长度限制为1-10个字符6.高可用设计:-API网关使用负载均衡器分发请求-所有服务部署多副本,使用健康检查-数据库使用主从复制和读写分离-使用DNS轮询和健康检查实现服务发现题目7(数据库设计,15分)设计一个社交媒体通知系统数据库。要求:1.支持用户接收多种类型的通知(点赞、评论、关注等)2.支持按时间范围查询通知3.支持按用户偏好筛选通知4.需要考虑性能和可扩展性解答要点:1.数据模型:users(user_idPK,username,...)notifications(notification_idPK,user_idFK,type,content,created_at,read_at,is_pinned)notification_types(type_idPK,name,icon)user_preferences(user_idFKPK,pref_type,value)2.表结构设计:-notifications表:-使用UUID作为notification_id-created_at使用TIMESTAMPWITHTIMEZONE-read_at使用TIMESTAMPWITHTIMEZONE,默认为NULL-is_pinned布尔值,标记是否置顶-notification_types表:-存储通知类型(LIKE,COMMENT,FOLLOW,etc.)-user_preferences表:-存储用户通知偏好(如LIKE通知是否开启)3.索引设计:-notifications:创建索引(user_id,created_atDESC)-notifications:创建索引(type)-notifications:创建索引(is_pinned)-user_preferences:创建索引(user_id)4.查询优化:-按用户获取通知:sqlSELECTFROMnotificationsWHEREuser_id=?ANDread_atISNULLORDERBYcreated_atDESCLIMIT50-按时间范围查询:sqlSELECTFROMnotificationsWHEREuser_id=?ANDcreated_atBETWEEN?AND?ORDERBYcreated_atDESC-按偏好筛选:sqlSELECTn.FROMnotificationsnJOINuser_preferencespONn.user_id=p.user_idWHEREn.user_id=?ANDn.type=p.pref_typeORDERBYn.created_atDESC5.可扩展性设计:-使用分区表存储历史通知-使用消息队列(如Kafka)处理通知事件-使用缓存(Redis)存储用户未读通知计数-使用异步任务处理通知推送6.性能优化:-使用批量插入减少数据库压力-使用延迟删除避免频繁更新-使用通知摘要功能减少数据量-使用预读机制提前加载通知题目8(API设计,15分)设计一个RESTfulAPI接口,用于管理在线课程。要求:1.支持创建、读取、更新、删除课程2.支持按分类、标签、讲师筛选课程3.支持分页和排序4.需要考虑安全性设计解答要点:1.资源命名:-基础路径:`/api/v1/courses`-创建:`POST/api/v1/courses`-获取单个:`GET/api/v1/courses/{course_id}`-获取列表:`GET/api/v1/courses`-更新:`PUT/api/v1/courses/{course_id}`-删除:`DELETE/api/v1/courses/{course_id}`-筛选:`GET/api/v1/courses?category=xxx&tags=yyy&instructor=zzz`2.请求参数:-分页参数:`page`(默认1),`limit`(默认10)-排序参数:`sort_by`(默认created_at),`order`(asc/desc)-筛选参数:`category`,`tags`(逗号分隔),`instructor`-搜索参数:`q`(模糊搜索标题和描述)3.安全设计:-使用JWT进行身份验证-实现RBAC权限控制:-管理员:创建、更新、删除所有课程-讲师:创建、更新、删除自己的课程-学生:只能查看课程-限制管理员操作频率(如创建课程每分钟不超过10次)-使用HTTPS保护数据传输-对敏感字段进行脱敏处理4.响应格式:-成功响应:json{"status":"success","data":{"course_id":"uuid","title":"课程标题","description":"课程描述","category":"分类","tags":["标签1","标签2"],"instructor":"讲师名称","price":99.99,"created_at":"2026-01-01T12:00:00Z","updated_at":"2026-01-02T15:00:00Z"}}-错误响应:json{"status":"error","code":404,"message":"课程不存在"}5.性能优化:-使用缓存(Redis)存储热门课程-使用预加载机制加载关联数据-使用分页查询减少数据传输量-使用查询优化器分析慢查询并优化6.API版本控制:-使用路径版本控制(/api/v1/courses)-避免在老版本中删除字段-使用兼容性设计保持向后兼容三、数据库编程测试(共2题,每题10分,总分20分)题目9(SQL编程,10分)假设有一个电商订单表orders,包含字段:order_id(订单ID),customer_id(客户ID),order_date(订单日期),amount(订单金额)。请编写SQL查询:1.查找2025年每个月的总销售额2.查找每个客户的总消费金额,并按消费金额降序排列3.查找消费金额最高的客户及其消费金额sql--1.查找2025年每个月的总销售额SELECTTO_CHAR(order_date,'YYYY-MM')ASmonth,SUM(amount)AStotal_salesFROMordersWHEREEXTRACT(YEARFROMorder_date)=2025GROUPBYTO_CHAR(order_date,'YYYY-MM')ORDERBYmonth;--2.查找每个客户的总消费金额,并按消费金额降序排列SELECTcustomer_id,SUM(amount)AStotal_spentFROMordersGROUPBYcustomer_idORDERBYtotal_spentDESC;--3.查找消费金额最高的客户及其消费金额SELECTcustomer_id,SUM(amount)AStotal_spentFROMordersGROUPBYcustomer_idORDERBYtotal_spentDESCLIMIT1;解析:1.使用TO_CHAR和EXTRACT函数处理日期2.使用GROUPBY对月份进行分组3.使用SUM函数计算总销售额4.对客户进行分组并计算总消费金额5.使用ORDERBY进行降序排列6.使用LIMIT1获取最高消费客户题目10(数据库优
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年教师职称考试(特殊教育)历年参考题库含答案详解
- 2025康复医学科三基考试题库及答案
- 2025年安全生产事故案例分析及事故处理流程培训试卷及答案
- 消防安全工作自查报告
- 2025年安全生产月电气测试试题及答案
- 工业机器人系统操作员(三级)职业鉴定理论考试题及答案(新版)
- 2025年人工智能应用技术考试试卷及答案
- 建设工程施工合同纠纷要素式起诉状模板要素清晰无混淆
- 2026年动物园管理提升
- 2026 年无子女离婚协议书正规模板
- 上海建桥学院简介招生宣传
- 《智慧教育黑板技术规范》
- 《电力建设安全工作规程》-第1部分火力发电厂
- 歌曲《我会等》歌词
- 八年级物理上册期末测试试卷-附带答案
- 小学英语五年级上册Unit 5 Part B Let's talk 教学设计
- 老年痴呆科普课件整理
- 学生校服供应服务实施方案
- GB/T 22900-2022科学技术研究项目评价通则
- 自动控制系统的类型和组成
- GB/T 15171-1994软包装件密封性能试验方法
评论
0/150
提交评论