面试题30天打卡-day18

这篇具有很好参考价值的文章主要介绍了面试题30天打卡-day18。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、什么是单例模式?使用单例模式有什么好处?有哪些常用的单例模式实现方式?各自的应用场景是什么?请你举例说明哪些地方用到了单例模式?

单例是一种设计模式,应用该模式的类只会生成一个实例 ,单例模式保证了在程序的不同位置都可以且仅可以取到同一个对象实例,并提供一个访问它的全局访问点。

单列模式好处:

  • 由于类只有一个实例,因此可以避免在多个地方创建多个实例,从而减少内存使用。
  • 可以提供一个全局访问点,使得整个应用程序可以方便地访问该实例。

单例模式的实现方式:

  1. 饿汉式:在类加载时就创建了唯一的实例,因此线程安全,但可能会导致内存浪费。
  2. 懒汉式:只有在第一次调用时才会创建实例,避免了内存浪费,但需要考虑线程安全问题。
  3. 双重检查锁定(Double-Checked Locking):结合了饿汉式和懒汉式的优点,线程安全且避免了内存浪费。
  4. 枚举:在枚举类中只有一个枚举值,也就是唯一的实例。

单例模式的不足:

  1. 单例类如果使用继承,子类实例化可能会出现问题
  2. 单例类不是特别好扩展,因为一般没有抽象层

适用场景:
单例模式只允许创建一个对象,因此节省内存,加快对象访问速度,因此对象需要被公用的场合适合使用,如多个模块使用同一个数据源连接对象等等。如:

  1. 需要频繁实例化然后销毁的对象。
  2. 创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
  3. 有状态的工具类对象。
  4. 频繁访问数据库或文件的对象。
  5. 资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置。
  6. 控制资源的情况下,方便资源之间的互相通信。如线程池等。

应用场景举例:

  1. 外部资源:每台计算机有若干个打印机,但只能有一个PrinterSpooler,以避免两个打印作业同时输出到打印机。内部资源:大多数软件都有一个(或多个)属性文件存放系统配置,这样的系统应该有一个对象管理这些属性文件

  2. Windows的Task Manager(任务管理器)就是很典型的单例模式(这个很熟悉吧),不能打开两个windows task manager

  3. windows的Recycle Bin(回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。

  4. 网站的计数器,一般也是采用单例模式实现,否则难以同步。

  5. 应用程序的日志应用,一般都何用单例模式实现,这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。

  6. Web应用的配置对象的读取,一般也应用单例模式,这个是由于配置文件是共享的资源。

  7. 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。

  8. 多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。

  9. 操作系统的文件系统,也是大的单例模式实现的具体例子,一个操作系统只能有一个文件系统。

  10. HttpApplication 也是单位例的典型应用。熟悉ASP.Net(IIS)的整个请求生命周期的人应该知道HttpApplication也是单例模式,所有的HttpModule都共享一个HttpApplication实例.

2、什么是云原生?它有哪些优缺点?

云原生是一种开发和运行应用程序的方法,旨在利用云计算的弹性、可扩展性、可靠性和高可用性等优势。它通过将应用程序打包到容器中,使用容器编排工具进行管理,实现了应用程序在不同环境中的快速部署、弹性伸缩和高可用性。

云原生的优点包括:

  1. 灵活性和可扩展性:容器可以快速部署和扩展,以满足不同的负载要求。
  2. 高可用性:容器编排工具可以自动检测和恢复容器故障,提供高可用性。
  3. 效率和成本优化:使用容器可以节省资源和成本,提高应用程序的运行效率。
  4. 安全性:容器隔离应用程序的运行环境,减少了安全漏洞的风险。

云原生的缺点包括:

  1. 学习曲线较陡峭:云原生技术较为复杂,需要学习一些新的技术和工具。
  2. 可能存在依赖问题:应用程序可能依赖于某些特定的云原生技术或工具,这可能导致一些限制或局限性。
  3. 管理和维护难度:容器编排工具可能需要额外的管理和维护,需要更多的操作和维护成本。

云原生的应用场景包括:

  1. 微服务架构:云原生技术非常适合构建微服务架构,将应用程序拆分为小型、自治的服务。
  2. 弹性伸缩:云原生技术可以根据应用程序的负载自动扩展或缩小容器的数量,以适应不同的负载要求。
  3. 快速部署:使用云原生技术,可以快速地部署和更新应用程序,提高开发和部署效率。
  4. 多云部署:云原生技术可以在多个云环境中运行,方便应用程序在不同云环境中的部署和迁移。
  5. 数据处理和分析:云原生技术可以处理大规模的数据处理和分析任务,提高数据处理效率。

3、什么是 MySQL 执行计划?如何获取执行计划并对其进行分析?

MySQL 执行计划是指 MySQL 查询优化器生成的一份详细的查询执行计划,它展示了 MySQL 在执行查询时所采取的具体执行计划,包括表的访问顺序、数据读取方式、使用的索引、使用的排序方式等等。通过分析执行计划,可以帮助我们找出查询性能瓶颈所在,进而进行优化,提高查询效率。

要获取执行计划,可以在执行 SQL 语句时在前面添加 explain 关键字,例如:

explain select * from table where id = 1;

这样,MySQL 会输出该查询语句的执行计划。 执行计划中的各个字段含义如下:

  • id:每个 Select 子句或者是一个操作符或者是一个查询语句。
  • select_type:查询类型,表示查询的类型(简单查询、联合查询、子查询等等)。
  • table:查询涉及的表。
  • partitions:匹配的分区。
  • type:访问类型,表示 MySQL 在表中找到所需行的方式。
  • possible_keys:表示查询可能使用到的索引。
  • key:实际使用到的索引。
  • key_len:使用的索引长度。
  • ref:列与索引的比较。
  • rows:根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数。
  • filtered:返回结果的行数占总行数的比例。
  • Extra:包含 MySQL 解决查询的详细信息。

分析执行计划时,需要注意以下几个方面:

  • 扫描行数:rows 字段,表示查询所需扫描的行数,如果该值过大,说明查询效率不高,需要优化。
  • 使用索引:key 字段,表示查询所使用的索引,如果没有使用索引或者使用的不是最优索引,需要考虑优化。
  • 排序:Extra 字段,如果查询需要使用 filesort 排序,说明查询效率不高,需要优化。
  • 嵌套循环:如果查询类型是 nested loop,说明查询中包含嵌套循环,也需要考虑优化。

通过分析执行计划,可以确定查询优化的方向和方法,提高查询效率。

3、Vue Router 的 $route 和 $router 对象有什么区别?

$route 对象代表当前激活的路由信息,包含了当前 URL 解析得到的路由参数、查询参数和 hash 值等信息。可以通过 $route 对象获取当前路由的各种信息,如 $route.params 获取路由参数,$route.query 获取查询参数等。$route 对象是只读的,即不允许直接修改 $route 对象。

$router 对象则是 Vue Router 全局路由的实例本身,是router构造方法的实例,它提供了一些方法用于编程式地操作路由,如 $router.push$router.replace$router.go 等。通过 $router 对象可以实现在代码中进行路由的跳转、修改 URL 等操作。

因此,$route$router 的主要区别在于:文章来源地址https://www.toymoban.com/news/detail-434326.html

  • $route 是只读的,用于获取当前路由信息;而 $router 是可读写的,用于编程式地操作路由。
  • $route 是路由组件的属性,可以通过 this.$route 访问;而 $router 是全局的 Vue Router 实例,可以通过 this.$router 访问。

到了这里,关于面试题30天打卡-day18的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 面试题30天打卡-day12

    Redis 中的 String 是使用简单动态字符串(SDS)实现的。SDS 是一种可变长度的字符串实现,它可以动态地调整自己的大小,而不像 C 语言中的字符串一样需要预先分配固定大小的内存空间。 SDS 在 Redis 中的优点是: 空间预分配:SDS 内部的空间预分配策略避免了多次重分配的操

    2023年04月26日
    浏览(40)
  • 面试题30天打卡-day27

    消息队列是一种应用广泛的异步通信模型,可以解决分布式系统中不同组件之间的协调和通信问题。以下是一些常见的消息队列模型及其适用场景: 点对点模型(Point-to-Point Model):也被称为队列模型,消息生产者将消息发送到队列中,然后消息消费者从队列中获取消息并处

    2024年02月05日
    浏览(37)
  • 面试题30天打卡-day15

    Nginx是一款高性能的Web服务器软件,也可以作为反向代理服务器、负载均衡器、HTTP缓存和安全防护等多种用途。Ngnix可以将服务器上的静态文件(html、css、图片)通过HTTP协议返回给浏览器客户端。Ngnix是基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资

    2024年02月01日
    浏览(40)
  • 每日算法打卡:连号区间数 day 18

    1210. 连号区间数 题目难度:简单 题目来源:第四届蓝桥杯省赛C++ B组,第四届蓝桥杯省赛Java B组 小明这些天一直在思考这样一个奇怪而有趣的问题: 在 1 ∼ N 1 sim N 1 ∼ N 的某个排列中有多少个连号区间呢? 这里所说的连号区间的定义是: 如果区间 [ L , R ] [L, R] [ L , R ] 里的

    2024年01月19日
    浏览(60)
  • English Learning - L3 作业打卡 Lesson4 Day26 2023.5.30 周二

    ⏰打卡时间:2023.5.30(周二) 6:00-17:00 训练技巧顺序: 【完全听写法】➡️【车轮法】➡️【影子跟读法】 ⏱【练习时间】60 mins /ɪt ɪz ˈiːzɪ tə faɪnd maɪ ˈhʌzbənd ɪn ə kraʊd/ 语音现象描述+自身问题总结: (连读、重读、弱读、浊化、断句、语调等) 在人群中很容易找到

    2024年02月07日
    浏览(59)
  • English Learning - L3 作业打卡 Lesson3 Day18 2023.5.22 周一

    ⏰打卡时间:2023.05.22 6:00-17:00 训练技巧顺序: 【完全听写法】➡️【车轮法】➡️【影子跟读法】 ⏱【练习时间】60 mins /ˈpiːpl sed maɪ ˈmʌðə wəz ə gʊd eg/ 语音现象描述+自身问题总结: (连读、重读、弱读、浊化、断句、语调等) 人们常夸我妈妈是“好人( a good egg)”

    2024年02月07日
    浏览(41)
  • day39 注解 设计模式(单例模式和工厂模式)

    @Target    @Target(ElementType.TYPE) @Target({                 ElementType.TYPE,                          ElementType.METHOD}) //确定自定义的注解的使用范围 type为类  method为方法  field为属性 @Retention @Retention()  //(不添加参数默认是class) @Retention(RetentionPolicy.CLASS)// 保留到

    2024年02月09日
    浏览(37)
  • day42-servlet下拉查询/单例模式

    1.Servlet 实现下拉查询(两表) 2. 单例模式 1.实战 1.1  创建工程,准备环境... 1.2  接口 1.3  重写方法 1.4  servlet 1.5  list.jsp list.jsp 详解 2.单例模式 2.1  饿汉模式:在程序加载时直接创建对象(私有化,静态化),并创建公有的静态的(public static)get方法;其他类需要使用时

    2024年02月16日
    浏览(39)
  • 面试: 单例模式

    目录 一、饿汉单例(实现Serializable) 1、破坏单例的三种情况 (1)反射破坏单例 (2)反序列化破坏单例 (3)Unsafe破坏单例 2、饿汉单例(利用枚举实现) 二、懒汉单例(DCL实现) 1、多线程时会发生的错误 2、懒汉单例(内部类实现) 三、在哪些地方用到了单例模式 在类

    2024年04月13日
    浏览(32)
  • 面试经典150题——Day18

    12. Integer to Roman Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 For example, 2 is written as II in Roman numeral, just two one’s added together. 12 is written as XII, which is simply X + II. The number 27 is written as XXVII, which is XX + V + II. Roman numerals are u

    2024年02月08日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包