京东JAVA面试心得与面试题详解

2019年的冬季特别的冷,无疑是程序员的寒冬,我也是年底裁员大潮裁下来的一名,(整个业务线都裁了  难受中~)但临近年底了失业回家也不太好所以有投了几份简历,现在已经找到工作了,虽然不是京东但也马马虎虎吧,但我也想把京东的面试过程记录一下。

整个面试和笔试时间在2-3小时。

废话不多说直接干料。

1、java常用的数据结构有哪些?哪些是线程安全的?是怎么保证线程安全的?

因内容太多我就直接贴链接了:https://blog.csdn.net/u010947402/article/details/51878166

2、java内存模型与并发保证

 

             

但他这个问题并不是简单问你这些,他更想得到是你对内存java内存的理解及从性能上给出最优解决方案,博主是从架构上面出发给出的并发保证。比如分布式解决方案,和nginx反代等等,不过提及到nginx 的时候是给自己挖了个坑,待会讲面试的时候在说。

3、线程池内部工作原理

贴链接:https://www.cnblogs.com/qingquanzi/p/8146638.html

4、死锁是什么意思,形成条件是什么?出现死锁是可以通过什么方式去排查

贴链接:https://blog.csdn.net/abigale1011/article/details/6450845/

5、在交易过程中如何放在用户在支付时的重复支付(交叉支付),请写出你了解的方案或使用的过的方案

因为博主以前做过集成支付宝的支付模块,在这就给出的自己的解决方案吧;

因为在调用支付宝接口的时候是一个http请求,支付完成后支付宝会异步回调我们配置好的接受接口但在这个过程中呢可能会

因为网络、服务、系统等原因造成用户支付但是没有成功回调更改我方数据库数据的bug。

在这呢我们后端是使用的是提交查询的方法去避免用户二次支付的。因我们的在支付的时候支付宝也会记录我们的订单编号和他们生成的一个订单编号,我们可以使用我们的订单编号去调用支付宝的订单查询接口去查询到此订单的支付情况。如果查到这个订单编号已经支付过了那就直接返回。

第二个我们的前端也做了重复提交的相应处理从双方向来避免用户产生重复支付的情况。

6、数据库索引有哪几种,他们之间的区别

贴链接:https://www.cnblogs.com/yuan-shuai/p/3225417.html  有人会问为什么会贴这么详细的帖子,因为博主在这吃了亏,在面试的时候面试官会问到很细致。

7、程序开发时通过开发工具DeBug调试时,控制台显示的内容都包含什么?哪些内容可以帮助你发现问题和解决问题。

这个博主就不详细解答了,大家按自己的开发习惯来吧,这个题出现在高级面试题里面我觉得可能有它的道理,不过我就是用来看下值和指针的走向每一步的值是不是预想值。如果大家有更实用的用法务必在下方评论交流一下。

8、RPC通信过程中,假设A系统提供了一个方法入参是一个JavaBean,出参也是一个JavaBean。另外两个系统B系统、C系统调用接口,调用方B想让提供方A增加一个返回参数,假设服务提供方A增加了返回参数,请问C系统调用方需要做什么处理?

在这个问题博主没有写在纸上,只写了希望面对面回答,因为这个题写出来太多了,在面试过程中我是这样回答的:

当时博主指出了这个题存在的需求实现问题,为什么非要在A系统的接口上直接修改接口入参呢?因为这样修改要动A、B、C、3个系统调用方的代码,这样给整个业务带来了很多不便,为什么不给A服务的接口进行一个方法重载呢,这样既解决的需求问题,也只需要变动A、B两个系统的代码就可以了并不会影响C系统。

当后来他问到我可不可以通过底层基础去实现的时候我就回答了一个反射机制给怼了回去。

注:当时博主看错了把A系统的返回参数看成入参了,按入参答得,今天这么一看感觉这个题有点问题啊。反参不是只能一个吗?除非去变动数据类型,以集合方式去反参,我估计是写错了。

9、了解哪些设计模式,用伪代码实现一个你熟悉的设计模式。

贴链接:https://www.cnblogs.com/geek6/p/3951677.html

这里博主在面试过程中被问到了命令模式和设计模式分几类并说出类中代表

 

面试:

1、nginx的配置问题,能否配置跳转2级域名。

答:是可以的,然后又问了一下nginx的负载均衡策略,和你们原本配置的nginx的架构是什么样的。

2、redis数据类型及使用场景,和内存分配大小,是否接触过redis集群,redis集群配置和监听机制,持久化策略及区别和应用场景,hash冲突,如何保证redis里面都是热点数据,淘汰策略,常用的命令,和Jedis的常用api,这里会问到如何保证redis多线程下的原子性操作的,如果你使用过lua脚本的话就答一下这个就行了,京东在这redis这方面问的挺深的建议看一下redis详解再配合自己的使用经历去回答。

可以先参考一下这个:https://www.cnblogs.com/linkworld/p/7808818.html

3、讲一下怎么使用分布式锁。这里博主是用回答使用redis来实现分布式锁的

可参考:https://www.cnblogs.com/linjiqin/p/8003838.html

4、是否使用过MQ,这里博主答的是ActiveMQ相关方面的知识,这里问到多是从业务解决方面来问的,你们mq都用来干嘛了,为什么用它,mq的持久化机制,如果消费失败了怎么办,使用mq消费的时候使用事务控制吗?如何使用。

可参考:https://www.cnblogs.com/lknny/p/7488310.html  如果有使用过的同学可以结合你们的业务场景来回答此问题。

5、如果让你自己写一个dubbo协议怎么写?dubbo的使用,失败策略,和使用过程中碰到的问题,这里还提到了了对系统架构的问题,主要是原本如何拆分的服务,每个服务之间的关系这样。

自定义协议可以参考这个:https://blog.csdn.net/xiaoliuliu2050/article/details/81382111  面试官的意思就是让你说出来这里面的实现逻辑以及你对http协议的了解就行了。

dubbo相关:http://blog.51cto.com/developerycj/2050104

6、你上一个项目中jvm各种内存如何分配的。

在这里spring全家桶和数据库相关知识几乎没在面试中问,他们更多注重这些中间件相关的知识,可能面到这个层级的岗位大家都不注重什么框架了,因为都是底层去实现的,只要基础够扎实大厂指日可待。

最后希望各位同学能学到有用的东西,如果觉得博主有短见的地方同学们可以在下方交流一下。

Author: victor

阅读次数 10

发表评论

电子邮件地址不会被公开。 必填项已用*标注