除了用static的方法实现单例模式,还可以用什么方法 -- 枚举实现单例模式,由于 Java 的 enum 可以跟类一样任意定义方法和属性,所以就完全可以用枚举来实现单例。这是其它语言如 C++、C# 做不到的。 如果枚举值只有 1 个的时候,其实例也就只有 1 个,就完全符合了单例模式的限定
public enum Singleton {
INSTANCE;
private SingletonClass instance;
Singleton() { //名字可以是SomeThing this.instance = new SingletonClass();
System.out.println("枚举类构造函数");
}
public SingletonClass getInstance() {
return this.instance;
}
}
在你的代码中INSTANCE本身就是一个EnumSingleton类型的引用, 与普通的饿汉式单例相似。
讲一讲观察者模式,观察的对象状态改变是怎么通知到观察者的
讲一讲工厂模式
阻塞io和非阻塞io,io多路复用 有什么区别 - - 简单来说:阻塞是指用户空间(调用线程)一直在等待,而不能干别的事情;非阻塞是指用户空间(调用线程)拿到内核返回的状态值就返回自己的空间,IO操作可以干就干,不可以干,就去干别的事情。
在等待数据阶段,IO分为阻塞IO和非阻塞IO。
1.阻塞IO: 资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超时)。
2.非阻塞IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用
在使用资源阶段,IO分为同步IO和异步IO。
1.同步IO:应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败。
2.异步IO:应用发送或接收数据后立刻返回,数据写入OS缓存,由OS完成数据发送或接收,并返回成功或失败的信息给应用。
libevent介绍一下
死锁
socket的api 服务端的和客户端的说一下
11新特性 nullptr 和 右值引用
在C++11前,使用0来做为空指针会比使用NULL来做空指针会让你更加警觉。
但是将NULL定义为0带来的另一个问题是无法与整数的零区分。因为C++中允许有函数重载,所以可以试想如下函数定义情况:
void func(int data);
void func(char* data);
那么在传入NULL参数时,编译器将无法确定到底使用哪个函数定义,造成编译时错误。nullptr在C++11被引入用于解决这一问题,nullptr可以明确区分整型和指针类型,能够根据环境自动转换成相应的指针类型,但不会被转换为任何整型,所以不会造成参数传递错误。
void func(int data);
void func(char* data);
那么在传入NULL参数时,编译器将无法确定到底使用哪个函数定义,造成编译时错误。nullptr在C++11被引入用于解决这一问题,nullptr可以明确区分整型和指针类型,能够根据环境自动转换成相应的指针类型,但不会被转换为任何整型,所以不会造成参数传递错误。
10个节点,怎么实现两两相互通信(场景题,消息队列要在同一个设备里通信,socket适用于C/S模型) --接入互联网,通过ip进行通信?
全部评论
(1) 回帖