人工智能学习
Sigmoid Function
pytorch训练代码示例训练:
12345678910111213141516171819202122232425262728# 循环执行每个 epoch,进行多次训练迭代for epoch in range(n_epochs): # 将模型设置为训练模式,启用一些训练时的操作(如 dropout 和批量归一化)(此外还有评估模式) model.train() # 在每个 epoch 内遍历训练数据集 for x, y in tr_set: # 在每个训练迭代开始前,清空优化器中的梯度 optimizer.zero_grad() # 将输入数据 x 和标签 y 移动到指定的设备上(例如 GPU) x, y = x.to(device), y.to(device) # 前向传播:通过模型计算输入 x 的预测值 pred = model(x) # 计算损失函数: ...
jvm学习笔记
什么是jvm
jvm是一套规范,只要遵循了规范,可以自己进行jvm的实现,所以市面上的jvm的实现不止一个
程序计数器
虚拟机栈
垃圾回收只针对堆内存不针对栈内存
栈内存越大,递归层数可以越深,但线程数可能会减少
方法内局部变量没有逃离作用访问,则线程安全
栈帧过大或过多(一般是过多)会导致栈内存溢出
本地方法栈用于native标识的本地方法(非java语言编写)来运行
堆
使用事件监听机制实现跨模块调用
使用Spring事件监听机制实现跨模块调用最近一个项目,有两个模块,A模块需要依赖B模块,但现在B模块有地方需要调用A模块的方法,如果直接依赖,又会产生循环依赖问题。最终选择使用spring的事件监听来解决该问题。
思路就是,B模块去发布事件,A中监听,得到数据后,通过引用返回给B。
首先是定义事件
12345678910111213141516171819202122232425public class getUserInfoEvent extends ApplicationEvent { private String message; private Integer griddingId; private StringBuilder griddingName; public getUserInfoEvent(Object source, String message, Integer griddingId, StringBuilder griddingName) { super(source); this.me ...
Nacos
Nacos作为注册中心:Nacos 文档地址: https://nacos.io/zh-cn/docs/quick-start.html
1.首先需要下载nacos中间件(nacos-server)并启动
2.引入注册中心依赖后,在配置文件中配置Nacos Server地址与微服务应用名(即可将微服务注册到Nacos)
pom.xml:
1234<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
application.properties(后续会直接把该配置放在nacos中):
123spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 #nacos地址spring.application.name=service-provider #微服务 ...
Redis
Redis缓存更新策略
1.先删缓存再删数据库:可能发生线程1删除缓存后但是未更新数据库前,线程2去查询,导致从数据库中查询到旧数据,并且重新写入缓存。之后线程1才对数据库进行更新
2.先删数据库再删缓存:可能发生线程1去查询缓存的时候查不到,从而去数据库中查询到旧数据,然后此时线程2对数据库进行更新并删除缓存后,线程1又把旧数据写入缓存。但是可能性较小,因为写入缓存的时间远小于更新数据库的时间,所以一般情况下都只会是线程1把旧数据写入缓存后,线程2才更新数据库并且删除缓存。
缓存穿透缓存穿透是指在查询缓存中不存在的数据,每次请求都会直接查询数据库或其他存储介质,从而造成请求过多、资源浪费等问题。这种情况常出现在恶意攻击或误操作等场景中。
解决方案
布隆过滤器:在查询缓存前,使用布隆过滤器预先判断请求的键是否存在,从而减轻数据库压力。
布隆过滤器(Bloom Filter)是一种常用的碰撞检测数据结构,可以用来判断一个元素是否在集合中。它由一个位数组和多个哈希函数组成,其中位数组中的每个元素都只能取 0 或 1 两个值。
在使用布隆过滤器前,需要预先设置位数组的长度和哈希函数的个数 ...
nginx
http服务器,可以把前端工程放在上面,并且配置域名等,还可以配置反向代理,负载均衡,联通后端服务器
配置文件大概结构:
123456789101112131415161718192021222324252627282930313233343536373839404142434445#全局块#user nobody;worker_processes 1;#event块events { worker_connections 1024;}#http块http { #http全局块 include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream site { #服务器群 server 127.0.0.1:9999; server 127.0.0.1:8888; server 127.0.0.1:7779 ...
事务
事务是指一组操作,被视为一个单独的、不可分割的工作单元,它要么完全执行,要么完全不执行。事务主要是为了确保数据库操作的一致性和可靠性,可以避免由于并发操作而导致的数据不一致的问题。
在关系型数据库中,事务通常具有四个特性,也被称为ACID特性:
Atomicity(原子性):事务是一个不可分割的工作单元,要么全部执行成功,要么全部执行失败,不存在部分执行成功或失败的情况。
Consistency(一致性):事务执行前和执行后,数据库的状态必须保持一致。
Isolation(隔离性):事务的执行不能相互影响,一个事务的执行结果不能被其他事务看到,直到事务提交。
Durability(持久性):一旦事务提交,其执行结果就是永久性的,即使系统发生故障也不会丢失。
在Java中,事务可以通过使用Spring事务管理器来实现。使用Spring事务管理器,我们可以通过注解的方式将一个方法标记为事务性的,这样在执行该方法时,如果发生异常,则会回滚所有操作。在Spring中,使用@Transactional注解可以将一个方法标记为事务性的。同时,Spring还提供了多种事务传播属性和隔离级别的设置 ...
mybaitsplus分页插件原理
分页插件的原理:首先分页参数放到ThreadLocal中,拦截执行的sql,根据数据库类型添加对应的分页语句重写sq|,例如: (select * from table where a) 转换为 (select count(*) from table where a) 和 (select * from table where a limit )
计算出了total总条数、pageNum当前第几页、pageSize每页大小和当前页的数据,是否为首页,是否为尾页,总页数等。
gitee提交无贡献以及恢复历史提交贡献度解决方案
无贡献解决方案gitee提交的贡献度计算需要本地和远程的用户名&提交邮箱对应上,如果对应不上就无法计算贡献。
只需要在设置-邮箱管理把提交邮箱设置和本地相同即可。后面就能有贡献了
恢复历史提交贡献解决方案针对之前提交的,如果想恢复,有一下两步:
1.在项目目录下右键使用git bash here(确保安装了git),然后输入以下命令
12345678910111213141516git filter-branch -f --env-filter 'OLD_EMAIL="原来的邮箱"CORRECT_NAME="现在的名字"CORRECT_EMAIL="现在的邮箱"if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]then export GIT_COMMITTER_NAME="$CORRECT_NAME" export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL& ...
springcloud笔记
SpringCloud相关组件&对应大致功能记录EurekaEureka 是 Netflix 公司开源的一款服务发现框架,用于实现微服务架构中的服务注册与发现。它提供了一种简单的方式,让微服务应用可以自动地注册自己的信息(如 IP 地址、端口号、服务名称等),并通过 Eureka 服务器进行管理和发现。
在 Eureka 中,每一个微服务应用都可以作为一个服务实例,注册到 Eureka 服务器上。服务实例可以动态地进行注册、下线、心跳等操作,同时 Eureka 服务器也会自动地检查这些服务实例的状态,并提供服务发现的接口,让其他服务消费者能够轻松地发现和访问这些服务。
Eureka 的架构中包含两个核心组件:Eureka 服务器和 Eureka 客户端。Eureka 服务器负责管理所有的服务实例信息,而 Eureka 客户端则负责将自己注册到 Eureka 服务器上,并向服务器发送心跳包以保持自己的状态更新。
Eureka 的主要特点包括:
易于使用和扩展:Eureka 提供了简单的 RESTful API 接口,易于使用和扩展,可以与其他技术和框架结合使用。
高可用和可靠性 ...