RabbitMQ 八股文
什么是 RabbitMQ?其有什么特点?RabbitMQ 是一款开源的消息中间件,由 Erlang 语言开发,天生就适合分布式场景并能在分布式应用中传递消息。RabbitMQ 的显著特点如下:
消息传递模式:RabbitMQ 支持多种消息传递模式,如发布/订阅、点对点和工作队列等,使其更灵活适用于各种消息通信场景。
消息路由和交换机:RabbitMQ 引入交换机的概念,允许将消息根据内容、路由键等路由到一个或多个队列。
消息确认机制:RabbitMQ 支持消息确认机制,消费者可确认已成功处理的消息,确保消息在传递后不会被重复消费。
可扩展性:RabbitMQ 可通过添加节点和集群增加吞吐量和可用性。
多种编程语言支持:RabbitMQ 支持多种客户端库和插件,支持多种编程语言,如 Java、Python、Ruby、Node.js 等。
消息持久化:RabbitMQ 支持消息和队列持久化,确保消息在 RabbitMQ 重启后不会丢失。
灵活的插件系统:RabbitMQ 具有丰富的插件系统以便可以拓展功能,包括管理插件、数据复制插件、分布式部署插件等。
出色的 WEB 管理界面 ...
homie 匹配引入 GEO 实现搜索附近用户
前言鱼皮哥在直播中提出可以通过Redis GEO实现编辑距离和搜索附近用户功能,也算是是一个拓展点。这个项目我做完有一个多月了,最近在做其拓展功能顺便也把这个功能实现一波,整体的实现并不困难,学完 Redis 再看会更轻松(未学过也没事)。话不多说直接开始撸代码吧。
设计思路和流程
在 User(用户)表中添加两个字段 longitude(经度)和 dimension(维度),用以存储用户的经纬度坐标。因为Redis GEO 通过每个用户的经纬度坐标计算用户间的距离,同时其 Redis 数据类型为ZSET,ZSET 是一个有序的 List 类似 Java 的 SortedSet。在此场景 value 就是用户id,score 是经纬度信息( ZSET 根据 score值升序排序)。
1234567891011121314151617181920212223create table hjj.user( username varchar(256) null comment '用户昵称', id ...
homie 匹配项目笔记
homie 匹配系统笔记前端项目初始化
使用vite初始化项目,根据你的需求选择相应地选项
1npm create vite
安装依赖
1npm install
按需整合vant组件库
1npm i vite-plugin-style-import@1.4.1 -D
关闭vite语法检查(前提使用build启动项目),在package.json文件中,将原始的build改为build”: “vite build”
添加axios库
123npm install axios或者yarn add axios
引入vue-router组件,使用yarn add vue-router@4,如果报错请先删除node_modules和yarn.lock文件,再去执行命令
1yarn add vue-router@4
main.ts:
123456789101112131415161718192021222324252627282930313233import { createApp } from 'vue'import ...
聚合搜搜项目笔记
聚合搜索平台项目笔记项目介绍一个聚合搜索平台,可以让用户在同一个入口(同一个页面)集中搜索出不同来源、不同类型的内容用户:提升用户的检索效率、提升用户体验。企业:无需针对每一个项目都去开发一个搜索功能,当你有新的内容、新的网站时,可以复用同一套搜索系统,提升开发效率
技术栈前端
Vue
Ant Design Vue
Lodash
后端
Spring Boot
MySQL
ElasticSearch(Elastic Stack)搜索引擎
数据抓取
数据同步
4种
logstash
Canal
Guava Retrying
怎么保证API稳定性
业务流程
先得到各种不同分类的数据
提供一个搜索页面(单一搜索 + 聚合搜索),支持搜索
(可以做一些优化,比如关键词高亮,防抖节流)
直播安排第一期
前端、后端项目初始化
前端搜索页面开发完成
后端基本搜索接口开发完成
第二期
数据抓取
聚合搜索接口的开发
Elasticsearch 搭建及入门
第三期
Elasticsearch的使用(建表、读写数据、调 API、和 Java 整合)
数据同步(四种同步方式)
第 ...
宝塔部署灵犀 BI
安装宝塔、MySQL、Redis、nginx等可以看我之前写的 homie 配的安装步骤:https://www.yuque.com/yuqueyonghujneqfl/mdllyi/oorztzenfglow99q?singleDoc#
安装 RabbitMQ和安装 Redis 类似,进入宝塔的软件商店搜索 RabbiMQ,点击管理权限设置 MQ 的用户名和密码,同时 prod.yml 的 RabbitMQ 的用户名和密码和这个是一样的,另外别忘了在服务器和宝塔面板开放15672端口和5672端口
在浏览器访问 服务IP地址:15672 点击Admin的 Tab 栏,点击 Admin,点击 set permission,保证admin 角色有权限
注意:在服务器和宝塔面板开放MySQL(3306)、Redis(6379)、nginx(80)、RabbitMQ(15672、5672)等端口
前端部署修改 app.tsx 文件,添加线上地址
1234567891011121314151617181920212223242526272829303132333435363738394 ...
BI 项目笔记
智能BI笔记使用后端万用模板时的注意事项
更改pom文件的项目名name,包名com.hjj、工件名lingxibi和Spring Boot版本(包名要全局更改)
检查和更改项目的JDK版本
更改swagger接口文档的包扫描范围
更改yml文件的端口,项目名spring.application.name和数据库的信息,如url、username、password
更改Spring Boot启动类@MapperScan的包扫描路径
修改banner.txt文件
项目后端初始化注意事项
使用MyBatisX插件生成代码时,将生成的代码转移到对应的包中(原来包中已存在UserService、User等类根据需求去取舍user表中的字段和User类的变量)
将自增ID改为IdType.AUTO
12@TableId(value = "id", type = IdType.AUTO) private Long id;
后端启动项目端口冲突问题原因:Windows Hyper-V虚拟化平台占用了端口先使用:netsh interface ipv4 show ex ...
API 项目笔记
API笔记调用接口的几种方式
HttpClient
RestTemplate
第三方库(OKHTTP,hutool)
Hutool:https://loolly_admin.oschina.io/hutool-site/docs/#/
API签名认证电影院看电影,不可能所有人都可以看电影,只允许有电影票的人看电影。
本质:
签发签名
使用签名(校验签名)
为什么需要API签名认证?
保证安全性,不能随便任何一个人调用
怎么实现?参数1:accessKey:调用的标识userA,userB(复杂、无序、无规律)
参数2:secretKey:密钥(复杂、无序、无规律 【该参数不放在请求头中】)
(类似用户名和密码,区别:ak、sk是无状态)
千万不能把密钥直接放在服务端或者服务器之间传递,有可能会被拦截
加密方式:对称加密、非对称加密、md5加密(不可解密)
参数3:用户参数 + 密钥 + => 签名生成算法(MD5,HMac、Sha1) => 不可解密的值
参数4:sign
abc + abcdefg => dnjwkdhnwji
...
高频面试题
spring bean 的生命周期spring bean 的生命周期主要有5个过程。
实例化:Spring IOC 容器根据 bean 定义或 xml 文件创建 bean 实例,可以通过构造方法或者工厂方法实例化 bean。
属性赋值:spring ioc 容器将配置的属性值或者依赖注入到 bean 实例中,这个阶段也称为依赖注入。
初始化:在此阶段,bean 可以执行一些初始化操作,比如调用自定义的初始化方法。可以通过配置 init-method 属性或者实现 InitializingBean 接口来定义初始化方法。
使用:bean 被应用程序使用,执行业务逻辑
销毁:当容器关闭时,或者根据配置销毁 Bean 实例时,容器会调用 Bean 的销毁方法。可以通过配置 destroy-method 属性或者实现 DisposableBean 接口来定义销毁方法。
Spring IOC 的实现原理spring ioc 的实现原理依靠两个核心概念:BeanFactory 和 ApplicationContext。
BeanFactory:BeanFactory 是 Spring 框架的 ...
引入第三方组件实现滑动加载
项目背景在我的开源项目 homie 匹配(http://hm.hejiajun.icu/)的首页中就是利用的 vue-infinite-loading 组件实现的滑动加载,整体的引入和使用还是比较简单的,下面由我带大家快速上手吧。
快速上手官网:Configure Load Messages | Vue-infinite-loading
1.安装依赖:
1npm install v3-infinite-loading
2.在 main.ts 或者要用到的文件中全局引入,我是在用到的
1import InfiniteLoading from "v3-infinite-loading";
3.引入组件:
123<div style="display: flex; justify-content: center;"> <infinite-loading :identifier="infiniteId" @infinite="loadMore" v-if="!isMatchMod ...
React 笔记
一、React 基础1. 创建一个 react 项目1.利用 create-react-app 工具创建一个 react 项目
12npx create-react-app project-namenpm start # 启动项目
2.src 目录只保留 App.js 和 index.js 文件
3.精简 App.js 和 index.js 文件
1.1 src 目录下文件的作用index.js 是项目的入口,从这里开始运行,App 是根组件被 Index.js 导入,最后渲染到 index.html 中 root 节点上
index.js:
1234567891011121314// 项目的核心入口 从这里开始运行// React 必要的两个核心包import React from 'react';import ReactDOM from 'react-dom/client';// 导入项目的根组件import App from './App';// 把 App 根组件渲染到 id 为 root 的 dom 节点上cons ...