实习|腾讯CSIG实习面试(一,二面,三面)超详细记录,问的挺深的

实习|腾讯CSIG实习面试(一,二面,三面)超详细记录,问的挺深的
最新回答
矜持萝莉

2026-05-28 04:37:03

腾讯CSIG实习面试(一面、二面、三面)总结一面(54分钟)
  • 自我介绍:简要阐述教育背景、项目经历、技术栈及个人优势。
  • 项目深挖:

    重点考察算法细节,如正态分布的数学原理及应用场景。

    需清晰解释项目中的技术选型原因及优化思路。

  • Java集合框架:

    HashMap原理:基于哈希表实现,通过hashcode定位数组索引,链表解决冲突。

    Hash碰撞解决:拉链法(链表)和开放定址法(线性探测、二次探测等)。

    StringBuilder与StringBuffer:

    区别:StringBuilder非线程安全,StringBuffer线程安全(方法加synchronized)。

    单线程下性能:StringBuilder更快,因无同步开销。

    ConcurrentHashMap:分段锁(JDK1.7)或CAS+synchronized(JDK1.8),减少并发竞争。

  • 多线程与锁:

    synchronized:静态方法锁Class对象,实例方法锁当前对象。

    ReentrantLock:基于AbstractQueuedSynchronizer(AQS),支持公平锁、可中断锁。

    队列同步器:维护双向链表同步队列,通过tryAcquire自旋获取锁。

  • List对比:

    ArrayList:基于动态数组,查询快(O(1)),插入慢(O(n))。

    LinkedList:基于双向链表,插入快(O(1)),查询慢(O(n))。

  • 线程池:

    参数:核心线程数corePoolSize、最大线程数maximumPoolSize、存活时间keepAliveTime、阻塞队列(如LinkedBlockingQueue)。

    流程:任务提交→检查核心线程→加入队列→创建新线程→触发拒绝策略(如AbortPolicy)。

  • 网络协议:

    TCP vs UDP:TCP可靠(三次握手、四次挥手),UDP不可靠但高效。

    HTTP版本:

    HTTP/1.0:默认短连接,需显式设置Connection: keep-alive。

    HTTP/1.1:默认长连接,支持管道化。

    HTTP/2.0:二进制分帧、多路复用、头部压缩。

    HTTPS:在HTTP上加入SSL/TLS加密层。

  • 数据库与索引:

    引擎对比:InnoDB支持事务和行锁,MyISAM仅支持表锁。

    索引底层:B+树结构,查询快但插入/删除需维护树平衡。

  • Linux与GC:

    TOP命令:监控CPU、内存使用率,swap为虚拟内存。

    GC策略:年轻代用复制算法,老年代用标记-清除或标记-整理。

    OOM原因:老年代空间不足(如大对象直接分配到老年代)。

二面(54分钟)
  • 集合框架深化:

    HashMap无序性:因hashcode再散列定位索引,与插入顺序无关。

    海量数据性能:HashMap扩容机制保证时间复杂度O(1),但频繁扩容可能引发短暂性能波动。

    reHash安全:多线程下可能形成环状链表,导致死循环(JDK1.7问题,1.8优化)。

    HashTable安全:方法级synchronized,性能较差。

  • Redis专题:

    reHash过程:渐进式迁移数据,避免阻塞,通过ht[0]和ht[1]交替使用。

    数据结构:支持字符串、列表、哈希、集合、有序集合(ZSET)。

    单线程模型:通过I/O多路复用(epoll)实现高并发,避免线程切换开销。

  • 网络与算法:

    UDP最大容量:理论64KB(受IP数据包大小限制),实际需应用层分片。

    DNS解析优化:本地缓存、TTL机制减少重复查询。

    LRU算法:双向链表+哈希表实现,淘汰最近最少使用数据。

    桶问题算法:7升和3升桶取2升水,通过倒水操作模拟(如7→3剩4,3倒空,4→3剩1,7装满→3倒满剩5,3倒空,5→3剩2)。

三面(50分钟)
  • 项目与系统设计:

    项目拓展:需深入讲解技术选型、架构设计及优化点。

    HTTP与DNS:

    HTTP过程:DNS解析→TCP连接→发送请求→接收响应→关闭连接。

    DNS实现:分布式集群(如根域名服务器、顶级域名服务器),支持递归查询。

    hosts文件:本地域名解析,优先级高于DNS查询。

  • Linux与性能:

    负载监控:top(CPU/内存)、netstat(网络流量)、vmstat(系统整体性能)。

    CPU使用率:通过时间片分配计算,如进程A在1秒内占用500ms,则使用率为50%。

    用户态与内核态:用户态需通过系统调用切换到内核态执行特权操作。

  • 算法与场景题:

    最长子序列:动态规划解法,dp[i]表示以nums[i]结尾的最长子序列长度。

    文本前缀匹配:使用Redis的SCAN命令(非阻塞)或Trie树结构。

    CPU调度策略:

    FIFO:先进先出,可能饥饿。

    优先级调度:高优先级优先执行,低优先级可能长期等待。

  • 协程与语言:

    协程优势:轻量级(用户态调度)、避免线程切换开销、适合高并发I/O场景。

    Go语言特点:静态类型、并发支持(goroutine)、垃圾回收、跨平台。

总结与建议
  • 技术深度:面试官注重底层原理(如HashMap、TCP、GC)和源码理解(如Redis reHash)。
  • 项目经验:需准备项目中的技术难点、优化方案及扩展性思考。
  • 算法能力:动态规划、链表操作等高频考点需熟练。
  • 学习资源:

    书籍:《Java并发编程实战》《TCP/IP详解》《Redis设计与实现》。

    工具:Linux命令(top、netstat)、Wireshark抓包分析。

    实践:参与开源项目、编写技术博客总结知识点。