前言
最近出去面试发现一个很严重的问题,面试官问的知识点自己明明知道,就是回到不上来。不是不知道从何说起,就是脑子里面想的东西跟表达出来的东西不匹配。
所以就有了这篇文章面试的总结与反思。
首先总结自身不足的几个点:
-
为什么明明知道却回答不上来?
-
为什么回到上来了表达的结果却不尽人意?
-
为什么很多知识点会串?
-
为什么面试官会不停的问下去?
其实这些问题每个人的处境及背景不相同,对于问题的思考也不同。这里只做一个关于问题描述的总结,关于答案我也不能回答出来,还请大家自己思考。
下面整理面试官问关于技术与项目的若干问题。以下问题源自真实的面试场景,快来看看你能答上几个。
PS:介绍一下面试的岗位为 Java 开发工程师,除了 Java 基础,其他的技能后端通用。
一面问题
-
ArrayList 与 LinkList 的区别以及使用场景? (实现方式、线程安全、CRUD时间复杂度)
-
HashMap 的实现以及是否是线程安全? (开放寻址法 数组 + 链表/红黑树 )
-
HashMap、HashTable、CourrentHashMap 的区别及业务场景?
-
Synchronized 与 Volatile 的区别以及使用场景分析?
-
Get Post 的区别?
-
Delete 方法的实现?
-
哪些请求方法是幂等性?
-
你怎么理解 Restful API 设计?
-
TCP 三次握手四次挥手的流程,为什么要这么设计?
-
服务器上 TIME_WAIT 过多怎么处理?
-
Redis 分布式锁的实现以及使用场景?
-
Redis 过期的实现?
-
Redis 数据持久化?(三种方式)
-
Redis 基本数据结构以及使用场景? (zset 微博热门,优先级队列?)
-
Mysql 存储引擎及特点?( Innodb、MyISAM )
-
Mysql 事务以及锁的使用?(表锁、行锁、悲观锁、乐观锁)
-
Mysql 事物隔离级别 ACID?(脏读、不可重复读、幻读)
-
Mysql 索引的真实设计 Str、枚举、模糊查询? (联合索引、最左前缀匹配)
-
Mysql 索引底层实现 B+ 树? (B+ 树的区别)
-
为什么要使用消息队列?(销峰填谷、项目解耦)
-
RabbitMq 延时队列的实现?(消息处理失败 -> 死信队列)
-
RabbitMq 如何确保消息被消费、消息重复消费?(消费消息的时候进行标记)
-
RabbitMq 为什么安全可靠?(消息确认机制)
-
项目中你觉得做的比较有价值的事情及难忘的问题处理?(体现出发现问题+解决问题的能力)
-
你有什么技术点是我没有问到的但是觉得可以聊聊的?(可能面试官觉得你还不错,可以暴露出一些技术上的优势)
二面问题
-
公司内部项目与公司业务项目的区别?(稳定是前提,前者侧重开发效率、后者侧重高并发高可用)
-
简单介绍一下当前这份工作的主要项目及承担责任?(考察真实项目中的角色、整体的语言的逻辑性以及对项目的理解)
-
你觉得这个项目的难点以及解决方式?(考察发现问题以及解决问题的能力)
-
你最有成就感的项目是哪个,具体聊一聊? (宏观方面阐述问题,细节方面体现价值,体现对业务的理解,对技术结合业务的思考)
-
Python、Java 你怎么看待? (脚本语言 VS 编译语言、语言的生态描述)
- 为什么 Python 比 Java 慢?
- 为什么从 Python 转到 Java?
- Java 与 Python 的生态对比?
总结
关于技术问题其实很多博客的答案写的很全面,这里就不展开细节描述了。但是需要注意的是在回答问题的人时候一定要自我总结,自我思考;根据自己的理解去回答。一定要注意回答的时候思维清晰,有理有据不可前后矛盾,思维混乱。
这里最最最重要的是看完别人的博客,一定要整理并且用自己的语言去描述。
关于项目要注重平时的积累,对待项目多思考项目的初衷及目的。多了解项目带来的价值,不断驱动自己完善项目,探索技术并应用于实际项目。
这里关于项目的回答,一定是源自平时的积累。每个人都应该有自己对工作的思考。