首页 > 技术文章 > 每日记载内容总结50

cuiyf 2019-02-28 18:41 原文

  1. Maven中的dependencyManagement 意义【原文链接
    在Maven中dependencyManagement的作用其实相当于一个对所依赖jar包进行版本管理的管理器。
    pom.xml文件中,jar的版本判断的两种途径:
    (1):如果dependencies里的dependency自己没有声明version元素,那么maven就
    会到dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你必须为dependency声明一个version 。
    (2):如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准。

     //只是对版本进行管理,不会实际引入jar  
     <dependencyManagement>  
           <dependencies>  
                 <dependency>  
                     <groupId>org.springframework</groupId>  
                     <artifactId>spring-core</artifactId>  
                     <version>3.2.7</version>  
                 </dependency>  
         </dependencies>  
     </dependencyManagement>  
       
     //会实际下载jar包  
     <dependencies>  
            <dependency>  
                     <groupId>org.springframework</groupId>  
                     <artifactId>spring-core</artifactId>  
            </dependency>  
     </dependencies>  
    
  2. StringUtils部分用法【原文链接

     /*替换字符串:把text中的searchString替换成replacement,max是最大替换次数,默认是替换所有*/
     StringUtils.replaceOnce("sshhhss","ss","p");//只替换一次-->结果是:phhhss
     StringUtils.replace("sshhhs","ss","p");//全部替换--->结果是:phhhs
     StringUtils.replace("sshhhsshss","ss","7777",2);//max:最大替换次数-->结果是:7777hhh7777hss
     StringUtils.replaceChars("sshhhs","ss","p");//替换所有字符,区别于replace--->结果是:pphhhp而不是pphhhs
    
  3. ManagementFactory
    ManagementFactory是一个为我们提供各种获取JVM信息的工厂类,使用ManagementFactory可以获取大量的运行时JVM信息,比如JVM堆的使用情况,以及GC情况,线程信息等,通过这些数据项我们可以了解正在运行的JVM的情况,以便我们可以做出相应的调整。

     RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
     String pid = runtimeMXBean.getSystemProperties().get("PID");
    
  4. SpringApplication配置项
    RegisterShutdownHook : Spring在非web应用中关闭IoC容
    setSources(Set

  5. System.arraycopy()和Arrays.copyOf() (来源)

    System.arraycopy()#####
     public static native void arraycopy(Object src,int srcPos, Object dest, int destPos,int length);
    

    src - 源数组。
    srcPos - 源数组中的起始位置。
    dest - 目标数组。
    destPos - 目标数据中的起始位置。
    length - 要复制的数组元素的数量。

    该方法用了native关键字,说明调用的是其他语言写的底层函数。

    Arrays.copyOf()#####
     public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
        @SuppressWarnings("unchecked")    
        T[] copy = ((Object)newType == (Object)Object[].class)?(T[]) new Object[newLength]:(T[])    
        Array.newInstance(newType.getComponentType(), newLength);System.arraycopy(original,0, copy,0,                       
        Math.min(original.length, newLength));    
        return copy;
     }
    

    该方法对应不同的数据类型都有各自的重载方法
    original - 要复制的数组
    newLength - 要返回的副本的长度
    newType - 要返回的副本的类型
    仔细观察发现,copyOf()内部调用了System.arraycopy()方法

    区别在于:

    arraycopy()需要目标数组,将原数组拷贝到你自己定义的数组里,而且可以选择拷贝的起点和长度以及放入新数组中的位置
    copyOf()是系统自动在内部新建一个数组,调用arraycopy()将original内容复制到copy中去,并且长度为newLength。返回copy; 即将原数组拷贝到一个长度为newLength的新数组中,并返回该数组。

    **
    Array.copyOf()可以看作是受限的System.arraycopy(),它主要是用来将原数组全部拷贝到一个新长度的数组,适用于数组扩容。
    如果是数组比较大,那么使用System.arraycopy会比较有优势:因为其使用的是内存复制,省去了大量的数组寻址访问等时间。**

  6. JDBC Type

JDBC Type|Java Type
--|--

推荐阅读