阿里乌鸫科技 java交付 一面
1. 面试官先发了笔试链接,有30个选择,1个算法,做的过程中不小心切换了几次页面,然后叫面试官重新开启了下。
2. 算法 88. 合并两个有序数组
【三指针,从后往前比较】
3. 问了排序算法有哪些,快排为什么快,堆排序相比其他排序有什么区别,归并排序时间复杂度,堆排序建立堆和维护堆的时间复杂度分别是多少,稳定(相等的数,相对的位置会不会改变)的排序有哪些
【平常使用快排比较多是因为它在平均情况下的时间复杂度是O(nlogn),堆排序建立时间复杂度为O(n),维护堆的时间复杂度为O(logn)】
4. GC类型有哪些
说了yonggc(minor gc)和fullgc
【一般都基于分代收集,年轻代的话,由于gc比较频繁,主要使用复制算法,老年代的话,主要使用标记整理或者标记清除算法,年轻代一般进行yonggc,老年代一般进行fullgc】
5. TCP三次握手做了什么
忘记了
【第一次是客户端发送给服务端同步位SYN=1,seq=x,服务端介绍到后,发送給客户端SYN=1,ACK=1,ack=x+1,seq=y,然后客户端再发送给服务端ACK,ack=y+1,seq=x+1
仅到ACK=1,确认号有效 主要通过一个同步位和确认为去完成这个同步的过程】
6. Collection接口下有哪些方法
7. Object类中有哪些方法
只答出了equals(),hashcode(),finelize()
【toString,wait,notify,clone,getClass】
8. 重写clone()方法要注意什么
注意深拷贝,浅拷贝,对应深拷贝,使用cloneable接口,要在clone方法里面手动得去拷贝对象内容。
9. 什么是深拷贝,浅拷贝
浅拷贝指的是,如果一个对象里面有引用类型,那么拷贝的话,也只能拷贝引用类型的引用地址,而不会真正拷贝一个新的对象。但是如果是深拷贝的话,里面拷贝的也是一个新对象。
10. BeanCopyUtil内部怎么去实现
11. 接口慢了怎么去排查
根据请求id去查阿里云日志,分析日志,是否有慢sql日志,以及微服务间调用时长
12. 导致慢的原因有哪些
说了慢sql,服务间远程调用太多了
13. volitile关键字有什么用
说了去除指令重排序和保证可见性
14. 什么是可见性
说了java内存结构,多个线程在访问共享变量的时候会保存一份副本,可见性指的是当这个共享变量的值发生改变的时候,会马上将副本更新到最新的值。
15. 什么是幂等性
说了,一般将一个接口设置为幂等性的话,就是一个访问的接口和多次访问的结果是一样的,避免重复调用接口造成的问题。
【一个操作可以被重复执行多次而不会改变结果的性质,restful API,get,delete都是幂等的】
16. POST请求怎么保证幂等性
说了使用数据库中的唯一主键,但其实不太符合业务场景。
【使用唯一标识符:为每个POST请求分配一个唯一的标识符,并在请求头中包含,在服务端检查标识符是否已经被处理过,如果已经被处理过,则不再创建,还是返回原来的。】
17. 悲观锁和乐观锁解释一下
说了悲观锁是指线程在访问数据的时候悲观地认为某个数据可能被其他线程修改,因此加上锁,实现线程之间的同步,比如重量级的锁。乐观锁是指线程在访问共享数据的时候认为不会被其他线程修改,不去加锁,而是去比较下预期的值是否相同,如果相同,说明没其他线程改过,修改数据。否则不停地自旋,知道预期的值相同。
18. java中哪里用到了CAS
原子类中用到了CAS,内部使用了Unsafe类的compareAndSwap的方法,而且是个本地方法,原子性的。
19. 数据库层面怎么去实现乐观锁
每次去更新数据的时候,比较版本号,并设置新的版本号,比如UPDATE users SET username='Jane Doe', version=version+1 WHERE id=1 AND version=0; 这就要求在更新前就要拿到这个版本号
20. 可达性分析中哪些可以作为Root
【在GC过程中,有一些对象被认为是根对象(Roots),因为它们始终是可达的,不能被回收】
21. 说说比较项目那块比较有挑战性
22. 说说mqtt中的几种可靠性机制
23. mqtt是怎么去发送消息的,说说架构
24. 反问
2. 算法 88. 合并两个有序数组
【三指针,从后往前比较】
3. 问了排序算法有哪些,快排为什么快,堆排序相比其他排序有什么区别,归并排序时间复杂度,堆排序建立堆和维护堆的时间复杂度分别是多少,稳定(相等的数,相对的位置会不会改变)的排序有哪些
【平常使用快排比较多是因为它在平均情况下的时间复杂度是O(nlogn),堆排序建立时间复杂度为O(n),维护堆的时间复杂度为O(logn)】
4. GC类型有哪些
说了yonggc(minor gc)和fullgc
【一般都基于分代收集,年轻代的话,由于gc比较频繁,主要使用复制算法,老年代的话,主要使用标记整理或者标记清除算法,年轻代一般进行yonggc,老年代一般进行fullgc】
5. TCP三次握手做了什么
忘记了
【第一次是客户端发送给服务端同步位SYN=1,seq=x,服务端介绍到后,发送給客户端SYN=1,ACK=1,ack=x+1,seq=y,然后客户端再发送给服务端ACK,ack=y+1,seq=x+1
仅到ACK=1,确认号有效 主要通过一个同步位和确认为去完成这个同步的过程】
6. Collection接口下有哪些方法
7. Object类中有哪些方法
只答出了equals(),hashcode(),finelize()
【toString,wait,notify,clone,getClass】
8. 重写clone()方法要注意什么
注意深拷贝,浅拷贝,对应深拷贝,使用cloneable接口,要在clone方法里面手动得去拷贝对象内容。
9. 什么是深拷贝,浅拷贝
浅拷贝指的是,如果一个对象里面有引用类型,那么拷贝的话,也只能拷贝引用类型的引用地址,而不会真正拷贝一个新的对象。但是如果是深拷贝的话,里面拷贝的也是一个新对象。
10. BeanCopyUtil内部怎么去实现
11. 接口慢了怎么去排查
根据请求id去查阿里云日志,分析日志,是否有慢sql日志,以及微服务间调用时长
12. 导致慢的原因有哪些
说了慢sql,服务间远程调用太多了
13. volitile关键字有什么用
说了去除指令重排序和保证可见性
14. 什么是可见性
说了java内存结构,多个线程在访问共享变量的时候会保存一份副本,可见性指的是当这个共享变量的值发生改变的时候,会马上将副本更新到最新的值。
15. 什么是幂等性
说了,一般将一个接口设置为幂等性的话,就是一个访问的接口和多次访问的结果是一样的,避免重复调用接口造成的问题。
【一个操作可以被重复执行多次而不会改变结果的性质,restful API,get,delete都是幂等的】
16. POST请求怎么保证幂等性
说了使用数据库中的唯一主键,但其实不太符合业务场景。
【使用唯一标识符:为每个POST请求分配一个唯一的标识符,并在请求头中包含,在服务端检查标识符是否已经被处理过,如果已经被处理过,则不再创建,还是返回原来的。】
17. 悲观锁和乐观锁解释一下
说了悲观锁是指线程在访问数据的时候悲观地认为某个数据可能被其他线程修改,因此加上锁,实现线程之间的同步,比如重量级的锁。乐观锁是指线程在访问共享数据的时候认为不会被其他线程修改,不去加锁,而是去比较下预期的值是否相同,如果相同,说明没其他线程改过,修改数据。否则不停地自旋,知道预期的值相同。
18. java中哪里用到了CAS
原子类中用到了CAS,内部使用了Unsafe类的compareAndSwap的方法,而且是个本地方法,原子性的。
19. 数据库层面怎么去实现乐观锁
每次去更新数据的时候,比较版本号,并设置新的版本号,比如UPDATE users SET username='Jane Doe', version=version+1 WHERE id=1 AND version=0; 这就要求在更新前就要拿到这个版本号
20. 可达性分析中哪些可以作为Root
【在GC过程中,有一些对象被认为是根对象(Roots),因为它们始终是可达的,不能被回收】
21. 说说比较项目那块比较有挑战性
22. 说说mqtt中的几种可靠性机制
23. mqtt是怎么去发送消息的,说说架构
24. 反问
全部评论
m
校招还是社招
老哥,想问一下这些问题都是根据简历内容问的吗
选择题大概有啥 只Java还是啥都有
相关推荐