自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李子的博客

以梦喂马,驰骋岁月,以梦为马,诗酒趁年华。

  • 博客(54)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 记一次 Java 进程里面获取 Mysql 连接超时的问题排查(OOM)

   页面前端频繁出现 500 的报错,查看后端报错日志,发现了大量的 An attempt by a client to checkout a Connection has timed out.排查 Mysql 连接之后发现没有问题,最终发现到内存溢出的问题,利用 jmap dump 出内存里面的对象定位到代码位置

2022-11-12 23:50:21 1808 1

原创 Java 中如何优雅的关闭进程&线程

java 进程会在正常关闭的时候执行用户注册的关闭钩子函数,当钩子函数执行完毕之后才会退出程序。钩子函数执行完毕所有线程也会死亡,这个一般来说应该是用户来设置手动退出的,但是如果你忽略了线程的关闭,那么进程退出的时候会被强制 kill。我们可以使用中断标记来进行线程间的交互,进而主动结束线程而不是交由进程来帮你体面。

2022-10-30 00:17:08 4645

原创 python SSH 库--paramiko

文章目录一. 服务器 SSH 登录二. 脚本操作  1.登录服务器  2.上传文件  3.切换用户  4.执行 shell 脚本  5.获取脚本输出,执行完成自动退出三. python 脚本一. 服务器 SSH 登录日常工作中 SSH 登录服务器查看问题排查问题已经是常规操作,但是最近由于需要在服务器上做一些繁琐的操作重复测试一些东西,干脆就想写一个脚本去一键操作,最开始想到的是 shell 脚本,无奈 shell 这语言太让人头大,写过一次不想写二次的那种,而且需要在目标服务器上执行。在百度了

2021-10-30 17:50:20 968

原创 SQL执行不存在则插入(Mysql,幂等)

一. 线程状态索引类型(常见的数据库书籍中的关于索引类别的一些称呼):  ①唯一索引:不允许其中任何两行具有相同值的索引    使用主键和候选键建立的索引就是唯一索引,因为主键和候选键都可以确定唯一一个元组,即一张表中不存在相同的主键和候选键。在MySQL中,当你建立一个主键和候选键之后,MySQL会为它们分别建立索引。毕竟要想满足唯一性,依然会在更新数据的时候检验是否已经存在该主键或者候...

2020-11-30 00:38:33 2424

原创 Java线程同步的Join()原理

在使用线程实现诸如A->B->C这样的时候,想到的无疑就是join()方法,看了一下方法的源码,然后也是各方搜集了一下资料才明白其中的原理,这篇文章就记录一下当时的困惑。在我查看源码注释的时候,发现了两个线程this thread和current thread,this指的当然是调用方法的this对象的线程,而current却是指的是当前正在运行的线程,请注意他们的区别。/** * Waits at most {@code millis} milliseconds for this

2020-06-10 18:53:18 539

原创 python+selenium(chrome)框架的一些鼠标操作

浏览器向下滑动加载AJAX请求内容,当内容div高度不再增加可认为加载全部数据 @staticmethod def scroll(spider): """ 滚动浏览器加载所有数据,浏览器内容尺寸不再变化则说明数据以及加载完毕 :param spider: 浏览器 :return: """ ...

2020-03-21 15:31:02 518

原创 【解决】HttpClient:org.apache.http.client.protocol.ResponseProcessCookies

 错误:2019-03-02 19:18:53 WARN org.apache.http.client.protocol.ResponseProcessCookies - Invalid cookie header: "Set-Cookie: FSSBBIl1UgzbN7N80T=111Wl2a.lZ4ICh0Path=/; expires=Tue, 27 Feb 2029 11:25:...

2019-03-02 20:24:40 5989 3

原创 HtmlUnit的工具类(请求头,JavaScript,AJAX,验证代理服务器)

一. HtmlUnitUtilspackage org.spider.htmlunit;import com.gargoylesoftware.htmlunit.BrowserVersion;import com.gargoylesoftware.htmlunit.DefaultCredentialsProvider;import com.gargoylesoftware.htmlun...

2019-02-20 20:16:52 2903 5

原创 ThreadLocal和InheritableThreadLocal变量的作用域

一. 什么是变量的作用域?   常见的作用域:类变量>对象变量>函数变量  ①.类变量:static修饰,这个类的所有对象共享同一个类变量,仅在类初始化的时候被初始化一次,有默认值  ②.全局变量:非static的普通成员属性,每一个对象都拥有自己的对象变量,每次new对象的时候被初始化,有默认值  ③.局部变量:函数内部的变量,仅在执行该方法时存在于栈空间,

2019-01-27 17:08:00 820

原创 基于AOP的环绕通知的日志配置

一. 什么是日志?  在服务器应用中,日志起着至关重要的作用,详细的日志记录可以使我们在寻找问题的时候一下就定位到关键位置。日志信息的关键就是明确详细的记录问题的位置和出错信息。在一个服务器接口的入口和退出之前我们往往需要对日志工具进行说明配置日志的模块,分类,过滤信息等等内容。而这些数据,却是刚好可以使用切面来进行配置。二. 日志切面类(环绕通知)@Componentpublic cl...

2019-01-27 12:04:50 1368

原创 爬虫之加密JS原理

一. 什么是JS加密?  ①加密JS:对JS源码进行加密<script type="text/javascript"> window.onload=function(){ var _$cP=document.getElementById(_$xg('KkA6KOpFiYE')); _$eM(_$cP.name,_$n0(_$cP,_$tq('eavul')));};&l...

2019-01-20 15:09:38 3619 3

原创 线程池的一些理解

文章目录一. 什么是线程池?下面我先介绍一些词汇:  ①原生线程:操作系统级别拥有资源,可独立调度  ②线程对象:代码级别的线程,只有在start之后虚拟机才创建真正的线程去执行    当我们调用thread.start()之后,虚拟机会为我们去申请操作系统的资源,创建一个操作系统级别的原生线程,这样才能够实现多个线程并发执行。但是创建原生线程所消耗的资源是比较大的,而线程池就是复用原...

2019-01-05 19:20:59 215

原创 Mysql数据库隔离级别(ANSI SQL92规范,行锁,间隙锁)

一. 什么是数据库隔离级别?  ANSI(美国国家标准学会:AMERICAN NATIONAL STANDARDS INSTITUTE)在多个事务并发的时候能够正确的处理数据所定义的规范。事务隔离级别越高,数据的正确性和数据库的完整性也就越高,但是数据并发处理的效率就会有所降低。二.数据隔离级别及其可能导致的问题? Ⅰ.数据隔离级别   ①.Read UnCommitte...

2018-09-08 15:49:08 2368

原创 Java关键字之volatile(可见性,有序性)

一. volatile关键字是什么?当一个变量定义为volatile之后,它将具备两种特性:   ①保证此变量对所有线程的可见性     当一条线程修改了这个变量的值,新值对于其他线程可以说是可以立即得知的。Java内存模型规定了所有的变量都存储早主内存,每条线程还有自己的工作内存,线程的工作内存保存了该线程使用到的变量在主内存的副本拷贝,线程对变量的所有操作都必须在工作内存...

2018-09-07 18:09:21 3081

原创 电商网站项目总结(分布式多模块+SSM+Mysql+Redis+ActiveMQ)

电商网站项目总结(分布式多模块+SSM+Mysql+ActiveMQ+HTTPClient+Dubbo+短信验证码+Redis

2018-09-04 16:05:16 4447 4

原创 SpringMVC编写登录权限拦截器

登录拦截器:一个网站总会有页面是需要用户已经登录过才能访问的,比如购物车,个人详情页等等,拦截器可以对访问这些页面的请求做一个拦截,在判断是否存有用户登陆后的cookie或者session之后对其放行或者是重定向到登录页面

2018-08-24 11:03:37 672

原创 Nginx服务器代理静态资源

添加一个server节点到nginx.conf文件中:访问itemimage文件夹下面的静态资源应该是#1+#2,如下访问资源12.png应该是image.yufan.com/12.png. 将#2改为/itemimage/,#3改为H:/IntelliJ IDEA 2018.1.2/Projects/yufan/admin/src/main/webapp后访问路径变为image.yufan.com/itemimage/12.png

2018-08-13 14:40:57 2981

原创 Intellij IDEA配置Maven(内置Maven和修改本地仓库地址和阿里云中央仓库)

一. 更改说明1.Intellij IDEA是有自己的Maven插件的,我们只需要配置一下就可以2.默认仓库位置为C:\Users\账户.m2\repository,如果不更改仓库就会占用C盘空间,反正我的使用没多久仓库就是几个G大小了。二. 配置说明 1.File->Settings,搜索maven,就可以看到如下界面:注意配置未见的位置和后面两个Override打√ ...

2018-08-10 14:17:54 38771 3

原创 Java函数传参(String的不可变性)

   本篇博客无意讨论Java里面函数传参是否只有值传递还是值传参和引用传参同时存在,仅讨论函数传参的一些原理。   一. 什么是函数传参?最常见的一个swap函数:下面这个swap函数并不能实现我们想要的交换的功能,因为它传递的是基本数据类型。类似于C++的值传递:二级指针和指针引用函数传参(C++)。这里是Java的函数传参,所以下面将分别介绍两种传参的方式。...

2018-07-20 15:17:27 2580

原创 Java中的前向引用与类初始化顺序

一.什么是向前引用?   有过C++编程经验的就会知道,一个变量或者方法总是需要先声明再使用。那么Java里面如下的代码是可以的吗?public class GoFirst{ int m = n;//illegal forward reference,无法编译,报错 int n = 1; }也许我们可以做一些迷惑编译器的代码以达到前向引用的目的。publi...

2018-05-26 17:31:50 3247

原创 【解决】com.mysql.cj.jdbc.Driver failed to unregister it /Abandoned connection cleanup thread

错误:16-May-2018 19:34:22.638 警告 [main] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc The web application [ziyue] registered the JDBC driver * [com.mysql.cj.jdbc.Driver] but fai...

2018-05-16 20:38:51 33313 7

原创 SSM框架项目结构以及版本匹配

一.SSM框架项目结构  1.java     ①.bean层:实体类     ②controller层:SpringMVC的控制类     ③.mapper层:mapper接口和mapper.xml文件     ④service层:服务类  2.resources     ①.applicationContent.xml:Spring的配置文件(Mybatis的配...

2018-05-15 18:39:11 5307 1

原创 Web4.0中web.xml头信息

Web4.0:<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta

2018-05-13 18:55:22 12240

原创 【解决】org.apache.tomcat.util.descriptor.web.WebXml.setVersion Unknown version string [4.0]

错误:    在idea创建WEB项目之后,打印出的日志中总是出现:12-May-2018 15:52:30.692 警告 [RMI TCP Connection(3)-127.0.0.1] org.apache.tomcat.util.descriptor.web.WebXml.setVersion Unknown version string [4.0]. Default version w...

2018-05-12 16:20:30 53310 8

原创 Windows下Java的反汇编(.class字节码文件->汇编代码)

1.准备工具   HSDIS插件下载地址 2.将插件放至文件夹    将下载的插件解压得到两个dll文件放到JDK_HOME/jre/bin/client和JDK_HOME/jre/binserver目录下 3.编译生成汇编代码    将插件放置好了之后,就可以使用java命令携带参数进行编译。由字节码得到的汇编代码将输出在控制台。java -X...

2018-05-07 18:00:18 2225 1

原创 数据库索引(B树,B+树,哈希)

数据库索引是存储引擎用于快速找到记录的一种数据结构。         《高性能MySQL》一. 什么是索引?    索引的目的就是便于快速查找。一本书的索引就是目录,可以让我们快速定位到要查找的内容;数据库的数据是以记录的方式存在的,所以索引的目的就是便于查找某一些记录。索引类型(常见的数据库书籍中的关于索...

2018-05-05 13:39:49 18337 4

原创 MySQL Workbench添加外键(物理模型),Database到EER

1.打开MySQL Workbench,如图所示即可创建物理模型 2.选择如图所示就可以创建表 3.Foreign key Name:外键名,即别称,可自定义 Referenced Table:外键指向的表 Column:当前表的外键,注意仅选择当前需要定义的外键 Referenced Column:外键指向其他表的列 4.上图的连线代表创建了两个外键...

2018-05-01 21:07:34 28185 3

原创 【解决】The import javax.servlet cannot be resolved

错误: 我这里是因为在Eclipse中导入Myeclipse项目之后报了这个错。这是因为缺少了Tomcat相关的包导致的错误。当我们在Eclipse中创建Web项目的时候,这个包会随着项目的创建而被导入,但是项目的导入导出却不会带上这些包。(如果你运行在Myeclipse中的项目使用的版本是Tomcat7,而Eclipse中的是Tomcat8.5,试想一下如果将这些包一起拷贝到新的环境中是...

2018-04-27 23:17:06 19336 2

原创 条件化的Bean

假设你需要某个Bean只有当某个特定的Bean声明了之后或者是只有某个环境变量设置之后才会创建,那么你可以使用下面的方法来实现。1.需要条件判断之后才创建的Bean@Bean@Conditional(Father.class)//调用Father类的matches方法判断,如果结果为true就创建这个//Bean,否则就不创建;设置给@Conditional的类可以是任何实现了Co...

2018-04-19 18:37:57 252

原创 Java之运行时数据区

根据《Java虚拟机规范(Java SE 7版)》的规定,Java虚拟机所管理的内存将会以下几个运行时数据区: 一.程序计数器:可看做当前线程所执行的字节码的行号指示器 1.在虚拟机的概念模型里,字节码解释器通过改变这个计数器的值来选取下一条需要执行的字节码指令;分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖计数器完成。 2.在任何一个确定的时刻。一个处理器只会执行...

2018-04-17 21:23:28 178

原创 《Effective Java》之覆盖equals()时总要覆盖hashCode()

1.为什么覆盖equals()时总要覆盖hashCode()? 如果不这样做的话,就会违反了Object.hashCode()的通用约定。 通用约定如下:只要对象的equals()方法的比较操作所用到的信息没有被修改,那么多洗调用hashCode()方法都必须返回同一个整数。如果两个对象equals()判断相等,那么其hashCode()返回值也相等。如果两个对象ha...

2018-04-09 17:34:04 214

原创 《Effective Java》之覆盖equals请遵守通用约定

1.java.lang.Object实现的equals()方法如下:Object类实现的equals()方法仅仅在两个变量指向同一个对象的引用时才返回true。//JDK1.8中的Object类的equals()方法public boolean equals(Object obj) { return (this == obj); }2.既然Java已经为我们提...

2018-04-03 14:38:28 304

转载 【转载】JAVA 内存泄露详解(原因、例子及解决)

Java的一个重要特性就是通过垃圾收集器(GC)自动管理内存的回收,而不需要程序员自己来释放内存。理论上Java中所有不会再被利用的对象所占用的内存,都可以被GC回收,但是Java也存在内存泄露,但它的表现与C++不同。 JAVA 中的内存管理 要了解Java中的内存泄露,首先就得知道Java中的内存是如何管理的。 在Java程序中,我们通常使用new为对...

2018-03-31 17:12:10 202

原创 《Effective Java》之避免创建不必要的对象

一.重用不可变的对象1.String str="Are You ok?"; //而不是String str=new String("Are You ok?"); 如果字符串的内容不变且该对象需要被多次使用,那么可以使用上面推荐的创建字符串的方式将其放于常量池中(常量池简介)。它可以保证,对于所有在同一虚拟机中运行的代码,只要它们包含相同的字符串字面常量,该对象就

2018-03-31 16:12:17 246

原创 《Effective Java》之私有构造器强化不可实例化的类

1.怎样的类不需要实例化? 有些时候有些类可能只是包含一些静态的属性和方法,这样的类是不要实例化的。如果我们不为其创建构造函数,Java也会提供一个默认的无参构造函数,可是这样也许会被实例化。那么声明这个类为抽象类呢?毕竟抽象类本身不能被实例化。可是抽象类的存在是为了继承,也许这个抽象类会使别人认为这个类是可继承的,即使类本身只有静态成员。2.为这个类编写私有构造函数,防止这个类被实...

2018-03-31 14:18:30 175

原创 《Effective Java》之Builder Pattern

如果类的构造器或静态工厂具有多个输入参数,在调用Object(1.0,2.0,3.0,4.0,5.0,6.0)的时候你也许会记不住这么多参数具体对应的属性,再者如果一个类具有较多的需要初始化的属性的时候,那么它的构造函数想必也是需要多个(依然免不了前面看起来较多的参数传入),你需要实现具有1,2,,,个参数的构造函数。 那么接下来这样的方法也许能够改变你上面的烦恼。1.需要构...

2018-03-31 12:53:50 369 1

原创 有序符号表(二叉树实现,JAVA,算法(四))

二叉树的实现和链表的节点是一致的,一个节点里面包含了键值对。只是由于二叉树的特性,便于插入,删除,查询等操作。二叉树的性质使这些操作都可以在logN的时间完成。但是,,,由于执行插入操作的不确定性,比如大多的升序或者降序插入,将导致二叉树的高度像链表一样,不再具有二叉树特有的logN的高度了。所以基于二叉树之上,一种可以维持自身高度的树出现了,那就是红黑树。下一篇再介绍红黑树。package com

2017-08-14 11:24:50 499

原创 有序符号表(数组实现,JAVA,算法(四),二分法)

数组实现的有序符号表介绍: 两个平行数组,相同的下标分别是键和值,由于查入和删除需要调整数组大小,所以和无序链表一样,这两个操作仍然是线性的。但是符号表最为频繁的操作应该是查询的,查询操作可以使用二分法实现,达到了logN的复杂度。二分法的实现需要排好序的键,所以有了泛型的存在,需要实现Comparable接口。rank函数用二分法查找键,在很多函数里面我们都会使用这个函数

2017-08-14 10:49:45 1077

原创 无序符号表(链表实现,JAVA,算法(四))

符号表简介:将键和值联系起来。能够将键值对插入符号表并希望在以后可以使用键找到对应的值。 链表作为一种简单的数据结构,也是最开始学习的,它可以稍加修改一下便可以用来实现队列和栈其它的数据结构。符号表使用链表无非就是实现简单,将它的每一个节点保存对应的键值对,就可以达到遍历键而找到值的操作了。链表的操作大都是线性的,例如无序插入(这里虽然是头结点插入,但由于需要遍历链表以查询是否重复键,也达到了线

2017-08-14 09:49:31 960

原创 【解决】项目启动停在Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource

错误: 今天启动几周前的WEB项目的时候就一直卡在如下语句,重启了几次Tomcat都是这样,百度了一下有人说是数据库的问题,于是尝试打开SQL Sever Management Studio尝试连接数据库,显示无法连接了。明白了是数据库连接的问题。 解决办法: 这个无法连接到数据库的问题是数据库相应的服务没有启动,Windows开始按钮右键选择搜索,输入服务,进入到服务...

2017-06-07 11:14:34 61730 14

mybatis-generator工具包

mybatis-generator.zip逆向代码生成工具,包含mybatis-3.4.6.jar,,,mybatis-generator-core-1.3.6.jar,,,mysql-connector-java-8.0.11.jar共三个文件,当前最新

2018-05-13

HSDIS工具(.class->汇编)

已经编译好的Windows上的HSDIS库,放在JDK_HOME/jre/bin/client和JDK_HOME/jre/binserver文件夹下就可以使用,具体使用命令可查看博客https://blog.csdn.net/qq_32483145/article/details/80229140

2018-05-07

jdk1.8.0_101源码

Java8源码Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。 Java可运行于多个平台,如Windows, Mac OS,及其他多种UNIX版本的系统。

2018-04-21

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

TA关注的人

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