自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(257)
  • 资源 (5)
  • 问答 (1)
  • 收藏
  • 关注

原创 之所以有漏网之鱼,是因为你的网眼太大了,不够细致密实

一、两处空指针改动一个方法的代码,要考虑所有依赖这个方法的接口是否会受到影响:比如,你把一个工具类中的方法改了,就要考虑所有调用了该方法的地方是否会受到影响。在处理一个对象前,要考虑它是否可能为空,换句话说,就是要养成判空的习惯,比如想对字符串做分割处理成字符串数组,务必要判断该字符串是否为空。二、两处自测验证不到位研发自测往往只做个冒烟测试,但bug往往就隐藏在你没覆盖到的测试用例里:比如,有个选填项,你往往只是考虑了它填写时能否正常保存,却容易忘掉它不填时可否找正常保存。边界条件是最需要

2024-04-02 10:01:13 68 1

原创 用Python实现给图片去黑边

图片去黑边(只考虑了去水平方向上的黑边)的核心算法是要找到图片顶部或顶部的黑边位置,即两个纵坐标值,主要用到了canny边缘计算、 houghlines直线检测、easyocr识别等算法

2024-01-11 19:27:16 709

原创 记一次mq消息没有收到的问题排查

变化的果是由变化的因导致的,在遇到问题时,应该首先基于这种思维去大胆猜测问题发生的原因。刻画的传播链模型要准确。比如图中B有落库操作,开始时以为落库了就证明AB之间的消息传递是正常的,一直在对B的消费逻辑进行debug。但实际上发现A也有落库操作,这个时候应该重新考量MQ1是否正常工作,结果大脑可能有思维惯性,还停留在之前的观念里,误以为问题肯定出在了B系统。都有好记性不如烂笔头,其实不仅仅是记忆可以借助笔,分析问题时如果能多动动笔,也不容易走进思维的误区。强化对二分法思想在定位问题上的运用。

2023-12-07 08:02:39 426

原创 刚踩的两个坑: CV大法要慎用,异常捕获要彻底

在一个图片分析的Service里写过如下代码, 本来是想避免用户重复提交分析图片的请求,结果由于dealImages方法中的异常没有捕获到位(只捕获了IO异常),导致了isRectifying标识一直为true,从而无法执行新的图片分析任务。代码是复制的,会想当然以为之前的代码是好用的, 所以复制过来,稍微一测,能冒烟就觉得OK了,殊不知遗漏的场景里可能存在bug,因为你很容易遗漏某处本该发生改动。我做的一个批量查询接口,在传入单个id时查询报错,就是一个教训。复制代码做类似的功能开发时要注意。

2023-11-27 20:41:47 420

原创 并行查询的超时时间设置

使用多线程并行查询数据时,需要设置超时时间,避免一直等待

2023-11-27 20:13:26 693

原创 jackson多态序列化时踩的一个坑

jackson多态序列化踩坑记,要清一色用jackson时

2023-01-17 18:20:08 660

原创 StringUtils和BigDecimal踩坑记

在使用jdk库或三方库的时候,一定要了解方法的含义,避免想当然,不然就可能会出现bug

2022-11-16 17:53:48 171 3

原创 getBytes方法需要注意字符集,避免乱码

String的getBytes方法需要注意字符集,避免乱码

2022-11-01 20:15:13 587

原创 最近踩的两条sql的坑

我理解,这实际上是数学上的分类讨论思想,一定要对每种情况分别讨论,而不能混为一谈。后者的执行过程是先生成只有一条数据的临时表,然后跟左表进行左关联,得到如下结果。然后再用tab2.name='AAA’过滤,最终只得到第一条数据。where 条件是在临时表生成好后,再对临时表进行过滤的条件。on 条件是在生成临时表时使用的条件。给定下边一张学员表student。

2022-10-20 21:00:09 147

原创 分治、贪心、回溯、动态规划四种算法思想的比较分析

是多阶段决策问题吗?可以通过局部最优解得到全局最优解吗(能否用贪心算法)?是否有后效性问题(能否改为动态规划)?

2022-10-11 09:29:36 460

原创 流的二次读取

IO流读取后,不做任何操作时是不能再次读取的,可以通过使用mark和reset方法配合使用,来实现IO流的二次读取

2022-08-25 21:08:25 428

原创 归并排序及其扩展

归并排序、小和问题、逆序对问题

2022-08-10 20:08:56 114

原创 递归行为的时间复杂度估算——master公式

master公式可以用来估算子问题数据规模一样的递归行为的时间复杂度

2022-08-07 22:25:59 83

原创 二分查找以及扩展

二分查找及其变式

2022-07-31 16:05:59 205

原创 位运算的一些经典题目

java中提供的基础位运算符有与(&),或(|),非(~),异或(^),左移)和无符号右移(>>>)除了位非(~)是一元操作符外,其它的都是二元操作符异或运算满足交换律和结合律,①0^N==N②N^N==0为什么右移有“有无”符号之别,而左移却没有?(留个尾巴,后续补充)......

2022-07-31 13:54:47 333

原创 大数据学习路线

HadoopHadoop2.xHadoop3.xZookeeperHadoop高可用集群HAHiveFlumeHBaseAzkabanMaxwellCanalScalaSparkSpark调优GitFlinkFlink内核源码解析Flink性能调优ClickHouseFlink CDCSupersetAtlasKylin

2022-05-17 20:59:25 161

原创 一次接口性能优化的小结

尽可能减少数据库的查询次数,尤其要避免在循环中查询数据库对于关系型数据库:特殊情况下,尤其是牵涉到子查询、联接查询的sql,有可能拆开后的执行效率更高对于非关系型数据库(如redis):在key的个数较少时,mget的效率有可能不如逐一get的效率高对于读多写少的接口,性能瓶颈往往都在查询数据库上,但如果内存中的数据处理算法低效的话,也会成为瓶颈。需要避免内存中处理数据时的嵌套循环、多次循环。要选用合理的数据结构和算法来降低数据处理的时间复杂度。对多线程的使用及线程池的参数.

2022-03-29 12:38:38 1215

原创 使用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 3204

原创 最近工作的一些细节

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 271 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 624

原创 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 229 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 238

原创 如何实现netty RPC的心跳检测?

所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性.注:心跳包还有另一个作用,经常被忽略,即:一个连接如果长时间不用,防火墙或者路由器就会断开该连接。一、netty中如何实现心跳机制?在 Netty 中, 实现心跳机制的关键是 IdleStateHandler, 那么这个 Handler 如何使用呢?先看下它的构造器:public IdleStateHandler(int readerIdleTimeSeco.

2021-04-06 18:50:40 488

原创 如何实现netty RPC的服务注册与服务发现?

一、为什么要进行服务注册与发现?之前的demo只是实现了一个服务消费方对一个服务提供方点对点的服务调用,显然没有做到服务的高可用。那么该如何改进呢?思路就是由多个服务提供方提供服务,而每次服务消费方请求服务时就先从这多个服务提供方中筛选出一个可用的服务提供方。为了解耦服务的消费方和提供方,可以在两者中间安放一个叫“注册中心”的中介方,专门用来维护服务注册表(即服务节点的访问地址列表)。它可以供服务提供方进行服务注册, 也可以供服务消费方拉取服务注册表进行服务发现,也可以供服务消费方监听服务注册表的变化

2021-04-06 11:50:35 365

原创 如何用netty实现一个单机版的RPC?

上篇文章,我介绍了一下基于Http协议实现的RPC, 而一、Spring是如何把bean注册到容器中的?Spring中有个BeanDefinition的概念,类并不是直接利用反射创建出来实例

2021-03-30 08:09:38 190

原创 自己动手,向Spring容器中动态注册Http RPC动态代理

一、Spring是如何把bean注册到容器中的?Spring中有个BeanDefinition的概念,类并不是直接利用反射创建出来实例的,而是先被加载为BeanDefinition对象,然后被Bean工厂的后置处理器处理,最后才到bean的实例化环节。当然,上图只是一个梗概,具体流程还要结合源码梳理。二、如何在Spring中动态注册bean?三、如何实现Http RPC呢?RPC是远程过程调用,目标是让程序员像调用本地方法一样 调用远程方法,原理如下图:可以在传输层(比如dubbo就是基于

2021-03-24 19:23:38 540 4

原创 关于如何高效工作的几个意识

人与人之间的差别是思维意识水平的高低。你永远赚不到超出你认知水平以外的钱。最近两天听极客时间上的10x程序员工作法,有些受到启发。虽说是在讲作为程序员如何高效工作的,但文中的一些意识和方法可以说是揭开了一些事物的规律或本质,是放之四海而皆准的。首先,我学到了一个词儿——上下文(Context)。虽说是在学生时代的阅读理解题中就常见这个词,比如“请结合上下文,谈谈你对xxx的理解”(近些年还在计算机中的线程概念中遇到过),但从没想过,原来,职场不同职位的人本质区别竟然也可以被描述为“上下文不同”。.

2021-03-03 14:07:31 229 1

原创 MyBatis的设计模式总结

单例模式ErrorContext:使用ThreadLocal实现线程内的单例(虽然定义在executor包, 但是服务于日志包)io包下的VFS:使用静态内部类实现的单例模式工厂模式:反射包中的ObjectWrapperFactory、ReflectorFactory等绑定包中的MapperProxyFactory:/** * Mapper代理类工厂,用于为某个Mapper接口生成代理类 * 存了Mapper接口的Class对象,提供了newInstance静态方法 * @a.

2021-02-10 18:45:39 76 1

原创 Mybatis中的插件是如何工作的?

一、为什么MyBatis要提供插件?(MyBatis的插件的应用场景)一般情况下,开源框架都会提供插件或其他形式的拓展点,供开发者自行拓展。这样的好处是显而易见的,一是增加了框架的灵活性,二是开发者可以结合实际需求,对框架进行拓展,使其能够更好的工作我们可基于 MyBatis 插件机制实现分页、分表、监控等功能。二、如何自定义MyBatis的插件?实现自定义的MyBatis插件需要让插件类实现 Interceptor 接口并在MyBatis的全局配置文件中进行注册外,还需要通过注解标注该插

2021-02-10 17:38:03 157

原创 mybatis的动态sql是如何解析的?

MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑那么mybatis的动态sql是如何解析的呢?MyBatis的配置文件有两类:一个是全局配置文件,mybatis-config.xml,另一个是sql映射文件。动态sql体现在sql映射文件中,常见的有以下标签:ifchoose (when, otherwise)trim (where, set)foreach而这些标签会用在<sql>节点或sql语句节点(如<inser.

2021-02-09 18:29:56 269

原创 设计模式在项目中是如何用的?职责链模式篇(Chain Of Responsibility Design Pattern)

一、职责链模式是什么?有哪些应用场景?所谓模板方法模式,就是定义一个操作中的算法的骨架(这个将具体逻辑步骤汇总起来的方法就是所谓的模板方法),而将一些步骤延迟到子类中去实现模板方法模式是类的行为模式,它的应用场景是同一个接口的不同实现类存在公共代码,这样就可以用模板方法模式将不变部分进行实现、封装在模板类中,将可变部分作为抽象方法留给子类扩展,从而复用顶级逻辑的代码。二、职责链模式的实现模板方法模式的实现,关键代码是定义一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽

2021-01-26 12:03:29 169 2

原创 判断java权限修饰符,为什么要用位与?

昨天,有个转行做java的哥们儿发我一张图,说是他在做反射练习,问我图中红色划线的部分为啥要做与运算坦白来说,我没研究过这个问题,工作这么多年也没遇到过,但有句话说得好——“源码面前,了无秘密”。于是就下班后,打开了jdk源码,看到了Class类的getModifiers方法,如下: /** * Returns the Java language modifiers for this class or interface, encoded * in an integer.

2021-01-06 08:10:14 137

原创 如何线程安全地日期格式化?

传统方式进行日期格式化会使用SimpleDateFormat处理,但它是线程不安全的,那么如何处理呢?有两种方案:使用JDK1.8的java.time包下的LocalDateTime调用三方的工具类,比如调用apache lang3包的工具类FastDateFormatimport org.apache.commons.lang3.time.FastDateFormat;import java.time.Instant;import java.time.LocalDateTime;im

2020-12-23 19:21:58 482

原创 金融系统脱敏解决方案总结

金融系统脱敏解决方案总结如下文:一、数据库脱敏存两个字段:一个是对称加密的,一个是脱敏用于显示的二、后台管理页面数据列表脱敏三、日志脱敏json序列化时进行脱敏 //对敏感字段脱敏 public final String encryptRequest(String str) { JSONObject reqDataObj = JSONObject.parseObject(str); String businessSeqNo = reqDataObj.getString("busin

2020-11-26 19:01:59 1122

原创 一次HttpClient工具类引发的生产事故

对接新的三方支付平台,在测试环境验证完成后,结果投产时出现了调不通的情况。换了HttpClient工具类后,结果就可以调通了。最终定位到原因是HttpClient工具类的编码类型导致的。编码类型由属性enctype决定。它可以有三个值application/x-www-form-urlencoded: 表示使用URL编码的方式来编码表单。如果没有将enctype属性设置为任何值,那么这就是默认值。multipart/form-data: 当用户想上传文件这种二进制等文件或者前面的那个方式不能

2020-11-19 18:29:34 298

原创 近期工作中的一些sql总结

近期工作中遇到的一些sql,总结如下文:一、update结合inner join使用来“刷”历史数据-- 更新还款业务单中的银行编码和银行卡号UPDATE order_bind_deduct o INNER JOIN user_info_extend a ON o.account_no = a.account_no SET o.bank_code = a.bank_code, o.bankcard_no = a.bankcard_no;二、delete结合inner join使用来删除重复数

2020-11-19 12:06:30 122 1

原创 如何获取当前项目的类路径?如何读取类路径下的资源文件?

在研究MyBatis的parsing包时,想测试一下利用Xpath查找xml中的元素,遇到了一个如何获取项目类路径的一、非web项目下如何获取类路径?利用Class(支持相对路径和绝对路径)的getResourceAsStream和getResouce方法 /** * 如何读取类路径下的文件? 一、利用Class(支持相对路径和绝对路径) 二、利用ClassLoader(仅支持绝对路径,从classpath的根路径下查找,但路径开头不加斜杠) * 方式一: *

2020-11-06 11:36:47 1359

原创 springBoot整合logback

一、springBoot与logback如何整合?pom依赖的配置在spring与logback的整合时,需要加入以下依赖: <!-- log start --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </depe

2020-10-09 19:05:01 466

原创 记一次递归算法在项目中的应用

在生成签名时,json转化时字段没有保持顺序可能会导致客户端签名和服务端签名不一致,因此期望json转化时能支持顺序。考虑到json序列化时可能会存在嵌套结构,所以编写了以下代码,用递归算法解决了嵌套json的key排序问题 //对json排序 public Map<String, Object> getSortMapFromJson(JSONObject obj){ String[] arr = obj.keySet().toArray(new String[]{}); Arra

2020-09-29 14:09:52 175

原创 设计模式在项目中是如何用的?模板方法模式篇(Template Method Pattern)

模板方法模式是什么?有哪些应用场景?所谓策略模式,就是一个类的行为或其算法可以在运行时更改策略模式的应用场景是系统中存在【总分结构】,即对于同一个业务存在有相似的分支逻辑(实现),而区分它们的仅仅是业务类型的不同,这样就可以用策略模式从多种相似的算法中筛选出目标算法,从而避免了使用 if…else 所带来的复杂和难以维护。模板方法模式的实现策略模式的实现,关键代码是多个类实现同一个接口(Strategy接口),同时另有一个类持有该接口的所有实现类(持有Strategy所有实现类的Context

2020-09-28 06:56:13 464

一个使用angularJS实现的简易音乐播放器

一个使用angularJS实现的简易音乐播放器,体现了angularJS双向绑定的使用

2018-04-04

My97DatePicke日期控件

使用时只需要在页面上引用 WdatePicker.js 即可。 然后,像这样 <input id="d11" type="text" onClick="WdatePicker()" class="Wdate"/> 使用就可以呈现出效果了,用起来很方便~

2014-06-12

Spring+SpringMVC的一个简单登录例子(参考用户ldhsecret)

参考了用户ldhsecret分享的例子,对页面上不能登录进行了修改,使得下载后导入到Eclipse中可以运行

2013-07-27

My|Batis框架的入门例子

在Eclipse下做的一个MyBatis的例子,对配置文件进行了注释,可供有兴趣了解的朋友参考

2013-07-27

算法导论(第二版)pdf

这本书深入浅出,全面地介绍了计算机算法。对每一个算法的分析既易于理解又十分有趣,并保持了数学严谨性。本书的设计目标全面,适用于多种用途。涵盖的内容有:算法在计算中的作用,概率分析和随机算法的介绍。书中专门讨论了线性规划,介绍了动态规划的两个应用,随机化和线性规划技术的近似算法等,还有有关递归求解、快速排序中用到的划分方法与期望线性时间顺序统计算法,以及对贪心算法元素的讨论。此书还介绍了对强连通子图算法正确性的证明,对哈密顿回路和子集求和问题的NP完全性的证明等内容。全书提供了900多个练习题和思考题以及叙述较为详细的实例研究。

2011-11-20

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除