4年码农吃闭门羹,面试腾讯、阿里统统凉,这些题实在太难答了

luxin 2019-09-20

"

本人双非普本毕业,在职场上也摸爬滚打了4年的时间了,可以算得上是一个有4年经验的老码农了,之前一直都是在某小厂工作,今年准备跳槽,个人的目标是BAT,但主要还是想去阿里或腾讯,自己之前的项目经验感觉还不错,所以比较有信心,但万万没想到自己腾讯和阿里的面试全凉了,一个offer都没拿到,后来回来思前想后,可能还是自己的准备不充分,但也确实是这些大厂太难进,这些面试题实在是不好答(附上我的思路),所以分享给大家,看有多少人知道?

问题一:带有* ( )的括号匹配问题,其中可以表示”(”或”)”或”空白”,问给一个由“()”组成的字符串,是否可以括号匹配。

思路:

经典的括号匹配需要一个栈就可以匹配,这种带的括号匹配可以考虑用两个栈来解决,一个栈存括号,另一个栈存。

问题二:面试过程中讲到了CAS中的ABA问题,面试官问出现ABA的场景和例子是什么?

思路:

ABA问题的定义网上都有,面试也准备过。但是ABA的场景一时间没想起来,上网查阅找到一个合适的例子:

小明在提款机,提取了50元,因为提款机问题,有两个线程,同时把余额从100变为50

线程1(提款机):获取当前值100,期望更新为50,

线程2(提款机):获取当前值100,期望更新为50,

线程1成功执行,线程2某种原因block了,这时,某人给小明汇款50

线程3(默认):获取当前值50,期望更新为100,

这时候线程3成功执行,余额变为100,

线程2从Block中恢复,获取到的也是100,compare之后,继续更新余额为50!!!

此时可以看到,实际余额应该为100(100-50+50),但是实际上变为了50(100-50+50-50)这就是ABA问题带来的成功提交。

问题三:有两个数据集A和B,每个数据集都按递增顺序排列,使用迭代器分别求两个数据集的交,差。(考的是数据库的left join和join的算法简单实现)

思路:

迭代器有hasNext()和Next()方法,这个题倒不是很复杂。

问题四:写一个算法,判断a+b>c,其中a,b,c都是带符号的long类型。

思路:

这个问题,思考一下题目很快判断出来这题考的是判断溢出。

思路是,考虑哪些场景会溢出,a,b同时大于或者同时小于0才会溢出,同时a,b,c同符号的时候才用判断是否会溢出。

我们拿溢出阈值(Long.MAX_VALUE)减去a然后和b比较,如果b大,那么a+b会溢出,两个负数同理。

问题五:一个java的业务代码,底层是MySQL数据库,某一天突然发现执行变得很慢,请问如何排查。

思路:

一条SQL语句执行得很慢的原因有哪些?

同时还要考虑java业务层的代码问题,首先要定位哪里出了问题。

问题六:100亿个手机号的数据集,问有多少个不重复的手机号。

思路:

考点:手机号加载到内存用什么数据结构,如果用int数组存的话,会占用太多空间,String和long听起来都是很不错的选择。

还可以计算下100亿手机号在内存中的大小。我觉得可以用bitmap存这些手机号,但面试官不太满意,最后说用hash划分的方式并行计算。

问题七:写一个LRUcache

思路:

这个题很好写…在leetcode上也练习过,但是,我忘了多线程同步了…没有加sychnorized,被面试官指出来,自己也意识到这是个很严重的错误。

在leetcode上的题目也没有加锁,可以通过,但是实际场景中LRUcache必然是多线程访问的。

总结

面试一定要要自信,但不能盲目自信,自信是建立在有充足准备的前提下的,所以有跳槽打算的,或正在面试的,一定要复习一些知识,准备好一些题目的答案,不要以自己的项目经验为傲,很多大厂也很看重面试者对基础知识点的掌握程度的。

————————————————

版权声明:本文为博主「Java阿谷」的原创文章

原文链接:https://blog.csdn.net/weixin_45600362/article/details/100925459

".slice(6, -6)

相关推荐