为了保证制作简历的安全性和流畅性,建议您使用Chrome浏览器进行访问
小白大蓝鲸 中国海洋大学·2022届
APP 内打开
分享
14
91

阿里钉钉面试题

钉钉一面

自我介绍

SpringBoot的优点

1.创建独立的Spring应用程序。SpringBoot可以jar包的形式进行独立的运行,使用:java -jar xx.jar就可以成功运行项目,或者在项目的主程序中运行main函数。


2.springboot项目不需要单独下载Tomcat等传统服务器,内嵌容器,使得我们可以执行运行项目的主程序main函数,并让项目的快速运行,另外,也降低对运行环境的基本要求,环境变量中有JDK即可。


3.Spring Boot提供了一系列的starter pom用来简化我们的Maven依赖,通过这些starter项目就能以Java Application的形式运行Spring Boot项目,而无需其他服务器配置。


4.Spring Boot提供Spring框架的最大自动化配置,大量使用自动配置,使得开发者对Spring的配置尽量减少。Spring Boot更多的是采用 Java Config 的方式,对 Spring 进行配置。


ThreadLocal原理,应用场景

ThreadLocal主要用来存储当前线程上下文的变量信息,它可以保障存储进去的数据,只能被当前线程读取到,并且线程之间不会相互影响。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。

ThreadLocal有哪些典型的应用场景:

1.数据库事务。通过AOP的方式,对执行数据库事务的函数进行拦截。函数开始前,获取connection开启事务并存储在ThreadLocal中,任何用到connection的地方,从ThreadLocal中获取,函数执行完毕后,提交事务释放connection。


2.web项目中,用户的登录信息通常保存在session中。做一个拦截器,把用户信息放在ThreadLocal中,在任何用到用户信息的时候,只需要从TreadLocal中读取就可以了。


ThreadLocal 内部维护了一个ThreadLocalMap 的静态内部类。ThreadLocalMap 中使用的 key 为 ThreadLocal 的弱引用,弱引用的特点是,如果这个对象只存在弱引用,那么在下一次垃圾回收的时候必然会被清理掉。


AtmoicInteger的原理,CAS原理

cas:将指定内存地址的内容与所给的某个值相比,如果相等,则将其内容替换为指令中提供的新值,如果不相等,则更新失败。AtomicInteger的本质:自旋锁+CAS原子操作。AtomicInteger中用的就是Unsafe的CAS操作。


ReentrantLock,synchronized的区别

1.Synchronize是基于jvm的,ReentrantLok是基于JDK的。

2.ReentrantLock多了几条特性。等待锁的线程可终止,可实现公平。

3.ReentrantLock可实现选择性通知。synchronized中wait notify,notifyAll时是唤醒所有wait的线程。 而ReentrantLock中Condition可创建多个,siginalAll时唤醒的是那个Condition实例wait的所有线程。


ConcurrentHashmap的底层数据结构,put操作

ConcurrentHashMap的数据结构(数组+链表+红黑树),桶中的结构可能是链表,也可能是红黑树,红黑树是为了提高查找效率。

说明:put函数底层调用了putVal进行数据的插入,对于putVal函数的流程大体如下。

① 判断存储的key、value是否为空,若为空,则抛出异常,否则,进入步骤②

② 计算key的hash值,随后进入无限循环,该无限循环可以确保成功插入数据,若table表为空或者长度为0,则初始化table表,否则,进入步骤③

③ 根据key的hash值取出table表中的结点元素,若取出的结点为空(该桶为空),则使用CAS将key、value、hash值生成的结点放入桶中。否则,进入步骤④

④ 若该结点的的hash值为MOVED,则对该桶中的结点进行转移,否则,进入步骤⑤

⑤ 对桶中的第一个结点(即table表中的结点)进行加锁,对该桶进行遍历,桶中的结点的hash值与key值与给定的hash值和key值相等,则根据标识选择是否进行更新操作(用给定的value值

替换该结点的value值),若遍历完桶仍没有找到hash值与key值和指定的hash值与key值相等的结点,则直接新生一个结点并赋值为之前最后一个结点的下一个结点。进入步骤⑥

⑥ 若binCount值达到红黑树转化的阈值,则将桶中的结构转化为红黑树存储,最后,增加binCount的值。

将ConcurrentHashMap容器的数据分段存储,每一段数据分配一个Segment(锁),当线程占用其中一个Segment时,其他线程可正常访问

发布时间:2020年06月29日
用户头像
我来说两句…
共 14 条评论
惊呆的美妆 西北农林科技大学·2022届
想问一下,阿里钉钉的交叉面是不是一般不需要手写代码?
2020年09月12日 回复
流连东京街角的煦暖 北京师范大学珠海分校·2022届
。。。楼主你这个交叉面跟我的交叉面面试问题是一样的,原来都是套路😂
2020年09月12日 回复
猫医生 南京财经大学·2022届
今天拿到实习内推,看到这样,我选择狗带。
2020年09月12日 回复
晴空 北京邮电大学·2022届
这是不是就算发offer了
2020年09月12日 回复
爱篮球1999 贵州大学·2022届
收到oc了,顶顶
2020年09月12日 回复
小芹菜 广州大学·2022届
真是大佬,我20的真的很佩服
2020年09月12日 回复
人渣啸西风 华北电力大学·2022届
对基础的考察挺有广度的
2020年09月12日 回复
一枝蓝 深圳大学·2022届
楼主,请收下我的膝盖;
2020年09月12日 回复
去爱去疯去执着 清华大学·2022届
钉钉哪个部门啊
2020年09月12日 回复
青衣 新南威尔士大学·2022届
这是校招?
2020年09月12日 回复
慷慨淋漓 成都理工大学·2022届
牛逼
2020年09月12日 回复
ζ澈沫 哈尔滨商业大学·2022届
已收到意向书,顶一下
2020年09月12日 回复
苏丫丫 江西师范大学·2022届
厉害了,大佬!😄😄😄
2020年09月12日 回复
奈奈生 多伦多大学·2022届
羡慕大佬
2020年09月12日 回复