版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年沈阳软件开发岗位面试常见问题集一、编程基础与算法(共5题,每题10分,总分50分)题目1(10分)问题描述:请实现一个函数,输入一个整数数组,返回该数组中所有唯一数字的和。例如,输入[1,2,2,3],返回6(1+3)。要求时间复杂度为O(n)。答案:javapublicintsumUnique(int[]nums){HashSet<Integer>set=newHashSet<>();for(intnum:nums){set.add(num);}intsum=0;for(intnum:set){sum+=num;}returnsum;}解析:使用HashSet存储所有唯一数字,遍历数组时只添加不重复的数字。最后遍历HashSet计算和。时间复杂度为O(n),空间复杂度为O(n)。题目2(10分)问题描述:实现一个二叉树的最大深度计算函数。给定一个二叉树的根节点,返回其最大深度。例如:3/\920/\157最大深度为3。答案:javapublicintmaxDepth(TreeNoderoot){if(root==null)return0;return1+Math.max(maxDepth(root.left),maxDepth(root.right));}解析:采用递归方式,如果节点为空返回0,否则返回1加上左右子树的最大深度。时间复杂度为O(n),空间复杂度为O(h)(h为树的高度)。题目3(10分)问题描述:编写一个函数,将一个字符串中的所有大写字母转换为小写字母,所有小写字母转换为大写字母。例如,输入"HelloWorld",输出"hELLOwORLD"。答案:javapublicStringswapCase(Strings){char[]chars=s.toCharArray();for(inti=0;i<chars.length;i++){if(Character.isUpperCase(chars[i])){chars[i]=Character.toLowerCase(chars[i]);}elseif(Character.isLowerCase(chars[i])){chars[i]=Character.toUpperCase(chars[i]);}}returnnewString(chars);}解析:遍历字符串的每个字符,使用Character类的方法判断大小写并进行转换。时间复杂度为O(n),空间复杂度为O(n)。题目4(10分)问题描述:实现一个函数,检查一个字符串是否是有效的括号组合。例如,输入"()[]{}",返回true;输入"(]",返回false。答案:javapublicbooleanisValid(Strings){Stack<Character>stack=newStack<>();Map<Character,Character>map=newHashMap<>();map.put(')','(');map.put('}','{');map.put(']','[');for(charc:s.toCharArray()){if(map.containsKey(c)){if(stack.isEmpty()||stack.pop()!=map.get(c)){returnfalse;}}else{stack.push(c);}}returnstack.isEmpty();}解析:使用栈结构,遇到闭括号时检查栈顶是否为对应的开括号。时间复杂度为O(n),空间复杂度为O(n)。题目5(10分)问题描述:编写一个函数,找出数组中第三大的数。如果数组中的不同数少于三个,返回最大的数。例如,输入[1,2,2,5,3,5],返回2。答案:javapublicintthirdMax(int[]nums){Integerfirst=null,second=null,third=null;for(intnum:nums){if(num.equals(first)||num.equals(second)||num.equals(third))continue;if(first==null||num>first){third=second;second=first;first=num;}elseif(second==null||num>second){third=second;second=num;}elseif(third==null||num>third){third=num;}}returnthird!=null?third:first;}解析:维护三个变量记录前三大的数。遍历数组时更新这三个变量。时间复杂度为O(n),空间复杂度为O(1)。二、Java核心与框架(共5题,每题10分,总分50分)题目6(10分)问题描述:解释Java中的线程池工作原理,并说明如何创建一个固定大小的线程池。答案:Java线程池使用ThreadPoolExecutor实现,主要包含:1.核心线程数:池中始终保持的线程数量2.最大线程数:池中允许的最大线程数量3.阻塞队列:用于存放等待执行的任务4.拒绝策略:当任务过多时的处理方式创建固定大小线程池:javaExecutorServicepool=Executors.newFixedThreadPool(5);解析:线程池可以复用核心线程,减少创建销毁开销。固定大小线程池会排队等待,超出最大线程数的任务按拒绝策略处理。题目7(10分)问题描述:比较SpringBean的生命周期与Java普通对象的创建过程有何不同。答案:SpringBean生命周期:1.构造器执行2.@PostConstruct注解方法执行3.属性注入4.初始化方法(@PostConstruct或init-method)5.可用状态普通Java对象:1.构造器执行2.自定义初始化代码区别:1.Spring提供完整的生命周期管理2.自动依赖注入3.AOP支持4.特殊生命周期钩子解析:Spring通过IoC容器管理Bean生命周期,提供更强大的功能,而普通对象需要手动管理。题目8(10分)问题描述:解释SpringAOP原理,并说明如何实现一个切面。答案:SpringAOP原理:1.使用代理模式(JDK或CGLIB)2.通过AspectJ或注解配置切点(Pointcut)和切面(Aspect)3.在切点匹配的方法执行前后执行增强(Around)、前置(Before)、后置(AfterReturning)、异常(AfterThrowing)实现切面:java@Aspect@ComponentpublicclassLoggingAspect{@Before("execution(com.example.service..(..))")publicvoidlogBefore(JoinPointjoinPoint){System.out.println("Beforemethod:"+joinPoint.getSignature());}}解析:AOP通过横切关注点分离,实现日志、事务等通用功能。题目9(10分)问题描述:SpringBoot中如何配置数据源,并说明事务管理的基本用法。答案:配置数据源:yamlspring:datasource:url:jdbc:mysql://localhost:3306/dbusername:rootpassword:secretdriver-class-name:com.mysql.cj.jdbc.Driver事务管理:java@ServicepublicclassUserService{@TransactionalpublicvoidupdateUser(Useruser){//业务逻辑}}解析:SpringBoot通过配置文件管理数据源,通过@Transactional注解实现声明式事务管理。题目10(10分)问题描述:解释SpringMVC的工作流程,并说明如何自定义全局异常处理器。答案:SpringMVC流程:1.DispatcherServlet接收请求2.HandlerMapping查找Controller3.Controller处理请求并返回ModelAndView4.ViewResolver查找视图5.DispatcherServlet渲染视图6.返回响应全局异常处理器:java@RestControllerAdvicepublicclassGlobalExceptionHandler{@ExceptionHandler(UserNotFoundException.class)publicResponseEntity<String>handleNotFound(UserNotFoundExceptione){returnnewResponseEntity<>("Usernotfound",HttpStatus.NOT_FOUND);}}解析:SpringMVC采用MVC模式分离表现、业务、数据,异常处理器提供统一错误处理。三、数据库与SQL(共5题,每题10分,总分50分)题目11(10分)问题描述:设计一个用户表(User),包含id(主键)、username(唯一)、email、password、注册时间,并写出创建表的SQL语句。答案:sqlCREATETABLEUser(idINTAUTO_INCREMENTPRIMARYKEY,usernameVARCHAR(50)UNIQUENOTNULL,emailVARCHAR(100)UNIQUENOTNULL,passwordVARCHAR(255)NOTNULL,register_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP);解析:使用INT自增主键,VARCHAR存储文本,TIMESTAMP记录时间。username和email设为唯一约束。题目12(10分)问题描述:查询所有注册时间在2025年1月1日之后的用户,按注册时间降序排列,每页显示10条,写出分页SQL。答案:sqlSELECTFROMUserWHEREregister_time>'2025-01-01'ORDERBYregister_timeDESCLIMIT10OFFSET0;解析:使用WHERE过滤日期,ORDERBY排序,LIMIT控制数量,OFFSET控制起始位置。题目13(10分)问题描述:查询年龄在20-30岁之间的用户数量,年龄计算基于当前日期与注册时间的差值。答案:sqlSELECTCOUNT()ASage_countFROMUserWHERETIMESTAMPDIFF(YEAR,register_time,CURDATE())BETWEEN20AND30;解析:使用TIMESTAMPDIFF计算年龄差值,BETWEEN...AND...范围查询。题目14(10分)问题描述:将用户表中的username字段值首字母大写,写出SQL语句。答案:sqlUPDATEUserSETusername=CONCAT(UPPER(SUBSTRING(username,1,1)),LOWER(SUBSTRING(username,2)));解析:使用CONCAT连接字符串,UPPER和LOWER转换大小写,SUBSTRING提取子串。题目15(10分)问题描述:设计一个订单表(Order),包含id(主键)、用户id(外键)、订单时间、金额,并写出创建表的SQL语句及插入数据的示例。答案:sqlCREATETABLEOrder(idINTAUTO_INCREMENTPRIMARYKEY,user_idINT,order_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP,amountDECIMAL(10,2)NOTNULL,FOREIGNKEY(user_id)REFERENCESUser(id));INSERTINTOOrder(user_id,amount)VALUES(1,99.99);解析:使用外键关联用户表,DECIMAL存储金额,默认时间戳记录创建时间。四、系统设计与架构(共5题,每题10分,总分50分)题目16(10分)问题描述:设计一个简单的短链接系统,说明主要组件和流程。答案:主要组件:1.前端服务:接收长链接请求2.长链接存储:存储原始链接3.短链接生成:创建唯一短码4.短链接存储:存储短链接映射5.后端服务:根据短码查找长链接流程:1.前端服务接收长链接2.查询短链接存储,如未存在则创建3.生成短码并存储映射关系4.返回短链接解析:短链接系统核心是映射关系存储和唯一短码生成。题目17(10分)问题描述:说明缓存穿透、缓存击穿和缓存雪崩的区别及解决方案。答案:缓存穿透:查询不存在的数据,导致请求直击数据库解决方案:1.空值缓存:对查询结果为空的情况缓存2.布隆过滤器:过滤不存在的数据缓存击穿:热点数据缓存过期,大量请求直击数据库解决方案:1.超时复用:设置较长的过期时间2.独立请求:使用分布式锁或计数器缓存雪崩:大量缓存同时过期,数据库压力激增解决方案:1.分散过期时间:随机设置过期时间2.互斥缓存:使用分布式锁解析:三种问题都涉及缓存失效,但场景和解决方案不同。题目18(10分)问题描述:设计一个高并发的秒杀系统,说明主要架构和注意事项。答案:架构:1.前端限流:使用Nginx或API网关2.秒杀服务:处理业务逻辑3.分布式锁:防止超卖4.数据库优化:索引和事务5.缓存层:减少数据库压力注意事项:1.分布式锁:使用Redis或Zookeeper2.数据库优化:使用乐观锁或行锁3.异步处理:使用消息队列4.超时控制:设置合理的超时时间解析:秒杀系统需要严格控制并发和超卖问题。题目19(10分)问题描述:说明RESTfulAPI设计原则,并举例说明如何设计一个用户管理的API。答案:RESTful原则:1.资源导向:以资源为中心2.无状态:每个请求包含所有必要信息3.统一接口:使用标准HTTP方法4.自描述:URI和HTTP头部描述操作用户管理API示例:GET/users:获取用户列表POST/users:创建用户GET/users/{id}:获取指定用户PUT/users/{id}:更新用户DELETE/users/{id}:删除用户解析:RESTfulAPI使用HTTP方法和资源URI清晰表达操作。题目20(10分)问题描述:设计一个消息推送系统,说明主要组件和技术选型。答案:组件:1.推送服务:接收推送请求2.消息队列:解耦和异步处理3.数据库:存储用户设备信息4.网络代理:推送至客户端技术选型:1.消息队列:RabbitMQ或Kafka2.数据库:Redis或MongoDB3.推送协议:APNS、FCM或WebSocket4.分布式架构:微服务解析:消息推送系统需要高可靠性和可扩展性。五、测试与质量保障(共5题,每题10分,总分50分)题目21(10分)问题描述:说明黑盒测试和白盒测试的区别,并举例说明如何设计一个登录功能的黑盒测试用例。答案:区别:黑盒测试:不关心内部实现,关注功能表现白盒测试:基于代码逻辑,检查路径覆盖登录功能黑盒测试用例:1.正常用户名密码2.错误密码3.错误用户名4.空用户名/密码5.特殊字符输入6.超长输入7.空白输入8.大小写敏感解析:黑盒测试从用户角度设计,覆盖各种输入场景。题目22(10分)问题描述:解释单元测试、集成测试和端到端测试的区别,并说明JUnit框架的基本用法。答案:区别:单元测试:测试单个函数或方法集成测试:测试模块间交互端到端测试:模拟真实用户场景JUnit基本用法:javaimportstaticorg.junit.jupiter.api.Assertions.;publicclassCalculatorTest{@Testpu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新生儿科的应急预案
- 金属板铺装检验批质量验收记录
- 施工组织设计(大体积混凝土施工方案)
- 体育老师个人年度工作总结
- 标本采集应急预案演练脚本
- 求职面试技巧读书报告
- 小学三年级数学下册练习题及答案
- 公路施工工程纠纷专用!建设工程施工合同纠纷要素式起诉状模板
- 城市绿化工程纠纷专用!建设工程施工合同纠纷要素式起诉状模板
- 2026校招:重庆机电集团试题及答案
- 贵州省纳雍县水东乡水东钼镍矿采矿权评估报告
- GC/T 1201-2022国家物资储备通用术语
- GB.T19418-2003钢的弧焊接头 缺陷质量分级指南
- 污水管网监理规划
- GB/T 35273-2020信息安全技术个人信息安全规范
- 2023年杭州临平环境科技有限公司招聘笔试题库及答案解析
- 《看图猜成语》课件
- LF炉机械设备安装施工方案
- 企业三级安全生产标准化评定表(新版)
- 耐压测试仪点检记录表
- 梅州市梅江区村级资金财务管理制度(试行)
评论
0/150
提交评论