从深圳职场归乡:一位程序员在西安求职的经历与面试总结
在过去的六年中,我一直在深圳这片土地上打拼。今年,我与家人经过深思熟虑后,决定回到西安过年并在这里工作。尽管我曾多次考虑回家,但在深圳工作多年后,决策依然需要勇气。坦白说,这些年里虽然付出了努力,但依然无法负担深圳的高房价,也不愿意承担数百万的贷款压力。和我的家人小白一样,我们更向往安逸的生活。我们认为,生活的意义不仅在于挣钱,每个月高额的还款无疑会增加生活的压力。此外,生活在深圳也面临着饮食差异、酷热的夏季以及虫害等问题,这些都是促使我们做出回家决定的因素。值得庆幸的是,我们都是西安人,因此在选择城市上没有争议,并且近年来西安的 IT 互联网环境也得到了显著改善,找工作并不成问题(在深圳的工作经历也是让我成长了很多 😄)。最近两周,我也在积极面试西安的工作,下面我将分享一些西安公司的面试题目,希望能对大家有所帮助。
丰疆智能
一面
面试主要围绕项目和基础技术展开,面试官对项目的细节询问得非常深入。
线上笔试
在线笔试主要考察设计和编码能力。
二面
面试体验不佳,面试官时常给人PUA的感觉,语气显得很不耐烦,似乎彼此不太合适。
- 平时如何评估工作量?
- Java 中的集合有哪些?ArrayList 的扩容机制如何?
- HashMap 在何种情况下是线程不安全的?会导致什么后果?
- 线程池有哪些参数?不同参数适用的场景是什么?
- 当核心线程数未满时,继续提交任务会复用空闲线程还是创建新线程?
- Netty 的核心组件包括哪些?ByteBuf 的方法有哪些?Netty 如何实现拆包?
- Spring 中如果有两个同类型的 Bean,如何注入?如何实现全局统一注入?
- AQS 有哪些属性?你对 AQS 有哪些理解?
- AQS 的公平锁和非公平锁原理如何?读写锁的互斥规则是什么?
- Mybatis 如何实现结果绑定到 Java 对象?
- Spring 为何要有三级缓存?
- RocketMQ 如何保证消息不丢失,消费者如何保证消息的安全性?
- JVM 的内存模型是什么?哪个区域不会发生 OOM?
- JVM 可以调优哪些参数?JDK8 默认的垃圾回收器是什么?
在面试中,有些问题没听明白时询问详细解释,然而面试官直接表示已经了解,下一个问题就继续了,面试的气氛显得十分紧张。
西安移动研究院
面试耗时两个小时,三位面试官轮流提问。
一面
- 介绍项目及其细节,自己负责的编码工作;
- 包装类是深拷贝还是浅拷贝?
- Redis 的 key 删除策略是什么?
- 写代码时常见的内存泄漏有哪些?
- MySQL 索引的结构和搜索数据的过程是怎样的?
- 数据库的隔离级别分别解决什么样的问题?
- 常用的 Spring Boot Starter 有哪些?
- Netty 为什么如此高效?Epoll 的实现原理如何?
- 线程 A 中创建线程 B,线程 B 如何捕捉线程 A 的异常?
- Kubernetes 中 config 的环境变量修改是否能被 Docker 获取?
- 接口限流如何实现,Guava 和 Redis 在项目中如何结合使用?
- HashMap 是否能直接遍历删除?ConcurrentHashMap 是否能遍历删除?
- 有哪些让线程阻塞的方法?哪些类使用了 LockSupport?
- 泛型中 extends 和 super 关键字的区别是什么?在 put 操作多时用哪种,为什么?在 get 操作多时用哪种,为什么?
- 频繁读取内容时适合使用上界 extends,因为可以用上界定义的类型接收,若使用 super 则只能使用 Object 类型接收;
- 经常插入时适合使用下界 super,这样元素粒度会更小,插入时不会报错。
在册测评
完成了在线测评并提交了薪资流水。
一周多后没有收到后续消息。
西安卓派
一面
耗时 1 小时。
- Java 反射中 super 和 extend 有什么区别?
- 线程池的运行原理?如何设置线程池大小?如何使用线程池以防滥用?
- Spring 中使用过 ApplicationEvent 吗?
- ThreadLocal 的数据结构是什么?平时如何使用?
- Spring 中的 @Transactional 是如何使用 ThreadLocal 的?
- 为什么 ThreadLocal 的 key 要设置为弱引用而不使用一般引用?
- 多线程中是否可以使用 ThreadLocal?如果可以使用,应该如何操作?
- Spring 事务的隔离级别了解吗?如何使用?你如何理解隔离级别?
- Spring 中 AOP 切面的定义和多个增强的执行顺序是怎样的?
- DDD 了解吗?是否知道其中的术语?
- 了解哪些设计模式?如何使用?具体请求参数和响应参数是如何设计的?
- 设计原则中的单一职责是什么?给出一个场景询问是否应该设计成单一职责。
- Tomcat 的线程池大小如何配置?
- HTTP 协议的无状态特性你如何理解?无状态的优缺点是什么?
二面
20 多分钟。
HR 主要询问我做过的项目,以及遇到的复杂问题和解决方案,同时介绍公司及相关福利。
三面
2 个半小时。
进行上机写代码,考察两道算法题和一道系统设计题。
在此过程中,面试官非常耐心,对于写的不好的题目会引导我优化,整个过程显得很愉快。
**经验分享:**在上机考察代码能力时,若题目未理解应主动询问;若不会解题则要与面试官交流思路,避免低头不语。
四面
在三面后紧接着是老板面,西安的研发负责人。主要讨论项目及设计理解,什么是好的代码与设计,以及给出具体设计场景进行选择,强调设计模式作为理论依据。
同样也讨论了未来的发展方向。我最近关于将来走技术路线还是管理方向感到困惑,面谈中得到了很大的启发。
**个人感受:**卓派是一家外企,内部技术氛围良好。在整个面试过程中,面试官表现出高度的包容性,即使我对敏捷相关的专业术语不太了解,他们也耐心提供中文翻译,让我获益匪浅。
虽然西安团队现阶段仅有 30 人,预计今年扩展至 50 人,面临一定的业务风险,但福利待遇不错,提供全额最高的公积金,配置新款 MacBook Pro,人体工程学椅子,还有每月的团建活动。由于年终奖不高,相较于大公司没有拼命争绩效的压力。
西安腾讯云
一面
耗时:50 分钟。
- 自我介绍和项目介绍;
- 深入讨论项目实施过程及个人负责的优化;
- 线程池的场景题;
- Future 实现阻塞等待获取结果的原理;
- 零拷贝的概念;
- IO 模型有几种?NIO 和多路复用的区别;
- JDK 中 NIO 使用的是哪种模型?
- 可重入锁与 Synchronized 的区别?Synchronized 的原理?可重入锁的实现原理?
- 乐观锁与悲观锁,要求你实现;
- ReentrantLock 的实现原理?Synchronized 是悲观锁还是乐观锁?
- 了解 Paxos 算法吗?并发提案时如何处理?
- B+树的有序性以及排序规则;
- TCP 如何实现拥塞控制及重传;
- 介绍 JVM 调优经验;
- 算法题:给定一个无序数组,选择一个随机数,实现其左边所有元素大于它,右边所有元素小于它,并保持原有的相对顺序,给出实现方法及时间复杂度。
二面
25 分钟。
- 两个有序数组求交集;
- 项目介绍;
- 了解 Paxos 协议吗?工作流程是怎样的?
三面
25 分钟。
- 再次讨论有序数组求交集的题目;
- 二叉树持久化存储的方法;
- 自我介绍;
- 前几次跳槽的原因;
- 介绍一个有技术挑战的项目,深入讨论细节;
- 数据库分库分表的缺点;
- 如何解决分布式事务问题?对 TCC 的了解;
- 微服务项目的整体架构及服务间通信原理,是否同步或异步;
- RocketMQ 如何保证消息的准确性和安全性?
翼支付
一面
- 自我介绍及项目介绍;
- 微服务架构的应用及个人负责的模块和技术;
- HashMap 如何减少 hash 碰撞;
- 重写 HashCode 方法的场景;
- 项目中是否使用线程池,如何使用,常用参数有哪些?
- 当线程池核心大小满了,队列满了,提交任务时会创建新线程还是排队?
- 数据库索引和约束的理解;
- 数据库时间类型(DataTime & TimeStamp)及其区别;
- Kafka 如何实现高可用与可扩展;
- 定时任务框架的了解(Elastic-Job、Xxl-Job、Quartz)及其优缺点;
- Apollo 热部署的实现原理;
- Redis 热 Key 解决方案;
- Redis 的过期删除策略;
- Spring 如何同时注入多态 Bean?
二面
群面,五位候选人一起参加,每人一至两个问题。
- 项目及优化设计的探讨;
- 领导团队的经验及如何帮助团队成员。
以上是我所经历的面试总结。在此分享的过程中,有一些公司的面试经历未能及时记录(如京东、趣联网络科技、中兴、民生科技、比亚迪等),但一般都差不多。