编译原理
编译原理正则表达式 只运行使用字符、数字、下划线和连接符合 编译器(Compilers)与解释器(Interpreters) 编译器的重要功能就是将高级语言/程序转换为汇编代码 为啥会有这么多编程语言,为啥不能只选用一种,谁是好的语言? 重口难调 科学计算good fp good arrarys 并行处理,工程应用 另一个是商用 持久性 数据分析 好的数据报告 系统编程方面 非常底层的应用 控制这些资源的颗粒度 时间上的分配快速响应 为啥设计新语言? 时间成本等 我们需要更多的程序员快速掌握 一门语言越流行就越保守 同时也会产生新语言的诞生和兴起 例如php到java到golang c到c++ matlab到python 如果程序员发现通过一些金钱或者时间去选择一门新语言会让自己变的更有竞争力,他们会选择新的语言 编程语言会一直产生 只要有需求 例如java21才支持虚拟线程 golang自诞生起就支持 python作为新兴语言发 展非常迅猛 没有特别的衡量标准 用的人越多就是好的语言吗? 一门语言的流行肯定有他的独特性 好的语言他在空白领域拥有...
MPP
MPplus无侵入式的mp UserMapper继承BaseMapper 要指定实体类 常见注解MBplus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息 (约定大于配置) 不符合约定: @TableName: 用来指定表名 @TableId(value , type ): 用来指定表中的关键字段信息 @TableField(“‘转义字符’” , exist = false (不是数据库字段)): 用来指定表中的普通字段信息 未指定id默认为雪花算法 常见配置 核心功能条件构造器mbps支持各种复杂的where条件,可以满足日常开发的所有需求 [code] QueryWrapper wrapper = new QueryWrapper<>() .select(“id”,”username”,”info”,”balance”) .like(“username”,”o”) .ge(“balance”,1000); ...
RabbitMQ(DAY1)
RabbitMQ(DAY1)什么是消息队列?可以理解为一个存放消息的容器,当我们需要使用消息的时候,直接从容器里面拿出消息使用即可。队列Queue特点是先进先出,所以消费消息时也是先进先出的。 其中参与传递的双方叫做生产者 和消费者 这似乎很像操纵系统中的进程通讯,也是一种消息队列。我们这里提到的消息队列稍微有点区别,更多指的是各个服务以及系统内部的各个组件/模块之间的通信,属于一种中间件 。 中间件就是一类为应用软件服务的软件,应用软件是为用户服务的,用户不用接触或者使用到中间件 除了消息队列,常见的中间件有RPC框架、分布式组件、HTTP服务器、任务调度框架、配置中心、数据库层的分库分表工具和数据迁移工具。 为啥要用消息队列?使用消息队列给我们带来三大好处: 异步处理 A调用B 只需要监听B处理完成的消息,当b处理完后,会发一条消息给mq,mq再转发给A 削峰/限流 降低系统的耦合性 部署推荐用docker 性能损失其实很小 不像redis登录到rabbitmq端口是:15672
RabbitMQ(DAY2)
RabbitMQ(DAY2)数据隔离 对Virtual Hosts进行添加 使用java进行操作spring AMQP 导入依赖maven[code] org.springframework.boot spring-boot-starter-amqp[/code] 写publisherTests类[code] @Autowired private RabbitTemplate rabbitTemplate; @Test public void testSimpleQueue(){ String queueName = “simple.queue”; String message = “hello , rabbitmq!”; rabbitTemplate.convertAndSend(queueName,message); }[/code] 写ConsumerMqListener[code] @RabbitListen...
BeanUtils与mapstruct
BeanUtils与mapstructMapStruct和BeanUtils都是Java中常用的对象属性映射工具,但它们在使用方式和性能上有一些区别[code] @Mapperpublic interface CarMapper { @BeanMapping(resultType = CarDto.class, ignoreByDefault = true, mappingControl = MappingControl.FILTER) @Mapping(target = “color”, ignore = true) @Mapping(source = “model”, target = “modelName”) @Mapping(condition = “java(source.getAge() >= 18)”, target = “isAdult”) CarDto map(Car car);}[/code] 使用@Mappe...
傻瓜都会用的ssh连接(就用vscode)
傻瓜都会的ssh连接服务器用了很多SSH连接器,使用过github的remote ssh插件后爱不释手了。 原来是用来来连接本地的wsl2的,结果发现好像也可以进行ssh连接远程服务器,而且配置简单好用,文件上传下载都可以,多端支持。 首先我们去vs找到Remote ssh插件 找到左下角进行配置连接 连接到主机就可以了
IoC思想
IoCIoC(Inversion of control )控制反转/反转控制,是一种编程思想。 在传统的开发中,我们通常是在类A中手动通过new来创建一个B的对象出来 使用IoC思想:不通过new关键字来创建对象,而是通过IoC容器(例如spring框架)来帮助我们来实例化对象。我们需要什么对象,就去IoC容器里面取就行了 使用IoC思想进行开发,这使我们失去了管理、创建对象的权利,但是好处就是不用考虑这个对象是否未创建,符合“万物皆对象”的思想 为啥叫做控制反转? 控制:对象创建(实例化、管理)的权利 反转:控制权交于外部环境(IoC容器) 使用IoC对我们有什么帮助? 其思想就是使两方之间不要相互依赖,由第三方的容器来管理相关资源 1.对象之间的耦合度降低2.资源变的容易管理,使用spring容器提供的话很容易就可以实现一个单例 现有一个正对User的操作,利用Serviece和Dao两层结构进行开发 在没有使用IoC思想的情况下,Service层想使用Dao层的具体实现的话,需要通过new关键字在UserServerImpl中手动new出一个IUserDao...
Redis基本本应用(集群)
Redis学习(DAY3)持久化我们知道Redis是保存在内存中的,因为内存的特性,在机器断电之后,数据会消失,所以我们需要持久化,将数据备份到磁盘上。 两种方案:1、保存当前已经存储的数据 ;2、保存我们存放数据的所有过程 RDB 就是第一种方式[code] save– 注意上面这个命令是直接保存,会占用一定的时间,也可以单独开一个子进程后台执行保存bgsave– 后台执行[/code] 执行之后会生成一个dump.rdb文件,当重启服务器后,会自动加载内容到对应的数据库中 方便 如果数据库数据量较大,会花费大量的时间,我们可以每隔一段时间进行保存[code] save 300 10 # 300秒(5分钟)内有10个写入save 60 10000 # 60秒(1分钟)内有10000个写入[/code] AOF 以日志的方式将我们每次执行的命令都进行保存,服务器重启时按照命令依次执行。 我们可以自己来配置保存策略: always:每次执行写操作都会保存一次 everysec:每秒保存一次(默认配置),这样就算丢失数据也只会丢一秒以内的数据 no...
Redis基本本应用(全局唯一,互斥锁,分布式锁)
Redis基本应用(全局唯一,互斥锁,分布式锁)优惠券秒杀业务全局唯一ID每个店铺都可以发布优惠券,当用户抢购时,就会生成订单并保存到tb_voucher_order这个表里,而只使用数据库自增ID就存在一些问题: id规律性太明显 受单表数据量的限制 假设:随着业务不断扩大,mysql单表容量不得超过500w,数据量过大之后,我们要进行拆库拆表,但是拆表之后,他们从逻辑上来说是同一张表,所以他们的id是不能一样的(mysql的ID是自增的)我们要保证id的唯一性 全局ID生成器 (是否能用雪花算法呢?) 需要我们满足:唯一性,高可用,高性能,递增性,安全性 [code] package com.hmdp.utils;import org.springframework.data.redis.core.StringRedisTemplate;import javax.annotation.Resource;import java.time.LocalDateTime;import java.time.ZoneOffset;import java.time.format....
在调试过程中报了个javavm错误
在调试过程中报了个javavm错误 解决方法 在-ea后加上-Xshare:off
