快手Java实习一二面面经(转载)

作者:offer能来否
链接:https://www.nowcoder.com/discuss/423235?type=post&order=time&pos=&page=1&channel=&source_id=1
来源:牛客网

3月中旬投了很多简历,可是没有一个公司找我面(简历太菜了吧···),还好快手把我捞起来了(orz)。5月5号下午两面,今天等到hr电话沟通入职的事项。
快手面试很基础,但是考察的也挺细致,下面是面经,分模块记的
一面(55分钟)
Java基础

(1)==和equals区别

https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20%E5%9F%BA%E7%A1%80.md#equals

快手Java实习一二面面经(转载)

(2)static修饰的成员变量运行时机

快手Java实习一二面面经(转载)

在类初始化的时候运行?

快手Java实习一二面面经(转载)

(3)内部类和静态内部类区别

https://www.cnblogs.com/hustdc/p/8894073.html

快手Java实习一二面面经(转载)

  静态内部类:用static修饰的内部类

  生成静态内部类不需要外部类的对象Outer.Inner in=new Outer.Inner();

  一般非静态外部类可以随意访问其外部类的成员变量以及方法(包括声明为private的方法),静态内部类不能访问其外部类的非静态成员变量和方法

(4)为什么要重写equals方法

  为了判断两个对象是否等价,因为对象等价不只是hashcode相等,属性值也得相等,此外,在覆盖 equals() 方法时应当总是覆盖 hashCode() 方法,保证等价的两个对象哈希值也相等。

快手Java实习一二面面经(转载)

 快手Java实习一二面面经(转载)

(5)HashMap底层数据结构,以及put方法和resize方法

https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20%E5%AE%B9%E5%99%A8.md#hashmap

快手Java实习一二面面经(转载)

 快手Java实习一二面面经(转载)

 快手Java实习一二面面经(转载)

 扩容:

快手Java实习一二面面经(转载)

 快手Java实习一二面面经(转载)

 快手Java实习一二面面经(转载)

(6)说一下ConcurrentHashMap底层数据结构,以及如何保证线程安全的

  ConcurrentHashMap 和 HashMap 实现上类似,最主要的差别是 ConcurrentHashMap 采用了分段锁(Segment),每个分段锁维护着几个桶(HashEntry),多个线程可以同时访问不同分段锁上的桶,从而使其并发度更高(并发度就是 Segment 的个数)。Segment 继承自 ReentrantLock。默认16个se

快手Java实习一二面面经(转载)

(7)说一下序列化,网络传输使用什么序列化

    将数据对象转换为二进制流的过程称为对象的序列化(Serialization)。反之,将二进制流恢复为数据对象的过程称为反序列化(Deserialization)。

    三种序列化方法:https://www.cnblogs.com/lzh1043060917/p/12834962.html

    用JSON序列化???不会

(8)说一下泛型底层实现原理—类型擦除

https://www.nowcoder.com/tutorial/94/f5c9640c0b9a4891bc507615f1ffe170

不会,连泛型是啥都没说明白

并发

(1)说一下JUC包下的同步工具

https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20%E5%B9%B6%E5%8F%91.md#%E4%B8%80%E4%BD%BF%E7%94%A8%E7%BA%BF%E7%A8%8B

快手Java实习一二面面经(转载)

 快手Java实习一二面面经(转载)

(2)synchronized修饰方法和代码块区别

快手Java实习一二面面经(转载)

 快手Java实习一二面面经(转载)

 

(3)volatile如何怎么保证有序性和可见性 

https://www.jianshu.com/p/157279e6efdb

有序性:其中有条就是volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作;有序性实现的是通过插入内存屏障来保证的。

可见性:加了volatile关键字的代码生成的汇编代码发现,会多出一个lock前缀指令。Lock指令对Intel平台的CPU,早期是锁总线,这样代价太高了,后面提出了缓存一致性协议,MESI,来保证了多核之间数据不一致性问题。

编译之后有个lock,最初是锁总线,之后缓存一致性协议,MESI,

 快手Java实习一二面面经(转载)

(4)说一下线程池,以及线程池的几个核心参数,如果提交一个cpu密集型的任务怎么选取线程池

不会

(5)用volatile+synchronized写一个单例模式,用双重校验锁方法,说出两个if判断语句的作用

不会

(6)线程的几种状态,并指出在哪种状态下可以中断,中断原理

https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20%E5%B9%B6%E5%8F%91.md#%E5%85%AD%E7%BA%BF%E7%A8%8B%E7%8A%B6%E6%80%81

快手Java实习一二面面经(转载)

 快手Java实习一二面面经(转载)

 快手Java实习一二面面经(转载)

中断:

 https://github.com/CyC2018/CS-Notes/blob/master/notes/Java%20%E5%B9%B6%E5%8F%91.md#%E4%B8%89%E4%B8%AD%E6%96%AD

阻塞、限期等待或者无限期等待状态,其他不想看了

 快手Java实习一二面面经(转载)

 快手Java实习一二面面经(转载)

 快手Java实习一二面面经(转载)

JVM

  1. 说一下几种引用方式,并说出其作用,以及垃圾回收时机(不知道)
  2. 一个static成员变量如何进行内存分配及赋值(属于类,类加载时候就有了)

算法题

找到一个链表的倒数第k个节点

https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/solution/mian-shi-ti-22-lian-biao-zhong-dao-shu-di-kge-j-11/

快手Java实习一二面面经(转载)

中间等待了15分钟~~~~

二面(50分钟)
0.  自我介绍
1.    项目介绍
2.    说几种创建对象的方式
3.    静态代理和动态代理的区别
所谓的静态代理就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强。
 
 
 
4.    反射的作用及机制
快手Java实习一二面面经(转载)
5.    说一下spring中IOC和AOP,还问了这个两个的英文全称是啥(差点没说出来)
IoC叫控制反转,是Inversion of Control的缩写,DI(Dependency Injection)叫依赖注入
Aspect Oriented Programming
 
6.    项目中如何用到IOC思想的
 
7.    http和https的区别
快手Java实习一二面面经(转载)
8.    http如何在一个TCP连接上进行多次请求响应的
9.    手写一个生产者消费者模式,用的ReentrantLock,为什么判断当前count是否满足生产或者消费时用while
10.    i++是不是一个原子操作,说几种方法java如何保证对整型变量写操作线程安全的方法
不是
11.    ReentrantLock加锁操作后,在catch中捕获的是什么异常,为什么会发生这用异常
 
12.    有什么问题要问他的,我问了两个,一个是对自己日后学习的建议,第二个是部门发展前景