Java两年经验-滴滴面试

6 篇文章 0 订阅
6 篇文章 1 订阅

1、自我介绍
2、项目介绍,根据阐述的项目会提出一些问题,比如平时用的中间件有哪些
答:这部分耗时最长,面试官会通过项目的介绍来随机提出一些问题,记住千万不要给自己挖坑,说出来的一定就是自己会的
3、Java集合有哪些?平时工作中怎么用到它们
答:java集合框架主要包括存储元素的集合和存储键值对映射的图,其中集合接口有三种子类型list、set、queue,再下面是一些抽象类,最后是具体实现类,常用的有ArrayList、LinkedList、HashSet、HashMap
4、hashmap 有了解么?简单介绍一下, hash冲突时是头插还是尾插?是怎么resize的?查找的时间复杂度是多少 set的时间复杂度是多少
答:hashmap平时用的还是挺多的,用来存放键值对,存放数据等。hashmap主要用数组+链表+红黑树的结构来实现,当没有产生hash冲突时,直接将数据放到对应的槽下,发生hash冲突遍历对应槽下面的链表,存在相同的key则进行value替换,非链表时,进行红黑树的插入,链表时,遍历链表,没有相同的key则尾插法。hash冲突时java8之后是尾插法.resize在非边界情况下默认是原数组大小的两倍,遍历旧数组,根据新的数组长度与key的hash值重新将节点放到数组下
5、解释一下spring的ioc,bean是怎样实现依赖注入的,解释一下spring的aop,aop的原理是什么?动态代理有哪几种?区别是什么?
答:IOC即Inversion Of Control 控制反转。具体的来说,当某个java实例(调用者)需要另外一个java实例(被调用者)的协助时,在传统的程序设计过程中,通常由调用者创建被调用者的实例,但在Spring中创建被调用者实例的过程交由Spring容器完成,注入调用者,即控制反转或者说是依赖注入。这样程序开发人员不需要频繁的创建对象,降低bean之间的耦合,天然的给程序开发提供了单例,并能让程序开发人员专注于业务代码的编写
bean依赖注入方式:
1、自动装配 @autowired 根据类型自动装配
2、setter方法注入
3、构造器注入
4、静态工厂注入
5、实例工厂注入

aop即Aspect Oriented Program面向切面编程,aop思想是将核心业务功能和周边功能(切面)分别独立进行开发,然后把两个功能编织到一起,这样可以减少系统的重复代码,降低模块间的耦合性,其中心思想即让关注点代码和业务代码分离。
aop原理是动态代理,动态代理有两种:jdk动态代理和cglib动态代理,两者的主要区别是jdk动态代理只能针对实现了接口的类进行代理,不能针对类,而CGLIB可以。但是因为CGLIB是继承所以不能对被final修饰的类产生代理

6、事务的特性有哪些?解释下一下原子性?解释一下一致性?mysql有几种事务隔离级别?默认的事务隔离级别是哪种?
答:acid 即原子性,一致性,隔离性,持久性。事务具有原子性即事务是一个不可分割的单位,只有事务中的所有操作都成功才算整个事务成功,事务中出现任何一点的失败,事务都应该退回到执行事务之前的状态,强调操作的完整。一致性是指事务从一种状态转变成下一种一致的状态,包括数据的一致,状态的一致,一致性是目的。另外三个是手段。mysql提供四种事务隔离级别:分别是rc ru rr s,其中默认的事务隔离级别是rr,即可重复读
7、知道aqs么?知道cas么?cas的缺点有哪些?
答:aqs即队列同步器,abstractQueuedSynchronizer,是用用来构建锁或者其他同步组件的基础框架
cas的缺点:1、ABA问题,cas在操作值时需要检测值是否发生变化,若没有发生变化则更新。如果一个值原来是A,变成了B,有变成了A,那cas检查时会发现它的值没有发生变化,导致了ABA问题。java1.5之后jdk提供了AtomicStampedReference来解决ABA问题,思想类似于在变量前加版本号
2、循环时间长开销大,自旋cas如果长时间不成功,会给cpu带来非常大的执行开销
3、只能保证一个共享变量的院子操作,可以使用锁,或者是将多个变量合并成一个共享变量来操作,java1.5之后jdk提供了AtomicReference类来保证引用对象之间的原子性

8、算法题,求一个带环的单链表中环的长度,空间复杂度要求是O(1)
答:快慢指针
9、为什么要离职?

##############################################

1、自我介绍+自己觉得有亮点的项目
2、项目中遇到的难点
3、介绍redis,用法,redis设置过期时间的原理,如果让你现场设计,怎样设计一个redis过期时间的结构(其实也是在考察原理)
4、介绍下springboot
答:springboot主要是为了帮助开发者快速并且更简单的构建项目,它使用约定优于配置的理念让项目快速运行起来,使用springboot很容易创建一个独立运行、准生产级别的基于spring框架的项目。
5、介绍下mysql索引,有进行过mysql的优化吗?单表多个条件的慢查询怎么优化?有用过分库分表么?分库分表按什么逻辑分?
6、怎样保证线程安全?synchronized都做了哪些优化?synchronized和lock的区别有哪些?有用过线程池么?线程池的实现原理?线程池的几个配置参数?
答:线程安全主要通过锁来实现,java中主要包括synchronized和lock接口锁两种手段。synchronized做的优化有偏向锁、轻量级锁、自旋锁、锁消除、锁粗化;两者的区别主要有:a、synchronized是java中的关键字,lock是一个接口;b、synchronized在发生异常时会自动释放锁,不会导致死锁,lock如果不手动unlock则会发生死锁;c、synchronized在等待锁的过程中无法响应中断,会一直等待下去,lock可以响应中断的等待锁;d、synchronized的锁是非公平的,lock支持了非公平和公平锁。e、synchronized中,锁对象的wait和notify\notifyall配合可以实现一个隐含条件,lock可以同时绑定多个Condition对象
7、平时工作中有用过设计模式么

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值