JDK

Java日期时间API系列33-----Jdk8中java.time包中的新的日期时间API类应用,格式化常用模板大全,新增Excel常用格式。

牧云@^-^@ 提交于 2020-10-15 07:15:37
  从 Java日期时间API系列10-----Jdk8中java.time包中的新的日期时间API类的DateTimeFormatter 中可以知道常用字符有超过20几种,各种组合结果非常多。但常用的组合就几十种,现在在 xk-time的原有模板中增加了Excel常用格式,方便大家使用。 直接看下代码: package com.xkzhangsan.time.formatter; /** * 日期格式化常用模板 * * @author xkzhangsan * @date 2020年5月23日 */ public class DateFormatPattern { private DateFormatPattern(){ } // ==================================yyyy-MM-dd相关Pattern================================== /** * yyyy-MM-dd 比如: 2020-05-23 */ public static final String YYYY_MM_DD = "yyyy-MM-dd" ; /** * yyyy-M-d 不补0 比如: 2020-5-23 */ public static final String YYYY_M_D = "yyyy-M-d" ; /** * yyyyMMdd

java环境变量

∥☆過路亽.° 提交于 2020-10-15 03:55:54
今天使用idea的时候,总是启动不起来,后来启动32的exe文件,提示jdk设置问题,下面记录jdk设置信息 设置 : JAVA_HOME D:\Java\jdk1.8.0_111 设置 : Path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 设置:classpath 注意前面有一点 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 然后使用java 或者javac 或者java -version 来源: oschina 链接: https://my.oschina.net/feixuewuhen/blog/4296852

给我半首歌的时间,给你说明白Immutable List

笑着哭i 提交于 2020-10-15 02:20:15
先看再点赞,给自己一点思考的时间,微信搜索【 沉默王二 】关注这个靠才华苟且的程序员。 本文 GitHub github.com/itwanger 已收录,里面还有一线大厂整理的面试题,以及我的系列文章。 Immutable List,顾名思义,就是,啥,不明白 Immutable 是什么意思?一成不变的意思,所以 Immutable List 就是一个不可变的 List 类,这意味着该 List 声明后,它的内容就是固定的,不可增删改的。 如果对不可变类比较陌生的话,可以先点击下面的链接查看我之前写的另外一篇文章。 这次要说不明白immutable类,我就怎么地 如果尝试对 List 中的元素进行增加、删除或者更新,就会抛出 UnsupportedOperationException 异常。 另外,Immutable List 中的元素是非 null 的,如果使用 null 来创建 Immutable List,则会抛出 NullPointerException;如果尝试在 Immutable List 中添加 null 元素,则会抛出 UnsupportedOperationException。 那 Immutable List 有什么好处呢? 它是线程安全的; 它是高效的; 因为它是不可变的,就可以像 String 一样传递给第三方类库,不会发生任何安全问题。 那接下来

Java 中 String 对 null 对象的容错处理!

十年热恋 提交于 2020-10-14 23:04:38
作者:肖汉松 blog.xiaohansong.com/2016/03/13/null-in-java-string/ 最近在读《Thinking in Java》,看到这样一段话: _Primitives that are fields in a class are automatically initialized to zero, as noted in the Everything Is an Object chapter. _ _But the object references are initialized to null, and if you try to call methods for any of them, you’ll get an exception-a runtime error. _ Conveniently, you can still print a null reference without throwing an exception. 大意是:原生类型会被自动初始化为 0,但是对象引用会被初始化为 null,如果你尝试调用该对象的方法,就会抛出空指针异常。通常,你可以打印一个 null 对象而不会抛出异常。 第一句相信大家都会容易理解,这是类型初始化的基础知识,但是第二句就让我很疑惑:为什么打印一个 null 对象不会抛出异常

JIT的Profile神器JITWatch

对着背影说爱祢 提交于 2020-10-14 20:45:10
简介 老是使用命令行工具在现代化社会好像已经跟不上节奏了,尤其是在做JIT分析时,使用LogCompilation输出的日志实在是太大了,让人望而生畏。有没有什么更加简便的方法来分析JIT日志呢?快来和小师妹一起来学习JITWatch吧。 什么是JIT 小师妹,F师兄,JIT就是Just In Time compilers。能不能再总结一下JIT到底是做什么的呢? 当然没问题,JIT主要有两个作用,第一个作用大家应该已经知道了,就是在运行时将byte code编译成为机器码,提高程序的执行速度。 第二个作用就是在运行时对代码进行优化,同样的也对性能进行提升。 JIT中有两种编译器,C1代表的是Client Compiler,C2代表的是Server Compiler。 其中C1只是简单的编译,而C2在收集到更多信息之后,会进行更加深入的编译和优化。 常见的优化手段有:Loop unrolling, Inlining, Dead Code Elimination,Escape analysis, Intrinsics, Branch prediction等。 JDK8中会默认启动分层编译。你也可以使用-XX:+TieredCompilation来手动启动它。 JITWatch简介 小师妹:F师兄

Java 面试知识点解析(三)——JVM篇

让人想犯罪 __ 提交于 2020-10-14 19:40:31
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文: 知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大部分内容参照自这一篇文章,有一些自己补充的,也算是重新学习一下 Java 吧。 前序文章链接: Java 面试知识点解析(一)——基础知识篇 Java 面试知识点解析(二)——高并发编程篇 (一)JVM 基础知识 问题和答案都是自行整理的,所以仅供参考!欢迎指正! 1)Java 是如何实现跨平台的? 注意:跨平台的是 Java 程序,而不是 JVM。JVM 是用 C/C++ 开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的 JVM 答:我们编写的 Java 源码,编译后会生成一种 .class 文件,称为字节码文件。Java 虚拟机(JVM)就是负责将字节码文件翻译成特定平台下的机器码然后运行,也就是说,只要在不同平台上安装对应的 JVM,就可以运行字节码文件,运行我们编写的 Java 程序。 而这个过程,我们编写的 Java 程序没有做任何改变,仅仅是通过 JVM 这一 “中间层” ,就能在不同平台上运行,真正实现了 “一次编译,到处运行” 的目的。 2)什么是 JVM ? 解析:不仅仅是基本概念,还有 JVM 的作用。 答:JVM,即 Java Virtual

《Spring实战》读书笔记-第3章 高级装配

与世无争的帅哥 提交于 2020-10-14 12:55:08
本章内容: Spring profile 条件化的bean声明 自动装配与歧义性 bean的作用域 Spring表达式语言 在上一章中,我们看到了一些最为核心的bean装配技术。你可能会发现上一章学到的知识有很大的用处。但是,bean装配所涉及的领域并不仅仅局限于上一章  所学习到的内容。Spring提供了多种技巧,借助它们可以实现更为高级的bean装配功能。 在本章中,我们将会深入介绍一些这样的高级技术。本章中所介绍的技术也许你不会天天都用到,但这并不意味着它们的价值会因此而降低。 3.1 环境与profile 在开发软件的时候,有一个很大的挑战就是将应用程序从一个环境迁移到另外一个环境。开发阶段中,某些环境相关做法可能并不适合迁移到生产环境中,甚至即便迁移过去也无法正常工作。数据库配置、加密算法以及与外部系统的集成是跨环境部署时会发生变化的几个典型例子。 比如,考虑一下数据库配置。在开发环境中,我们可能会使用嵌入式数据库,并预先加载测试数据。 数据源的有三种连接配置,分别是 // 通过EmbeddedDatabaseBuilder会搭建一个嵌入式的Hypersonic的数据库 @Bean(destroyMethod = "shutdown") @Profile("dev") public DataSource embeddedDataSource() { return new

spring动态代理的理解(java)

佐手、 提交于 2020-10-14 11:52:06
java动态代理的理解 代理模式是设计模式的其中一种 , 也是Java相关框架中的重要应用。我也是初学者, 个人见解, 不喜勿喷, 简单的说就是需要 进行功能增强的代理类 和 原本真实对象的被代理类 会实现同样的接口, 代理类的字节码文件是在jvm运行的时候动态生成该类(下面进行的介绍), 但是代理类会多去继承一个Java中的 Proxy 类 , 代理类负责为代理类(也就是生成真是对象的java类)预处理信息、增强信息、过滤信息最终把已经增强的转发给代理类。然而,回想之后,代理类又是谁生成的呢? 因此,还需要一个类去动态的生成代理类,这个类在编写的时候还需要用到一个Java中的invocationhandler类,这个类是用于增强 被代理类 中的方法,也就是谁继承了invocationhandler,谁就要去实现该接口对需要增强的类的方法(该接口中的invoke方法), 并且通过调用 代理类生成器的生成代理类方法 ,就会去调用该实现类的invoke方法, 这是个人自己的理解,所说的动态生成器类就是在这个生成动态代理类的Java类中,不能有别的自己编写的Java类的引用( 可以在该类中看是否有import导入自己编写的类 ),万事俱备, 只欠东风, 那就是搞一个测试, 去看下按照自己的理解是否可行。 1.首先先编写dao和service的代码 dao实现部分代码 public

Java并发编程实践

大城市里の小女人 提交于 2020-10-14 08:11:51
最近阅读了《Java并发编程实践》这本书,总结了一下几个相关的知识点。 线程安全 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是 线程安全 的。可以通过 原子性 、 一致性 、 不可变对象 、 线程安全的对象 和 加锁保护同时被多个线程访问的可变状态变量 来解决线程安全的问题。 可见性 在没有同步的情况下,编译器、处理器以及运行时等都可能对操作的执行顺序进行一些意想不到的调整。在缺乏足够同步的多线程程序中,要想对内存操作的执行顺序进行判断,几乎无法得出正确的结论。 加锁的含义不仅仅局限于互斥行为,还包括内存可见性 。为了确保所有线程都能看到共享变量的最新值,所有执行读写操作的线程都必须持有同一把锁。 volatile 变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取 volatile 类型的变量时总会返回最新写入的值。 volatile 变量是一种比 synchronized 关键字更轻量级的同步机制。 加锁机制即可以确保可见性又可以确保原子性,而 volatile 变量只能确保可见性 。 发布逸出 当从对象的构造函数中发布对象时,只是发布了一个尚未构造完成的对象。即使发布对象的语句位于构造函数的最后一行也是如此。如果 this

奈学:Executor线程池的概述

為{幸葍}努か 提交于 2020-10-14 05:28:32
  Executor线程池来自于JDK1.5的JUC包,使用线程池的目的或者好处如下:   实现线程资源的合理复用。线程资源属于操作系统核心资源之一,创建和销毁都需要占用系统资源和大量时间。使用线程池之后,不再需要开发者管理线程,线程的创建和销毁都交给线程池控制,实现线程的复用,减少线程资源的频繁的创建和销毁。   提升任务执行效率。当新来一个线程任务的时候,由于具有线程复用计数因此可以直接利用现有的线程去执行任务,不需要新建线程,这样一定程度上提升了执行效率。   可以对线程和线程任务实现实时监控和管理。比如目前活动线程数、曾经的最大线程数、已完成的任务数量等功能;比如控制最大线程数,在线程任务执行前-执行完毕后-线程池停止后具有可选的回调方法、移除某个线程任务、立即停止线程池等功能,他们都可以通过线程池的相关方法调用来实现。   JDK的线程池可扩展性极强,我们既可以利用定义好的线程池,也可以自定义线程池,很多其他框架组件也都是使用或者扩展了JDK线程池,比如ForkJoinPool分治框架(线程池框架的增强),guava的线程池MoreExecutors就是基于JDK线程池做的扩展,权限框架Shiro的PropertiesRealm属性文件认证类,JAVA RESTFUL请求服务框架Jersey,甚至单元测试框架junit等等框架都是用到了原生Executor线程池