专栏名称: JavaGuide
专注Java后端学习!内容涵盖Java面试指南、Spring Boot、Dubbo、Zookeeper、Redis、Nginx、消息队列、系统设计、架构、编程规范等内容。公众号作者的开源项目—JavaGuide 目前已经38k+Star。
目录
相关文章推荐
芋道源码  ·  Guava的这些骚操作,让我的代码量减少了50% ·  19 小时前  
芋道源码  ·  Web 实时消息推送的 7 种实现方案 ·  昨天  
芋道源码  ·  今年这情况。。大家多一手准备吧 ·  昨天  
芋道源码  ·  如何动态调试线程池? ·  2 天前  
芋道源码  ·  后端行情变了,差别真的挺大。。。 ·  2 天前  
51好读  ›  专栏  ›  JavaGuide

面试 30 家公司,终于拿到 Offer !!

JavaGuide  · 公众号  · Java  · 2022-12-21 14:08

正文

今天分享一个朋友被“毕业”后的求职经历。

我这里就不贴参考答案了,需要参考答案的朋友可以在下面 3 个资料中找到:

下面是正文。

在老东家干了 6 年,发展一般,很想出去,但是一直没有合适的机会,只好一边准备面试一边学习。让我没有想到的是,突然收到了“毕业”通知,当然,不光是我,而是整个团队。

毕业,对于我这样的老员工来说是不错的结果,因为正好我也想出去,而且这次公司还能给不少补贴。

回家住了一段时间后,我开始了疯狂面试,今年的求职环境真的让人头疼,不要说张薪了,平薪都很难。下面介绍我面试过的公司。

首先介绍下个人情况,双非本科,写码 8 年,其中 6 年在金融行业,算是有行业积累,但是核心业务并没有接触到。在金融行业工作,技术的提升是比较小的,好多流行的技术栈没有用过。

1 链宇科技(新能源,笔试)

上来就是一套笔试卷,下面是其中两套笔试题:

面试心得:

  • 创业小公司,一上来就笔试题,而且用浏览器笔试回答过程还有视频监控,侵犯隐私,感觉有点恶心;
  • 果断遮住,这公司面过了也不想去;
  • 但太久没刷题,只做下题找下状态。

2 北大医信(医疗行业 erp)

  1. SpringBoot 怎么启动的;
  2. RabbitMQ 发消息哪几种方式;
  3. 会哪些设计模式,策略模式在项目中怎么用的;
  4. 线程怎么创建的,有哪几种方式;
  5. 有哪几种线程池实现方式;
  6. 哪些场景用消息队列;
  7. JVM 参数怎么调优;
  8. 反射怎么用。

面试心得:

一面 20 分钟结束,挂!基本都能答上一点点,但是思路不清晰,语言组织吞吞吐吐,技术理解不透彻,太久没面试,紧张。

3 长亮科技(外包)

  1. 自我介绍,项目经历;
  2. 项目流程是怎样的,你做过的项目,讲讲哪块是你做的?
  3. Synchronized 是怎样实现的,偏向锁标志存哪里,为什么升级到重量锁慢,偏向锁有个开关,如果默认开启有什么缺点?
  4. Synchronized 为什么慢,cas 是不是操作系统执行的,他比 Synchronized 快还是慢为什么?
  5. CAS 平时怎么用的,会有什么问题,为什么快,如果我用 for 循环代替 cas 执行效率是一样的吗?
  6. volatile 哪些场景会用到,原理是什么,除了在单例模式中用到,还有什么地方?
  7. 还用过哪些分布式组件,Redis 集群怎么搭建的,有哪些配置,哈希槽概念,hash 是怎么分布的?
  8. Redis 一个请求过去,是在客户端还是在服务端,通过 key 找到对应的数据?
  9. 如果 Redis 集群特别慢,有什么排查方法?
  10. 还有其他哪些分布式组件,你最熟悉哪一块?
  11. AtomicInteger 自增到一万以后,怎么归零;
  12. 源码看过哪些,讲讲。

面试心得:一面 20 分钟挂,好几个没答上来!

4 中诺数科(供应链金融):

  1. 自我介绍;
  2. 你工作这么多年了,哪些技术栈比较擅长,你觉得你做的好的项目有哪些,或者说业务复杂的地方在哪里,怎么解决的?
  3. 说一下贷前,贷中,贷后的流程,你负责哪些模块,讲讲实现流程,有没有技术难点,业务解决难点?
  4. 说一下 CAS 怎么用的,会有哪些问题,Synchronized 呢;
  5. 说一下你对 Spring 的理解;
  6. 我们知道 Redis 很快,访问是在内存中的,除了这个原因,还有没有其他原因?
  7. 你是怎么理解分布式架构的,怎么做的微服务?
  8. 有没有参与过开源项目的贡献?
  9. 你是怎么学习一门新技术的,方法是什么?
  10. Java 有哪几种基本数据类型?float 和 double 的区别是?
  11. String 和 StringBuffer、StringBuilder 的区别是?
  12. List 和 Set 的区别是?
  13. HashMap 的底层结构是?
  14. MyBatis 一级缓存和二级缓存的区别是?
  15. 说一下你对设计模式的理解,怎么根据项目的业务去选哪些设计模式,根据什么情况去做的设计模式?
  16. SpringCloud 你用过哪些,怎么用的,为什么选择 SpringCloud 组件?
  17. 你用过 Gateway,那么 Gateway 怎么做的动态路由?
  18. 说一下 NIO,为什么快,比传统阻塞 io?
  19. MySQL 索引建立的时候需要注意哪些?
  20. MySQL 查询需要注意哪些事项?
  21. MySQL 一句 sql 执行语句,从执行到返回结果,mysql 做了哪些事情?
  22. MySQL 字段 char 和 varchar 的区别是啥,varchar(30)代表什么意思?
  23. MySQL 查询平时怎么优化的?
  24. 消息中间件用的什么?RabbitMQ?有哪几种发送消息的模式?
  25. 如果访问一个页面报错,那么怎么开始排查最终定位问题?
  26. Spring 的循环依赖怎么实现的?

5 小数点科技(房抵渠道)

  1. 你对代码或者系统,做过哪些优化?
  2. 系统慢,比如 cpu 高或者内存高,是怎去排查的问题?
  3. Redis 有哪几种数据类型,这几种数据类型应用场景分别是怎样的?
  4. Redis 怎么保证事务?
  5. Spring 事务的传播机制,是怎样的?
  6. 如果有一个 select 方法,有 Spring 事务注解,这里面调用了一个 update 数据库的方法, update 是另外一个方法,update 有没有事务?
  7. 乐观锁和悲观锁,你在项目中的使用场景是什么?
  8. 说一下你对乐观锁的理解?
  9. 你的消息中间件,怎么保证顺序性?

面试心得:15 分钟结束。等通知(没戏)

6 北京鑫物(小说 app)

  1. 自我介绍一下;
  2. mysql 是做的集群吗,主从是怎么做的配置?从服务器几个线程去同步主库的?
  3. 联合索引 a b c 怎么生效,ac 或者 ab 生效吗?
  4. 你们 jvm 启动参数怎么设置的,大小怎么配置?
  5. 怎样让 AB 两个线程交替执行,他俩执行完再让 C 线程在这俩之后执行?
  6. SpringCloud 服务注册与发现,底层是怎么实现的,用 netty?
  7. 怎么定位服务器的问题,如果内存过大,怎么排查定位解决?
  8. 你们是用的自己的服务器,还是买的云服务?项目是怎么打包发布的?
  9. 发布到 linux 服务器上,有写过启动应用的脚本吗?

面试心得:20 分钟完,问了现在薪资和期望,然后说等通知! 二面被我拒绝了,感觉距离太远,而且行业方向不对口

7 恒昌利通(小贷公司)

  1. 自我介绍;
  2. 公司业务模式介绍,做什么业务的,你做哪块的;
  3. 多线程的几种实现方式,线程数池的好处,线程池有哪些参数,你们用哪种策略,生产中也用拒绝策略吗?
  4. 什么是 cas,cas 会有什么问题,Java 哪些类用了 cas?基本包装类型有用到 cas 吗?
  5. 对观察者模式了解吗,项目中怎么用到的?
  6. gc 有哪些算法,垃圾收集器,cms 有什么优点?
  7. 说一下 cap 理论,Zookeeper 是满足 cap 哪几个点,eureka 呢,nacos 呢?
  8. mysql 索引失效场景?
  9. 内存溢出有哪些情况?堆内存溢出有哪些情况?
  10. mybatis 预编译怎么实现的?
  11. mybatis 怎么防止 sql 注入?
  12. Redis 数据类型?
  13. Redis rdb 和 aof 的区别?
  14. Redis 缓存穿透 击穿 雪崩?
  15. Redis 分布式锁有哪几个参数?
  16. Redis 分布式锁怎么进行锁续期?
  17. Redis 实现分布式锁 和 Zookeeper 实现分布式锁有什么区别?
  18. Zookeeper 抢占分布式锁,如果 5 个线程去创建节点,如果第三个线程挂了,影响后面的线程吗?
  19. Java 守护线程的作用?
  20. spi 机制了解吗?

面试心得:聊了一个小时左右,答的也不是很好。然后过了初试,约了复试时间;公司地址: 北京市朝阳区华腾世纪总部公园 E2 座 3A 层(地铁四惠东站 B 口出,导航至华腾世纪总部公园南 2 门)

8 致远互联(协同管理软件)

  1. 自我介绍;
  2. cas 自增 和 Synchronized 自增 谁快 ?
  3. synchronized 和 ReentracLock 哪个快,为啥?
  4. Spring 和 SpringBoot 的区别,是什么?
  5. SpringBoot 用的是什么概念去实现的,他是用的什么思想去做的?
  6. 如果让你实现一个 SpringBoot starter,你应该怎么做?
  7. SpringCloud 用过哪些组件 ?
  8. rabbitMQ 实现机制,了解吗,为什么这么快?
  9. mysql innodb 索引失效场景
  10. 你项目里面的东西,哪些可以值得拿出来说一下?
  11. NIO 了解吗?
  12. Jdk1.8 默认 JVM 的参数

面试心得:让我等了 20 分钟才进来,面试问一堆我不会的东西,面试也就问了 20 分钟,没戏等通知。

9 拉勾网(招聘网站)

  1. 自我介绍;
  2. 用过哪些集合,怎么理解;
  3. Hashmap 的底层实现,是线程完全吗,为什么?
  4. ConcurrentHashMap 怎么实现的?
  5. 对 Volatile 和 Cas 怎么理解,Synchronized 呢?
  6. MySQL 的三种日志分别是什么,undolog 怎么实现事务的?
  7. MySQL innodb 的数据结构,B+tree 和 B-tree 的区别在哪里,数据是怎么存储的,数据页的概念是什么 ,页是连续的吗?B+tree 的非叶子结点存的什么?

面试心得:20 分钟完成,答的不好,说等通知没戏!

10 视联动力(视频通信软件)

  1. 你做了这么多年开发了,项目里面有什么值得拿出来说一下的?比如复杂的业务或者复杂的技术问题?
  2. 分布式事务,什么场景用,为什么用,你用的 hmily,那么用过 seata 吗,seata 支持 tcc 模式吗,分布式事务会出现一些什么问题?
  3. 讲一下单例模式,为什么用 double check 的方式,为什么会用 volitale;
  4. 看你简历写的,排查过线上问题排查,你是怎么排查定位的?
  5. 看你简历写的,修复过宕机问题,是怎么定位修复的?
  6. 除了单例模式,其他设计模式,你结合你的项目,怎么用的,为什么会考虑用到设计模式,带来什么好处,能讲讲吗?
  7. 分布式锁怎么用的,Redis 用分布式锁会有什么问题?
  8. 你用分布式锁,都在哪些场景下用到的?
  9. 说下你对 cas 的理解,可能会有什么问题,除了 AtomicReference 还有什么方案能解决 ABA 问题?
  10. Redis 常用的数据类型,在哪些场景下用到 Redis,有复杂一点的场景吗?
  11. Redis 怎么实现发布订阅的功能?
  12. MySQL,有一个长事务挂起很久了,怎么去查看杀掉?
  13. MySQL 表的数据量达到一定规模,比如几百万条,如果 insert 比较慢,该怎么排查解决?是数据量的问题,还是其他问题?
  14. SpringCloud nacos 注册以后, 是通过怎么去调用服务的?
  15. 怎么去解决接口的幂等性问题,如果数据库里面没有唯一主键?
  16. 分布式锁实现业务幂等?

面试心得:

  • 一个小时结束,聊了很多,对方语音听不太清,面试效率不是很高;
  • 今天面试被 PUA,说我能力不行;
  • 工作这么多年了,很多深层次的东西不了解,给我提建议,让多总结多学习,给我说大数据量情况下,sql 优化、设计模式、分布式组件、大有可为,呵呵哒!

11 壹码科技(食品检测设备)

  1. 自我介绍,哪个学校,哪年毕业的,是不是统招本科?
  2. 为什么来北京,接下来怎么考虑职业规范、发展;
  3. 接下来怎么考虑职业发展,行业方向,主要做什么考虑;
  4. 在之前工作中,有没有感觉相处不愉快的事情,感觉公司有什么不合理的制度吗?
  5. HR 开始介绍自己的公司规模;
  6. 数字化工厂事业部,纯软件方向;
  7. 主要是做企业管理系统,二次定制开发;
  8. 问了薪资多少,是否能够提供流水,期望薪资多少;
  9. 社保公积金缴纳比例多少;
  10. 后续有需要,技术部门再找你沟通;

面试心得:浪费时间,估计就是 hr 忽悠我,不想面试了。

12 某基金公司

  1. 聊天式面试主要问我们公司是做什么业务的;
  2. 自我介绍,挑一个你认为你很成功的项目来说一下;
  3. 说一下你常用熟悉的集合,讲一下区别,hashMap 不同的版本有什么区别;
  4. Redis 常用的数据结构有哪些,怎么用的?
  5. 看过 mybatis 源码吗,最近有在学什么新技术吗?
  6. mysql 数据量表大了,上千万了,怎么优化;
  7. 怎么优化查询 sql 语句;
  8. Redis 如果是集群,有没有缓存丢失的情况,脑裂是什么;
  9. Redis 缓存击穿怎么避免,你是用布隆过滤器怎么解决的?
  10. 选择设计模式,是怎么考虑的?实际项目中怎么用到的?

面试心得:50 分钟左右,面试的整个过程,不是很难,一面应该通过了,面试官问了期望薪资,我说期望年 xxx,面试官说现在行情不好给不到这么多,问多久能到岗,同时约了下周三复试时间

13 新东方前途(出国咨询)

  1. 自我介绍、系统业务逻辑介绍
  2. 为什么 3 月份到现在,还没上班?
  3. 然后介绍他们现在想做什么系统?

面试心得:这边他们只想做一个手机号匹配的,类似用户中心管理系统页面的功能,工资低,18~22k。系统也很简单,这次线上面试我的还是个用户中心的系统用户,都不是技术,还想约线下面试,浪费时间,已拒绝。

14 中关村科金(数字科技)

  1. 自我介绍,挑一个你最熟悉的项目说吧,然后用了哪些技术栈,你对哪块技术熟悉?
  2. HashMap 初始容量大小是 16, 扩容加载因子 0.75。如果容量到 12,肯定会扩容吗?
  3. 线程池拒绝以后,如果这个任务很重要,该用什么策略,接下来该怎么办,直接丢弃吗?
  4. 微服务你们怎么用的,用到哪些组件?
  5. jvm 参数怎么设置,怎么排查 jvm 的问题?
  6. 如果系统访问变慢,你怎么排查问题,链路追踪用过吗?
  7. mysql 两个字段,id name socore ,怎么取 score 前 3 的?如果第三个 socre 有重复的,怎么取 score 排名前 3 所有人的名字?
  8. Redis 怎么实现轮训,你用哪些数据结构可以实现,或者其他的你用什么算法实现?
  9. mysql 查询怎么优化?
  10. nacos 服务调用,怎么实现 cp 和 ap,ap 是默认的,那么 cp 模式呢?
  11. nacos 怎么实现的动态配置,底层原理怎么实现的?
  12. gateway 网关,你们后面配置的转发,分内部和外部系统吗?
  13. feign 用过吗?
  14. k8s 容器 了解过吗?
  15. nacos 配置文件的格式有哪几种知道吗?.yml 或者 .properties
  16. nacos 动态服务注册怎么实现的;
  17. rabbit mq 怎么保证不丢失?
  18. rabbit mq 多个消费者 A、多个生产者 A;如果我 A 发送消息给消费者,需要告诉 B 停止处理消息,该怎么做?
  19. mysql 行锁和间隙锁了解吗?
  20. 线上如果内存过大或者 cpu 占用多,你该怎么排查?

面试心得:很多细节不会,有点懵的感觉。面试了一个多小时,一边面试我一边告诉我答案,他们技术用的比较新,jdk 17 + SpringCloudalibaba,等通知!然后过了一会 hr 居然还约了时间二面;

15 卓望(移动子公司)

1、你对 g1 收集器了解吗,他的好处知道吗?

回答:用分区弱化了分代的概念,强调 garbage first,需要回收时才回收的优先原则,通过卡表维护记录回收了哪些内存块区域,可以通过 MaxGCPauseTime 控制最大回收时间,提高系统响应时间,系统吞吐量;

又问,那他的 MaxGCPauseMillis 是怎么控制实现了解吗?

没答上;

2、你们用的什么 jdk 版本,你用的收集器是什么?这收集器会有哪些缺点,实际场景中都遇到什么样的 gc 问题,你们 jvm 参数是怎么配置的?

答:用的 jdk1.8 版本,收集器是 CMS+parNew ,讲了一些堆栈参数配置,比如系统内存是 6G,--Xmn 4g ,-Xmx 4g ,-Xss 512k 的设置, -Xmn 和-Xmx 最好设置成一样大,避免内存动态扩展震荡,导致多发生一些不必要 gc 问题,用 cms,会有内存碎片化问题,可以通过两个参数开启内存碎片化整理,多少次 fullgc 后整理一次碎片,gc 中的 Promotion Failed 问题,Concurrent Mode Failure 问题会导致最后用 Serial Old 单线程回收;

还讲了代码编写不规范,比如查询整个表里面数据不分页直接放到 List 集合中,如果条数过多会导致内存溢出,FileInputStream 操作文件流使用后没有在 finally 中释放资源,导致内存泄露;update sql 语句,使用索引不规范导致锁表,其他 update sql 同样表的线程等待释放锁,整个请求链路都变慢,内存无法释放,导致内存溢出的问题;

追问:你们系统内存是 6g,当时设置堆内存大小,比例是怎么考虑的?

没答上;

追问:如果你应用内存过大,或者 cpu 占用过多,你们是怎么排查的?

答:用 top 命令,shift +p/m,可以切换查看使用最大 cpu 或者内存的进程 pid

3、juc 包 concurrenthashmap 里面用过吗,1.8 是怎么实现的,

回答:1.8 升级了,锁的粒度更细,使用 synchronized+cas,synchronized 锁住哈希冲突的数组中头结点;

又问 cas 是用在哪里?你认为 Synchronized 锁住哈希冲突的头结点以后,就不需要 cas 操作了吗?

cas 是用在哪里没答上,然后我说 synchronized 锁住哈希冲突的头结点以后,应该不需要 cas 操作了,因为此时单线程操作安全了;

4、程池中 execute 和 submit 方法有什么区别?

回答:一个是提交 Runnable 参数,一个是提交 Callable 对象参数,其中 Callable 有返回值;在 execute 方法中提交 Runnable 任务时,后台有 RunnableAdapter,其实是把 Runnable 转换成 Callable 执行,这里用到了适配器模式,只不过 execute 方法的返回值为空;还有通过 submit 提交的方法,后续用 Future.get 阻塞获取执行结果,并且异常需要提交任务的线程自己处理;

又追问:submit 方法提交的任务,如果发生异常需要调用者自己处理,这块后台是怎么实现的?

没答上!

5、Redis 分布式锁,你们怎么用的,有哪几个参数需要设置?

回答:五个参数,key 锁名称,requestID 客户端 id,NX(SET_IF_NOT_EXIST),PX(SET_WITH_EXPIRE_TIME),expireTime(超时时间),因为哪个客户端请求的就哪个释放,避免死锁,所以有这几个参数;

又问:你们生产用的什么样的分布式锁?

答:用的 Redisson,因为用 jedis 实现分布式锁,很难解决锁续期的问题,在超时时间内如果 A 客户端没有执行完任务,锁被超时释放了, 次数 B 客户端就获取了锁,那么就会出现问题;

又问:如果你们用 Redisson,在 Master 宕机以后,slave 没有同步到分布式锁,这个问题用什么方案怎么解决?

没答上!

6、MySQL 字段 char 和 varchar 有什么区别?

回答:char 不可变,当字段长度确定固定后,用 char;varchar 可变的,字段长度不确定用 varchar,会多一个字节存储长度

又追问:除了这个,还有其他区别吗?

没答上,此时我反问他:那请问你知道还有什么区别吗?

他回答:当你使用 varchar 时,如果用了 modify column 去把列修改成 char,会产生内存碎片空间

7、你们 mysql 用了集群吗?

回答:没有,我们用的主从同步,master/slave,主库开启 binlog,采用 row 行同步方式,主库一个线程去写入 binlog 里;从库一个线程从主库的 binlog 同步到本地的中继日志,然后再用一个线程从中继日志同步据到本地数据库数;(因为之前其他公司被问到过主从同步用了几个线程,当时回答只有一个线程,答错,后来百度搜了下明白了;也不敢说用过 mysql 集群,因为按照他的提问方式,如果说用了,感觉他会继续问涉及到备份、读写分离、数据一致性问题,怕回答不好露馅)

8、你刚才说到了 binlog,那么 redolog 了解过吗?

答:redolog 好像是用做数据恢复的(答错),面试官纠正,是用来做事务持久化用的;又问:那么为了保持事务和数据一致性,redolog 和 binlog 他俩是怎么做到同步的?没答上,这问题一点不会;







请到「今天看啥」查看全文


推荐文章
芋道源码  ·  Web 实时消息推送的 7 种实现方案
昨天
芋道源码  ·  如何动态调试线程池?
2 天前
投行圈  ·  众筹家:项目投融资交流会
8 年前
墨香中华  ·  你不知道
8 年前
意林  ·  听故事丨音乐和爱情
8 年前