202104-27 java中fork-join的原理解析 ForkJoinTask就是ForkJoinPool里面的每一个任务。他主要有两个子类:RecursiveAction和RecursiveTask。然后通过fork()方法去分配任务执行任务,通过join()方法汇总任务结果,这就是整个过程的运用。他有两个子类,使用这两个子类都可以实现我们的任务分配和计算。(1)RecursiveAction一个递归无结果的ForkJoinTask(没有返回值)(2)RecursiveTask一个递归有结果的ForkJoinTask(有返回值)ForkJoinPool:中含有一个workQueues... 继续阅读 >
202104-27 在java中ArrayList集合底层的扩容原理 第一章前言概述第01节概述底层说明ArrayList是List的实现类,它的底层是用Object数组存储,线程不安全后期应用适合用于频繁的查询工作,因为底层是数组,可以快速通过数组下标进行查找第02节区别区别方向ArrayList集合LinkedList集合线程安全不安全不安全底层原理Object类型数... 继续阅读 >
202104-27 详解java中String值为空字符串与null的判断方法 Java空字符串与null的区别1、类型null表示的是一个对象的值,而不是一个字符串。例如声明一个对象的引用,Stringa=null。“”表示的是一个空字符串,也就是说它的长度为0。例如声明一个字符串Strings=”“。2、内存分配Stringa=null;表示声明一个字符串对象的引用,但指向为null,也就是说还没有指向任何的内存空间。Strings=”“;表示声明一个字符串类型的引用,其值为“”空字符串,这个s引用指向的是空字符串的内存空间;... 继续阅读 >
202104-27 Java利用StringBuffer替换特殊字符的方法实现 在本实例中为保证学生输入的Java文件名合格,将利用StringBuffer类实现对Java文件名中的特殊符号进行替换,包括将中文状态下的“。”和全角状态下的“.”替换为英文状态下的“.”。在本例实现过程中主要使用了StringBuffer类的字符查找和替换方法,实现代码如下:importjava.util.Scanner;publicclasstest2{publicstaticvoidmain(String[]args){System.out.println("请输入你要提交的Java文件名称:"... 继续阅读 >
202104-27 Java 常量字符串过长的解决方法 问题出现在IDEA中,字符串长度超过65535,进行打印,IDEA会提示java:常量字符串过长。使用javac进行编译也会有类似的提示解决办法使用StringBuilderStringBuildersb=newStringBuilder();sb.append("String");sb.append("String");Stringstr=sb.toString();String[]parts=str.split(",");System.out.println(parts.length);创建了一个对象,会根据实际的存储的内容分配内存,不会受到String在常量池中最大长度的限制通... 继续阅读 >
202104-27 java中instanceof 关键字作用和实际用途详解 instanceof1.instanceof是Java中的一个关键字,Java中的关键子都是小写。2.instanceof关键字的作用是判断左边对象是否是右边类(这里有很多人说是对象,所以注意这里是类,并不是对象)的实例(通俗易懂的说就是:子类对象,或者右边类本身的对象)返回的boolean类型,true和false。举个例子:publicclassDome{classPerseextendsObject{}classStudentextendsPerse{}//这个方法判断是否是Perse的实例,用instanceof判断... 继续阅读 >
202104-27 详解Java进阶知识注解 一、注解的概念1、注解官方解释注解叫元数据,一种代码级别的说明,它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举在同一个层次,它可以声明在包、类、字段、局部变量、方法参数等的前面,用来对这些元素进行说明、注释。注解的作用分类编写文档:通过代码里表示的元数据生成文档【生成doc文档】代码分析:通过代码里表示的元数据进行分析【使用反射】编译检查:通过代码里表示的元数据让编译器能够实现基本的... 继续阅读 >
202104-27 简述Java中的四种引用类型 简介从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用,下面分别介绍下这四种引用。强引用强引用是最常用的引用类型,如下所示,newObject()会创建一个Object对象并存储在堆上,变量object存储对该对象的强引用。Objectobject=newObject();强引用不会被垃圾回收,所以要想回收该对象,则应该将指向该对象的变量显示设为nul... 继续阅读 >
202104-27 java中你的项目应该如何正确分层 背景说起应用分层,大部分人都会认为这个不是很简单嘛,就Controller,Service,Mapper三层。看起来简单,很多人其实并没有把他们职责划分开,在很多代码中,Controller做的逻辑比Service还多,Service往往当成透传了,这其实是很多人开发代码都没有注意到的地方,反正功能也能用,至于放哪无所谓呗。这样往往造成后面代码无法复用,层级关系混乱,对后续代码的维护非常麻烦。的确在这些人眼中分层只是一个形式,前辈们的代... 继续阅读 >
202104-27 如何用Java模拟XN*2图灵机 题目描述:对于XN*2图灵机进行模拟,任意给定的十进制数,转换为收缩扩展二进制的编码,再编程模拟此Turing机的运行过程,要求输出从开始运行起的每一步骤的结果。用C或C++或Java或Python语言实现程序解决问题。要求:1.程序风格良好(使用自定义注释模板);2.提供友好的输入输出,并进行输入数据的正确性验证。算法分析:1.将十进制数转换为二进制数;2.将二进制数转换为收缩扩展二进制的编码;3.根据当前的内态和输入执行X... 继续阅读 >
202104-27 Java并发编程之Exchanger方法详解 简介Exchanger是一个用于线程间数据交换的工具类,它提供一个公共点,在这个公共点,两个线程可以交换彼此的数据。当一个线程调用exchange方法后将进入等待状态,直到另外一个线程调用exchange方法,双方完成数据交换后继续执行。Exchanger的使用方法介绍exchange(Vx):阻塞当前线程,直到另外一个线程调用exchange方法或者当前线程被中断。x:需要交换的对象。exchange(Vx,longtimeout,TimeUnitunit):阻塞当前线... 继续阅读 >
202104-27 Java利用线程工厂监控线程池的实现示例 ThreadFactory线程池中的线程从哪里来呢?就是ThreadFoctorypublicinterfaceThreadFactory{ThreadnewThread(Runnabler);}Threadfactory里面有个接口,当线程池中需要创建线程就会调用该方法,也可以自定义线程工厂publicclassThreadfactoryText{publicstaticvoidmain(String[]args){Runnablerunnable=newRunnable(){@Overridepublicvoidrun(){intnum... 继续阅读 >
202104-27 Java常用工具类库——Hutool的使用简介 前言Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。Hutool中的工具方法来自于每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间... 继续阅读 >
202104-27 原生java代码实现码云第三方验证登录的示例代码 码云第三方验证登录研究了QQ,码云,微信等第三方登录接口时,发现QQ以及微信第一步都需要验证授权管理,而且个人测试需要提供手持身份证一张,并且验证时间过长(3天工作日左右吧),这样会非常浪费大家学习第三方接口登录的时间,终于,在我的不屑努力下,找到了适合大家快速上手,测试第三方接口登录的平台-————码云(看网上帖子说某WX接入还要开发者认证,人民币300元)码云链接地址https://gitee.com/一、在码云上创建应... 继续阅读 >
202104-27 java中i=i++和j=i++的区别小结 i=i++;j=i++的区别i=i++-----------在java中这个语句的前后顺序应该是这样的(tmp=i;i++;tmp==i)java的编译器在遇到i++和i--的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉,下面首先看一下如果是j=i++的情况: i的原始值存放在后开辟的内存中,最后这个值将赋值给j,这样j=i++后,j就会得到i的值,而i又将自加,所以,在释放内存之后,原来存放j和i的地方将得到值将是... 继续阅读 >
202104-27 JAVA Future类的使用详解 前言在高性能编程中,并发编程已经成为了极为重要的一部分。在单核CPU性能已经趋于极限时,我们只能通过多核来进一步提升系统的性能,因此就催生了并发编程。由于并发编程比串行编程更困难,也更容易出错,因此,我们就更需要借鉴一些前人优秀的,成熟的设计模式,使得我们的设计更加健壮,更加完美。而Future模式,正是其中使用最为广泛,也是极为重要的一种设计模式。今天就跟阿丙了解一手Future模式!生活中的Future模式为了更... 继续阅读 >