Java开发
春秋战国程序猿
仓廪实而知礼节,衣食足而知荣辱
展开
-
用plantuml画时序图
Thread线程的状态有哪些,我们用plantuml来画一下时序图。原创 2023-05-08 10:46:31 · 488 阅读 · 1 评论 -
java基础:如何获取Unsafe类的实例
Unsafe类是一个final类,位于rt.jar包下,是sun公司提供的一个工具类。这个类提供了执行native方法的能力,首先,官网不推荐我们直接使用Unsafe,原因如它的名字一样,不安全。为什么不安全呢,因为native方法直接调用操作系统的指令来执行,效率很高,但是不受jvm控制,因此容易出问题。当然,如果你艺高人胆大,建议剑走偏锋!但是我们在源码中,经常能看到Unsafe的身影,那么,如何获取Unsafe实例呢?可以借鉴caffeine的做法。源码如下:publ..原创 2020-09-25 15:06:54 · 842 阅读 · 0 评论 -
阿里Fastjson:搞定json字符串转对象首字母大写的问题/格式化日期显示时间戳的问题
世界之大,无奇不有。虽然java规范明确规定字段名称首字母必须小写。但是实际开发中,总能遇到接口方强行定义成大写的情况。怎么解决呢?使用阿里fastjson即可。原创 2020-09-06 15:11:28 · 2859 阅读 · 7 评论 -
MQ和ELK,增加了日常排查问题的复杂度
最近遇到一个问题,排查了很久,才解决。这里分享一下思路,遇到问题的思路更重要,有时候,就是看你有没有思路。就怕没有了思路,那样就病急乱投医了。问题描述:原创 2020-07-13 12:40:38 · 548 阅读 · 0 评论 -
开发常用小工具类:list集合去重
在平时的项目维护中,我们经常会操作大批量的数据。比如,我需要把某个excel中所有的手机号复制出来,然后去重。对于这样的需求,通过今天分享的这个小工具类,可以轻松搞定。mark一下吧!package com.yangcq.learning.hantang.utils;import lombok.extern.slf4j.Slf4j;import java.util.*;/** * List去重 */@Slf4jpublic class DuplicateRemov.原创 2020-06-02 15:15:40 · 508 阅读 · 0 评论 -
java异常信息捕获:为什么不建议使用e.printStackTrace()
考考大家:e.printStackTrace() 会把堆栈异常信息写到哪里:1,磁盘2,内存3,文件这个问题答案不难,但是你搞清楚了以后,就不会再这样打印日志了。--------> 正确答案见下面的留言。毕竟,内存贵啊,富豪才能任性使用。码农使用的时候,要悠着点...至于该如何优雅的打印日志,可以参考我的上一篇博客《Spring Cloud如何优雅打...原创 2020-03-31 11:10:09 · 3664 阅读 · 3 评论 -
java对象转map:PropertyUtilsBean#describe方法对象转Map,为什么多余一个class
通常,我们项目都有一个这样的工具类:import org.apache.commons.beanutils.PropertyUtils;import java.util.Map;public class BeanUtilsTest { public static void main(String[] args) { ProductDto produ...原创 2020-03-10 17:03:42 · 1320 阅读 · 0 评论 -
附代码:java导出的CSV文件中,字段内容中包含分隔符(如英文逗号,英文双引号)的处理方案
Talk is cheap, show me the code./** * CSV字段内容中包含分隔符(如英文逗号,英文双引号)的处理方案 * * 字段中包含有英文逗号,该字段必须用英文双引号括起来 * 字段中包含有英文双引号,该字段必须用额外的双引号括起来 */public class JavaExportCsvFieldContentParse { /...原创 2020-01-03 17:17:28 · 4541 阅读 · 0 评论 -
根据经纬度计算两点之间的直线距离(算法)
Talk is cheap, show me the code.import lombok.extern.slf4j.Slf4j;/** * 根据经纬度,计算2点之间的直线距离。 * 距离较近的场景,可以使用,误差较小。 * 距离较远的场景,要考虑具体的业务场景。 * 因为这个只是计算直线距离,和实际的路线不同,所以要结合场景,看是否适用 */@Slf4jpub...原创 2019-12-26 17:09:51 · 4041 阅读 · 0 评论 -
如何在lambda内部修改外部局部变量的值/如何用lambda重构for循环计数
Talk is cheap, show me your code!看一段代码:/** * 在lambda表达式内部,修改lambda表达式外部的局部变量的值 */private synchronized void updateLocalVariable() { List<String> list = new ArrayList<>(); ...原创 2019-11-28 09:32:20 · 11541 阅读 · 2 评论 -
web应用的入口:web.xml核心配置文件详解
前言:如果要了解web项目的底层实现,web.xml配置文件,是必须要掌握的。web.xml配置文件,是web项目的核心,web项目的启动,从这里开始。为了方便大家理解,我们从最常见的配置开始着手来说明。一,contextConfigLocationcontextConfigLocation用来配置自定义的配置文件的加载路径,如果指定了contextConfigLocati原创 2016-09-29 05:17:20 · 8051 阅读 · 1 评论 -
Java代理模式详解及案例分析:静态代理/动态代理
标题:Java代理模式详解及案例分析:静态代理/动态代理我们以几个问题,来开始我们今天的学习,如果下面几个问题,你都能说出个一二,那么恭喜你,你已经掌握了这方面的知识。1,什么是代理模式?2,Java中,静态代理与动态代理的区别?3,Spring使用的是JDK的动态代理,还是CGLIB的动态代理?4,JDK的动态代理的实现原理?5,JDK的动态代理与CGLIB的动态代理转载 2016-11-03 19:56:58 · 4370 阅读 · 0 评论 -
Java三大器之监听器(Listener)的工作原理和代码演示
现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要作用是:做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。首先来看一下ServletContextListener接口的源代码转载 2016-10-22 12:00:19 · 62339 阅读 · 8 评论 -
String 和 StringBuffer 的对比总结
String 和 StringBuffer 的对比总结1,从基本概念上来说,String是一个类,一旦生成对象,就不可修改了。进行2个字符串操作时,需要生成一个新的字符串对象,实际上操作的是2个对象。StringBuffer也是一个类,和String不同的是,StringBuffer是一个字符串池。2,从内存分配上来说,String对象一旦生成,内存就是固定的,这就是我们说原创 2016-09-23 20:03:20 · 978 阅读 · 0 评论 -
java异常Throwable和Sping事务控制的异常回滚
java异常Throwable和Sping事务控制的异常回滚 今天的讨论以一个项目中的实际问题入手:在后台管理系统中,对敏感数据的操作,都需要记录审计日志。我们以修改为例,这个过程可以分解为2步操作,对某个数据的修改和插入日志。并且这2个操作具有原子性,要么都执行,要么都不执行。 很显然,这里需要进行事务控制。在当前流行的Sping框架中,我们使用Spring的原创 2017-05-15 19:34:04 · 2611 阅读 · 0 评论 -
Hibernate与Mybatis的区别要点整理
Hibernate与Mybatis的区别概述:本文不深入讨论Hibernate与Mybatis详细区别,而是结合面试中的需求,从总体上快速记忆。条例清晰,易于记忆。结合本人平时的使用,归纳出以下8个关键字,读者可以结合这些关键字,进行回忆,这样能够给大家提供一个清晰的思路,即全面又快速。一,概念1,ORM框架二,自动化ORM框架1,是否是自动化;2,什么原创 2016-09-13 23:12:13 · 1346 阅读 · 0 评论 -
Java三大器之过滤器(Filter)的工作原理和代码演示
一、Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静态图片文件或静态html文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。 Servlet API中提供了转载 2016-10-15 10:14:54 · 100252 阅读 · 12 评论 -
java集合汇总-Map-Set-HashMap等的区别与联系<未完待续>
一,Map二,HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 1,HashMap不是线程安全的;2,HashMap允许key为null;3,HashMap允许va转载 2016-04-04 20:06:06 · 1095 阅读 · 0 评论 -
Java工程师成神之路
Java工程师成神之路一,基础篇1.1 JVM1.1.1 Java内存模型,Java内存管理,Java堆栈,Java垃圾回收1.1.2 了解JVM各种参数及调优1.1.3 学习使用Java工具,jps、jstack、jmap、jconsole、jinfo、jhat、javap1.1.4 自己编写各种 OutOfMomory、StackOverFlow程序Heap转载 2016-11-12 08:36:43 · 2093 阅读 · 3 评论 -
Java中的不可变类的概念及实现思路分析
一道面试题:什么是不可变类,请试着设计一个不可变类。 不可变类,可以理解为,只允许读,不允许修改的类。类的对象一旦创建,就不能再进行修改了。Java语言之所以设计有很多的不可变类,主要是不可变类具有下面的优点:使用简单、线程安全、节省内存。但是缺点也很明显,不可变类的对象会因为值的不同,而产生新的对象,比如我们在进行字符串的修改操作时,会生成多个String对象。import j转载 2016-11-16 20:25:20 · 823 阅读 · 0 评论 -
动态代理的疑问:在程序的编译阶段,new操作都做了什么
OK ,我们来回顾一下,之前的博文《Java代理模式详解及案例分析:静态代理/动态代理 》提出的几个问题:1,什么是代理模式?2,Java中,静态代理与动态代理的区别?3,Spring使用的是JDK的动态代理,还是CGLIB的动态代理?4,JDK的动态代理的实现原理?5,JDK的动态代理与CGLIB的动态代理的实现上,有何不同?6,你知道的,还有其他动态代理技术吗?请简述实原创 2017-01-14 06:40:11 · 1369 阅读 · 2 评论 -
BigDecimal.setScale()方法用于商业计算的精度设置问题详解
BigDecimal.setScale()方法用于商业计算的精度设置问题详解 网上的说法繁杂,看起来诸多不便,并且有的说法也不太准确,在这里 做一下求证。用的较多的4个参数:BigDecimal.ROUND_UP 这个方法做直接进位处理,但是有个特殊情况需要考虑,如果将要舍弃的位上的值是0,不做进位处理。BigDecimal.ROUND_DOWN 这个方法做直接舍弃处理原创 2017-08-01 09:48:26 · 1848 阅读 · 0 评论 -
UUID的含义及实现原理
我先抛出来一个问题:UUID能保证全世界唯一吗?有哪位大佬有想法,可以留言讨论一下,谢谢!一,UUID的含义 UUID含义是通用唯一识别码 (Universally Unique Identifier),这是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Com...转载 2019-06-15 15:51:03 · 16636 阅读 · 2 评论 -
spring MVC如何在JSP页面输出map中的值
SpringMVC如何在JSP页面显示数据?或者说springMVC如何在JSP页面取map值?首先,SpringMVC是支持JSTL的,并且jstl标签的性能也是较好的。所以,我们可以用基本的JSTL表达式来显示数据,和使用其他标签库一样的道理,使用JSTL标签库,我们也要先导入JSTL标签库,也就是在jsp头文件中加入声明:在SpringMVC框架中使用JSTL标签库,原创 2015-12-22 01:04:26 · 14876 阅读 · 0 评论 -
Java中的注解/注释详解(Override/Deprecated/SuppressWarning)
Java中的注解/注释详解Java中的注释主要有以下三种:Override/Deprecated/SuppressWarning,接下来我们主要讨论这3个注解的内容。一,什么是注释(注解) 在Java中,注解和注释,我们可以理解为同一个概念。说起注释,我们需要先知道什么是元metadata,这个单词我们国内一般翻译为元数据,所谓元数据,就是数据的数据。也就是说,元转载 2016-08-07 16:46:22 · 16707 阅读 · 0 评论 -
深入Java虚拟机-- Java语法糖
深入Java虚拟机-- Java语法糖概述:语法糖(Syntactic Sugar),是编程语言提供的一些方便程序员开发的语法,这些语法在编译期间会按照预先的规则,被还原成基本的Java语法。主要目的是方便程序员开发使用,减少出错。package com.yangcq.action;import java.util.HashMap;import java.util.原创 2016-07-20 22:38:06 · 895 阅读 · 0 评论 -
浅谈Java中的Set、List、Map的区别
集合是java基础中比较重要的一个知识点。无论是面试,还是平时的工作和学习中,经常能遇到。这里做一个总结,也是一个不断记忆学习的过程。 什么是数组:数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)。 什么是集合:JAVA集合可以存储和操作数目不固定的一组数据。 所有的JAVA集合都位于java.util包中。 JAVA集合只能存放引用类型的数转载 2016-03-20 14:08:21 · 2880 阅读 · 0 评论 -
Spring框架中如何读取Spring的XML配置文件
今天我们来说说Spring框架中如何读取Spring的XML配置文件,通常Spring的配置文件是applicationContext.xml 或者 spring-servlet.xml 也可能是自定义的XML配置文件。我们通常将这些文件放在/项目名称/WEB-INF/目录下,比如:/SpringTest/WEB-INF/applicationContext.xml/SpringT原创 2016-01-11 17:55:53 · 9973 阅读 · 0 评论 -
Java向MySQL数据库插入时间类型Date数据时需要注意的问题
MySQL默认的数据类型格式是:yyyy-MM-dd,如:2015-12-30如下图:因此我们在往MySQL数据库中插入数据时,需要先进行格式化。在java中,我们通常这样格式化日期: //生成日期对象 Date current_date = new Date(); //设置日期格式化样式为:y原创 2015-12-26 21:24:56 · 34624 阅读 · 1 评论 -
SpringMVC框架中多数据源的配置问题、datasource
多数据源,说白了,就是多数据库。因为我们配置数据源需要指定特定的数据库名称,如下,这是我们经常使用的配置数据源的XML文件内容中的一部分: <!-- <property name="driverClassName" value="com.mysql.jdbc.Driver"> <property原创 2016-01-09 16:10:47 · 15629 阅读 · 5 评论 -
java中如何反向输出字符串
//定义一个静态的字符串变量 public static String static_string = ""; /* * 问题:如何反向输出字符串 * 1,用StringBuffer */ public static StringBuffer exchangeString_1(String str){ String原创 2015-12-23 13:59:48 · 15457 阅读 · 0 评论 -
JavaScript如何获取被选中的a标签的值
JavaScript难点解答:要获得指定的a标签的值,我们首先要用JavaScript找到这个a标签,这是一个难点,如何获取被选中的A标签的值,通过下面这种方法,我们就可以获得a标签的href的值,还可以获得a标签的innerHTML,这里我们使用的是原生的JavaScript代码,没有框架。第一部分:JavaScript代码//获取被选中的a标签的值function ge原创 2015-12-22 15:01:19 · 12124 阅读 · 0 评论 -
java基础知识:运算符与、按位与操作讲解
总结一点经验,结合一个实例,和大家分享:5&4 = ? /*答案: * 5&4 = 4 * 解答过程:先把5和4转化成二进制,算出结果(二进制) * 然后把二进制转化成10进制,就是最终的结果。 * * 1,首先转换成2进制,5转化成二进制是0000010原创 2015-12-22 00:06:51 · 1111 阅读 · 0 评论 -
java实现的简单网页爬虫:Servlet + MySQL5.5
/* * * JavaSpier的目标: * * 1,我们要获取的是 * http://commons.apache.org/proper/commons-fileupload/apidocs/src-html/org/apache/commons/ * Apache org.apache.commons站点下的所有源代码文件,也就是最终的.html文件。 *,2,我们原创 2016-01-03 15:48:29 · 3272 阅读 · 3 评论 -
java源码分析:从System类中获取系统关键属性信息
我们来看一下java系统关键类System:public final class System,这是一个final类型的类,不能被继承。/** * The System class contains several useful class fields * and methods. It cannot be instantiated. * * Among the原创 2015-12-31 19:57:20 · 1677 阅读 · 0 评论 -
java实现的简单网页爬虫:Servlet 搜索引擎核心爬虫程序(三)
/** * * @author Administrator * * JavaSpider 1.6 版本 * * 1,对所有的目标网址进行抽取,得到目标java文件,也就是我们需要的java源文件; * 2,将所有的java源文件保存到对应的java文件中,保存到本地硬盘的指定目录下; * 3,我们需要一个java工具类,或者方法,用来生成唯一的java源文件名原创 2016-01-17 01:04:01 · 3275 阅读 · 0 评论 -
java实现的简单网页爬虫:Servlet + MySQL5.5(二)
java实现的简单网页爬虫:Servlet + MySQL5.5(二)在 java实现的简单网页爬虫:Servlet + MySQL5.5 进行了改善,将爬取的网址,进行分类保存。/* * * @author Administrator * * 在JavaSpider 1.3 的基础上,对爬取的网址,进行分类存储 * * 1,把temp_url 临时网址,存储到临原创 2016-01-16 15:32:58 · 996 阅读 · 0 评论 -
sitemesh/decorators装饰器与jsp页面中include的区别
今天研究了一下项目中使用的装饰器框架:sitemesh相同点:都能提高公共模块的复用性,提高开发效率。不同点:include需要把需要用到的jsp文件写死到每一个jsp文件中,而sitemesh则是动态的,使用filter过滤response请求,然后把装饰完成的页面,返回给前端。区别还是很大的,我们可以简单的理解:sitemesh是动态的,提供了更高的灵活性;而传统的原创 2016-02-29 18:21:14 · 5729 阅读 · 0 评论 -
Quartz定时任务框架使用流程和实战小项目源码/完整版
我们通过一个简单的Java Project项目来看一下,Quartz框架任务调度的使用流程。这里我们用Maven管理。1,其中的pom.xml文件内容如下:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:s原创 2016-07-24 17:57:26 · 3851 阅读 · 1 评论 -
Java三大特性之多态:从JVM的角度来看多态
案例分析:Fish jiyu_1 = new Jiyu(); 我们把Fish称为变量的静态类型,把Jiyu称为变量的实际类型。静态类型和实际类型,在程序中都可能变化,区别是静态类型的最终版本在编译期间是可知的,而实际类型的变化,只有到了程序运行期间(Runtime)才可知。上面的代码中,在调用eat方法时,方法的调用者都为duotaiLearning的情况下,使用哪个重载版本,取决于传入参数的数量和数据类型。编译器(不是虚拟机)在重载时,通过参数的静态类型来决定重载哪个版本,因为这三个eat方法原创 2016-07-23 17:00:31 · 2245 阅读 · 1 评论