首页 > 新华智云22届实习一、二面(已 offer)
头像
迷羊my
编辑于 2021-04-14 16:20
+ 关注

新华智云22届实习一、二面(已 offer)

一面

1.介绍下自己的技术栈和之前实习做的事情

2.这两个项目挑一个做介绍

3.项目:

  • Netty 自定义了什么插件/Handler
  • API 调用数据源是同步还是异步的(同步)
  • 如果有一个慢请求的话阻塞住了后面的请求怎么办

答:有数据库连接池,来一个请求对应一个连接

追问:现在就是连接数满了,没有了额外的连接(懵了)

一顿乱蒙,面试官说不行,后面思考了几分钟,说用异步的方式(死马当活马医),一个线程去请求,一个线程在这监控他是否有数据到来。面试官说可以,具体分两个线程,一个 work 线程去请求数据,一个Listener 线程监听消息队列,当 work 线程拿到数据后发消息给队列,这样的话 Listener 线程就知道数据拿到      了,最后将数据响应出去。

正确答法:设置 JDBC 连接超时时间,如果请求超时了,就新建一个线程去处理该请求,将获取到的数据放进缓存中,主流程直接返回超时重试,当同样的参数再次请求过来时,直接去缓存中获取。

4.Spring 和 SpringBoot 有什么区别(八股文)

5.Spring Bean 的生命周期(八股文)

6.自己怎么来控制 Spring Bean 的生命周期,相当于怎么来对这个 Bean 做扩展(没用过这个功能)
正确答法:
  • 自定义个类实现 BeanPostProcessor 接口,重写 postProcessBeforeInitialization、postProcessorAfterInitialization 方法,在这两个方法中可以对 bean 做一些自定义的操作,将该实现类注册进 Spring容器就行了,每个 bean 初始化前后都会调用这两个方法。
  • 自定义个 Bean 类实现 BeanNameAware 接口,实现 setBeanName 方法,该方法将 Bean 的 name 通过参数传过来,在 Bean 类中定义一个变量,来接收 BeanName。BeanFactoryAware(传递创建该 Bean 的 BeanFactory)、ApplicationContextAware(传递该 Bean 所在的上下文对象) 同理。将该 Bean 注册到 Spring 容器就行了,仅仅对实现了这些接口的 Bean 有效

7.BeanFactory 用来做什么的(可以调用 get 方法获取 Bean 对象)

8.BeanFactory 相当于 Spring 的哪个概念(就是 IOC 容器)

9.除了 BeanFactory 还有其他的吗(ApplicationContext。当时不敢答这个的,怕问到这两个的区别,但是不回答的话显的我又不行,最后还是回答了)

10.MySQL 了解吗(了解)

11.脏读、不可重复读、幻读;隔离级别(八股文)

12.好像平时不会用到可串行化这个级别吧(对,平时项目中也不会特意改这个东西,都是用默认的)

13.MVCC 知道吗(打扰了,不会)

14.MySQL 索引(八股文)

15.刚听你提到了 B+ 树一个节点的大小为一个页的大小,那你知道 MySQL 的页表多大吗(没听过这东西)

16.了解过 Page Cache 吗(都没听过这东西)

17.你通过 MySQL 写入一条数据是直接写入到磁盘里还是写入到哪里(这个不知道)

18.说到缓存了,你了解过 LRU Cache 吗,用 Java 怎么实现一个(好家伙,早上刚复习了一遍)

19.Java 中有没有现成的有序的 HashMap(LinkedHashMap)

20.能不能用 LinkedHashMap 来实现 LRU(说了下 LinkedHashMap 底层的数据结构,答:可以实现)

21.Java 中除了 LinkedHashMap 还有没有别的有序 Map(TreeMap,底层用了红黑树。还好接下来没问红黑树)

22.HashMap 怎么扩容的(申请一个2倍大的数组,拷贝过去)

  • 拷贝的流程是什么(重新 hash 一遍,这样可以让数据更离散)
23.HashMap 不是线程安全的,什么情况下它会出现并发问题(思考了几分钟,说不会。反问他,答:对象丢失、死链)
正确答法:

24.线程池中 coreSize、maxSize、等待队列,这三个参数有什么关系

答:就是核心线程数满了之后该怎么处理吗?

问:是的,是继续增加线程呢,还是进入等待队列

答:会先进入队列,队列满了才会继续增加线程

问:为什么中间要加个队列呢,不用不行吗

答:如果一直让线程创建的话会导致 OOM,来一个任务就创建一个线程比较浪费资源,使用队列的话可以起到缓冲的作用。

25.去队列拿任务、新建一个线程,这两种操作哪个会加锁

答:去队列拿任务的时候需要加锁,新建线程不需要加锁。(结果面试官说你说反了。其实我是蒙反了)

26.线程(Thread)的 stop 方法是安全的吗

答:你问的是 sleep 吗

问:不是,就是 Thread 类的 stop 方法

答:没有用过。

stop 方法不安全。参考博客1 参考博客2

27.那你说下调用 sleep 方法这个线程会处于什么状态

答:运行状态

问:首先它肯定是 block 状态,那他是属于线程的什么状态

答:处于运行态,CPU 一直在空转(这个错了,调用 sleep 是阻塞态,执行完回到就绪)

28.什么情况下会出现等待状态

答:IO 操作的时候,线程会进入阻塞态

29.调用 wait 方法进入什么状态

答:进入阻塞态,会进入等待池中,需要别人唤醒

30.wait 和 notify 为什么是在 Object 类中,而不是在 Thread 类中呢

答:因为 wait 和 notify 方法必须要在同步代码块中才能调用,而同步代码块锁的是对象,调用该对象的 wait 方法,线程会进入该对象的等待池中,和 Thread 无关。

31.写道题吧,三个线程轮流打印 ABC 十次(这个磨蹭了好久,面试官给了提示才写出来)

32.有没有什么要问我的

我问:我觉得我有些知识学得不够深入,对我有什么建议吗,有什么需要加强的地方

他答:你在平时接触到的一些中间件,应该要对它有更深入的了解,比如 MySQL,ES。Java 基础看你还是可以的。

我问:我觉得我有些东西学的太死了,比如遇到了一些场景,不知道怎么解决。

他答:看你一开始那个同步异步的场景题,就知道你没有碰到过这种情况,也没有考虑过并发带来的一些问题。这面通过肯定是通过了(好险,以为挂了),后面会有二面,看你什么时候方便。

我问:你们那边一共有多少面

他答:2 到 3 面,下一面还是技术面,三面可能就是老板找你聊一聊。

一共 2 轮技术面,一轮老板面,一轮hr。

二面

1.讲下在学校和之前实习的情况

2.介绍下第一个项目

  • 问了一些细节问题
  • 如果有人写的 SQL 查询很慢呢

类似一面的问题,我就扯到这个问题上来了:有一个慢请求阻塞住了后面的请求

设置 JDBC 连接超时时间,如果请求超时了,就新建一个线程去处理该请求,将获取到的数据放进缓存中,

主流程直接返回超时重试,当同样的参数再次请求过来时,直接去缓存中获取。

3.实习的时间什么时候可以开始呢(放暑假后第一时间可以入职)

4.两道算法题(感谢面试官提示)

  • 大数相加(手写代码)
  • 两个链表求交点(只需要说思路)

5.HashMap 实现原理(八股文)

  • 去链表里面比较元素的时候用什么方法比较(equals 方法)

6.一个变量在多线程的环境访问,有几种方式保证它的安全(volatile、synchronized、Lock)

7.volatile 的原理(八股文)

8.Lock 和 synchronized 怎么选择(说了他们之间的区别和应用场景)

9.OOM 怎么排查(没有了解过,只知道 dump 命令)

10.你有什么要问我的吗

  • 我感觉这次发挥不太好,你对我有什么建议吗

我觉得你挺好的,基础也很扎实;写程序的话不要太着急,写程序的速度也还可以。

  • 下一面还是技术面吗

没有技术面了

  • 入职之后负责什么

介绍了下公司的业务

  • 最快什么时候可以得到回复

这周

11.你有面试别的公司吗

  • 阿里、字节


更多模拟面试

全部评论

(2) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

热门推荐