关于Linux和消息队列常见的十道面试题

实际工作中如何排查CPU飙升问题?

在实际工作中,我们可以通过以下步骤来排查CPU飙升的问题:

  1. 使用系统监控工具:首先,我们可以使用系统监控工具,如top命令,来查看所有进程占系统CPU的排序。这样可以帮助我们快速定位到占用CPU资源最多的进程

  2. 查看具体进程的CPU占用情况:接着,我们可以执行top -Hp 进程号命令,查看该进程下的所有线程占CPU的情况

  3. 查看耗CPU的线程:然后,我们可以执行printf \"%x\\n 线程号\"命令,把线程号转成16进制,以便在后续查看线程堆栈信息

  4. 查看线程堆栈信息:我们可以执行jstack 进程号 | grep 线程ID命令,查找某进程下线程ID(jstack堆栈信息中的nid)的线程状态

  5. 查看GC情况:我们还可以执行jstat -gcutil 进程号 统计间隔毫秒 统计次数命令,查看某进程GC持续变化情况

  6. 查看进程的堆内存情况:我们可以执行jmap -heap 进程ID命令,查看一下进程的堆内从是不是要溢出了

  7. 导出内存heap到文件中:最后,我们可以执行jmap -dump:format=b,file=filename 进程ID命令,导出某进程下内存heap输出到文件中

以上步骤可以帮助我们定位到问题所在,例如是否存在死锁,是否有大量消耗CPU的操作,或者内存消耗过大导致Full GC次数过多等问题。这些都是我们在实际工作中可能会遇到的问题,通过这些步骤,我们可以有效地排查和解决这些问题

如何获取当前Java程序的堆日志?如何查看堆日志分析和排查问题?

在Java应用程序的开发和维护过程中,了解和分析Java堆信息是一项重要的任务。本文将介绍如何获取Java堆信息的不同方法,并提供一些分析堆信息的实用技巧。

获取Java堆信息的方法

  1. Java虚拟机(JVM)工具
    1. 使用jcmd命令:在命令行中运行jcmd <pid> GC.heap_info,其中<pid>是Java进程的进程ID。这个命令会输出与Java堆有关的信息,包括堆的使用情况、对象分配统计等。
    2. 使用jmap命令:在命令行中运行jmap -heap <pid>,其中<pid>是Java进程的进程ID。这个命令会显示Java堆的详细信息,包括堆的大小、已使用空间、GC收集器等。
    3. 使用jconsole工具:启动jconsole,选择要监视的Java进程。在内存选项卡下,您可以查看堆的使用情况、生成报告和进行分析。
  2. Java内存分析工具
    1. 使用VisualVM:这是一个功能强大的Java性能监视和分析工具。它提供了深入分析Java堆和内存的功能,包括堆的大小、对象数量、内存泄漏检测等。
    2. 使用Eclipse Memory Analyzer:这是一款专用于分析Java堆转储文件(Heap Dump)的工具。它可以帮助您识别内存泄漏问题、查找大对象和无效对象等。
  3. 堆转储文件
    1. 通过在JVM启动参数中添加-XX:+HeapDumpOnOutOfMemoryError标志,当发生内存溢出错误时,JVM将自动生成堆转储文件(Heap Dump)。这些文件包含了完整的Java堆信息,您可以使用Java内存分析工具打开和分析这些文件。

分析Java堆信息的技巧

获取Java堆信息是第一步,而深入分析这些信息以获得有价值的见解则是关键。以下是一些实用的技巧:

  1. 查看堆内存占用情况:了解堆的使用量,包括已分配的空间、已使用的空间和剩余的空间。根据这些指标,您可以判断是否需要调整堆的大小或优化内存使用方式
  2. 分析对象数量和大小:通过分析堆中对象的数量和大小分布,可以确定哪些类型的对象占用了较多的内存空间。这有助于您识别内存消耗较大的部分,并进行针对性的优化
  3. 检测内存泄漏:观察堆中无法被垃圾回收器回收的对象,可以识别是否存在内存泄漏问题。通过查看对象引用链,您可以确定哪些对象导致了内存泄漏,并采取相应的措施进行修复
  4. 优化对象生命周期:合理管理对象的生命周期非常重要。及时释放不再使用的对象可以减少堆内存的占用,并改善应用程序的性能和稳定性

结论

获取和分析Java堆信息对于开发和维护Java应用程序至关重要。本文介绍了多种获取Java堆信息的方法,包括JVM工具、Java内存分析工具以及堆转储文件。同时,还提供了一些实用的技巧来帮助您深入分析堆信息,并从中获得有价值的见解。通过了解堆的使用情况、分析对象数量和大小、检测内存泄漏以及优化对象生命周期,您可以改善应用程序的性能和稳定性

Linux中如何给某个脚本赋值运行权限?

  1. 定位到脚本所在的目录:使用cd命令来定位到存放脚本的目录

  2. 赋予脚本执行权限:使用chmod +x filename命令来给脚本赋予执行权限,其中filename是脚本文件的名称

场景题:项目本地能运行,发布到Linux后运行不了,可能是什么原因?该如何解决?

  1. 环境差异:本地环境和服务器环境可能存在差异,例如Java版本、系统环境变量、依赖库等。解决方法是确保服务器环境和本地环境尽可能一致
  2. 权限问题:可能是Linux服务器上的文件权限或者防火墙设置导致的。解决方法是检查并修改相关的权限设置
  3. 依赖问题:可能是项目依赖的库在服务器上不存在或版本不匹配。解决方法是检查项目的依赖,并确保它们在服务器上正确地被安装和配置
  4. 配置问题:可能是配置文件中的路径、数据库连接信息等在服务器上不适用。解决方法是检查并修改配置文件,确保它们在服务器环境中是正确的

其中最需要注意的就是防火墙问题,大部分都是由于防火墙没有开启

什么是零拷贝技术?它有哪些使用场景?

零拷贝技术是一种优化数据传输的方法,它通过最小化数据在内存中的拷贝次数来提高数据传输的效率和性能。通常,在数据传输过程中,数据需要从一个缓冲区(如内核缓冲区)拷贝到另一个缓冲区(如用户空间缓冲区),然后再传输到目标位置。而零拷贝技术的目标是尽可能减少或消除这些拷贝操作,从而降低系统开销和提高性能。零拷贝技术的使用场景包括但不限于以下几种:

  1. 网络数据传输:在网络传输过程中,零拷贝技术可以避免数据在内核空间和用户空间之间的拷贝,从而提高网络数据传输的效率。常见的应用包括高性能网络服务器、网络流媒体服务等

  2. 文件传输:在文件传输过程中,零拷贝技术可以减少数据在文件系统缓存和用户空间缓冲区之间的拷贝次数,提高文件传输的效率。例如,在文件系统中实现零拷贝的技术可以加速文件的读取和写入操作

  3. 内存映射文件:内存映射文件是一种将文件映射到进程地址空间的技术,可以让应用程序直接操作文件而无需进行显式的读写操作。零拷贝技术可以用于内存映射文件的实现,从而提高文件的访问速度和效率

  4. 数据库系统:在数据库系统中,零拷贝技术可以用于加速数据的读取和写入操作,提高数据库的性能和吞吐量。例如,通过将数据库缓存直接映射到内存中,可以避免数据在内存和数据库之间的拷贝操作

什么是消息队列?消息队列有什么用?

消息队列是一种在应用程序之间传递消息的通信机制。它是一种典型的生产者-消费者模型,其中生产者负责生成消息并将其发送到队列中,而消费者则从队列中获取消息并进行处理。消息队列的主要目的是解耦生产者和消费者,使它们可以独立地进行工作,从而提高系统的可扩展性、可靠性和灵活性。它可以用于以下几个方面:

  1. 解耦系统组件:通过引入消息队列,系统中的不同组件可以通过消息进行通信,而无需直接依赖于彼此的实现细节。这样可以使系统更加灵活,降低组件之间的耦合度

  2. 异步处理:消息队列可以使生产者和消费者之间的通信变为异步的,生产者无需等待消费者处理消息就可以继续执行其他任务。这可以提高系统的响应速度和吞吐量

  3. 削峰填谷:消息队列可以作为一个缓冲区,帮助平衡生产者和消费者之间的速度差异。当生产者产生的消息量超过消费者处理的能力时,消息队列可以暂时存储消息,防止系统因消息堆积而崩溃

  4. 可靠性传输:消息队列通常提供可靠性传输的机制,确保消息在传输过程中不会丢失或损坏。这对于需要确保数据完整性和可靠性的系统非常重要

  5. 实现分布式系统:消息队列可以用于构建分布式系统,通过在不同节点之间传递消息来实现协作和通信。这对于构建大规模、高可用性的分布式系统非常有用

消息队列有几种实现方式?它们有什么区别?

常见的消息队列:

  1. ActiveMQ
    1. ActiveMQ是基于Java Message Service (JMS) 规范的开源消息队列软件,它使用了传统的基于队列(Queue)和发布-订阅(Topic)模式
    2. ActiveMQ支持多种通信协议,包括OpenWire、STOMP、AMQP等。它具有广泛的语言支持,适用于Java和其他语言的开发
    3. ActiveMQ具有较高的可靠性和稳定性,但在处理大规模高并发消息时性能可能有所局限
    4. 它支持多种消息传递模式,包括点对点和发布/订阅模式。ActiveMQ具有较高的可靠性、可扩展性和性能,并提供了丰富的功能,如消息持久化、事务支持等
  2. RabbitMQ
    1. RabbitMQ是一个基于AMQP(Advanced Message Queuing Protocol)的开源消息队列系统,它实现了高级的队列功能,并提供了可靠消息传输的保证
    2. RabbitMQ支持多种编程语言和通信协议,以及灵活的消息路由和可靠的消息确认机制
    3. RabbitMQ提供了丰富的插件机制,使得它可以与其他系统集成,如Spring、Celery等
    4. RabbitMQ适用于大规模高并发消息处理,并具有较好的性能和可靠性
    5. RabbitMQ是一个可靠、灵活且易于使用的开源消息队列软件
    6. 它实现了高级消息队列协议 (AMQP),支持多种编程语言,并提供了丰富的功能和工具
    7. RabbitMQ具有高可靠性、可扩展性和灵活性,并提供了多种消息传递模式和高级特性,如消息持久化、消息路由和消息确认机制等
  3. RocketMQ
    1. RocketMQ是阿里巴巴开源的分布式消息队列系统,它采用了基于主题(Topic)的消息模型,支持包括顺序消息、事务消息等在内的多种特性
    2. RocketMQ具有高吞吐量、低延迟和高可靠性的优势,并能够处理大规模的消息流
    3. 它适用于高性能、高可靠性的消息通信场景,如分布式事务、日志收集和流式数据处理等
    4. RocketMQ采用了基于主题的发布/订阅模式,支持消息顺序传递和事务消息,并具有强大的可扩展性和灵活的架构设计
  4. Kafka
    1. Kafka是由Apache软件基金会开发的分布式流处理平台和消息队列系统,一个开源的分布式流处理平台,用于构建高可靠性的实时数据管道和流式处理应用程序
    2. Kafka具有高吞吐量、持久化和可扩展性,并支持实时流处理和大规模数据处理。它适用于构建实时流处理应用程序,并提供了丰富的功能和工具来处理大规模的数据流
    3. Kafka使用基于发布-订阅(Topic)的消息模型,支持高并发的写入和读取操作。它适用于实时数据流处理、协同过滤、日志收集和批处理等场景。Kafka具有高性能和可靠性,并能够处理大规模的消息流

ActiveMQ、RabbitMQ、RocketMQ、Kafka是常用的消息队列中间件,能够实现异步消息的发送和接收

区别:

  1. 消息传递模型
    1. ActiveMQ:基于JMS(Java Message Service)标准,支持点对点和发布/订阅模式
    2. RabbitMQ:支持AMQP(Advanced Message Queuing Protocol)协议,可以实现广泛的消息传递模式
    3. RocketMQ:类似于Kafka,支持高吞吐量的分布式消息传递
    4. Kafka:支持多个生产者和消费者的发布/订阅模式,通过高吞吐量和持久化日志来保证消息的可靠传递
  2. 消息持久化
    1. ActiveMQ:支持持久化消息,可以将消息保存到磁盘上,确保消息不会丢失
    2. RabbitMQ:默认情况下,消息是持久化的,可以将消息保存到磁盘上或者通过镜像队列复制到其他节点
    3. RocketMQ:支持消息的持久化,可以将消息保存到磁盘上,确保消息不会丢失
    4. Kafka:通过持久化日志来保证消息的可靠传递,消息被写入磁盘并且可以进行复制,可以进行高效的消息重放
  3. 消息顺序性
    1. ActiveMQ:可以保证消息的顺序性,在同一个队列中,消息将按照发送的顺序进行处理
    2. RabbitMQ:可以通过设置队列的顺序属性来保证消息的顺序性
    3. RocketMQ:可以在消息生产者端保证消息的顺序性,将相关的消息发送到同一个队列中进行处理
    4. Kafka:在分区内保证消息的顺序性,但是对于整个主题的消息顺序无法保证
  4. 可靠性
    1. ActiveMQ:支持可靠性消息传递,可以进行事务支持和消息确认机制
    2. RabbitMQ:支持可靠性消息传递,可以进行消息确认机制和持久化
    3. RocketMQ:支持可靠性消息传递,可以通过同步或异步方式发送消息,并支持消息的重试和拉取机制
    4. Kafka:通过分区和复制机制来保证消息的可靠传递,具有较高的可靠性
  5. 生态系统和社区支持
    1. ActiveMQ:拥有较大的用户群体和活跃的社区支持
    2. RabbitMQ:拥有丰富的插件和可扩展性,有大量的开源社区支持
    3. RocketMQ:阿里巴巴开源的项目,拥有较大的用户群体和活跃的社区支持
    4. Kafka:被广泛应用于大数据处理和实时流处理领域,拥有庞大的生态系统和活跃的社区支持

总体来说,这些消息队列中间件各有特点,选择适合自己需求的消息队列是根据具体应用场景和需求来决定的。

如何使用Java程序实现一个简单的消息队列?

生产者代码:

package com.rabbitmq.one;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

/**
 * 生产者:发消息
 */

public class Produce {
    public static final String QUEUE_NAME="hello";

    public static void main(String[] args) throws IOException, TimeoutException {
        //创建工厂
        ConnectionFactory factory = new ConnectionFactory();
        //工厂IP连接rabbitmq
        factory.setHost("118.31.6.132");
        //用户名
        factory.setUsername("admin");
        //密码
        factory.setPassword("123");
        //创建连接
        Connection connection = factory.newConnection();
        //获取信道
        Channel channel = connection.createChannel();
        /*
         *生成一个队列
         * 1.队列名称
         * 2.队列里面的信息是否持久化(磁盘)默认情况时在内存
         * 3.该队列是否只供一个消费者进行消费 是否消费共享 true是允许
         * 4.是否自动删除 最后一个消费者断开连接之后 该队列是否自动删除 true自动删除 false不自动删除
         * 5.其他参数 延迟消息等
         */
        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
        //发消息
        String message = "hello world";
        /**
         * 发送一个消息
         * 1.发送到那个交换机
         * 2.路由的KEY值是哪个 本次是队列的名称
         * 3.其他参数信息
         * 4.发送消息的消息体
         */
        channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
        System.out.println("消息发送完毕!");
    }
}

消费者代码:

package com.rabbitmq.one;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.Collections;
import java.util.concurrent.TimeoutException;

/**
 * 消费者
 */
public class Consume {
    //队列名称
    public static final String QUEUE_NAME = "hello";
    //接受消息
    public static void main(String[] args) throws IOException, TimeoutException {
        //创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("118.31.6.132");
        factory.setUsername("admin");
        factory.setPassword("123");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        //声明 接受消息
        DeliverCallback deliverCallback = (consumerTag,message)->{
            System.out.println(new String(message.getBody()));
        };
        //取消消息的回调
        CancelCallback cancelCallback = consumerTag->{
            System.out.println("消息消费被中断");
        };
         /**
         * 消费者信息
         * 1.消费哪个队列
         * 2.消费成功之后是否要自动应答 true自动应答 false手动应答
         * 3.消费者微车才能更改消费的回调
         * 4.消费者取消消费回调
         */
        channel.basicConsume(QUEUE_NAME,true, deliverCallback,cancelCallback);
    }
}

RabbitMQ、Kafka和RocketMQ有什么区别?

RabbitMQ、Kafka和RocketMQ是三种不同的消息队列中间件,它们在设计理念、特性和适用场景上有所不同:

  1. RabbitMQ

    • 设计理念:RabbitMQ是基于AMQP(Advanced Message Queuing Protocol)的消息队列系统,旨在提供高可靠性、可靠消息传输的保证以及灵活的消息路由和可靠的消息确认机制
    • 特点:RabbitMQ提供了丰富的插件机制,使得它可以与其他系统集成,并提供了可靠的消息传输保证。它适用于需要强调可靠性、灵活性和易用性的场景
    • 适用场景:RabbitMQ适用于大多数的企业应用场景,如异步任务处理、日志收集、消息通知等
  2. Kafka

    • 设计理念:Kafka是由Apache软件基金会开发的分布式流处理平台和消息队列系统,旨在构建实时数据管道和流式处理应用程序
    • 特点:Kafka具有高吞吐量、持久化和可扩展性,并支持实时流处理和大规模数据处理。它适用于构建实时流处理应用程序,并提供了丰富的功能和工具来处理大规模的数据流
    • 适用场景:Kafka适用于需要处理大规模数据流、实时数据分析、事件驱动架构等场景
  3. RocketMQ

    • 设计理念:RocketMQ是阿里巴巴开源的分布式消息队列系统,旨在提供高吞吐量、低延迟和高可靠性的消息通信
    • 特点:RocketMQ采用了基于主题的消息模型,支持多种特性如顺序消息、事务消息等,并具有强大的可扩展性和灵活的架构设计
    • 适用场景:RocketMQ适用于高性能、高可靠性的消息通信场景,如分布式事务、日志收集和流式数据处理等

总的来说,RabbitMQ侧重于可靠性、灵活性和易用性,适用于大多数企业应用场景;Kafka侧重于处理大规模数据流、实时流处理和事件驱动架构;RocketMQ侧重于高吞吐量、低延迟和高可靠性的消息通信。选择合适的消息队列中间件取决于具体的需求和应用场景

RabbitMQ有几种消息类型?

RabbitMQ主要提供了以下几种消息类型:

  1. 简单模式(Simple):生产者发送消息到队列,消费者从队列获取消息
  2. 工作模式(Work):与简单模式类似,但它允许多个消费者同时从一个队列获取消息
  3. 发布/订阅模式(Publish/Subscribe):生产者将消息发送到交换机(Exchange),多个队列可以绑定到这个交换机,从而实现一个消息被多个消费者获取
  4. 路由模式(Routing):生产者将消息和一个路由键(Routing Key)一起发送到交换机,只有队列的绑定键(Binding Key)与路由键完全匹配,才会接收到消息
  5. 通配符模式(Topics):它是路由模式的升级版,它允许在绑定键和路由键之间进行模糊匹配

这些类型的选择取决于你的具体需求,例如,你是否需要一个消息被多个消费者接收,或者你是否需要根据某种条件来过滤消息等等

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI助力农作物自动采摘,基于YOLOv7【tiny/l/x】不同系列参数模型开发构建作物生产场景下番茄采摘检测计数分析系统

去年十一那会无意间刷到一个视频展示的就是德国机械收割机非常高效自动化地24小时不间断地在超广阔的土地上采摘各种作物&#xff0c;专家设计出来了很多用于采摘不同农作物的大型机械&#xff0c;看着非常震撼&#xff0c;但是我们国内农业的发展还是相对比较滞后的&#xff0…

【深度学习】从0完整讲透深度学习第2篇:TensorFlow介绍和基本操作(代码文档已分享)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论深度学习相关知识。可以让大家熟练掌握机器学习基础,如分类、回归&#xff08;含代码&#xff09;&#xff0c;熟练掌握numpy,pandas,sklearn等框架使用。在算法上&#xff0c;掌握神经网络的数学原理&#xff0c;手动实…

2024数学建模美赛F题Reducing Illegal Wildlife Trade原创论文讲解(含完整python代码)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了数学建模美赛本次F题目非法野生动物贸易完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 F题论文共42页&…

MySQL温故篇(一)SQL语句基础

一、SQL语句基础 1、SQL语言分类 DDL&#xff1a;数据定义语言 DCL&#xff1a;数据控制语言 DML&#xff1a;数据操作语言 DQL&#xff1a;数据的查询语言 2、数据类型 3、字符类型 char(11) &#xff1a; 定长 的字符串类型,在存储字符串时&#xff0c;最大字符长度11个&a…

PiflowX新增Apache Beam引擎支持

参考资料&#xff1a; Apache Beam 架构原理及应用实践-腾讯云开发者社区-腾讯云 (tencent.com) 在之前的文章中有介绍过&#xff0c;PiflowX是支持spark和flink计算引擎&#xff0c;其架构图如下所示&#xff1a; 在piflow高度抽象的流水线组件的支持下&#xff0c;我们可以…

【C/C++】C/C++编程——整型(二)

在 C 中&#xff0c;整型数据可以分为有符号数&#xff08;Signed&#xff09;和无符号数&#xff08;Unsigned&#xff09;&#xff0c;这两种类型主要用于表示整数值&#xff0c;但它们在表示范围和用途方面有所不同。默认情况下&#xff0c;整数类型如 int、short、long 都是…

爱上JUC: 面试常考题大总结(线程安全篇)

&#x1f31f;一起备战面试吧&#x1f604;&#xff0c;也是巩固&#x1f4aa;&#xff0c;不再害怕面试&#x1f44a; 文章目录 进程和线程区别并行和并发的区别创建线程的方式有哪些runnable和callable有什么区别run和start区别线程包含哪些状态&#xff0c;是如何转换的&…

【TCP/IP】用户访问一个购物网站时TCP/IP五层参考模型中每一层的功能

当用户访问一个购物网站时&#xff0c;网络上的每一层都会涉及不同的协议&#xff0c;具体网络模型如下图所示。 以下是每个网络层及其相关的协议示例&#xff1a; 物理层&#xff1a;负责将比特流传输到物理媒介上&#xff0c;例如电缆或无线信号。所以在物理层&#xff0c;可…

DockerUI如何部署结合内网穿透实现公网环境管理本地docker容器

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

基于协同算法的图书信息管理系统(编号V73)

Java精品项目源码基于协同算法的图书信息管理系统(编号V73) 大家好&#xff0c;小辰今天给大家介绍一个图书信息管理系统&#xff0c;演示视频公众号&#xff08;小辰哥的Java&#xff09;对号查询观看即可 文章目录 Java精品项目源码基于协同算法的图书信息管理系统(编号V73…

Pandas.Series.cumsum() 累积和 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本&#xff1a; 本文基于 pandas2.2.0 编写。 关于本文内容更新&#xff1a; 随着pandas的stable版本更迭&#xff0c;本文持续更新&#xff0c;不断完善补充。 传送门&#xff1a; Pandas API参考目录 传送门&#xff1a; Pandas 版本更新及新特性 传送门&…

医学答案怎么查找?3个受欢迎的搜题分享了 #其他#职场发展#职场发展

学习工具是我们的得力助手&#xff0c;帮助我们更好地组织学习内容和时间。 1.南北题库 这是一个网站 完全免费,主要的特点就是题库全面丰富,涵盖计算机、外语、论文撰写、注册会计师等。并且后续还会继续扩展题库,题目分类非常详细,体界面清晰简洁。 有举一反三功能,搜一道…

使用PHPStudy搭建本地web网站并实现任意浏览器公网访问

文章目录 [toc]使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2…

正点原子--STM32定时器学习笔记(1)

这部分是笔者对基本定时器的理论知识进行学习与总结&#xff01;&#xff0c;主要记录自己在学习过程中遇到的重难点&#xff0c;其他一些基础点就一笔带过了&#xff01; 1. 定时器概述 1.1 软件定时原理 使用纯软件&#xff08;CPU死等&#xff09;的方式实现定时&#xf…

【SpringBoot】SpringBoot的web开发

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;SpringBoot ⛺️稳重求进&#xff0c;晒太阳 Wbe开发 使用Springboot 1&#xff09;、创建SpringBoot应用&#xff0c;选中我们需要的模块&#xff1b; 2&#xff09;、SpringBoot已经默…

机器视觉系统设计:视觉系统中的成像基准

开发视觉系统的一个重要活动是验证其部署是否符合工程规范。一个成功的视觉应用程序的两个特点是它无需工程师干涉情况下正常工作了多长时间&#xff0c;以及它的维护和复制部署是多么简易。实现所有如上所述目标的一个关键步骤是确定视觉系统的基准。 在这里使用的上下文中&a…

Unknown column ‘project_name‘ in field list。表示数据库中没找到你要查得或者插入的‘project_name’字段。

Unknown column project_name in field list。表示数据库中没找到你要查得或者插入的‘project_name’字段。

ftrace工具学习笔记

ftrace是一个功能强大的Linux内核跟踪工具&#xff0c;可用于分析内核的行为和性能问题。它可以用来收集各种内核跟踪数据&#xff0c;如函数调用、内存分配、中断处理等。以下是ftrace的一些主要特点和用法&#xff1a; ftrace是内核自带的跟踪工具&#xff0c;因此无需安装。…

服务器和云服务器哪个更安全?

随着云计算技术的不断发展&#xff0c;越来越多的企业开始选择使用云服务器来存储和处理数据。然而&#xff0c;对于一些企业来说&#xff0c;他们可能更倾向于使用传统的服务器。在这种情况下&#xff0c;安全性成为了一个重要的考虑因素。那么&#xff0c;服务器和云服务器哪…

代码随想录算法训练营第22天 | 235. 二叉搜索树的最近公共祖先 , 701.二叉搜索树中的插入操作 , 450.删除二叉搜索树中的节点

二叉树理论基础&#xff1a; https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE 235. 二叉搜索树的最近公共祖先 题目链接&#xff1a;https://leetcode.cn/problems/lowes…