京东数科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.面试结果什么时候能出来?
总结:
面试官还是比较和蔼的,对知识问的比较深,有一些问题没有答好,面试官也有了提示,是一次收获很大的面试。

#实习##面经##京东数科##Java工程师#
全部评论
volatile不是不能保证原子性么
点赞 回复 分享
发布于 2020-12-04 12:13
老哥在哪投的
点赞 回复 分享
发布于 2020-12-04 14:37
神州信息
校招火热招聘中
官网直投
研究生吗
点赞 回复 分享
发布于 2020-12-04 15:41
11点面的,现在还没通知,凉了😂
点赞 回复 分享
发布于 2020-12-04 16:27
京东这么缺人吗 看到第三个一面就给offer的😂
点赞 回复 分享
发布于 2020-12-05 00:03
是面向2022届的日常实习吗?
点赞 回复 分享
发布于 2020-12-10 16:52
没让手撕算法题么
点赞 回复 分享
发布于 2020-12-13 08:34
请问楼主OC之后多久收到正式offer呀
点赞 回复 分享
发布于 2020-12-24 17:09
面的哪里的京东啊
点赞 回复 分享
发布于 2020-12-27 19:16
所以一个线程获取锁,在代码层面是怎么实现的呀?要从底层回答吗(萌新
点赞 回复 分享
发布于 2020-12-27 21:26

相关推荐

晓斑:根据他们的经验谈,最低工资和最高两倍差的话基本不是正经招人的
点赞 评论 收藏
分享
10 46 评论
分享
牛客网
牛客企业服务