gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

月度归档11月 2021

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  2021   /  
  • 11月
shardingsphere 11月 28,2021

Shardingsphere 4.0.0-RC1和pagehelper分页时报错解决

项目架构使用Shardingsphere和pagehelper架构,对一个复杂sql语句,运行后报错“Must have sharding column with subquery. "

原来 PageHelper里面有个机制是,当解析的sql比较复杂的时候,会加上别名,而Sharding-jdbc执行这个带有别名的sql会报错。如果不用pageHelper,自己来分页是可以避免这个问题。但这样做比较麻烦。

解决办法是在另加一个XXX_COUNT的sql,不要让PageHelper给原始sql加上别名。 官网的做法解释如下:

增加 countSuffix count 查询后缀配置参数,该参数是针对 PageInterceptor 配置的,默认值为 _COUNT。

分页插件会优先通过当前查询的 msId + countSuffix 查找手写的分页查询。

如果存在就使用手写的 count 查询,如果不存在,仍然使用之前的方式自动创建 count 查询。

例如,如果存在下面两个查询:

<select id="selectLeftjoin" resultType="com.github.pagehelper.model.User">     select a.id,b.name,a.py from user a     left join user b on a.id = b.id     order by a.id
</select>

<select id="selectLeftjoin_COUNT" resultType="Long">
select count(distinct a.id) from user a left join user b on a.id = b.id
</select>

上面的 countSuffix 使用的默认值 _COUNT,分页插件会自动获取到 selectLeftjoin_COUNT 查询,这个查询需要自己保证结果数正确。

返回值的类型必须是resultType="Long",入参使用的和 selectLeftjoin 查询相同的参数,所以在 SQL 中要按照 selectLeftjoin 的入参来使用。

因为 selectLeftjoin_COUNT 方法是自动调用的,所以不需要在接口提供相应的方法,如果需要单独调用,也可以提供。

作者 east
技术架构 11月 28,2021

阅读开源软件源码的心得体会

互联网大厂研发的职位,很多有对源码有要求。同时,看源码最大的好处是可以开阔思维,提升架构设计能力。有些东西仅靠书本和自己思考是很难学到的,必须通过看源码,看别人如何设计,然后思考为何这样设计才能领悟到。能力的提高不在于你写了多少代码,做了多少项目,而在于给你一个业务场景时,你是否能拿出几种靠谱的解决方案,并且说出各自的优缺点。而如何才能拿出来,一来靠经验,二来靠归纳总结,而看源码可以快速增加你的经验。而不少源码十分庞大复杂,下面谈谈阅读源码心得体会。

那么如何阅读源码呢?在你看某一个框架的源码前,先去Google查找这个开源框架的官方介绍,通过资料了解该框架有几个模块,各个模块是做什么的,之间有什么联系,每个模块都有哪些核心类,在阅读源码时可以着重看这些类。或者找找是否有这方面源码解读的书,在别人探索好的路再去探索,能节省时间。

然后对哪个模块感兴趣就去写个小demo,先了解一下这个模块的具体作用,然后再debug进入看具体实现。在debug的过程中,第一遍是走马观花,简略看一下调用逻辑,都用了哪些类;第二遍需有重点地debug,看看这些类担任了架构图里的哪些功能,使用了哪些设计模式。如果第二遍有感觉了,便大致知道了整体代码的功能实现,但是对整体代码结构还不是很清晰,毕竟代码里面多个类来回调用,很容易遗忘当前断点的来处;那么你可以进行第三遍debug,这时候你最好把主要类的调用时序图以及类图结构画出来,等画好后,再对着时序图分析调用流程,就可以清楚地知道类之间的调用关系,而通过类图可以知道类的功能以及它们相互之间的依赖关系。另外,开源框架里面每个功能类或者方法一般都有注释,这些注释是一手资料,比如JUC包里的一些并发组件的注释,就已经说明了它们的设计原理和使用场景。

在阅读源码时,最好画出时序图和类图,因为人总是善忘的。如果隔一段时间你再去看之前看过的源码,虽然有些印象,但当你想去看某个模块的逻辑时,又需根据demo再从头debug了。而如果有了这俩图,就可以从这俩图里面直接找,并且看一眼时序图就知道整个模块的脉络了。

作者 east
Java 11月 25,2021

优化后台接口经验总结

开发一个后台接口不难,可能花几个小时就能跑通;而做一个好用的接口,可能要花几天时间精雕细磨。尤其是业务复杂,数据量大的,如果没有优化导致速度很慢,用户根本没耐心等。

下面谈谈优化思路:

1、串行操作改为并发操作。如果接口有串行操作,而且其中一些操作是比较耗时的,而且它们的操作没有因果关系需要等待前面的结果,那么可以把这些操作改为并发线程去操作。使用多线程遇到坑会多一些,例如线程池使用FutureTask时如果把拒绝策略设置为DiscardPolicy和DiscardOldestPolicy,并且在被拒绝的任务的Future对象上调用了无参get方法,那么调用线程会一直被阻塞。在日常开发中尽量使用带超时参数的get方法以避免线程一直阻塞。

2、对一些常用的可复用的数据库查询加上缓存。做一个系统需要经常查询点位信息,这些点位信息不会经常变,对相关的数据库查询加上缓存。如果用mybatis,可以考虑直接在xml上添加,或者利用redis进行添加。

3、数据的优化,如果单表数据过大,可以考虑进行分库分表。

4、对查询慢的语句,考虑加上相关的索引。频繁单个查询或插入,考虑是否能改为批量操作。对一些频繁查询可复用的,可以考虑一次批量查询出来并缓存起来。

5、考虑是否可以后台先计算出中间结果或最终结果,用户查询时不用从头开始计算。在接口查询计算过程,如果有频繁重复计算的,可以考虑采用备忘录算法。

作者 east
数据库 11月 23,2021

对接第三方数据库的数据遇到的坑

对接第三方的数据,根据轮询他们的数据库来对接数据。看到表设计有create_time字段,根据经验主义觉得是写入数据库的时间。于是想到对接数据方案是:如果查询时间小于当前时间,每几分钟查一次。如果查询时间大于当前时间,休眠到查询结束时间等于当前时间。后来发现一个奇怪现象:如果刚运行程序补录数据,发现没有漏数据,如果跑一段时间,追上当前时间,就出现漏数据。由于是采用jdbc框架的,不是很清楚底层,当时怀疑会不会运行久了断开数据库连接。反复修改程序还是出现这种情况,后来问第三方厂家,他们说create_time是服务接收到数据的时间,还要先写临时库,再写目标库。并且查询到第三方的数据库时间是落后标准时间的。

作者 east
Java, 运维 11月 7,2021

一次诡异系统变慢排查

给客户上线了系统(Spring Cloud、微服务,centos上运行),运行1、2年后,客户投诉系统很慢。

自己打开系统,刚开始很快,用一些时间就变慢。看前端请求的接口,是挂起状态,有的要几分钟才有结果。

检查服务器内存和CPU。这是引起系统慢常见的问题,发现这2方面改善后还是变慢,后来干脆重启服务器,依然无解。

检查磁盘坏道。之前用电脑时,如果磁盘有坏道,如果有写操作,有时也会为坏道。用centos检查坏道的命令也没发现。

检查接口代理。由于是前后端分离,用户在前端的请求,都经过第三方代理。如果直接测后台接口是很快,但通过前端访问就变慢了,于是怀疑是第三方代理搞的鬼。于是咨询第三方代理,第三方代理说他们服务的客户,都没有发现这种情况,建议我们排查网络。

检查前端。由于后来又上线几个类似的系统,前端基本一样的,没有安装新的插件。所以觉得可能性不大。

检查浏览器。网上有的说是chrome浏览器早期的bug,如果是已经请求过的接口,会复用之前的。想找不同浏览器或更新到最新chrome的。但几个一样的系统,用同样浏览器也没有变慢,也解释不通。

终极答案。经反复排查,最后发现是前端有个页面每几秒钟请求1次,而请求相关的数据库年长月久数据很多,数据库不能及时响应请求。后来根据业务需要改成几分钟请求1次,果然这个诡异问题没再出现。

作者 east

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?
  • C++ 中避免悬挂引用的企业策略有哪些?
  • 嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?
  • C++如何在插件式架构中使用反射实现模块隔离?
  • C++如何追踪内存泄漏(valgrind/ASan等)并定位到业务代码?
  • C++大型系统中如何组织头文件和依赖树?

文章归档

  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (43)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (4)
  • 大数据开发 (488)
    • CDH (6)
    • datax (4)
    • doris (30)
    • Elasticsearch (15)
    • Flink (78)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (40)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (99)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (34)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (70)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (6)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.