互联网公司程序员面试常见问题及答案_第1页
互联网公司程序员面试常见问题及答案_第2页
互联网公司程序员面试常见问题及答案_第3页
互联网公司程序员面试常见问题及答案_第4页
互联网公司程序员面试常见问题及答案_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

2026年互联网公司程序员面试常见问题及答案一、编程基础(共5题,每题2分)1.题目:编写一个函数,实现字符串的逆序。例如,输入`"abcdef"`,输出`"fedcba"`。答案:pythondefreverse_string(s):returns[::-1]解析:Python中字符串切片`[::-1]`可以高效实现逆序,时间复杂度为O(n),空间复杂度也为O(n)。2.题目:实现一个函数,判断一个整数是否为素数。如果是,返回`True`;否则返回`False`。答案:pythondefis_prime(n):ifn<=1:returnFalseforiinrange(2,int(n0.5)+1):ifn%i==0:returnFalsereturnTrue解析:只需检查到`sqrt(n)`即可,因为如果`n`有大于`sqrt(n)`的因子,必然存在小于等于`sqrt(n)`的对应因子。3.题目:编写一个函数,计算一个列表中所有偶数的平方和。例如,输入`[1,2,3,4,5]`,输出`20`(即`2^2+4^2=4+16=20`)。答案:pythondefsum_of_even_squares(lst):returnsum(x2forxinlstifx%2==0)解析:列表生成式结合`if`条件过滤偶数,再计算平方和,简洁高效。4.题目:实现一个函数,找出列表中最大的两个数,不使用排序。例如,输入`[3,1,4,1,5,9,2,6]`,输出`[9,6]`。答案:pythondeffind_top_two(lst):first,second=float('-inf'),float('-inf')fornuminlst:ifnum>first:second=firstfirst=numelifnum>second:second=numreturn[first,second]解析:遍历一次,用两个变量记录最大和次大值,时间复杂度O(n)。5.题目:编写一个函数,合并两个字典,如果键相同,则值相加。例如,`{1:1,2:2}`和`{2:3,3:4}`,输出`{1:1,2:5,3:4}`。答案:pythondefmerge_dicts(d1,d2):result=d1.copy()forkey,valueind2.items():result[key]=result.get(key,0)+valuereturnresult解析:先复制一个字典,再遍历第二个字典,键存在则相加,不存在则添加,避免覆盖。二、数据结构与算法(共8题,每题3分)6.题目:给定一个无重复元素的数组,找出数组中第三大的数。例如,输入`[1,2,2,5,3,5]`,输出`2`。答案:pythondefthird_largest(nums):first,second,third=float('-inf'),float('-inf'),float('-inf')fornuminnums:ifnum>first:third=secondsecond=firstfirst=numelifnum>secondandnum!=first:third=secondsecond=numelifnum>thirdandnum!=secondandnum!=first:third=numreturnthirdifthird!=float('-inf')elseNone解析:维护三个变量记录前三大的数,遍历数组更新,时间复杂度O(n)。7.题目:实现一个`LRU缓存`,支持`get`和`put`操作。例如:-`LRUCache=LRUCache(2)`-`LRUCache.put(1,1)`→缓存是`{1:1}`-`LRUCache.put(2,2)`→缓存是`{1:1,2:2}`-`LRUCache.get(1)`→返回`1`-`LRUCache.put(3,3)`→去除键`2`,缓存是`{1:1,3:3}`-`LRUCache.get(2)`→返回`-1`(未找到)答案:pythonclassLRUCache:def__init__(self,capacity):self.cache=OrderedDict()self.capacity=capacitydefget(self,key):ifkeynotinself.cache:return-1self.cache.move_to_end(key)returnself.cache[key]defput(self,key,value):ifkeyinself.cache:self.cache.move_to_end(key)self.cache[key]=valueiflen(self.cache)>self.capacity:self.cache.popitem(last=False)解析:使用`OrderedDict`记录访问顺序,`get`时移动到末尾,`put`时超出容量则删除最久未使用项。8.题目:实现快速排序(QuickSort)算法。答案:pythondefquick_sort(arr):iflen(arr)<=1:returnarrpivot=arr[len(arr)//2]left=[xforxinarrifx<pivot]middle=[xforxinarrifx==pivot]right=[xforxinarrifx>pivot]returnquick_sort(left)+middle+quick_sort(right)解析:分治法,选择枢轴(pivot)分割数组,再递归排序左右部分。平均时间复杂度O(nlogn)。9.题目:设计一个算法,找出无重复字符的最长子串。例如,输入`"abcabcbb"`,输出`"abc"`(长度为3)。答案:pythondeflength_of_longest_substring(s):char_set=set()left=0max_len=0forrightinrange(len(s)):whiles[right]inchar_set:char_set.remove(s[left])left+=1char_set.add(s[right])max_len=max(max_len,right-left+1)returnmax_len解析:滑动窗口技术,左右指针维护子串,哈希集合记录字符,时间复杂度O(n)。10.题目:实现二叉树的层序遍历(BFS)。答案:pythonfromcollectionsimportdequedeflevel_order(root):ifnotroot:return[]result=[]queue=deque([root])whilequeue:level=[]for_inrange(len(queue)):node=queue.popleft()level.append(node.val)ifnode.left:queue.append(node.left)ifnode.right:queue.append(node.right)result.append(level)returnresult解析:使用队列实现BFS,按层遍历二叉树。11.题目:给定一个链表,反转其节点。例如,输入`1->2->3->4->5`,输出`5->4->3->2->1`。答案:pythondefreverse_linked_list(head):prev=Nonecurrent=headwhilecurrent:next_node=current.nextcurrent.next=prevprev=currentcurrent=next_nodereturnprev解析:迭代反转指针,时间复杂度O(n),空间复杂度O(1)。12.题目:实现二分查找(BinarySearch)算法。答案:pythondefbinary_search(arr,target):left,right=0,len(arr)-1whileleft<=right:mid=(left+right)//2ifarr[mid]==target:returnmidelifarr[mid]<target:left=mid+1else:right=mid-1return-1解析:适用于有序数组,时间复杂度O(logn)。13.题目:设计一个算法,找出数组中重复次数超过一半的数。假设数组非空。答案:pythondefmajority_element(nums):count=0candidate=Nonefornuminnums:ifcount==0:candidate=numcount+=(1ifnum==candidateelse-1)returncandidate解析:摩尔投票法,时间复杂度O(n),空间复杂度O(1)。三、系统设计(共3题,每题5分)14.题目:设计一个短链接(TinyURL)系统。例如,输入`"/abc"`,输出类似`"/xyz"`的短链接。答案:pythonimporthashlibimportrandomclassTinyURL:def__init__(self):self.base_url="/"self.id_map={}defencode(self,long_url):hash_obj=hashlib.md5(long_url.encode())short_id=hash_obj.hexdigest()[:6]whileshort_idinself.id_map:short_id=hash_obj.hexdigest()[:6]self.id_map[short_id]=long_urlreturnself.base_url+short_iddefdecode(self,short_url):short_id=short_url.split('/')[-1]returnself.id_map.get(short_id,None)解析:使用MD5哈希长链接,取前6位作为短ID,避免冲突。15.题目:设计一个高并发计数器,支持`get_count`和`increment`操作。答案:pythonimportthreadingclassConcurrentCounter:def__init__(self):self.lock=threading.Lock()self.count=0defincrement(self):withself.lock:self.count+=1defget_count(self):withself.lock:returnself.count解析:使用`threading.Lock`保证线程安全,适用于多线程环境。16.题目:设计一个简单的消息队列,支持`publish`和`subscribe`操作。答案:pythonclassMessageQueue:def__init__(self):self.subscribers={}defsubscribe(self,topic,callback):iftopicnotinself.subscribers:self.subscribers[topic]=[]self.subscribers[topic].append(callback)defpublish(self,topic,message):iftopicinself.subscribers:forcallbackinself.subscribers[topic]:callback(message)解析:使用字典记录主题到回调函数的映射,发布时调用所有订阅者。四、数据库(共3题,每题4分)17.题目:解释SQL语句`SELECTDISTINCTageFROMusersWHEREage>(SELECTAVG(age)FROMusers);`的含义。答案:该语句查询`users`表中年龄大于平均年龄的所有唯一年龄值。解析:外层查询选择年龄,内层子查询计算平均年龄,外层通过`WHERE`过滤大于平均值的记录,`DISTINCT`去重。18.题目:设计数据库表结构,存储用户的帖子(`posts`)和评论(`comments`)。要求:1.每个用户可以发多帖,每帖可以有多条评论。2.评论需记录评论时间。答案:sqlCREATETABLEusers(user_idINTPRIMARYKEY,usernameVARCHAR(50));CREATETABLEposts(post_idINTPRIMARYKEY,user_idINT,contentTEXT,created_atTIMESTAMP,FOREIGNKEY(user_id)REFERENCESusers(user_id));CREATETABLEcomments(comment_idINTPRIMARYKEY,post_idINT,user_idINT,contentTEXT,created_atTIMESTAMP,FOREIGNKEY(post_id)REFERENCESposts(post_id),FOREIGNKEY(user_id)REFERENCESusers(user_id));解析:`users`表存储用户,`posts`表关联用户ID,`comments`表关联`posts`和`users`,通过外键约束关系。19.题目:解释`LEFTJOIN`和`INNERJOIN`的区别。答案:-`INNERJOIN`:仅返回两个表中匹配的记录。-`LEFTJOIN`:返回左表所有记录,即使右表没有匹配,右表缺失部分用`NULL`填充。解析:`LEFTJOIN`保证左表数据不丢失,适用于需要保留左表所有记录的场景。五、网络编程与分布式(共4题,每题3分)20.题目:HTTP协议中,`GET`和`POST`请求的主要区别是什么?答案:-`GET`:参数在URL中传递,无状态,适用于查询;-`POST`:参数在请求体中传递,可状态,适用于提交数据。解析:`GET`不安全,`POST`更安全,且`POST`支持大数据传输。21.题目:什么是TCP的“三次握手”?答案:1.客户端发送SYN包到服务器;2.服务器回复SYN-ACK包;3.客户端发送ACK包,连接建立。解析:三次握手确保双方均有发送和接收能力,防止资源浪费。22.题题:解释CAP定理。答案:任何分布式系统最多只能同时满足以下

温馨提示

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

最新文档

评论

0/150

提交评论