某小厂电话面

电话面 40 分钟。偏基础,说后续会问项目实习比较多

面试官会引导你回答问题,挺好的。

问题列表

  1. 请简要介绍一下自己,包括教育背景、项目经历、实习经验等。
  2. 你擅长哪些技术领域?有哪些不足?
  3. 面向对象的三大特征是什么?
  4. Object 类有哪些方法?
  5. HashMap 的 put 过程是怎样的?
  6. 什么时候会使用红黑树来优化 HashMap 的性能?
  7. 除了链地址法和红黑树,还有哪些方法可以解决哈希冲突?
  8. 创建线程的几种方式有哪些?
  9. 阻塞线程的方式有哪些?
  10. Synchronized 和 Lock 的区别是什么?
  11. Synchronized 可以在静态代码块上加锁吗?
  12. ACID 特性分别是什么?
  13. 原子性是如何实现的?
  14. 你有做过 SQL 的优化吗?有哪些优化方法?
  15. 如何优化几千万条数据的查询性能?
  16. 简单介绍一下 CAS 机制。
  17. 简单介绍一下 JVM 的内存模型。
  18. 没有程序计数器会怎么样?
  19. 设计哈希算法时需要考虑哪些因素?
  20. 如何设计分表策略?(水平分表与垂直分表)
  21. 如何避免数据倾斜?
  22. 算法:如何判断链表是否有环? 部分回答的感觉一般

附上GPT解答

  1. 请简要介绍一下自己,包括教育背景、项目经历、实习经验等。
  2. 你擅长哪些技术领域?有哪些不足?
  3. 面向对象的三大特征是什么? 封装:将数据和操作封装在类中,隐藏内部实现细节。继承:子类继承父类的属性和方法,实现代码复用。多态:同一接口,不同实现。通过方法重载和方法重写实现。
  4. Object 类有哪些方法? hashCode()equals(Object obj)toString()clone()finalize()wait()notify()notifyAll()
  5. HashMap 的 put 过程是怎样的? 计算 key 的 hash 值。根据 hash 值找到对应的桶(bucket)。如果桶为空,创建一个新的节点。如果桶不为空,遍历链表或红黑树,检查 key 是否存在。如果 key 存在,更新 value。如果 key 不存在,将新节点插入链表或红黑树。如果链表长度超过阈值,转换为红黑树。
  6. 什么时候会使用红黑树来优化 HashMap 的性能? 当链表长度超过阈值(默认8)且桶内元素总数超过64时,链表转换为红黑树,以提高查找和插入效率。
  7. 除了链地址法和红黑树,还有哪些方法可以解决哈希冲突? 开放寻址法:线性探测、二次探测、双重散列。再哈希:使用不同的哈希函数重新计算哈希值。
  8. 创建线程的几种方式有哪些? 继承 Thread 类。实现 Runnable 接口。实现 Callable 接口。使用线程池(ExecutorService)。
  9. 阻塞线程的方式有哪些? 使用 wait() 和 notify()/notifyAll()使用 sleep()使用 join()使用 Lock 的 lock() 和 await()
  10. Synchronized 和 Lock 的区别是什么? Synchronized 是 Java 的内置锁,使用简单,但功能有限。Lock 是 Java 5 引入的接口,提供了更灵活的锁机制,如可中断锁、超时锁、公平锁等。
  11. Synchronized 可以在静态代码块上加锁吗? 可以。静态代码块上的锁是类级别的锁,而不是对象级别的锁。
  12. ACID 特性分别是什么? 原子性(Atomicity):事务中的操作要么全部执行,要么全部不执行。一致性(Consistency):事务执行前后,数据库状态保持一致。隔离性(Isolation):并发事务之间互不影响。持久性(Durability):事务一旦提交,数据永久保存。
  13. 原子性是如何实现的? 通过使用日志(如 undo log)记录未完成的操作,在事务失败时回滚。
  14. 你有做过 SQL 的优化吗?有哪些优化方法? 使用索引优化查询。避免全表扫描,使用 WHERE 子句限制结果集。使用连接池提高并发性能。分区表和分片技术。
  15. 如何优化几千万条数据的查询性能? 使用合适的索引。分区表或分库分表。查询缓存。优化 SQL 语句,避免复杂的 JOIN 和子查询。
  16. 简单介绍一下 CAS 机制。 比较并交换(Compare and Swap),一种无锁算法,通过比较内存位置的当前值和预期值,如果相同则更新为新值。
  17. 简单介绍一下 JVM 的内存模型。 堆(Heap):存储对象实例。方法区(Method Area):存储类信息、常量、静态变量、即时编译器编译后的代码。虚拟机栈(JVM Stack):存储方法调用的局部变量和部分结果。本地方法栈(Native Method Stack):为本地方法服务。程序计数器(Program Counter Register):当前线程所执行的字节码的行号指示器。
  18. 没有程序计数器会怎么样? 无法记录当前线程执行的位置,导致线程切换后无法恢复正确的执行位置。
  19. 设计哈希算法时需要考虑哪些因素? 哈希函数的均匀性。冲突解决策略。扩展性和可扩容性。
  20. 如何设计分表策略?(水平分表与垂直分表) 水平分表:根据某个字段的值将数据拆分到不同的表中。垂直分表:将表按字段拆分,将常用字段和不常用字段分开存储。
  21. 如何避免数据倾斜? 使用均匀的哈希函数。动态调整分片策略。预分片,避免热点数据集中在某个分片。
  22. 如何判断链表是否有环? 使用快慢指针法:一个指针每次走一步,另一个每次走两步。如果两个指针相遇,则有环。
#软件开发笔面经##面试##后端#
后端开发笔面经 文章被收录于专栏

主要收录一部分我的笔试面试经历文章,欢迎订阅。

全部评论
秋招吗
1 回复 分享
发布于 09-21 04:12 浙江
小厂一般多少k啊
点赞 回复 分享
发布于 09-22 21:32 湖北
boss 上的
点赞 回复 分享
发布于 09-23 20:22 安徽
更新,二面基本啥都没问,17分钟结束,应该没了
点赞 回复 分享
发布于 09-25 11:36 安徽
嘉为科技?
点赞 回复 分享
发布于 11-04 23:20 陕西

相关推荐

27 95 评论
分享
牛客网
牛客企业服务