跑断腿的七次面试,我终于悟出这些道理

本文记录了一位求职者在一周内的多次面试经历,涉及互联网公司、车联网公司和国企,涵盖Spring、ArrayList、事务管理等技术问题。面试者在面对面试官的提问时,既有成功解答,也有遇到的挑战。在薪资谈判方面,求职者在几家公司的反馈中了解到自己的期望薪资高于市场标准,并在最后选择了满意的工作机会。
摘要由CSDN通过智能技术生成

因为我一开始并不知道这个公司所处的那个位置是不是很远, 所以我一大早就打车过去了, 最后才知道也很近, 因为他们公司是九点上班, 我的面试是九点半, 我八点就到了这个公司楼下, 于是我就在外面等了好大一会, 到了九点我才进入公司面试.

首先是给我一张表格, 上面有你自己的期望薪资, 我写下自己的期望薪资, 然后他们人事看了后 说我写的期望薪资有点高, 剩下的就是给我拿笔试题.

笔试题也不是很难, 做完了后便开始面试了.

**1, 类加载的生命周期?

2, arrayList的扩容方式?

3, spring事务的优点?

4, getParameter和getAttribute的区别?

5, group by的使用?

6, onload()和ready()的区别?

7, 项目中的一些问题.**

基本上我记得的就这么多, 只要做过一些准备的话 这些面试题都不是问题, 面试也谈的比较融洽, 最后人事找到我说我开的薪资有点高, 并说了他们能够接受的一个最高值, 然后我就是说我还需要考虑一下, 然后周五给他们答复.

9月19 周一 下午 B公司

这个公司是一个猎头给我找的, 做车联网方面的开发的, 这个地方离我住的地方还是有些距离的, 所以中午面试完后直接在外面吃了点饭就去了. 到了面试的公司发现还是去的有点早, 于是便在公司楼下到处晃悠, 期间还发现了不少漂亮妹子(哈哈, 有点扯远了, 自己也是在减缓自己的压力)

进入公司首先也是要做笔试题, 在这里要好好说下这个笔试题:

笔试题包括30个选择题 和几个简答题, 选择题用的是英文, 而且全是多选题, 所以我的笔试题做的并不好.

简答题并不难, 最后一个关于IO操作且写出代码的题我也空着没有做.

剩下的就是面试了, 这次是一下来了两个面试官, 估计是一面二面全都一起来面了.

面试内容是第一个面试官把笔试题从头到尾的先问一遍, 然后第二个面试官把简历从头到尾的再问一遍. 最后是他们再自己按照自己笔记上的内容问一遍. 所以这场面试持续的时间有点长. 在这里写上几个我回答不好的问题.

**1, SpringMVC 怎么添加过滤使得避免空指针? 这个最后才知道可以在javabean上设置注解设置这个字段不能为空.

2, 你们项目在什么情况下会使用多线程? 这个我确实没有接触过, 所以直接说多线程我在项目中接触的比较少.

3, 如何通过反射去调用一个类的私有方法? 这个是需要setAccessible()方法来抑制Java访问权限的检查的, 当时觉得前面的问题被问的懵逼了, 大脑也一片空白.**

剩下的就不太清了, 总体的话面试还是问了比较多的问题, 大多我都能够很好的回答上来, 这场是让我感觉最压抑的一场面试, 但是自己也接触到了这么一种新的面试体验, 总体觉得自己还是收获很大的.

最后面试官看了我的期望薪资, 也说我写的有些高, 然后就是让我回去等结果. 我就知道自己肯定是挂了, 第二天早上就收到邮件说面试不通过. 我没多想, 仍然在准备接下来的面试.

=====================================================================

9月20 周二 上午 C公司

这家公司是一个国企, 也是猎头帮我找的, 早上起了大早, 坐了半个小时的车才到这家公司.

这家公司是一个独立的园区, 绿化很好, 占地面积很大, 当时就觉得这个国企好有钱… 最后才知道其他的办公楼只是他们母公司旗下的, 他们的研发部只有一层楼 30多个人.

**填写了面试基本信息表后就是直接安排面试了, 并没有笔试环节.

面试过程中面试官就问了三个问题.**

**1, 你对Spirng的理解? 我说了Spring的基本核心内容, 然后说了我们项目中是如何去配合其他框架使用的.

2, 你们负载均衡以及集群是怎么搭建的? 我给他讲了Nginx的原理以及如何搭建的, 以及这样做的优点. 然后讲了我们的系统是如何构建的, 以及为何要使用集群.(其实这些问题在上面几个公司我都回答过)

3, 你们购物车这个是如何做的?(因为我的简历中的项目中写的有我负责购物车这个模块)  然后我就给他讲了一下具体的实现以及用到了什么技术, 其实这些上面几家公司也有问到**

问到这里他就直接给我说他问完了,到这里我心里就在打鼓, 我回答的还可以啊, 面试官对我不满意? 然后他让我问他一些问题, 我接着就问他他们项目组的一些具体问题, 感觉我问他的问题比他问我的问题还要多.

这个是HR和面试官坐在一起的, 然后HR就给我讲了下他们公司的发展前景,最后还说了他们的薪资结构, 然后就让我回去等通知了.

同样的, 我以为等通知就是没戏了, 谁知道第二天给我打电话说我通过了, 然后说能够给我的是年薪XX, 而且他们的五险一金全都是按照最高标准去交, 当时听了真的很激动, 当时由于已经确定签约另一家公司, 所以还是和这个公司表示了感谢, 拒绝了这份offer.

9月20 周二 下午 L公司

我现在不想那么盲目的再去找面试了, 百度了这家公司发现网上骂声比较多, 而且这个公司规模也不是很大, 于是我便给这个公司打电话 表示自己去不了啦, 然后表示了自己的歉意.

面试完C公司我就回家睡觉了, 感觉这几天一直在跑 真的很累, 因为暂时还没有找到一个心仪的公司, 所以压力真的很大, 每天不想吃饭, 觉也睡不好.

=====================================================================

9月21 周三 上午 CQ公司

这个公司是在我住的附近, 所以踩着约定的时间到了这家公司面试, 公司里面面试者比较多, 我是先做完笔试题, 然后就排队等着面试了.

面试是在中午十一点, 因为后面等待的人还是很多, 所以面试官就面试了30分钟左右, 主要还是问了我一些项目上的内容, 我感觉还是回答的不错的, 最后到了饭点就让我回去等人事通知了.

第二天人事打电话想让我去签约, 开出的薪资还可以, 而且有2-4个月的年终奖.每年需要出差四个月.

因为下午的时候是签约了另一家公司, 所以这一家自己也是推掉了.

9月21 周三 下午 M公司

这一家公司是我最终选择的公司, 无论平台发展和薪资要求都是我很满意的.

首先是进入公司, 感觉公司的环境非常好, 因为提前在网上有对这家公司有过了解, 也用过他们的产品, 所以还是很想进入这家公司的. 我相信大家也一定用过他们家的产品, 这里我就不方便具体透漏了.

首先就是开始做笔试题, 笔试题 并不是很难, 做完后就开始面试了.

一面: 人事面

这里又和我之前面的几家公司不同, 第一轮是人事面, 问的问题就是为何辞职, 问了自己的人生规划, 问了自己的价值观的一些东西, 聊得还挺融洽, 紧接着就是二面了.

二面: 技术一面

面试官确实让我感觉到是个大牛, 他并没有 看我的简历, 只是针对于我的工作经验来问了我三个题.

1, 我们服务器在启动的时候 一瞬间有1000个访问, 那么如果使用一个HashMap去存储的话 你会设置初始值为多大?

其实这个问题我并没有正面的去回答设置多大的初始值, 我给他说了一下HashMap扩容的原理, 并说到了HashMap的阀值是和初始值大小和加载因子相关的, 然后说道要权衡空间复杂度和时间复杂度的情况.

感觉他对这个问题的回答还是比较满意的.

2, 我们是有700W的日活, 如果有一个方法的参数是(String cityCode)查询的话, 怎么去保证同步?

我说的是加synchronize或者加Lock, 接着他就问我这两种的区别, 问他们的性能哪个好. 然后我说在这个案例里面我们可以加Lock, 然后他就问我怎么加Lock去控制颗粒度来达到最好的效果?

到了这里我真的是不知道了, 因为压根就不太了解Lock的机制, 但是他说没关系, 然后想一下怎么去做, 还提示我这个可以引用HashMap的设计思想.

最后我想的就是这里对cityCode进行分组, 通过组去定位具体要查询的cityCode的位置. 对于这个答案他听后 觉得是可以提升一些性能, 但仍不是最好的.

最后的话给我说了下hash碰撞, 通过hash值取模来去颗粒度更精细, 其实这里我知道hashmap中也是通过hash值去定位数组的位置的. 这个问题就到这里了.

我自己又找了下HashMap中关于hashcode定位桶的位置的方法:

1 /**

2 * 根据特定的hashcode 重新计算hash值,

3 * 由于JVM生成的的hashcode的低字节(lower bits)冲突概率大,(JDK只是这么一说,至于为什么我也不清楚)

4 * 为了提高性能,HashMap对Key的hashcode再加工,取Key的hashcode的高字节参与运算

5 */

6 static int hash(int h) {

7 // This function ensures 《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】 that hashCodes that differ only by

8 // constant multiples at each bit position have a bounded

9 // number of collisions (approximately 8 at default load factor).

10 h ^= (h >>> 20) ^ (h >>> 12);

11 return h ^ (h >>> 7) ^ (h >>> 4);

12 }

13

14 /**

15 * 返回此hashcode应当分配到的桶的索引

16 */

17 static int indexFor(int h, int length) {

18 return h & (length-1);

19 }

3, 有两个数字A,B, 他们都是有500位的数字, 如何规定不能使用BigDecimal 去运算的话怎么求的A+B的结果? 并写出代码.

这个是需要当场写出代码的, 而且他也不给我任何提示, 需要我自己想.

这个问题真是让我懵逼了,想了十多分钟,还是感觉自己的应变能力不够, 本打算放弃的, 最后还是想到了HashMap这个玩意, 哈哈, 感觉他好神奇.

思路: (我当时想到的思路, 不一定正确)

1 Map<String,int> a1Map = new HashMap<String,int>();

2 a1Map.put(“a1”,1234567890111111); //value值装入小于int类型能够接收到长度

3 Map<String,int> a2Map = new HashMap<String,int>();

4 a2Map.put(“a1”,1234567890111111); //value值装入小于int类型能够接收到长度

5 …

6 Map<String,int> b1Map = new HashMap<String,int>();

7 b1Map.put(“a1”,1234567890111111); //value值装入小于int类型能够接收到长度

8 Map<String,int> b2Map = new HashMap<String,int>();

9 b2Map.put(“a1”,1234567890111111); //value值装入小于int类型能够接收到长度

10 …

11

12 int c1 = a1Map.get(“a1”) + b1Map.get(“b1”);

13 int c2 = a2Map.get(“a1”) + b2Map.get(“b1”);

14 if (c12.length() > a2Map.get(“a1”).length()){

15   c1 += 1;

16 }

17 …

我的思路大概就是这样, 先将500位的数字进行分割, 然后分割后的数字进行相加, 这里需要判断进位, 我也不知道对与不对, 但是这样的方式是很麻烦的. 最后面试官听了我说的后说这样也是能够实现的, 但是很麻烦.

最后他说使用for循环遍历, 然后让每个数字相加, 得到的结果反转一下就可以了, 具体的让我回去后百度一下.剩下的就是他让我问他问题, 然后就是聊了一下公司文化, 以及他对这个工作的理解, 聊得时间还挺长.

我百度了一下并没有找到类似的题目, 于是自己回来写了一下, 并不保证结果一定正确, 如有异议请给我回复.

1 /*

2 * 需求:两个数字A,B都是有500位, 现在完成它们的相加操作, 不能够使用BigDecimal

3 */

4 public class TestPlus {

5 public static void main(String[] args) {

6 //这里设置A,B的长度都是3, 不使用int 不使用BigDecimal

7 String a = “12327845678343288”;

8 String b = “45643524555671269”;

9 int c = 0;

10 LinkedList value = new LinkedList();

11 //判断是否需要进位

12 boolean isNeedCarry = false;

13

14 for(int i = a.length() - 1; i >= 0 ; i–){

15 //如果需要进位, 那么则给需要进位的数字加1, 然后取第二位. 例如相加后的结果为14, 进位加1位15, 则取5来显示.

16 boolean isAdded = false;

17 c = Integer.parseInt(String.valueOf(a.charAt(i))) + Integer.parseInt(String.valueOf(b.charAt(i)));

18 if (isNeedCarry) {

19 isAdded = true;

20 value.addFirst(String.valueOf(c+1).substring(1));

21 c += 1;

22 }

23

24 isNeedCarry = addCarry©;

25 if (isNeedCarry) {

26 if (!isAdded) {

27 value.addFirst(String.valueOf©.substring(1));

28 }

29 }else {

30 value.addFirst(String.valueOf©);

31 }

32 }

33

34 for (Object object : value) {

35 System.out.print(object);

36 }

37 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值