- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
程序员高频面试题库及答案
一、基础语法(以Java/Python为例)
1.问题:Python中列表(list)和元组(tuple)的区别?实际开发中怎么选?
答案:
核心区别在“可变性”和“使用场景”:
可变性:list是可变的(能增删改元素,如list.append(1)),tuple不可变(创建后不能修改元素,若元素是可变对象如list,仅能改内部子元素);
性能:tuple创建后内存固定,访问速度比list快,适合存储静态数据;
场景选择:
存动态数据(如用户提交的表单列表、实时更新的日志)用list;
存静态配置(如接口请求参数格式(host,port)、函数返回的多值固定组合)用tuple,还能避免意外修改,且tuple可作为字典key(list不行)。
2.问题:Java中“==”和equals()的区别?举个实际业务中的坑?
答案:
“==”:基本类型比值(如inta=1和intb=1,a==b为true),引用类型比内存地址(如newString(a)==newString(a)为false,因为是两个对象);
equals():默认是Object类的方法,本质也是比地址,但子类可重写(如String重写后比内容,a.equals(newString(a))为true);
实际坑:做用户登录时,判断输入密码和数据库密码(String类型),若用password==dbPassword会错(可能是不同对象),必须用password.equals(dbPassword),还要加非空判断避免空指针(dbPassword!=nulldbPassword.equals(password))。
二、数据结构
1.问题:数组和链表的核心区别?分别适合什么场景?
答案:
存储结构:数组是连续内存(元素按索引存,如int[]arr),链表是离散节点(每个节点存值和下一个节点地址,如单链表);
操作效率:
访问:数组按索引访问O(1)(直接算内存地址),链表要从头遍历O(n);
插入/删除:数组中间操作需移动元素O(n)(如ArrayList删中间元素),链表改指针即可O(1)(前提有节点引用);
场景:
数组:查多改少(如商品列表分页展示,频繁按索引取数据);
链表:改多查少(如消息队列,频繁在头部删消息、尾部加消息;或LRU缓存的双向链表实现)。
2.问题:哈希表(HashMap)怎么解决哈希冲突?Java中HashMap和ConcurrentHashMap的区别?
答案:
哈希冲突解决:JavaHashMap用“数组+链表/红黑树”:
元素按key的hash值算数组索引,若索引相同(冲突),先存在链表;
当链表长度超过8,且数组容量≥64时,链表转红黑树(提高查询效率,从O(n)变O(logn));
HashMapvsConcurrentHashMap:
线程安全:HashMap非线程安全(多线程put可能导致死循环,JDK1.8已修复但仍有数据不一致),ConcurrentHashMap线程安全;
实现方式:ConcurrentHashMap在JDK1.8用“CAS+synchronized”(锁数组的每个桶,不是全局锁),比JDK1.7的分段锁效率更高;
场景:单线程业务(如本地缓存)用HashMap,多线程场景(如分布式系统中的共享缓存)用ConcurrentHashMap。
三、算法(高频基础题)
1.问题:写一个单链表反转的代码(Java),并说下思路?
答案:
用“迭代法”(空间复杂度O(1),比递归更实用),思路是“保存下一个节点→反转当前指针→移动指针”:
classListNode{
intval;
ListNodenext;
ListNode(intx){val=x;}
}
publicListNodereverseList(ListNodehead){
ListNodeprev=null;//前驱节点(反转后成为下一个节点的next)
ListNodecurr=head;//当前节点
while(curr!=null){
ListNodenextTemp=curr.next;//保存下一个节点(避免断链)
curr.next=prev;//反转当前节点的指针(指向前驱)
prev=curr;//前驱指针后移
您可能关注的文档
最近下载
- 劳动能力鉴定课件.ppt VIP
- 第十六讲文明新路与人类命运共同体-中华民族共同体概论专家大讲堂课件.pptx VIP
- 2025届高考数学抛物线中的八个常考二级结论与秒杀模型(解析版).pdf VIP
- 课题申报书:科学教育背景下开展初中物理项目化实践的路径研究.docx VIP
- 《劳动能力鉴定》PPT课件培训讲学.ppt VIP
- 商业插画高职全套教学课件.pptx
- EBZ掘进机电气原理讲解.ppt VIP
- 《石油化工企业设计防火标准》gb5060-2008局部修订2018年版.docx VIP
- 义务教育版(2024)七年级全一册信息科技 第4课 数据分包灵活传 课件.pptx VIP
- 初中物理大单元教学研究.docx VIP
文档评论(0)