
java
java技巧和教程
flydean程序那些事
懂程序更懂你!微信公众号:程序那些事 个人主页:www.flydean.com 最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在程序那些事!
-
原创 JDK8中的新时间API:Duration Period和ChronoUnit介绍
在JDK8中,引入了三个非常有用的时间相关的API:Duration,Period和ChronoUnit。他们都是用来对时间进行统计的,本文将会详细讲解一下这三个API的使用。2020-11-05 10:24:0312242
3
-
原创 java安全编码指南之:文件和共享目录的安全性
java程序是跨平台的,可以运行在windows也可以运行在linux。但是平台不同,平台中的文件权限也是不同的。windows大家经常使用,并且是可视化的权限管理,这里就不多讲了。本文主要讲讲linux下面的文件的权限和安全性问题,并且探讨一下如何在java程序中考虑文件的安全性。2020-11-03 09:14:3112013
3
-
原创 java安全编码指南之:序列化Serialization
序列化是java中一个非常常用又会被人忽视的功能,我们将对象写入文件需要序列化,同时,对象如果想要在网络上传输也需要进行序列化。序列化的目的就是保证对象可以正确的传输,那么我们在序列化的过程中需要注意些什么问题呢?2020-11-01 10:27:2613498
28
-
原创 java安全编码指南之:文件IO操作
对于文件的IO操作应该是我们经常会使用到的,因为文件的复杂性,我们在使用File操作的时候也有很多需要注意的地方,下面我一起来看看吧。2020-10-27 10:47:3513031
5
-
原创 万字长文深入理解java中的集合-附PDF下载
集合是用来存储多个数据的,除了基本类型之外,集合应该是java中最最常用的类型了。java中的集合类型一般都集中在java.util包和java.util.concurrent包中。其中util包中的集合类是基础的集合类,而concurrent包中的集合类是为并发特别准备的集合类。集合类的父类有两个,一个是java.util.Collection, 一个是java.util.Map。2020-10-24 12:13:2115371
20
-
原创 java安全编码指南之:线程安全规则
如果我们在多线程中引入了共享变量,那么我们就需要考虑一下多线程下线程安全的问题了。那么我们在编写代码的过程中,需要注意哪些线程安全的问题呢?2020-10-23 09:26:2214017
15
-
原创 java安全编码指南之:ThreadPool的使用
在java中,除了单个使用Thread之外,我们还会使用到ThreadPool来构建线程池,那么在使用线程池的过程中需要注意哪些事情呢?一起来看看吧。2020-10-20 09:41:2212385
6
-
原创 java安全编码指南之:Thread API调用规则
java中多线程的开发中少不了使用Thread,我们在使用Thread中提供的API过程中,应该注意些什么规则呢?一起来看一看吧。2020-10-19 09:15:0313684
15
-
原创 java安全编码指南之:锁的双重检测
双重检测锁定模式是一种设计模式,我们通过首次检测锁定条件而不是实际获得锁从而减少获取锁的开销。双重检查锁定模式用法通常用于实现执行延迟初始化的单例工厂模式。延迟初始化推迟了成员字段或成员字段引用的对象的构造,直到实际需要才真正的创建。但是我们需要非常小心的使用双重检测模式,以避免发送错误。2020-10-14 08:56:2414168
15
-
原创 java安全编码指南之:输入注入injection
注入问题是安全中一个非常常见的问题,今天我们来探讨一下java中的SQL注入和XML注入的防范。2020-10-12 09:03:4414356
19
-
原创 java安全编码指南之:方法编写指南
java程序的逻辑是由一个个的方法组成的,而在编写方法的过程中,我们也需要遵守一定的安全规则,比如方法的参数进行校验,不要在assert中添加业务逻辑,不要使用废弃或者过期的方法,做安全检查的方法一定要设置为private等。今天我们再来深入的探讨一下,java方法的编写过程中还有哪些要注意的地方。2020-10-08 09:05:5012490
8
-
原创 java安全编码指南之:死锁dead lock
java中为了保证共享数据的安全性,我们引入了锁的机制。有了锁就有可能产生死锁。死锁的原因就是多个线程锁住了对方所需要的资源,然后现有的资源又没有释放,从而导致循环等待的情况。通常来说如果不同的线程对加锁和释放锁的顺序不一致的话,就很有可能产生死锁。2020-10-01 08:44:3614255
8
-
原创 java安全编码指南之:异常处理
异常是java程序员无法避免的一个话题,我们会有JVM自己的异常也有应用程序的异常,对于不同的异常,我们的处理原则是不是一样的呢?一起来看看吧。2020-09-29 09:16:1615246
16
-
原创 java安全编码指南之:敏感类的拷贝
一般来说class中如果包含了私有的或者敏感的数据的时候是不允许被拷贝的。如果一个class不想被拷贝,我们是不是不提供拷贝的方法就能保证class的安全了呢?一起来看看吧。2020-09-27 09:46:3712704
5
-
原创 java安全编码指南之:可见性和原子性
java类中会定义很多变量,有类变量也有实例变量,这些变量在访问的过程中,会遇到一些可见性和原子性的问题。这里我们来详细了解一下怎么避免这些问题。2020-09-25 10:57:3615583
17
-
原创 java安全编码指南之:输入校验
为了保证java程序的安全,任何外部用户的输入我们都认为是可能有恶意攻击意图,我们需要对所有的用户输入都进行一定程度的校验。本文将带领大家探讨一下用户输入校验的一些场景。一起来看看吧。2020-09-21 10:27:0414397
10
-
原创 java安全编码指南之:堆污染Heap pollution
什么是堆污染呢?堆污染是指当参数化类型变量引用的对象不是该参数化类型的对象时而发生的。我们知道在JDK5中,引入了泛型的概念,我们可以在创建集合类的时候,指定该集合类中应该存储的对象类型。如果在指定类型的集合中,引用了不同的类型,那么这种情况就叫做堆污染。2020-09-18 10:08:2012998
5
-
原创 JDK15真的来了,一起来看看它的新特性
一年两次的JDK最新版本JDK15在2020年9月15日正式发布了,这次的JDK15给我们带了隐藏类,EdDSA,模式匹配,Records,封闭类和Text Block等诸多新特性。2020-09-16 21:30:0715050
19
-
原创 java安全编码指南之:字符串和编码
字符串是我们日常编码过程中使用到最多的java类型了。全球各个地区的语言不同,即使使用了Unicode也会因为编码格式的不同采用不同的编码方式,如UTF-8,UTF-16,UTF-32等。我们在使用字符和字符串编码的过程中会遇到哪些问题呢?一起来看看吧。2020-09-16 09:41:2812988
6
-
原创 一文解开java中字符串编码的小秘密
在本文中你将了解到Unicode和UTF-8,UTF-16,UTF-32的关系,同时你还会了解变种UTF-8,并且探讨一下UTF-8和变种UTF-8在java中的应用。一起来看看吧。2020-09-12 15:28:2013028
5
-
原创 java安全编码指南之:Number操作
文章目录简介Number的范围区分位运算和算数运算注意不要使用0作为除数兼容C++的无符号整数类型NAN和INFINITY不要使用float或者double作为循环的计数器BigDecimal的构建类型转换问题简介java中可以被称为Number的有byte,short,int,long,float,double和char,我们在使用这些Nubmer的过程中,需要注意些什么内容呢?一起来看看吧。Number的范围每种Number类型都有它的范围,我们看下java中Number类型的范围:考虑到我2020-09-10 09:55:4114578
6
-
原创 java安全编码指南之:表达式规则
文章目录简介注意表达式的返回值注意避免NullPointerException数组相等的判断基础类型的封装类间的比较集合中类型不匹配Asset的副作用简介在java编写过程中,我们会使用到各种各样的表达式,在使用表达式的过程中,有哪些安全问题需要我们注意的呢?一起来看看吧。注意表达式的返回值我们在使用JDK库的时候,一定要注意认真的读一下JDK中方法的含义和它的返回值。有些返回值可能表示这个操作是否成功,有的返回值可能是方法操作的结果。我们看两个常见的例子: public void del2020-09-08 09:22:3213265
4
-
原创 java安全编码指南之:声明和初始化
文章目录简介初始化顺序循环初始化不要使用java标准库中的类名作为自己的类名不要在增强的for语句中修改变量值简介在java对象和字段的初始化过程中会遇到哪些安全性问题呢?一起来看看吧。初始化顺序根据JLS(Java Language Specification)中的定义,class在初始化过程中,需要同时初始化class中定义的静态初始化程序和在该类中声明的静态字段(类变量)的初始化程序。而对于static变量来说,如果static变量被定义为final并且它值是编译时常量值,那么该static2020-09-06 08:56:1113877
4
-
原创 java安全编码指南之:Mutability可变性
文章目录简介可变对象和不可变对象创建mutable对象的拷贝为mutable类创建copy方法不要相信equals不要直接暴露可修改的属性public static fields应该被置位finalpublic static final field 应该是不可变的简介mutable(可变)和immutable(不可变)对象是我们在java程序编写的过程中经常会使用到的。可变类型对象就是说,对象在创建之后,其内部的数据可能会被修改。所以它的安全性没有保证。而不可变类型对象就是说,对象一旦创建之后,其内2020-09-03 09:20:1513980
5
-
原创 java安全编码指南之:对象构建
Finalizer Attack是什么?它和对象创建有什么关系?一起来看看吧。2020-09-01 09:29:5913686
6
-
原创 巧用HashMap一行代码统计单词出现次数
JDK是在一直在迭代更新的,很多我们熟悉的类也悄悄的添加了一些新的方法特性。比如我们最常用的HashMap。今天给大家讲一下HashMap在JDK8中添加的两个新方法compute和merge,从而实现一行代码实现单词统计的功能。一起来看看吧。2020-08-30 16:37:2114183
8
-
原创 java安全编码指南之:拒绝Denial of Service
DOS不是那个windows的前身,而是Denial of Service,有做过系统安全方面的小伙伴可能对这个再熟悉不过了,简单点讲,DOS就是服务型响应不过来,从而拒绝了正常的服务请求。今天本文不是要讲怎么发起一个DOS攻击,而是讲一下怎么在java的代码层面尽量减少DOS的可能性。2020-08-27 09:58:4313609
4
-
原创 java安全编码指南之:基础篇
作为一个程序员,只是写出好用的代码是不够的,我们还需要考虑到程序的安全性。在这个不能跟陌生人说话世界,扶老奶奶过马路都是一件很困难的事情。那么对于程序员来说,尤其是对于开发那种对外可以公开访问的网站的程序员,要承受的压力会大很多。任何人都可以访问我们的系统,也就意味着如果我们的系统不够健壮,或者有些漏洞,恶意攻击者就会破门而入,将我们辛辛苦苦写的程序蹂躏的体无完肤。所以,安全很重要,今天本文将会探讨一下java中的安全编码指南。2020-08-25 09:54:2815063
5
-
原创 在java中使用SPI创建可扩展的应用程序
什么是可扩展的应用程序呢?可扩展的意思是不需要修改原始代码,就可以扩展应用程序的功能。我们将应用程序做成插件或者模块。这样可以在不修改原应用的基础上,对系统功能进行升级或者定制化。本文将会向大家介绍如何通过java中的SPI机制实现这种可扩展的应用程序。2020-08-22 11:52:1014480
8
-
原创 一文读懂jar包的小秘密
java程序员每天不是在创建jar包就是在创建jar包的路上,并且各种依赖引用都是以jar包的形式展示的。但是随着现代IDE的出现,我想很多程序员已经基本上很少直接和jar包打交道了。换句话说,他们已经不认识jar包了。那么jar包到底是什么呢?它有哪些小秘密呢?一起来看一下吧。2020-08-20 09:05:1213811
10
-
原创 troubleshoot之:GC调优到底是什么
我们经常会听到甚至需要自己动手去做GC调优。那么GC调优的目的到底是什么呢?让程序跑得更快?让GC消耗更少的资源?还是让程序更加稳定?带着这些疑问来读一下这篇文章,将会得到一个系统的甚至是不一样的结果。2020-08-18 07:44:1013796
5
-
原创 troubleshoot之:使用JFR分析性能问题
文章目录简介GC性能事件同步性能IO性能代码执行的性能其他有用的event简介java程序的性能问题分析是一个很困难的问题。尤其是对于一个非常复杂的程序来说,分析起来更是头疼。还好JVM引入了JFR,可以通过JFR来监控和分析JVM的各种事件。通过这些事件的分析,我们可以找出潜在的问题。今天我们就来介绍一下对java性能分析比较重要的一些JFR事件。GC性能事件一般来说,GC会对java程序的性能操作产生比较重要的影响。我们可以使用jfr监控jdk.GCPhasePause事件。下面是一个jd2020-08-16 09:04:5413768
5
-
原创 troubleshoot之:分析OutOfMemoryError异常
文章目录简介OutOfMemoryErrorjava.lang.OutOfMemoryError: Java heap spacejava.lang.OutOfMemoryError: GC Overhead limit exceededjava.lang.OutOfMemoryError: Requested array size exceeds VM limitjava.lang.OutOfMemoryError: Metaspacejava.lang.OutOfMemoryError: request2020-08-14 10:10:0513931
5
-
原创 troubleshoot之:使用JFR解决内存泄露
文章目录简介一个内存泄露的例子使用JFR和JMC来分析内存泄露OldObjectSample总结简介虽然java有自动化的GC,但是还会有内存泄露的情况。当然java中的内存泄露跟C++中的泄露不同。在C++中所有被分配的内存对象都需要要程序员手动释放。但是在java中并不需要这个过程,一切都是由GC来自动完成的。那么是不是java中就没有内存泄露了呢?要回答这个问题我们首先需要界定一下什么是内存泄露。如果说有时候我们不再使用的对象却不能被GC释放的话,那么就可以说发生了内存泄露。内存泄露的主要原2020-08-12 09:30:0613881
5
-
原创 troubleshoot之:用control+break解决线程死锁问题
文章目录简介死锁的代码control+break命令Full thread dump死锁检测Heap信息总结简介如果我们在程序中遇到线程死锁的时候,该怎么去解决呢?本文将会从一个实际的例子出发,一步一步的揭开java问题解决的面纱。死锁的代码写过java多线程程序的人应该都知道,多线程中一个很重要的事情就是状态的同步,但是在状态同步的过程中,一不小心就有可能会导致死锁的问题。一个最简单的死锁情况就是thread1占有资源1,然后又要去获取资源2. 而thread2占有资源2,又要去获取资源1的情2020-08-08 21:50:3013986
6
-
原创 JVM系列之:再谈java中的safepoint
文章目录safepoint是什么safepoint的例子线程什么时候会进入safepointsafepoint是怎么工作的总结safepoint是什么java程序里面有很多很多的java线程,每个java线程又有自己的stack,并且共享了heap。这些线程一直运行呀运行,不断对stack和heap进行操作。这个时候如果JVM需要对stack和heap做一些操作该怎么办呢?比如JVM要进行GC操作,或者要做heap dump等等,这时候如果线程都在对stack或者heap进行修改,那么将不是一个稳定2020-08-07 09:54:4715443
7
-
原创 JVM系列之:从汇编角度分析NullCheck
文章目录简介一个普通的virtual call普通方法中的null check反优化的例子总结简介之前我们在讲Virtual call的时候有提到,virtual call方法会根据传递的参数实例的不同而进行优化,从而优化成为classic call,从而提升执行效率。今天我们考虑一下,在virtual call中执行nullcheck的时候,如果已经知道传递的参数是非空的。JIT会对代码进行优化吗?一起来看看吧。一个普通的virtual call我们来分析一下在方法中调用list.add方法的2020-08-06 07:42:392300
2
-
原创 JVM系列之:从汇编角度分析Volatile
文章目录简介重排序写的内存屏障非lock和LazySet读的性能总结简介Volatile关键字对熟悉java多线程的朋友来说,应该很熟悉了。Volatile是JMM(Java Memory Model)的一个非常重要的关键词。通过是用Volatile可以实现禁止重排序和变量值线程之间可见两个主要特性。今天我们从汇编的角度来分析一下Volatile关键字到底是怎么工作的。重排序这个世界上有两种重排序的方式。第一种,是在编译器级别的,你写一个java源代码,经过javac编译之后,生成的字节码顺序可2020-08-05 09:57:162437
3
-
原创 JVM系列之:JIT中的Virtual Call接口
文章目录简介最常用的接口List多个List的调用不一样的List调用总结简介上一篇文章我们讲解了Virtual Call的定义并举例分析了Virtual Call在父类和子类中的优化。JIT对类可以进行优化,那么对于interface可不可以做同样的优化么?一起来看看吧。最常用的接口ListList应该是大家最最常用的接口了,我想这个大家应该不会反驳。public interface List<E> extends Collection<E> {今天我们就拿Lis2020-08-04 09:05:2414339
2
-
原创 JVM系列之:JIT中的Virtual Call
文章目录简介Virtual Call和它的本质Virtual Call和classic callVirtual Call优化单实现方法的例子Virtual Call优化多实现方法的例子总结简介什么是Virtual Call?Virtual Call在java中的实现是怎么样的?Virtual Call在JIT中有没有优化?所有的答案看完这篇文章就明白了。Virtual Call和它的本质有用过PrintAssembly的朋友,可能会在反编译的汇编代码中发现有些方法调用的说明是invokevirtu2020-08-03 10:36:3614693
4