12 2022 档案

摘要:这个问题,面试被问到的概率还是很大的。以下关于 如何判断一个对象是否存活 的回答,完全参照《深入理解Java虚拟机》一书,有需要的可以看书学习。以下是题目解析 判断对象是否存活的算法包括: 引用计数算法 可达性分析算法 问题的回答就是通过引用计数算法或者可达性分析算法去判断一个对象是否存活,下面开始 阅读全文
posted @ 2022-12-30 23:28 kisshappyboy 阅读(55) 评论(0) 推荐(0) 编辑
摘要:据群友面试反馈,整理了3道MySQL面试题,对很多人可能是小菜一碟,对这些熟悉,有更好的理解的话,可以留言补充,不断完善我们的题库。 MySQL查询字段区不区分大小写? MySQL innodb的事务与日志的实现方式 MySQL binlog的几种日志录入格式以及区别 MySQL查询字段区不区分大小 阅读全文
posted @ 2022-12-30 23:11 kisshappyboy 阅读(52) 评论(0) 推荐(0) 编辑
摘要:单例模式介绍: 单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为。 比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单 阅读全文
posted @ 2022-12-30 22:47 kisshappyboy 阅读(59) 评论(0) 推荐(0) 编辑
摘要:同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别? 这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking I 阅读全文
posted @ 2022-12-30 22:36 kisshappyboy 阅读(51) 评论(0) 推荐(0) 编辑
摘要:一、消息队列的特性 业务无关,一个具有普适性质的消息队列组件不需要考虑上层的业务模型,只做好消息的分发就可以了,上层业务的不同模块反而需要依赖消息队列所定义的规范进行通信。 FIFO,先投递先到达的保证是一个消息队列和一个buffer的本质区别。 容灾,对于普适的消息队列组件来说,节点的动态增删和消 阅读全文
posted @ 2022-12-30 15:39 kisshappyboy 阅读(68) 评论(0) 推荐(0) 编辑
摘要:我们做后端开发工程师,主要工作就是:如何把一个接口设计好。所以,今天就给大家介绍,设计好接口的36个锦囊。 1. 接口参数校验 入参出参校验是每个程序员必备的基本素养。你设计的接口,必须先校验参数。比如入参是否允许为空,入参长度是否符合你的预期长度。这个要养成习惯哈,日常开发中,很多低级bug都是不 阅读全文
posted @ 2022-12-26 22:06 kisshappyboy 阅读(294) 评论(0) 推荐(0) 编辑
摘要:之前面试中被问到这个问题,当时不屑(会)回答,下来特意查了查,整理如下。 Java 中为我们提供了两种比较机制:Comparable 和 Comparator,二者都是用来实现对象的比较、排序。 下面分别对Comparable 和 Comparator做具体介绍并总结。 Comparable Com 阅读全文
posted @ 2022-12-21 21:28 kisshappyboy 阅读(43) 评论(0) 推荐(0) 编辑
摘要:关于怎么实现承载更多用户量的系统,一直是我重点关注的一个技术方向。改造架构提高承载力,通常来讲分为两个大方向,互相配合实现。 硬件架构改进,主要是使用阿里云这种多组件的云环境:通过负载均衡SLB,模版克隆的云服务器ECS,云数据库RDS,共享对象存储OSS等不同职责的云产品组合实现。 软件架构优化, 阅读全文
posted @ 2022-12-21 21:17 kisshappyboy 阅读(70) 评论(0) 推荐(0) 编辑
摘要:注:单点登录原理是一个重要知识点,也常被问及,很多童鞋照葫芦画瓢搭建过单点登录,但是被问到原理时可能说不出来,下面简单介绍,抛砖引玉,希望对大家有所帮助。 单点登录在现在的系统架构中广泛存在,他将多个子系统的认证体系打通,实现了一个入口多处使用,而在架构单点登录时,也会遇到一些小问题,在不同的应用环 阅读全文
posted @ 2022-12-21 21:13 kisshappyboy 阅读(44) 评论(0) 推荐(0) 编辑
摘要:在日常开发中,我们使用 Redis 存储 key 时通常会设置一个过期时间,但是 Redis 是怎么删除过期的 key,而且 Redis 是单线程的,删除 key 会不会造成阻塞。要搞清楚这些,就要了解 Redis 的过期策略和内存淘汰机制。 Redis采用的是定期删除 + 懒惰删除策略。 定期删除 阅读全文
posted @ 2022-12-21 21:01 kisshappyboy 阅读(155) 评论(0) 推荐(0) 编辑
摘要:创建线程有几种不同的方式?你喜欢哪一种?为什么? 有三种方式可以用来创建线程: 继承Thread类 实现Runnable接口 应用程序可以使用Executor框架来创建线程池 实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继 阅读全文
posted @ 2022-12-21 20:46 kisshappyboy 阅读(13) 评论(0) 推荐(0) 编辑
摘要:在Java编程语言中,最基本的结构就是两种,一种是数组,一种是模拟指针(引用),所有的数据结构都可以用这两个基本结构构造,HashMap也一样。 当程序试图将多个 key-value 放入 HashMap 中时, HashMap 采用一种所谓的“Hash 算法”来决定每个元素的存储位置。当程序执行 阅读全文
posted @ 2022-12-20 13:26 kisshappyboy 阅读(24) 评论(0) 推荐(0) 编辑
摘要:ArrayList 和 LinkedList 是 Java 集合框架中用来存储对象引用列表的两个类。ArrayList 和 LinkedList 都实现 List 接口。先对List做一个简单的了解: 列表(list)是元素的有序集合,也称为序列。它提供了基于元素位置的操作,有助于快速访问、添加和删 阅读全文
posted @ 2022-12-20 12:41 kisshappyboy 阅读(12) 评论(0) 推荐(0) 编辑
摘要:Java序列化与反序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: 序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文 阅读全文
posted @ 2022-12-20 12:21 kisshappyboy 阅读(61) 评论(0) 推荐(0) 编辑
摘要:Java虚拟机层面所暴露给我们的状态,与操作系统底层的线程状态是两个不同层面的事。具体而言,这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态: 什么是 RUNNABLE? 直接看它的 Javadoc 中的说明: 一个在 JVM 中执行的线程处于这一 阅读全文
posted @ 2022-12-20 11:51 kisshappyboy 阅读(24) 评论(0) 推荐(0) 编辑
摘要:我们都知道HashMap是线程不安全的,在多线程环境中不建议使用,但是其线程不安全主要体现在什么地方呢,本文将对该问题进行解密。 1.jdk1.7中的HashMap 在jdk1.8中对HashMap做了很多优化,这里先分析在jdk1.7中的问题,相信大家都知道在jdk1.7多线程环境下HashMap 阅读全文
posted @ 2022-12-20 11:18 kisshappyboy 阅读(54) 评论(0) 推荐(0) 编辑
摘要:注:单点登录原理是一个重要知识点,也常被问及,很多童鞋照葫芦画瓢搭建过单点登录,但是被问到原理时可能说不出来,下面简单介绍,抛砖引玉,希望对大家有所帮助。 单点登录在现在的系统架构中广泛存在,他将多个子系统的认证体系打通,实现了一个入口多处使用,而在架构单点登录时,也会遇到一些小问题,在不同的应用环 阅读全文
posted @ 2022-12-13 01:35 kisshappyboy 阅读(30) 评论(0) 推荐(0) 编辑
摘要:关于怎么实现承载更多用户量的系统,一直是我重点关注的一个技术方向。改造架构提高承载力,通常来讲分为两个大方向,互相配合实现。 硬件架构改进,主要是使用阿里云这种多组件的云环境:通过负载均衡SLB,模版克隆的云服务器ECS,云数据库RDS,共享对象存储OSS等不同职责的云产品组合实现。 软件架构优化, 阅读全文
posted @ 2022-12-13 01:25 kisshappyboy 阅读(58) 评论(0) 推荐(0) 编辑
摘要:1. 什么是缓存雪崩?怎么解决? 通常,我们会使用缓存用于缓冲对 DB 的冲击,如果缓存宕机,所有请求将直接打在 DB,造成 DB 宕机——从而导致整个系统宕机。 如何解决呢? 2 种策略(同时使用): 对缓存做高可用,防止缓存宕机 使用断路器,如果缓存宕机,为了防止系统全部宕机,限制部分流量进入 阅读全文
posted @ 2022-12-13 01:22 kisshappyboy 阅读(14) 评论(0) 推荐(0) 编辑
摘要:上一篇关于介绍Object类下的几种方法时面试题时,提到equals()和hashCode()方法可能引出关于“hashCode() 和 equals() 之间的关系?”的面试题,本篇来解析一下这道基础面试题。 先祭一张图,可以思考一下为什么? 介绍 equals() 的作用是用来判断两个对象是否相 阅读全文
posted @ 2022-12-13 01:16 kisshappyboy 阅读(34) 评论(0) 推荐(0) 编辑
摘要:1 类的加载机制 的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Ja 阅读全文
posted @ 2022-12-13 01:07 kisshappyboy 阅读(27) 评论(0) 推荐(0) 编辑
摘要:面试题 Object有几种方法呢? Java语言是一种单继承结构语言,Java中所有的类都有一个共同的祖先。这个祖先就是Object类。 如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类。 Object的方法我们在平时基本都会用到,但如果没有准备被忽然这么一问,还是有 阅读全文
posted @ 2022-12-12 22:51 kisshappyboy 阅读(30) 评论(0) 推荐(0) 编辑
摘要:分布式锁常见的三种实现方式: 数据库乐观锁; 基于Redis的分布式锁; 基于ZooKeeper的分布式锁。 本地面试考点是,你对Redis使用熟悉吗?Redis中是如何实现分布式锁的。 要点 Redis要实现分布式锁,以下条件应该得到满足 互斥性 在任意时刻,只有一个客户端能持有锁。 不能死锁 客 阅读全文
posted @ 2022-12-12 22:33 kisshappyboy 阅读(75) 评论(0) 推荐(0) 编辑
摘要:有些情况下,Spring事务会失效,比如我们在方法内部调用这个类的方法,那我们基于注解的Spring事务就会失效,因为我们在方法内使用的this 进行调用,而没有使用Spring提供的代理对象 还有我们使用异步处理时,由于Spring事务只存在于主线程中,我们采用异步的方式,是没办法用Spring事 阅读全文
posted @ 2022-12-12 22:21 kisshappyboy 阅读(94) 评论(0) 推荐(0) 编辑
摘要:此文对于部分原理的解释不全,甚至有错误。建议同时参考一文解决内存屏障阅读。 在只有双重检查锁,没有volatile的懒加载单例模式中,由于指令重排序的问题,我确实不会拿到两个不同的单例了,但我会拿到“半个”单例。 而发挥神奇作用的volatile,可以当之无愧的被称为Java并发编程中“出现频率最高 阅读全文
posted @ 2022-12-11 23:37 kisshappyboy 阅读(307) 评论(0) 推荐(0) 编辑
摘要:纠结单例模式有几种写法有用吗?有点用,面试中经常选择其中一种或几种写法作为话头,考查设计模式和coding style的同时,还很容易扩展到其他问题。 这里讲解几种笔者常用的写法,但切忌生搬硬套,去记“茴香豆的写法”。编程最大的乐趣在于“know everything, control everyt 阅读全文
posted @ 2022-12-11 23:22 kisshappyboy 阅读(20) 评论(0) 推荐(0) 编辑
摘要:问:如何保证消息的顺序性? 面试官心理分析 其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保证消息是有顺序的?这是生产系统中常见的问题。 面试题剖析 我举个例子,我们以前做过一个 mysql binlog 同步的系统,压力还是非常大的,日同步数据要达到上 阅读全文
posted @ 2022-12-11 22:32 kisshappyboy 阅读(87) 评论(0) 推荐(0) 编辑
摘要:问:分库分表之后,id 主键如何处理? 面试官心理分析 其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 开始累加,那肯定不对啊,需要一个全局唯一的 id 来支持。所以这都是你实际生产环境中必须考虑的问题。 面试题剖析 基于数据库的实现方案 数 阅读全文
posted @ 2022-12-10 23:55 kisshappyboy 阅读(56) 评论(0) 推荐(0) 编辑
摘要:问:如何决定使用 HashMap 还是 TreeMap? TreeMap<K,V>的Key值是要求实现java.lang.Comparable,所以迭代的时候TreeMap默认是按照Key值升序排序的;TreeMap的实现是基于红黑树结构。适用于按自然顺序或自定义顺序遍历键(key)。 HashMa 阅读全文
posted @ 2022-12-10 23:40 kisshappyboy 阅读(27) 评论(0) 推荐(0) 编辑
摘要:首先简单说一下(以下为一个回答的参考模板) 1、实例化一个Bean--也就是我们常说的new; 2、按照Spring上下文对实例化的Bean进行配置--也就是IOC注入; 3、如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,此处传递 阅读全文
posted @ 2022-12-10 23:18 kisshappyboy 阅读(18) 评论(0) 推荐(0) 编辑
摘要:工欲善其事,必先利其器;士欲宣其义,必先读其书。后台开发作为互联网技术领域的掌上明珠,一直都是开发者们的追逐的高峰。本文将从后台开发所涉及到的技术术语出发,基于系统开发、架构设计、网络通信等几个方面让大家对后台开发有一个清晰的了解,讲解全面易懂。 系统开发 1. 高内聚/低耦合 高内聚指一个软件模块 阅读全文
posted @ 2022-12-10 22:55 kisshappyboy 阅读(270) 评论(0) 推荐(0) 编辑
摘要:简单介绍 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring使你能够编写更干净、更可管理、并且更易于测试的代码。 Spring MVC是Spring的一个模块,一个web框架。通过Dispatcher Servlet, ModelAndView 和 View R 阅读全文
posted @ 2022-12-10 21:42 kisshappyboy 阅读(17) 评论(0) 推荐(0) 编辑
摘要:单机的elasticsearch做数据存储,必然面临两个问题:海量数据存储问题、单点故障问题。 海量数据存储问题:将索引库从逻辑上拆分为N个分片(shard),存储到多个节点 单点故障问题:将分片数据在不同节点备份(replica ) ES集群相关概念: 集群(cluster):一组拥有共同的 cl 阅读全文
posted @ 2022-12-09 23:38 kisshappyboy 阅读(162) 评论(0) 推荐(0) 编辑
摘要:elasticsearch中的酒店数据来自于mysql数据库,因此mysql数据发生改变时,elasticsearch也必须跟着改变,这个就是elasticsearch与mysql之间的数据同步。 1.思路分析 常见的数据同步方案有三种: 同步调用 异步通知 监听binlog 1.1.同步调用 方案 阅读全文
posted @ 2022-12-09 23:23 kisshappyboy 阅读(1594) 评论(0) 推荐(0) 编辑
摘要:当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项,如图: 这种根据用户输入的字母,提示完整词条的功能,就是自动补全了。 因为需要根据拼音字母来推断,因此要用到拼音分词功能。 1.拼音分词器 要实现根据字母做补全,就必须对文档按照拼音分词。在GitHub上恰好有elasticsearch的 阅读全文
posted @ 2022-12-09 23:06 kisshappyboy 阅读(271) 评论(0) 推荐(0) 编辑
摘要:1.聚合的种类 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现近实时搜索效果。 聚合 阅读全文
posted @ 2022-12-09 22:41 kisshappyboy 阅读(39) 评论(0) 推荐(0) 编辑
摘要:下面,我们通过黑马旅游的案例来实战演练下之前学习的知识。 我们实现四部分功能: 酒店搜索和分页 酒店结果过滤 我周边的酒店 酒店竞价排名 启动我们提供的hotel-demo项目,其默认端口是8089,访问http://localhost:8090,就能看到项目页面了: 1.酒店搜索和分页 案例需求: 阅读全文
posted @ 2022-12-09 00:11 kisshappyboy 阅读(239) 评论(0) 推荐(0) 编辑
摘要:文档的查询同样适用昨天学习的 RestHighLevelClient对象,基本步骤包括: 1)准备Request对象 2)准备请求参数 3)发起请求 4)解析响应 1.快速入门 我们以match_all查询为例 1.1.发起查询请求 代码解读: 第一步,创建SearchRequest对象,指定索引库 阅读全文
posted @ 2022-12-08 23:17 kisshappyboy 阅读(67) 评论(0) 推荐(0) 编辑
摘要:搜索的结果可以按照用户指定的方式去处理或展示。 1.排序 elasticsearch默认是根据相关度算分(_score)来排序,但是也支持自定义方式对搜索结果排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。 1.1.普通字段排序 keyword、数值、日期类型排序的 阅读全文
posted @ 2022-12-08 22:29 kisshappyboy 阅读(52) 评论(0) 推荐(0) 编辑
摘要:DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.DSL查询分类 查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: match_query mu 阅读全文
posted @ 2022-12-07 23:20 kisshappyboy 阅读(57) 评论(0) 推荐(0) 编辑
摘要:1.新增文档 我们要将数据库的酒店数据查询出来,写入elasticsearch中。 1.1.索引库实体类 数据库查询后的结果是一个Hotel类型的对象。结构如下: @Data @TableName("tb_hotel") public class Hotel { @TableId(type = Id 阅读全文
posted @ 2022-12-06 23:44 kisshappyboy 阅读(34) 评论(0) 推荐(0) 编辑
摘要:ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。官方文档地址:https://www.elastic.co/guide/en/elasticsearch/client/index.html 我们根据项目实际来进行分析 1.3.mapp 阅读全文
posted @ 2022-12-06 23:40 kisshappyboy 阅读(71) 评论(0) 推荐(0) 编辑
摘要:1.新增文档 语法: POST /索引库名/_doc/文档id { "字段1": "值1", "字段2": "值2", "字段3": { "子属性1": "值3", "子属性2": "值4" }, // ... } 示例: POST /heima/_doc/1 { "info": "黑马程序员Jav 阅读全文
posted @ 2022-12-06 23:21 kisshappyboy 阅读(110) 评论(0) 推荐(0) 编辑
摘要:索引库就类似数据库表,mapping映射就类似表的结构。 我们要向es中存储数据,必须先创建“库”和“表”。 1.mapping映射属性 mapping是对索引库中文档的约束,常见的mapping属性包括: type:字段数据类型,常见的简单类型有: 字符串:text(可分词的文本)、keyword 阅读全文
posted @ 2022-12-06 23:04 kisshappyboy 阅读(202) 评论(0) 推荐(0) 编辑
摘要:1.1 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 在打车软件搜索附近的车 1.2.ELK技术栈 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应 阅读全文
posted @ 2022-12-06 22:42 kisshappyboy 阅读(26) 评论(0) 推荐(0) 编辑
摘要:SpringAMQP是基于RabbitMQ封装的一套模板,并且还利用SpringBoot对其实现了自动装配,使用起来非常方便。 SpringAmqp的官方地址:https://spring.io/projects/spring-amqp SpringAMQP提供了三个功能: 自动声明队列、交换机及其 阅读全文
posted @ 2022-12-05 23:39 kisshappyboy 阅读(72) 评论(0) 推荐(0) 编辑
摘要:初识MQ 1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同时通话。发送邮件可以同时与多个人收发邮件,但是往往响应会有延迟。 1.1.同步通讯 我们之前 阅读全文
posted @ 2022-12-05 22:56 kisshappyboy 阅读(76) 评论(0) 推荐(0) 编辑
摘要:Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。 1. 阅读全文
posted @ 2022-12-04 23:44 kisshappyboy 阅读(75) 评论(0) 推荐(0) 编辑
摘要:先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: •代码可读性差,编程体验不统一 •参数复杂URL难以维护 Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign 其作用就是帮助我们优雅的实现http请求 阅读全文
posted @ 2022-12-04 23:22 kisshappyboy 阅读(35) 评论(0) 推荐(0) 编辑
摘要:Nacos除了可以做注册中心,同样可以做配置管理来使用。 1.统一配置管理 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。 Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微 阅读全文
posted @ 2022-12-04 22:57 kisshappyboy 阅读(102) 评论(0) 推荐(0) 编辑
摘要:国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。 认识和安装Nacos(安装略过) Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。 2.服务注册到na 阅读全文
posted @ 2022-12-04 22:31 kisshappyboy 阅读(82) 评论(0) 推荐(0) 编辑
摘要:我们在 restTemplate方法上添加了@LoadBalanced注解,即可实现负载均衡功能,这是什么原理呢? 1.负载均衡原理 SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。 那么我们发出的请求明明是http://userservice/user/1, 阅读全文
posted @ 2022-12-04 22:08 kisshappyboy 阅读(32) 评论(0) 推荐(0) 编辑
摘要:假如我们的服务提供者user-service部署了多个实例,如图 大家思考几个问题: order-service在发起远程调用的时候,该如何得知user-service实例的ip地址和端口? 有多个user-service实例地址,order-service调用时该如何选择? order-servi 阅读全文
posted @ 2022-12-04 21:47 kisshappyboy 阅读(63) 评论(0) 推荐(0) 编辑
摘要:任何分布式架构都离不开服务的拆分,微服务也是一样。 1.服务拆分原则 这里我总结了微服务拆分时的几个原则: 不同微服务,不要重复开发相同业务 微服务数据独立,不要访问其它微服务的数据库 微服务可以将自己的业务暴露为接口,供其它微服务调用 2.服务拆分示例 cloud-demo:父工程,管理依赖 or 阅读全文
posted @ 2022-12-04 21:30 kisshappyboy 阅读(30) 评论(0) 推荐(0) 编辑
摘要:随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 单体架构的优缺点如下: 优点: 架构简单 部署成本低 缺点: 耦合度高(维护困难、升级困难) 1.2.分布式架构 分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为 阅读全文
posted @ 2022-12-04 21:07 kisshappyboy 阅读(36) 评论(0) 推荐(0) 编辑
摘要:作为程序员我们应怎样理解docker? 容器技术的起源 假设你们公司正在秘密研发下一个“今日头条”APP,我们姑且称为明日头条,程序员自己从头到尾搭建了一套环境开始写代码,写完代码后程序员要把代码交给测试同学测试,这时测试同学开始从头到尾搭建这套环境,测试过程中出现问题程序员也不用担心,大可以一脸无 阅读全文
posted @ 2022-12-03 22:05 kisshappyboy 阅读(49) 评论(0) 推荐(0) 编辑
摘要:Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道。 官方网站上有各种环境下的 安装指南(https://docs.d 阅读全文
posted @ 2022-12-03 21:42 kisshappyboy 阅读(14) 评论(0) 推荐(0) 编辑
摘要:Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器! 1.初识DockerCompose Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。格式如下: version: "3.8" services: mysql: 阅读全文
posted @ 2022-12-03 21:37 kisshappyboy 阅读(51) 评论(0) 推荐(0) 编辑
摘要:常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。 而要自定义镜像,就必须先了解镜像的结构才行。 1.镜像结构 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。 我们以MySQL为例,来看看镜像的组成结构: 简单来说,镜像就是在系统函数库、运行环境基础 阅读全文
posted @ 2022-12-03 21:26 kisshappyboy 阅读(36) 评论(0) 推荐(0) 编辑
摘要:1.1.镜像名称 首先来看下镜像的名称组成: 镜名称一般分两部分组成:[repository]:[tag]。 在没有指定tag时,默认是latest,代表最新版本的镜像 这里的mysql就是repository,5.7就是tag,合一起就是镜像名称,代表5.7版本的MySQL镜像。 1.2.镜像命令 阅读全文
posted @ 2022-12-03 21:02 kisshappyboy 阅读(23) 评论(0) 推荐(0) 编辑
摘要:什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题 大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题: 依赖关系复杂, 阅读全文
posted @ 2022-12-03 20:31 kisshappyboy 阅读(20) 评论(0) 推荐(0) 编辑
摘要:当我们关注了用户后,这个用户发了动态,那么我们应该把这些数据推送给用户,这个需求,其实我们又把他叫做Feed流,关注推送也叫做Feed流,直译为投喂。为用户持续的提供“沉浸式”的体验,通过无限下拉刷新获取新的信息。 对于传统的模式的内容解锁:我们是需要用户去通过搜索引擎或者是其他的方式去解锁想要看的 阅读全文
posted @ 2022-12-02 23:21 kisshappyboy 阅读(259) 评论(0) 推荐(0) 编辑
摘要:针对用户的操作:可以对用户进行关注和取消关注功能。 实现思路: 需求:基于该表数据结构,实现两个接口: 关注和取关接口 判断是否关注的接口 FollowService 取消关注service @Override public Result isFollow(Long followUserId) { 阅读全文
posted @ 2022-12-02 22:39 kisshappyboy 阅读(215) 评论(0) 推荐(0) 编辑
摘要:初始代码 @GetMapping("/likes/{id}") public Result queryBlogLikes(@PathVariable("id") Long id) { //修改点赞数量 blogService.update().setSql("liked = liked +1 "). 阅读全文
posted @ 2022-12-02 22:00 kisshappyboy 阅读(214) 评论(0) 推荐(0) 编辑
摘要:需求: 创建一个Stream类型的消息队列,名为stream.orders 修改之前的秒杀下单Lua脚本,在认定有抢购资格后,直接向stream.orders中添加消息,内容包含voucherId、userId、orderId 项目启动时,开启一个线程任务,尝试获取stream.orders中的消息 阅读全文
posted @ 2022-12-01 23:51 kisshappyboy 阅读(379) 评论(0) 推荐(0) 编辑
摘要:什么是消息队列:字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色: 消息队列:存储和管理消息,也被称为消息代理(Message Broker) 生产者:发送消息到消息队列 消费者:从消息队列获取消息并处理消息 使用队列的好处在于 解耦:所谓解耦,举一个生活中的例子就是:快递员(生产者)把 阅读全文
posted @ 2022-12-01 23:27 kisshappyboy 阅读(195) 评论(0) 推荐(0) 编辑
摘要:当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分成如下几个步骤 1、查询优惠卷 2、判断秒杀库存是否足够 3、查询订单 4、校验是否是一人一单 5、扣减库存 6、创建订单 在这六步操作中,又有很多操作是要去操作数据库的,而且还是一个线程 阅读全文
posted @ 2022-12-01 23:08 kisshappyboy 阅读(173) 评论(0) 推荐(0) 编辑
摘要:为了提高redis的可用性,我们会搭建集群或者主从,现在以主从为例 此时我们去写命令,写在主机上, 主机会将数据同步给从机,但是假设在主机还没有来得及把数据写入到从机去的时候,此时主机宕机,哨兵会发现主机宕机,并且选举一个slave变成master,而此时新的master中实际上并没有锁信息,此时锁 阅读全文
posted @ 2022-12-01 15:09 kisshappyboy 阅读(608) 评论(0) 推荐(0) 编辑
摘要:抢锁过程中,获得当前线程,通过tryAcquire进行抢锁,该抢锁逻辑和之前逻辑相同 1、先判断当前这把锁是否存在,如果不存在,插入一把锁,返回null 2、判断当前这把锁是否是属于当前线程,如果是,则返回null 所以如果返回是null,则代表着当前这哥们已经抢锁完毕,或者可重入完毕,但是如果以上 阅读全文
posted @ 2022-12-01 14:37 kisshappyboy 阅读(1005) 评论(0) 推荐(0) 编辑
摘要:在Lock锁中,他是借助于底层的一个voaltile的一个state变量来记录重入的状态的,比如当前没有人持有这把锁,那么state=0,假如有人持有这把锁,那么state=1,如果持有这把锁的人再次持有这把锁,那么state就会+1 ,如果是对于synchronized而言,他在c语言代码中会有一 阅读全文
posted @ 2022-12-01 11:46 kisshappyboy 阅读(900) 评论(0) 推荐(1) 编辑
摘要:之前的redis分布式锁已经结束了,实际上还有有些问题, 基于setnx实现的分布式锁存在下面的问题: 重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方 阅读全文
posted @ 2022-12-01 11:42 kisshappyboy 阅读(245) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示