自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lgxzzz的博客

记录与分享

  • 博客(32)
  • 收藏
  • 关注

转载 阿里云服务器 通过JavaMail发送邮箱STMP问题( 25端口被禁用 使用SSL协议465端口

我们传统使用的比较简单的是STMP 25端口收发邮件今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件开始在网上有说发现是JDK1.8的原因,然后自己也把JDK1.8换到了JDK1.7 还是不行,所以这里排除了JDK的原因。那么问题来了,是否25端口不能连接适用喃?然后在终端输入命令行 ,可测试25端口是否可连接。telnet smtp.163.com 25 返回成功 说明你的服务器 是没有封掉25端口的。上面的图是我自己的电脑,当然能连通。..

2020-12-30 15:59:54 720

转载 ThreadLocal理解及应用

本次给大家介绍重要的工具ThreadLocal。讲解内容如下,同时介绍什么场景下发生内存泄漏,如何复现内存泄漏,如何正确使用它来避免内存泄漏。 ThreadLocal是什么?有哪些用途?ThreadLocal如何使用ThreadLocal原理ThreadLocal使用有哪些坑及注意事项 1. ThreadLocal是什么?有哪些用途? 首先介绍Thread类中属性threadLocals: /* ThreadLocal values pert...

2020-12-30 15:59:01 411

转载 Spring事务篇

写在最前这些天看了一些关于Spring事务的文章,发现写的都很浅,基本上说一下事务特性和Spring事务传播行为就完事了,但是实际上事务不仅有这些,事务的来龙去脉没有讲清楚,具体原理也没有说。现在最新Spring版本已经到了5.2.0,翻了下源码,事务这块核心代码和4.x版本变化不大,所以本文的源码使用了Spring-tx:4.2.5.RELEASE。什么是事务事务存在的目的在日常开发中,我们在数据库中保存数据,在对数据库操作的过程中,为了使数据始终保持“正确”的状态,我们要对访问操作进

2020-12-30 15:56:59 307

转载 使用ThreadLocal请务必remove

场景说明:压测的时候发现调用某个接口同一个入参,返回的商品数据不一致。 使用技术:threadLocal 问题原因:使用ThreadLocal没有remove。 导致问题:1内存溢出,ThreadLocal依赖没有释放,无法GC。 2线程池的某个线程会被反复使用,ThreadLocal的生命周期不等于一次Request的生命周期,造成获取threadLocal内数据异...

2020-12-30 15:55:15 699

转载 升级JDK8的坑--base64

概述Base64是一种字符串编码格式,采用了A-Z,a-z,0-9,“+”和“/”这64个字符来编码原始字符(还有垫字符“=”)。一个字符本身是一个字节,也就是8位,而base64编码后的一个字符只能表示6位的信息。也就是原始字符串中的3字节的信息编码会变成4字节的信息。Base64的主要作用是满足MIME的传输需求。 在Java8中Base64编码已经成为Java类库的标准,且内置了Base64编码的编码器和解码器。问题偶然发现使用jdk8内置的Base64解码器进行解析的时候,会抛出java.l

2020-12-30 15:52:08 1042

转载 Java8特性详解 lambda表达式 Stream

1.lambda表达式Java8最值得学习的特性就是Lambda表达式和Stream API,如果有python或者javascript的语言基础,对理解Lambda表达式有很大帮助,因为Java正在将自己变的更高(Sha)级(Gua),更人性化。--------可以这么说lambda表达式其实就是实现SAM接口的语法糖。lambda写的好可以极大的减少代码冗余,同时可读性也好过冗长的内部类,匿名类。先列举两个常见的简化(简单的代码同样好理解)创建线程排序lambda表达式配合J

2020-12-29 15:39:44 118

转载 简洁又快速地处理集合——Java8 Stream(上)

Java 8 发布至今也已经好几年过去,如今 Java 也已经向 11 迈去,但是 Java 8 作出的改变可以说是革命性的,影响足够深远,学习 Java 8 应该是 Java 开发者的必修课。今天给大家带来 Java 8 Stream 讲解,为什么直接讲这个,是因为只要你学完,立刻就能上手,并能让它在你的代码中大展身手。值得注意的是:学习 Stream 之前必须先学习 lambda 的相关知识。本文也假设读者已经掌握 lambda 的相关知识。本篇文章主要内容:介绍 Stream 以及.

2020-12-29 15:37:45 122

转载 简洁又快速地处理集合——Java8 Stream(下)

上一篇文章我讲解 Stream 流的基本原理,以及它与集合的区别关系,讲了那么多抽象的,本篇文章我们开始实战,讲解流的各个方法以及各种操作 没有看过上篇文章的可以先点击进去学习一下 简洁又快速地处理集合——Java8 Stream(上),当然你直接看这篇也可以,不过了解其本身才能更融会贯通哦。 值得注意的是:学习 Stream 之前必须先学习 lambda 的相关知识。本文也假设读者已经掌握 lambda 的相关知识。 本篇文章主要内容: 流基本的常用方法一种特化形式的流——数值流Op...

2020-12-29 15:37:31 120

转载 Java 异常之 RuntimeException和Exception的区别

在java的异常类体系中,Error和RuntimeException是非检查型异常,其他的都是检查型异常。 所有方法都可以在不声明throws的情况下抛出RuntimeException及其子类 不可以在不声明的情况下抛出非RuntimeException简单的说 非RuntimeException必要自己写catch块处理掉。如果不处理,程序将出现编译错误。 RuntimeException不用try...

2020-12-28 17:10:58 1271

转载 RuntimeException和Exception区别

1.java将所有的错误封装为一个对象,其根本父类为Throwable, Throwable有两个子类:Error和Exception。2.Error是Throwable的子类,用于指示合理的应用程序不应该试图捕获的严重问题。大多数这样的错误都是异常条件。虽然ThreadDeath错误是一个“正规”的条件,但它也是Error的子类,因为大多数应用程序都不应该试图捕获它。在执行该方法期间,无需在其throws子句中声明可能抛出但是未能捕获的Error的任何子类,因为这些错误可能是再也...

2020-12-28 17:08:52 107

转载 Java各种系统架构图及其简介

1.spring架构图Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring框架的功能可以用在任何J2EE服务器中,大多数功能也适用于不受管理的环境。Spring的核心要点是:支持不绑定到特定J2EE服务的可重用业务和数据访问对象。这样的对象可以在不同J2EE环境 (Web或EJB)、独立应用程序、测试环境之间重用。组成Spring框架的每个模块(或组件)..

2020-12-28 17:08:08 1053

转载 Java内存回收机制--Java引用的种类(强引用、弱引用、软引用、虚引用)

写在前面:对Java有一定认识的人都知道,Java有垃圾回收机制,尽管如此,Java同样也会出现内存泄露,本篇系列主要介绍Java的内存回收机制,以及介绍开发过程中内存管理的小技巧。本文参考《疯狂Java-突破程序员基本功的16课》 Java内存管理包括内存分配(创建Java对象)和内存回收(回收Java对象)。这两者都是JVM(Java虚拟机)自动完成,正因如此,可能很多程序员不再关心程序的内存分配。...

2020-12-24 15:53:06 319 1

转载 你了解Java内存模型么(Java7、8、9内存模型的区别)

Java内存模型是每个java程序员必须掌握理解的,这是Java的核心基础,对我们编写代码特别是并发编程时有很大帮助。由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。 首先,我们回顾一下Java程序执行流程: 如上图所示,首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。在整个程序执行过程中,JVM会.

2020-12-24 15:50:39 544 2

转载 java并发之线程间通信协作

  在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去。因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起状态。然后等待消费者消费了商品,然后消费者通知生产者队列有空间了。同样地,当队列空时

2020-12-24 15:48:00 130

转载 Thread类中interrupt()、interrupted()和isInterrupted()方法详解

首先看看官方说明: interrupt()方法 其作用是中断此线程(此线程不一定是当前线程,而是指调用该方法的Thread实例所代表的线程),但实际上只是给线程设置一个中断标志,线程仍会继续运行。 interrupted()方法 作用是测试当前线程是否被中断(检查中断标志),返回一个boolean并清除中断状态,第二次再调用时中断状态已经被清除,将返回一个false。 isInter...

2020-12-23 15:14:48 172

转载 java IO、NIO、AIO详解

目录概述 一、IO流(同步、阻塞) 二、NIO(同步、非阻塞) 三、NIO2(异步、非阻塞)正文回到顶部概述在我们学习Java的IO流之前,我们都要了解几个关键词同步与异步(synchronous/asynchronous):同步是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务是等待当前调用返回,才会进行下一步;而异步则相反,其他任务不需要等待当前调用返回,通常依靠事件、回调等机制来实现任务间次序关系 阻塞与非阻塞:在进行阻塞操作时,当前线程会处于阻塞状态,无法.

2020-12-23 15:13:17 114

转载 Java线程上下文切换

0 前言在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是 多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。再后来发展到多线程技术,使得在一个程序内部能拥有多个线程并行执行。一个线程的执行可以被认为是一个CPU在执行该程序。当一个程序运行在多线程下,就好像有多个CPU在同时执行该程序。多线程比多任务更加有挑战。

2020-12-23 15:10:37 764

转载 Java一个汉字占几个字节(详解与原理)

目录 1、先说重点: 2、以下是源码: 3、运行结果 4、几种编码格式的简单介绍 5、字符编码的历史故事 6、一个字符为什么占两个字节 7、深入分析 Java 中的中文编码问题(转载) Java 中需要编码的场景 Java 中如何编解码 Java Web 涉及到的编码 常见问题分析 编码方案 1、先说重点: 不同的编码格式占字节数是不同的,UTF-8编码下一个中文所占字...

2020-12-22 16:56:14 716

转载 jdk8以上jvm常用参数

这几天一直在折腾jvm调优的事情。作为新手,把自己遇到的问题记录下来。调整jvm参数的方法有很多,网上也到处是,我也看了很多,选择用tomcat进行jvm参数设置。 linux服务器配置: linux系统下的tomcat通过startup.sh启动的 所以我们在catalina.sh正式代码开始之前加上 JAVA_OPTS="-Xms****m -Xmx****m -XX:MetaspaceSize=***...

2020-12-22 16:50:20 122

转载 干货:Java正确获取客户端真实IP方法整理

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。 如果使用了反向代理软件,将http://192.168.1.110:2046/的URL反向代理为http://www.abc.com/的URL时,用request.getRemoteAddr()方法获...

2020-12-22 16:47:12 289

转载 JVM、GC和常用命令

这是11月份的一个分享,借着组内分享的机会,重新梳理了一遍JVM的一些基本概念和学习资料。在这个PPT中,关于G1的部分比较粗略,最近正在恶补G1的知识,后面可能会单独整理一篇分享出来。需要原件的,可以在我的公众号(duqi_Voice)后台回复JVM获取。JVM、GC和常用命令主要内容JVM架构概览JVM架构中影响应用性能的三个主要模块屏幕快照 2018-01-06 17.10.42.png屏幕快照 2018-01-06 17.10.50.png屏幕

2020-12-17 16:02:04 275

转载 使用 VisualVM 进行性能分析及调优

一、概述开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃。为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化。VisualVM 是一款免费的性能分析工具。它通过 jvmstat、JMX、SA(Serviceability Agent)以及 Attach API 等多种方式从程序运行时获得实时数据,从而进

2020-12-17 15:54:41 1565

转载 jvm优化(二)JVM 内存大小设置

Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对Java JVM有关内存方面的知识进行详细介绍。一、Java JVM内存介绍JVM管理两种类型的内存,堆和非堆。按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。简单来说堆

2020-12-17 15:52:19 513

转载 jstat命令查看jvm的GC情况 (以Linux为例)

jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下:jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数]注意!!!:使用的jdk版本是jdk8. 类加载统计: Loaded:加载class的数量 Bytes:所占用空间大小 Unloaded:未加载数量 Bytes:未加载占用空间 Time:时间 编译统计 Compiled:编译数量。 Failed:失败数量 Invalid:不可用数量 Time...

2020-12-16 14:23:25 2100

转载 java GC jvm 内存分布 和新生代,老年代,永久代,(详细)

如果大家想深入的了解JVM,可以读读周志明《深入理解Java虚拟机:JVM高级特性与最佳实践》 需要掌握的东西,包括以下内容、判断对象存活还是死亡的算法(引用计数算法、可达性分析算法)、常见的垃圾收集算法(复制算法、分代收集算法等以及这些算法适用于什么代)以及常见的垃圾收集器的特点(这些收集器适用于什么年代的内存收集)。 JVM运行时数据区由程序计数器、堆、虚拟机栈、本地方法栈、方法区部分组成,结构图如下所示。 JVM内存结构由程序计数器、堆、栈、本地方法栈...

2020-12-16 14:23:15 1090

转载 Java系列笔记(3) - Java 内存区域和GC机制

目录Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器Java垃圾回收概况  Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢。这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制。概括地说,该机制对JVM(Java Virtual

2020-12-16 14:18:41 100

转载 同包同名的类的时候,使用哪个,哪个优先

最近项目中,遇到了一个问题,起因是这个样子的:项目A,它是一个web项目(使用spring开发,tomcat下部署,提供jsp页面,供用户使用),会引入产品包,暂且用product.jar来代替产口包吧吧。web项目最后会打成war包来部署。项目B,它呢,不需要页面,换言之,它也是web项目(使用spring开发,tomcat下部署),只是单纯的引入spring的定时任务来处理业务数据。说到底,它也是一个web项目,只不过不需要html,jsp这些东东,类似于windows里的服务吧,不需要有GUI

2020-12-15 18:15:59 1941

转载 java8 手把手教你学会写lambda表达式

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star,留言,一起学习进步 Java8发布已经有一段时间了,这次发布的改动比较大,很多人将这次改动与Java5的升级相提并论。Java8其中一个很重要的新特性就是lambda表达式,允许我们将行为传到函数中。想想看,在Java8 之前我们想要将行为传入函数,仅有的选择就是匿名内部类...

2020-12-15 18:15:00 229

转载 从零开始玩转JMX(一)——简介和Standard MBean

JMX的全称为Java Management Extensions. 顾名思义,是管理Java的一种扩展。这种机制可以方便的管理、监控正在运行中的Java程序。常用于管理线程,内存,日志Level,服务重启,系统环境等。 简介 基本术语 MBean:是Managed Bean的简称,可以翻译为“管理构件”。在JMX中MBean代表一个被管理的资源实例,通过MBean中暴露的方法和属性,外界可以获取被管理的...

2020-12-15 18:13:17 187

转载 JDBC之获取插入语句返回的主键

该获取主键并不是绝对的,也和具体的数据库实现的驱动有关。 package cn.itcast.jdbc;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import...

2020-12-15 18:03:00 380

转载 java-JDBC-ResultSet详解(java数据库操作)

这篇文章并没有给出如何使用ResultSet的具体例子,只是从ResultSet的功能性上进行了详细的讲述。希望这篇文章对大家理解ResultSet能够有所帮助。下面就是这篇文章的具体内容。结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同时还具有操纵数据的功能,可能完成对数据的更新等。结果集读取数据的方法主要是getXXX(),他的参数可以使整型表示第几列(是从1开始的),还可以是列名。返回的是对应的XXX类型的值。

2020-12-15 18:00:00 965

转载 使用JDBC连接数据库(一)

JDBC是由java编程语言编写的类及接口组成,同时它为程序开发人员提供了一组用于实现对数据库访问的JDBC API,并支持SQL语言。利用JDBC可以将JAVA代码连接到oracle、DB2、SQLServer、MYSQL等数据库,从而实现对数据库中的数据操作的目的。一、JDBC简介JDBC全称为:Java Data Base Connectivity (java数据库连接),可以为多种数据库提供填统一的访问。JDBC是sun开发的一套数据库访问编程接口,是一种SQL级的API。它是由java语言

2020-12-15 17:58:13 216

空空如也

空空如也

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

TA关注的人

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