Chuenhung的个人网站

chuenhung.github.io

函数式接口

什么是函数式接口

  • 只包含一个抽象方法的接口,称为函数式接口。
  • 可以通过 Lambda 表达式来创建该接口的实现类。

函数式接口只会有一个抽象方法,default方法不属于抽象方法,接口重写了Object的公共方法也不算入内,所以Comparator是函数式接口。

Java内置函数式接口

四大核心接口

接口名 参数类型 返回类型 用途
Consumer<T> 消费型接口 T void void accept(T t);
适合“传递参数没有返回值”的场景
Supplier<T> 供给型接口 T T get();
适合“没有参数有返回值”的场景
Function<T,R> 函数型接口 T R R apply(T t);
适合“传递参数有返回值”的场景
Predicate<T> 断定型接口 T boolean boolean test(T t);
适合“传递参数返回boolean值”的场景
阅读全文 »

入门

开始和结束

正则表达式中 ^ 指定的是一个字符串的开始,$ 指定的是一个字符串的结束。
例如,
匹配以p开头的python字符串:
在这里插入图片描述
匹配以n结尾的python字符串:
在这里插入图片描述

阅读全文 »

synchronized锁定的对象

synchronized修饰的作用:
让多个线程排队依次获取某个资源,保证数据不会出错(原子性)。
synchronized锁定的元素:

  • 修饰方法
    • 静态方法,锁定的是类
    • 普通方法,锁定的时方法的调用者
  • 修饰代码块,锁定的时传入的对象

Java线程内存模型(JMM)定义的8中原子操作

  • read(读取):从主内存中读取数据
  • load(载入):将主内存读取到的数据写入工作内存
  • use(使用):从工作内存读取数据来计算
  • assgin(赋值):将计算好的值重新赋值到工作内存中
  • store(存储):将工作内存数据写入主内存,会经过总线,到总线后就开始广播其他线程
  • write(写入):将store过去的变量值赋值给主内存中的变量
  • lock(锁定):将主内存变量加锁,标识为线程独占状态
  • unlock(解锁):将主内存变量解锁,解锁后其他线程可以锁定该变量
    MESI缓存一致性协议:
    多个cpu从主内存读取同一个数据到各自的高速缓存,当其中某个cpu修改了缓存里的数据,该数据会马上同步回主内存,其他cpu通过总线嗅探机制可以感知到数据的变化从而将自己缓存里的数据失效。
    一般lock锁加在线程的赋值之后,存储之前,这样的锁的粒度不大。volatile保证数据可见性、synchronized保证原子性。
阅读全文 »

VirtualBox的7种网络接入模式详解

参考链接参考链接

各网络模式的默认情况下,网络连接情况

NAT模式 桥接模式 Host-Only模式
虚拟机 -> 宿主机 默认不能,需要设置
宿主机 ——> 虚拟机 x 默认不能,需要设置
虚拟机 ——> 虚拟机 x
虚拟机 ——> 同局域网下其他主机 默认不能,需要设置
同局域网下其他主机 ——> 虚拟机 x 默认不能,需要设置

参考链接

阅读全文 »
0%