有赞面经(详细)

有赞一面:

自我介绍

1、java的集合类了解吗?说一下hashmap的原理和实现。我:balabala.....

2、hashmap线程不安全,请问为什么线程不安全?答,并发时会成环。什么时候成环?比如我有两个数据要装入hashmap。

3、hashmap1.7从链表头插入数据,1.8从链表尾部插入数据,有什么区别为什么?使用红黑树为什么能提高查询的性能?什么时候hashmap开始使用红黑树,阈值是多少?

4、hashmap的线程安全怎么实现?答concurrenthashmap,让我介绍原理,如何上锁。插入数据时候一定上锁吗?怎么样获取concurrenthashmap的size。

5、hashset和hashmap的区别,写代码使用hashmap实现一个简单的hashset。(没写出来)

6、项目中有没有使用过并发编程?用过哪些锁?答用过synchronized和lock。他们的区别是什么?答Synchronized底层用mutex实现。在软件层面依赖Jvm,Lock底层基于AQS实现,在硬件层面依赖特殊的CPU指令(CAS)。简单介绍下CAS。Balabalabala。问CAS使用中存在什么问题?答ABA问题,怎么解决?说了版本号方式,atomicstampedreference和pause。还答了自旋时间过长消耗CPU资源。

7、AQS的框架中,自定义同步器使用哪些方法,分别表示什么含义?答isheldexclusively,该线程是否独占资源。tryacquire尝试获取资源tryrelease尝试释放资源这两种是独占方式,tryacquireshared,tryreleaseshared同前两种,不过是共享方式。

8、一个线程怎么判断自己是否可以获得共享资源的锁?答一个线程在获取共享资源前会判断markword里存放的是不是自己的threadid如果是则该线程处于偏向锁,可重入。若不是,则使用CAS进行切换,锁升级为轻量级锁,偏向锁释放,清空mark word,两个线程开始竞争,成功的将自己的markword存入对应的threadid,失败的开始自旋。

9、共享资源state何时增加何时减少?对于synchronized和lock有什么区别?答获得锁加一,释放减一。synchronized的state只能为1或者0,lock锁的state可以一直增加,但是增加多少就要减少多少直到为0锁释放。(可重入锁)

10、state用什么修饰符修饰?答int和 volatile。

11、volatile有什么作用?答1、禁止指令重排序,并介绍了原理,说了内存屏障的机制。2、保证多线程并发执行时某个线程对数据的修改对其他线程的可见性。说了原理。主存,本地栈,不从缓存取值。3、这个关键字不保证操作的原子性。是一种轻量级的synchronized实现。

12、数据库中,mysql用到哪些引擎?区别。答balabala

13、索引有哪些?聚簇索引和非聚簇索引的区别?

14、为什么使用索引查数据更快?什么时候使用索引查数据比全表扫描还更慢?使用什么关键字会触发全表扫描?

15、建立联合索引a,b,c,请问查询条件为a,c是否使用索引?a,b是否使用索引?b,a,c是否使用索引?

16、算法题,一个list中快速找出倒数第三个数。

17、http协议与tcp/ip协议有什么区别?http三次握手画图说明。timewait的时间为什么是2msl?

18、tcp五层模型?

19、http协议位于osi模型的哪一层?

20、集群和单机的区别?

21、redis简要介绍下。有哪些常用的数据结构?

22、redis为什么查询数据这么快?答1、用c编写的,2、单进程单线程的keyvalue数据库,不用加锁,不存在上下文切换的开销,很少消耗cpu资源。且没有主键和范式的约束。但是启用多个redis实例时要使用分布式锁。3、I/O多路复用,一个线程去遍历多个I/O流(sock),有数据的I/O流,标记并调用代码块进行处理。多路指的就是网络连接。额外介绍了select,poll,epoll的区别。

23、当一个线程去一个其中一个redis实例没有取到数据,该数据在别的redis实例,此时怎么办?

二面:

1、怼项目。负责哪块工作?具体细节怎么实现的?我觉得这么实现效率不高,怎么优化?…表里的数据都是什么数据结构?

2、介绍下mapreduce的原理。

3、udf函数有什么作用?

4、给100个数据,使用mapreduce,让我写代码啥的?这个算法题题我都没听懂

5、判断一个无序数组中是否有两个数等于目标数。暴力破解,算法时间复杂度o(n2)

6、手撕快速排序,问思路,让写,写完问是否有辅助空间?辅助存储空间复杂度?

7、数据库中,exist和in的区别?


Over。其实技术题都答上了,一面的集合类代码题没写出来,二面那个算法题没写出来。二面结束让我回去等消息,感觉挂了。我猜是写出来的算法题面试官对我的代码不满意,挂。唉,还是写得少。深夜码字,满满干货,我觉得有赞的难度超过斗鱼。各位路过的牛油觉得好就给个赞吧,请大佬不要嘲笑。这次没面过很伤,感觉自己快把知识储备都用上了。安
#Java工程师##有赞##面经##秋招#
全部评论
感谢分享~
点赞 回复
分享
发布于 2018-11-09 11:21
能否请问一下, synchronized 不是本身就是 可重入锁么?  如果仅仅是 Lock  lock = new Lock() 的话,应该是不可重入锁吧??   小白求解答...
点赞 回复
分享
发布于 2018-11-09 14:41
秋招专场
校招火热招聘中
官网直投
二面还问了B树和B+树,区别?为什么B+树更稳定。给1000个索引的值,使用B树和B+树要遍历几次结束
点赞 回复
分享
发布于 2018-11-09 02:57
死环是在扩容的时候发生,查找两个数可以借用hashmap,复杂度n
点赞 回复
分享
发布于 2018-11-09 03:20
楼主基础很好呀。没去面一下bat吗
点赞 回复
分享
发布于 2018-11-09 08:56
感觉都还挺常见的,MapReduce那一块完全不会
点赞 回复
分享
发布于 2018-11-09 09:40
有答案的面经 好评
点赞 回复
分享
发布于 2018-11-09 09:40
楼主线程安全那块看的什么资料,感觉了解的好深入
点赞 回复
分享
发布于 2018-11-09 09:41
感觉回答的这么好,应该能过的吧 - -!
点赞 回复
分享
发布于 2018-11-09 10:05
面的哪个部门?感觉和我面的问题差不多
点赞 回复
分享
发布于 2018-11-09 10:49
楼主是小白,不是什么大佬!面经有错误欢迎大家交流指正学习!
点赞 回复
分享
发布于 2018-11-09 15:25
楼主现场面还是电话面?
点赞 回复
分享
发布于 2018-11-09 23:15
m
点赞 回复
分享
发布于 2018-11-10 09:53
好难,有答案的面经,好评
点赞 回复
分享
发布于 2018-11-13 21:12
第五题答案: import java.util.HashMap; public class MyhashSet<E> {     private HashMap<E,Object> map;     private static final Object PRESENT = new Object();     public MyhashSet() {         map = new HashMap<>();     }     public int size() {         return map.size();     }     public void add(E e) {         map.put(e, PRESENT);     }     public void remove(E e) {         map.remove(e);     } }
点赞 回复
分享
发布于 2018-11-26 19:17
请问下楼主感觉 Java网络编程的知识点问的多吗?需要重点复习吗
点赞 回复
分享
发布于 2019-03-09 12:47
23题答案:由于一个redis实例的内存有限,通常会启动多个redis实例来提供服务。此时构建redis集群的方案通常有三种:1、客户端分片2、***分片、3、redis原生集群。通常采用***分片的方式。如果采用codis反向***集群提供服务的方式,解决方案为:Codis在接收到客户端请求后,首先根据Key来计算出一个hash,映射到对应slots,然后转发请求到slots对应的Redis。
点赞 回复
分享
发布于 2019-04-16 11:52

相关推荐

20 185 评论
分享
牛客网
牛客企业服务