首页 > 京东数科Java实习一面面经(已OC)
头像
钟期既遇
编辑于 2020-12-04 13:57
+ 关注

京东数科Java实习一面面经(已OC)

2020/12/4 10:00 20min

面试官提前一分钟打电话过来,这么敬业的小哥哥,我还是第一次遇到😂,简单聊了几句就开始面试了。
1.自我介绍
2.看你简历写的技术点挺多的,你说一下你比较擅长的?
3.看你用 Netty 做过 RPC 框架,你能说说 Netty 是什么吗?
4.Netty 的异步体现在什么方面?
一是异步事件处理,Event 被放入 EventQueue 即可返回,后续再从 Queue 里消费处理;
二是异步 IO,包括 bind、write 等操作会返回一个 ChannelFuture,进而异步拿到结果,不会造成线程 block。

serverBootstrap.bind(port).addListener(future -> {
       if (future.isSuccess()) {
           System.out.println("success, port: " + port);
       } else {
           System.out.println("failed, port: " + port);
       }
   });

5.你知道非阻塞 IO 吗?讲一下流程?
6.阻塞 IO 呢?讲一下流程?
7.谁来读数据?
8.谁通知它来读数据?
9.从哪里读数据?
10.MySQL 索引的 B+ 树说一下,为什么不用 B 树?
11.你对 volatile 关键字的了解?
12.你说 volatile 修饰 64 位变量可以保证原子性,如果不加 volatile 会怎样,说一下例子?
当线程在没有同步的情况下读取变量时,可能会得到一个失效值,但至少这个值是由之前某个线程设置的值,而不是一个随机值。这种安全性保证也被称为最低安全性(out-of-thin-air safety)。
最低安全性适用于绝大多数变量,但是存在一个例外:非 volatile 类型的 64 位数值变量(double 和 long),Java 内存模型要求,变量的读取操作和写人操作都必须是原子操作,但对于非 volatile 类型的 long 和 double 变量,JVM 允许将 64 位的读操作或写操作分解为两个 32 位的操作。当读取一个非 volatile 类型的 long 变量时,如果对该变量的读操作和写操作在不同的线程中执行,那么很可能会读取到某个值的高 32 位和另一个值的低 32 位。因此,即使不考虑失效数据问题,在多线程程序中使用共享且可变的 long 和 double 等类型的变量也是不安全的,除非用关键字 volatile 来声明它们,或者用锁保护起来。——《Java并发编程实战》
13.你刚才说可见性,具体说一下,不加 volatile 的话,什么时候才能读到主内存的值?
不加 volatile 的变量没有改动时读工作内存,有改动时读主内存。
14.你对死锁的了解?一个线程获取锁,在代码层面是怎么实现的?
反问:
1.部门是做什么的?
2.实习生多久可以上手写需求?
3.面试结果什么时候能出来?
总结:
面试官还是比较和蔼的,对知识问的比较深,有一些问题没有答好,面试官也有了提示,是一次收获很大的面试。

更多模拟面试

全部评论

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

推荐话题

相关热帖

近期热帖

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

近期精华帖

热门推荐