
java面试必知必会
文章平均质量分 96
java面试知识点
刘彦青-Yannis
这个作者很懒,什么都没留下…
展开
-
基于消息队列实现分布式事务
给予消息队列实现分布式事务场景:订单系统产生订单,购物车系统减购物车中的商。实现思路 :1. 订单系统在消息队列上开启一个事务(没有创建订单)。2. 订单系统给消息服务器发送一个“半消息”,这个半消息不是说消息内容不完整,它包含的内容就是完整的消息内容,半消息和普通消息的唯一区别是,在事务提交之前,对于消费者来说,这个消息是不可见的。3. 半消息发送成功后,订单系统就可以执行本地事...原创 2019-11-13 18:21:10 · 1897 阅读 · 0 评论 -
如何处理消息队列消费过程中的重复消息
在 MQTT 协议中,给出了三种传递消息时能够提供的服务质量标准,这三种服务质量从低到高依次是:At most once: 至多一次。消息在传递时,最多会被送达一次。换一个说法就是,没什么消息可靠性保证,允许丢消息。一般都是一些对消息可靠性要求不太高的监控场景使用,比如每分钟上报一次机房温度数据,可以接受数据少量丢失。At least once: 至少一次。消息在传递时,至少会被送达一次。也...原创 2020-02-25 17:29:30 · 1118 阅读 · 0 评论 -
消息队列如何保证消息不丢失
检测消息丢失布式链路追踪系统如果是 IT 基础设施比较完善的公司,一般都有分布式链路追踪系统,使用类似的追踪系统可以很方便地追踪每一条消息。利用消息队列的有序性来验证Producer端,我们给每个发出的消息附加一个连续递增的序号,然后在Consumer端来检查这个序号的连续性,连续则没有丢失,不连续则丢失,还能知道丢的是哪条消息。大多数消息队列的客户端都支持拦截器机制,你可以利用这...原创 2020-02-25 17:11:24 · 926 阅读 · 0 评论 -
SpringBoot的自动配置原理
一、SpringBoot的自动配置原理SpringBoot 的自动化配置让我们的开发彻底远离了 Spring 繁琐的各种配置,让我们专注于开发,但是SpringBoot 的自动化配置是怎么实现的呢?下面为你揭开 SpringBoot 自动化配置的神秘面纱。所以今天来讲讲SpringBoot是如何实现自动配置的~1.1三个重要的注解我们可以发现,在使用main()启动SpringBoot的时...原创 2020-02-25 13:47:31 · 1833 阅读 · 0 评论 -
常用的linux命令
终端:对服务器的管理,都是通过远程登录来进行,远程登录的常用软件有以下3款:xshell(没有mac版)puttysecureCRT (有mac版)推荐这些软件都是基于一种通信协议来进行远程登录:SSH协议(这种协议要求远程登录者进行身份验证有两种认证方式——“用户名+密码”机制<默认机制>,密钥机制<需要事先配置才有>)如...原创 2017-02-04 15:10:14 · 442 阅读 · 0 评论 -
反射
什么是反射反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。简而言之,通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。程序中一般的对象的类型都是在编译期就确定下来的,而Java反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们原创 2017-09-19 17:12:23 · 415 阅读 · 0 评论 -
HTTP协议
指服务器和客户端间进行通信时的约束和规范,客户端与服务端的数据交互并不是杂乱无章的,需要遵照(基于)一定的规范进行。常见协议 1、HTTP、HTTPS 超文本传输协议 2、FTP文件传输协议 3、SMTP简单邮件传输协议HTTP协议 即超文本传输协议,网站是基于HTTP协议的,例如网站的图片、CSS、JS等都是基于HTTP协议进行传输...原创 2018-04-16 11:09:35 · 346 阅读 · 0 评论 -
深入分析synchronized的实现原理
本文转载自公众号: Java技术驿站记得刚刚开始学习Java的时候,一遇到多线程情况就是synchronized。对于当时的我们来说,synchronized是如此的神奇且强大。我们赋予它一个名字“同步”,也成为我们解决多线程情况的良药,百试不爽。但是,随着学习的深入,我们知道synchronized是一个重量级锁,相对于Lock,它会显得那么笨重,以至于我们认为它不是那么的高效,并慢慢抛弃它。 ...转载 2018-07-09 15:22:20 · 226 阅读 · 0 评论 -
java实现分布式事务的三种方案
问题描述:用户支付完成会将支付状态及订单状态保存在订单数据库中,由订单服务去维护订单数据库。由库存服务去维护库存数据库的信息。下图是系统结构图:如何实现两个分布式服务(订单服务、库存服务)共同完成一件事即订单支付成功自动自动减库存,这里的关键是如何保证两个分布式服务的事务的一致性。尝试解决上边的需求,在订单服务中远程调用减库存接口,伪代码如下:订单支付结果通知方法{ 更新支付表中...原创 2019-10-20 23:51:20 · 32662 阅读 · 1 评论 -
数据结构与算法学习笔记—— 散列表(哈希表)(数据结构)
什么是散列表:散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。原理:散列表用的就是数组支持按照下标随机访问的时候时间复杂度是0(1)的特性。我们通过散列函数把元素的键值映射为下标,然后将数据存储在数组中对应下标的位置。当我们按照键值查询元素时,我们用同样的散列函数,将键值转化数组标标,从对应的数组...原创 2019-01-03 11:52:57 · 2326 阅读 · 0 评论 -
Java线程池ThreadPoolExecutor
创建对象仅仅在JVM的堆里为线程分配一块内存,而创建一个线程需要调用操作系统内核的API,然后操作系统要为线程分配一系列的资源。所以线程是一个重量级的对象,应该避免频繁的创建和销毁。线程池是一种生产者-消费者模式ThreadPoolExecutorThreadPoolExecutor的构造函数比较复杂,最完备的构造有7个参数。ThreadPoolExecutor( ...原创 2019-09-24 09:54:18 · 975 阅读 · 0 评论 -
java中的线程&创建线程的三种方式
java语言里的线程本质上就是操作系统的线程,他们是一 一对应的线程生命周期线程状态转换图—— 五态模型初始状态: 线程已经被创建,但是还没有分配CPU执行。 这个状态属于编程语言特有的,不过这里所谓的被创建,仅仅时在编程语言层面被创建,而在操作系统层面,真正的线程还没创建。可运行状态:初始状态线程执行start()方法,线程具备CPU的执行资格,没有CPU的执行权。 这种状...原创 2019-09-23 18:23:33 · 1102 阅读 · 0 评论 -
MySQL中的索引
InnoDB的索引模型B+树索引模型每个索引在innoDB里对应一颗B+树。根据椰子节点的内容,索引类型分为主键索引和非主键索引。主键索引和普通索引的查询区别?使用主键索引只需要搜索ID这颗B+树;普通索引需要先搜索普通索引树,得到对应的ID再到ID索引树搜索一次,这个过程称为回表。索引的维护B +树为了维护索引有序性,在插入新值的时候需要做必要的维护...原创 2019-10-31 15:51:30 · 352 阅读 · 1 评论