|
基本信息面试流程 网申/笔试通过 → 一面通知 → 参加视频面试 → 自我介绍 → 手撕代码 → 基础知识问答 → 项目深挖 → 反问环节 → 退场。 面试问题及参考回答
一、手撕代码(必考)
1. 请写一个函数判断一个字符串是否是回文串。 参考回答:(Python) python
def is_palindrome(s: str) -> bool: left, right = 0, len(s) - 1 while left < right: if s[left != s[right: return False left += 1 right -= 1 return True
时间复杂度O(n),空间复杂度O(1)。
2. 手写快速排序。 参考回答:(讲解分治思想,边写代码边讲解) python
def quick_sort(arr, left, right): if left >= right: return pivot = partition(arr, left, right) quick_sort(arr, left, pivot - 1) quick_sort(arr, pivot + 1, right)
3. 实现一个LRU缓存机制。 参考回答:使用哈希表+双向链表实现,get和put操作时间复杂度O(1)。
二、计算机网络
4. TCP三次握手的过程是怎样的? 参考回答: 第一次握手:客户端发送SYN包到服务器,进入SYN_SENT状态 第二次握手:服务器回复SYN+ACK包,进入SYN_RCVD状态 第三次握手:客户端发送ACK包确认,双方进入ESTABLISHED状态
目的是同步序列号,确认双方收发能力正常。
5. HTTP和HTTPS的区别是什么? 参考回答:
6. 从输入URL到页面加载完成,中间发生了什么? 参考回答:
三、操作系统
7. 进程和线程的区别是什么? 参考回答: 进程是资源分配的最小单位,线程是CPU调度的最小单位 一个进程可以包含多个线程,线程共享进程的地址空间和资源 进程间通信复杂(管道、消息队列、共享内存),线程间通信简单但需要同步(锁、信号量) 进程创建和销毁开销大,线程开销小
8. 什么是死锁?如何避免? 参考回答:死锁是指两个或多个进程互相等待对方释放资源,导致都无法继续执行。死锁的四个必要条件:互斥、持有并等待、不可剥夺、循环等待。避免死锁的方法:破坏四个必要条件之一,如按顺序申请资源、使用超时机制、银行家算法等。
9. 什么是虚拟内存? 参考回答:虚拟内存是一种内存管理技术,将物理内存和磁盘空间组合,为每个进程提供连续的虚拟地址空间。优点:可以运行大于物理内存的程序,隔离进程地址空间,提高内存利用率。通过页表将虚拟地址映射到物理地址。
四、数据库
10. 什么是索引?索引的优缺点是什么? 参考回答:索引是数据库加速查询的数据结构。优点:加快查询速度;缺点:占用额外存储空间,降低插入、更新、删除的效率。常见索引类型有B+树索引、哈希索引等。
11. MySQL的InnoDB存储引擎有什么特点? 参考回答:InnoDB是MySQL默认的存储引擎,特点包括: 支持事务(ACID) 支持行级锁,并发性能好 支持外键约束 使用B+树作为索引结构 支持MVCC多版本并发控制
五、Java基础(Java岗位)
12. HashMap的底层实现原理? 参考回答:HashMap底层采用数组+链表+红黑树结构。默认初始容量16,负载因子0.75。当链表长度大于8且数组长度大于64时,链表转红黑树,查询复杂度从O(n)降为O(log n)。数组长度是2的n次幂,方便位运算计算哈希桶位置。
13. 什么是线程池?线程池的核心参数有哪些? 参考回答:线程池是管理线程的工具,避免频繁创建销毁线程。核心参数包括: corePoolSize:核心线程数 maximumPoolSize:最大线程数 keepAliveTime:空闲线程存活时间 workQueue:阻塞队列 threadFactory:线程工厂 handler:拒绝策略
|