自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

成锰的博客

工作日常

  • 博客(40)
  • 资源 (1)
  • 收藏
  • 关注

原创 大海捞针-记一次排查内存溢出事件

据实施人员交代,这个巨型项目在2020-2021年平稳运行了一年,元旦之后,频繁报内存溢出,有时几天一次,有时一天几次,完全摸不到规律。而且堆内存已设置最大4G。OK,开整!首先,堆转储文件已不可得,在weblogic增加jvm参数,下次OOM时即可获得堆转储文件。-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath一边等问题复现,一边从程序的角度排除。程序有无定时任务?有!但挨个看了,quartz的定...

2022-01-14 14:29:46 730

原创 防止开发者不关DB的策略及实践

笔者的工作内容主要是研发框架,即提供了一整套平台框架(登陆模块、菜单模块、组织机构模块、权限模块、流程、表单、润乾。。。),其中业务程序开发模块供业务开发者进行二次开发使用。通常,业务开发者只需要在引导页面输入一些表名、字段名等信息,就可以完整地生成一个程序页面(列表、维护、树型页面等)。但是,业务需求总是千差万别的,平台框架不可能满足所有现场的特殊需求,这时候,就需要业务开发者在我们限定的方案内进行二次开发。举个栗子,下图是平台框架中自动生成的新建维护页面;比如现在有个特殊需求,在打开新建维护页面的时

2021-03-10 18:27:41 176 1

原创 关于class加密方案的初步探讨

123

2021-03-07 19:10:55 1041

原创 linux定时备份Oracle脚本(备份至linux、ftp、nfs等)

123

2021-03-05 12:53:14 377 2

原创 记一次SQL性能优化过程-索引并非多多益善

最近公司的一个项目,出现数据库占用CPU飙升,导致所有SQL执行缓慢,系统几近崩溃,废话不说来看排查经过吧

2021-03-05 09:58:42 106 2

原创 记一次我的技术分享-nginx的使用及案例分析

先给大家分享一套非常有用的nginx学习视频,共100集,每集几分钟讲清一个知识点,非常nice。大家扫码关注一下公众号 智程科技 ,回复 “nginx100” 即可免费领取哦 好了,言归正传。我现在的公司有一个非常优良的传统,那就是每个员工都会定期地分享技术干货,互相拓宽大家的知识维度。一般是以讲解加问答的形式,内容可以是一种新技术、一次性能调优的过程、甚至是一段优美的代码,内容不限制,时间一小时。其实,我第一次的技术分享是在19年5月份,但由于本人比较懒,一直没记录...

2021-03-05 00:09:36 393 2

原创 OutOfMemoryError 与 StackOverFlow 的底层逻辑

在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识。OutOfMemoryError 是内存溢出,jvm把所有的对象实例以及数组都要在堆上分配,如果分配不下就会报此错误。//OutOfMemoryError 示例:List<Object> lst = new ArrayList<Object>();while(true) { Object obj = new Object(); lst.add(obj...

2021-12-29 19:03:08 780

原创 近期数据库使用小结

数据库常用总结

2021-12-25 15:01:21 589

原创 谈谈websocket在Java项目中的应用

最近,笔者在给公司的产品做一个在线用户聊天的功能,用到了websocket技术,这里做一下归纳和总结。 在HTTP 协议中,所有的请求都是由客户端发起的,由服务端进行响应,服务端无法向客户 端推送消息,但是在一些需要即时通信的应用中,又不可避免地需要服务端向客户端推送消息,传 统的解决方案主要有如下几种。 1、轮询:简单,弊端就是会服务器会处理大量的无效请求; 2、长轮询:轮询的升级版,不同于传统轮询,在长轮询中,服务端不是每次都会立即响...

2021-12-22 19:42:52 2076

原创 监测ORACLE服务脚本

@echo offrem 定义监测的服务set srvname="OracleServiceORCL"echo.echo ====================================================echo == 查询计算机%srvname%服务的状态 =========echo == 如发现服务停止,则立即启动 ======================echo ================================================.

2021-12-15 15:21:13 1387

原创 应用服务占用CPU过高情况排查

问题描述(1)业务开发人员在启动项目时,会较高概率的出现cpu满载且一直无法停止的问题。任务管理器可以看到javaw.exe占用率为90%以上(2)当启动项目时debug项目时,也会出现异常的卡顿,且能发现cpu占用率在稳步上升。解决思路1.尝试重现问题后,通过jvisualvm(jdk8中自带,后续版本被移除,但是可以兼容使用)工具观察堆、cpu运行的状态,能看出cpu是一直处于高负荷运行状态,且堆内存占用不大,GC线程也未占用cpu。可以判断是项目中部分线程一直在运行导致了cpu满载。2.jps

2021-12-13 17:02:28 2502

原创 实现线程池的多种方式

大家在研发过程中,难免会遇到使用子线程或者异步线程的场景。它的实现方式有多种,下面就梳理一下。

2021-12-13 16:21:58 458

原创 nginx的容错与转发机制

问题:当一个请求经过nginx转发,快要达到A服务器却未到达时,A突然宕机,这种情况如何避免呢?我在另一篇文章了提到了nginx的重试机制,不过这个机制存在一定局限性,比如必须是一台机器返回了规定了Http状态码,nginx才能根据此状态码做出将请求转发到另一台机器的的行为。而宕机则是A服务器完全没有反应,无法返回任何信息。 nginx自己带的健康检测似乎能避免这个问题,但是它是被动检测的,总会有几个请求落到了已经不可用的服务器上,nginx才知道这台服...

2021-08-31 17:30:52 633

原创 处理集群问题的一些思路

1、妙用nginx的重试机制 nginx的上有服务器为A和B,当请求经过nginx转发到达A时,A突然宕机后,该怎么让请求继续得以执行成功返回响应呢?这就需要利用nginx的重试机制。 重试就是再次尝试,容错的一种策略。当nginx收到A服务器的响应或者压根就没有响应时,nginx会根据默认或定义的配置,再将请求转发给其他节点,以顺利执行。官方API:Syntax: proxy_next_upstream error | timeout | invalid_hea...

2021-08-31 17:08:57 358

原创 修改pro文件,tomcat自动重启怎么办?

前些日子碰到一个很奇怪的问题:现象是,请求产品中的一个初始化接口,外置tomcat就会自动重启,报以下错误16-Jul-2021 16:11:01.332 警告 [Catalina-utility-2] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbcWeb应用程序 [ROOT] 注册了JDBC驱动程序 [com.alibaba.druid.proxy.DruidDriver],但在Web应用程序停止时无法注

2021-08-01 23:13:54 768

原创 Java工具类之读取jar包中配置文件

如何从jar中读取类如XML的配置文件呢?而且要兼容读取classPath下的配置文件,且读取顺序要优先于jar包。从classPath下读取大家都知道,通过class.getResource()就能获取class的绝对路径,读取非常轻松。而从jar中读取则需要支持的API,楼主翻阅了网上的资料,有URL、JarFile等。但这意味着方法里必须先读取classPath下文件,如没有则再读取jar中文件,这就显得很不优雅。后来找到了一种优雅的API:ResourcePatternResolver翻

2021-07-10 12:25:45 1870

原创 核心代码之版本管理与更新推送

需求:平台的核心代码,只有打成加签的jar才能不易被个别项目现场所覆盖,但他们想扩展功能怎么办?最好的方法就是面向接口编程,预留接口给他们二次开发,但产品当初的技术框架并未如此设计,所有现在只能退而求其次了。一.场景模拟1.比如,产品上Business.java中,方法会初始化有效状态作为过滤条件但苏州现场情况特殊,登录公司不是总公司才要设置有效状态,那么要修改代码2.比如,产品上的表单计算service但现在某泰州现场希望增加预执行函数的逻辑,则也可能某上海现场希望添加后置

2021-03-31 19:42:45 143

原创 雪花算法增强策略-扩充位数

背景目前平台采用雪花算法作为主键生成策略。雪花算法有以下优点:毫秒数在高位,自增序列在低位,整个ID都是趋势递增的。 不依赖数据库等第三方系统,以服务的方式部署,稳定性更高,生成ID的性能也是非常高的。 可以根据自身业务特性分配bit位,非常灵活需求及目标原有的截取IP方式,很大可能性出现重复; 需要将项目代码(AA~99)加入主键生成策略,而项目编码可能组合为1296个,需要占用至少11位的长度方能满足需求; 基于以上需求,共计需要1(首位)+41(时间戳差值)+11(项目编...

2021-03-27 17:15:21 553

原创 项目现场的疑难杂症之攻略

从产品出厂到部署,再到运营,期间各种疑难杂症,且看如何处理1.应用卡顿问题问题描述: 现场打开页面极为卡顿,打开一个页面需要10s以上排查思路:卡顿问题可能由于多重问题引起,首先应排除环境问题,如网络卡顿延迟、网络不通等情况,环境问题排查之后,在考虑是否是代码问题。环境问题可以根据一次请求的各个方面耗时来判断,首先可通过浏览器控制台中请求的Timing来判断。Timing中的ContentDowload时间过长,判断为带宽过小。问题定位:该服务器带宽过小,只有1M,导致网络传输过慢。2.

2021-03-25 20:28:41 175

原创 流程绘制期参考与设计(2)

其实不光参考了这两个产品,对于其他产品也有借鉴。我们设计的初心是为了极大地减少用户配置流程的步骤,恨不得用户新建个流程名录,再绑定个业务程序即可,但实际上并做不到这样,只能每一种功能都要斟酌便捷性。下面就贴出我们最终设计出来的已经实现了的流程绘制期界面。1、整体效果2、节点配置3、连线配置4、同步节点...

2021-03-19 12:58:25 71

原创 刨根问底-修改源码之 设置springboot下quartz启动开关

之前有篇博客说到应用集群(2)-避免定时任务重复执行策略,现在记录一下做法吧。众所周知,springBoot是自动装载的,只要你导入依赖,它就会运行,这很好,但又带来了麻烦因为我们应用服务和定时任务服务是同一个项目,只是出厂的时候要分开部署,他们公用一个application.pro 和 一个quartz.pro文件,所以需要一个开关控制 quartz的启动目前,当启动我们项目的时候,会自动蹦出这些quartz启动信息。[INFO ] [2021-03-19 11:57:28,646]..

2021-03-19 12:49:01 2165 2

原创 Redis集群搭建手册

给公司的某个项目现场写过的Redis集群搭建手册,好记性不如烂笔头,记下来。Redis集群最少需要6个节点,3主3从,可以分布在一台或者多台主机上。本例是在虚拟机上创建集群,不同的端口表示不同的redis节点,如下:主节点:127.0.0.1:8001 127.0.0.2:8003 127.0.0.3:8005从节点:127.0.0.1:8002 127.0.0.2:8004 127.0.0.3:8006以一台虚拟机为例:1.在/usr/local/src/redis-5.0.5/下

2021-03-18 21:03:35 100

原创 流程绘制期参考与设计(1)

笔者现在的公司有自主研发的一套完整的流程引擎,包括流程绘制、流程运行等。随着7代产品的进展,设计新的流程绘制页面也提上了日程。笔者参考了较为主流的流程引擎服务商,以下便是一些归纳和总结。产品一:*******一.界面及操作 1、整体效果(浦发银行诉讼费用申请流程)2、参与人的界定方式与处理方式种类丰富(一个节点参与人仅有一个处理方式)3、字段权限4、事件处理5、高级设置6、连线7、催办督办/强力调整8...

2021-03-18 20:58:19 74

原创 Java与网络安全关联的问题及解决办法

1、私有链接:前端代码里有私有链接,如172.16,即便被注释,也会被利用,应该用域名代理2、安全内容策略:未配置安全内容策略,网页存在被挂载第三方的链接的风险,解决办法:配置全局安全内容策略如:response.addHeader("Content-Security-Policy","default-src'self'https:<ahref="http://api.map.baidu.com/">http://api.map.baidu.com</a>...

2021-03-11 17:15:18 481 1

原创 解决spring下@Autowired注解注入的对象为null的问题

开发过程中,在MaintBusiness.java中注入一个对象:@AutowiredprivateRegionServiceregionService;使用的时候,发现这个service为null,将MaintBusiness加上注解@Component交给Spring管理,仍不能解决问题。追随代码,发现调用的时候是classforName的newInstance实例化的MaintBusiness,和new的差不多。问题很明确,MaintBusiness是被反射调用的,并没有被sp..

2021-03-11 16:59:41 2373 4

原创 spring注入静态对象

private static ProcessSdkService sdkService;@Autowiredpublic void setSdkService(ProcessSdkService sdkService){ //静态变量通过set方法注入 BpmUtils.sdkService = sdkService;}

2021-03-11 16:55:54 150

原创 在Java代码中调用JS的方法

FileReader fileReader = new FileReader(new File(url));//url js为文件路径ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine engine = manager.getEngineByName("javascript");engine.eval(fileReader);if(engine instanceof Invocable){ Invoc.

2021-03-11 16:47:26 247

原创 mybatis批量执行创建表与索引

最近做7代产品的国际化功能,需要批量创建表与索引,这里总结了一下用法,大家可以参考一下,有更好的写法也可一起探讨下:--可惜一个create table 语句中并不能包含创建普通索引的语句,所以只能采用这种写法<update id="createMultiLangTableSql" databaseId="oracle"> <![CDATA[ DECLARE lsql varchar2(4000); BEGIN lsql := '

2021-03-09 16:41:02 1814 1

原创 时间合并算法

需求:任意几段时间,比如 9:00-10:00,11:00-12:00,9:30-11:30,自动输出9:00-12:00;比如 9:00-10:00,11:00-12:00,9:30-10:30,自动输出 9:00-10:30,11:00-12:00//贴出核心部分代码,供大家参考static <T> T combineDate(List<TimeType> list) { Stack<Long> s = new Stack<Long>();

2021-03-08 19:45:23 385

原创 性能压测通用策略

123123

2021-03-08 16:14:11 283

原创 静态资源缓存策略

待补充

2021-03-08 15:51:08 738 1

原创 数据级权限设计与实现

123

2021-03-08 12:43:01 1331

原创 nginx集群转发到80端口出现问题

现象:nginx配置转发到80端口,大量的静态文件无法加载,但是配置非80端口就可以;解决:配置中假如“proxy_http_version 1.1;proxy_set_header Connection”即可;分析:尝试寻找80端口与非80端口的区别,在后台打印日志输出http请求头等对比,未发现异常,后查阅大量资料后发现,80端口会被默认识别成HTTP协议,而非80端口会被识别成TCP协议处理。HTTP请求会默认自动释放连接,导致nginx出现类似远程服务器关闭了连接这个报错。修改方案,将HTT

2021-03-07 19:44:57 498

原创 应用集群(2)-避免定时任务重复执行策略

123123123

2021-03-07 19:33:50 1505

原创 应用集群(3)-文件上传与下载策略

123123

2021-03-05 17:48:14 394

原创 防SQL注入研究与平台应用方案

防SQL注入研究与平台应用方案一、解决SQL注入的常见方案1.1 对SQL参数进行检测与转义 检测的具体内容如下: 1.1.1SQL参数的长度、类型、范围的检测,如参数是否为数值,时间参数是否在一个时间区间之内、字串参数长度是否小于8等,根据具体业务规则定义。 1.1.2SQL参数中特殊字符、SQL关键字的检测,如单引号{‘},分号{;},注释符{--},select,update,insert等。 1.1.3SQL参数16进制的检测,如hex(0xff0...

2021-03-05 17:38:37 102 1

原创 应用集群(4)-会话策略

123

2021-03-05 17:33:05 156

原创 大列表(数组)分为N个长度相等的小列表(数组)

之所以写这个工具类,是产品上关于巨量数据导出的一个需求,废话不说来看代码吧

2021-03-05 11:34:13 222 1

原创 应用集群(1)-节点间的文件同步策略

粑粑

2021-03-05 11:12:31 894 1

原创 Oracle误删数据恢复

把SYS_ORGANIZATION_INFO 表名替换就可以了,可将该表数据恢复到特定时间之前。select * from SYS_ORGANIZATION_INFO as of timestamp to_timestamp('2017-05-30 08:00:00', 'yyyy-mm-dd hh24:mi:ss');alter table SYS_ORGANIZATION_INFO e

2017-06-15 10:33:42 252

通用日志文件(配置信息)

通用日志文件(配置信息)

2019-09-26

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

TA关注的人

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