Java
文章平均质量分 81
李子树呢
以梦喂马,驰骋岁月,以梦为马,诗酒趁年华。
展开
-
记一次 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 · 2110 阅读 · 1 评论 -
Java 中如何优雅的关闭进程&线程
java 进程会在正常关闭的时候执行用户注册的关闭钩子函数,当钩子函数执行完毕之后才会退出程序。钩子函数执行完毕所有线程也会死亡,这个一般来说应该是用户来设置手动退出的,但是如果你忽略了线程的关闭,那么进程退出的时候会被强制 kill。我们可以使用中断标记来进行线程间的交互,进而主动结束线程而不是交由进程来帮你体面。原创 2022-10-30 00:17:08 · 5207 阅读 · 0 评论 -
Java中的前向引用与类初始化顺序
一.什么是向前引用? 有过C++编程经验的就会知道,一个变量或者方法总是需要先声明再使用。那么Java里面如下的代码是可以的吗?public class GoFirst{ int m = n;//illegal forward reference,无法编译,报错 int n = 1; }也许我们可以做一些迷惑编译器的代码以达到前向引用的目的。publi...原创 2018-05-26 17:31:50 · 3301 阅读 · 0 评论 -
Java函数传参(String的不可变性)
本篇博客无意讨论Java里面函数传参是否只有值传递还是值传参和引用传参同时存在,仅讨论函数传参的一些原理。 一. 什么是函数传参?最常见的一个swap函数:下面这个swap函数并不能实现我们想要的交换的功能,因为它传递的是基本数据类型。类似于C++的值传递:二级指针和指针引用函数传参(C++)。这里是Java的函数传参,所以下面将分别介绍两种传参的方式。...原创 2018-07-20 15:17:27 · 2645 阅读 · 0 评论 -
Java关键字之volatile(可见性,有序性)
一. volatile关键字是什么?当一个变量定义为volatile之后,它将具备两种特性: ①保证此变量对所有线程的可见性 当一条线程修改了这个变量的值,新值对于其他线程可以说是可以立即得知的。Java内存模型规定了所有的变量都存储早主内存,每条线程还有自己的工作内存,线程的工作内存保存了该线程使用到的变量在主内存的副本拷贝,线程对变量的所有操作都必须在工作内存...原创 2018-09-07 18:09:21 · 3133 阅读 · 0 评论 -
线程池的一些理解
文章目录一. 什么是线程池?下面我先介绍一些词汇: ①原生线程:操作系统级别拥有资源,可独立调度 ②线程对象:代码级别的线程,只有在start之后虚拟机才创建真正的线程去执行 当我们调用thread.start()之后,虚拟机会为我们去申请操作系统的资源,创建一个操作系统级别的原生线程,这样才能够实现多个线程并发执行。但是创建原生线程所消耗的资源是比较大的,而线程池就是复用原...原创 2019-01-05 19:20:59 · 279 阅读 · 0 评论 -
ThreadLocal和InheritableThreadLocal变量的作用域
一. 什么是变量的作用域? 常见的作用域:类变量>对象变量>函数变量 ①.类变量:static修饰,这个类的所有对象共享同一个类变量,仅在类初始化的时候被初始化一次,有默认值 ②.全局变量:非static的普通成员属性,每一个对象都拥有自己的对象变量,每次new对象的时候被初始化,有默认值 ③.局部变量:函数内部的变量,仅在执行该方法时存在于栈空间,原创 2019-01-27 17:08:00 · 899 阅读 · 0 评论 -
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 · 2958 阅读 · 5 评论 -
【解决】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 · 6380 阅读 · 3 评论 -
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 · 2268 阅读 · 1 评论 -
Java之运行时数据区
根据《Java虚拟机规范(Java SE 7版)》的规定,Java虚拟机所管理的内存将会以下几个运行时数据区: 一.程序计数器:可看做当前线程所执行的字节码的行号指示器 1.在虚拟机的概念模型里,字节码解释器通过改变这个计数器的值来选取下一条需要执行的字节码指令;分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖计数器完成。 2.在任何一个确定的时刻。一个处理器只会执行...原创 2018-04-17 21:23:28 · 215 阅读 · 0 评论 -
《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 · 324 阅读 · 0 评论 -
Spring+Myecilpse+SqlServer2012配置(+C3P0)
初学Spring不久,在配置数据库连接的时候花费了差不多一天时间,所以记下来以后以便查阅也方便了一下新手。下面分别介绍是否使用C3P0连接池的两种方法。两个项目结构均如下: 一.Spring+Myecilpse+SqlServer2012+C3P0配置 1.Spring相应包加入类路径下 这一步不用详细解释吧,如果你连Spring的包都不能引入,那你还是学了Spring再来吧原创 2017-03-18 14:20:27 · 2777 阅读 · 0 评论 -
无序符号表(链表实现,JAVA,算法(四))
符号表简介:将键和值联系起来。能够将键值对插入符号表并希望在以后可以使用键找到对应的值。 链表作为一种简单的数据结构,也是最开始学习的,它可以稍加修改一下便可以用来实现队列和栈其它的数据结构。符号表使用链表无非就是实现简单,将它的每一个节点保存对应的键值对,就可以达到遍历键而找到值的操作了。链表的操作大都是线性的,例如无序插入(这里虽然是头结点插入,但由于需要遍历链表以查询是否重复键,也达到了线原创 2017-08-14 09:49:31 · 1105 阅读 · 0 评论 -
有序符号表(二叉树实现,JAVA,算法(四))
二叉树的实现和链表的节点是一致的,一个节点里面包含了键值对。只是由于二叉树的特性,便于插入,删除,查询等操作。二叉树的性质使这些操作都可以在logN的时间完成。但是,,,由于执行插入操作的不确定性,比如大多的升序或者降序插入,将导致二叉树的高度像链表一样,不再具有二叉树特有的logN的高度了。所以基于二叉树之上,一种可以维持自身高度的树出现了,那就是红黑树。下一篇再介绍红黑树。package com原创 2017-08-14 11:24:50 · 526 阅读 · 0 评论 -
《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 · 403 阅读 · 1 评论 -
《Effective Java》之私有构造器强化不可实例化的类
1.怎样的类不需要实例化? 有些时候有些类可能只是包含一些静态的属性和方法,这样的类是不要实例化的。如果我们不为其创建构造函数,Java也会提供一个默认的无参构造函数,可是这样也许会被实例化。那么声明这个类为抽象类呢?毕竟抽象类本身不能被实例化。可是抽象类的存在是为了继承,也许这个抽象类会使别人认为这个类是可继承的,即使类本身只有静态成员。2.为这个类编写私有构造函数,防止这个类被实...原创 2018-03-31 14:18:30 · 205 阅读 · 0 评论 -
《Effective Java》之避免创建不必要的对象
一.重用不可变的对象1.String str="Are You ok?"; //而不是String str=new String("Are You ok?"); 如果字符串的内容不变且该对象需要被多次使用,那么可以使用上面推荐的创建字符串的方式将其放于常量池中(常量池简介)。它可以保证,对于所有在同一虚拟机中运行的代码,只要它们包含相同的字符串字面常量,该对象就原创 2018-03-31 16:12:17 · 287 阅读 · 0 评论 -
【转载】JAVA 内存泄露详解(原因、例子及解决)
Java的一个重要特性就是通过垃圾收集器(GC)自动管理内存的回收,而不需要程序员自己来释放内存。理论上Java中所有不会再被利用的对象所占用的内存,都可以被GC回收,但是Java也存在内存泄露,但它的表现与C++不同。 JAVA 中的内存管理 要了解Java中的内存泄露,首先就得知道Java中的内存是如何管理的。 在Java程序中,我们通常使用new为对...转载 2018-03-31 17:12:10 · 214 阅读 · 0 评论 -
《Effective Java》之覆盖equals()时总要覆盖hashCode()
1.为什么覆盖equals()时总要覆盖hashCode()? 如果不这样做的话,就会违反了Object.hashCode()的通用约定。 通用约定如下:只要对象的equals()方法的比较操作所用到的信息没有被修改,那么多洗调用hashCode()方法都必须返回同一个整数。如果两个对象equals()判断相等,那么其hashCode()返回值也相等。如果两个对象ha...原创 2018-04-09 17:34:04 · 227 阅读 · 0 评论 -
【转载】面试中的排序算法总结
前言查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。对这两种排序的代码一定要信手拈来才行。还有插入排序、冒泡排序、堆排序、基数排序、桶排序等。面试官对于这些排序可能会要转载 2016-12-03 18:33:36 · 532 阅读 · 0 评论