观测云接入 NewRelic .NET 探针

news2024/12/27 11:11:28

背景

部分客户系统采用的是.NET 4.5 部署研发的、基于 IIS 进行发布的 Web 项目,需要接入到观测云进行链路信息展示,ddtrace 和 otel 对于低版本.NET 支持力度有限。

环境信息

  • IIS 4.0
  • .NET core 4.0、4.5、4.6
  • Window Server 2012 R2

域名配置

准备一个域名 www.datakit.com,需要申请 https 证书

配置 host

修改 hosts 文件,添加两个域名

127.0.0.1 www.google.com
127.0.0.1 www.datakit.com
  • www.google.com: NewRelic Agent 在生效前需要去访问一下 google,目的是确保网络通畅
  • www.datakit.com: NewRelic Agent 上报链路数据采用的是 tls,需要一个域名和证书信息

域名生效

在 IIS 下新增网站,域名为 www.google.com,端口为 80

根证书配置

如果申请的 https 证书是购买的,一般不需要配置根证书,如果属于自签证书,则需要配置。

Windows服务器如何导入根证书

NewRelic 接入

经调查研究表明,NewRelic .NET Agent 版本 6.27 可用于当前客户环境,采集链路并上报数据到观测云(DataKit采集上报)进行统一的信息展示。

下载安装 .NET Agent

安装前需要准备一个 NewRelic license,安装时需要用到,可以随意填写,也可以填写固定值eu01xx332b83865e13171131e7f9e08dFFFFNRAL

安装完成后有两个目录

  • C:\Program Files\New Relic\.NET Agent

  • C:\ProgramData\New Relic\.NET Agent

其中 C:\Program Files\New Relic\.NET Agent 目录下有个 newrelic.conf 文件,采集.NET 信息需要。

IIS 下 NewRelic 配置

使用管理员权限打开 PowerShell,执行以下命令

$env:COR_ENABLE_PROFILING=1;
$env:COR_PROFILER={71DA0A04-7777-4EC6-9643-7D28B46A8A41};
$env:NEWRELIC_INSTALL_PATH="C:\Program Files\New Relic\.NET Agent";
$env:NEW_RELIC_HOST="www.datakit.com";

在 PowerShell 使用 Get-ChildItem env:查看命令是否生效,该命令会列出当前系统的所有环境变量信息

DataKit 安装&配置

安装

参考安装文档

DataKit 的安装目录为 C:\Program Files\datakit

调整 DataKit 配置

DataKit 全局配置文件为datakit.conf,这里需要调整datakit.conf,让其至此 tls

[http_api]
  rum_origin_ip_header = "X-Forwarded-For"
  listen = "0.0.0.0:9529"
  disable_404page = false
  rum_app_id_white_list = []
  public_apis = []
  timeout = "30s"
  close_idle_connection = false
  [http_api.tls]
    cert="/cert/cmyncp.com_cert.pem"
    privkey="/cert/cmyncp.com_key.pem"

其中 [http_api.tls] 为开启 tls 模块

  • cert:域名公钥证书
  • privkey:域名私钥证书

路径建议填写绝对路径,否则可能会出现意想不到的效果

开启 NewRelic 采集器

进入 DataKit 安装目录下,并进入 conf.d/newrelic,复制 newrelic.config.samplenewrelic.config

重启 DataKit

在 PowerShell 下执行一下命令

datakit service -R

应用接入 NewRelic .NET Agent

配置 newrelic.conf

<?xml version="1.0"?>
<!-- Copyright (c) 2008-2017 New Relic, Inc.  All rights reserved. -->
<!-- For more information see: https://newrelic.com/docs/dotnet/dotnet-agent-configuration -->
<configuration xmlns="urn:newrelic-config" agentEnabled="true">
  <service licenseKey="eu01xx332b83865e13171131e7f9e08dFFFFNRAL" ssl="true" host="www.datakit.com" port="9529"/>
  <application>
    <name>water-web</name>
  </application>
  <log level="debug" auditLog="true"/>
  <transactionTracer enabled="true" transactionThreshold="apdex_f" stackTraceThreshold="500" recordSql="obfuscated" explainEnabled="false" explainThreshold="500" />
  <crossApplicationTracer enabled="true" />
  <errorCollector enabled="true">
    <ignoreErrors>
      <exception>System.IO.FileNotFoundException</exception>
      <exception>System.Threading.ThreadAbortException</exception>
    </ignoreErrors>
    <ignoreStatusCodes>
      <code>401</code>
      <code>404</code>
    </ignoreStatusCodes>
  </errorCollector>
  <browserMonitoring autoInstrument="true" />
  <threadProfiling>
    <ignoreMethod>System.Threading.WaitHandle:InternalWaitOne</ignoreMethod>
    <ignoreMethod>System.Threading.WaitHandle:WaitAny</ignoreMethod>
  </threadProfiling>
</configuration>

配置说明:
licenseKey: license 信息
host: 上报的主机
port: 上报端口
application > name: 应用名称
log: 日志信息

其中 host 和 port可以通过全局变量的方式进行配置

$env:NEW_RELIC_HOST="www.datakit.com";
$env:NEW_RELIC_PORT=9529;

重启 IIS

net stop /y was # stop iis

net start w3svc # start iis

访问应用

只有访问了应用,系统才会生成链路数据,并进行数据上报。

2023-09-11 07:19:05,603 NewRelic INFO: Configuration file found in app/web root directory: C:\Users\Administrator\Desktop\public\newrelic.config
2023-09-11 07:19:05,632 NewRelic INFO: The log level was updated to DEBUG
2023-09-11 07:19:05,766 NewRelic DEBUG: Available storage type : NewRelic.Providers.Storage.CallStack.AsyncLocal.CallContextStorageFactory (True)
2023-09-11 07:19:05,768 NewRelic DEBUG: Available storage type : NewRelic.Providers.Storage.TransactionContext.AspTransactionContextFactory (True)
2023-09-11 07:19:05,772 NewRelic DEBUG: Available storage type : NewRelic.Providers.Storage.TransactionContext.Wcf3TransactionContextFactory (True)
2023-09-11 07:19:05,774 NewRelic DEBUG: Using async storage NewRelic.Providers.Storage.CallStack.AsyncLocal.CallContextStorageFactory for call stack
2023-09-11 07:19:06,030 NewRelic INFO: Reading configuration from "C:\Users\Administrator\Desktop\public\newrelic.config"
2023-09-11 07:19:06,049 NewRelic INFO: The New Relic .NET Agent v6.27.0.0 started (pid 4344) for virtual path '/'
2023-09-11 07:19:06,050 NewRelic WARN: This version of the agent is primarily meant for monitoring .NET Framework 3.5 applications. This application is running on .NET CLR version 4.0.30319.42000. If you do not need to monitor any .NET Framework 3.5 applications on this server, please consider upgrading to the latest version of the New Relic .NET Agent which supports .NET Framework 4.5 and higher.
2023-09-11 07:19:06,076 NewRelic DEBUG: Wrapper "NewRelic.Providers.Wrapper.ServiceStackRedis.SendCommandWrapper" will be used for instrumented method "ServiceStack.Redis.RedisNativeClient.SendCommand"
2023-09-11 07:19:06,391 NewRelic DEBUG: Invoking "preconnect" with : []
2023-09-11 07:19:07,309 NewRelic DEBUG: Wrapper "NewRelic.Providers.Wrapper.Asp35.IntegratedPipeline.ExecuteStepWrapper" will be used for instrumented method "System.Web.HttpApplication.ExecuteStep"
2023-09-11 07:19:07,548 NewRelic DEBUG: Wrapper "NewRelic.Providers.Wrapper.Asp35.Shared.RouteNamingWrapper" will be used for instrumented method "System.Web.Routing.RouteCollection.GetRouteData"
2023-09-11 07:19:07,733 NewRelic DEBUG: Wrapper "NewRelic.Providers.Wrapper.Asp35.Shared.CallHandlerWrapper" will be used for instrumented method "System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute"
2023-09-11 07:19:07,782 NewRelic DEBUG: Wrapper "NewRelic.Providers.Wrapper.Mvc3.AsyncBeginInvokeActionWrapper" will be used for instrumented method "System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction"
2023-09-11 07:19:07,851 NewRelic DEBUG: Wrapper "NewRelic.Providers.Wrapper.Mvc3.AsyncEndInvokeActionWrapper" will be used for instrumented method "System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction"
2023-09-11 07:19:08,026 NewRelic DEBUG: Wrapper "NewRelic.Providers.Wrapper.Asp35.Shared.FilterWrapper" will be used for instrumented method "System.Web.HttpWriter.FilterIntegrated"
2023-09-11 07:19:08,053 NewRelic DEBUG: Wrapper "NewRelic.Providers.Wrapper.Asp35.IntegratedPipeline.FinishPipelineRequestWrapper" will be used for instrumented method "System.Web.HttpRuntime.FinishPipelineRequest"
2023-09-11 07:19:08,424 NewRelic DEBUG: Received : {"redirect_host":"www.cmyncp.com","security_policies":{"record_sql":{"enabled":true,"required":true},"attributes_include":{"enabled":true,"required":true},"allow_raw_exception_messages":{"enabled":true,"required":true},"custom_events":{"enabled":true,"required":true},"custom_parameters":{"enabled":true,"required":true}}}
2023-09-11 07:19:08,527 NewRelic INFO: Your New Relic Application Name(s): water-web
2023-09-11 07:19:09,775 NewRelic DEBUG: Invoking "connect" with : [{"pid":4344,"language":"dotnet","host":"iZw4p6289ecf7qZ","app_name":["water-web"],"agent_version":"6.27.0.0","agent_version_timestamp":1611791638918,"build_timestamp":1611791638918,"security_settings":{"capture_params":false,"transaction_tracer":{"record_sql":"obfuscated"}},"high_security":false,"identifier":"/LM/W3SVC/2/ROOT:publicwater-web","labels":[],"settings":{"browser_monitoring.loader_debug":false,"browser_monitoring.loader":"rum"},"utilization":{"metadata_version":3,"logical_processors":2,"total_ram_mib":2047,"hostname":"iZw4p6289ecf7qZ"},"environment":[["Framework","dotnet"],["Product Name","New Relic .NET Agent"],["OS","Microsoft Windows NT 6.3.9600.0"],[".NET Version","4.0.30319.42000"],["Total Physical System Memory",2146873344],["x64","yes"],["StartTime","2023-09-11T15:19:00.0918856+08:00"],["MainModule.FileVersionInfo","File:             c:\\windows\\system32\\inetsrv\\w3wp.exe\r\nInternalName:     w3wp.exe\r\nOriginalFilename: w3wp.exe.mui\r\nFileVersion:      8.5.9600.16384 (winblue_rtm.130821-1623)\r\nFileDescription:  IIS Worker Process\r\nProduct:          Internet Information Services\r\nProductVersion:   8.5.9600.16384\r\nDebug:            False\r\nPatched:          False\r\nPreRelease:       False\r\nPrivateBuild:     False\r\nSpecialBuild:     False\r\nLanguage:         语言中性\r\n"],["GCSettings.IsServerGC",true],["AppDomain.FriendlyName","/LM/W3SVC/2/ROOT-1-133388903407442996"],["AppDomainAppPath",null],["AppDomainAppId","/LM/W3SVC/2/ROOT"],["AppDomainAppVirtualPath","/"],["UsingIntegratedPipeline","True"],["IIS Version","8.5"],["Plugin List",["mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089","System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a","System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089","System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35","System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a","System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089","System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089","Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a","System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a","Microsoft.JScript, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a","System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35","System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35","System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35","System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35","Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35","WaterCloud.Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null","System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35","System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35","WaterCloud.DataBase, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null","Chloe, Version=4.5.0.0, Culture=neutral, PublicKeyToken=null","System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089","WaterCloud.Code, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null","WaterCloud.SystemTask, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null","ServiceStack.Interfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null","ServiceStack.Redis, Version=3.9.71.0, Culture=neutral, PublicKeyToken=null","ServiceStack.Common, Version=3.9.70.0, Culture=neutral, PublicKeyToken=null","ServiceStack.Text, Version=3.9.71.0, Culture=neutral, PublicKeyToken=null","NewRelic.Agent.Core, Version=6.0.0.0, Culture=neutral, PublicKeyToken=06552fced0b33d87","NewRelic.Agent.Extensions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","Microsoft.GeneratedCode, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null","NewRelic.Core, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Parsing, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.CallStack.AsyncLocal, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.TransactionContext.Asp, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.TransactionContext.Wcf3, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089","NewRelic.Providers.Wrapper.Asp35, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.CastleMonoRail2, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.Couchbase, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.CustomInstrumentation, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.CustomInstrumentationAsync, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.HttpClient, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.HttpWebRequest, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.MongoDb, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.Msmq, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.Mvc3, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.NServiceBus, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.OpenRasta, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.Owin, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.Owin3, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.RabbitMq, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.RestSharp, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.ScriptHandlerFactory, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.ServiceStackRedis, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.Sql, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.SqlAsync, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.StackExchangeRedis, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.Wcf3, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.WebApi1, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.WebApi2, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.WebOptimization, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.WebServices, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","NewRelic.Providers.Wrapper.WrapperUtilities, Version=6.0.0.0, Culture=neutral, PublicKeyToken=f7f92cc5c2dc8743","System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"]],["system.web.compilation.defaultLanguage","vb"],["Physical Processors",1],["Logical Processors",2]]}]
2023-09-11 07:19:09,880 NewRelic DEBUG: Received : {"return_value":{"agent_run_id":"","request_headers_map":{},"max_payload_size_in_bytes":1000000,"entity_guid":"","transaction_segment_terms":null,"transaction_name_rules":null,"url_rules":null,"metric_name_rules":null,"encoding_key":"","cross_process_id":"","trusted_account_ids":null,"web_transactions_apdex":null,"apdex_t":0.5,"collect_analytics_events":false,"collect_custom_events":false,"collect_traces":true,"collect_errors":false,"collect_error_events":false,"collect_span_events":true,"js_agent_loader":"","beacon":"","browser_key":"","application_id":"","error_beacon":"","js_agent_file":"","messages":null,"account_id":"","trusted_account_key":"","primary_application_id":"","sampling_target":10,"sampling_target_period_in_seconds":60,"agent_config":{"transaction_tracer.enabled":null,"transaction_tracer.transaction_threshold":null,"transaction_tracer.stack_trace_threshold":null,"error_collector.enabled":null,"error_collector.ignore_status_codes":null,"error_collector.expected_status_codes":null,"cross_application_tracer.enabled":null},"event_harvest_config":{"report_period_ms":60000,"harvest_limits":{"analytic_event_data":10000,"custom_event_data":30000,"log_event_data":10000,"error_event_data":100,"span_event_data":1000}},"span_event_harvest_config":{"report_period_ms":60,"harvest_limit":1000},"data_report_period":60}}
2023-09-11 07:19:09,924 NewRelic INFO: Agent /LM/W3SVC/2/ROOT:publicwater-web connected to www.datakit.com:9529
2023-09-11 07:19:10,009 NewRelic DEBUG: Invoking "agent_settings" with : [{"apdex_t":0.5,"cross_process_id":"","encoding_key":"","trusted_account_ids":[],"max_stack_trace_lines":80,"using_server_side_config":true,"thread_profiler.enabled":true,"cross_application_tracer.enabled":true,"error_collector.enabled":false,"error_collector.ignore_status_codes":["401","404"],"error_collector.ignore_errors":["System.IO.FileNotFoundException","System.Threading.ThreadAbortException"],"transaction_tracer.stack_trace_threshold":0.5,"transaction_tracer.explain_enabled":false,"transaction_tracer.max_sql_statements":500,"transaction_tracer.max_explain_plans":20,"transaction_tracer.explain_threshold":0.5,"transaction_tracer.transaction_threshold":2.0,"transaction_tracer.record_sql":"obfuscated","slow_sql.enabled":true,"browser_monitoring.auto_instrument":true}]
2023-09-11 07:19:10,019 NewRelic DEBUG: Received : {}
2023-09-11 07:19:10,022 NewRelic INFO: Agent fully connected.

登陆观测云帐号查看数据信息

在这里插入图片描述

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

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

相关文章

释放数据价值这道难题,Smartbi V11有解

《未来简史》预言&#xff1a;数据将成为人们未来的信仰。 未来已来&#xff0c;将至已至。如今&#xff0c;数据所扮演的角色与作用超乎想象。从政府将数据要素列入生产要素之中&#xff0c;到数据驱动型业务场景涌现&#xff0c;企业与组织对于数据及其价值的认可度明显提升…

【皇帝的新装】从不一样的视角看OKR

OKR是“目标和关键成果”&#xff0c;是企业进行目标管理的一个简单有效的系统&#xff0c;能够将目标管理自上而下贯穿到基层&#xff1b;为什么公司和个人都要用OKR&#xff1f; 一、Why 我们分两点来谈“为什么要用OKR”&#xff0c;一个点是“我们公司&#xff08;老板&am…

【Linux】—— 在Linux上进行读写文件操作

前言&#xff1a; 在之前&#xff0c;我已经对进程的相关知识进行了详细的介绍。本期开始&#xff0c;我们将要学习的是关于 “基础I/O”的知识&#xff01;&#xff01;&#xff01; 目录 &#xff08;一&#xff09;C文件接口 &#xff08;二&#xff09;系统文件I/O 1、接…

git中无法使用方向键的问题

windows下使用git命令行执行react脚本安装&#xff0c;发现无法使用上下键来去选中选项。最后只能换成cmd命令执行&#xff0c;发现可以上下移动以选中需要的选项。 bash命令行&#xff1a;移动光标无法移动选项 cmd命令行

为职场注入新活力,中国人民大学与加拿大女王大学金融硕士项目伴你追光而行

在金融职场从业多年的你&#xff0c;是否觉得有点疲惫呢&#xff0c;踏入职场一路过关闯将走到了今天&#xff0c;居于中高层管理的你是否需要注入新的能量呢&#xff0c;中国人民大学与加拿大女王大学金融硕士项目为你带来全新的课程体验&#xff0c;伴你追光而行。 中国人民大…

GitHub项目管理详细教程/git教程【有图有代码】

GitHub项目管理详细教程/git教程【有图有代码】 一、Git 基本操作二、Git 配置1、配置个人的用户名称和电子邮件地址2、查看配置信息 三、Git 工作区、暂存区和版本库四、上传自己的项目到GitHub仓库第一次第二次分支操作 在使用GitHub进行项目管理的之前&#xff0c;首先需要自…

【Java实习评审】对推电影详情模块的功能扩展预期有一定的代码实现

大家好&#xff0c;本篇文章分享【校招VIP】免费商业项目“推电影”第一期电影详情模块Java同学的代码周最佳作品。该同学来【安庆师范大学】“电子信息”专业。 1、本项目是基于年轻人的喜好&#xff0c;更个性的电影推荐网站。筛选各分类的知名电影&#xff0c;并给出推荐理…

vue3学习源码笔记(小白入门系列)------ 重点!响应式原理 代码逐行分析

目录 备注响应式数据创建ref 和 reactive 核心 作用第一轮的 依赖收集 发生时机setup 阶段 去更改了 响应式数据 会发生依赖收集吗 派发更新派发更新是什么时候 触发的&#xff1f;扩展&#xff1a; setup阶段 响应式数据被修改 会触发组件更新吗 vue 是如何根据派发更新来触发…

第26章_瑞萨MCU零基础入门系列教程之独立看门狗定时器-IWDT

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

《经营者集中反垄断合规指引》发布,合规管理平台助力企业合规建设

近日&#xff0c;《经营者集中反垄断合规指引》的发布为企业合规建设提供了更具体和明确的指导。在这一新形势下&#xff0c;道本科技智慧合规管理平台作为一项强大的工具&#xff0c;成为企业实现合规建设的重要支持。本文将重点介绍智慧合规管理平台&#xff0c;探讨其对企业…

LeetCode算法心得——和可被 K 整除的子数组(前缀和+HashMap)

大家好&#xff0c;我是晴天学长&#xff0c;同余定理的应用&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。 1) .和可被 K 整除的子数组 题目描述 给定一个整数数组 A&#xff0c;返回其中元素之和可被 K 整除的&#xff08;连续、非空&#xff0…

如何在matlab绘图的标题中添加变量?变量的格式化字符串输出浅析

文章目录 matlab的格式化输出控制符字段宽度、精度和对齐方式的控制matlab的格式化输出总结 matlab的格式化输出控制符 Matlab在画图的时候&#xff0c;采用title函数可以增加标题&#xff0c;该函数的输入是一个字符串&#xff0c;有时候我们想在字符串中添加一些变量&#x…

uni-app:标签中对数据进行判断,看数据前中后是否含有需要的字符startsWith(),endsWith(),includes()

效果图 核心代码 判断数据是否存在并且此数据是否以‘-’开头 <image v-if"line && line.startsWith(-)" :src"img1" alt""></image> 判断数据是否存在并且此数据是不是以‘ing’结尾 <image v-if"line &&…

代码块的介绍

代码块 局部代码块 局部代码块&#xff0c;用大括号进行圈着&#xff0c;然后控制这个变量的内存占用时间&#xff0c;用完这个变量我们就回收&#xff0c;不占用多余空间。但是随着这个电脑的技术的发展&#xff0c;几个变量的定义对于内存那么大的电脑影响已经不大了。 构…

ubuntu 安装截图软件 flameshot

linux安装flameshot 1、去github下载对应deb版本 Releases flameshot-org/flameshot GitHub 2、先更新一次依赖 sudo apt-get install -f 3、安装依赖 # Compile-time apt install g cmake build-essential qt5-default qttools5-dev-tools libqt5svg5-dev qttools5-dev…

[Qt]控件

文章摘于 爱编程的大丙 文章目录 1. 按钮类型控件1.1 按钮基类 QAbstractButton1.1.1 标题和图标1.1.2 按钮的 Check 属性1.1.3 信号1.1.4 槽函数 1.2 QPushButton1.2.1 常用API1.2.2 按钮的使用 1.3 QToolButton1.3.1 常用API1.3.2 按钮的使用 1.4 QRadioButton1.4.1 常用API…

高压电缆护层接地环流及温度在线监测系统

高压电缆的金属护层是电缆的重要组成部分&#xff0c;当缆芯通过电流时&#xff0c;会在金属护层上产生环流&#xff0c;外护套的绝缘状态差、接地不良、金属护层接地方式不正确等等都会引起护套环流异常现象&#xff0c;严重威胁电缆运行安全。 当电缆金属护层环流出现异常时…

FFmpeg入门之Windows/Linux下FFmpeg源码编译

1.源码下载: git clone https://github.com/FFmpeg/FFmpeg.git windows : macos: ubuntu: 2.编译FFmpeg CompilationGuide – FFmpeg windows: 1.下载yasm并安装 : Download - The Yasm Modular Assembler Project 下载后复制到c:/windows 2.下载SDL 3.下载H264/265源码 git…

对缓存穿透、雪崩、击穿的理解,引入分布式锁

缓存实战 1、缓存穿透 先来了解一个小图&#xff0c; 1.1 概念&#xff1a; 缓存穿透指一个一定不存在的数据&#xff0c;由于缓存未命中这条数据&#xff0c;就会去查询数据库&#xff0c;数据库也没有这条数据&#xff0c;所以返回结果是 null。如果每次查询都走数据库&a…

Vue中的动态 Class Style

动态 Class & Style 我们平时可以直接给元素设置静态的 Class 或者是 Style&#xff0c;但是这种方式会带来很多限制&#xff0c;假设我想要内容动态的改变 Class 或者是 Style&#xff0c;通过原生的方式要通过 JavaScript 频繁操作 dom 才能够实现。而在 Vue 中我们无需…