
Java面试
文章平均质量分 92
Java 全栈知识点问题汇总
毕设王同学
毕业设计、源码、论文、开发部署
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
订单超时自动取消的 3 种解决方案,yyds!
第三种方案,就是利用延时消息了,可以使用RocketMQ、RabbitMQ、Kafka的延时消息,消息发送后,有一定延时才会投递。大家对电商购物应该都比较熟悉了,我们应该注意到,在下单之后,通常会有一个倒计时,如果超过支付时间,订单就会被自动取消。我们用的就是这种,消息队列采用的是RocketMQ,其实RocketMQ延时也是利用定时任务实现的。使用延时消息的优点是比较高效、好扩展,缺点是引入了新的技术组件,增加了复杂度。对数据库的压力很大,定时任务造成人为的波峰,执行的时刻数据库的压力会陡增。原创 2023-02-23 08:15:00 · 1416 阅读 · 0 评论 -
面试加分项:JVM 锁优化和逃逸分析详解
这里的答案是不会,x + y + z 操作的优化「经过逃逸分析」过后,他的动态作用域被限制在了 concatStr方法内,就是说当前实际执行的 StringBuilder 的操作在 concatStr 方法内部,「其他的外部线程无法访问」到,所以这里「虽然有锁,但是可以被安全的消除掉。原则上,我们在写代码的时候,总是推荐将同步块的作用范围限制得尽可能的小--只在共享数据的实际操作作用域中才进行同步,这样也是为了使得需要同步的操作尽可能的变少,即使存在锁的竞争,等待的锁的线程也能很快的获取到锁。原创 2023-02-23 07:15:00 · 563 阅读 · 2 评论 -
Java面试系列-ElasticSearch
在查询中会有多种条件组合的查询,在ElasticSearch中叫复合查询。它提供了5种复合查询方式:bool query(布尔查询)通过布尔逻辑将较小的查询组合成较大的查询。boosting query(提高查询)不同于bool查询,bool查询中只要一个子查询条件不匹配那么搜索的数据就不会出现。而boosting query则是降低显示的权重/优先级(即score)。constant_score(固定分数查询)查询某个条件时,固定的返回指定的score;原创 2023-01-28 10:28:02 · 652 阅读 · 3 评论 -
Java面试系列-MongoDB
MongoDB是面向文档的NoSQL数据库,用于大量数据存储。MongoDB是一个在2000年代中期问世的数据库。属于NoSQL数据库的类别。以下是一些为什么应该开始使用MongoDB的原因面向文档的–由于MongoDB是NoSQL类型的数据库,它不是以关系类型的格式存储数据,而是将数据存储在文档中。这使得MongoDB非常灵活,可以适应实际的业务环境和需求。临时查询-MongoDB支持按字段,范围查询和正则表达式搜索。可以查询返回文档中的特定字段。索引。原创 2023-01-28 10:10:30 · 817 阅读 · 0 评论 -
Java面试系列-Redis
Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。读写性能优异Redis能读的速度是110000次/s,写的速度是81000次/s (测试条件见下一节)。数据类型丰富Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。原子性。原创 2023-01-24 08:45:00 · 794 阅读 · 1 评论 -
Java面试系列-MySQL
什么是B+Tree?B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具有 B Tree 的平衡性,并且通过顺序访问指针来提高区间查询的性能。在 B+ Tree 中,一个节点中的 key 从左到右非递减排列,如果某个指针的左右相邻 key 分别是 keyi 和 keyi+1,且不为 null,则该指针指向节点的所有 key 大于等于 keyi 且小于等于 keyi+1。为什么是B+Tree?为了减少磁盘读取次数,决定了树的高度不能高,所以必须是先B-Tree;原创 2023-01-24 07:00:00 · 125 阅读 · 0 评论 -
Java面试系列-数据库原理和SQL
事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。事务基本特性ACID?A原子性(atomicity)指的是一个事务中的操作要么全部成功,要么全部失败。C一致性(consistency)指的是数据库总是从一个一致性的状态转换到另外一个一致性的状态。比如A转账给B100块钱,假设中间sql执行过程中系统崩溃A也不会损失100块,因为事务没有提交,修改也就不会保存到数据库。I隔离性(isolation)原创 2023-01-23 08:30:00 · 185 阅读 · 0 评论 -
Java面试系列-数据结构和算法
消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,目前可以解密逆向的只有CRC32算法,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络上使用。消息摘要算法主要应用在“数字签名”领域,作为对明文的摘要算法。何谓数字签名?数字签名主要用到了非对称密钥加密技术与数字摘要技术。数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。原创 2023-01-23 08:00:00 · 407 阅读 · 0 评论 -
Java面试系列-Java 新版本
函数式编程面向对象编程是对数据进行抽象;函数式编程是对行为进行抽象。核心思想: 使用不可变值和函数,函数对一个值进行处理,映射成另一个值。Lambda表达式lambda表达式仅能放入如下代码: 预定义使用了 @Functional 注释的函数式接口,自带一个抽象函数的方法,或者SAM(Single Abstract Method 单个抽象方法)类型。这些称为lambda表达式的目标类型,可以用作返回类型,或lambda目标代码的参数。原创 2023-01-22 09:15:00 · 145 阅读 · 0 评论 -
Java面试系列-JVM和调优(下)
JVM 在进行 GC 时,并非每次都对堆内存(新生代、老年代;方法区)区域一起回收的,大部分时候回收的都是指新生代。针对 HotSpot VM 的实现,它里面的 GC 按照回收区域又分为两大类:部分收集(Partial GC),整堆收集(Full GC)部分收集:不是完整收集整个 Java 堆的垃圾收集。其中又分为:新生代收集(Minor GC/Young GC):只是新生代的垃圾收集老年代收集(Major GC/Old GC):只是老年代的垃圾收集。原创 2023-01-22 08:00:00 · 128 阅读 · 0 评论 -
Java面试系列-JVM和调优(上)
PC 寄存器用来存储指向下一条指令的地址,即将要执行的指令代码。由执行引擎读取下一条指令。PC寄存器为什么会被设定为线程私有的?多线程在一个特定的时间段内只会执行其中某一个线程方法,CPU会不停的做任务切换,这样必然会导致经常中断或恢复。为了能够准确的记录各个线程正在执行的当前字节码指令地址,所以为每个线程都分配了一个PC寄存器,每个线程都独立计算,不会互相影响。主管 Java 程序的运行,它保存方法的局部变量、部分结果,并参与方法的调用和返回。原创 2023-01-21 09:30:00 · 98 阅读 · 0 评论 -
Java面试系列-Java IO
阻塞IO 和 非阻塞IO这两个概念是程序级别的。主要描述的是程序请求操作系统IO操作后,如果IO资源没有准备好,那么程序该如何处理的问题: 前者等待;后者继续执行(并且使用线程一直轮询,直到有IO资源准备好了)同步IO 和 非同步IO这两个概念是操作系统级别的。主要描述的是操作系统在收到程序请求IO操作后,如果IO资源没有准备好,该如何响应程序的问题: 前者不响应,直到IO资源准备好以后;后者返回一个标记(好让程序和自己知道以后的数据往哪里通知),当IO资源准备好以后,再用事件机制返回给程序。原创 2023-01-21 09:00:00 · 164 阅读 · 0 评论 -
Java面试系列-Java 并发(下)
BlockingQueue 通常用于一个线程生产对象,而另外一个线程消费这些对象的场景。下图是对这个原理的阐述:一个线程往里边放,另外一个线程从里边取的一个 BlockingQueue。一个线程将会持续生产新对象并将其插入到队列之中,直到队列达到它所能容纳的临界点。也就是说,它是有限的。如果该阻塞队列到达了其临界点,负责生产的线程将会在往里边插入新对象时发生阻塞。它会一直处于阻塞之中,直到负责消费的线程从队列中拿走一个对象。负责消费的线程将会一直从该阻塞队列中拿出对象。原创 2023-01-20 08:30:00 · 332 阅读 · 0 评论 -
Java面试系列-Java 并发(中)
CAS的全称为Compare-And-Swap,直译就是对比交换。是一条CPU的原子指令,其作用是让CPU先进行比较两个值是否相等,然后原子地更新某个位置的值,经过调查发现,其实现方式是基于硬件平台的汇编指令,就是说CAS是靠硬件实现的,JVM只是封装了汇编调用,那些AtomicInteger类便是使用了这些封装后的接口。简单解释:CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下在旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。原创 2023-01-20 08:00:00 · 207 阅读 · 0 评论 -
Java面试系列-Java 并发(上)
Base和Son都有方法test(),但是这并不是一种覆盖,因为private所修饰的方法是隐式的final,也就是无法被继承,所以更不用说是覆盖了,在Son中的test()方法不过是属于Son的新成员罢了,Son进行向上转型得到father,但是father.test()是不可执行的,因为Base中的test方法是private的,无法被访问到。而final域变量b,根据重排序规则,会禁止final修饰的变量b重排序到构造函数之外,从而b能够正确赋值,线程B就能够读到final变量初始化后的值。原创 2023-01-19 09:30:00 · 190 阅读 · 0 评论 -
Java面试系列-Java 集合
我们都知道Java中内存是通过GC自动管理的,GC会在程序运行过程中自动判断哪些对象是可以被回收的,并在合适的时机进行内存释放。GC判断某个对象是否可被回收的依据是,是否有有效的引用指向该对象。如果没有有效引用指向该对象(基本意味着不存在访问该对象的方式),那么该对象就是可回收的。这里的有效引用并不包括弱引用。也就是说,虽然弱引用可以用来访问对象,但进行垃圾回收时弱引用并不会被考虑在内,仅有弱引用指向的对象仍然会被GC回收。原创 2023-01-19 09:00:00 · 80 阅读 · 0 评论 -
Java面试系列-Java 基础
Java基础部分,包括语法基础,泛型,注解,异常,反射和其它(如SPI机制等)。原创 2023-01-18 17:07:53 · 139 阅读 · 0 评论