mo9是一家做数字货币交易所的公司,在4月份的时候自己去mo9参加了java开发的面试。mo9的面试更加注重基础,问了很多java基础方面的知识。下面将面试的一些问题做个记录,以供大家参考。
在面试的过程中,面试官会根据你的回答来不断的深入问你,来考察你对知识理解的深度。
java基础相关问题
- String s1= ‘abc’ 和 String s2 = new String(‘abc’);共创建了几个对象,两种写法有什么区别。
- 然后又聊到怎么判断两个对象相等,equals和hashcode的区别和用法。
- 根据hashcode又拓展到了hashmap,问了关于hashmap的一些特性和put方法、扩容、重新序列化等关键操作的具体实现。如果key是null的时候,put会是什么样的操作。jdk1.7和jdk1.8中hashmap的一些变化,1.8版本的hashmap会涉及到红黑树。
多线程
- 如何实现线程安全的hashmap?
- synchronized和lock的区别?lock常见的一些实现,重入锁的使用的实现方式。
- java里面实现线程的方式有哪几种?
- Thread中run方法和start方法的区别?怎么停止一个线程,Thread类中各个api的用法,常用的四种线程池有哪些?
- 生产者消费者有哪些实现方式。
使用wait和notify怎么实现,使用阻塞队列实现生产者消费者,使用lock和condition实现生产者消费者等。 - wait和notify为什么必须要在synchronized中写呢,实现原理?
- 悲观锁和乐观锁。乐观锁优化,比如账户中只有100元,分别在3个不同的商家中购买了3种不同的商品,每个商品40元,需要同时扣款,怎么样可以做到效率最高。
jvm
类加载器和类加载机制。
java框架类
Spring的AOP的实现原理?jdk动态代理和cglib动态代理的区别?
数据库
- 事务的隔离级别
- 事务的传播机制
自己在多线程这块有些欠缺,有些问题不太懂,然后答得也不太好,基本是没戏了。在面试完后,得知面试官比我大一届,同时也给我许多建议。
他让我注重基础,多去想一些底层的东西的实现原理。而不是去关心一些新技术,去写一些框架的demo,这样的话对自己提升其实是没太多用处的。特别感谢面试官大哥对我一些建议。