
Java
文章平均质量分 51
开着奥迪卖小猪
走在成为大牛的路上!
展开
-
数据库MySQL的应急处理
数据库CPU使用率过高通过监控面板确认数据库qps是否有突增,如果突增,则进行qps突增应急预案处理 查看数据库慢sql,如果存在大量慢sql,则启动慢sql应急预案处理qps突增应急预案查看数据库当前的大量的qps来自于哪里 通过sql定位到这些请求来自于哪个服务 能否定位到服务对应的接口,如果能则限流该接口,如果不能则限流整个应用。慢sql的应急预案查看数据库当前慢sql 通过慢sql定位到对应应用 能否定位到服务对应的接口,如果能则限流该接口,如果不能则限流整个应用。...原创 2021-04-11 21:23:16 · 1734 阅读 · 0 评论 -
Java进程CPU使用率过高 排查
简要步骤:top (找到最耗cpu的进程) top -Hp 1 (找到最耗cpu的进程的最耗cpu的线程) top -H -p PID printf "%x\n" 10854 (将线程pid转换为16进制,结果2a66) /opt/jdk1.8.0_231/bin/jstack 1|grep '0x2a66' -C20 --color (查看进程堆栈,找到最耗cpu的那个线程在干嘛 20行) 背景某服务器上部署了若干tom...原创 2021-04-11 11:01:11 · 933 阅读 · 0 评论 -
代码整洁之道
混乱的代价稍后等于永不 – 勒布朗法则 简单代码规则 能通过所有的测试 没有重复的代码 体现系统中的全部设计理念 包括尽量少的实体,比如类,方法,函数等 更改的原则 更改一个变量名 拆分一个过长的函数 消除重复的代码 清理嵌套的if语句 函数函数要么做事情,要么回答什么事 要么do什么操作 要么返回值 这种指定需要分割开 使用异常替代返回的错误码 多使用抛出异常 抽离Try/catch 代码块 错误处理只做一件事 如果错误基类...原创 2020-09-17 20:54:59 · 237 阅读 · 0 评论 -
阿里巴巴共享服务中心:淘宝四大服务中心
本章将介绍阿里巴巴共享服务中心的架构,以及在架构转变的过程中,技术团队对如何建设共享服务中心的思考,包括在过去几年建设历程中,我们沉淀出的一些建设原则。 在阿里巴巴集团的中台战略中,共享服务中心是中台架构的基石,如何构建稳定可靠、最高效地支撑上层业务快速创新的共享服务能力是中台战略成功落地的关键。 一般来说,服务能力包括两个层次,一个层次是底层PaaS的能力...转载 2020-04-02 10:46:55 · 772 阅读 · 0 评论 -
java 反射机制之 getDeclaredMethod()获取方法,然后invoke执行实例对应的方法
关于反射中getDeclaredMethod().invoke()的学习,来源于项目中的一行代码:SubjectService.class.getDeclaredMethod(autoMatchConfig.getMethodName(), Integer.class).invoke(subjectService, GlobalConfig.OPEN_TO_IPLAN);获取反射的方法有...转载 2020-02-25 16:45:52 · 1425 阅读 · 0 评论 -
Double型比较大小 compareTo()
public class DoubleCompare { public static void main(String[] args) { Double d1 = 100.0; Double d2 = 90.0; Double d3 = 150.005; int i = 10; System.out...原创 2019-09-20 11:05:09 · 7098 阅读 · 1 评论 -
布隆过滤器 bloom
布隆过滤器的应用:https://blog.youkuaiyun.com/kzadmxz/article/details/100640815 布隆过滤器是Burton Howard Bloom在1970年提出来的,一种空间效率极高的概率型算法和数据结构,主要用来判断一个元素是否在集合中存在。因为他是一个概率型的算法,所以会存在一定的误差,如果传入一个值去布隆过滤器中检索,可能会出现检...原创 2019-09-08 22:43:43 · 364 阅读 · 0 评论 -
缓存雪崩、缓存穿透、缓存击穿
一、缓存雪崩 当缓存大规模渗透在整个架构中以后,那么缓存本身的可用性将决定整个架构的稳定性。 缓存雪崩是指设置缓存时采用了相同的过期时间,导致缓存在某一个时刻同时失效,或者缓存服务器宕机宕机,导致缓存全面失效,请求全部转发到了DB层面,DB由于瞬间压力增大而导致崩溃。 缓存失效导致的雪崩效应对底层系统的冲击是很大的。解决方式: 1. 对缓存的访问,如果发现从缓存...原创 2019-09-08 22:20:08 · 636 阅读 · 0 评论 -
slf4j与logback冲突,导致 log4j.properties不起作用,疯狂打印debug级别日志
1、bug现象:生产环境,日志级别不受控,疯狂打印debug级别的日志,也连不到日志平台kibana。 此时已不能回滚,因为,新上的RPC接口,已经被别的系统依赖。 除了日志问题,其它一切正常。 所以当前方法是,赶紧找到问题所在,解决掉。2、将生产问题尝试在测试环境复现 ...原创 2019-07-31 22:48:04 · 4012 阅读 · 0 评论 -
聊聊 “触发器 trigger” 引发的bug
1、生产bug这是一个A系统从B系统同步项目信息的job。2、排查后台报错:java.sql.SQLException: ORA-01795: maximum number of expressions in a list is 1000原因:in里面最多1000个值,如果in的括号里面超过了1000个值,就会报这个错误。经查,sqlMapping...原创 2019-07-30 22:41:47 · 1504 阅读 · 0 评论 -
【安全漏洞】XStream 远程代码执行高危漏洞
老铁们,又来漏洞啦...https://help.aliyun.com/noticelist/articleid/1060033733.html?spm=5176.12809143.sas.63.2cb0QyZfQyZfwl原创 2019-07-30 16:09:23 · 2308 阅读 · 0 评论 -
【安全漏洞】jackson-databind漏洞、 异常NoClassDefFoundError: Could not initialize class com.fasterxml.jackson
一、jackson-databind漏洞 国家信息安全漏洞库:http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD=CNNVD-201906-867 二、发现项目中有使用2.6.3版本的jackson,所以进行升级 jackson-databind 升级到2.9.9.1、 jackson...原创 2019-07-25 00:54:40 · 14589 阅读 · 5 评论 -
Solr+Zookeeper 搭建搜索集群SolrCloud
目录一、简介1、SolrCloud是个什么玩意?2、Solr是个什么玩意?3、zookeeper是个什么玩意?4、实现负载均衡的方式: (Nginx、Redis槽、Zookeeper)二、SolrCloud的结构1、物理结构2、逻辑结构三、SolrCloud的搭建(3个zookeeper、4个solr)1、3台zookeeper搭建2、4台solr 实例...原创 2019-07-20 15:50:46 · 3645 阅读 · 1 评论 -
【安全漏洞】CSRF漏洞攻击:原理、检测、防御、实践
目录一、CSRF漏洞攻击原理1、CSRF攻击原理图2、CSRF攻击实例二、CSRF漏洞检测三、防御CSRF攻击1、验证 HTTP Referer 字段2、在请求地址中添加 token 并验证3、在 HTTP 头中自定义属性并验证四、生产bug实践1、生产csrf漏洞发现,见jira截图2、解决策略:法1:加拦截器,校验referer字段法2:加验...原创 2019-06-16 16:48:21 · 3483 阅读 · 0 评论 -
e.printStackTrace()
目录一、含义二、不建议使用e.printStackTrace()三、建议使用 logger.error();一、含义catch(Exception e) { e.printStackTrace();} 当try语句中出现异常是时,会执行catch中的语句,java运行时系统会自动将catch括号中的Exception e 初始化,也就...原创 2019-05-07 09:55:17 · 40973 阅读 · 8 评论 -
idea 中文乱码
一、问题描述: 写单元测试,测试远程服务接口时,遇到中文乱码问题,造成传参错误。 如下图 二、解决方法: 看右下角,已经是UTF8,如图 (注:这里只是表示当前这个文件的编码方式,如果改变当前文件的编码,可以直接右击\File Encoding\...修改为UTF8) 继续找问题所在 prefere...原创 2019-01-03 20:01:27 · 3040 阅读 · 0 评论 -
JVM基本结构
原创 2018-09-24 21:57:47 · 163 阅读 · 0 评论 -
String转long、Long.valueOf() 和 Long.parseLong()区别
1、java中如何将 string 转化成 long 方法1: long l = Long.valueOf("String"); 方法2: long l = Long.parseLong(“String”); 或 long l = Long.parseLong(“String”, int radix); 2、Long.ValueOf("Stri...原创 2018-08-10 17:01:56 · 14530 阅读 · 0 评论 -
optimist.RemovedByAnotherUserException
Exception:Case: se.spagettikod.optimist.RemovedByAnotherUserException 原因:B系统同步A系统的用户,手动导入user数据时,lock_version字段导为null了,所以报错(乐观锁或被删除)(optimist.RemovedByAnotherUserException)...原创 2018-06-26 20:21:42 · 392 阅读 · 0 评论 -
long型转String
三种方法:package cn.success;/** * long型转String * @author: WYC * @date: 2018/6/6 19:55 */public class Test { public static void main(String[] args) { long a1 = 12; St...原创 2018-06-06 19:57:55 · 169911 阅读 · 1 评论 -
StringUtils.trim()
1、 public static String trim(String str) 去掉字符串两端的控制符(control characters, char <= 32) , 如果输入为 null 则返回null 下面是示例: StringUtils.trim(null) = null StringUtils.trim("") = "" StringU...原创 2018-06-05 12:56:26 · 9330 阅读 · 0 评论 -
Column 'PROJECT_NAME' in field list is ambiguous
此问题出现在多表查询中,这个是由于参数'PROJECT_NAME' 存在多表中,没有声明是哪一个表的参数;解决方法:表名.参数原创 2018-05-31 11:14:43 · 7595 阅读 · 2 评论 -
UTF-8和GBK的区别
字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。 至于UTF-8编码则是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的论坛则用UTF-8节省空间。 GBK包含全部中文字符;UTF-8则包含全世界所有国家需要用到的字符。 GBK是在国家标准GB2312基础上扩容后兼容GB2312...原创 2018-05-28 15:18:32 · 15930 阅读 · 1 评论 -
CollectionUtils
import org.apache.commons.collections.CollectionUtils;isEmpty():判断集合是否为空: CollectionUtils.isEmpty(null): true CollectionUtils.isEmpty(new ArrayList()): true CollectionUtils.isEmpty({a,b}): falsei...原创 2018-05-23 16:42:04 · 2223 阅读 · 0 评论 -
Arrays.asList() 详解
【1. 要点】该方法是将数组转化成List集合的方法。List<String> list = Arrays.asList("a","b","c");注意:(1)该方法适用于对象型数据的数组(String、Integer...)(2)该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean)(3)该...原创 2018-05-21 16:49:30 · 198078 阅读 · 40 评论 -
equals()、null、NullPointerException 问题浅析
用equels()方法时,前面一定不能有null,不然会报空指针异常错误,因为null不是对象,不能调equels()方法,可能为null的对象要放到后面。测试:正确写法: @Test public void test(){ String flag = null; if("string".equals(flag)){ Sys...原创 2018-05-18 12:59:17 · 6916 阅读 · 0 评论 -
StringUtils中 isNotEmpty 和isNotBlank的区别
StringUtils中的非空判断方法:isNotEmpty()、isNotBlank() IsNotEmpty():判断某字符串是否非空,不能排除空格字符StringUtils.isNotEmpty(null) = falseStringUtils.isNotEmpty("") = falseStringUtils.isNotEmpty(" ") = trueStringUtils.isNotE...原创 2018-05-16 12:36:25 · 1036 阅读 · 0 评论 -
Idea debug时报错:Command line is too long
问题:写单元测试,debug时,报错如下图解决方法:在项目/.idea/workspace.xml文件中添加一行代码如下<component name="PropertiesComponent"> ... <property name="dynamic.classpath" value="true" /></component>...原创 2018-05-15 14:43:52 · 50420 阅读 · 6 评论 -
clone()方法、深复制和浅复制
clone方法 Java中没有明确提供指针的概念和用法,而实质上没个new语句返回的都是一个指针的引用,只不过在大部分情况下开发人员不需要关心如何去操作这个指针而已。 在实际编程中,经常会遇到从某个已有对象A创建出另一个与A具有相同状态的对象B,并且B的修改不会影响到A的情况,例如Prototype(原型)模式中,就需要clone一个对象实例。 仅仅通过简单的复制操作显然无法达到这个目原创 2017-06-30 15:02:35 · 1516 阅读 · 0 评论 -
public static void main(String[] args){} 关于Java main()方法
是Java程序的入口方法,JVM在运行程序时,会首先查找main()方法。 public是权限修饰符,表明任何类或对象都可以访问这个方法; static表明main()方法是一个静态方法,即方法中的代码时存储在静态区的,只要类被加载后,就可以使用该方法而不需要通过实例化对象来访问,可以直接通过 类名.main() 直接访问; void表明方法没有返回值; main是JVM识别的特殊原创 2017-06-30 15:02:30 · 15359 阅读 · 1 评论 -
线程池? 如何设计一个动态大小的线程池,有哪些方法?
【线程池? 如何设计一个动态大小的线程池,有哪些方法?】线程池:顾名思义就是事先创建若干个可执行的线程放入一个池(容器)中, 需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中, 从而减少创建和销毁线程对象的开销。系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互。此时,使用线程池可以很好地提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑原创 2017-06-30 15:01:28 · 3010 阅读 · 0 评论 -
==、equals、hashCode区别?
【==、equals()、hashCode()区别?】1)== 运算符用来比较两个变量的值是否相等。即该运算符用于比较变量对应得内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用“==”运算符。 2)equals 是Object类提供的方法之一。每一个Java类都继承自Object类,所以每一个对象都具有equals这个方法。Object类中定义的equ原创 2017-06-30 15:01:24 · 336 阅读 · 0 评论 -
什么是守护线程?
【什么是守护线程?】Java提供了两种线程:守护线程和用户线程。 守护线程又被称为“服务进程”“精灵线程”“后台线程”,是指在程序运行是在后台提供一种通用的线程,这种线程并不属于程序不可或缺的部分。 通俗点讲,任何一个守护线程都是整个JVM中所有非守护线程的“保姆”。用户线程和守护线程几乎一样,唯一的不同之处就在于如果用户线程已经全部退出运行,只剩下守护线程存在了,JVM也就退出了。 因为原创 2017-06-30 15:01:11 · 313 阅读 · 0 评论 -
break、continue、return
【break continue return】 break退出循环,可以使用break 语句直接强行退出循环,忽略循环体中任何其他语句和循环条件测试。在循环中遇到break语句时,循环被终止,程序控制在循环后面语句重新开始。例如 如果for 循环被设计为从 0执行到99,然后输出0到99这些数字,但是当i等于10时,break语句终止程序。所以程序只会输出0到10。在一系列嵌套循环中使用b原创 2017-06-30 15:01:07 · 1027 阅读 · 0 评论 -
Java创建对象的4种方式?
【Java创建对象的4种方式?】1)通过new语句实例化一个对象2)通过反射机制创建对象3)通过clone()方法创建一个对象 (复制)4)通过反序列化方式创建对象原创 2017-06-30 15:01:02 · 1047 阅读 · 0 评论 -
Student s = new Student();在内存中做了哪些事情?
【Student s = new Student();在内存中做了哪些事情?】 1加载Student.class文件进内存 2在栈内存为s开辟空间 3在堆内存为学生对象开辟空间 4对学生对象的成员变量进行默认初始化 5对学生对象的成员变量进行显示初始化 6 通过构造代码块对学生对象进行初始化(若没有就不执行) 7通原创 2017-06-30 10:16:44 · 2123 阅读 · 0 评论 -
警告: A C3P0Registry mbean is already registered. This probably means that an application...
问题描述:六月 23, 2017 9:16:59 下午 com.mchange.v2.log.MLog 信息: MLog clients using java 1.4+ standard logging.六月 23, 2017 9:16:59 下午 com.mchange.v2.c3p0.C3P0Registry banner信息: Initializing c3p0-0.9.2-p原创 2017-06-23 21:32:07 · 5718 阅读 · 1 评论 -
Caused by: java.lang.NoClassDefFoundError: org/jboss/logging/BasicLogger
六月 22, 2017 5:12:01 下午 org.apache.catalina.core.ApplicationContext log信息: No Spring WebApplicationInitializer types detected on classpath六月 22, 2017 5:12:02 下午 org.apache.catalina.core.ApplicationCo原创 2017-06-22 17:22:03 · 8953 阅读 · 2 评论 -
Caused by: java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector
六月 22, 2017 5:04:08 下午 org.apache.catalina.core.ApplicationContext log信息: No Spring WebApplicationInitializer types detected on classpath六月 22, 2017 5:04:09 下午 org.apache.catalina.core.ApplicationCo原创 2017-06-22 17:11:31 · 1782 阅读 · 2 评论 -
ERROR JDBCExceptionReporter:234 - Data truncation: Incorrect datetime value:
问题描述: 13:31:07,645 WARN JDBCExceptionReporter:233 - SQL Error: 0, SQLState: 22001 13:31:07,646 ERROR JDBCExceptionReporter:234 -Data truncation: Incorrect datetime value: '' for column '*原创 2017-06-20 15:33:56 · 4372 阅读 · 1 评论