- 博客(271)
- 资源 (5)
- 问答 (1)
- 收藏
- 关注
原创 小经验小结
关于数据校验的一条经验: 先假定是合法的,直接落库,再校验数据是否有问题,有问题就抛异常回滚关于外部接口调用:调用外部接口的组件交给spring管理,这样方便将一些配置数据(如url地址、加密key等信息)注入进来关于功能自测:起码要用debug覆盖一遍自己的代码逻辑,避免明显的缺陷
2024-10-14 14:20:32 133
原创 多态对象的存储方案小结
和@JsonSubTypes可以应对这种情形,但有点麻烦,并且name属性必须是字符串、必须用Jackson为基础的json工具类对json字符串和对象进行序列化和反序列化。(为了方便与前端交互,实体类成员变量的值如showConfig1、showConfig2都具有相同的前缀,后缀则是枚举值)某个类型有几种不同的子类,Jackson中的@JsonTypeInfo。后来,又遇到了一次这种情形,觉得不用多态反而更方便地应对了。存储时,把不同实体类对象转换为json串赋值给对应的字段上。
2024-10-14 11:50:13 335
原创 巧用枚举应对多种策略的场景
其次是每个数据项都有多个属性(比如中文含义、英文编码、权重值…),或者是需要对某个行为以各不相同的策略进行实现。总结一下,什么时候适合使用枚举呢?
2024-10-14 11:12:58 330
原创 记录一下工作中用到的几个有意思的小算法
22年的夏天,我补了一段时间算法知识,看的是马士兵教育左程云老师的算法课和极客时间王争老师的算法之美,虽然没吸收太多,但也对算法中蕴含的巧妙智慧印象颇深,着实在心里埋下了一颗喜欢算法的种子。工作中很少需要自己编写一段算法,但最近一段时间集中遇到了几处,特意记录下来。
2024-10-11 19:51:10 814
原创 使用规则引擎简化特定场景的开发
前一段开发一个根据获奖规则生成获奖名单的功能,场景比资金路由的匹配要简单,但规则引擎也是适用的。之前做资金中台的时候,用到了aviator轻量级的规则引擎,简化了匹配逻辑。
2024-09-13 16:46:12 131 1
原创 自测的重要性
发现了sql少写了个条件、发现了入参必传 mergeBrandId、发现了复制错误 mergeBrandId 跟 memberBrandId长得很像。2、核对需求文档,看看是不是自己的逻辑跟需求都是匹配的,有没有遗漏的细节。3、有时候配合接口的使用方去做点假数据,也是发现自己接口漏洞的好机会。1、把debug一遍,看看每一步变量值的变化都符合预期。
2024-09-13 11:11:08 182
原创 actuator字符绕过漏洞在Nginx和apisix上的配置
最近遇到了安全部门派发的actuator泄漏漏洞,领导希望不暴露到外网上,对于内网需要认证才可以访问。要想不暴露到外网上,就需要在网络层面做拦截,比如nginx和apisix上做代理配置。一般的情况都可以应对,就是对于http://xxx/actuator;%2f…/字符绕过这种情况,一直没有解决方案。
2024-09-13 10:34:47 627
原创 工作中遇到了一个线程中断异常
而主线程随后又进行了数据查询,这时候从druid数据库连接池中获取数据连接会用到AQS中的可重入锁, 可重入锁会检查线程的中断标识,如果是中断,则抛出中断异常。主线程使用CompletableFuture开辟子线程进行了并行查询,但其中某个子线程执行时发生异常,没有捕获。结果就在主线程等待所有子线程都执行完毕时报ExecutionException。工作中遇到了一个线程中断异常,备忘记录一下。从而对主线程打上了中断标识。
2024-09-11 19:36:52 485
转载 【POI】多种实现导出的差异
在实际使用中,除非有特别的格式要求,一般优先选择 SXSSFWorkbook,以支持最大的数据量。所以总结来说,三种 Workbook 的选择依据是:文件格式要求、数据量大小、写入性能要求。SXSSFWorkbook:用于操作 xlsx 格式的 Excel,支持超过 2^20 行的数据,实际数据存储在临时文件中,只将部分数据加载到内存中。SXSSFWorkbook 只加载部分行到内存,大部分行存储在临时文件中,所以可以支持百万行级别的数据,不容易OOM。支持的文件格式和最大行数不同。
2024-05-09 11:53:31 88
原创 一个sql子查询的错误,记录一下
一、两处空指针改动一个方法的代码,要考虑所有依赖这个方法的接口是否会受到影响:比如,你把一个工具类中的方法改了,就要考虑所有调用了该方法的地方是否会受到影响。在处理一个对象前,要考虑它是否可能为空,换句话说,就是要养成判空的习惯,比如想对字符串做分割处理成字符串数组,务必要判断该字符串是否为空。二、两处自测验证不到位研发自测往往只做个冒烟测试,但bug往往就隐藏在你没覆盖到的测试用例里:比如,有个选填项,你往往只是考虑了它填写时能否正常保存,却容易忘掉它不填时可否找正常保存。边界条件是最需要
2024-04-02 10:01:13 167 1
原创 用Python实现给图片去黑边
图片去黑边(只考虑了去水平方向上的黑边)的核心算法是要找到图片顶部或顶部的黑边位置,即两个纵坐标值,主要用到了canny边缘计算、 houghlines直线检测、easyocr识别等算法
2024-01-11 19:27:16 1461
原创 记一次mq消息没有收到的问题排查
变化的果是由变化的因导致的,在遇到问题时,应该首先基于这种思维去大胆猜测问题发生的原因。刻画的传播链模型要准确。比如图中B有落库操作,开始时以为落库了就证明AB之间的消息传递是正常的,一直在对B的消费逻辑进行debug。但实际上发现A也有落库操作,这个时候应该重新考量MQ1是否正常工作,结果大脑可能有思维惯性,还停留在之前的观念里,误以为问题肯定出在了B系统。都有好记性不如烂笔头,其实不仅仅是记忆可以借助笔,分析问题时如果能多动动笔,也不容易走进思维的误区。强化对二分法思想在定位问题上的运用。
2023-12-07 08:02:39 632
原创 刚踩的两个坑: CV大法要慎用,异常捕获要彻底
在一个图片分析的Service里写过如下代码, 本来是想避免用户重复提交分析图片的请求,结果由于dealImages方法中的异常没有捕获到位(只捕获了IO异常),导致了isRectifying标识一直为true,从而无法执行新的图片分析任务。代码是复制的,会想当然以为之前的代码是好用的, 所以复制过来,稍微一测,能冒烟就觉得OK了,殊不知遗漏的场景里可能存在bug,因为你很容易遗漏某处本该发生改动。我做的一个批量查询接口,在传入单个id时查询报错,就是一个教训。复制代码做类似的功能开发时要注意。
2023-11-27 20:41:47 512
原创 最近踩的两条sql的坑
我理解,这实际上是数学上的分类讨论思想,一定要对每种情况分别讨论,而不能混为一谈。后者的执行过程是先生成只有一条数据的临时表,然后跟左表进行左关联,得到如下结果。然后再用tab2.name='AAA’过滤,最终只得到第一条数据。where 条件是在临时表生成好后,再对临时表进行过滤的条件。on 条件是在生成临时表时使用的条件。给定下边一张学员表student。
2022-10-20 21:00:09 179
原创 分治、贪心、回溯、动态规划四种算法思想的比较分析
是多阶段决策问题吗?可以通过局部最优解得到全局最优解吗(能否用贪心算法)?是否有后效性问题(能否改为动态规划)?
2022-10-11 09:29:36 549
原创 位运算的一些经典题目
java中提供的基础位运算符有与(&),或(|),非(~),异或(^),左移)和无符号右移(>>>)除了位非(~)是一元操作符外,其它的都是二元操作符异或运算满足交换律和结合律,①0^N==N②N^N==0为什么右移有“有无”符号之别,而左移却没有?(留个尾巴,后续补充)......
2022-07-31 13:54:47 375
原创 大数据学习路线
HadoopHadoop2.xHadoop3.xZookeeperHadoop高可用集群HAHiveFlumeHBaseAzkabanMaxwellCanalScalaSparkSpark调优GitFlinkFlink内核源码解析Flink性能调优ClickHouseFlink CDCSupersetAtlasKylin
2022-05-17 20:59:25 199
原创 一次接口性能优化的小结
尽可能减少数据库的查询次数,尤其要避免在循环中查询数据库对于关系型数据库:特殊情况下,尤其是牵涉到子查询、联接查询的sql,有可能拆开后的执行效率更高对于非关系型数据库(如redis):在key的个数较少时,mget的效率有可能不如逐一get的效率高对于读多写少的接口,性能瓶颈往往都在查询数据库上,但如果内存中的数据处理算法低效的话,也会成为瓶颈。需要避免内存中处理数据时的嵌套循环、多次循环。要选用合理的数据结构和算法来降低数据处理的时间复杂度。对多线程的使用及线程池的参数.
2022-03-29 12:38:38 1265
原创 使用bootstrap.yml读取配置中心的配置文件
当使用 Spring Cloud的时候,配置信息一般是从配置中心加载的,为了取得配置信息(比如密码等),你需要一些提早的或引导配置。因此,把配置中心信息放在bootstrap.yml,用来加载真正需要的配置信息。配置中心可以用nacos,也可以用springCloud config 。下边以nacos为例:bootstrap.yml的配置为:spring: profiles: active: test application: name: xxxx-api an.
2022-03-03 10:24:22 3370
原创 最近工作的一些细节
JSON反序列化时,对象属性未被赋值的问题这种情况很可能是因为实体类覆盖了无参构造方法BigDecimal的toString和toPlainString前者在必要时会使用科学计数法,而后者则永远不会使用如果你不希望出现6000在输出时以“6E+3”来展示,一定要使用toPlainString方法MySQL 的 case when 的语法有两种简单函数CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END搜索函数CASE
2022-02-11 18:12:18 300 1
转载 SpringBoot的多环境启动的使用
一、SpringBoot的多环境启动1. 在maven打包时使用 -P参数来指定环境,对应着 pom.xml中profiles->profile->id <!-- 打包环境配置 --><profiles> <profile> <id>dev</id> <properties> <profileActive>dev</profileActive>
2021-08-05 12:07:38 678
原创 BIO、NIO、AIO有啥区别?
IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式:BIO,NIO,AIO一、BIO(Blocking IO)同步阻塞模型,一个客户端连接对应一个处理线程对于每一个新的网络连接都会分配给一个线程,每隔线程都独立处理自己负责的输入和输出, 也被称为Connection Per Thread模式缺点:1、IO代码里read操作是阻塞操作,如果连接不做数据读写操作会导致线程阻塞,浪费资源2、如果线程很多,会导致服务器线程太多,压力太大,比如C10K问题应用场景:.
2021-04-14 18:40:15 295 3
原创 一次查询资金流水的性能优化经历
你好import org.springframework.context.ApplicationEvent;/** * @Title:用户登录事件 * @Author:wangchenggong * @Date 2021/4/12 17:24 * @Description * @Version */public class LoginEvent extends ApplicationEvent { public LoginEvent(String userName) {
2021-04-14 09:57:49 274
原创 如何实现netty RPC的心跳检测?
所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性.注:心跳包还有另一个作用,经常被忽略,即:一个连接如果长时间不用,防火墙或者路由器就会断开该连接。一、netty中如何实现心跳机制?在 Netty 中, 实现心跳机制的关键是 IdleStateHandler, 那么这个 Handler 如何使用呢?先看下它的构造器:public IdleStateHandler(int readerIdleTimeSeco.
2021-04-06 18:50:40 554
原创 如何实现netty RPC的服务注册与服务发现?
一、为什么要进行服务注册与发现?之前的demo只是实现了一个服务消费方对一个服务提供方点对点的服务调用,显然没有做到服务的高可用。那么该如何改进呢?思路就是由多个服务提供方提供服务,而每次服务消费方请求服务时就先从这多个服务提供方中筛选出一个可用的服务提供方。为了解耦服务的消费方和提供方,可以在两者中间安放一个叫“注册中心”的中介方,专门用来维护服务注册表(即服务节点的访问地址列表)。它可以供服务提供方进行服务注册, 也可以供服务消费方拉取服务注册表进行服务发现,也可以供服务消费方监听服务注册表的变化
2021-04-06 11:50:35 436
原创 如何用netty实现一个单机版的RPC?
上篇文章,我介绍了一下基于Http协议实现的RPC, 而一、Spring是如何把bean注册到容器中的?Spring中有个BeanDefinition的概念,类并不是直接利用反射创建出来实例
2021-03-30 08:09:38 234
原创 自己动手,向Spring容器中动态注册Http RPC动态代理
一、Spring是如何把bean注册到容器中的?Spring中有个BeanDefinition的概念,类并不是直接利用反射创建出来实例的,而是先被加载为BeanDefinition对象,然后被Bean工厂的后置处理器处理,最后才到bean的实例化环节。当然,上图只是一个梗概,具体流程还要结合源码梳理。二、如何在Spring中动态注册bean?三、如何实现Http RPC呢?RPC是远程过程调用,目标是让程序员像调用本地方法一样 调用远程方法,原理如下图:可以在传输层(比如dubbo就是基于
2021-03-24 19:23:38 598 4
My97DatePicke日期控件
2014-06-12
Spring+SpringMVC的一个简单登录例子(参考用户ldhsecret)
2013-07-27
算法导论(第二版)pdf
2011-11-20
javaWeb开发中,mysql数据库报错连不上,求高手
2017-10-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人