网易(杭研)Java开发面经 - Sanarous的博客

网易(杭研)Java开发面经

8 月 14 号下午视频面的,岗位是 Java 开发,面试官挺客气,说话也慢条斯理的,也会主动引导我的思路。希望能有二面吧😣

  1. 自我介绍,问了一下实习相关的,没介绍项目。

  2. Java 中的容器分类有哪些?那么 Map 有哪些咩?LinkedHashMap 的底层实现? LinkedHashMap 有哪些应用场景呢?emmm…这个我就说可以用它来实现 LRU,自己一般用 LinkedHashMap 较少,只是在 HashMap 基础上为了记住插入顺序才用这个的,面试官也没说啥,这个问题就过了。然后问 TreeMap 底层呢?,TreeMap 相比 HashMap 的特点?后面还追问了 TreeMap 中红黑树复杂度计算方式…这个我就不会了,后面还是要补一下,好几次面试都问了红黑树。

  3. Java 中的锁有哪些分类?可重入锁是悲观/乐观锁?乐观锁怎么定义的?乐观锁有哪些问题?

  4. 介绍下实习中的项目?项目中用到了 Netty,你对 Netty 了解多少?本以为要引出 NIO 了,结果没问…没问…好像之前看网易 Java 面经确实都没有问 IO 相关的,可能是网易那边业务中涉及比较少吧。

  5. Spring 核心理念?说下你对 IoC 的看法?那么 Spring 怎么解决循环依赖问题的?这个问题我就不会了。。直接说的是我不知道(抓到知识盲点一个,以前看到过这个问题但是没有仔细研究过)。那你说下 AOP?AOP在Spring中底层实现?JDK 中自带的实现接口,cglib 中的继承要代理的类,那么你知道 cglib 的底层原理吗?我说只知道底层好像是使用 Enhancer 类来操作需要代理的类来实现继承关系的…其它的我就不知道了。

  6. 线程池用过吗?你知道 Java 中创建线程池的方式?我说有五种,Excutor 中的 newSingleThreadPool、newCachedThreadPool、newFixedThreadPool、newScheduledThreadPool 以及使用线程池自身的构造方法 new ThreadPoolExecutor 创建,并说了一下里面的参数。然后问那你说一下这几种线程池的底层实现?balabala,这个比较简单,然后接着一个问题来了,那你说一下 newSingleThreadPool 和直接创建线程有什么区别?emmm…我不知道从哪个点说,面试官提示我说一下线程池的优点?我说有降低资源消耗、提高响应速度(主要体现在线程上下文切换)以及对线程的管理上,回到这个问题本身,我觉得应该是单线程线程池能够更好的被管理吧,面试官没点头也没摇头这个问题就过了…最后面试官问了一下有没有用过第三方的线程池,就是 JDK 之外的?我说没有,他说数据库连接池用过吧,比较一下数据库连接池和线程池?这个只能说设计思想是相同的,具体一一说出来,还真没有方向,面试官也没再追问就过了。

  7. Redis 用过吧(项目中写了),本以为要问我 Redis 底层的,好吧也没问,他问我怎么保证 Redis 高可用性,我说我搭了 Redis 集群,从 CAP 原理开始扯如何保证高可用性 balabala。

  8. 然后又问了一个项目,JVM 监控系统是否会对目标对象产生影响 balabala,最后面试官好像实在记不起来还能问啥,就结束了…

感受:全程问的都比较基础,没有揪着一个问题深挖底层,也没有问 MySQL、设计模式、HTTP、计网相关的,但是恰好我正需要这些知识点查漏补缺,包括 JVM 相关的也问的很少(也可能是项目中有一个 JVM 相关的,所以没问其中的知识点),不过还是希望网易能给个二面机会😩


8 月 20 号下午 5 点远程视频二面的,面试官是个很年轻的小哥哥,人很 nice,全程聊天都比较轻松,但是感觉面试官小哥好像没有提前准备问题,都是想到哪里问哪里,而且每次问的时候都都会解释一会让我听懂他的意思…

  1. 介绍实习项目,尤其是其中涉及到的 Netty,说一下 Netty 的设计理念

  2. 介绍简历中的项目设计理念,面试官小哥应该是想从一个比较高的角度来谈项目,也就是设计思想方面,不过二面嘛,也确实是这样,然后就 balabala 聊了一会。

  3. 项目中有 JVM,面试官小哥问你对类加载了解吗?我说挺了解的…哈哈,这里没有谦虚,面试官也笑了😄,然后我就一气呵成的把类加载原理、类加载模型、双亲委派机制、为什么用双亲委派模型都讲了一遍,本以为还会问能不能破坏双亲委派加载模型啥的,但是小哥话锋一转,问类加载器中常用方法有哪些,我就说只记得 loadClass 和 findClass 两个方法,其它的不记得了。

  4. 问到 Java 基础,小哥问的是 Java 中怎么保证一个类是线程安全的?一开始没听懂想问哪方面的,小哥说换一种问法吧,Java 中哪些类是线程安全的,或者怎么保证一个类是线程安全的?这里我一开始理解有些偏差,先说的是对方法进行加锁,再就是对共享变量进行修饰什么的…后来明白过来他的意思,就说类的话有 ConcurrentHashMap、CopyOnWriteArrayList、HashTable、Vector 等等,小哥终于点了点头。不过面试官小哥好像不太喜欢问源码原理,更多的是站在一种全局的角度把某一类知识串起来。

  5. 然后问了新建线程的方式?Runnable 和 Callable 的区别?其中提到了用 Future 类封装 Callable 的返回值,小哥问除了 get() 方法外 FutureTask 还有什么方法 - -,这我就真不记得了,小哥提醒我比如对线程做一些操作之类的?我说比如中止线程吗?我说一般我中止线程的时候采用的都是 interrupt() 方法加条件判断来中断一个线程的,并具体解释了一下,面试官说这样也可以,然后直接跟我说 FutureTask 类中也有一个 cancel() 方法可以实现这种操作…表示我也是涨姿势了,后面就问了一个 Thread 类的方法,当时突然脑子短路了,只说了 start、yield、sleep 方法,一直在那想 join 方法的名字😭,然后小哥直接给我说了名字🤦‍,这就很尴尬,然后就问我 join 方法的作用。

  6. 给个场景,一个共享变量最多只能有五个线程同时访问(忘了怎么表述的了),怎么保证,我就说用 JUC 包下工具类中的 Semaphore 信号量可以实现,然后小哥问这玩意中的 API,说实话我忘了 - -,但是我知道它的底层是基于 AQS 实现的,AQS 内部有一个 volatile 修饰的 int 型变量(小哥打断我说咱不从源码角度谈),Semaphore 中肯定有一个计数操作的 API 来保证这个 int 变量不会超过 5 之类的,一个线程持有它计数 + 1,释放计数 - 1。小哥肯定了我的思路,于是我又坦白说我只记得它里面有一些高级 API,但是具体名字不记得了…

  7. 再给个场景,控制一组线程执行到一个位置后等待其它线程都到这个位置再往下执行,我脑子一热,首先说还是 JUC 工具类下的 CountDownLatch 和 CyclicBarrier,然后口嗨说 等待/通知模式使用 wait/notify 也可以实现…小哥邪魅一笑,说等待/通知模式是不是在两个线程时使用比较好啊,多个线程时 notify 不好保证吧😄,我赶紧说自己刚才没考虑清楚,然后又回到了 CountDownLatch 和 CyclicBarrier 上,并主动说了它的 countDown 方法(下一步肯定要问),小哥这才放过我

  8. 问我了不了解 Excutor 框架,我说一般用 Executors 来创建线程池之类的,然后又把一面说的重复了一遍(这里好像把 Executors 和 Executor 搞混了),但小哥显然不想问原理,还是问我知不知道 Executor 中的一些其它方法?(⊙﹏⊙)可能真的就抓 API 使用吧,咱也就老实说不记得了…小哥说 Excutor 中也有能实现上面场景的 API 操作…小哥说了名字,但是现在我也想不起来了

  9. 回到网络编程,我说对 NIO 比较了解,然后我就 balabala 了一堆 NIO 的模型以及 API 之类的,把 Channel 类型以及 Buffer 类型都说了一遍,然后小哥问我 I/O 多路复用,我就从 select/poll/epoll 开始谈起…谈到 epoll 的时候,小哥又喊停了,说咱们不讲原理了,你从一个比较高的角度来分析一下 I/O 多路复用模型?这里小哥解释了几次,我也没明白他想问哪个角度,最后直接大白话问,就说 NIO 相比 传统的 BIO 有什么优势?这下我清楚了,就直接谈 NIO 的同步非阻塞机制,轮询啥的 balabala,传统的 BIO 是同步阻塞的 balabala,小哥最后也肯定了我的思路

  10. 有没有什么要问他的?一是问了网易杭研那边 Java 做的什么岗,小哥说我这边可能看不到,他那边看到我是被分到做支付这块了…行吧,二是让小哥就我刚才的表现评价一下,或者说哪些需要改进的,小哥说就是知识体系没串起来,其它的没啥问题…三是问了一下还有几轮面试,小哥说这轮过了的话,下一轮就去杭州现场 HR 面和主管面。

感受:二面小哥好像不喜欢细问源码,每当我要谈原理到时候就把我打住了,更多的是想从全局性的角度来看待问题,以及想看我分析一些问题的能力。。。但是一直问我一些 API 很难受,一方面是看过不记得,一方面也确实没用过。。。希望有机会参加三面吧,就酱😄

如果这篇文章对您很有帮助,不妨
-------------    本文结束  感谢您的阅读    -------------
0%