2026年IT行业技术面试题库编程与算法_第1页
2026年IT行业技术面试题库编程与算法_第2页
2026年IT行业技术面试题库编程与算法_第3页
2026年IT行业技术面试题库编程与算法_第4页
2026年IT行业技术面试题库编程与算法_第5页
已阅读5页,还剩17页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026年IT行业技术面试题库:编程与算法一、编程语言基础(3题,每题10分)1.题目:在Python中,编写一个函数`merge_sorted_lists`,该函数接收两个已排序的链表(链表节点定义如下),并返回一个合并后的新链表,同样保持排序。pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=next要求:-不能使用额外的数据结构(如数组或列表)。-时间复杂度要求O(n)。2.题目:在Java中,实现一个方法`countUniqueChars`,统计字符串中不重复字符的数量。例如,输入`"abcabc"`,输出`3`(`'a'`、`'b'`、`'c'`各出现一次)。要求:-空间复杂度要求O(1)。3.题目:在C++中,编写一个函数`reverseWords`,将输入的字符串中的单词顺序反转,但单词内部字符顺序不变。例如,输入`"helloworld"`,输出`"worldhello"`。要求:-不能使用标准库的`reverse`函数。二、数据结构与算法(6题,每题10分)1.题目:在Java中,实现一个`LRUCache`(最近最少使用缓存)类,支持`get`和`put`操作。缓存容量为固定值`capacity`。要求:-`get(key)`:如果键存在,返回值并更新访问顺序;否则返回-1。-`put(key,value)`:如果键存在,更新值并调整顺序;如果不存在且缓存已满,删除最久未使用的键。-使用双向链表和哈希表实现。2.题目:在Python中,编写一个函数`topKFrequent`,统计数组中出现频率最高的`k`个元素。例如,输入`[1,1,1,2,2,3]`,`k=2`,输出`[1,2]`。要求:-时间复杂度要求O(nlogk)。3.题目:在C++中,实现快速排序算法,要求使用尾递归优化。要求:-选择一个基准点,对数组左右部分分别排序。-尾递归时优先处理较大的部分。4.题目:在JavaScript中,编写一个函数`isValidParentheses`,验证字符串中的括号是否有效(`'('`,`')'`,`'{'`,`'}'`,`'['`,`']'`)。要求:-使用栈实现。5.题目:在Python中,编写一个函数`maxProfit`,给定股票价格数组,返回最大利润。可以多次买卖,但不能同时持有两支股票。要求:-时间复杂度要求O(n)。6.题目:在Java中,实现一个`TreeNode`类,并编写一个方法`maxDepth`,计算二叉树的最大深度。要求:-使用递归或迭代实现。三、系统设计基础(2题,每题15分)1.题目:设计一个简单的微博系统,支持用户发布动态、关注/取消关注、获取关注列表的动态流。要求:-描述数据结构(用户、动态、关注关系)。-简述关键模块(如动态存储、关系维护)。-考虑高并发场景下的优化(如缓存、分页)。2.题目:设计一个短链接生成服务,输入长链接,输出短链接,支持通过短链接跳转回原链接。要求:-描述短链接生成算法(如Base62编码)。-说明数据库设计(如何存储长链接和短链接映射)。-考虑分布式场景下的唯一性校验。四、数据库与分布式(3题,每题15分)1.题目:在MySQL中,编写一个SQL查询,统计每个用户的动态发布时间间隔(以分钟为单位),并按间隔分组排序。要求:-动态表结构:`posts(user_id,post_time)`。-示例:如果用户A在`10:00`、`10:05`、`10:15`发布,则间隔为`5`、`10`。2.题目:在Redis中,设计一个分布式锁的实现方案。要求:-描述使用`SETNX`或`SET`加`NX`命令。-说明如何避免死锁。3.题目:在分布式环境下,如何保证数据库事务的一致性?举例说明(如两阶段提交或SAGA模式)。五、网络安全与编码(2题,每题10分)1.题目:在JavaScript中,编写一个函数`encrypt`,对明文字符串进行简单的Caesar加密(每个字母向后移动3位,`'z'`→`'c'`)。要求:-忽略大小写和非字母字符。2.题目:解释HTTP和HTTPS的区别,并说明HTTPS的工作原理(TLS/SSL握手过程)。答案与解析一、编程语言基础1.Python:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefmerge_sorted_lists(l1,l2):dummy=ListNode(0)current=dummywhilel1andl2:ifl1.val<=l2.val:current.next=l1l1=l1.nextelse:current.next=l2l2=l2.nextcurrent=current.nextcurrent.next=l1orl2returndummy.next解析:-使用虚拟头节点简化边界处理。-双指针遍历两个链表,选择较小的节点连接。-时间复杂度O(n),空间复杂度O(1)。2.Java:javapublicintcountUniqueChars(Strings){int[]counts=newint[26];for(charc:s.toCharArray()){counts[c-'a']++;}intresult=0;for(intcount:counts){if(count==1)result++;}returnresult;}解析:-统计每个字母出现次数。-遍历计数数组,统计出现一次的字母。-空间复杂度O(1),因为字母总数固定(26个)。3.C++:cppinclude<string>include<algorithm>usingnamespacestd;voidreverseWords(string&s){intn=s.size();//反转整个字符串reverse(s.begin(),s.end());intstart=0;for(inti=0;i<=n;++i){if(i==n||s[i]==''){reverse(s.begin()+start,s.begin()+i);start=i+1;}}}解析:-先反转整个字符串,使单词顺序正确。-然后逐个反转单词区间。-时间复杂度O(n),空间复杂度O(1)。二、数据结构与算法1.Java:javaimportjava.util.HashMap;importjava.util.Map;classLRUCache{privateintcapacity;privateMap<Integer,Node>map;privateNodehead,tail;classNode{intkey,val;Nodeprev,next;Node(intk,intv){key=k;val=v;}}publicLRUCache(intcapacity){this.capacity=capacity;map=newHashMap<>();head=newNode(0,0);tail=newNode(0,0);head.next=tail;tail.prev=head;}publicintget(intkey){if(map.containsKey(key)){Nodenode=map.get(key);moveToHead(node);returnnode.val;}return-1;}publicvoidput(intkey,intvalue){if(map.containsKey(key)){Nodenode=map.get(key);node.val=value;moveToHead(node);}else{if(map.size()==capacity){map.remove(tail.prev.key);removeNode(tail.prev);}NodenewNode=newNode(key,value);map.put(key,newNode);addToHead(newNode);}}privatevoidmoveToHead(Nodenode){removeNode(node);addToHead(node);}privatevoidaddToHead(Nodenode){node.prev=head;node.next=head.next;head.next.prev=node;head.next=node;}privatevoidremoveNode(Nodenode){node.prev.next=node.next;node.next.prev=node.prev;}}解析:-使用双向链表维护访问顺序,头为最新访问。-哈希表实现O(1)查找。-`get`和`put`时移动节点到头部。2.Python:pythonfromcollectionsimportCounterdeftopKFrequent(nums,k):count=Counter(nums)return[numfornum,freqincount.most_common(k)]解析:-`Counter`统计频率。-`most_common(k)`返回频率最高的k个元素。-时间复杂度O(nlogk),因为排序需要logk时间。3.C++:cppvoidquickSort(intarr[],intlow,inthigh){if(low<high){intpivot=partition(arr,low,high);quickSort(arr,low,pivot-1);quickSort(arr,pivot+1,high);}}intpartition(intarr[],intlow,inthigh){intpivot=arr[high];inti=low-1;for(intj=low;j<high;++j){if(arr[j]<pivot){i++;swap(arr[i],arr[j]);}}swap(arr[i+1],arr[high]);returni+1;}解析:-尾递归优化:先递归较小的部分。-时间复杂度O(nlogn),空间复杂度O(logn)。4.JavaScript:javascriptfunctionisValidParentheses(s){conststack=[];constmap={'(':')','{':'}','[':']'};for(constcharofs){if(map[char]){stack.push(char);}else{if(!stack||map[stack.pop()]!==char)returnfalse;}}return!stack;}解析:-遇到左括号入栈,右括号匹配出栈。-最后栈为空则有效。5.Python:pythondefmaxProfit(prices):profit=0foriinrange(1,len(prices)):ifprices[i]>prices[i-1]:profit+=prices[i]-prices[i-1]returnprofit解析:-只买卖涨落的区间。-时间复杂度O(n),空间复杂度O(1)。6.Java:javaclassTreeNode{intval;TreeNodeleft,right;TreeNode(intx){val=x;}}publicintmaxDepth(TreeNoderoot){if(root==null)return0;return1+Math.max(maxDepth(root.left),maxDepth(root.right));}解析:-递归计算左右子树深度,取最大值。-时间复杂度O(n),空间复杂度O(h)。三、系统设计基础1.微博系统设计:-数据结构:-用户:`User(id,name,followers)`-动态:`Post(id,user_id,content,timestamp)`-关注关系:`Follow(follower_id,followee_id)`-关键模块:-动态存储:使用MySQL分表(按时间或用户ID)。-关注关系:Redis哈希表存储每个用户的关注列表。-流服务:Kafka发布动态,消费者按关注关系推送。-高并发优化:-缓存:Redis缓存热点用户动态。-分页:动态流分页加载。2.短链接生成:-算法:-Base62编码(a-z,A-Z,0-9):将ID映射为短字符串。-ID生成:使用TwitterSnowflake算法(时间戳+机器ID)。-数据库设计:-表结构:`short_links(url,short_code,created_at)`-索引:`short_code`唯一索引。-分布式唯一性:-Zookeeper或Redis保证ID生成器的全局唯一性。四、数据库与分布式1.MySQL统计时间间隔:sqlSELECTuser_id,FLOOR(TIMESTAMPDIFF(MINUTE,LEAD(post_time,1)OVER(PARTITIONBYuser_idORDERBYpost_time),post_time))ASintervalFROMpostsGROUPBYuser_id,post_timeORDERBYuser_id,post_time;解析:-`LEAD`函数获取下一个动态时间。-`TIMESTAMPDIFF`计算时间差。2.Redis分布式锁:redisSETlock_key

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论