在过去的六年中,我一直在深圳这片土地上打拼。今年,我与家人经过深思熟虑后,决定回到西安过年并在这里工作。尽管我曾多次考虑回家,但在深圳工作多年后,决策依然需要勇气。坦白说,这些年里虽然付出了努力,但依然无法负担深圳的高房价,也不愿意承担数百万的贷款压力。和我的家人小白一样,我们更向往安逸的生活。我们认为,生活的意义不仅在于挣钱,每个月高额的还款无疑会增加生活的压力。此外,生活在深圳也面临着饮食差异、酷热的夏季以及虫害等问题,这些都是促使我们做出回家决定的因素。值得庆幸的是,我们都是西安人,因此在选择城市上没有争议,并且近年来西安的 IT 互联网环境也得到了显著改善,找工作并不成问题(在深圳的工作经历也是让我成长了很多 😄)。最近两周,我也在积极面试西安的工作,下面我将分享一些西安公司的面试题目,希望能对大家有所帮助。

丰疆智能

一面

面试主要围绕项目和基础技术展开,面试官对项目的细节询问得非常深入。

线上笔试

在线笔试主要考察设计和编码能力。

二面

面试体验不佳,面试官时常给人PUA的感觉,语气显得很不耐烦,似乎彼此不太合适。

  1. 平时如何评估工作量?
  2. Java 中的集合有哪些?ArrayList 的扩容机制如何?
  3. HashMap 在何种情况下是线程不安全的?会导致什么后果?
  4. 线程池有哪些参数?不同参数适用的场景是什么?
  5. 当核心线程数未满时,继续提交任务会复用空闲线程还是创建新线程?
  6. Netty 的核心组件包括哪些?ByteBuf 的方法有哪些?Netty 如何实现拆包?
  7. Spring 中如果有两个同类型的 Bean,如何注入?如何实现全局统一注入?
  8. AQS 有哪些属性?你对 AQS 有哪些理解?
  9. AQS 的公平锁和非公平锁原理如何?读写锁的互斥规则是什么?
  10. Mybatis 如何实现结果绑定到 Java 对象?
  11. Spring 为何要有三级缓存?
  12. RocketMQ 如何保证消息不丢失,消费者如何保证消息的安全性?
  13. JVM 的内存模型是什么?哪个区域不会发生 OOM?
  14. JVM 可以调优哪些参数?JDK8 默认的垃圾回收器是什么?

在面试中,有些问题没听明白时询问详细解释,然而面试官直接表示已经了解,下一个问题就继续了,面试的气氛显得十分紧张。

西安移动研究院

面试耗时两个小时,三位面试官轮流提问。

一面

  1. 介绍项目及其细节,自己负责的编码工作;
  2. 包装类是深拷贝还是浅拷贝?
  3. Redis 的 key 删除策略是什么?
  4. 写代码时常见的内存泄漏有哪些?
  5. MySQL 索引的结构和搜索数据的过程是怎样的?
  6. 数据库的隔离级别分别解决什么样的问题?
  7. 常用的 Spring Boot Starter 有哪些?
  8. Netty 为什么如此高效?Epoll 的实现原理如何?
  9. 线程 A 中创建线程 B,线程 B 如何捕捉线程 A 的异常?
  10. Kubernetes 中 config 的环境变量修改是否能被 Docker 获取?
  11. 接口限流如何实现,Guava 和 Redis 在项目中如何结合使用?
  12. HashMap 是否能直接遍历删除?ConcurrentHashMap 是否能遍历删除?
  13. 有哪些让线程阻塞的方法?哪些类使用了 LockSupport?
  14. 泛型中 extends 和 super 关键字的区别是什么?在 put 操作多时用哪种,为什么?在 get 操作多时用哪种,为什么?
  • 频繁读取内容时适合使用上界 extends,因为可以用上界定义的类型接收,若使用 super 则只能使用 Object 类型接收;
  • 经常插入时适合使用下界 super,这样元素粒度会更小,插入时不会报错。

在册测评

完成了在线测评并提交了薪资流水。

一周多后没有收到后续消息。

西安卓派

一面

耗时 1 小时。

  1. Java 反射中 super 和 extend 有什么区别?
  2. 线程池的运行原理?如何设置线程池大小?如何使用线程池以防滥用?
  3. Spring 中使用过 ApplicationEvent 吗?
  4. ThreadLocal 的数据结构是什么?平时如何使用?
  5. Spring 中的 @Transactional 是如何使用 ThreadLocal 的?
  6. 为什么 ThreadLocal 的 key 要设置为弱引用而不使用一般引用?
  7. 多线程中是否可以使用 ThreadLocal?如果可以使用,应该如何操作?
  8. Spring 事务的隔离级别了解吗?如何使用?你如何理解隔离级别?
  9. Spring 中 AOP 切面的定义和多个增强的执行顺序是怎样的?
  10. DDD 了解吗?是否知道其中的术语?
  11. 了解哪些设计模式?如何使用?具体请求参数和响应参数是如何设计的?
  12. 设计原则中的单一职责是什么?给出一个场景询问是否应该设计成单一职责。
  13. Tomcat 的线程池大小如何配置?
  14. HTTP 协议的无状态特性你如何理解?无状态的优缺点是什么?

二面

20 多分钟。

HR 主要询问我做过的项目,以及遇到的复杂问题和解决方案,同时介绍公司及相关福利。

三面

2 个半小时。

进行上机写代码,考察两道算法题和一道系统设计题。

在此过程中,面试官非常耐心,对于写的不好的题目会引导我优化,整个过程显得很愉快。

**经验分享:**在上机考察代码能力时,若题目未理解应主动询问;若不会解题则要与面试官交流思路,避免低头不语。

四面

在三面后紧接着是老板面,西安的研发负责人。主要讨论项目及设计理解,什么是好的代码与设计,以及给出具体设计场景进行选择,强调设计模式作为理论依据。

同样也讨论了未来的发展方向。我最近关于将来走技术路线还是管理方向感到困惑,面谈中得到了很大的启发。

**个人感受:**卓派是一家外企,内部技术氛围良好。在整个面试过程中,面试官表现出高度的包容性,即使我对敏捷相关的专业术语不太了解,他们也耐心提供中文翻译,让我获益匪浅。

虽然西安团队现阶段仅有 30 人,预计今年扩展至 50 人,面临一定的业务风险,但福利待遇不错,提供全额最高的公积金,配置新款 MacBook Pro,人体工程学椅子,还有每月的团建活动。由于年终奖不高,相较于大公司没有拼命争绩效的压力。

西安腾讯云

一面

耗时:50 分钟。

  1. 自我介绍和项目介绍;
  2. 深入讨论项目实施过程及个人负责的优化;
  3. 线程池的场景题;
  4. Future 实现阻塞等待获取结果的原理;
  5. 零拷贝的概念;
  6. IO 模型有几种?NIO 和多路复用的区别;
  7. JDK 中 NIO 使用的是哪种模型?
  8. 可重入锁与 Synchronized 的区别?Synchronized 的原理?可重入锁的实现原理?
  9. 乐观锁与悲观锁,要求你实现;
  10. ReentrantLock 的实现原理?Synchronized 是悲观锁还是乐观锁?
  11. 了解 Paxos 算法吗?并发提案时如何处理?
  12. B+树的有序性以及排序规则;
  13. TCP 如何实现拥塞控制及重传;
  14. 介绍 JVM 调优经验;
  15. 算法题:给定一个无序数组,选择一个随机数,实现其左边所有元素大于它,右边所有元素小于它,并保持原有的相对顺序,给出实现方法及时间复杂度。

二面

25 分钟。

  1. 两个有序数组求交集;
  2. 项目介绍;
  3. 了解 Paxos 协议吗?工作流程是怎样的?

三面

25 分钟。

  1. 再次讨论有序数组求交集的题目;
  2. 二叉树持久化存储的方法;
  3. 自我介绍;
  4. 前几次跳槽的原因;
  5. 介绍一个有技术挑战的项目,深入讨论细节;
  6. 数据库分库分表的缺点;
  7. 如何解决分布式事务问题?对 TCC 的了解;
  8. 微服务项目的整体架构及服务间通信原理,是否同步或异步;
  9. RocketMQ 如何保证消息的准确性和安全性?

翼支付

一面

  1. 自我介绍及项目介绍;
  2. 微服务架构的应用及个人负责的模块和技术;
  3. HashMap 如何减少 hash 碰撞;
  4. 重写 HashCode 方法的场景;
  5. 项目中是否使用线程池,如何使用,常用参数有哪些?
  6. 当线程池核心大小满了,队列满了,提交任务时会创建新线程还是排队?
  7. 数据库索引和约束的理解;
  8. 数据库时间类型(DataTime & TimeStamp)及其区别;
  9. Kafka 如何实现高可用与可扩展;
  10. 定时任务框架的了解(Elastic-Job、Xxl-Job、Quartz)及其优缺点;
  11. Apollo 热部署的实现原理;
  12. Redis 热 Key 解决方案;
  13. Redis 的过期删除策略;
  14. Spring 如何同时注入多态 Bean?

二面

群面,五位候选人一起参加,每人一至两个问题。

  1. 项目及优化设计的探讨;
  2. 领导团队的经验及如何帮助团队成员。

以上是我所经历的面试总结。在此分享的过程中,有一些公司的面试经历未能及时记录(如京东、趣联网络科技、中兴、民生科技、比亚迪等),但一般都差不多。