java面试题整理(5)

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.常用的字符串编码,如何解决中文乱码问题?

内容引用自这里!

   此外: 字符集的全称  应该叫做:   字符编码集;    

字体,字库,编码的关系

30.线程状态有哪些? BLOCKED 和 WAITING 有什么区别?

原文地址在这里!

以下内容转自这里!

以下地址原文在这里!

以下内容来自这里!

猜你喜欢

转载自blog.csdn.net/qq_36285943/article/details/85927046