20.05.02

1.

只有实现了Serializable接口的类,其对象才能序列化。

  • (Serializable,可序列化的,可串行)
  • (Cloneable,可复制的;Comparable,可比较的;Writeable,可写入的,hadoop中的接口

2.

依赖注入

  • 依赖注入能够独立开发各组件,然后根据组件间关系进行组装;
  • 依赖注入提供使用接口编程;
  • 依赖注入指对象在使用时动态注入;
  • 依赖注入使组件之间相互依赖,相互制约; (依赖注入的动机就是减少组件之间的耦合度,使开发更为简洁)

3.异常处理

  • ---------------------------分割线待补充------------------------------------------------

在这里插入图片描述
因为error是系统出错,catch是无法处理的,难以修复的,RuntimeException不需要程序员进行捕获处理,除了RuntimeException的其他Exception是一定要被捕获的;
error和exception都是throwable的子类,我们只需要对exception的实例进行捕获即可。

4.

run()方法作为普通方法的调用通过线程start的启动调用的区别。
对象.start()属于对线程的启动调用run()方法、 example.run();是对象对普通方法的调用

5.正则表达式

6.构造函数

  • 构造器可以有0个,1个或一个以上的参数;
  • 每个类可以有一个以上的构造器;

构造方法是一种特殊的方法,具有以下特点
(1)构造方法的方法名必须与类名相同。
(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
(4)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一 个无参数的默认构造器,这个构造器不执行任何代码。
(5)构造方法可以重载,以参数的个数,类型,顺序。

7.线程局部存储TLS(thread local storage)

  • 解决多线程中的对同一变量的访问冲突的一种技术;
  • TLS会为每一个线程维护一个和该线程绑定的变量的副本;
  • Java平台的java.lang.ThreadLocal是TLS技术的一种实现;
  • 每一个线程都拥有自己的变量副本,从而也就没有必要对该变量进行同步了
    同一全局变量或者静态变量每个线程访问的是同一变量,多个线程同时访存同一全局变量或者静态变量时会导致冲突,尤其是多个线程同时需要修改这一变量时,通过TLS机制,为每一个使用该全局变量的线程都提供一个变量值的副本,每一个线程均可以独立地改变自己的副本,而不会和其它线程的副本冲突。

8.Lanbda表达式

  • dir.listFiles((File f)->f.getName().endsWith(“.Java”));
  • dir.listFiles( f->f.getName().endsWith(“.Java”));
    Lanbda表达式的主要作用就是代替匿名内部类的繁琐语法, 它由三部分组成:
    (1) 形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。
    (2) 箭头(→)。必须通过英文中画线和大于符号组成。
    (3)代码块。如果代码块只包含一条语句,Lambda表达式允许省略代码块的花括号,那么那条语句就不要用花括号表示语句结束。Lambda代码块只有一条return语句,甚至可以省略return关键字。Lambda表达式需要返回值,而它的代码块中仅有一套省略了return的语句。Lambda表达式会自动返回这条语句的值。

9.

public class SendValue{
    public String str="6";
    public static void main(String[] args) {
        SendValue sv=new SendValue();
        sv.change(sv.str);
        System.out.println(sv.str);
    }
    public void change(String str) {
        str="10";
    }
}

在这里插入图片描述

  • 形参不改变实参;
  • 形参执行时新建一个实例;

10.泛型

  • ---------------------------分割线待补充------------------------------------------------
  • 虚拟机中没有泛型,只有普通类和普通方法;
  • 所有泛型类的类型参数在编译时都会被擦除;
  • 创建泛型对象时请指明类型,让编译器尽早的做参数检查
  • 泛型的类型擦除机制意味着不能在运行时动态获取List中T的实际类型

11.处理线程安全

synchronized关键字称作同步,主要用来给方法、代码块加锁,被加锁的代码段,同一时间内多线程同时访问同一对象的加锁方法/代码块时,只能有一个线程执行能执行方法/代码块中的代码,其余线程必须等待当前线程执行完以后才执行该方法/代码块。
volatile关键字,1.保证了不同线程对该变量操作的内存可见性.(当一个线程修改了变量,其他使用次变量的线程可以立即知道这一修改)
2.禁止了指令重排序
Lock类/接口,提供了与synchronized关键字类似的同步功能,但需要在使用时手动获取锁和释放锁。
transient关键字变量修饰符, 简单地说,就是让某些被修饰的成员属性变量不被序列化。(不能处理线程安全)

12.

public class Demo { class Super{  int flag=1;
         Super(){
             test();
         }  void test(){
            System.out.println("Super.test() flag="+flag);
         }
    } class Sub extends Super{
        Sub(int i){  flag=i;
            System.out.println("Sub.Sub()flag="+flag);
        }  void test(){
            System.out.println("Sub.test()flag="+flag);
        }
    }  public static void main(String[] args) {  new Demo().new Sub(5);
     }
}

1.首先调用父类构造方法,即super()
2.调用test()方法。
3.由于在子类sub()中重写了test()方法,所以调用子类test()
4.输出Sub.test() flag=1
5.调用sub的有参构造方法
6.输出Sub.Sub() flag=5
重点在于要时刻记得子类重写父类方法,调用时会调用子类重写之后的方法,当然,这一切的前提都是 实例化子类对象

在继承中代码的执行顺序为:
1.父类静态对象,父类静态代码块
2.子类静态对象,子类静态代码块
3.父类非静态对象,父类非静态代码块
4.父类构造函数
5.子类非静态对象,子类非静态代码块
6.子类构造函数

13.解决哈希冲突方法

开放地址法,ThreadLocal、
再hash法
链地址法,HashMap

14.

如果希望监听TCP端口9000,服务器端应该怎样创建socket?
new ServerSocket(9000);

ServerSocket(int port) 是服务端绑定port端口,调accept()监听等待客户端连接,它返回一个连接队列中的一个socket。
Socket(InetAddress address , int port)是创建客户端连接主机的socket流,其中InetAddress是用来记录主机的类,port指定端口。

socket和servletSocket的交互如下图所示:

在这里插入图片描述

15.会话跟踪技术

  • Cookie是Web服务器发送给客户端的一小段信息,客户端请求时,可以读取该信息发送到服务器端;
  • 关闭浏览器意味着临时会话ID丢失,但所有与原会话关联的会话数据仍保留在服务器上,直至会话过期;
  • 在禁用Cookie时可以使用URL重写技术跟踪会话;
  • 隐藏表单域将字段添加到HTML表单并在客户端浏览器中显示(隐藏域在页面中对于用户(浏览器)是不可见的,在表单中插入隐藏域的目的在于收集或发送信息,以利于被处理表单的程序所使用。浏览者单击发送按钮发送表单的时候,隐藏域的信息也被一起发送到服务器。)

16.线程安全的类(线程同步)

安全: HashTable、Vector、StringBuffer、Properties (实现了Map接口,HashTable的子类)
不安全: HashMap、ArrayList、StringBuilder

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值