前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >揭秘大厂面试心经:深度解析京东一面,助你突破职场难关!

揭秘大厂面试心经:深度解析京东一面,助你突破职场难关!

作者头像
@派大星
发布2023-12-18 18:34:08
1890
发布2023-12-18 18:34:08
举报
文章被收录于专栏:码上遇见你

谈谈工作中遇到过哪些设计模式?

在学习一些框架或中间件的底层源码的时候遇到过一些设计模式

  1. 代理模式:Mybatis中用到JDK动态代理来生成Mapper的代理对象,在执行代理对象的方法时会去执行SQL,Spring中AOP、包括@Configuration注解的底层实现也都用到了代理模式
  2. 责任链模式:Tomcat中的Pipeline实现,以及Dubbo中的Filter机制都使用了责任链模式
  3. 工厂模式:Spring中的BeanFactory就是一种工厂模式的实现
  4. 适配器模式:Spring中的Bean销毁的生命周期中用到了适配器模式,用来适配各种Bean销毁逻辑的执行方式
  5. 外观模式:Tomcat中的Request和RequestFacade之间体现的就是外观模式
  6. 模板方法模式:Spring中的refresh方法中就提供了给子类继承重写的方法,就用到了模板方法模式

更多设计模式参考文章

Java造成死锁的几个原因:

  1. 一个资源每次只能被一个线程使用
  2. 一个线程在阻塞等待某个资源时,不释放已占有资源
  3. 一个线程已经获得的资源,在未使用完之前,不能被强行剥夺
  4. 若干线程形成头尾相接的循环等待资源关系

这是造成死锁必须要达到的4个条件,如果要避免死锁,只需要不满足其中某一个条件即可。而其中前3个条件是作为锁要符合的条件,所以要避免死锁就需要打破第4个条件,不出现循环等待锁的关系。在开发过程中:

  1. 要注意加锁顺序,保证每个线程按同样的顺序进行加锁
  2. 要注意加锁时限,可以针对所设置一个超时时间
  3. 要注意死锁检查,这是一种预防机制,确保在第一时间发现死锁并进行解决

聊一聊什么是深拷⻉和浅拷⻉

深拷⻉和浅拷⻉就是指对象的拷⻉,一个对象中存在两种类型的属性,一种是基本数据类型,一种是实例对象的引用。

  1. 浅拷⻉是指,只会拷⻉基本数据类型的值,以及实例对象的引用地址,并不会复制一份引用地址所指向的对象,也就是浅拷⻉出来的对象,内部的类属性指向的是同一个对象
  2. 深拷⻉是指,既会拷⻉基本数据类型的值,也会针对实例对象的引用地址所指向的对象进行复制,深拷⻉出来的对象,内部的属性指向的不是同一个对象

如果你提交任务时,线程池队列已满,这时会发生什么

  1. 如果使用的无界队列,那么可以继续提交任务时没关系的
  2. 如果使用的有界队列,提交任务时,如果队列满了,如果核心线程数没有达到上限,那么则增加线程,如果线程数已经达到了最大值,则使用拒绝策略进行拒绝

更详细的内容可参考文章(绝对干货):对线面试官-线程池连环问

谈谈ConcurrentHashMap的扩容机制

1.7版本

  1. 1.7版本的ConcurrentHashMap是基于Segment分段实现的
  2. 每个Segment相对于一个小型的HashMap
  3. 每个Segment内部会进行扩容,和HashMap的扩容逻辑类似
  4. 先生成新的数组,然后转移元素到新数组中
  5. 扩容的判断也是每个Segment内部单独判断的,判断是否超过阈值

1.8版本

  1. 1.8版本的ConcurrentHashMap不再基于Segment实现
  2. 当某个线程进行put时,如果发现ConcurrentHashMap正在进行扩容那么该线程一起进行扩容
  3. 如果某个线程put时,发现没有正在进行扩容,则将key-value添加到ConcurrentHashMap中,然后判断是否超过阈值,超过了则进行扩容
  4. ConcurrentHashMap是支持多个线程同时扩容的
  5. 扩容之前也先生成一个的数组
  6. 在转移元素时,先将原数组分组,将每组分给不同的线程来进行元素的转移,每个线程负责一组或多组的元素转移工作

Spring中Bean是线程安全的吗?

Spring本身并没有针对Bean做线程安全的处理,所以:

  1. 如果Bean是无状态的,那么Bean则是线程安全的
  2. 如果Bean是有状态的,那么Bean则不是线程安全的

另外,Bean是不是线程安全,跟Bean的作用域没有关系,Bean的作用域只是表示Bean的生命周期范围,对于任何生命周期的Bean都是一个对象,这个对象是不是线程安全的,还是得看这个Bean对象本身

说说你常用的Linux基本操作命令

可以尝试从以下角度回答该问题:

  1. 增删查改
  2. 防火墙相关
  3. ssh/scp
  4. 软件下载、解压、安装
  5. 修改权限

了解Maven中Package和Install的区别吗

  1. Package是打包,打成Jar或War
  2. Install表示将Jar或War安装到本地仓库中

了解SpringCloud各组件功能,以及与Dubbo的区别吗

  1. Eureka:注册中心,用来进行服务的自动注册和发现
  2. Ribbon:负载均衡组件,用来在消费者调用服务时进行负载均衡
  3. Feign:基于接口的申明式的服务调用客户端,让调用变得更简单
  4. Hystrix:断路器,负责服务容错
  5. Zuul:服务网关,可以进行服务路由、服务降级、负载均衡等
  6. Nacos:分布式配置中心以及注册中心
  7. Sentinel:服务的熔断降级,包括限流
  8. Seata:分布式事务
  9. Spring Cloud Config:分布式配置中心
  10. Spring Cloud Bus:消息总线
  11. .......................

Spring Cloud是一个微服务框架,提供了微服务领域中的很多功能组件,Dubbo一开始是一个RPC调用框架,核心是解决服务调用间的问题,Spring Cloud是一个大而全的框架,Dubbo则更侧重于服务调用,所以Dubbo所提供的功能没有Spring Cloud全面,但是Dubbo的服务调用性能比Spring Cloud高,不过Spring Cloud和Dubbo并不是对立的,是可以结合起来一起使用的。

发散性思考题

项目及主要负责的模块

该问题需要平时要多了解一下你目前在做的项目中的核心模块,核心功能的业务与使用到的技术

好了本章到此结束,希望对你有所帮助,注学习顺利

往期绝对精彩干货系列文章参考

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码上遇见你 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 谈谈工作中遇到过哪些设计模式?
  • Java造成死锁的几个原因:
  • 聊一聊什么是深拷⻉和浅拷⻉
  • 如果你提交任务时,线程池队列已满,这时会发生什么
  • 谈谈ConcurrentHashMap的扩容机制
  • Spring中Bean是线程安全的吗?
  • 说说你常用的Linux基本操作命令
  • 了解Maven中Package和Install的区别吗
  • 了解SpringCloud各组件功能,以及与Dubbo的区别吗
  • 发散性思考题
    • 项目及主要负责的模块
    相关产品与服务
    负载均衡
    负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档