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便给了回复,京东的效率还是挺快的

Java开发领域,拥有3到5年经验的开发者通常被视为中级到高级人才,他们在实际项目中积累了丰富的实战经验,并具备解决复杂问题的能力。以下是一些常见的试问题和经验分享。 ### 常见试问题 1. **高并发系统设计** - 如何设计一个高并发的库存扣减系统?这是电商、供应链等领域的重要问题,要求候选人理解分布式锁、事务管理、数据库优化等技术。 2. **Java基础与特性** - 了解Java的基本数据类型及其包装类(如`int`与`Integer`)是必须的,此外还需掌握自动装箱/拆箱机制以及它们在实际编程中的应用[^2]。 3. **Spring框架相关** - Spring Boot因其易上手、开箱即用的特点而广受欢迎。试可能会涉及Spring Boot的核心特性,比如内嵌服务器、安全管理、运行数据监控等功能的设计原理和使用方法[^3]。 4. **设计模式** - 单例模式是一个常考的设计模式之一。创建一个公共静态方法来返回对象供外部调用是实现单例的一种方式,它保证在整个系统中对某个类实例只能存在单个实例[^4]。 5. **JVM内部机制** - 理解JVM内存模型、垃圾回收机制以及性能调优技巧对于处理大型应用至关重要。 6. **多线程与并发编程** - 试官可能询问关于线程池配置、同步工具类(如CountDownLatch, CyclicBarrier)、volatile关键字作用及适用场景等问题。 7. **数据库与SQL优化** - 包括但不限于索引优化策略、查询语句优化、事务隔离级别等方的知识点都是考察重点。 8. **微服务架构** - 对于有一定工作经验的人来说,熟悉微服务架构下的服务注册发现、配置中心、API网关等组件的工作原理和服务治理方案是非常重要的。 9. **版本控制工具** - Git作为目前最流行的版本控制系统,在团队协作过程中扮演着不可或缺的角色。因此,熟练掌握Git命令行操作以及图形界工具也是加分项。 10. **测试驱动开发(TDD)** - 掌握单元测试编写技能,能够利用JUnit或TestNG等框架进行有效测试,有助于提高代码质量并减少后期维护成本。 ### 经验分享 - 在准备试时,除了复习理论知识外,还应该注重实践能力的培养。可以通过参与开源项目或者自己动手做一些小项目来加深对知识点的理解。 - 模拟真实场景解决问题的能力同样重要。当遇到具体业务需求时,试着从整体架构出发思考解决方案,并考虑可扩展性、安全性等因素。 - 学会沟通表达也很关键。清晰地向试官阐述自己的思路和技术选型理由可以给对方留下深刻印象。 - 最后不要忽视软技能的学习,良好的团队合作精神和积极主动的态度往往能让一个人脱颖而出。 ```java // 示例:饿汉式单例模式实现 public class Singleton { // 私有构造函数防止外部直接实例化 private Singleton() {} // 内部创建唯一实例 private static final Singleton INSTANCE = new Singleton(); // 提供获取唯一实例的方法 public static Singleton getInstance() { return INSTANCE; } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值