Java两年-京东面经

电话+在线编程
1、自我介绍
2、在线编程:有效括号+二叉树层序遍历+动态规划
三选二
3、说一下双亲委派模型
答:JDK8以及之前的版本,双亲委派模型的工作过程主要是当一个类加载器收到类加载请求时它自己并不会先去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此。只有当父加载器反馈自己无法完成这个加载请求时,子加载器才会尝试自己去完成加载。
4、线程的生命周期
答:在线程的生命周期中,它要经过新建、就绪、运行、阻塞、死亡5种状态在这里插入图片描述

5、线程同步的原理,synchronized锁的原理
答:synchronized实现同步的基础,java中的每个对象都可以作为锁。对于普通同步方法,锁是当前实例对象;对于静态同步方法,锁是当前类的Class对象;对于同步方法块,锁是synchronized括号里配置的对象。
6、平时用过线程池么?什么场景下用的线程池?线程池的大小是怎么设置的?线程池的原理?
答:线程池的原理,线程池判断核心线程池里的线程是否都在执行任务,如果不是,则创建一个新的工作线程来执行任务,如果核心线程池里的线程都在执行任务;线程池判断工作队列是否已满,如果没有满,则将新提交的任务存储在工作队列里,如果工作队列满了;线程池判断线程池的线程是否都处于工作状态,如果没有,则创建一个新的工作线程来执行任务。如果已经满了则交给饱和策略来处理这个任务。
7、设计模式有了解么?spring的单例模式的原理?
提了一下领域驱动设计模型:一句话解释技术专家和业务专家一起采用面向对象的思想来提取业务模型
8、mq有了解么?
9、mysql的默认隔离级别?mysql的优化经历?怎么查看是否有用到索引?explain的参数大致说一下?表的数据量?有接触过分库分表么?怎样分的?有了解过mycat内部的相关算法么?
答:mysql默认隔离级别RR,repeatable read。explain的参数:table:关于哪张表的分析;type:表示mysql找到所需行的方式,比如ALL,表示mysql将遍历全表以找到匹配的行;index:遍历索引树找到匹配的行;possible keys:表示mysql可能使用哪个索引在表中找到记录;key:表示mysql实际使用的索引;rows:估算的找到所需记录所需要读取的行。
使用过mycat进行分库分表
mycat相关的算法
10、redis支持哪几种数据类型?redis是怎样部署的?redis的大key怎么处理的?缓存击穿、雪崩怎么办?
答:redis支持String字符串、list列表、set集合、zset有序集合、哈希对象。redis部署方式:单点、主从、哨兵、集群
缓存穿透:查询一个一定不存在的问题,这样的请求每次都会打到数据库上去,可以缓存空值解决,如果这样的请求过多则可以使用布隆过滤器,其实很多系统都有风控所以很少出现这样的情况
缓存击穿:大量的请求同时查询一个key,然而这个key正好失效,大量请求都会达到数据库中;
a、永远不过期,在redis上不设置过期时间,这就可以保证热点key过期问题,从功能上看,不过期数据就是静态的了,在数据库数据进行修改的时候,再次进行缓存构建。唯一的缺点是线程可能访问到旧数据,对于一般互联网公司,这个缺点是可以忍受的。
b、使用互斥锁解决,第一个得到锁的线程将请求的数据再次做缓存,后面的线程来了就会直接走缓存,锁可以使用setnx

缓存雪崩:某一时刻发生大规模的缓存失效,大量的请求进来直接打到db上,简单的解决方案是缓存失效时间分散开,比如在原有的基础上增加随机值,这样缓存过期时间的重复率就会降低

redis大key问题:redis大key是指key对应的value值所占内存空间比较大.首先在实际的项目中很少会遇到大key问题,在设计之初就会避免将大key存进redis缓存。其次解决大key问题的办法如下:
单个key存储的value很大,尝试将key拆分成几个key-value,针对列表集合键同样可以分类做拆分。针对redis版本4.0之后,使用memory usage命令寻找大key,unlink命令使用了lazyfree机制把大key放到后台任务队列中,然后在后台异步删除。减少del命令带来的阻塞

11、有什么要问的吗

##################二面#########
除去在线编程大致流程一面差不多,这里记录下和一面不同的问题
1、有了解贫血模型、充血模型么?
答:失血模型:领域对象只有属性的get、set方法的纯数据类,所有的业务逻辑都有service层中完成
贫血模型:包含了不依赖于持久化的原子领域逻辑,而持久化在service层
充血模型:除了get、set方法,包含了原子领域逻辑和数据持久化的逻辑
胀血模型:很少用,去除了service层,在领域里面的领域逻辑上封装事务

2、平时有逛哪些技术网站么?
3、能接受996么?能接受在家的时候被call么?

##################三面##################
三面主要是谈项目,问一些项目中的实际问题,需要自己对项目有一定的思考,因为我面的是仓储物流岗位,所以介绍最多的项目便是之前公司做的仓储物流项目。

##################hr面##################
1、为什么要跳槽?除了尝试大厂工作还有其他原因吗?这里其实要自己平时深度思考一下,感觉hr想要从里面探知面试者是否有自己的职业规划
2、从上海换到北京有什么想法
3、期望的薪资
上午给出期望薪资提供目前的薪资证明后下午5点多的时候hr便给了回复,京东的效率还是挺快的

### 京东技术试经验分享 #### 试流程概述 京东的技术岗位通常会经历多轮试,具体轮次可能因职位而异。对于技术类岗位,一般包括简历筛选、电话初筛、技术谈和技术主管终等多个环节[^2]。 #### 技术能力考察重点 在技术试过程中,候选人会被要求展示其核心技能和解决问题的能力。以下是常见的考察方向: - **算法与数据结构**:这是基础中的基础,几乎所有的技术岗位都会涉及此部分。例如快速排序实现、二叉树遍历等问题可能会被提及[^1]。 ```python def binary_tree_traversal(root): if root is None: return [] stack, result = [root], [] while stack: node = stack.pop() if node: result.append(node.val) stack.append(node.right) # Right first to ensure left comes out first. stack.append(node.left) return result ``` - **系统设计**:针对高级工程师或者架构师角色,系统设计题目是必考项之一。比如如何设计高并发下的秒杀系统或是分布式缓存机制的设计思路[^3]。 - **项目实战经验**:除了理论知识外,实际项目的参与情况同样重要。能够清晰阐述自己在过往工作中解决过哪些复杂问题及其解决方案尤为重要[^4]。 #### 行为试注意事项 除了硬性的技术水平测试之外,软实力也不可忽视。行为型问题旨在评估候选人的职业素养和个人特质,如团队协作精神、抗压能力和学习适应力等方的表现均需注意展现得当。 #### 复盘与改进策略 利用工具辅助自我提升是一个不错的选择。通过模拟真实环境下的问答过程可以帮助发现自身不足之处并加以改正;同时也可以记录下每次练习后的反馈意见以便日后查看进步轨迹。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值