大家好,我是君哥。今天分享一个老弟,被“毕业”后的求职经历。
在老东家干了 6 年,发展一般,很想出去,但是一直没有合适的机会,只好一边准备面试一边学习。让我没有想到的是,突然收到了“毕业”通知,当然,不光是我,而是整个团队。
毕业,对于我这样的老员工来说是不错的结果,因为正好我也想出去,而且这次公司还能给不少补贴。
回家住了一段时间后,我开始了疯狂面试,今年的求职环境真的让人头疼,不要说张薪了,平薪都很难。下面介绍我面试过的公司。
首先介绍下个人情况,双非本科,写码 8 年,其中 6 年在金融行业,算是有行业积累,但是核心业务并没有接触到。在金融行业工作,技术的提升是比较小的,好多流行的技术栈没有用过。
上来就是一套笔试卷,下面是其中两套笔试题:
面试心得:
面试心得:
一面20分钟结束,挂!基本都能答上一点点,但是思路不清晰,语言组织吞吞吐吐,技术理解不透彻,太久没面试,紧张。
面试心得:一面20分钟挂,好几个没答上来!
面试心得:15分钟结束。等通知(没戏)
面试心得:20分钟完,问了现在薪资和期望,然后说等通知! 二面被我拒绝了,感觉距离太远,而且行业方向不对口
面试心得:聊了一个小时左右,答的也不是很好。然后过了初试,约了复试时间;公司地址: 北京市朝阳区华腾世纪总部公园E2座3A层(地铁四惠东站B口出,导航至华腾世纪总部公园南2门)
面试心得:让我等了20分钟才进来,面试问一堆我不会的东西,面试也就问了20分钟,没戏等通知。
面试心得:20分钟完成,答的不好,说等通知没戏!
面试心得:
面试心得:浪费时间,估计就是hr忽悠我,不想面试了。
面试心得:50分钟左右,面试的整个过程,不是很难,一面应该通过了,面试官问了期望薪资,我说期望年xxx,面试官说现在行情不好给不到这么多,问多久能到岗,同时约了下周三复试时间
面试心得:这边他们只想做一个手机号匹配的,类似用户中心管理系统页面的功能,工资低,18~22k。系统也很简单,这次线上面试我的还是个用户中心的系统用户,都不是技术,还想约线下面试,浪费时间,已拒绝。
面试心得:很多细节不会,有点懵的感觉。面试了一个多小时,一边面试我一边告诉我答案,他们技术用的比较新,jdk 17 + SpringCloudalibaba,等通知!然后过了一会hr居然还约了时间二面;
回答:用分区弱化了分代的概念,强调garbage first,需要回收时才回收的优先原则,通过卡表维护记录回收了哪些内存块区域,可以通过 MaxGCPauseTime控制最大回收时间,提高系统响应时间,系统吞吐量;
又问,那他的MaxGCPauseMillis是怎么控制实现了解吗?
没答上;
答:用的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
回答:1.8升级了,锁的粒度更细,使用synchronized+cas,synchronized锁住哈希冲突的数组中头结点;
又问 cas 是用在哪里?你认为 Synchronized 锁住哈希冲突的头结点以后,就不需要 cas 操作了吗?
cas 是用在哪里没答上,然后我说synchronized锁住哈希冲突的头结点以后,应该不需要cas操作了,因为此时单线程操作安全了;
回答:一个是提交Runnable参数,一个是提交Callable对象参数,其中Callable有返回值;在execute方法中提交Runnable任务时,后台有RunnableAdapter,其实是把Runnable转换成Callable执行,这里用到了适配器模式,只不过execute方法的返回值为空;还有通过submit提交的方法,后续用Future.get阻塞获取执行结果,并且异常需要提交任务的线程自己处理;
又追问:submit方法提交的任务,如果发生异常需要调用者自己处理,这块后台是怎么实现的?
没答上!
回答:五个参数,key锁名称,requestID客户端id,NX(SET_IF_NOT_EXIST),PX(SET_WITH_EXPIRE_TIME),expireTime(超时时间),因为哪个客户端请求的就哪个释放,避免死锁,所以有这几个参数;
又问:你们生产用的什么样的分布式锁?
答:用的Redisson,因为用jedis实现分布式锁,很难解决锁续期的问题,在超时时间内如果A客户端没有执行完任务,锁被超时释放了, 次数B客户端就获取了锁,那么就会出现问题;
又问:如果你们用Redisson,在Master宕机以后,slave没有同步到分布式锁,这个问题用什么方案怎么解决?
没答上!
回答:char 不可变,当字段长度确定固定后,用 char;varchar 可变的,字段长度不确定用varchar,会多一个字节存储长度
又追问:除了这个,还有其他区别吗?
没答上,此时我反问他:那请问你知道还有什么区别吗?
他回答:当你使用varchar时,如果用了modify column去把列修改成char,会产生内存碎片空间
回答:没有,我们用的主从同步,master/slave,主库开启binlog,采用row行同步方式,主库一个线程去写入binlog里;从库一个线程从主库的binlog同步到本地的中继日志,然后再用一个线程从中继日志同步据到本地数据库数;(因为之前其他公司被问到过主从同步用了几个线程,当时回答只有一个线程,答错,后来百度搜了下明白了;也不敢说用过mysql集群,因为按照他的提问方式,如果说用了,感觉他会继续问涉及到备份、读写分离、数据一致性问题,怕回答不好露馅)
答:redolog 好像是用做数据恢复的(答错),面试官纠正,是用来做事务持久化用的;又问:那么为了保持事务和数据一致性,redolog 和 binlog 他俩是怎么做到同步的?没答上,这问题一点不会;
回答:RabbitMQ,生产者是通过交换机塞入quene中,你可以用direct exchange模式,指定routingkey绑定quene, 生产者往队列里面塞,消费者用单线程消费,消费完一个,给生产者ack确认机制以后,再继续消费下一条;又追问,如果消费者端用多线程消费,就没办法保证顺序性了吗?没答上!
回答:因为有时候由于网络故障,导致了消息重发的问题,队列中可能产生重复的消息;如果消息队列是一个类似 insert 数据库语句的操作,那么可以通过数据库唯一键来保持插入不可重复;如果不是 insert 语句操作,可以通过借助 Redis,消费者端接受到消息的时候,先往 Redis里面 set key,后续每次消费的时候,都先从 Redis key里面 get 一下,如果有这个 key 了,那么就不消费了;
回答:专门用一个消费者线程,去绑定死信队列 quene,消费死信队列的消息;
回答:用户中心改造过,nacos用来做注册服务,gateway用来做登录权鉴,验证token的操作。
答:通过@SpringBootApplication组合注解,run SpringApplication类启动的;@SpringBootApplication是组合注解,里面有@EnableAutoConfiguration和 @Configuration组合起来的,其中@EnableAutoConfiguration是开启自动配置,里面还有一个@Import注解 ,在AutoConfigurationImportSelector类里面会调用loadFactoryNames方法,加载你starter的jar下META-INF/Spring.factories这个配置,然后这个配置文件里面,配置了一些你这个starter需要用到的类,比如很多行 ..* = ... ,然后这些类都被当做组件加载到Spring容器中,直接提供给用户使用;
答:我知道 Seata 分布式组件,支持 xa 模式和 tcc 模式(答的不全,还支持 AT(默认)、Seaga 模式) 追问:那你们的系统,是分布式的,还是单体多机的模式 回答:用了单体多机模式;
答:只是分表没有分库,按照黑名单数据,里面身份证地区代码开头做区分,往对应不同的表前缀存就行了;
回答:是的
我问他:你们技术栈:他回答:我们主要用 SpringCloud 微服务这块,中间件 kafka Redis,MySQL 分库分表;
面试心得:问答环节一个小时,前面的问题,80% 还是基于你简历写的技术栈去询问沟通,有些回答上了,有些没回答上;最后问的这两个问题,感觉对方应该主要是分布式微服务这块技术栈,可能经历不太匹配。就我目前了解到的那点微服务的技术,也不敢说自己用过分布式,不然他应该会追问你服务怎么拆分的,分布式场景下的一致性问题等等这些!如果要投,有分布式微服务要求描述这块的岗位,感觉还是得再学一下,再融合到自己项目中去;这次面试,也是说等通知,应该没戏了!
面试心得:二面应该是通过,问的不是很难,之前整理过的问题都答上了,整个过程20多分钟,约了下周HR三面
面试心得:问了多久能到岗,是否接受驻场,可能双方没有意愿吧,我嘴上接受驻场,但是感觉还是有点不太想去,对面听出我的口气,最后也没给我offer;
面试心得:30 分钟挂。
面试地点:华腾世纪公园E2座3A层
(我内心:现在不都2022年了吗,还问2013年离职原因) 问了现在薪资和期望薪资待遇的情况,我说期望多少,她说高了肯定给不到,现在行情也不好;给我介绍了他们公司的几条业务线,消费贷,汽车融资租赁,房抵贷渠道,然后还有自动货柜出售商品业务;公司有上万名员工;(当时我看他们这层楼人都不多,而且办公环境也不好,有点质疑心态)
我:说学了一些新技术,学会了金融业务。我大概讲了一下。她又问我怎么用新技术去解决问题的,我说你懂技术吗?她说懂,让我讲给她听;然后我开始讲生产中处理过的比如内存溢出、宕机,讲到一半说到细节,她听不懂了,被喊停。后来开始聊其他的,聊了几分钟;问我对项目做过哪些复盘,你的整理总结文档输出沉淀有哪些?有没有团队分享?我说我有记录总结博客,需要把博客地址发给你看下吗?hr还是把刚才的话题谈回来,问我解决过哪些问题,有哪些成长?然后我盯着她(内心:刚才不是给你讲了吗,你不是听不懂还问?), 她就反问我道:我说的不明白吗,问题描述不太清楚吗?(内心很无奈:现在hr也这么装吗,是显得在公司做bp有更高价值,都开始问候选人技术问题了?) 我继续跟她扯,打算敷衍一下;前面扯完了,说到薪资结构,14薪,会在offer里面体现;然后社保公积金基数,只按照8k缴纳;
追问:如果你感觉你的系统有内存溢出,但是不用 jmap 命令做 dump 也不用 JVisualVM,怎么去排查?我答不出来。
(内心:技术管理可能混乱,项目杂不规范)
面试心得:
面试心得:20分钟结束,挂!但是等了两天又通知线上复试。
HR介绍自己公司待遇。Base*12 + 4 (16薪),全额五险一金 面试心得:20 分钟结束,等通知(后来询问得知面试挂),应该 是面试薪资要高了,一面的时候,面试官就说过这个问题,觉得技术要求达不到这个阶层吧,而且现在大环境不好,降薪的也很多。
面试心得:20 分钟结束,等通知没戏了。破拉煤物流公司,还玩什么高并发,呵呵哒。
面试心得:50分钟。问了期望薪资,我说xx,估计对面嫌高了,又问能否接受加班,我说短期加班可以,长期996吃不消。
面试心得:30分钟。找人内推的,等待通知;
面试心得:50分钟,主要是业务问题答的不好。HR晚上通知挂。
面试心得:面试聊了40分钟左右,说薪资只能跟之前持平,不能涨薪这样子。
面试心得:面试聊了 30 分钟左右,咨询内推人员,一面通过,等待银行内部员工进行二面复试。
下午17:00技术经理开始面试:
面试心得:搞笑 hr,灵魂拷问呢,工资低,加班也不少。
面试心得:面试聊了30分钟左右,一面通过,说等待一周内会进行二面复试。
在没有同行业经验的情况下,面试官基本会死磕技术,因为讲业务他听不懂。所以建议技术人在 30 岁以后最好立足于一个行业,不然面试真心太难了。