【前端面试】操作系统

进程与线程

进程线程
定义是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位是进程中的一个实体,是CPU调度和分派的基本单位,共享进程的资源
资源分配拥有独立的内存空间和系统资源共享进程的内存和资源
开销创建或撤销进程时,系统需要分配或回收资源,开销较大线程切换时只需保存和恢复少量上下文信息,开销较小
独立性进程之间相互独立,一个进程的崩溃不会影响其他进程线程共享进程的地址空间和其他资源,一个线程的崩溃可能导致整个进程崩溃
并发性多个进程可以在同一台计算机上并发执行多个线程可以在同一进程内并发执行
通信方式进程间通信(IPC)机制,如管道、消息队列、共享内存等线程间可以直接读写共享内存,或使用其他同步机制(如互斥锁、条件变量等)
应用场景操作系统级别的任务调度、资源管理等实现进程内的并发执行,提高程序的执行效率和响应能力
前端相关浏览器中的多个标签页、插件、扩展等通常对应不同的进程JavaScript在浏览器中通常是单线程执行,但可以使用Web Workers等技术实现多线程效果

在前端开发中,虽然直接操作系统级别的进程和线程不是常见的任务,但理解这些概念对于深入了解浏览器的工作原理、前端应用的性能优化以及多线程编程模型(如Web Workers)等方面至关重要。以下是对进程和线程的详细解析:

一、进程(Process)

定义
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。进程拥有独立的堆栈空间和数据段,每个进程都有自己独立的内存空间,进程之间不能直接共享数据。

特点

  • 独立性:进程是系统进行资源分配和调度的一个独立单元,每个进程都有自己独立的内存空间和系统资源。
  • 动态性:进程是程序的一次执行过程,是动态产生和消亡的。
  • 并发性:多个进程可以在同一台计算机上并发执行,互不干扰。

前端常见进程

  • 浏览器进程:浏览器的主进程,负责浏览器界面的显示、与用户交互(如前进后退等)、管理其他进程等。
  • 渲染进程:每个打开的标签页(tab)通常对应一个独立的渲染进程,负责解析HTML、CSS、JavaScript,将网页内容渲染成可视化的界面。
  • 网络进程:负责处理浏览器的网络请求,如HTTP请求等。
  • 插件进程:用于运行浏览器中的插件,如Flash插件、PDF阅读器等。
  • 扩展进程:用于运行浏览器扩展程序,这些扩展程序可以修改浏览器的行为或添加新的功能。

二、线程(Thread)

定义
线程是进程中的一个实体,是CPU调度和分派的基本单位,它是比进程更小的独立运行的单位。线程是进程内的一个执行流,共享进程的资源(如内存、文件描述符等),但每个线程都有自己的执行栈和程序计数器。

特点

  • 轻量级:与进程相比,线程的创建和销毁开销较小。
  • 共享性:同一进程中的多个线程共享进程的内存空间和资源。
  • 并发性:多个线程可以在同一进程内并发执行,提高程序的并发性能。

与进程的关系

  • 一个进程至少包含一个线程,即主线程。
  • 进程内的其他线程可以由主线程创建,多个线程共享进程的内存和资源。
  • 线程是CPU调度的最小单位,可以在同一个进程内并发执行不同的任务。

在前端中的应用

  • JavaScript单线程模型:在浏览器中,JavaScript被设计为单线程执行模型,主要是为了避免多线程带来的数据竞争、死锁和状态不一致等问题。但是,通过异步编程和Web Workers等技术,可以实现类似多线程的并发执行效果。
  • Web Workers:Web Workers允许在后台线程中运行脚本,而不会阻塞用户界面。这对于执行耗时的计算任务非常有用,可以提高前端应用的性能和响应能力。

三、进程与线程的区别与联系

区别

  • 资源分配:进程是资源分配的基本单位,拥有独立的内存空间和系统资源;线程是CPU调度的基本单位,共享进程的内存和资源。
  • 开销:进程的开销大于线程,因为创建或撤销进程时,系统需要分配或回收资源;而线程切换时只需保存和恢复少量上下文信息。
  • 独立性:进程之间是相互独立的,一个进程的崩溃不会影响其他进程;线程共享进程的地址空间和其他资源,一个线程的崩溃可能导致整个进程崩溃。

联系

  • 线程是进程的一部分,每个进程都至少包含一个线程(主线程)。
  • 多个线程可以在同一进程内并发执行,共享进程的资源和内存空间。
  • 进程和线程都可以实现并发执行,但线程通常用于实现更细粒度的并发。

四、Web Workers

Web Workers(通常称为Web Workers或简单地Workers)是HTML5提供的一项API,它允许在浏览器中创建后台线程,用于执行计算密集型任务,从而避免阻塞主线程,提高页面性能和响应速度。以下是对Web Workers的详细解析:

一、Web Workers的基本概念
  • 定义:Web Workers是一种在后台线程中运行JavaScript代码的技术,这些线程与主线程(通常是UI线程)并行执行,互不干扰。
  • 目的:通过将耗时的计算任务或长时间运行的操作放在后台线程处理,Web Workers可以显著提高Web应用的性能和用户体验。
二、Web Workers的工作原理
  • 线程模型:在传统的浏览器中,JavaScript代码在主线程中执行,负责处理用户界面和与用户交互的任务。Web Workers允许开发者创建额外的线程,这些线程在后台运行,独立于主线程。
  • 独立的全局上下文:每个Web Worker都有自己独立的全局上下文(包括全局变量、函数等),与主线程中的全局上下文完全隔离。这意味着在Worker中定义的变量和函数不会影响主线程中的环境,反之亦然。
  • 通信机制:主线程和Web Worker之间通过消息进行通信。可以使用postMessage方法发送消息,并在两者之间建立双向通信。消息传递是通过拷贝而不是共享对象来完成的,确保数据的安全性。
三、Web Workers的使用场景
  • 复杂的计算:如果Web应用需要执行复杂的算法或处理大量的数据,可以使用Web Workers在后台线程中进行计算,避免阻塞主线程。
  • 处理大量数据:对于需要处理大量数据(如文件上传、解析JSON数据等)的场景,Web Workers可以在后台线程中高效完成任务,而不会影响用户界面的响应性。
  • 网络请求:Web Workers可以执行异步网络请求(如AJAX、WebSocket等),而不必担心这些请求会阻塞主线程。
四、Web Workers的创建与使用
  • 创建Worker:在主线程中,使用new Worker()构造函数创建一个新的Worker对象,并指定Worker脚本文件的路径。例如:const worker = new Worker('worker.js');
  • 发送消息:使用Worker对象的postMessage方法向Worker线程发送消息。例如:worker.postMessage('Hello, worker!');
  • 接收消息:在Worker线程中,使用onmessage事件监听器接收来自主线程的消息,并可以使用postMessage方法向主线程发送响应。在主线程中,同样使用onmessage事件监听器接收来自Worker线程的消息。
  • 关闭Worker:当不再需要Worker时,可以使用terminate方法关闭它,以释放系统资源。例如:worker.terminate();
五、Web Workers的限制与注意事项
  • 同源策略:由于同源策略的限制,Worker脚本文件必须与主线程的脚本文件在同一域名下,否则会抛出安全错误。
  • DOM访问限制:Web Workers不能直接访问DOM元素,也不能使用documentwindow等全局对象,因为它们是主线程的对象。
  • 文件访问限制:Web Workers中不能直接访问本地文件,需要通过XMLHttpRequestfetch等方式获取文件内容。
  • 共享内存限制:虽然JavaScript是单线程语言,但Web Workers之间无法直接共享内存。不过,可以使用SharedArrayBufferAtomics等API在多个Worker之间共享内存。
  • 资源消耗:Web Workers会占用一定的系统资源(如内存、CPU时间等)。如果创建了过多的Worker或没有正确关闭它们,可能会导致资源泄漏和系统性能下降。因此,开发者需要注意合理控制Worker的数量和使用时长。

综上所述,Web Workers是HTML5提供的一项强大功能,它允许开发者在浏览器中创建后台线程来执行计算密集型任务,从而显著提高Web应用的性能和用户体验。然而,在使用Web Workers时也需要注意其限制和注意事项,以确保应用的稳定性和安全性。

进程间通信方式

进程通信方式是指不同进程之间传递数据或信号的一种机制。在操作系统中,进程通信是非常重要的,因为它允许进程之间协同工作,共享数据和资源。以下是几种常见的进程通信方式:

1. 管道(Pipe)

  • 无名管道:半双工的通信方式,数据只能单向流动,且只能在具有亲缘关系的进程间使用,如父子进程之间。
  • 命名管道(Named Pipe):与无名管道类似,但它允许无亲缘关系的进程之间进行通信。命名管道在文件系统中有一个唯一的名称,可以通过该名称进行访问。

2. 消息队列(Message Queue)

消息队列是一种进程间通信方式,它允许进程之间传递消息。消息队列通常用于进程之间传递结构化的数据,如命令和数据等。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

3. 共享内存(Shared Memory)

共享内存是一种高效的进程通信方式,它允许多个进程访问同一块物理内存,从而实现数据共享。共享内存的优点是速度快,但需要处理并发访问和同步问题。共享内存往往与其他通信机制(如信号量)配合使用,以实现进程间的同步和通信。

4. 信号量(Semaphore)

信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。信号量通常用于进程之间的同步和互斥。

5. 套接字(Socket)

套接字是一种进程间通信方式,它可以在不同的计算机之间进行通信。套接字通常用于实现分布式系统和网络通信。套接字是网络通信的基石,它提供了端到端的通信服务。

6. 信号(Signal)

信号是一种异步通信方式,它允许一个进程向另一个进程发送一个信号。信号通常用于处理异步事件,如键盘中断、终端关闭等。虽然信号主要用于进程间的通知,但它也可以被视为一种简单的进程通信方式。

7. 远程过程调用(RPC)

远程过程调用是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC使得程序能够像调用本地方法一样调用远程方法,从而简化了分布式系统的开发。

8. 剪贴板(Clipboard)

虽然剪贴板通常不被视为一种典型的进程通信方式,但在某些情况下,它也可以用于进程间的数据交换。例如,一个进程可以将数据复制到剪贴板,然后另一个进程从剪贴板中读取这些数据。

以上是几种常见的进程通信方式。在实际应用中,可以根据具体需求选择适合的通信方式。同时,随着技术的发展,还可能出现新的进程通信方式。

进程同步

进程同步是操作系统中的一个重要概念,它用于协调多个并发执行的进程,确保它们在访问共享资源或执行相互依赖的任务时能够保持一致和协调的状态。以下是关于进程同步的详细解释:

一、进程同步的定义

进程同步是指在多道程序环境下,由于并发进程的存在以及它们之间的制约关系,使得各进程必须按一定的速度执行。进程同步机制的主要任务是对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。

二、进程同步的目的

进程同步的主要目的是防止多个进程在执行过程中因竞争共享资源而造成数据的不一致性和资源的冲突,确保数据的完整性和一致性。同时,它还能够协调进程之间的合作关系,确保进程能够按照预定的顺序执行,从而提高系统的效率和稳定性。

三、进程同步的重要性

  1. 保证数据一致性:在多进程环境中,多个进程可能同时访问和修改共享数据。如果没有适当的同步机制,可能会导致数据不一致或损坏。进程同步可以确保在任何时刻,只有一个进程能够访问和修改共享数据,从而避免数据冲突和不一致性的发生。
  2. 提高系统效率:通过合理的进程同步机制,可以协调各个进程的执行顺序,避免进程之间的无效等待和冲突,从而提高系统的整体效率。
  3. 增强系统稳定性:进程同步可以防止因进程竞争共享资源而导致的死锁和饥饿等问题,从而增强系统的稳定性和可靠性。

四、实现进程同步的技术

  1. 信号量(Semaphore):信号量是一种用于控制多个进程对共享资源访问的同步机制。它允许多个进程同时访问资源,但需要限制在同一时刻访问该资源的最大进程数。信号量机制通过P操作和V操作来实现对资源的申请和释放。
  2. 互斥锁(Mutex):互斥锁是一种特殊的信号量,用于实现进程间的互斥访问。当一个进程访问共享资源时,它会首先获取互斥锁,以阻止其他进程同时访问该资源。当进程完成对共享资源的访问后,它会释放互斥锁,以便其他进程可以访问该资源。
  3. 条件变量(Condition Variable):条件变量是一种同步机制,它允许线程在某些条件不满足时挂起等待,并在条件满足时被唤醒。条件变量通常与互斥锁一起使用,以确保对共享资源的互斥访问和同步等待。
  4. 事件(Event):事件是一种用于通知线程某些事件已发生的同步机制。当一个线程等待某个事件时,它会进入等待状态。当该事件发生时,系统会唤醒等待该事件的线程,使其继续执行。

五、进程同步的应用场景

进程同步在操作系统中有着广泛的应用场景,如生产者-消费者问题、读者-写者问题、哲学家就餐问题等。这些问题都涉及到多个进程对共享资源的访问和同步控制,需要采用适当的同步机制来确保系统的正确性和效率。

综上所述,进程同步是操作系统中一种重要的同步机制,它通过协调多个并发执行的进程来确保数据的一致性和系统的稳定性。在实际应用中,需要根据具体的场景选择合适的同步机制来实现进程之间的同步控制。

进程调度策略

进程调度策略是操作系统中用于选择和分配CPU资源给不同进程的重要机制。以下是几种常见的进程调度策略:

1. 先来先服务(FCFS, First Come First Served)

  • 原理:按照进程到达的先后顺序进行调度,即先到达的进程先被调度执行。
  • 优点:实现简单,易于理解,公平性较高。
  • 缺点:可能导致长作业等待时间过长,影响系统吞吐量和响应时间,不利于短作业和I/O密集型作业。

2. 短作业优先(SJF, Shortest Job First)

  • 原理:选择剩余执行时间最短的进程先运行,以减少平均等待时间。
  • 优点:能最大程度地减少平均等待时间,提高系统吞吐量。
  • 缺点:可能导致长作业饥饿,且需要预先知道每个进程的执行时间,对实时系统不太适用。

3. 优先级调度(Priority Scheduling)

  • 原理:为每个进程分配一个优先级,并按照优先级从高到低进行调度。优先级高的进程将优先运行。
  • 优点:可以确保关键任务或重要任务得到优先处理。
  • 缺点:可能导致低优先级进程长时间等待,造成饥饿现象。

4. 时间片轮转(RR, Round Robin)

  • 原理:将CPU时间划分成一段段时间片,每个进程执行一个时间片,然后轮流切换到下一个进程。若某个进程的时间片用完仍未完成,则被放到就绪队列的末尾等待。
  • 优点:系统能在给定的时间内响应所有用户进程的请求,且时间片大小可调,以平衡系统响应时间和吞吐量。
  • 缺点:可能导致上下文切换开销增加,影响系统性能。

5. 最高响应比优先(HRRN, Highest Response Ratio Next)

  • 原理:综合考虑等待时间和执行时间的比值(响应比),选择响应比最高的进程先执行。响应比定义为(等待时间+服务时间)/服务时间。
  • 优点:能够平衡长作业和短作业的等待时间,避免长作业饥饿。
  • 缺点:每次调度前需要计算响应比,增加了系统开销。

6. 多级反馈队列调度(Multilevel Feedback Queue Scheduling)

  • 原理:将进程按照优先级划分为多个队列,每个队列拥有不同的时间片大小。进程在队列中运行一段时间后,如果没有完成,就会被放入下一个队列中等待调度。
  • 优点:能够满足不同类型进程的需求,提高系统整体性能。
  • 缺点:实现较为复杂,需要合理设置队列的优先级和时间片大小。

7. 抢占式调度(Preemptive Scheduling)

  • 特点:允许高优先级的进程抢占正在执行的低优先级进程的CPU资源。
  • 应用:常用于实时系统和对响应时间要求较高的应用场景。

综上所述,不同的进程调度策略适用于不同的场景和需求。操作系统在选择调度策略时,需要根据实际情况进行权衡和选择,以最大化系统性能、响应时间和公平性。

产生死锁原因

产生死锁的原因可以归结为多个方面,主要包括资源竞争、进程推进顺序不当、信号量使用不当等。以下是对这些原因的详细解析:

一、资源竞争

  • 资源不足:系统中拥有的不可剥夺资源(如磁带机、打印机等)数量不足以满足多个进程运行的需要。当多个进程同时请求这些资源时,如果资源的分配无法满足所有进程的需求,就可能导致进程因争夺资源而陷入僵局。
  • 资源分配不当:资源分配策略不合理或执行不当时,也可能导致死锁。例如,如果系统没有正确地管理资源的分配和释放,就可能出现进程持有资源但不释放,而其他进程又需要这些资源的情况。

二、进程推进顺序不当

  • 进程运行推进顺序与速度不同:进程在运行过程中,如果它们的推进顺序和速度不合适,也可能导致死锁。例如,两个进程P1和P2分别持有资源R1和R2,同时P1请求R2而P2请求R1。如果这两个请求的顺序和时机不当,就可能导致它们相互等待对方释放资源,从而陷入死锁。
  • 进程间相互等待:进程间可能因为等待对方发来的消息或资源而陷入死锁。例如,进程A等待进程B的消息,而进程B又在等待进程A的消息,这样就形成了一个循环等待的局面,导致两个进程都无法继续执行。

三、信号量使用不当

  • 信号量是一种用于进程间同步和互斥的工具。如果信号量的使用不当,如信号量的初始值设置不合理、信号量的操作顺序错误等,都可能导致死锁。
  • 竞态条件:当多个进程同时对共享变量进行读写操作时,如果没有适当的同步机制来控制这些操作,就可能出现竞态条件。竞态条件可能导致数据不一致或死锁等问题。

四、其他因素

  • 代码逻辑错误:程序中的逻辑错误也可能导致死锁。例如,一个进程在获取锁之前没有释放之前获取的锁,就可能导致死锁。
  • 超时设置不合理:当超时设置不合理时,也可能导致死锁。例如,一个进程等待时间过长而没有释放锁,就可能导致其他进程无法获得锁而陷入死锁。

总结

产生死锁的原因多种多样,但主要可以归结为资源竞争、进程推进顺序不当、信号量使用不当等方面。为了避免死锁的发生,可以采取预防死锁、避免死锁、检测死锁和解除死锁等措施。这些措施包括破坏死锁产生的必要条件(如互斥条件、请求与保持条件、不可剥夺条件和循环等待条件)、使用合理的资源分配策略、设置合理的超时时间等。同时,在设计和实现并发程序时,还需要注意代码的逻辑正确性和同步机制的有效性,以避免因代码逻辑错误或同步机制不当而导致的死锁问题。

解决死锁方法

一、预防死锁

预防死锁的主要策略是破坏死锁产生的四个必要条件(互斥条件、请求与保持条件、不可剥夺条件和循环等待条件)中的至少一个。由于互斥条件通常无法破坏,因此主要关注其他三个条件:

  1. 破坏请求与保持条件
    • 一次性分配:要求每个进程在开始执行前一次性申请完它所需要的全部资源,仅当系统能满足进程的资源申请要求时,才一次性把资源分配给该进程,否则必须等待。这种方式简化了资源分配,但可能导致资源利用率降低。
    • 资源预分配:在进程运行前预先分配好资源,确保进程在运行过程中不会因为资源不足而阻塞。
  2. 破坏不可剥夺条件
    • 允许进程在其运行过程中因请求资源而阻塞时,将其已占有的资源释放给其他进程。但是,这种方法在实施时可能会遇到困难,因为进程可能会因为资源的突然丢失而导致数据不一致或其他问题。
  3. 破坏循环等待条件
    • 资源有序分配法:给系统中的资源编号,规定每个进程必须按编号递增的顺序请求资源,同类资源一次申请完。这样,即使存在多个进程申请多个资源,也不会形成循环等待链。

二、避免死锁

避免死锁是在资源分配过程中,通过一定的算法来动态地检测资源分配的安全性,以避免系统进入不安全状态。

  1. 银行家算法
    • 银行家算法是一种避免死锁的经典算法,它通过模拟资源分配过程来检查系统是否处于安全状态。如果系统处于安全状态,则分配资源;否则,不分配资源并等待一段时间后再试。
  2. 资源分配图简化
    • 维护一个资源分配图,表示系统中资源的分配情况。通过简化资源分配图(如删除已分配的资源边或添加新的进程节点),可以判断系统是否可能进入死锁状态。

三、检查死锁

检查死锁是在系统运行过程中,通过一定的机制来发现是否存在死锁现象。

  1. 等待图分析
    • 使用等待图(Wait-for Graph)来分析系统中的进程和资源之间的等待关系。如果图中存在循环,则说明可能存在死锁。
  2. 资源分配图分析
    • 通过检查资源分配图中是否存在环,可以判断系统是否处于死锁状态。
  3. 死锁检测工具
    • 使用专门的死锁检测工具(如Java的jconsole、jvisualvm等)来监视和分析系统的资源分配和进程等待情况,从而发现死锁。

四、解除死锁

一旦检测到死锁,就需要采取措施来解除死锁,使系统能够继续正常运行。

  1. 资源剥夺
    • 强制剥夺某些进程所占用的资源,并将其分配给其他进程。但是,这种方法需要谨慎使用,因为它可能会导致被剥夺资源的进程数据不一致或操作失败。
  2. 进程终止
    • 终止导致死锁的一个或多个进程,以释放它们所占用的资源。选择哪个进程终止可能取决于进程的优先级、资源占用情况等因素。
  3. 回滚
    • 将系统状态回滚到死锁发生前的某个时间点,以便重新分配资源并避免死锁。但是,这种方法可能会导致已完成的操作被撤销,从而增加系统的开销和复杂性。
  4. 动态调整
    • 在系统运行过程中动态地调整资源的分配和进程的执行顺序,以避免死锁的发生。这种方法需要系统具备较高的灵活性和响应能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/52341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Educational Codeforces Round 169 (Rated for Div. 2)

前言 电脑显示屏一闪一闪地感觉要拿去修了,比赛时重启了好几次。 手速场,E 题没学过 Sprague-Grundy 吃了亏,好在前四题都一发过才不至于掉分。 Standings:1214 题目链接:Dashboard - Educational Codeforces Round 16…

【架构设计】-- aarch(ARM) and X86

1、aarch(ARM) 架构 (1)操作系统支持:早期为 32 位操作系统,目前大部分都是 64 位操作系统 (2)全称:Advanced RISC Machine,由英国ARM Holdings plc公司开发 这种架构主要⽤于智能…

Android车载蓝牙音乐实例(附Demo源码):实现手机播放音乐后车机应用显示音乐名称,歌手,专辑名。且可控制上一曲下一曲,暂停播放功能

一、功能需求 功能需求是在Android10以上设备上实现蓝牙音乐功能,细分为两个功能点: 1、手机和车载设备实现蓝牙连接 (本Demo文只做监听蓝牙连接状态,需手动到设置中连接蓝牙) 2、连接蓝牙成功后手机播放音乐时车载…

leetcode 递归(回溯)——java实现

递归算法与DFS类似,也与二叉树的先序遍历类似 以下摘自 leetcode回溯算法入门级详解 回溯法 采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候&#xff…

MySQL笔记01: MySQL入门_1.2 MySQL下载安装与配置

2.2 MySQL下载安装与配置 2.2.1 MySQL下载 MySQL中文官网:https://www.mysql.com/cn/ MySQL英文官网:https://www.mysql.com/ MySQL官网下载地址:https://www.mysql.com/downloads/ (1)点击“MySQL Community (GPL) Do…

TinaSDKV2.0 自定义系统开发

TinaSDKV2.0 自定义系统开发 什么是自定义系统? TinaSDK Kconfig界面配置 Tina Linux采用 Kconfig 机制对 SDK 和内核进行配置。 Kconfig 是一种固定格式的配置文件。Linux 编译环境中的 menuconfig 程序可以识别这种格式的配置文件,并提取出有效信息…

从力扣中等+困难题+表白HTML测试 -- 文心快码(Baidu Comate)

0 写在前面 (通过如下链接/二维码进入官网注册,并在IDE使用三次及以上可以找我领计算机基础/ML/DL 面经/知识点一份~) 官网地址:Baidu Comate Step1 打开文心快码(Baidu Comate)官网,点击「免…

[Python可视化]空气污染物浓度地图可视化

[Python可视化]空气污染物浓度地图可视化,果然是路边浓度最大 在本篇文章中,我将展示如何使用 Python 结合 OSMnx、NetworkX 和 GeoPandas 等库,计算给定路径的最短路线,并基于该路径穿过的网格单元计算总污染量。最终&#xff0c…

k8s - Secret实践练习

参考文档:https://kubernetes.io/zh-cn/docs/concepts/configuration/secret/ 这个和ConfigMap很相似,这里选两个做下测试,就不过多赘述了 简介 Secret 类似于 ConfigMap 但专门用于保存机密数据。 Secret 是一种包含少量敏感信息例如密码…

<数据集>鸟类识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:16287张 标注数量(xml文件个数):16287 标注数量(txt文件个数):16287 标注类别数:10 标注类别名称:[Chestnut Munia, Zebra Dove, Garden Sunbird, Collared Kingfish…

Qt第十八章 XML和Json格式解析

文章目录 JSON格式解析Json生成案例 XML简介与HTML的区别格式XML解析流的方式DOM XML生成 JSON与XML的区别比较 JSON 格式 JSON是一个标记符的序列。这套标记符包含六个构造字符、字符串、数字和三个字面名 六个构造字符 开始和结束数组:[ ]开始和结束对象&#x…

基于HarmonyOS的宠物收养系统的设计与实现(一)

基于HarmonyOS的宠物收养系统的设计与实现(一) 本系统是简易的宠物收养系统,为了更加熟练地掌握HarmonyOS相关技术的使用。 项目创建 创建一个空项目取名为PetApp 首页实现(组件导航使用) 官方文档:组…

机器学习辅助复合材料预测,性能管理优化创新材料,这种王炸般的组合,还真是大开眼界!

在人工智能与复合材料技术融合的背景下,复合材料的研究和应用正迅速发展,创新解决方案层出不穷。从复合材料性能的精确预测到复杂材料结构的智能设计,从数据驱动的材料结构优化到多尺度分析,人工智能技术正以其强大的数据处理能力…

Eureka 原理与实践全攻略

一、Eureka 概述 Eureka 在微服务架构中具有举足轻重的地位。它作为服务注册与发现的核心组件,为分布式系统中的服务管理提供了关键支持。 Eureka 的主要功能包括服务注册、服务发现、服务健康监测和自我保护机制。服务注册功能使得服务提供者能够在启动时将自身的…

git-版本管理工具基本操作-创建仓库-拉取-推送-暂存库-版本库

1、创建仓库和版本说明 2、克隆仓库到本地(首次拉取需要输入用户名和密码,用户名用邮箱,密码用登录gitee的密码,后面配置密钥后可以直接clone) 在命令行输出两行指令配置git才能克隆: username&#xff1…

《Web项目跨域请求后端Api设置Cookie失败问题?》

问题描述: 在web项目中跨域请求api时,api登录成功后需要向域名中设置cookie实现在两个域名下共享,但是登录接口返回成功,响应头中也有set-cookie,实际却无法设置到cookie中… web项目访问时的域名https://b.com/ api所…

解锁Spring Boot、Prometheus与Grafana三合一:打造你的专属自定义指标炫酷大屏!

1. 集成Prometheus到Spring Boot 需要在Spring Boot应用中集成Prometheus。可以通过micrometer库来实现。micrometer是一个应用程序监控库,它支持多种监控系统,包括Prometheus。 一招制胜!Spring Boot、Prometheus和Grafana三剑合璧&#x…

银河麒麟服务器操作系统Kylin-Server-V10-SP3-2403-Release-20240426-x86_64安装步骤

银河麒麟服务器操作系统 Kylin-Server-V10-SP3-2403-Release-20240426-x86_64安装步骤 一、准备工作1. 下载ISO镜像2. 制作安装介质3. 设置BIOS 二、安装过程1. 启动系统2. 选择安装语言3. 选择安装配置4. 配置root密码与创建用户5. 开始安装6. 重启系统7. 同意许可协议 三、系…

【Redis】基本全局命令

Redis的基本全局命令 keysexistsdelexpirettltype Redis 有 5 种数据结构,但它们都是键值对种的值,对于键来说有⼀些通⽤的命令。 keys 返回所有满足样式 (pattern)的key。支持如下统配样式。 h?llo 匹配 hello , hallo 和 hxl…

培训班和科班出生有什么区别

IT业的萌新来啦 每到毕业季 总有大量萌新走进职场 IT圈子的程序员 有的是科班出生 比如 计算机科学与技术、软件工程、大数据技术 有的是相关专业出生的 比如 信息安全、网络工程、物联网工程等等 除此之外 还有各种其他专业转行过来的 文理不限、专业不限 科班出生…