- 博客(47)
- 收藏
- 关注
原创 智耕 - 项目展示
如果是直接查询呢?设备每个分区3s回传一次数据一个设备有三个分区一分钟需要回传 3 * 20 = 60次一个小时 回传 60*60 = 3600次一天回传 3600 * 24 = 86400次我如果想计算以天为单位的气温数据,需要聚合8w条数据进行优化一分钟60次,记录60分钟的数据一小时 对 60分钟的数据进行统计,一共60个一天 对24小时的数据进行统计,一共24个在一天的数据量8640条数据中 按每小时进行聚合统计,是一个很大的开销,但是可以接受执行耗时3s查看操作行数。
2024-10-15 08:46:14
877
原创 农业-百万数据利用 临时表 将AVG速度提升80%
设备每个分区3s回传一次数据一个设备有三个分区一分钟需要回传 3 * 20 = 60次一个小时 回传 60*60 = 360次一天回传 360 * 24 = 8640次。
2024-04-25 11:07:19
1417
原创 aqs 条件队列和同步队列、独占模式和共享模式
/ 通知消费者缓冲区有数据了。// 等待,直到缓冲区不为空。// 通知生产者缓冲区不满了。// 等待,直到缓冲区不满。将消费者放入同步阻塞队列。将生产者放入同步阻塞队列。
2024-04-24 19:19:07
238
原创 TransmittableThreadLocal 测试
2. 线程池内的线程脏读 (读取了上一个threadlocal保存的值)1. thradlocal传入线程池。
2024-04-21 14:53:05
234
原创 如何从线程池中取线程,运行代码
addWorker()中会创建Worker类的实例,该实例对线程池中的线程进行了包装,其实现了Runnable接口,Worker实例创建成功后会调用线程的start()方法;在Worker的run方法中通过runTask()方法执行任务,并循环通过getTask()方法获取队列中等待的任务去执行。当调用ThreadPoolExecutor的execute()方法时,会调用addWorker()方法;调用t.start这样worker中的线程就会被唤醒不断的执行run方法。
2024-04-16 14:47:58
290
原创 线程数设置为多少比较合适
但是最关键的是,现在的方法普遍不能以IO、cpu来区分,往往都是综合形势的。压测的目标,cpu负载在70%左右,看看哪种线程池配置性能最高。这个方法 综合考虑了 cpu、io密集型的情况。但是要想真正设计出好用的线程池 还是需要做压测。所以美团提供了一种可以计算线程数的方法。如果是CPU密集型 设置为N+1。如果是IO密集型 设置为2N+1。
2024-04-15 14:58:35
212
原创 场景:如何做数据清理
2. 这个子查询还检查这些行的`gmt_create`日期是否早于当前日期(`CURDATE()`)减去300天(`SUBDATE(CURDATE(),INTERVAL 300 DAY)`)。总结一下,这个SQL查询检查在`table_hollis`表中`id`介于100到100000之间的记录中,是否存在至少一个其`gmt_create`日期小于当前日期300天的记录。如果不存在,它什么也不选择。这个SQL查询的目的是从名为`table_hollis`的表中选择`id`,但它有一个特定的条件。
2024-04-13 15:02:04
248
原创 场景:sql调优
大厂现在不希望使用多表join,传统的多表join使用嵌套循环来做匹配、时间复杂度n方 n三次方。使用函数(有函数列)、做运算、最左前缀、使用or。mysql8.0可以使用hashjoin。可以强制sql语句选择走某个索引。4. 锁竞争导致的等待。sql调优有多种方案。
2024-04-12 20:24:20
114
原创 场景:一个订单在11:00超时关闭,但在11:00支付成功
定时任务不断去轮询订单表,查看退款失败的订单,进行再次退款。即便是退款的时候也要考虑到退款失败的问题。支付金额-退款金额 = 0才是合理的状态。订单关闭失败,支付成功(不合理的)使用乐观锁,更新的时候查看订单状态。订单支付成功,关闭失败(合理的)如果订单状态不对,进行退款流程。主要思考第二种情况如何解决。在订单表中增加更多配置。
2024-04-12 19:37:36
371
原创 RPC还是HTTP
原因是HTTP协议会带着一堆无用信息。RPC是一个远程调用的通讯协议。RPC支持更多轻量级的通讯协议。这三部分只有请求体是需要的。RPC要比HTTP快一些。HTTP由三部分组成。
2024-04-09 21:08:32
502
原创 场景:数据库死锁
transno索引是前缀索引id 是聚簇索引当ab事务操作transno的前缀为相同时,会造成锁冲突事务a 锁住id = 1事务b 锁住id = 2事务a 锁住transno = 3,请求id = 2 失败此时id = 2 被b线程占有事务b 请求 transno = 3 失败此时 transno 被线程a占有此时ab事务死锁了a线程占有 id1、transno3 请求id2。
2024-04-09 19:09:12
251
原创 RabbitMQ理解
1. 简单模式生产者 -> 消费者2. 工作队列模式生产者 -> 多个消费者消息 -> 一次消费3. 发布订阅模式生产者 -> 多个消费者消息 -> 多次消费4. 路由模式生产者 -> exchange -> 多个消费者消息 -> 多次消费5. 主题模式生产者 -> exchange -> 多个消费者消息 -> 多次消费相当于特殊的路由模式,可以通过 * 来进行主题订阅:这意味着当一个消息被发送到交换机,并且它匹配了特定的路由键时,所有绑定了这个路由键的队列都会接收到这个消息。
2024-04-02 15:26:20
388
原创 AQS抽象的队列同步器
整体就是一个FIFO的链式队列AQS的stat表示当前资源的状态AQS的内部维护了一个内部类Nodewaitstatus的状态表示。
2023-10-23 11:51:23
93
原创 synchronized锁升级的原因
如果成功,当前线程获得锁,如果失败,表示Mark Word已经被替换成了其他线程的锁记录,说明在与其它线程竞争锁,当前线程就尝试使用自旋来获取锁。当线程执行到monitor enter指令时,会尝试获取对象所对应的Monitor所有权,如果获取到了,即获取到了锁,会在Monitor的owner中存放当前线程的id,这样它将处于锁定状态,除非退出同步块,否则其他线程无法获取到这个Monitor。如果在接下来的运行过程中,该锁没有被其他的线程访问,则持有偏向锁的线程将永远不需要触发同步。
2023-10-23 09:17:27
120
原创 记录一个问题npm run dev卡住
每次都无法运行甚至重启都没办法解决问题。template标签下必须存在一个标签。出现这个问题的原因是。将1放入div就好了。
2023-10-09 09:52:45
379
原创 JVM上篇架构模型,内存与垃圾回收篇
1. 先通过类加载器对类进行加载,之后在进行连接,最后在进行初始化2. 从左到右分别是方法区、堆、栈帧、线程PC计数器、本地方法栈3. 执行引擎从左到右依次是 解释器 JIT编译器 垃圾回收器4. 本地方法接口和本地方法库附上全图。
2023-09-26 11:28:57
114
1
原创 ssl-job机器地址为空,无法进行自动绑定
在进行debug启动 看看具体出现了什么问题。今天写微服务项目的时候遇到了一个bug。出现了这个错误可以debug去追一下。然后发现9999端口已经被占用。将占用9999端口的应用终止掉。执行器设置的端口是9999。执行器端口9999发生了报错。发现对9999端口进行绑定。同时无法获取执行器地址。
2023-09-23 15:49:02
109
1
原创 微服务使用feign对其他为微服务进行调用
1. 设置FeignClientvalue 指定需要调用的微服务fallback 指定熔断机制2. 设置PostMappingPostMapping 指定调取feign的路径。
2023-09-20 16:17:56
176
1
原创 Zookeeper 入门
其实和nacos差不多1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。2)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所 以Zookeeper适合安装奇数台服务器。3)全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。4)更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。5)数据更新原子性,一次数据更新要么成功,要么失败。
2023-08-07 09:07:34
77
1
原创 SpringCloud入门
文档操作有哪些?创建文档:POST /{索引库名}/_doc/文档id { json文档 }查询文档:GET /{索引库名}/_doc/文档id删除文档:DELETE /{索引库名}/_doc/文档id修改文档:全量修改:PUT /{索引库名}/_doc/文档id { json文档 }增量修改:POST /{索引库名}/_update/文档id { "doc": {字段}}
2023-08-01 14:09:08
312
1
原创 RabbitMQ入门
1.流量消峰 举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正 常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限 制订单超过一万后不允许用户下单。使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分 散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体 验要好。2.应用解耦 以电商应用为例,应用中有订单系统、库存系统、物流系统、支付系统。
2023-07-27 14:15:15
84
1
原创 Nginx浏览器缓存
(1)用户首次通过浏览器发送请求到服务端获取数据,客户端是没有对 应的缓存,所以需要发送request请求来获取数据;成本最低的一种缓存实现 减少网络带宽消耗 降低服务器压力 减少网络延迟,加快页面打开速度 1 2 3 4(2)服务端接收到请求后,获取服务端的数据及服务端缓存的允许后, 返回200的成功状态码并且在响应头上附上对应资源以及缓存信息;(3)当用户再次访问相同资源的时候,客户端会在浏览器的缓存目录中 查找是否存在响应的缓存文件 (4)如果没有找到对应的缓存文件,则走(2)步。
2023-07-16 12:21:47
118
1
原创 Vue组件操作
混合就是复用配置,将Vue组件中共有的配置抽离出来,如果有组件需要使用配置,将混入引入就可以了使用方法:先引入再注册局部混合mixins:[a]全局混合。
2023-06-21 19:15:58
70
原创 Vue之脚手架
1. 脚手架搭建技术(如Vue-CLI、Create React App等)2. 脚手架管理工具(如Npm、Yarn等)3. 前端框架(如Vue、React、Angular等)4. CSS 预处理器(如Sass、Less等)5. JS 模块化(如CommonJS、ES6 Module等)6. 自动化构建工具(如Webpack、Gulp等)7. 测试框架(如Jest、Mocha等)8. API 开发(如Express、Koa等)
2023-06-21 15:00:41
80
原创 MyBatis-Plus快速入门
MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生,简单来说通过配置自动写sql语句内置代码生成器:采用代码或者Maven插件可以快速生成Mapper Model Service Controller支持多种数据库:Mysql Oracle等因为默认使用雪花算法,所以主键使用Bigint类型的主键id上面是通用的增删改查操作。
2023-04-22 11:02:35
105
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人