深入解析广州小型企业后端面试经历:从自我介绍到技术细节的全景展示

1. 自我介绍

面试的第一步是简单的自我介绍。

2. 项目展示

面试官要求我展示上线项目,准备好的项目展示至关重要!面试官通过查看我的简历,迅速打开了项目网址。随后,他问了一些关于API和BI的基本问题。

API:

  • 接口平台是什么?
  • 有多少个接口?(让我登录管理员界面)
  • 谁在调用这些接口?(使用者群体?校内还是商业?)

BI:

  • Chat GLM的应用?(简历中提到的ChatGLM)
  • 如何生成应用?(提到预设模板:输入模板 输出模板 + 文件预设问答训练)
  • 模型是否自己部署?(面试官可能不太了解ChatGLM,误以为是我自己部署的 🤐)

3. 技术问题

接下来进入了技术考察环节:

多线程:

  • synchronized和lock的区别(在这里的确有点尴尬,既不太理解面试官的发音,也对这两个概念掌握不够。主要谈到了获取与释放的不同,说明synchronized是通过代码块进行锁定。)
  • wait和sleep的区别(在synchronized中CPU占用情况、唤醒时机等)。

Java集合:

  • ArrayList和LinkedList的区别。(内存结构、增删改查效率)
  • HashMap的扩容机制。(阈值等,讲述时偏离了主题,最后提到HashMap链表升级红黑树的原理:链表转为红黑树的效率)
  • 垃圾回收算法(提到了标记清除、标记整理、复制算法,面试官没有深入问我这块)。

MyBatis:

  • #{}和${}的区别(讨论了SQL注入和预处理的概念,提及statement和preStatement的使用情况)。
  • 谈谈MyBatis-Plus。
  • 动态SQL(使用mapper.xml配置,提及了一些我记得的内容如<if> <where> <and>)。

MySQL:

终于进入了我之前准备的领域😭。

  • 存储引擎(讨论了三个引擎,同时说明了MyISAM和InnoDB的底层文件索引数据的区别)。
  • 锁机制(MyISAM有表锁,InnoDB有细粒度的锁。提到MyISAM的增删性能强,而InnoDB支持事务等)。
  • 主从同步的经验(没有实际经验,本想说可以通过xx实现,但对方直接问“你做过吗?”)。
  • 建表经验(面试官询问表的数量,我回答三个,面试官对此表示惊讶😂)。
  • 用户角色权限设计(面试官提示RBAC,这一知识点我不太了解,面试后补习了)。
  • MySQL的ID除了自增还有其他方式?(只记得用过雪花算法,其他方法有点模糊)。
  • UUID和雪花算法的对比(提到雪花算法保证唯一性,但对UUID的缺陷没有深入思考 🤡,我说两者都可以,没有明确区别)。

Redis:

  • 缓存问题及解决方案(解释了相关问题和解决策略,面试官开始查看电脑,等我说完后才问下一个问题 🤯)。
  • 持久化策略(只记得两种策略,具体内容有点模糊)。

Nginx与Docker:

  • 有使用过Nginx吗?(回答是,主要用于项目的代理转发)。
  • 有使用过Docker吗?(一开始说没有用Docker部署,后面意识到应该提到使用Docker部署Redis和RabbitMQ的经验 🤡)。

前端(小公司偏全栈)

  • 你对前端了解吗?(我表示自己做过React项目,并学习过Vue,能够快速上手)。

4. 反问环节:

  • 技术栈?后端:Spring Boot + Spring Cloud,前端:Vue + TS + ElementUI
  • 业务模式?面试官提到是驻点,具体理解不深,他说可以类比为“盖房子”。
  • 表现?面试官表示还不错,基础知识过关。
  • 留个微信?(因为面试安排不明确,直接去面试,最终面试官询问了联系方式 🤡)。

5. 反思与总结:

总的来说,面试持续了24分钟(面试官提到有会议安排),这是我第一次面试的经历🙂。

  1. 第一印象:面试官(可能也是老板)一直在吸烟,没停过。面试时的印象中等,但这个习惯让我印象不佳。
  2. 项目展示较少,未能表现出我的最佳状态。没有深入讨论自己的项目思考(如选择技术栈的原因、项目难点等)。未来可以改进,引导面试官询问自己熟悉的问题。
  3. 没有确认面试官的身份(是老板还是技术主管),这影响了我问问题的准确性。
  4. 巩固不熟悉的知识点。
  5. 管理员账号设置成admin会更合适,还帮面试官输入了管理员账号(由于我设置的是自己的英文名 🤐)。