zoukankan      html  css  js  c++  java
  • 面试题

    public static void readToBuffer(StringBuffer buffer, String filePath) throws IOException {
            InputStream is = new FileInputStream(filePath);
            String line; // 用来保存每行读取的内容
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            line = reader.readLine(); // 读取第一行
            while (line != null) { // 如果 line 为空说明读完了
                buffer.append(line); // 将读到的内容添加到 buffer 中
                buffer.append("
    "); // 添加换行符
                line = reader.readLine(); // 读取下一行
            }
            reader.close();
            is.close();
        }
    
        /**
         * 读取文本文件内容
         * @param filePath 文件所在路径
         * @return 文本内容
         * @throws IOException 异常
         * @author cn.outofmemory
         * @date 2013-1-7
         */
        public static String readFile(String filePath) throws IOException {
            StringBuffer sb = new StringBuffer();
            FileUtils.readToBuffer(sb, filePath);
            return sb.toString();
        }
    }
    

      一个请求在spring3 mvc 框架中的处理大概分为以下几个步骤 
    spring工作机制及为什么要用?
    1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。
    2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
    3.DispatcherServlet请请求提交到目标Controller
    4.Controller进行业务逻辑处理后,会返回一个ModelAndView
    5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
    6.视图对象负责渲染返回给客户端。

     一个请求在Struts2框架中的处理大概分为以下几个步骤 
        1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求
        2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 
        3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
        4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 
        5、ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类 ,这里,我们一般是从struts.xml配置中读取。
        6、ActionProxy创建一个ActionInvocation的实例。
        7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
        8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是, 也可能是另外的一个Action链)个        需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper在上述过程中所有的       对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。

    编写一个程序,将d:java目录下的所有.java文件复制到d:jad目录下,并将原来文件的扩展名从.java改为.jad。

    public class Jad2Java {
    public static voidmain(String[] args) throws Exception {
    File srcDir =new File("java");
    if(!(srcDir.exists()&& srcDir.isDirectory()))
    thrownew Exception("目录不存在");
    File[] files= srcDir.listFiles(
    newFilenameFilter(){
    publicboolean accept(File dir, String name) {
    returnname.endsWith(".java");
    }
    }
    );
    System.out.println(files.length);
    File destDir= new File("jad");
    if(!destDir.exists())destDir.mkdir();
    for(File f:files){
    FileInputStream fis = new FileInputStream(f);
    StringdestFileName = f.getName().replaceAll("\.java$", ".jad");
    FileOutputStreamfos = new FileOutputStream(new File(destDir,destFileName));
    copy(fis,fos);
    fis.close();
    fos.close();
    }
    }
    private static voidcopy(InputStream ips,OutputStream ops) throws Exception{
    int len = 0;
    byte[] buf =new byte[1024];
    while((len =ips.read(buf)) != -1){
    ops.write(buf,0,len);
    }
    }
    }
    

     由本题总结的思想及策略模式的解析:
    1.
    class jad2java{
    1. 得到某个目录下的所有的java文件集合
    1.1 得到目录 File srcDir = newFile("d:\java");
    1.2 得到目录下的所有java文件:File[] files =srcDir.listFiles(new MyFileFilter());
    1.3 只想得到.java的文件: class MyFileFilterimplememyts FileFilter{
    publicboolean accept(File pathname){
    returnpathname.getName().endsWith(".java")
    }
    }
    2.将每个文件复制到另外一个目录,并改扩展名
    2.1 得到目标目录,如果目标目录不存在,则创建之
    2.2 根据源文件名得到目标文件名,注意要用正则表达式,注意.的转义。
    2.3 根据表示目录的File和目标文件名的字符串,得到表示目标文件的File。
    //要在硬盘中准确地创建出一个文件,需要知道文件名和文件的目录。
    2.4 将源文件的流拷贝成目标文件流,拷贝方法独立成为一个方法,方法的参数采用抽象流的形式。
    //方法接受的参数类型尽量面向父类,越抽象越好,这样适应面更宽广。
    }

  • 相关阅读:
    Java内存模型与volatile
    Struts2验证框架的注意事项
    利用Java编写简单的WebService实例
    加速Java应用开发速度1——加速spring/hibernate应用调试时启动速度
    Java关键字synchronized详解
    JAVA对象的序列化与反序列化
    加速Java应用开发速度3——单元/集成测试+CI
    java程序性能优化之找出内存溢出元凶
    加速Java应用开发速度2——加速项目调试启动速度
    java实现动态切换上网IP (ADSL拨号上网)
  • 原文地址:https://www.cnblogs.com/dongfengyuxy/p/5852548.html
Copyright © 2011-2022 走看看