软件开发面试题及答案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

软件开发面试题及答案

一、基础概念题(考察对核心知识的实际理解)

问:值类型和引用类型的区别?实际开发中怎么避免踩坑?

答:值类型是直接存数据(比如Java的int、C#的struct),赋值时拷贝完整数据;引用类型存的是数据地址(比如Java的Object、Python的列表),赋值时只传地址。

踩坑点比如传引用类型参数时,改了参数里的属性会影响原对象——比如方法里改了传入的User对象的name,外面的User也会变。避免的话,要么传值类型,要么传引用类型时做深拷贝(比如用BeanUtils.copyProperties复制新对象,或者Python的list.copy()),别直接改原对象。

问:HTTP的GET和POST有啥实际区别?不是问定义,是开发里的用法差异

答:首先GET参数在URL里,能看见还会被浏览器缓存(比如收藏夹存URL会带参数),POST参数在请求体里,相对安全;其次GET传参有长度限制(不同浏览器不一样,一般几KB),POST没这限制,所以传大数据(比如表单里传文件、长文本)用POST;还有GET一般是查数据,POST是改数据(比如提交表单、创建订单),符合RESTful规范,不然别人看接口就搞不清用途。

二、编码实操题(考察动手能力)

问:写个简单的数组去重方法,要求能保留原数组顺序,说说你选这种写法的原因

答:以JavaScript为例,用Map来做:

functionuniqueArr(arr){

constmap=newMap();

constresult=[];

for(constitemofarr){

if(!map.has(item)){

map.set(item,true);

result.push(item);

}

}

returnresult;

}

原因:一是Map的has和set方法都是O(1),整体效率O(n),比双重循环(O(n2))快,数据量大时明显;二是能保留原顺序,比用Set(虽然简单,但ES6的Set转数组后顺序在大部分情况对,但不如Map直观控制)更稳妥,而且能处理数字、字符串混合的数组,兼容性也够。

问:用Java写个冒泡排序,优化一下,避免没必要的循环

答:冒泡排序核心是两两对比交换,优化点是加个标志位,判断某一轮有没有交换,如果没交换说明已经有序,直接退出:

publicstaticvoidbubbleSort(int[]arr){

if(arr==null||arr.length=1)return;

intlen=arr.length;

for(inti=0;ilen-1;i++){

booleanisSorted=true;//标志位:默认这轮有序

for(intj=0;jlen-1-i;j++){//每轮少比i次(后面i个已经排好)

if(arr[j]arr[j+1]){

inttemp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

isSorted=false;//有交换,说明还没有序

}

}

if(isSorted)break;//没交换,直接退出

}

}

比如数组已经是[1,2,3,4],第一次循环后isSorted还是true,直接结束,不用再走后面的循环,省时间。

三、项目问题处理(考察实战经验)

问:线上项目突然报“数据库连接超时”,你怎么排查?

答:先看表象——是所有接口都超时,还是只有某几个?如果所有接口,先查数据库本身:用工具(比如Navicat)连数据库,看能不能连上,要是连不上,找运维看数据库服务是不是挂了,或者服务器网络是不是有问题(比如防火墙拦截了)。

如果数据库能连上,再看应用端:查应用日志,看是不是连接池满了(比如配置的maxActive是20,实际用满了没释放),可以用JVM工具(比如jstack)看线程状态,有没有大量线程卡在“获取数据库连接”的地方。

再排查代码:是不是有地方拿了连接没close(比如try里获取连接,finally里没写close()),或者用了事务但没提交/回滚,导致连接一直占用。比如之前遇过一个坑,循环里获取连接,

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档