- 博客(9)
- 收藏
- 关注
原创 java 子类重写父类方法时默认调用子类方法
背景子类继承父类,重载了父类方法。面试中经常考到方法的调用,以及构造函数先后顺序。例子定义父类,申明方法say()public class TestParent { protected static String name = "parent"; TestParent(){ say(); } public void say(){ ...
2020-04-17 14:11:50
3530
3
原创 (五)接口请求IP/URL限流(基于拦截器+注解+redis)
背景日常开发过程中,经常需要对一些资源消耗大的接口(例如:图片上传/下载接口,当遇到并发量大的时候,网络带宽咱比不断增加,导致程序无法正常运行)进行限流操作。以此来增加应用的稳定性和安全性。解决方案基于拦截器,在网关层对请求进行拦截,利用redis存贮请求来源信息,并进行计数,超过阀值时直接拒绝请求。利用注解来标记需要拦截的方法,方便灵活。(此方案基于springboot+redis)定义注解类Semaphore@Documented //生成文档@Inherited //可以被子类使用
2020-08-17 20:12:29
1049
1
原创 数据库主键ID管理方案
背景数据库常常使用自增主键。通常会遇到这些问题:当我们在导入旧数据时常常会发生主键重复冲突;数据库主键没有任何业务意义;常常会出现插入数据前需要获取数据主键的情况,MySQL下让人头大。解决方案生产过程中,常常用一张表以及函数来帮助维护业务表的主键。表用来存放业务表序列,函数用来处理并获取业务表序列。当有业务数据插入时,先通过函数获取该表的序列,此时可以通过此序列加上一些业务元素,即生成了有业务意义且唯一的主键。序列表的创建表主要两个字段,表名和当前序列号CREATE TABLE `t_ads_
2020-07-14 19:51:51
433
原创 shell脚本带参数启动不同版本项目
背景日常开发工作中,部署项目时,常常需要写一个脚本来实现项目重启(比如:jar/war)。随着时间的推移,一个项目会存在多个版本。因此需要传入一个版本参数来启动对应版本的项目。脚本实现if [ -n "$1" ]; thenpid=`ps -ef | grep -w test-0.0.1 | grep -v grep | awk '{print $2}'`echo "test $pid"if [ -n "$pid" ]then echo "kill -9 pid:" $pid k
2020-07-07 20:11:56
513
原创 dubbo服务提供/订阅者修改application.yml后启动报错java.nio.charset.MalformedInputException: Input length = 1
背景本地测试同一个服务由多台应用提供时。需修改配置文件(本地测试一台zk修改应用组件:server port,spring.dubbo.application.name,spring.dubbo.protocol.port)重新打包,生成多个jar。发现修改服务提供方/订阅方后,再启动时报错如下:Caused by: java.nio.charset.MalformedInputExcepti...
2020-04-14 20:03:12
573
原创 (四)使用拦截器鉴权
背景为增加系统安全性,对每个请求需要进行鉴权,过滤掉非法请求。基于Spring实现。鉴权通过时可通过ThreadLocal存储一些用户信息,方便之后业务使用。定义ThreadLocal对象@Componentpublic class CodeHolder { private static ThreadLocal<String> agentCodes = new Thr...
2020-04-13 21:42:44
498
原创 (三)使用AOP获取方法执行时间/记录请求/返回参数
背景:系统开发测试过程中,常需要关注请求参数和返回参数,以及方法运行时长(使用filter也可实现)。基于springAop注解实现@Aspect@Componentpublic class HttpAspect { //定义在controller包和所有子包里的任意类的public方法的执行 @Pointcut("execution(public * com.cb.sp...
2020-04-13 21:11:03
1951
原创 (二)全局异常处理
背景:常见代码中使用try&&catch捕获处理异常,仅针对代码块。若没有全局异常处理,系统出现未处理的异常时会直接返异常信息,影响用户体验。(一)定义异常信息定义异常信息操作接口public interface BaseErrorInfoInterface { public String getResultCode(); public String get...
2020-04-13 20:44:14
303
原创 (一)JDK动态代理简单实现
实现步骤(1)定义一个接口,代理的是接口(多态),不是具体的实现类;(2)定义处理类(实现InvocationHandler接口),重写invoke方法,由要代理接口的实现类来实例化处理类;(3)定义代理类Proxy,调用方法。创建接口:代理的是接口.不妨回顾一下mybatis的实现原理,在项目开发中的UserMapper接口和与之对应的UserMapper.xmlpublic inte...
2020-03-29 16:58:58
155
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅