1. Redis可以用来做什么?
    最常用来做缓存,实现分布式缓存的首先中间件;介意作为数据库,实现点赞,关注,排行等对性能要求极高的互联网需求;可以作为计算工具,能用很小的代价,统计PV/UV,用户在线天数等数据;可以实现分布式锁;可以作为消息队列。
  2. 说一下http和HTTPS的区别?
    http是超文本传输协议,信息是明文传输,https则是具有安全性的SSL加密传输协议。
    http和https使用的是完全不同的连接方式,用的端口不一样,前者是80,后者是443。
    http的连接很简单是无状态的,https协议是由SSL+http协议构建的可进行加密传输、身份认证的网络协议,比http协议更安全。
  3. http1.1和http2.0有什么区别?
    http2.0使用了多路复用技术,http1.1不支持header数据的压缩,http2.0使用hpack算法对header数据进行压缩。为了改善延迟,http2.0引入了server push。
  4. http2.0和http3.0有什么区别?
    http2.0使用tcp协议,http3.0使用udp协议。
  5. sockets(套接字)编程有三种:流式套接字(socket_stream),数据报套接字(socket_dgram),原始套接字(socket_raw),基于TCP的socket编程是采用流式套接字。
  6. 服务端怎么提高处理socket连接的性能?
    最小化报文传输的延时;最小化系统调用的负载;为Bandwidth Delay Product调节TCP窗口;动态优化GNU/LinuxTCP/IP栈。
  7. 什么是协程?
    协程是微线程,在子程序内部执行,可在子程序内部中断,转而执行别的子程序,在适当的时候再返回来接着执行。
  8. 死锁的四个必要条件:互斥条件,不可剥夺条件,请求和保持条件,循环等待条件。
  9. 深拷贝和浅拷贝的区别是什么,它们各自的使用场景是什么?
    浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间;
    深拷贝不仅对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同的地址空间。
  10. 五大IO模型:阻塞IO,同步非阻塞IO,IO多路复用,信号驱动IO,异步IO。
  11. 软链接和硬链接的区别?
    软链接可以为文件和目录创建链接;硬链接只能为文件创建链接;
    软链接可以跨文件系统;硬链接必须是同一个文件系统;
    硬链接因为只是文件的一个别名,所以不重复占用内存;软链接因为只是一个访问文件的快捷方式文件,文件内只包含快捷指向信息,所以占用很小的内存。
    软链接的文件权限和源文件可以不一样;硬链接文件权限肯定是一样的,因为它们本来就是一个文件的不同名称而已。
  12. 设计模式的六大原则:单一职责原则;里氏替换原则;依赖倒置原则;接口隔离原则;迪米特法则;开闭原则。
  13. 简单工厂模式和抽象工厂模式有什么区别?
    简单工厂模式其实并不算是一种审计模式,而是一种编程习惯。简单工厂的实现思路是,定义一个工厂类,根据传入的参数不同返回不同的实例,被创建的实例具有共同的父类或接口。
    工厂方法模式是简单工厂的进一步深化,在工厂方法模式中,我们不再提供一个统一的工厂类来创建所有的对象,而是针对不同的对象提供不同的工厂。也就是说每个对象都有一个与之对应的工厂。工厂方法的实现思路是,定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。
    抽象工厂模式是工厂方法的进一步深化,在这个模式中的工厂类不单单可以创建一个对象,而是可以创建一组对象。这和工厂方法最大的不同点。抽象工厂的实现思路是,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
  14. 说一说你对策略模式的理解?
    策略模式(Strategy Pattern)也叫政策模式。是一种比较简单的模式。它的目的是定义一组算法,将每个算法都封装起来,并且使它们之间可以互换,其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换,使得算法可以在不影响到客户端的情况下发生变化。
  15. 观察者模式(Observer Pattern)也称发布订阅模式,它的目的是定义对象间一种一对多的依赖关系;使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。
  16. 责任链模式(Chain of Responsibility Pattern)是一种常见的行为模式,它的目的是使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。
  17. 说一说装饰器模式和适配器模式的区别?
    装饰器的目的是动态的给一个对象添加一些额外的职责,这个对象的类型不会发生变化,但是行为却发生了改变。
    适配器的目的是将一个类的接口变换成客户端所期待的另一种接口,就是可以将一个对象包装成另外的一个接口。