2026年新浪程序员面试常见问题集_第1页
2026年新浪程序员面试常见问题集_第2页
2026年新浪程序员面试常见问题集_第3页
2026年新浪程序员面试常见问题集_第4页
2026年新浪程序员面试常见问题集_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

2026年新浪程序员面试常见问题集一、编程基础与数据结构(5题,每题10分)1.题目:请实现一个函数,输入一个正整数`n`,返回其二进制表示中`1`的个数。例如,输入`11`(二进制为`1011`),返回`3`。要求不使用内置函数,仅用位运算实现。2.题目:给定一个无重复元素的整数数组`nums`和一个目标值`target`,请找出数组中和为目标值的一对整数,并返回它们的索引。例如,`nums=[2,7,11,15]`,`target=9`,返回`[0,1]`(因为`nums[0]+nums[1]=2+7=9`)。3.题目:请实现一个`LRUCache`(最近最少使用缓存),支持`get`和`put`操作。`get(key)`返回`key`对应的值,如果`key`不存在返回`-1`。`put(key,value)`将`key`和`value`插入缓存中,如果缓存已满,则删除最久未使用的元素。4.题目:请解释什么是“平衡二叉树”,并给出判断一棵二叉树是否为平衡二叉树的算法。要求时间复杂度为`O(n)`。5.题目:请实现快速排序算法,并说明其时间复杂度和空间复杂度。二、算法与设计(5题,每题12分)1.题目:给定一个字符串`s`,请找到其中最长的回文子串。例如,`s="babad"`,返回`"bab"`或`"aba"`。2.题目:请设计一个算法,找出数组中第三大的数。如果数组中数字少于三个,返回最大的数。例如,`nums=[2,2,3,4]`,返回`2`。3.题目:请解释什么是“贪心算法”,并给出一个使用贪心算法解决问题的例子(如:最少货币数量问题)。4.题目:请设计一个算法,判断一个无向图是否是“二分图”。二分图是指可以将图的节点分成两个集合,使得每条边的两个端点分别属于不同的集合。5.题目:请设计一个算法,实现“合并k个排序链表”,要求时间复杂度为`O(nlogk)`。三、系统设计(3题,每题15分)1.题目:请设计一个简单的微博系统,需要支持用户发布动态、关注/取消关注、获取用户动态等功能。请说明系统架构、数据存储方式以及关键模块的设计。2.题目:请设计一个高并发的短链接系统。需要支持用户生成短链接、通过短链接跳转到原链接、统计短链接访问量等功能。请说明系统架构、数据存储方式以及如何处理高并发。3.题目:请设计一个分布式计数器系统,需要支持高并发访问和精确计数。请说明系统架构、数据存储方式以及如何保证计数的一致性。四、数据库与缓存(4题,每题10分)1.题目:请解释什么是“数据库索引”,并说明索引的优缺点。请举例说明B+树索引的工作原理。2.题目:请解释什么是“数据库事务”,并说明事务的ACID特性。请举例说明如何处理数据库事务中的并发问题。3.题目:请解释什么是“缓存穿透”和“缓存击穿”,并给出相应的解决方案。请说明Redis缓存常见的数据结构及其使用场景。4.题目:请设计一个数据库表,存储用户的个人信息(如:用户ID、用户名、邮箱、手机号等),并说明表结构设计、索引设计以及数据一致性问题。五、网络编程与分布式系统(4题,每题10分)1.题目:请解释TCP和UDP的区别,并说明TCP的三次握手和四次挥手过程。2.题目:请解释什么是“分布式锁”,并说明常见的分布式锁实现方式(如:基于Redis、Zookeeper的分布式锁)。3.题目:请解释什么是“CAP理论”,并说明在实际场景中如何选择合适的分布式系统架构。4.题目:请解释什么是“负载均衡”,并说明常见的负载均衡算法(如:轮询、加权轮询、最少连接等)。六、编程语言与框架(4题,每题10分)1.题目:请解释Java中的“线程池”是什么,并说明如何使用Java实现一个简单的线程池。2.题目:请解释Spring框架的核心概念(如:IoC、AOP),并说明SpringBoot的自动配置原理。3.题目:请解释Python中的“装饰器”是什么,并给出一个装饰器的使用示例。4.题目:请解释Go语言中的“协程”是什么,并说明协程与线程的区别。答案与解析一、编程基础与数据结构1.答案:javapublicintcountOnes(intn){intcount=0;while(n!=0){count+=n&1;n=n>>>1;}returncount;}解析:使用位运算`n&1`获取最低位的`1`或`0`,然后右移一位`n>>>1`。循环直到`n`为`0`,统计`1`的个数。2.答案:javapublicint[]twoSum(int[]nums,inttarget){Map<Integer,Integer>map=newHashMap<>();for(inti=0;i<nums.length;i++){intcomplement=target-nums[i];if(map.containsKey(complement)){returnnewint[]{map.get(complement),i};}map.put(nums[i],i);}returnnewint[]{};}解析:使用哈希表记录每个数字及其索引,遍历数组时检查`target-nums[i]`是否在哈希表中。3.答案:javaclassLRUCache{privateMap<Integer,Node>map;privateNodehead,tail;privateintcapacity;classNode{intkey,value;Nodeprev,next;Node(intkey,intvalue){this.key=key;this.value=value;}}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.value;}return-1;}publicvoidput(intkey,intvalue){if(map.containsKey(key)){Nodenode=map.get(key);node.value=value;moveToHead(node);}else{if(map.size()==capacity){map.remove(tail.prev.key);removeNode(tail.prev);}Nodenode=newNode(key,value);map.put(key,node);addNode(node);}}privatevoidmoveToHead(Nodenode){removeNode(node);addNode(node);}privatevoidaddNode(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;}}解析:使用双向链表和哈希表实现。链表头部为最近使用,尾部为最久未使用。哈希表记录`key`和链表节点的映射,实现`O(1)`的`get`和`put`。4.答案:平衡二叉树是指对于任意节点,其左右子树的高度差不超过1。判断方法:递归遍历每个节点,计算左右子树高度差,若任意节点不满足则不是平衡二叉树。时间复杂度`O(n)`。5.答案:javapublicvoidquickSort(int[]nums,intleft,intright){if(left<right){intpivotIndex=partition(nums,left,right);quickSort(nums,left,pivotIndex-1);quickSort(nums,pivotIndex+1,right);}}privateintpartition(int[]nums,intleft,intright){intpivot=nums[right];inti=left-1;for(intj=left;j<right;j++){if(nums[j]<=pivot){i++;swap(nums,i,j);}}swap(nums,i+1,right);returni+1;}privatevoidswap(int[]nums,inti,intj){inttemp=nums[i];nums[i]=nums[j];nums[j]=temp;}解析:快速排序是分治算法,选择一个基准值(通常为右端),将数组分为小于基准和大于基准的两部分,然后递归排序。时间复杂度`O(nlogn)`,空间复杂度`O(logn)`。二、算法与设计1.答案:javapublicStringlongestPalindrome(Strings){if(s==null||s.length()<1)return"";intstart=0,end=0;for(inti=0;i<s.length();i++){intlen1=expandAroundCenter(s,i,i);intlen2=expandAroundCenter(s,i,i+1);intlen=Math.max(len1,len2);if(len>end-start){start=i-(len-1)/2;end=i+len/2;}}returns.substring(start,end+1);}privateintexpandAroundCenter(Strings,intleft,intright){while(left>=0&&right<s.length()&&s.charAt(left)==s.charAt(right)){left--;right++;}returnright-left-1;}解析:扩展中心法,遍历每个字符作为中心,分别检查奇数长度和偶数长度的回文。时间复杂度`O(n^2)`。2.答案:javapublicintthirdMax(int[]nums){longmax1=Long.MIN_VALUE,max2=Long.MIN_VALUE,max3=Long.MIN_VALUE;for(intnum:nums){if(num>max1){max3=max2;max2=max1;max1=num;}elseif(num>max2&&num<max1){max3=max2;max2=num;}elseif(num>max3&&num<max2){max3=num;}}returnmax3==Long.MIN_VALUE?max1:max3;}解析:遍历数组,维护三个变量记录前三大的数。时间复杂度`O(n)`。3.答案:贪心算法是指在每一步选择当前最优解,希望通过局部最优达到全局最优。例如:最少货币数量问题,每次选择面值最大的货币,直到凑够金额。时间复杂度`O(nlogn)`。4.答案:javapublicbooleanisBipartite(int[][]graph){intn=graph.length;int[]colors=newint[n];Arrays.fill(colors,-1);for(inti=0;i<n;i++){if(colors[i]==-1){if(!dfs(graph,i,colors,0))returnfalse;}}returntrue;}privatebooleandfs(int[][]graph,intnode,int[]colors,intcolor){colors[node]=color;for(intneighbor:graph[node]){if(colors[neighbor]==color)returnfalse;if(colors[neighbor]==-1&&!dfs(graph,neighbor,colors,1-color))returnfalse;}returntrue;}解析:使用深度优先搜索(DFS)遍历图,将节点分为两种颜色,确保相邻节点颜色不同。时间复杂度`O(n+e)`。5.答案:javapublicListNodemergeKLists(ListNode[]lists){if(lists==null||lists.length==0)returnnull;returnmerge(lists,0,lists.length-1);}privateListNodemerge(ListNode[]lists,intleft,intright){if(left==right)returnlists[left];intmid=left+(right-left)/2;ListNodel1=merge(lists,left,mid);ListNodel2=merge(lists,mid+1,right);returnmergeTwoLists(l1,l2);}privateListNodemergeTwoLists(ListNodel1,ListNodel2){ListNodedummy=newListNode(0);ListNodecurrent=dummy;while(l1!=null&&l2!=null){if(l1.val<l2.val){current.next=l1;l1=l1.next;}else{current.next=l2;l2=l2.next;}current=current.next;}current.next=l1!=null?l1:l2;returndummy.next;}解析:分治法,将`k`个链表两两合并,直到只剩一个链表。时间复杂度`O(nlogk)`。三、系统设计1.答案:架构:-用户服务:负责用户注册、登录、个人信息管理。-动态服务:负责发布、获取、删除动态。-关注服务:负责关注/取消关注操作。-数据库:使用MySQL存储用户信息、动态、关注关系。-缓存:使用Redis缓存热点动态和用户信息。设计:-用户注册/登录:使用JWT认证。-发布动态:支持文字、图片、视频,使用MongoDB存储动态内容,Redis缓存热点动态。-获取动态:先从Redis获取,未命中则从MySQL查询并缓存。-关注/取消关注:使用Redis存储关注关系,支持实时推送动态。2.答案:架构:-短链接服务:负责生成短链接、解析短链接。-缓存:使用Redis缓存短链接映射。-数据库:使用MySQL存储短链接和原链接,支持高并发写入。-负载均衡:使用Nginx分发请求。设计:-生成短链接:使用哈希算法(如Base62)将原链接映射为短链接,存储到Redis和MySQL。-解析短链接:先从Redis获取,未命中则从MySQL查询并缓存。-高并发处理:使用异步写入MySQL,Redis缓存热点短链接。3.答案:架构:-计数器服务:负责提供计数接口。-缓存:使用Redis存储计数器值,支持原子操作`INCR`。-数据库:使用MySQL存储计数器值,作为备份。-负载均衡:使用Nginx分发请求。设计:-计数接口:提供`get`和`set`接口,`get`从Redis获取,`set`更新Redis和MySQL。-高并发处理:使用Redis的`INCR`原子操作,确保计数一致性。-数据一致性:使用MySQL作为备份,定期同步Redis和MySQL的计数值。四、数据库与缓存1.答案:数据库索引是帮助快速查找数据的结构,可以是B+树、哈希表等。优点是提高查询效率,缺点是占用空间、降低写入性能。B+树索引通过叶子节点链表实现范围查询。2.答案:数据库事务是原子性、一致性、隔离性、持久性的操作序列。并发问题:使用锁(行锁、表锁)或乐观锁(版本号)解决。3.答案:缓存穿透:查询不存在的数据,导致请求直接打到数据库。解决方案:使用布隆过滤器或缓存空值。缓存击穿:热点数据过期,大量请求打到数据库。解决方案:使用永不过期或设置热点数据永驻缓存。4.答案:sqlCREATETABLEusers(idINTPRIMARYKEYAUTO_INCREMENT,usernameVARCHAR(50)UNIQUENOTNULL,emailVARCHAR(100)UNIQUENOTNULL,phoneVARCHAR(20)UNIQUENOTNULL);设计:-索引:`username`、`email`、`phone`建立唯一索引。-数据一致性:使用数据库事务保证插入和更新的一致性。五、网络编程与分布式系统1.答案:TCP是面向连接的协议,保证可靠传输;UDP是无连接的协议,传输速度快但不可靠。三次握手:客户端发送SYN,服务器回复SYN-ACK,客户端回复ACK。四次挥手:客户端发送FIN,服务器回复ACK,服务器发送FIN,客户端回复ACK。2.答案:分布式锁:确保在分布式系统中只有一个进程可以执行某操作。实现方式:基于Redis(SETNX)、Zookeeper(临时顺序节点)。3.答案:CAP理论:一致性(Consistency)、可用性(Availability)、分区容错性(PartitionTolerance)。选择架构:通常选择CP或AP,根据业务需求权衡。4.答案:负载均衡:将请求分发到多个服务器。算法:轮询、加权轮询、最少连接、IP哈希等。六、编程语言与框架1.答案:javapublicclassThreadPoolExecutorimplementsExecutor{privateBlockingQueue<Runnable>queue;privateThread[]threads;//...其他参数publicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,TimeUnitunit){queue=newLinkedBlockingQueue<>();threads=newThread[maximumPoolSize];for(

温馨提示

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

评论

0/150

提交评论