21.如何停止一个线程?
22.什么是线程安全?synchronized 和 lock的区别?
23.wait和sleep,notify与 notifyall的区别?
24.线程池的深入理解?
此外注意,管理者与 任务的关系是独立的。 二者通过线程的同步机制完成!
25.java中线程池相关的类有哪些?
26.什么是XSS攻击,如何避免?
27.什么是CSRF攻击,如何避免?
28.java动态代理的概念与实现?
package dynamicProxy;
import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Arrays;
/**
* @author [email protected]
* @time 2019/1/8 19:24
*/
public class Proxy {
public static Object newProxyInstance(Class iinterface, InvocationHandler h) throws Exception{
String rt ="\r\t";
String methodStr = "";
Method[] methods = iinterface.getMethods();
for (Method m:methods){
methodStr += "@Override" +rt+ "public int "+ m.getName()+"()" +rt+"{"+rt+
" try{"+ rt+
" Method md = "+iinterface.getName()+".class.getMethod(\""+m.getName()+"\");"+rt+
"return (int)h.invoke(this,md,null);" +rt +
" } catch(Throwable t){t.printStackTrace();} return 0;"+rt+
"}";
}
String src ="" +rt+
"import java.lang.reflect.Method;"+rt+"import java.lang.reflect.InvocationHandler;"+rt+
"public class ServiceImpl2 implements "+ iinterface.getName()+rt+
"{" +rt+
"public ServiceImpl2(InvocationHandler h)"+rt+
"{"+rt+
"this.h=h;"+rt+
"}"+rt+
" InvocationHandler h;"+ rt+
methodStr +
"}";
String fileName = "D:/test/ServiceImpl2.java";
compile(src,fileName);
Object m = loadMemory(h);
return m;
}
private static void compile(String src,String filename) throws IOException{
File f = new File(filename);
FileWriter fileWriter = new FileWriter(f);
fileWriter.write(src);
fileWriter.flush();
fileWriter.close();
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null,null,null);
Iterable units = fileManager.getJavaFileObjects(filename);
Iterable options = Arrays.asList("-cp", "D:/dev/MybatisTest/classes/MybatisTest.jar");
JavaCompiler.CompilationTask t = compiler.getTask(null,fileManager,null,options,null,units);
t.call();
fileManager.close();
}
private static Object loadMemory(InvocationHandler h) throws MalformedURLException,ClassNotFoundException,
NoSuchMethodException,InstantiationException,IllegalAccessException,InvocationTargetException{
URL[] urls = new URL[]{new File("D:/test").toURI().toURL()};
URLClassLoader classLoader = new URLClassLoader(urls);
Class c = classLoader.loadClass("ServiceImpl2");
Constructor ctr = c.getConstructor(InvocationHandler.class);
Object m = ctr.newInstance(h);
return m;
}
public static class B implements A{
@Override
public int sayHello() {
System.out.println("Hello world!");
return 666;
}
}
public static class C implements InvocationHandler{
private Object target;
public C(Object target){
this.target= target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object ret = null;
ret = method.invoke(target,args);
return ret;
}
}
public static void main(String[] args) throws Exception {
A a = (A) Proxy.newProxyInstance(A.class,new C(new B()));
a.sayHello();
}
}
package dynamicProxy;
/**
* @author [email protected]
* @time 2019/1/8 21:46
*/
public interface A{
int sayHello();
}
注意,UrlClassLoader使用时,外部的类如果带包名,始终加载不了不知道为什么。 注意Compile的编译参数; 同时类内部接口不能被compile编译找到!
29.常用的字符串编码,如何解决中文乱码问题?
此外: 字符集的全称 应该叫做: 字符编码集;