面试宝典
文章平均质量分 81
Java系类相关面试题汇总,包括java基础,javaWeb,java大数据等
常生果
技术达人、精通Java、大数据和机器视觉,爱好编程,喜欢创造!
邮箱:zhaohaiyang1988@aliyun.com
微信号:zhao1002298335
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【面试】面试官让我谈谈ThreadLocal的使用
首先是ThreadLocal能干啥的问题,我们知道解决多线程的并发问题,最常见的思想就是加锁,我们很轻易的就能想到Synchronized关键字,但是使用synchronized关键字加锁会导致程序的性能降低。synchronized主要使用时间换空间,侧重于多线程程序的同步性threadlocal主要是用空间换时间,侧重于线程之间的隔离并发场景下,会存在多个线程同时修改一个共享变量的场景。这就可能会出现。为了解决线性安全问题,可以用加锁的方式,比如使用或者Lock。但是加锁的方式,可能会导致系统变慢。原创 2024-11-08 00:14:03 · 1056 阅读 · 0 评论 -
【面试】考官问我如何实现分布式锁?
分布式锁是一种在分布式系统环境下,通过多个节点对共享资源进行访问控制的一种同步机制。它的主要目的是防止多个节点同时操作同一份数据,从而避免数据的不一致性。基于Mysql实现分布式锁,基于Zookeeper实现分布式锁,基于reids实现分布式锁。设计分布式锁的原则:1,加锁和释放锁必须是同一个客户端。2,互斥性,同一时刻只能有一个线程获得锁。3,可重入性,当一个线程获取锁后,还可以再次获取这个锁,避免死锁发生。4,高性能,要做到高并发、低延迟;5,高可用,当小部分节点挂掉后,仍然能够对外提供服务。原创 2024-11-07 22:41:37 · 1599 阅读 · 0 评论 -
【面试】考官问我如何实现分库分表?
当MySQL单表数据量过大,比如超过5千万条的时候,读写性能变得很差。而且常规的优化手段已经不起作用了,比如:SQL调优、添加索引、主从复制、读写分离。这时候就需要用到MySQL终极优化方案 — 分库分表。当数据库的QPS过高,数据库连接数不足的时候,就需要分库。当单表数据量过大,读写性能较差,就需要分表。当两者都有的时候,就需要分库分表。原创 2024-11-07 19:43:04 · 1145 阅读 · 0 评论 -
【面试】考官问我MySQL如何实现高并发电商订单ID
雪花算法(Snowflake)是一种生成全局唯一ID的分布式算法。它的主要功能是在分布式系统中生成一个全局唯一的ID,且ID是按照时间有序递增的。Snowflake算法使用一个64位的二进制数字作为ID。这64位long型ID被分割成四个部分:符号位、时间戳、工作机器ID、序列号。通过这几部分来表示不同的信息,将数据映射到具有特定结构的分布式系统中,实现数据的存储和查询。雪花算法广泛应用于分布式系统中的唯一ID生成。它可以保证在分布式环境中生成的ID是唯一且有序的。常见的应用场合包括订单号生成、分布式数据。原创 2024-11-07 13:01:51 · 709 阅读 · 0 评论 -
【面试】考官问我如何用 Redis 统计独立用户访问量?
Linear算法和位图类似,但实际使用的不多,这里不多做介绍了。本文要介绍的Redis HyperLogLog,从名字也可以看出来,Redis实现是基于HyperLogLog Counting(HLLC)算法的,HyperLogLog是LogLog算法的一个改进和优化,后面我们会一起讲解这两个算法,并学习HyperLogLog是如何在LogLog的基础上改进的。Redis HyperLoglog最多使用12k内存来进行基数统计,并且误差可以保持在0.81%左右。原创 2024-11-07 12:24:18 · 1440 阅读 · 0 评论 -
【面试】谈谈SpringBoot的@Import用法
SpringBoot自动装配,就是默认使用ImportSelector的方式加载META-INF/spring.factories中指定的配置类。导入 ImportBeanDefinitionRegistrar 实现类。导入 ImportSelector 实现类。一般用于加载配置文件中的类。,这个注解的作用:使用@import导入的类。,用于导入配置类或者需要被Spring。原创 2024-11-06 13:03:59 · 431 阅读 · 0 评论 -
【面试】Spring Boot 监视器
在 Spring Boot 中,监视器()是一个用于监控和管理应用程序的模块,提供了丰富的功能和端点(endpoints),可以帮助开发人员实时查看应用程序的运行状态、性能指标和健康状况,以及执行一些管理操作。监视器模块的主要目的是让开发人员更方便地监控和管理应用程序,帮助他们发现潜在问题、优化性能和提高可靠性。Spring Boot提供了自动配置模块用于支持 SpringBoot 应用的监控。Spring Boot Actuator模块提供了生产级别的功能,比如。原创 2024-11-06 12:13:59 · 527 阅读 · 0 评论 -
【面试】SpringBoot如何解决跨域
因为你同源策略原因,浏览器回组织不同域名的网络请求,SpringBoot解决跨域问题有很多种办法,WebMvcConfigurer和@CrossOrigin注解是最常用的解决办法。使用WebMvcConfigurer接口来添加全局的跨域配置。可以重写addCorsMappings方法来设置允许跨域的规则。使用 `@CrossOrigin` 注解,特定的控制器或方法上配置跨域原创 2024-11-05 19:36:29 · 419 阅读 · 0 评论 -
【面试】Redis中Bitmap、布隆过滤器和Hypeloglog区别
Redis中的Bitmap(位图)是一种较为特殊数据类型,它以最小单位bit来存储数据,我们知道一个字节由 8个 bit 组成,和传统数据结构用字节存储相比,这使得它在处理大量二值状态(true、false 或 0、1等只有两种状态)数据时具有极高的空间效率。不过,它不是一种全新的数据类型,其底层实现仍是基于 String 类型。HyperLogLog(HLL)和Bloom Filter(布隆过滤器)是两种常用于大规模数据处理的概率数据结构,它们用于解决不同的问题,并具有不同的特性和应用场景。原创 2024-11-05 17:23:07 · 1094 阅读 · 0 评论 -
【Redis】应用场景-统计访问次数(BitMap)
本文详细介绍了Redis中的位图操作,包括SETBIT用于设置二进制位,BITCOUNT统计位图中1的个数,BITPOS查找指定值的二进制位位置,以及BITFIELD在位图中存储和操作整数值。位图在内存管理和统计场景中具有高效性,BITFIELD提供了灵活的数据存储和计算选项。原创 2024-11-04 19:39:51 · 2012 阅读 · 0 评论 -
【面试】后端项目为何要使用Redis?
Redis是单进程模型,采用单线程架构,避免了多线程的竞争开销,适合高并发环境。10w/s的处理速度,DB理想状态是1w/s,DB数据落盘,磁盘是网络IO的性能主要影响之一,Redis主要是内存,响应速度是非常快。分布式锁、订阅发布/消息队列、事务等,都是它的辅助,完全可以由其他中间健代替,没有必要完全使用它,之所以使用Redis关键还是他的。的耗时操作要有进度提示,并且可以随时中止或取消,这样才能给用户最好的体验。pipline批处理,可以达到100w/s的理想速度。那么,经过周密的计算,一。原创 2024-11-04 12:56:08 · 476 阅读 · 0 评论 -
【面试】Redis6.0 之前为什么一直不使用多线程?
Redis 在 6.0 版本之前一直采用单线程架构,这是因为 Redis 主要是内存操作,单线程模型足以应对大部分高性能场景。而单线程模型的优势在于避免了多线程带来的上下文切换和锁的开销,使得 Redis 保持极高的性能和简单性。原创 2024-11-04 12:20:56 · 1335 阅读 · 0 评论 -
【面试】Redis 与 Memcached的区别
而Redis集群化采用的是每个节点维护一部分虚拟槽位,通过key的哈希计算,将key映射到具体的虚拟槽位上,这个槽位再映射到具体的Redis节点。缺点一旦某个请求处理耗时比较长,那么整个Redis就会阻塞住,直到这个请求处理完成后返回,才能处理下一个请求,使用Redis时一定要避免复杂的耗时操作。从支持的数据类型来讲,Redis的支持的数据类型比Memchaced的文本和二进行类型要丰富很多,它还支持List,Set,hash,Zset等多种数据类型。,主线程接收到请求后,分发给子线程处理。原创 2024-11-04 12:13:35 · 1073 阅读 · 0 评论 -
【面试】关于Redis的读写一致问题
在数据更新过程中,大家无非使用两种方法进行缓存和数据库的更新那这两种方法究竟有什么不同呢?原创 2024-11-02 22:58:56 · 389 阅读 · 0 评论 -
【面试】Redis和DB的读写一致性问
如果我们没有第二次删除操作,此时有请求访问数据,有可能是访问的之前未做修改的redis数据,删除操作执行后,redis为空,有请求进来时,便会去访问数据库,此时数据库中的数据已是更新后的数据,保证了数据的一致性。假象一下,如果没有第三步操作时,有很大概率,在两次删除redis操作执行完毕之后,数据库的数据还没有更新,此时若有请求访问数据,便会出现我们一开始提到的那个问题。先删除缓存,数据库还没有更新成功,此时如果读取缓存,缓存不存在,去数据库中读取到的是旧值,然后更新缓存,缓存不一致发生。原创 2024-11-02 12:26:22 · 792 阅读 · 0 评论 -
【面试】谈谈Spring AOP
SpringAOP是一种基于面向切面编程的框架,简化了代码中如日志记录、事务管理等横切关注点的实现。AOP由切面、连接点、切点和通知组成,通过切点表达式定义拦截规则。实现步骤包括添加依赖、定义切面和通知,以及配置切点。SpringAOP通过动态代理机制,如JDK或CGLIB,实现方法级别的拦截。原创 2024-10-16 14:12:12 · 995 阅读 · 0 评论 -
【面试】谈谈Spring-IOC的理解-什么是IOC/DI
有了IOC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。应用程序原本是老大,要获取什么资源都是主动出击,但是在IOC/DI思想中,应用程序就变成被动的了,被动的等待IOC容器来创建并注入它所需要的资源了。IOC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。IOC对编程带来的最大改变不是从代码上,而是从思想上,原创 2024-10-15 16:43:23 · 415 阅读 · 0 评论 -
【面试】八股文Java面试
1,springBoot自动注解。原创 2024-10-15 13:04:49 · 208 阅读 · 0 评论 -
【SpringBoot】SpringBoot自动装配原理
SpringBoot的自动来讲,我们之前在写ssm项目时候,配置了大量坐标和配置内容,搭环境的过程在项目开发中占据了大量时间,SpringBoot的最大的特点就是简化了各种xml配置内容,所以springboot的自动配置就是用注解来对一些常规的配置做默认配置,简化xml配置内容,使项目能够快速运行。这个类中有一个非常重要的方法——selectImports(),它几乎涵盖了组件自动装配的所有处理逻辑,包括获得候选配置类、配置类去重、排除不需要的配置类、过滤等,最终返回符合条件的自动配置类的全限定名数组。原创 2024-10-15 13:00:52 · 1779 阅读 · 0 评论 -
【面试】黑马程序员----银行调度系统
银行调度系统:一 需求分析:模拟实现银行业务调度系统逻辑,具体需求如下:银行内有6个业务窗口,1- 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、电话费之类业务的客户)。异步随机生成各种类型的客户,生成各类型用户的概率比例为:VIP客户 :普通客户 :快速客户 =原创 2016-07-08 14:18:14 · 400 阅读 · 0 评论 -
【面试】黑马程序员----交通管理系统
Java面试.移车辆的操作,要用到定时器,并每隔一秒检查该方向上灯是否为绿,是则在相应的时间内移除第一辆车,使用scheduleAtFixedRate方法。右拐弯的路线可不受灯的控制,但是为了让程序采用统一的处理方式,4.另外的八条线路是两两成对的,就可以归为4组,程序只需考虑图中标注了数字的4条路线的控制灯的切换顺序即可,c-->除了右拐弯方向的其他8条路线的灯,它们是两两成对的,可以归为4组,所以,在编程处理时,3.路要以灯为标准,判断是否灯是亮的,在灯亮的时间内,才能让车行驶,即移除路面上的第一辆车。原创 2016-07-08 14:16:32 · 750 阅读 · 0 评论 -
【面试】JavaWeb-Redis
当缓存失效时,不立即去load db,先使用如Redis的setnx去设置一个互斥锁,当操作成功返回时再进行load db的操作并回设缓存,否则重试get缓存的方法.单点登录(SSO,Single Sign On),是在企业内部多个应用系统(如考勤系统、财务系统、人事系统等)场景下,用户只需要登录一次,就可以访问多个应用系统。缓存击穿是给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮.简单来说就是,一次登录,全部登录!原创 2024-09-28 22:16:53 · 628 阅读 · 0 评论 -
【面试】Spring、SpringMVC、SpringBoot的区别是什么
用户对服务器发送请求,请求被前端控制器servlet DispatcherServlet(中央处理器)捕获,对请求URL进行解析,然后根据该URI,调用HandlerMapper(处理器映射器)获去该handler配置的所有相关的对象,然后根据获取的handler,选择一个合适的handlerAdapter(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…依赖注入让Spring的Bean之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的。原创 2024-10-11 23:12:31 · 3404 阅读 · 0 评论 -
App 即时通讯 SDK
1、网易云信 http://netease.im/ 2、环信 http://www.easemob.com/customer/im 3、融云 http://www.rongcloud.cn/ 4、极光IM https://www.jpush.cn/common/im/ 5、转载 2016-07-16 22:04:48 · 501 阅读 · 0 评论 -
代理服务器的原理
17.1 什么是代理服务器(Proxy) 以类似代理人的身份去取得用户所需要的数据就是了! 但是由于它的『代理』能力,使得我们可以透过代理服务器来达成防火墙功能与用户浏览数据的分析! 此外,也可以藉由代理服务器来达成节省带宽的目的,以及加快内部网络对因特网的 WWW 访问速度 17.1.1 什么是代理服务器 我们或许会帮转载 2017-07-28 15:37:19 · 1657 阅读 · 0 评论
分享