java知识

面试准备

Writen By CoolGhost,Started With 2016/10

  • 连接Oracle数据库操作
    ResultSet rs = null;
    Statement stmt = null;
    Connection conn = null;
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        conn = DriverManager.getConnection("jdbc:oracle:thin:@ip:port", "username", "password");
        stmt = conn.createStatement();
        rs = stmt.executeQuery("select * from dept");
        while (rs.next()) {
            System.out.println(rs.getString("deptno"));
        }
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            if (rs != null) {
                rs.close();
                rs = null;
            }
            if (stmt != null) {
                stmt.close();
                stmt = null;
            }
            if (conn != null) {
                conn.close();
                conn = null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
  • java单例模式
    public class Singleton {
      private Singleton() {}
      private static Singleton single=null;
      public static Singleton getInstance() {
           if (single == null) {
               single = new Singleton();
           }
          return single;
      }
    }
    
  • java路径
    两种方法:一种是\\\另外一种是/
  • java正则
    public class RegexMatches
    {
        private static final String REGEX = "\\bcat\\b";
        private static final String INPUT =
                "cat cat cat cattie cat";
        public static void main( String args[] ){
            Pattern p = Pattern.compile(REGEX);
            Matcher m = p.matcher(INPUT); // 获取 matcher 对象
            int count = 0;
            while(m.find()) {
                count++;
                System.out.println("Match number "+count);
                System.out.println("start(): "+m.start());
                System.out.println("end(): "+m.end());
            }
        }
    }
    
    注意,java中只用正则\需要进行转义,如\\d
  • String、StringBuffer、StringBuilder
    • 其中,String被final修饰,为不可变类,不能被继承,并且其值不能被改变。进行添加操作的时候会转换成 StringBuffer类型
    • StringBuffer、StringBuilder均为可变类,其功能基本类似,但是StringBuilder线程不安全
    • String因为是不可变类,因此不适合用来频繁的进行修改操作,而StirngBuilder和StringBuffer主要看是否运用在多线程中。另外三者都是借助char[]实现
  • 浮点默认为dobule类型,如需float类型,(float)0.1或0.1f
  • Switch
    基本类型中long、float、double类型不能用于switch、而非基本类型的String可以用于switch
  • 线程
    线程也被称为轻量级进程,是程序执行的最小单元,一个进程可以拥有多个线程,各个线程之间共享程序的内存空间。
  • 多线程有点
    • 多线程可以减少程序响应时间
    • 线程的创建和切换开销较小
    • 单线程浪费多CPU执行能力
    • 多线程能简化程序结构,便于理解和维护
  • Servlet的生命周期
    初始化阶段:调用init()方法;响应客户请求阶段:调用service()方法,并依据请求类型调用dopost和doget方法;终止阶段:调用destroy()方法
  • java读取文件
    //字节流,不会出现乱码
    File file=new File(filePath);
    if(file.isFile() && file.exists()){ //判断文件是否存在
        InputStreamReader read = new InputStreamReader(new FileInputStream(file),encoding);//考虑到编码格式
        BufferedReader bufferedReader = new BufferedReader(read);
        String lineTxt = null;
        while((lineTxt = bufferedReader.readLine()) != null){
            System.out.println(lineTxt);
        }
        read.close();
    }else{
        System.out.println("找不到指定的文件");
    }
    
    //字符流,可能出现乱码
    FileReader fr=new FileReader(filePath);
    BufferedReader bufferedReader = new BufferedReader(fr);
    
  • servlet和cgi
    servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
  • jsp跳转方式
    有两种:
    • forward跳转:
      • 服务器端跳转,地址栏不改变。
      • 执行到跳转语句后马上执行跳转,之后的代码不再执行(跳转之前一定要释放全部资源)。
      • request设置的属性在跳转后的页面仍然可以使用。
    • response跳转:response.sendRedirect("跳转页面地址")
      • 客户端跳转,地址栏改变。
      • 所有代码执行完毕后跳转。
      • 跳转后页面不能使用上一个页面的request。
      • 使用地址重写传递参数(response.sendRedirect("URL?参数名=参数值"))。
  • java数组初始化赋值
    int[] nums = {0,1,2,3,4,5,6,7,8,9};
    int[] nums = new int[]{0,1,2,3,4,5,6,7,8,9};
    
  • 抽象类
    其子类权限只能扩大,不能缩小。
  • java static
    public class Alpha {
        static int i = 1;
        static {
            i++;
        }
        public Alpha() {
            i++;
        }
        public static void main(String[] args) {
            Alpha t1 = new Alpha();
            System.out.println(t1.i);       //3
            Alpha t2 = new Alpha();
            System.out.println(t2.i);//4 静态资源只执行一次
        }
    }
    
  • SQL truncate 、delete与drop区别
    • truncate 和 delete 只删除数据不删除表的结构
    • delete 语句是数据库操作语言(dml),事务提交之后才生效。truncate、drop 是数据库定义语言(ddl),立即生效,不处罚事务。
  • mybatis
    • statementType设置为CALLABLE,默认情况下是PREPARED
    • 一般使用#,$符号只有在特定情况下,如表前缀才使用,可能带来SQL注入
    • jdbctype如果不设定,并且如果参数为null,则会1111错误
  • spring mvc
    • 运行流程


      流程
      • 用户发送请求时,首先被DispatcherServlet捕获
      • DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping
      • HandlerMapping根据请求,访问不同Controller进行处理
      • Controller进行业务的处理,完成后将返回的数据和跳转到的界面封装到ModelAndView
      • ViewResolver解析Controller返回的ModelAndView,读取其信息,然后渲染界面完成一次请求
    • mvc:view-controller,让请求不通过Handler,直接访问到响应视图。而在配置这个标签之后,默认的@RequestMapping将会失效,这个时候需要配置mvc:annotation-driven。而mvc:resources则是用来配置静态资源比如:css,js之类。

你可能感兴趣的:(java知识)