腾讯面经

这篇博客详细记录了作者2020年参加腾讯暑期实习的面试经历,涵盖了一面和二面的主要技术问题。面试涉及了Java基础知识,如HashMap和CurrentHashMap的原理,线程池、TCP/IP协议、数据库、JVM内存模型、集合框架、Linux命令以及Redis的rehash过程等。此外,面试还讨论了多线程安全、TCP的三次握手和四次挥手、HTTP协议及HTTPS的区别、数据库引擎特性以及TCP与UDP的区别。面试官对面试者的回答进行了深入追问,展示了面试的严谨性和专业性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2020届暑期实习面试(一,二面)

一面 (时长54分钟)

  1. 自我介绍
  2. 说项目,项目问的比较深,我说到算法(正态分布),问到正态分布的细节
  3. HashMap原理
  4. Hash碰撞的解决方法

我说了两个:拉链法,开放定址法(需要看看原理)

  1. StringBuilder和StringBuffer的区别

我说到了String常量,字符串操作中最慢,之后就是StringBuilder和StringBuffer的线程安全性

  1. StringBuilder和StringBuffer使用单线程执行,有区别吗?

看过Java并发编程艺术应该有提及偏向锁的说法,说到这点面试官就okok了,恭喜答到点子了

  1. CurrentHashMap原理

CurrentHashMap的原理解析的越清晰越好,双数组+链表的结构

  1. synchronized静态方法和实例所属方法的区别

静态方法:当前类class对象作为锁 实例方法:当前对象作为锁

  1. 说说Lock
  2. 说说ReentrantLock是基于哪个类的?说说队列同步器

基于队列同步器AbstractQueueSychronier ,在说队列同步器时,我提到了两大点:队列同步器维护一个同步队列,是双向链表,同时也维护一个同步状态state;还说到它的方法分类:独占式锁和分享式锁
说说独占式锁的实现:我说到了最重要的一点就是加入同步队列的时结点需要自旋查看它的前一个结点是否获取锁,如果获取的话,它应该尝试获取锁(tryAcquire),面试官OKOK,所以这里的点在于自旋!!!

  1. 说说list下的ArrayList和LinkedList的区别

主要说ArrayList基于数组,LinkedList基于链表,LinkedList插入删除更快;ArrayList查询更快即可

  1. 讲讲线程,线程池

我提到了Excutor线程池,着重强调使用过FixedThredPool和ScheduledThreadPool没有提CachedThreadPool因为它的maximumPool是Integer.MAX_VALUE值,创建线程太多会导致cpu飙升和资源耗尽OOM

  1. 说说线程池创建时的参数
  1. corePool核心线程数,maximum最大线程数,时间,以及阻塞队列(ArrayBlockingQueue,LinkedBlockingQueue,SynchronousQueue,DelayQueue等)
### 腾讯 Python 面试经验分享 #### 自我介绍 在面试过程中,通常会先让候选人做一个简短的自我介绍。这不仅是展示个人背景的机会,也是建立良好沟通氛围的第一步。 #### 项目细节阐述 对于曾经参与过的每一个重要项目,面试官可能会针对其中的具体环节提问,要求提供详细的解释和技术实现路径[^2]。这种做法旨在评估候选人的实际动手能力和解决问题的经验。 #### 技术问题探讨 - **Python 的内存管理和垃圾回收机制** 讨论 Python 中的对象生命周期以及自动化的内存分配与释放过程是非常重要的考点之一。Python 使用引用计数作为其主要的垃圾收集策略;当对象不再被任何变量引用时就会立即销毁并回收其所占用的空间。此外还有周期性的循环检测来处理那些无法通过简单引用计数解决的情况。 - **MySQL 数据库操作** 插入或更新 MySQL 表中的记录涉及到 SQL 语法的应用。例如要向名为 `users` 的表里增加一条新纪录可以这样写: ```sql INSERT INTO users (name, age) VALUES ('Alice', 30); ``` 而如果想要更改某条已存在的数据,则可采用如下命令形式: ```sql UPDATE users SET name='Bob' WHERE id=1; ``` - **Python 版本差异** 对比 Python 2 和 Python 3 主要有几个方需要注意:字符串默认编码不同(前者ASCII后者UTF-8)、print 函数的变化、整除运算符行为改变等。特别是关于 Unicode 处理上的改进,在现代应用开发中显得尤为重要. - **字符编码转换** Python 3 默认支持 UTF-8 编码,并提供了多种内置的方法来进行文字串之间的相互转变。比如可以通过 `.encode()` 方法将 unicode 字符串转化为指定格式的 bytes 序列;反之亦然,使用`.decode()`. - **Nginx 单 IP 下多站点配置** 实现单个公网地址对应多个 Web 应用服务的关键在于合理设置 Nginx 反向代理规则。一般情况下我们会依据 Host 请求头的不同区分目标主机名从而转发请求到相应的后端服务器实例上去。 - **JavaScript 并发模型** 尽管 JavaScript 是一种基于事件驱动的语言并不直接支持传统意义上的多线程编程范式,但是借助 Worker API 或者 async/await 关键字同样能够达到异步执行的效果,提高程序响应速度和用户体验度。 - **Django 页重定向** 在 Django 框架内完成 URL 导航非常简便,只需调用 HttpResponseRedirect 类即可轻松达成目的。另外还可以利用 django.urls.reverse 功能获取命名空间下的视图名称所对应的绝对 URI 地址以便更灵活地构建链接关系。 - **Socket 编程模式** Socket 接口允许应用程序之间在网络层上交换信息包。常见的通信方式包括 TCP 连接型传输协议和服务端监听客户端连接请求的过程描述;UDP 则是非向连接的数据报文传递手段,适用于实时性强但可靠性稍低些的服务场景下。 - **创新思维考察** 提问像“给出一支普通的圆珠笔,请说出至少十种它除了写字之外可能发挥的作用”,这类开放性题目意在考验应聘者的创造性思考能力及跨领域联想水平。
评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值