homie 匹配 websocket 聊天部分
homie 匹配 websocket 聊天部分WebSocketConfig 与 HttpSessionConfig
WebSocketConfig 类:
这是一个 Spring 的配置类,通过 @Configuration 注解标记,用于配置 WebSocket 相关的 bean。
在该类中,通过 @Bean 注解创建了一个 ServerEndpointExporter 的 bean,用于注册 WebSocket endpoint。ServerEndpointExporter 是 Spring 提供的用于在 Spring 容器中注册 WebSocket endpoint 的类。
通过将 ServerEndpointExporter 注册为 bean,Spring 将会自动扫描并注册标有 @ServerEndpoint 注解的 WebSocket endpoint。这样就可以在应用中使用 WebSocket 了。
HttpSessionConfig 类:
这是一个用于配置 WebSocket 握手过程中 HttpSession 的类。
继承了 ServerEndpointCo ...
SQL 刷题
SQL 刷题1148. 文章浏览 IViews 表:
1234567891011+---------------+---------+| Column Name | Type |+---------------+---------+| article_id | int || author_id | int || viewer_id | int || view_date | date |+---------------+---------+此表可能会存在重复行。(换句话说,在 SQL 中这个表没有主键)此表的每一行都表示某人在某天浏览了某位作者的某篇文章。请注意,同一人的 author_id 和 viewer_id 是相同的。
请查询出所有浏览过自己文章的作者
结果按照 id 升序排列。
查询结果的格式如下所示:
示例 1:
123456789101112131415161718192021输入:Views 表:+------------+-----------+-----------+------------+| ...
homie匹配Axios+AOP实现全局登录拦截
homie匹配Axios+AOP实现全局登录拦截思路思路并不复杂,就是在执行每个Controller方法前执行getLoginUser方法判断登录用户是否是否为空,如果为空返回40100状态码,前端axios根据状态码跳转至登录页。因为在执行每个方法前都要执行getLoginUser方法(登录和注册接口除外),那么通过AOP实现是再方便不过了,并且强制用户在使用每个功能前要先登录。
代码实现LoginInterceptor(登录拦截器):
12345678910111213141516171819202122JAVA/** * 登录拦截 AOP */@Aspect@Componentpublic class LoginInterceptor { @Resource private UserService userService; @Before("execution(* com.hjj.homieMatching.controller.*.*(..)) && " + "!execution( ...
四种限流算法详细介绍及Java代码实现
四种限流算法详细介绍及Java代码实现前言在BI项目中接触和了解限流算法,目的是为了限制用户疯狂调用AI生成接口,但是当时学习时并不够系统和深入,基本都是跟着教程敲代码,于是有了这篇文章和大家介绍一下四种限流算法。
固定窗口限流将单位时间内作为一个时间窗口,同时维护一个计数器,记录次时间窗口内接收的请求次数。
当次数小于等于限流阈值,允许请求通过,并且计数器 +1
当次数大于限流阈值,不允许请求通过,计数器不变
当系统时间(当前时间)超过时间窗口,计数器重置为0并且开始记录新的窗口内接收的请求次数
缺陷:定义时间窗口为1s,允许请求数量为3(请求阈值),说明1s内只能接收并处理3个请求。然而如果0.80.9s来了三个请求,1.11.2s来了三个请求。虽然这6个请求都没超过各自窗口的请求阈值,但是已经违背了1s内接收并处理3个请求了,因为在不到1s内其接收了6个请求,存在临界问题。
优点:简单易实现
缺点:
有临界问题(流量突刺)
不适用于分布式系统
Java代码实现
12345678910111213141516171819202122232425262728293031323 ...
宝塔部署 Vue + Spring Boot + MySQL + Redis 项目保姆级教程
宝塔部署 Vue + Spring Boot + MySQL + Redis 项目保姆级教程最近做了一个厚米匹配的项目并且成功用宝塔部署上线了。因此写了这篇文章和大家分享、记录一下,希望对大家有所帮助,如果觉得有用的话,能给我点个赞嘛,多谢!
服务器安装宝塔不同的服务器操作系统对应着不同的安装命令。这里我用的是centos8.6,所以安装命令是
1yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
详情请看这篇博客:http://t.csdnimg.cn/NlPXj 注意安装宝塔面板时,服务器不要部署任何项目,最好是纯净状态。
部署项目前的宝塔前置配置安装tomcat再卸载tomcat安装tomcat是为了安装jdk1.8,卸载是因为Spring Boot内置了tomcat,所以它是一个安装jdk的跳板。如果你的项目不是jdk1.8可以点击Java环境管理选择你想要的jdk版本。
进入软件商店搜 ...
星球鱼友面经
星球鱼友面经杭州某会计事务小公司面经(https://articles.zsxq.com/id_whfodwecc0ix.html)
1.向量型数据库了解吗2.spring cloud 了解多少3.单体事务是如何保证的?介绍一下4.RBAC角色权限是怎么控制的?5.leftJoin、rightJoin、和自连接区别6.假如某些数据权限需要控制,比如某个数据库,某张表等,你如何设计7.前端怎么发网络请求的,axios8.异步,Promise,async await9.redis在你项目是怎么使用的?杭州某医疗公司Java面经1.你的开源项目的功能介绍一下我:阿巴阿巴,AIGC、向量型数据库、怎么调用接口,SSE、WebSocket等等。
2.介绍一下API开放平台的功能是怎么实现的,流程是什么?3.Spring Boot启动流程是什么?我:阿巴阿巴,常规八股文,我直接转化成自动配置原理,SpringBoot启动流程其实很长,有20几个小步骤,没必要全背下来。
4.Bean生命周期5.你的项目的Dubbo是怎么调用的?我:按实际的API项目如何引入Dubbo,调用即可,可以说下Dubbo协 ...
闲淘开发笔记
闲淘开发笔记前端开发前端初始化安装脚手架
1npm install -g @vue/cli
创建 vue 项目
1vue create xiantao-fronted
引入 arco design 组件库
1npm install --save-dev @arco-design/web-vue
在 main.ts 文件全部引入
12345678import { createApp } from 'vue'import ArcoVue from '@arco-design/web-vue';import App from './App.vue';import '@arco-design/web-vue/dist/arco.css';const app = createApp(App);app.use(ArcoVue);app.mount('#app');
页面开发帖子 / 用户推荐(搜索)页面
card 卡片组件
查看帖子页面
引入 Drawer ...
面试高频——10 道经典分布式面试题
主要介绍:分布式经典理论相关面试题。涉及领域:CAP基础理论、分布式事务、分布式ID、负载均衡、系统并发能力、微服务划分、限流算法等
1、什么是CAP、Base理论?CAP定理,指的是在一个分布式系统中,最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。(三选二)
C:一致性(Consistency),数据在多个副本中保持一致,可以理解成两个用户访问两个系统A和B,当A系统数据有变化时,及时同步给B系统,让两个用户看到的数据是一致的。
A:可用性(Availabiity),系统对外提供服务必须一直处于可用状态,在任何故障下,客户端都能在合理时间内获得服务端非错误的响应。
P:分区容错性\(Partition tolerance),在分布式系统中遇到任何网络分区故障,系统仍然能对外提供服务网络分区,可以这样理解,在分布式系统中,不同的节点分布在不同的子网络中,有可能子网络中只有一个节点,在所有网络正常的情况下,由于某些原因导致这些子节点之间的网络出现故障,导致整个节点环境被切分成了 ...
算法笔记
算法笔记数组和字符串搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5输出: 2示例 2:
输入: nums = [1,3,5,6], target = 2输出: 1示例 3:
输入: nums = [1,3,5,6], target = 7输出: 4
提示:
1 <= nums.length <= 104-104 <= nums[i] <= 104nums 为 无重复元素 的 升序 排列数组-104 <= target <= 104
思路1:将target与数组中每个元素进行比较,如果相等就返回对应下标。如果不相等则说明target不在数组中此时就要另外考虑,如果target比数组第一个元素小就返回0,比最后一个元素小就返 ...
JUC笔记
JUC 笔记
一.基础并发和并行并发:是在同一个实体上的多个事件,是在一台处理器上“同时”处理多个任务,同一时刻只有一个事件发生
并行:是在不同实体上的多个事件,是在多台处理器上同时处理多个任务,同一时刻,大家真的都在做事情
管程
管程(Monitor)Monitor 就是一种同步机制,他的义务是保证同一时间只有一个线程可以访问被保护的数据和代码
JVM 中同步是基于进入和退出监视器对象(管程对象)来实现的,每个对象实例都会有一个 Monitor 对象,底层是 C++ 实现的
用户线程和守护线程用户线程:是系统的工作线程,它会完成这个程序需要完成的业务操作
守护线程:是一种特殊的线程,为其他线程服务的,在后台默默地完成一些系统性的服务(垃圾回收线程就是最好的例子)。没有服务对象就没有必要继续运行了。(当系统只剩下守护线城时,JVM 就会自动退出)
线程的 daemon 属性:true 表示是守护线程,false 表示不是的
小总结:
如果用户线程全部结束意味着程序要完成的业务操作已经结束,守护进程随着 JVM 一起结束工作
setDaemon(true) 方法必须在 start 前设 ...