每日面试
文章平均质量分 85
每天Java面试内容的分享,还在顾虑想要跳槽而不了解市场情况吗?快来关注我吧!
寒夕若梦
公众号:Java面试百分百,大家可以关注一下呀!
趁着年轻生猛,我要再和生活死磕几年。要么我就毁灭,要么我就铸就辉煌。如果有一天,你发现我在平庸面前低了头,那么请向我开炮。
展开
-
每日面试:今天的面试不简单
1、简述拆箱装箱原理?装箱过程是通过调用包装器的valueOf方法实现的,将原值赋给对应类;拆箱过程是通过调用包装器的 intValue/doubleValue等方法实现,返回基本的数据类型。2、Java反射原理?Java会在编译期装载所有的类,并将其元信息保存至Class类对象中。因此可以设计x.class/x.getClass()/Class.forName()等方法获取Class对象。所以在反射调用Field/Method/Constructor对象时,可根据Class类对象进行.原创 2021-06-21 10:43:19 · 660 阅读 · 0 评论 -
每日面试:节后来场面试练练手
1、并发和并行的区别是什么?并发:一个处理器可以同时处理多个任务。这是逻辑上的同时发生。并行:多个处理器同时处理多个不同的任务。这是物理上的同时发生。有一个清晰地比喻:并发:一个人同时吃三个苹果。并行:三个人同时吃三个苹果。并发(concurrency):指同一时刻只能够执行一条指令,但是多条指令被快速的进行切换,给人造成了它们同时执行的感觉。但在微观来说,并不同同时进行的,只是划分时间段,分别进行执行。并行(parallel):在同一时刻,有多条指令在多个处理器上同时执行。.原创 2021-06-21 10:41:35 · 595 阅读 · 0 评论 -
端午前最后一场面试
1、RocketMQ顺序消息扩容的过程中,如何在不停写的情况下保证消息顺序? 成倍扩容,实现扩容前后,同样的 key,hash 到原队列,或者 hash 到新扩容的队列。 扩容前,记录旧队列中的最大位点。 对于每个 Consumer Group ,保证旧队列中的数据消费完,再消费新队列,也即:先对新队列进行禁读即可。 2、什么是定时消息?如何实现?定时消息,是指消息发到 Broker 后,不能立刻被 Consumer 消费,要到特定的时间点或者等待特定的时间后才能 被.原创 2021-06-21 10:35:52 · 373 阅读 · 0 评论 -
Java面试:2021.06.11
1、Spring 框架中都用到了哪些设计模式?Spring 框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式 — 在 AOP 和 remoting 中被用的比较多。 单例模式 — 在 Spring 配置文件中定义的 Bean 默认为单例模式。 模板方法 — 用来解决代码重复的问题。比如 RestTemplate、JmsTemplate、JdbcTemplate 。 前端控制器 — Spring提供了 DispatcherServlet 来对请求...原创 2021-06-21 10:32:31 · 309 阅读 · 0 评论 -
拿下最终的offer!抉择吧,命运!
1、RabbitMQ消息队列消息丢失问题怎么解决?RabbitMQ消息丢失的三种情况:1.生产者发送消息到交换机时数据丢失:消息确认模式confirmCallback,返回给生产者,提示消息发送交换机成功;2.交换机发送消息到队列时数据丢失:同样是消息确认模式,ReturnCallback,如果发送失败将消息退回给生产者;3.消费者消费消息是数据丢失:默认是自动确认,我们只要配置成手动确认即可,消费者接收消息以后调用channel.basicAck()方法出现异常则获取消息失败,需要重新发送原创 2021-06-21 10:29:57 · 259 阅读 · 0 评论 -
又是凉凉的一天
1、自我介绍。我是从我的工作年限、行业、常用技术栈以及在工作中所扮演的角色来讲解的,最后基于提前对公司的了解又对此进行了一番仰慕。2、问项目(让我讲一个最熟悉的)。wk,这么无视我的吗!最近的项目还是比较熟悉的,我最近做的是基于SASS平台的OA系统。其中的数据库的设计、权限管理、定时系统、日志系统和个人中心等我都做了相关准备。索性一不做二不休拿起数据库设计和权限管理就开始了我的征程。数据库我是基于数据库三范式的思想进行设计的(对三范式简述了一下),设计前考虑了用户量以及后期的数据拓展.原创 2021-06-21 10:27:49 · 326 阅读 · 0 评论 -
大厂面试都这样了吗?
1、秒杀解决方案。 架构:扩容、业务分离、数据分离 产品:下单按钮控制、秒杀答题削峰、简化页面设计 前端:限流(反作弊)、静态化以及页面缓存 后端:内存数据库 ,消息队列、程序计数器、分布式锁 在回答问题的时候还需要拿出来其中一种做具体的探讨。回答思路为:分析其问题,秒杀会产生或带来什么问题,这些问题的解决方案有哪些,然后针对其中一种方案做具体的讲解。2、最终一致性分布式事务如何保障实际生产中 99.99% 高可用?对于常见的微服务系统,大部分接口调用是.原创 2021-06-21 10:25:56 · 268 阅读 · 0 评论 -
这场面试,我佛了
1、HashMap为什么不是线程安全的,并发情况下会有什么问题?首先,为什么会存在线程安全的问题,这个得从JMM(Java Memory Model)说起。大家都知道,计算机在执行一个指令的时候,会先将数据和指令从硬盘或网络等地方加载到内存,然后CPU在从内存加载指令和数据到CPU缓存,然后到寄存器,最终计算的结果,也会写回到内存,最终保存到磁盘或者其他地方(所有的读写都会用到读缓冲区和写缓冲区)。因为现在基本都是多核CPU,内存是所有CPU共享的,但每个CPU内部的缓存和寄存器是私有的,这就造成了同一原创 2021-06-21 10:20:15 · 228 阅读 · 0 评论 -
区区5道题,我就跪了……
1、Redis在你们项目中是怎么用的?(1)门户系统中的首页内容信息的展示。(商品类目、广告、热门商品等信息)门户系统的首页是用户访问量最大的,而且这些数据一般不会经常修改,因此为了提高用户的体验,我们选择将这些内容放在缓存中;(2)单点登录系统中也用到了redis。因为我们是分布式系统,存在session之间的共享问题,因此在做单点登录的时候,我们利用redis来模拟了session的共享,来存储用户的信息,实现不同系统的session共享;(3)我们项目中同时也将购物车的信息设计存储在redis原创 2021-06-21 10:01:37 · 262 阅读 · 0 评论 -
我先入坑啦,等你哦!
1、redis为什么读取的那么快? 1.完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);2.采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;3.使用多路I/O复用模型...原创 2021-06-07 17:40:25 · 273 阅读 · 0 评论 -
我太难了!这些面试问题你遇到了吗?
1、你们这个项目数据访问量大不大?根据项目实际情况来讲,这里给大家举个栗子。传统项目若不是sass这种的,给企业来应用,用户一般在1000左右,并发的话很少出现,一般通过redis缓存、线程这些就可以处理。互联网项目,一般差不多的项目日活在1W左右,并发在200到500间,考虑到后期的用户递增,处理方案就比较广泛了。DNS、服务的前置、后置、缓存优化、线程池、nginx、页面静态化、集群、高可用架构、读写分离等。方案有很多,可以根据项目的实际需要做选择。2、用redis是做那一块的.原创 2021-06-07 17:38:39 · 539 阅读 · 0 评论 -
我要18K,能过吗?
1、项目都有那些功能?介绍了最近的这个项目自己所负责的几个核心功能,重点讲了其中一个技术的选型和实现等。然而他并没有接着问我项目上的问题。2、spring框架AOP讲解一下吧!AOP面向切面编程,是对OOP的补充。可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。主要有以下操作:日志记录,跟踪,优化和监控;事务的处理;持久化;性能的优化;资源池,如数据库连接池的管理;系统统一的认证、权限管理等;应用..原创 2021-06-07 17:37:27 · 296 阅读 · 0 评论 -
来一场Java高级的面试,看看自己啥水准
1. 为什么等待和通知是在 Object 类而不是 Thread 中声明的?一个棘手的 Java 问题,如果 Java编程语言不是你设计的,你怎么能回答这个问题呢。Java编程的常识和深入了解有助于回答这种棘手的 Java 核心方面的面试问题。为什么 wait,notify 和 notifyAll 是在 Object 类中定义的而不是在 Thread 类中定义这是有名的 Java 面试问题,招2~4年经验的到高级 Java 开发人员面试都可能碰到。这个问题的好在它能反映了面...原创 2021-06-07 17:36:13 · 276 阅读 · 0 评论 -
Java面试:2021.06.01
1、线程有哪些状态?线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。 创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。 就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。 运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。原创 2021-06-07 17:33:32 · 231 阅读 · 0 评论 -
Java面试:2021.05.31
1、integer是否可以用==判断相等? Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。 无论如何,Integer与new Integer()不会相等。不会经历拆箱过程,i8的引用指向堆,而i4指向专门存放他的内存(常量池),他们的内存地址不一样,使用 == 比较都为false。 两个都是非new出来的Integer,使用 == 比较,如果数在-128到127之间,则是true,否则为false 两个都是new出来的,==比较都为fa原创 2021-06-07 10:55:49 · 283 阅读 · 0 评论 -
Java面试:2021.05.30
1、什么是悲观锁?什么是乐观锁? 1)悲观锁它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在 整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供 的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改 数据)。在悲观锁的情况下,为了保证事务的隔离性,就需要一致性锁定读。读取数据时给加锁,其它事务无法修改这些数 据。修改删除数据时也要加锁,其它事务无法读取原创 2021-06-07 10:55:00 · 206 阅读 · 0 评论 -
Java面试:2021.05.29
1、Kafka的架构是怎样的?Kafka 的整体架构非常简单,是分布式架构,Producer、Broker 和Consumer 都可以有多个。1.Producer,Consumer 实现 Kafka 注册的接口。2.数据从 Producer 发送到 Broker 中,Broker 承担一个中间缓存和分发的作用。3.Broker 分发注册到系统中的 Consumer。Broker 的作用类似于缓存,即活跃的数据和离线处理系统之间的缓存。4.客户端和服务器端的通信,是基于简单,高性能...原创 2021-06-07 10:53:00 · 211 阅读 · 0 评论 -
Java面试:2021.05.28
1、请问你是如何做接口测试的?大体来说,经历以下过程:接口需求调研、接口测试工具选择、接口测试用例编写、接口测试执行、接口测试回归、接口测试自动化持续集成。具体来说,接口测试流程分成以下九步:第一步:分析出测试需求,并请开发提供接口说明文档;第二步:从接口说明文档中整理出接口测试用例,里面要包括详细的入参(正常情况,异常情况包括输入参数个数,类型,可选/必选,考虑参数有互斥或关联的情况)和出参数据(符合接口文档需求)以及明确的格式和检查点;第三步:与开发一起对接口测试用例进行评审;第四步原创 2021-06-07 10:36:45 · 220 阅读 · 0 评论 -
Java面试:2021.05.27
1、Spring的IOC和AOP两大核心的理解。1. Spring 的两大核心是:IOC(控制反转)和 AOP(面向切面编程)2. IOC 的意思是控制反转,是指创建对象的控制权的转移,以前创建对象的主动权和时机是由自己把控的,而现在这种权力转移到 Spring 容器中,并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系,对象与对象之间松散耦合,也利于功能的复用。最直观的表达就是,IOC 让对象的创建不用去 new 了,可以由 spring 根据我们提供的配置文件自动生产,我们需要对象.原创 2021-06-07 10:34:47 · 227 阅读 · 0 评论 -
Java面试:2021.05.26
1、SpringMVC跨域问题该如何配置?springmvc4.2版本以上解决跨域问题只需要在controller中添加@CrossOrigin注解就可以解决跨域问题,前端正常发出ajxa请求的时候,返回数据中Access-Control-Allow-Origin的值就是前端的请求路径,最终思想就是需要服务器端一样遵循CORS标准,就可以实现同源策略原则。2、怎么防止死锁?首先我们了解一下什么情况下会发生死锁?1.系统资源的竞争通常系统中拥有的多个不可剥夺资源,其数量不足以满足多个.原创 2021-05-27 14:27:42 · 180 阅读 · 0 评论 -
Java面试:2021.05.25
1、你们项目中为什么要用MQ?消息队列的作用是系统解耦、同步改异步、请求消峰,举个下订单的例子:前端获取用户订单信息,请求后端的订单创建接口。这个接口并不直接请求订单服务,而是首先生成唯一订单编号,再组装一个订单消息并发送给MQ,然后返回唯一订单编号给前端。前端会根据唯一订单编号轮询订单状态接口,如果订单创建成功,则拉起支付界面引导用户付款。作为消费者,订单服务收到订单消息后,开始检查参数、检查库存、生成订单等等核心业务流程。解耦体现在订单创建接口并没有直接访问订单服务,使得它不用关注订单服务接口的原创 2021-05-27 14:27:00 · 235 阅读 · 0 评论 -
Java面试:2021.05.24
1、Redis 持久化方案你了解吗?redis持久有两种形式,RDB,AOF俩种,RDB是一种快照的方式来存储的,这也是redis的默认的持久化方式,每隔一段对数据进行一次存储,默认是15S。AOF是即时性的持久化方式,这种方式对数据的保存完整性比较高,但是性能比较差。而RDB存在的问题主要是服务器宕机或者断电,就会造成数据丢失,我们可以适当的把存储间隔缩短一些。2、什么是Dubbo?1. Dubbo的理解工作在soa面向服务分布式框架中的服务管理中间件。Dubbo...原创 2021-05-27 14:26:20 · 175 阅读 · 0 评论 -
Java面试:2021.05.23
1、常用的线程池有几种?常用的线程池有6种.1. newCachedThreadPool:缓冲线程池。没有核心线程,最大线程上限为 Integer.MAX_VALUE,新任务来了不排队,总是新建临时线程来处理任务,临时线程如果空闲超过60秒则被回收。适合突发的大量短任务,但缺点是没有线程上限,还是会因为线程数太多,而造成内存溢出;2. newFixedThreadPool:固定线程池。核心线程固定,没有临时线程,新任务来了如果没有空闲线程则进入阻塞队列排队。缺点是队列没有上限(Intege.原创 2021-05-27 14:25:36 · 221 阅读 · 0 评论 -
Java面试:2021.05.22
1、SpringBoot 了解吗?SpringCloud 了解吗?自然是了解的,但是这么一问又比较笼统反而不知道应该往哪个方向进行回答了。对于springboot而言可以讲解一下自动装配、微服务与分布式的区别这两个点,有的可能会涉及与spring等框架的区别和常用注解。对于springcloud而言,五大常用组件就要提上议程了,可以简单讲一下然后选其中一个重点来讲解。为什么选用,怎么用的,有没有遇到相关的一些问题,怎么进行处理和解决的。2、项目接口优化怎么做的?这里区分两个点,接口.原创 2021-05-27 14:24:53 · 189 阅读 · 0 评论 -
Java面试:2021.05.21
1、网络七层模型与四层模型的区别?七层模型分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。分层功能职责 物理层:底层数据传输,如网线;网卡标准。 数据链路层:定义数据的基本格式,如何传输,如何标识;如网卡MAC地址。 网络层:定义IP编址,定义路由功能;如不同设备的数据转发。 传输层:端到端传输数据的基本功能;如 TCP、UDP。 会话层:控制应用程序之间会话能力;如不同软件数据分发给不同软件。 标识层:数据格式标识,基本压缩原创 2021-05-27 14:23:49 · 223 阅读 · 0 评论 -
Java面试:2021.05.20
1、在讲项目的过程中,聊到了接口这块,瞬间惨不忍睹,问我是否考虑到幂等性问题了,怎么处理的?WC要崩啊!在实际的开发项目中,一个对外暴露的接口往往会面临,瞬间大量的重复的请求提交,如果想过滤掉重复请求造成对业务的伤害,那就需要实现幂等!我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义,最终的含义就是对数据库的影响只能是一次性的,不能重复处理。 1、数据库建立唯一性索引,可以保证最终插入数据库的只有一条数据 2、token机制,每次接口请求前先原创 2021-05-27 14:22:06 · 169 阅读 · 0 评论 -
Java面试:2021.05.19
1、微服务架构下为什么会产生数据不一致的问题?在微服务架构下,多个服务之间通常会定义明确上下游关系,下游系统可以依赖上游系统,下游系统可以通过API查询或修改上游系统的数据;反过来则不然,上游系统不应该知道下游系统的存在,也就是说上游系统不能依赖下游系统,上游系统的变化只能通过异步事件的方式发出,下游系统监听事件并基于事件做对应的数据状态变化。在基于上面原则的微服务架构下(见上面图示,本文不考虑服务间循环依赖的场景),在上下游服务间的数据通信(图示中的每个箭头表示一种数据通信)一旦发生问题,都会产原创 2021-05-27 14:20:14 · 454 阅读 · 0 评论 -
Java面试:2021.05.18
1、讲一下你对线程池的理解。线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处理任务时创建销毁线程开销的代价,另一方面避免了线程数量膨胀导致的过分调度问题,保证了对内核的充分利用。而本文描述线程池是JDK中提供的ThreadPoolExecutor类。当然原创 2021-05-27 14:19:16 · 295 阅读 · 0 评论 -
Java面试:2021.05.17
1、Java 的 io 模型?IO模型:BIO、NIO、IO多路复用、AIO。2、io 多路复用的实现有哪些?select、poll、epoll。1、select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链表中,并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替,但是select和p.原创 2021-05-27 14:13:10 · 225 阅读 · 1 评论 -
Java面试:2021.05.16
1、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后? 答:会执行,在方法返回调用者前执行。 注意:在finally中改变返回值的做法是不好的,因为如果存在finally代码块,try中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,然后如果在finally中修改了返回值,就会返回修改后的值。显然,在finally中返回或者修改返回值会...原创 2021-05-17 11:32:15 · 206 阅读 · 0 评论 -
Java面试:2021.05.15
1、你们项目中对外开放第三方接口了吗?有或无,根据项目情况来讲即可。但是需要知道的点是:接口使用的什么技术(dubbo、webService、httpclient等是否了解);编写了相关的接口文档;若项目较大或是比较规范一般还会设计接口API。接口一般在开发前就设计好了规范的接口,然后根据工作模块划分进行开发即可。如果是开放了第三方接口,那这块的实现就要讲一下了。2、分布式、集群、微服务的区别关系?集群是个物理形态,分布式是个工作方式。 分布式:一个业务分拆多.原创 2021-05-17 11:31:28 · 165 阅读 · 0 评论 -
Java面试:2021.05.14
1、"=="和equals方法究竟有什么区别?==的作用: 基本类型:比较的是值是否相同 引用类型:比较的是地址值是否相同 equals的作用: Object类中的 equals 就是利用了 ==,比较的是地址值是否相同 通常我们希望比较的是对象的内容是否相同,因此需要重写 equals 方法,例如String,Integer,Date等类中都有重写,在自定义类中也可以实现自己的比较规则 如果没有重写,使用的仍然是继承自Object父类的equals,比..原创 2021-05-17 11:30:43 · 213 阅读 · 0 评论 -
Java面试:2021.05.13
1、什么是红黑树?哪里用到了?红黑树是一种含有红黑结点并能自平衡的二叉查找树。它必须除了满足二叉搜索树的性质外,还要满足下面的性质:性质1:每个节点要么是黑色,要么是红色。性质2:根节点是黑色。性质3:每个叶子节点(NIL)是黑色。性质4:每个红色结点的两个子结点一定都是黑色。性质5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点。应用:1、java8 hashmap中链表转红黑树。优势:时间复杂度从O(n)-->O(logn) ,且自旋开销较其他树较低(不用整体平衡)。原创 2021-05-14 09:33:10 · 196 阅读 · 1 评论 -
Java面试:2021.05.12
1、redis中RDB和AOF的使用情况分别是什么?如果是保存不重要的数据可以使用RDB方式(比如缓存数据),如果是保存很重要的数据就要使用AOF,但是两种方式也可以同时使用。RDB触发机制:第一种:save(同步)1 客户端输入save命令----》redis服务端----》同步创建RDB二进制文件2 会造成redis的阻塞(数据量非常大的时候)3 文件策略:如果老的RDB存在,会替换老的4 复杂度 o(n)第二种:bgsave(异步,Backgroud saving sta原创 2021-05-14 09:32:11 · 199 阅读 · 0 评论 -
Java面试:2021.05.11有答案参考的哦!
1、MySQL数据库的存储引擎?对应的底层索引结构?常用的有引擎:InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。MYISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性原创 2021-05-14 09:30:58 · 165 阅读 · 0 评论 -
Java面试:2021.05.10来不及解释,快上车!
dubbo 的执行流程; Sql语句的链表查询和sql语句的聚合函数语句的编写; 异步线程池; Map集合jdk1.7和jdk1.8的区别; List和set集合的区别; 线程和juc线程; Mongodb和mysql还有redis他们之间的区别,为什么使用mongodb; Mongodb支持的基类型有哪些; Docker镜像,容器和dockerFile他们有什么关系; Docker的原理; Docke...原创 2021-05-11 10:48:31 · 189 阅读 · 0 评论 -
Java面试:2021.05.09
1、Spring事务的实现原理? 编程式事务使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。 声明式事务是建立在AOP之上的。使用一个事务拦截器,在方法调用的前后/周围进行事务性增强(advice),来驱动事务完成。 之后还回答了事务的特性、隔离级别等内容,详细内容较多,放到下面几篇中了可以参考。2、单例模式怎么应用的?简..原创 2021-05-11 10:47:54 · 199 阅读 · 0 评论 -
Java面试:2021.05.08
1、Spring如何处理线程并发问题? 在一般情况下,只有无状态的Bean才可以在多线程环境下共享,在Spring中,绝大部分Bean都可以声明为singleton作用域,因为Spring对一些Bean中非线程安全状态采用ThreadLocal进行处理,解决线程安全问题。 ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题。同步机制采用了“时间换空间”的方式,仅提供一份变量,不同的线程在访问前需要获取锁,没获得锁的线程则需要排队。而ThreadLocal采用了“空原创 2021-05-08 15:45:11 · 248 阅读 · 0 评论 -
Java面试:2021.05.07
1、讲一下分布式锁。分布式锁:当多个进程不在同一个系统中,用分布式锁控制多个进程对资源的访问。应用:高并发下争夺共享资源,比如秒杀对于库存这种共享资源需要用到分布式锁,如果不用分布式锁很可能造成超卖。1.1、有多个批处理任务,两台机器同时处理,如果不加任何控制的话,很有可能同一个批处理被两台机器分别处理一遍;如果使用分布式锁,在领取任务的时候,一个任务只会被一台机器领到,这样就不会造成任务的重复执行;1.2、再多思考一些,如果A/B两台机器,任务1被A机器领取到进行处理,在处理到一半的时原创 2021-05-08 10:12:51 · 204 阅读 · 0 评论 -
Java面试:5.06号
一、基础1、遍历map的方式?方法一 在for-each循环中使用entries来遍历Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println("Key = " + entry.getKey() + ", Value = " +原创 2021-05-07 09:25:50 · 382 阅读 · 0 评论