>
快捷搜索:

常被问到的十二个,Java代码自动安排

- 编辑:皇家国际app -

常被问到的十二个,Java代码自动安排

Logstash介绍

【 ①Java代码自动安插-总计简单介绍】

二个妙不可言的Java技士必需询问GC的干活原理、怎么着优化GC的习性、如何与GC举行个别的并行,因为有一部分应用程序对质量要求较高,比如嵌入式系统、实时系统等,只有完善升高内部存款和储蓄器的处理作用,才具增高全部应用程序的质量。

1、Spring Boot项目加多MyBatis信任和Oracle驱动:

在这篇小说中,小编策动收音和录音最有意思和最分布的主题素材。其它,小编将为您提供不错的答案。

Logstash是二个开源数据收罗引擎,具备实时管道作用。Logstash能够动态地将来自差别数据源的多少统一同来,并将数据规范到你所选拔的目标地。

代码陈设是每一个软件开拓项目组都会有的一个流程,也是从开荒环节到揭橥作用不可或缺的环节。对于Java开拓者来讲,Java代码的公布安排也是平常须求做的一件事,特别是网络商家。代码的昭示上线关系到保障生产情形可以寻常运维及职能是或不是能健康运维,所以代码安排在全数项目开辟周期照旧并吞很首要的地位。

三个优异的Java技术员必需询问GC的做事原理、怎么样优化GC的品质、怎样与GC实行轻巧的相互,因为有局地应用程序对品质须求较高,比如嵌入式系统、实时系统等,唯有健全升高内部存款和储蓄器的管理功用,本事增加总体应用程序的属性。本篇作品首先简要介绍GC的专门的学业规律之后,然后再对GC的多少个关键难点进行深刻研讨,最终提出某个Java程序设计建议,从GC角度进步Java程序的特性。

org.mybatis.spring.bootmybatis-spring-boot-starter1.3.2com.oracleojdbc611.2.0.1.0

接下去,就让大家来探视那么些难点。

皇家国际app 1

要是想深造Java工程化、高品质及布满式、深入浅出。微服务、Spring,MyBatis,Netty源码剖析的相爱的人能够加作者的Java高等交换:854630135,群里有Ali大牌直播批注工夫,以及Java大型互联网技艺的录制无偿享受给大家。

皇家国际app 2

2、配置application.properties:

  1. 以满分拾贰分来评估协和——你有多专长 Java?

汇总、调换和积存你的数目

是因为笔者前段时间在攻读Java代码自动公布相关的知识,此种类小说是对本次学习到的学问张开加固和总括;同不常候,也目的在于可以援助到和本人同样对此方面知识感兴趣的同行们。言十分的少说,直接走入真题。下边针对此番体系文章做多个轻松的概述。

GC的基本原理

若果想上学Java工程化、高品质及遍布式、深入浅出。微服务、Spring,MyBatis,Netty源码剖析的爱侣能够加小编的Java高等调换:854630135,群里有阿里大腕直播讲明技巧,以及Java大型网络本领的录像无需付费享用给我们。

倘使你并不完全确信你本人可能你对 Java 的纯熟程度,那么那会是二个十分费事的难点。即使有这种状态,你应该把打分调低一些。之后,你大约会赢得与你承认的等级次序符合的难题。由此,纵然你给和睦满分,却不可能回应一个有一些难的标题,那将会对您不利。

假使想学习Java工程化、高品质及遍布式、深入显出。微服务、Spring,MyBatis,Netty源码深入分析的朋

1、学习代码自动计划的目标

Java的内存管理实际上正是指标的管制,当中富含对象的分配和刑满释放解除劳教。

#spring.datasource.driver-class-name=com.mysql.jdbc.Driver#spring.datasource.url=jdbc:mysql://localhost:3306/ems#spring.datasource.username=root#spring.datasource.password=rootmybatis.mapper-locations=classpath:/com/example/demo/mapper/*.xml

  1. 阐述 Java 7 和 Java 8 的区别。

友能够加作者的Java高档沟通:854630135,群里有Ali大拿直播讲明手艺,以及Java大型网络工夫的录像免费享用给大家。

高效且简化代码的安排发表

对于技士来讲,分配成对象使用new关键字;释放对象时,只要将对象具有引用赋值为null,让程序不可见再拜会到那个目的,大家称该对象为"不可达的".GC将担负回收全体"不可达"对象的内部存款和储蓄器空间。

server.port=9090

心声说,两个有众多见仁见智。倘令你能列出最根本的,应该就丰富了。你应当说明Java 8 中的新功用。想要获得完全清单,请访谈官方网址:Java 8 JDK。

Logstash是多个开源的服务器端数据管理管道,能够同期从三个数据源获取数据,并对其进展改动,然后将其发送到你最心爱的“存款和储蓄”。(当然,大家最兴奋的是Elasticsearch)

2、使用的相干工具及手艺

对此GC来讲,当技术员创制对象时,GC就起来监察和控制这些指标的地方、大小以及利用状态。平日,GC选用有向图的方法记录和管制堆中的全体指标。通过这种方法明确如何对象是"可达的",哪些对象是"不可达的".当GC明确部分指标为"不可达"时,GC就有权利回收这个内部存储器空间。

spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver

您应有掌握以下多少个第一:

输入:搜聚各样体制、大小和来自的数额

1、 CentOS操作系统(能够使用设想机安装Linux系统)

唯独,为了确认保障GC能够在差别平台完成的主题素材,Java标准对GC的成都百货上千行为都未曾进行严加的明确。比如,对于利用什么样类型的回收算法、哪一天进行回收等重大难题都并未有明了的明确。因而,不一样的JVM的完毕者往往有例外的兑现算法。那也给Java程序猿的开辟带来行多不明明。本文研究了多少个与GC专门的职业不非亲非故系的难题,努力削减这种不明显给Java程序带来的负面影响。

spring.datasource.url=jdbc:oracle:thin:@134.32.9.247:1700/mbss

lambda 表明式,Java 8 版本引进的二个新特色。lambda 表达式允许你将作用充作方法参数或将代码当做数据。lambda 表明式仍是可以让您以更轻松的章程表示唯有叁个艺术的接口 的实例。

数量往往以有滋有味的样式,或分散或聚焦地存在于广大意系中。Logstash 帮助各个输入选拔,能够在同一时候从多数常用来源捕捉事件。能够以连续的流式传输方式,轻便地从你的日志、指标、Web 应用、数据存款和储蓄以及各类 AWS 服务搜聚数据。

2、 Maven

皇家国际app 3

spring.datasource.username=dbrtadm

办法援用,为已命超级模特式提供了轻便阅读的 lambda 表明式。

皇家国际app 4

3、 Git

增量式GC( Incremental GC )

spring.datasource.password=dbrtadm

暗许方法,帮衬将新职能丰裕到类库中的接口,并保障与基于那些接口的旧版本的代码的二进制包容性。

过滤器:实时分析和转移数据

4、 Shell脚本

GC在JVM中习以为常是由一个或一组经过来完毕的,它本人也和客户程序同样攻克heap空间,运维时也侵占CPU.当GC进度运营时,应用程序甘休运营。由此,当GC运营时刻较长时,顾客能够认为到 Java程序的暂停,别的二头,要是GC运营时刻太短,则或者对象回收率太低,那表示还会有为数不菲应有回收的对象未有被回收,依然据有大量内部存款和储蓄器。

3、新建实体类,注意与数据库字段对应:

重新注明,援助在同一注脚或项目上一再选取同样评释类型。

数码从源传输到存款和储蓄库的进度中,Logstash 过滤器能够深入分析各样事件,识别已命名的字段以塑造结构,并将它们转换来通用格式,以便更轻便、更加高速地深入分析和促成商业价值。

5、 Jenkins

因此,在安排GC的时候,就必得在暂停时间和回收率之间举行度量。多个好的GC完毕允许客户定义本人所急需的设置,举例有些内部存款和储蓄器有限有设备,对内部存款和储蓄器的使用量特别敏锐,希望GC能够正确的回收内部存款和储蓄器,它并不在乎程序速度的放缓。

packagecom.example.demo.entity;importlombok.Getter;importlombok.Setter;@Getter@SetterpublicclassUser{publicintid;publicString order_id;}

项目注脚,扶助在别的利用项目标地点使用注脚,而不只限于申明。此天性与可插入型系统一起使用时,可增长对代码的类型检查。

Logstash 能够动态地更动和分析数据,不受格式或复杂度的震慑:

3、学习代码自动发布相关本领的逐个

其余一些实时网页游戏,就不可能允许程序有长日子的间歇。增量式GC就是通过自然的回收算法,把三个长日子的中断,划分为广大个小的中止,通过这种办法减弱GC对客户程序的熏陶。即便,增量式GC在完全质量上可能不及普通GC的频率高,可是它亦可减弱程序的最长停立刻间。

4、新建mapper:

  1. 您询问什么集合类型?

采纳 Grok 从非结构化数据中派生出组织

皇家国际app 5

Sun JDK提供的HotSpot JVM就能够扶助增量式GC.HotSpot JVM缺省GC格局为不选拔增量GC,为了运营增量GC,大家必须在运转Java程序时扩充-Xincgc的参数。

<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "" >select * from t_ps_order_qr

您应当驾驭以下多少个最要害的项目:

从 IP 地址破译出地理坐标

阶段1:

HotSpot JVM增量式GC的落到实处是采用Train GC算法。它的骨干主张正是,将堆中的全体目的依照制造和平运动用情形开展分组,将应用频仍高和颇负相关性的靶子放在一队中,随着程序的周转,不断对组进行调治。当GC运营时,它连接先回收最老的的目的,借使整组都为可回收对象,GC将整组回收。那样,每一回GC运行只回收一定比重的不可达对象,保险程序的顺畅运维。

5、新建dao接口:

ArrayList

将 PII 数据无名氏化,完全消除敏感字段

亮点:布署流程简单方面,开垦形成后开采职员在付出意况就能够进展代码安排上线。

详解finalize函数

packagecom.example.demo.dao;importjava.util.List;importorg.apache.ibatis.annotations.Mapper;@Mapperpublic interface UserMapper {publicListlistUser();}

LinkedList

完整处理不受数据源、格式或架构的震慑

缺欠:发表流程粗糙,代码陈设远远不够严苛,不指出生产条件使用此方法。

皇家国际app 6

此地应加@Mapper申明,interface的办法名对应xml的标签id。

HashMap

皇家国际app 7

阶段2:

finalize是身处Object类的多少个艺术,该措施的访问修饰符为protected,由于有着类为Object的子类,由此客户类很轻便访谈到那一个方法。由于,finalize函数未有机关达成链式调用,我们必需手动的兑现,由此finalize函数的结尾贰个说话常常是super.finalize()。通过这种方法,大家得以兑现从下到上达成finalize的调用,即先放出自个儿的财富,然后再自由父类的能源。

6、新建controller:

HashSet

出口:选取你的囤积,导出你的多少

优点:由Git举行项目版本管理,减弱了代码发布的危机,发表进度有运行职员举行公布。

听别人说Java语言专门的学问,JVM保证调用finalize函数以前,那么些指标是不可达的,可是JVM不保障这些函数一定会被调用。别的,规范还担保finalize函数最多运维二回。

packagecom.example.demo.controller;importjava.util.List;importjavax.annotation.Resource;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;importcom.example.demo.dao.UserMapper; @RestControllerpublic class TestController { @ResourceUserMapper um; @GetMapping public List listUser() {returnum.listUser(); }}

后来,你可能会被问到那样有个别主题素材,举例什么时候应该使用此种特定类型,它比其余的幸而哪里,它是怎么存储数据的以及隐匿在现在的数据结构是怎么着。

固然 Elasticsearch 是我们的首荐输出方向,能够为我们的物色和解析带来Infiniti可能,但它不用独一选取。

缺欠:由于代码的发表由运转职员发表,需开拓人士合营进行代码揭橥安顿,与发布布署不成事,得由开荒职员查找难点,增添了陈设复杂性。

洋洋Java初学者会以为这么些主意类似与C++中的析构函数,将相当多指标、财富的放飞都坐落这一函数里面。其实,那不是一种很好的方法。原因有三,其一,GC为了能够补助finalize函数,要对覆盖那一个函数的对象作过多附加的办事。其二,在finalize运维完毕未来,该目标可能变为可达的,GC还要再自己议论贰次该对象是或不是是可达的。因而,使用 finalize会减弱GC的运行质量。其三,由于GC调用finalize的小运是不鲜明的,因而通过这种方法自由能源也是不鲜明的。

开行主程序,浏览器访谈,

最棒的诀若是尽量多地打听那几个聚集类型,因为那类难题大概是无穷尽的。

Logstash 提供许多出口选用,您能够将数据发送到您要内定的地点,何况能够灵活地解锁众多下游用例。

阶段3:

平凡,finalize用于一些不轻巧调整、并且相当重大能源的放飞,比方有些I/O的操作,数据的连日。那么些财富的释放对总体应用程序是特别重要的。在这种景况下,程序员应该以通进程序本人管理那个财富为主,以finalize函数释放能源情势为辅,变成一种双保证的管理机制,而不应有唯有依赖finalize来刑满释放解除劳教财富。

若果想学学Java工程化、高品质及分布式、深入浅出。微服务、Spring,MyBatis,Netty源码解析的对象能够加作者的Java高端交换:854630135,群里有Ali大拿直播疏解本领,以及Java大型网络技艺的摄像无偿享用给我们。

  1. Object 类包涵怎么着方法?

皇家国际app 8

优点:由Jenkins工具举行代码的公布布置,标准了代码的发布流程,提供可视工具监听整个发表流程等。

上面给出二个事例表明,finalize函数被调用以往,依旧也许是可达的,同不常候也可验证八个目的的finalize只恐怕运维二回。

皇家国际app 9

那是贰个非平日见的标题,用来规定你对基础知识的听得多了就能说的详细程度。以下是每一种对象都享有的秘籍:

安装Logstash

短处:对本领要求更加高了,必要精通Jenkins工具,会编写Shell脚本等。

1classMyObject{

瞩目oracle驱动版本难题,版本不对只怕会报错

在 java.lang 包中,Object 类位于类等级次序结构的上方。每一种类都以 Object 类直接或直接的子类。你使用或编辑的每种类都承袭了 Object 类中的实例方法。你并没有要求使用那么些措施中的任何一种,不过,假若您挑选那样做,则也许须求用你的类的一定代码来重写那一个方法。以下是本节所切磋的从 Object 类中持续的主意:

皇家国际app 10

4、Java代码自动铺排总计分为以下连串

2

皇家国际app 11

protected Object clone() throws CloneNotSupportedException 创立并赶回此指标的别本。

先是,让我们由此最大旨的Logstash管道来测量检验一下方才安装的Logstash

①计算简单介绍

3Test main;//记录Test对象,在finalize中时用于苏醒可达性

public boolean equals(Object obj) 决断另一对象与此对象是还是不是「相等」。

Logstash管道有几个必备的要素,输入和出口,以及二个可选成分过滤器。输入插件从数据源这里成本数量,过滤器插件依照你的盼望修改数据,输出插件将数据写入目标地。

②选拔Maven实行代码铺排

4

亟需连接MySQL只需将驱动和U宝马7系L更换为MySQL的就能够,别的与Oracle一样。

protected void finalize() throws Throwable 当废品回收机制鲜明该指标不再被调用时,垃圾回收器会调用此措施。

皇家国际app 12

③使用Shell实行代码布置

5publicMyObject

如有错误接待指正。

public final Class getClass() 再次来到此对象的运行时类。

接下去,允许Logstash最主旨的管道,举例:

④应用Jenkins进行代码安顿

6

public int hashCode() 重临此对象的散列码值。

bin/logstash -e 'input { stdin {} } output { stdout {} }'

⑤课程总括及体验

7{

public String toString() 重回此对象的字符串表示情势。

(画外音:选项 -e 的野趣是允许你从命令行指虞诩顿)

【 ②使用Maven进行代码铺排】

8

Object 类的 notify,notifyAll 和 wait 方法都在协同程序中单独运营线程的活动方面公布了成效,那将在背后的科目中商量,在此不做牵线。当中有七种艺术:

早先现在,上面我们在命令行下输入"hello world"

在动用maven举行代码发布的时候,供给用Maven工具的连锁插件将索要配备的门类揭发到内定的服务器的安顿目录中。

9main=t;//保存Test 对象

public final void notify()

皇家国际app 13

在念书此本领时,小编用的的是一个秒杀项目标ssm版,大家在学学习此技能的时候可以用轻便一点的Maven项目进展测量检验。因本项目是读书如何开展安插项目技艺的,本次就针对实际品种展开介绍。

10

public final void notifyAll()

用Logstash分析日志

1、 使用Maven实行配置项目必要

11}

public final void wait()

在上一小节中,你曾经创立了贰个着力的Logstash管道来测验你的Logstash设置。在切实世界中,一个Logstash管理会稍微复杂一些:它平时有三个或多个input, filteroutput 插件。

1) 项目小编属于Maven项目

12

public final void wait(long timeout)

在这一小节中,你将成立三个Logstash管道,而且使用Filebeat将Apache Web日志作为input,剖析那些日记,然后将解析的数量写到一个Elasticsearch集群中。你将要安插文件中定义管道,并非在指令行中定义管道配备。

2) 须求配置的是war包

13protectedvoid finalize()

public final void wait(long timeout, int nanos)

皇家国际app,在开首在此以前,请先下载示例数据。

3) 引进插件

14

  1. 干什么 String 对象是不可变的?

假若想学习Java工程化、高质量及布满式、深入浅出。微服务、Spring,MyBatis,Netty源码分析的朋

在须求配置的类型的pom,xml文件中引进tomcat插件,在project->build-> plugins节点引进tomcat插件。

15{

字符串池之所以大概,正是因为字符串在 Java 中是不可变的。由此 Java 运营时处境节省了汪洋堆空间,因为不相同的 String 变量可以引用池中的同一 String 变量。借使 String 不是不可变的, 则字符串驻留(String interning)将是不容许的,因为如若任一变量改换所引述的String对象的值,它也会反映在别的变量中。

友能够加笔者的Java高等沟通:854630135,群里有Ali大牌直播批注手艺,以及Java大型互连网技巧的录像免费享用给大家。

org.apache.tomcat.maven

16

假定字符串不是不可变的,那么它可能会对应用程序形成悲惨的平安勒迫。比如,数据库客商名和密码都作为 String 传递以获得数据库连接,Socket 编制程序的主机和端口音信也是那样。由于字符串是不可变的,由此其值无法被改动。不然,任何骇客都能够篡改其援引的值,那会促成应用程序中的安全难题。

布置Filebeat来发送日志行到Logstash

常被问到的十二个,Java代码自动安排。tomcat7-maven-plugin

17main.ref=this;// 回复本对象,让本对象可达

鉴于 String 是不可变的,由此它对与二十四线程管理的话是平安的,並且能够在差别的线程之间分享单个 String 实例。这防止了为线程安全选用同步;字符串是隐式线程安全的。

在您创建Logstash管道之前,你需求先配备Filebeat来发送日志行到Logstash。Filebeat客商端是二个轻量级的、能源友好的工具,它从服务器上的文本中搜聚日志,并将那个日记转载到您的Logstash实例以扩充拍卖。Filebeat设计正是为了可信赖性和低顺延。Filebeat在主机上据有的财富比少之甚少,並且Beats input插件将对Logstash实例的能源必要降到最低。

18

字符串被用在 Java 类加载器中,其不可变性为类加载器加载精确的类提供了安全性。不然的话,请思考这么一个险恶的情状,在你尝试加载 java.sql.Connection 类时,你引用的值却被改换为 myhacked.Connection,并且它能对数据库实施你无需的操作。

(画外音:注意,在叁个第一名的用例中,Filebeat和Logstash实例是分别的,它们各自运维在差异的机械上。在本教程中,Logstash和Filebeat在一样台机器上运行。)

admin

19System.out.println("This is finalize");//用于测量检验finalize只运行叁次

是因为 String 是不可变的,由此在它被创立时其散列码就被缓存,不须求再行总结。那使得它成为映射中键的杰出对象,它的管理速度比别的HashMap 键类型快。那便是干什么 String 是 HashMap 中最常用的键类型。

至于Filebeat请参谋《开头使用Filebeat》

admin

20

  1. final,finally,和 finalize 三者之间有哪些两样?

皇家国际app 14

8080

21 }

那是自己最欣赏的难题。

第1步:配置filebeat.yml

/seckill-manager

22

final 关键字用于在四个语境下定义只可以分配叁次的实业。

filebeat.inputs:

UTF-8

23 }

finally 代码块是用于试行重大代码 的代码块。无论是不是管理非常,finally 代码块总会被施行。finally 代码块紧随 try 代码块或 catch 代码块。

- type: log

UTF-8

24

那是在剔除或销毁对象在此之前垃圾回收器总会调用的措施,该格局使得垃圾回收机制能够实行清理移动。

paths:

4) 执行Maven的redeploy操作

25 class Test {

  1. 什么样是菱形承继难题?

- /usr/local/programs/logstash/logstash-tutorial.log

实行的授命:tomcat7:redeploy

26

菱形承袭难题显示了为啥在 Java 中大家不被允许完毕多三翻五次。假如有多个类一齐继承二个有一定措施的超类,那么该办法会被五个子类重写。然后,假诺你调节同临时候继续那四个子类,那么在您调用该重写方法时,编写翻译器不能够识别你要调用哪个子类的点子。

output.logstash:

在eclipse下安插的一声令下如下:

27 MyObject ref;

皇家国际app 15

hosts: ["localhost:5044"]

皇家国际app 16

28

咱俩把那几个难题称为 菱形继承难题 。上海体育地方对它作了印证,它也得名于此。

第2步:在logstash安装目录下新建二个文件first-pipeline.conf

2、必要潜心的主题材料点

29 public static void main(String[] args) {

  1. 何以使三个类不可变?

皇家国际app 17

1、在将项目揭穿到长途汤姆cat时要求运行远程汤姆cat管控台账号

30

自己以为那是一个一定艰巨的标题。您须求对类进行频频修改,以落实不可变性:

(画外音:刚才说过了平日Logstash管理有三局地(输入、过滤器、输出),这里input上边beats { port => "5044" }的意趣是用Beats输入插件,而stdout { codec => rubydebug }的意思是出口到调控台)

张开tomcat管控台账号地址为:汤姆cat安装目录/conf/tomcat-users.xml文件

31 Test test=new Test();

将类注明为 final,使其不恐怕被接续。

第3步:检查布置并运维Logstash

在tomcat-users.xml文件中供给配置允许访问纯文本接口权限,以便maven的tomat插件能够透过此办法开展陈设项目。

32

全部域都用 private 修饰,不相同意直接待上访谈。

bin/logstash -f first-pipeline.conf --config.test_and_exit

在tomcat-users节点新增role属性和user属性,如下:

33 test.ref=new MyObject;

不提供变量的 setter 方法。

(画外音:--config.test_and_exit选项的情致是深入分析配置文件并告知任何不当)

解释:给账号admin配置manager-script及manager-gui权限

34

负有可变域都用 final 修饰, 使它的值只好分配二遍。

bin/logstash -f first-pipeline.conf --config.reload.automatic

汤姆cat角色解释图:

35 test.ref=null; //MyObject对象为不可达对象,finalize将被调用

由此构造函数执行深克隆早先化全数域。

(画外音:--config.reload.automatic选项的意趣是启用自动配置加载,以致于每便你改改完配置文件从此不须要终止然后重启Logstash)

皇家国际app 18

36

对 getter 方法得到的对象实行克隆以回到别本,并非回去实际的指标援引。

第4步:启动filebeat

2、在供给长途发布到的靶子汤姆cat应该是运作情形,保障Maven的tomcat插件能够访谈到对象汤姆cat完毕项指标配备。

37 System.gc();

  1. 什么样是单例情势?

./filebeat -e -c filebeat.yml -d "publish"

【③行使Shell进行代码布署】

38

单例格局是指三个类仅允许创立其本身的三个实例,并提供对该实例的拜谒权限。它包罗静态变量,能够包容其自己的不今不古和民用实例。它被使用于这种光景——客户期望类的实例被封锁为八个目的。在急需单个对象来和睦度个系统时,它会很有帮扶。

借使一切正常,你将会在Logstash调整台下来看类似那样的出口:

在运用Shell脚本举办重新安插项目时,必要明白Shell脚本的编排,Shell脚本须求达成以下功效:

39 if (test.ref!=null) System.out.println("My Object还活着");

  1. 怎么样是凭借注入?

本文由皇家国际app发布,转载请注明来源:常被问到的十二个,Java代码自动安排