面试笔记之java笔记随记

java笔记随记

首记

软件的命名及路径尽量使用英文名,在测试软件失败后,可以尝试注销用户重登,在注册表中的信息就可以更新,否则有可能机器还是检测到原来的路径,导致软件或程序失败不变。

接口数组

arraylist和linkedlist

①在底层结构中,数组因为有下标的关系,在查询操作时可以快速的通过下标找到数据,但是因为数组

​ 是线性结构,在数组中间增删数据时候都将后半部分的数据迁移

②链表的查询方式较为单一,不支持下标查询,只能通过链表顺序查询,这样的查询方式造成了查询缓 慢,但因为是采用链式结构,增删只需要改变底层的指针结构即可

  • ArrayList的底层是数组,查询快,增删慢
  • LinkedList的底层是链表,查询慢,增删快

hashtable和hashmap

  1. 都是继承了map
  2. hashtable不允许出现null值,而hashmap允许null可以作为key或者value
  3. 遍历方式上都可以使用iterator,但是hashtable还可以使用Enumeration
  4. 哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值
  5. 内部实现方式的数组的初始大小和扩容的方式不同。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

Java虚拟机内容

  1. 释放掉占据的内存空间是由gc完成,但是程序员无法明确强制其运行,该空间在不被引用的时候不一定会立即被释放,这取决于GC本身,无法由程序员通过代码控制。

零散基础

  • ASCLL码含有1个字节,即8个bit(比特)位,标准的ascll码是有7个比特位,允许使用最高位扩展,因此一般的ASCLL有2^7 = 128个,扩展高位后有256个
  • 静态变量的值是可以修改的,但只能被初始化一次

java基础篇

面向对象的五大基本原则

  1. 单一职责原则(SRP)
  2. 开放封闭原则(OCP)
  3. 里氏替换原则(LSP)
  4. 依赖倒置原则(DIP)
  5. 接口隔离原则(ISP)

重载和重写

方法重载是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同

方法重写是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型

  • 方法没有继承一说,只有重载和重写。子类只可以调用父类的空参数构造函数而不是继承

final关键字

1.final修饰变量,则等同于常量

2.final修饰方法中的参数,称为最终参数。

3.final修饰类,则类不能被继承

4.final修饰方法,则方法不能被重写。

类方法static

  1. 类方法:使用static修饰(静态方法),属于整个类的,不是属于某个实例的,只能处理static域或调用static方法;

  2. 实例方法:属于对象的方法,由对象来调用。

    区别:实例方法是建立实例才有的方法,类方法是直接可以使用类引用,不需要实例化就可以使用的方法,一般在项目中类方法都是设置为工具类使用的;

    ps:类方法不是实例,没有this指针

    // 这个是实例方法 
    void` `sum(``float` `x, ``float` `y) {
    a = max(x, y);
    b = min(x, y);
    }
    // 类方法
    static float getMax(float x, float y) {
    float c;
    c = max(x, y) * max(x, y);
    return c;
    }
    

webService开发

  • JSP和servlet的内置对象及获得方式

    1. out->response.getWriter

    2. request ->Service方法中的req参数

    3. response ->Service方法中的resp参数

    4. session ->request.getSession

    5. application ->getServletContext

    6. exception ->Throwable

    7. page ->this

    8. pageContext ->PageContext

    9. Config ->getServletConfig

  • 在jsp开发中有四大域:①request、response ②applicaiton ③page ④session

  • session 和application的区别:

    session和application都是作用于整个浏览器,不同的是session是不同客户登录时创建的,但是application是服务器启动时创建的,因为服务器启动时会先创建一个applicationContext,这个一般是放一些基本的配置,放入里面的信息是所有用户都可以访问的,作用于所有网页以及所有用户

线程篇

一些常见的线程即安全性

  1. Vector相当于一个线程安全的List
  2. HashMap是非线程安全的,其对应的线程安全类是HashTable
  3. Arraylist是非线程安全的,其对应的线程安全类是Vector
  4. StringBuffer是线程安全的,相当于一个线程安全的StringBuilder
  5. Properties实现了Map接口,是线程安全的

常见的线程启动方式

  1. 继承Thread

    public class MyThread extends Thread{//继承Thread类
    
      public void run(){
    
      //重写run方法
    		Thread.slppe(1000);
      }
    
    }
    
    public class Main {
    
      public static void main(String[] args){
    		
        new MyThread().start();//创建并启动线程
    		new MyThread().run();//普通程序启动,没有线程执行	
      }
    
    }
    

    这类方式较为容易接受,通过继承Thread实现多线程,需要记住的要点就是:启动线程是用start()方法,要是直接调用run()也会执行,但是程序变为普通执行,没有线程执行!

  2. 继承runnable接口

    public class MyThread2 implements Runnable {//实现Runnable接口
    
      public void run(){
    
      //重写run方法
    	
      }
    
    }
    
    public class Main {
    
      public static void main(String[] args){
    
        //创建并启动线程
    
        MyThread2 myThread=new MyThread2();
    
        Thread thread=new Thread(myThread);
    
        thread().start();
    
        //或者    new Thread(new MyThread2()).start();
    
      }
    
    }
    

创建Runnable实现类的实例,并用这个实例作为Thread的target来创建Thread对象,这个Thread对象才是真正的线程对象

子类父类的执行顺序

  1. 父类的静态代码块
  2. 子类的静态代码块
  3. 执行父类的构造代码块
  4. 执行父类的构造方法
  5. 执行子类的构造代码块
  6. 执行子类的构造方法
  7. 执行子类普通方法

struts2的工作流程

1、客户端浏览器发出HTTP请求.

2、根据web.xml配置,该请求被FilterDispatcher接收

3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton

4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。

5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面

6、返回HTTP响应到客户端浏览器

你可能感兴趣的:(java,随笔)