Java Advance

1. A class with a given name can only be loaded once by a given classloader.

 

2. When the JVM is started, three class loaders are used:

    1.Bootstrap class loader - loads the core Java libraries(<JAVA_HOME>/lib directory). This class loader, which is part of the core JVM, is writtern in native code.

    2.Extensions class loader - loads the code in the extensions directories(<JAVA_HOME>/lib/ext or any other directory specified by the java.ext.dirs system property). It's implemented by the sun.misc.Launcher$ExtClassLoader class.

    3.System class loader - loads code found on java.class.path, which maps to the system CLASSPATH variable. This is implemented by the sun.misc.Launcher$AppClassLoader class.

 

2. Thread

Thread.yield(); -- you are suggesting that otehr threads with the same priority might be run.

Thread.sleep(); -- throws InterruptedException

TimeUnit.MILLISECONDS.sleep(100); /j2se5 or 6

Thread.currentThread();

thread1.join(); -- the main thread waits thread1 task finish. The call to join() may be aborted by calling interrupt() on the calling thread.

thread1.interrupt(); -- the main thread will go on process since the thread1 has been interruptted.

wait(),notify(),notifyAll() - should define in 'synchronized' method or block, otherwise, IllegalMonitorStateException will throw in runtime.

 

synchronized(x) { 

  x.notifyAll(); 

}

 

3.ArrayList vs. Vector

Collection

©ÀList     ----- sortable

©¦©ÀLinkedList

©¦©ÀArrayList  --- expand 50%, non-thread-safe

©¦©¸Vector  --- expand 100%, thread-safe

©¦¡¡©¸Stack

©¸Set     ------ no-sortable, no-duplicate

Map

©ÀHashtable

©ÀHashMap

©¸WeakHashMap  --- if the key object is not referenced by outside, then the entry will be GCed.

 

4.Reflection:

Class<String> clz = (Class<String>) Class.forName("java.lang.String");

System.out.println("getTypeParameters():");

for(TypeVariable tv :clz.getTypeParameters()) {

    System.out.println(tv);

}

System.out.println("getSuperClass():");

System.out.println(clz.getSuperclass().getCanonicalName());

 

System.out.println("clz.getModifiers():");

System.out.println(Modifier.toString(clz.getModifiers()));

 

 

System.out.println("getInterfaces():");

for(Class c : clz.getInterfaces()) {

    System.out.println(c.getCanonicalName());

}

 

5.Regex:

jpql.replaceFirst("^(?i)SELECT ((?!FROM).)* FROM", "SELECT COUNT(r.id) FROM");

 

6.Keystore:

    1. gen a keystore file:

        keytool -genkey -alias jetty -keyalg RSA -keystore my.keystore

 

7.Java Locale:

append -J-Duser.country=US to any java command.

or -J-Duser.language=en

 

to find all java system properties:

for(Map.Entry<Object, Object> s : System.getProperties().entrySet()) {

    System.out.println(s.getKey() + "=" + s.getValue());

}

 

e.g.: keytool -genkey -alias jetty -keyalg RSA -keystore .keystore -J-Duser.language=en

 

8. compile/run java in shell:

$javac com/asran/HelloWorld.java

$java com.asran.HelloWorld

 

9. join list as string with comma separated:

org.apache.commons.lang.StringUtils.join(list, ",");

 

10. -javaagent:***-agent.jar

MySimpleTransformer.java

------------------------------------------------------------------------------------------

package com.asran.javagent;

import java.lang.instrument.ClassFileTransformer;

import java.lang.instrument.IllegalClassFormatException;

import java.security.ProtectionDomain;

 

public class MySimpleTransformer implements ClassFileTransformer {

    public byte[] transform(ClassLoader classloader,

                                String classname,

                                Class redefinedclass,

                                ProtectionDomain protectiondomain,

                               byte b[]) throws IllegalClassFormatException {

        if (!classname.endsWith("HelloWorld"))

            return (null);

 

        String line = "";

        for (int i = 0; i < b.length; i++) {

            line += Byte.toString(b[i]) + " ";

            if (line.length() > 60) {

                System.out.println(line);

                line = "";

            }

            if (b[i] == (byte) '6')

                b[i] = (byte) '7';

        }

        System.out.println(line);

        System.out.println("The number of bytes in HelloWorld: " + b.length);

        return (b);

    }

}

 

MySimpleAgent.java

------------------------------------------------------------------------------------------

package com.asran.javagent;

import java.lang.instrument.Instrumentation;

 

public class MySimpleAgent {

    public static void premain(String agentArgs, Instrumentation inst) {

        inst.addTransformer(new MySimpleTransformer());

    }

}

 

HelloWorld.java

------------------------------------------------------------------------------------------

package com.asran.javagent;

 

public class HelloWorld {

    public static void main(String arg[]) {

        System.out.println("The number six is 6");

    }

}

 

MyManifest.mf

------------------------------------------------------------------------------------------

Premain-Class: com.asran.javagent.MySimpleAgent

(carriage return[CR] is mandantory)

 

Test:

------------------------------------------------------------------------------------------

>jar cvfm MyAgent.jar MyManifest.mf com/asran/javagent/MySimpleAgent.class com/asran/javagent/MySimpleTransformer.class

>java -javaagent:MyAgent.jar com.asran.javagent.HelloWorld

技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧! 在当今快速发展的信息技术领域,技术选型是决定一个项目成功与否的重要因素之一。基于以下的技术栈,我们为您带来了一份完善且经过实践验证的项目资源,让您在学习和提升编程技能的道路上事半功倍。以下是该项目的技术选型和其组件的详细介绍。 在后端技术方面,我们选择了Java作为编程语言。Java以其稳健性、跨平台性和丰富的库支持,在企业级应用中处于领导地位。项目采用了流行的Spring Boot框架,这个框架以简化Java企业级开发而闻名。Spring Boot提供了简洁的配置方式、内置的嵌入式服务器支持以及强大的生态系统,使开发者能够更高效地构建和部署应用。 前端技术方面,我们使用了Vue.js,这是一个用于构建用户界面的渐进式JavaScript框架。Vue以其易上手、灵活和性能出色而受到开发者的青睐,它的组件化开发思想也有助于提高代码的复用性和可维护性。 项目的编译和运行环境选择了JDK 1.8。尽管Java已经推出了更新的版本,但JDK 1.8依旧是一种成熟且稳定的选择,广泛应用于各类项目中,确保了兼容性和稳定性。 在服务器方面,本项目部署在Tomcat 7+之上。Tomcat是Apache软件基金会下的一个开源Servlet容器,也是应用最为广泛的Java Web服务器之一。其稳定性和可靠的性能表现为Java Web应用提供了坚实的支持。 数据库方面,我们采用了MySQL 5.7+。MySQL是一种高效、可靠且使用广泛的关系型数据库管理系统,5.7版本在性能和功能上都有显著的提升。 值得一提的是,该项目包含了前后台的完整源码,并经过严格调试,确保可以顺利运行。通过项目的学习和实践,您将能更好地掌握从后端到前端的完整开发流程,提升自己的编程技能。欢迎参考博主的详细文章或私信获取更多信息,利用这一宝贵资源来推进您的技术成长之路!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值