当前位置: 首页 > news >正文

GO语言:Worker Pools线程池、Select语句、Metex互斥锁详细示例教程

目录标题

  • 一、Buffered Channels and Worker Pools
    • 1. Goroutine and Channel Example 线程和通道示例
    • 2. Deadlock 死锁
    • 3. Closing buffered channels 关闭通道
    • 4. Length vs Capacity 长度和容量
    • 5. WaitGroup
    • 6. Worker Pool Implementation 线程池
  • 二、Select
    • 1. Example
    • 2. Default case 默认选择
    • 3. Deadlock and default case 死锁与默认选择
    • 4. Random selection 随机选择
  • 三、Mutex
    • 1. Program with a race condition 无锁示例
    • 2. Solving the race condition using a mutex 互斥锁解决方案
    • 3. Solving the race condition using channel 通道解决方案

一、Buffered Channels and Worker Pools

1. Goroutine and Channel Example 线程和通道示例

          package mainimport ("fmt""time")func write(ch chan int) {for i := 0; i < 5; i++ {ch <- i // 向通道写入 0-4		因为通道容量是2 需要读取数据才会进行下一步 否则一直在阻塞态fmt.Println("Successfully wrote", i, "to ch")}close(ch) // 关闭通道}func main() {ch := make(chan int, 2) // 创建一个容量为2的缓冲通道  通道容量大小会导致阻塞go write(ch)time.Sleep(2 * time.Second) // 模拟时间间隔for v := range ch {fmt.Println("Read value", v, "from ch") // 读取数据 goroutine继续运行time.Sleep(2 * time.Second)}// 并发的 goroutine 和通道的阻塞机制,write() 函数和 range ch 循环可以交替执行,使得循环不会一次执行完毕,而是在读取完所有值之后等待新的值出现,再次进行循环迭代。}// Successfully wrote 0 to ch// Successfully wrote 1 to ch// Read value 0 from ch// Successfully wrote 2 to ch// Read value 1 from ch// Successfully wrote 3 to ch// Read value 2 from ch// Successfully wrote 4 to ch// Read value 3 from ch// Read value 4 from ch

2. Deadlock 死锁

         package mainimport (  "fmt")func main() {  ch := make(chan string, 2)ch <- "naveen"ch <- "paul"ch <- "steve"			// 其容量是2 但是写入三个 导致死锁fmt.Println(<-ch)fmt.Println(<-ch)}// fatal error: all goroutines are asleep - deadlock!// goroutine 1 [chan send]:  // main.main()  //     /tmp/sandbox091448810/prog.go:11 +0x8d

3. Closing buffered channels 关闭通道

         ch := make(chan int, 5)ch <- 6ch <- 9close(ch)n, open := <-chfmt.Printf("Received: %d, open: %t\n", n, open)n, open = <-chfmt.Printf("Received: %d, open: %t\n", n, open)n, open = <-chfmt.Printf("Received: %d, open: %t\n", n, open)// Received: 5, open: true  // Received: 6, open: true  // Received: 0, open: false  

4. Length vs Capacity 长度和容量

        ch := make(chan string, 3)ch <- "Like"ch <- "LiangXiaoQing"fmt.Println("capacity is", cap(ch))fmt.Println("length is", len(ch)) // 通道写入的个数fmt.Println("read value", <-ch)fmt.Println("new length is", len(ch))fmt.Println("read value", <-ch)fmt.Println("new length is", len(ch))// capacity is 3// length is 2// read value Like// new length is 1// read value LiangXiaoQing// new length is 0

5. WaitGroup

         // Add() 添加任务// Done() 通知wait完成任务// Wait() 阻塞等待所有任务完成package mainimport (  "fmt""sync""time")func process(i int, wg *sync.WaitGroup) {fmt.Println("started Goroutine", i)   // 3.打印 Goroutine 开始执行的信息time.Sleep(2 * time.Second)           // 4.暂停 2 秒,模拟任务执行时间fmt.Printf("Goroutine %d ended\n", i) // 5.打印 Goroutine 执行结束的信息wg.Done()                             // 6.通知等待组任务已完成}func main() {no := 3var wg sync.WaitGroupfor i := 0; i < no; i++ {wg.Add(1)          // 1.循环三次添加三次任务go process(i, &wg) // 2.每次传入当前i 0-2 及wg内存地址}wg.Wait() 	// 7.等待所有任务完成fmt.Println("All go routines finished executing")}// started Goroutine 1// started Goroutine 0// started Goroutine 2// Goroutine 2 ended// Goroutine 0 ended// Goroutine 1 ended// All go routines finished executing

6. Worker Pool Implementation 线程池

        type Job struct { // Job 结构表示一个具有 ID 和随机数的作业。id       intrandomno int}type Result struct { // Result 结构表示作业的结果,包括作业本身和数字各位数之和。job         Jobsumofdigits int}var jobs = make(chan Job, 10)       // jobs 是一个带有缓冲区大小为 10 的通道,用于传递作业。var results = make(chan Result, 10) // results 是一个带有缓冲区大小为 10 的通道,用于传递结果。func digits(number int) int { // digits 函数计算一个整数的各位数之和。sum := 0no := numberfor no != 0 { // 循环中,通过取模和除法操作,将数字的各位数相加。digit := no % 10sum += digitno /= 10}time.Sleep(2 * time.Second) // time.Sleep(2 * time.Second) 使函数暂停 2 秒钟,模拟一个耗时操作。return sum                  // 返回各位数之和。}func worker(wg *sync.WaitGroup) { // worker 函数是一个工作协程,用于处理作业。for job := range jobs { // 使用 range 循环从 jobs 通道接收作业。output := Result{job, digits(job.randomno)} // 通过调用 digits 函数计算作业的各位数之和。 将作业和结果封装为 Result 结构results <- output                           // 并发送到 results 通道。}wg.Done() // wg.Done() 声明一个任务已完成。}func createWorkerPool(noOfWorkers int) { // createWorkerPool 函数创建一个工作池,用于并发处理作业。var wg sync.WaitGroup              // 创建一个 sync.WaitGroup 对象 wg,用于等待所有工作协程完成。for i := 0; i < noOfWorkers; i++ { // 使用 for 循环创建指定数量的工作协程。wg.Add(1)      // 添加任务go worker(&wg) // 每个工作协程调用 worker 函数,并传递 &wg 作为参数。}wg.Wait()      // wg.Wait() 等待所有工作协程完成。close(results) // 关闭 results 通道,表示所有结果已经发送完毕。}func allocate(noOfJobs int) { // allocate 函数用于生成指定数量的作业并发送到 jobs 通道。for i := 0; i < noOfJobs; i++ { //  使用 for 循环创建指定数量的作业。randomno := rand.Intn(999) // 生成一个随机数 randomno,范围在 0 到 999 之间。job := Job{i, randomno}    // 创建一个 Job 结构体 jobjobs <- job                // 并将其发送到 jobs 通道。}close(jobs) // 关闭 jobs 通道,表示所有作业已经发送完毕。}func result(done chan bool) { // result 函数用于接收并处理结果。for result := range results { // 使用 range 循环从 results 通道接收结果。fmt.Printf("Job id %d, input random no %d , sum of digits %d\n", result.job.id, result.job.randomno, result.sumofdigits)}done <- true}func main() {startTime := time.Now()noOfJobs := 10go allocate(noOfJobs) 	// 传入job id 0-99 random 0-999的随机数字	Job id 1, input random no 636done := make(chan bool)go result(done)		// result线程一直等待results有值 如果有值则打印信息 传入true结束通道noOfWorkers := 10	// 控制线程池数量 createWorkerPool(noOfWorkers)	// 把&wg sync.WaitGroup 类型变量的指针 传给 results<-done	// 关闭通道endTime := time.Now()diff := endTime.Sub(startTime)	// 计算时间差fmt.Println("total time taken", diff.Seconds(), "seconds")}// Job id 1, input random no 636, sum of digits 15  // Job id 0, input random no 878, sum of digits 23  // Job id 9, input random no 150, sum of digits 6  // ...// total time taken  20.01081009 seconds  

二、Select

1. Example

        package mainimport ("fmt""time")func server1(ch chan string) {time.Sleep(9 * time.Second)ch <- "From Server 1"}func server2(ch chan string) {time.Sleep(6 * time.Second)ch <- "From server 2"}func main() {output1 := make(chan string)output2 := make(chan string)go server1(output1)go server2(output2)select { 	// 使用select语句接收多个通道消息,select会接收最先准备好的通道接收操作case s1 := <-output1:fmt.Println(s1)case s2 := <-output2:fmt.Println(s2)}}// From server 2

2. Default case 默认选择

        func process(ch chan string) {time.Sleep(1 * time.Second)ch <- "Process Successful"}func main() {ch := make(chan string)go process(ch)for { 		// for循环一直循环 每次循环休息1秒 直到v有值 主要看上面process函数睡眠睡觉 否则一直输出default的值time.Sleep(1000 * time.Microsecond)select {case v := <-ch:fmt.Println("Received value:", v)returndefault:fmt.Println("No value Received")}}// ....// No value Received//No value Received//No value Received//No value Received//Received value: Process Successful

3. Deadlock and default case 死锁与默认选择

        func main() {ch := make(chan string)select {case v := <-ch:fmt.Println("Received value", v)default:fmt.Println("Default case executed")}}// Default case executed

4. Random selection 随机选择

        package mainimport (  "fmt""time")func server1(ch chan string) {  ch <- "from server1"}func server2(ch chan string) {  ch <- "from server2"}func main() {  output1 := make(chan string)output2 := make(chan string)go server1(output1)go server2(output2)time.Sleep(1 * time.Second)select {		// 使用select语句接收多个通道消息,select会接收最先准备好的通道接收操作case s1 := <-output1:fmt.Println(s1)case s2 := <-output2:fmt.Println(s2)}}// From Server 1

三、Mutex

1. Program with a race condition 无锁示例

        package mainimport ("fmt""sync")var x = 0func increment(wg *sync.WaitGroup) {x = x + 1wg.Done()}func main() {var w sync.WaitGroupfor i := 0; i < 1000; i++ {w.Add(1)go increment(&w)}w.Wait()fmt.Println("Final value of X", x)}// Final value of X 987		最终答案应该是1000 因为多线程全部都在操作x 导致有些操作未成功

2. Solving the race condition using a mutex 互斥锁解决方案

        package mainimport ("fmt""sync")var x = 0func increment(wg *sync.WaitGroup, m *sync.Mutex) {m.Lock() // 上锁x = x + 1m.Unlock() // 释放锁  只有拿到锁才能操作x 否则一直等待wg.Done()}func main() {var w sync.WaitGroupvar m sync.Mutexfor i := 0; i < 1000; i++ {w.Add(1)go increment(&w, &m)}w.Wait()fmt.Println("Final value of X", x)}// Final value of X 1000

3. Solving the race condition using channel 通道解决方案

        package main  import (  "fmt""sync")var x  = 0  func increment(wg *sync.WaitGroup, ch chan bool) {  ch <- truex = x + 1<- chwg.Done()   }func main() {  var w sync.WaitGroupch := make(chan bool, 1)	// 通道容量 1	所以每次都需要上一个结束 下一个才能进行操作for i := 0; i < 1000; i++ {w.Add(1)        go increment(&w, ch)}w.Wait()fmt.Println("final value of x", x)}// Final value of x 1000

技术小白记录学习过程,有错误或不解的地方请指出,如果这篇文章对你有所帮助请点点赞收藏+关注谢谢支持 !!!

相关文章:

GO语言:Worker Pools线程池、Select语句、Metex互斥锁详细示例教程

目录标题 一、Buffered Channels and Worker Pools1. Goroutine and Channel Example 线程和通道示例2. Deadlock 死锁3. Closing buffered channels 关闭通道4. Length vs Capacity 长度和容量5. WaitGroup6. Worker Pool Implementation 线程池 二、Select1. Example2. Defau…...

vue ui 创建项目没有反应

问题 cmd中输入 vue ui 没有反应 解决办法 vue ui命令需要vue3.0以上的版本才可以 1、查看当前版本 vue --version vue版本在3.0以下是没有ui命令的 2、查看版本所拥有的命令 vue -h 3、卸载之前版本的vue npm uninstall vue-cli -g 卸载完成&#xff0c;检查是否已经…...

go语言中channel类型

目录 一、什么是channel 二、为什么要有channel 三、channel操作使用 初始化 操作 单向channel 双向channel&#xff0c;可读可写 四、close下什么场景会出现panic 五、总结 一、什么是channel Channels are a typed conduit through which you can send and receive …...

基于STM32F1的电子罗盘HMC5883L角度测量

基于STM32F1的电子罗盘HMC5883L角度测量 参考 1. HMC5883L模块 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Axqqv48y-1692885921487)(…\img\HMC5883L.png)] 型号&#xff1a;GY-271使用芯片&#xff1a;HMCL5883L供电电源&#xff1a;3-5V通…...

Oracle解锁表、包、用户、杀会话、停job

Oracle解锁表、包、用户、杀会话、停job 一、创建包tzq_server_pkg二、授权给需要使用的用户log三、解锁表&#xff1a;执行存过unlock_table(schema_name, table_name)四、解锁包&#xff1a;执行存过unlock_package(schema_name, pkg_name)五、解锁用户&#xff1a;执行存过u…...

软考高级系统架构设计师系列论文九十九:论软件开发平台的选择和应用

软考高级系统架构设计师系列论文九十九:论软件开发平台的选择和应用 一、相关知识点二、摘要三、正文四、总结一、相关知识点 软考高级系统架构设计师系列之:面向构件的软件设计,构件平台与典型架构二、摘要 本文从一个行业MIS系统的开发实践,讨论了软件开发平台的选择和应…...

Redis Pub/Sub 指南

Redis 不仅仅是一个数据库&#xff0c;还可以作为支持发布和订阅&#xff08;Pub/Sub&#xff09;操作的消息代理。本文将使用 Navicat for Redis 简要概述 Redis 的 Pub/Sub 功能。 关于发布或订阅消息范式 Pub/Sub 是一种模式&#xff0c;发送者&#xff08;广播者&#xf…...

Nest(2):Nest 应用目录结构和脚手架命令介绍

Nest 应用目录结构和脚手架命令介绍 在正式使用 NestJS 进行开发之前&#xff0c;先来了解下 Nest 应用的目录结构&#xff0c;和一些常用的脚本命令。 工程目录 下面是使用 nest/cli 创建的 Nest 项目的目录结构。 上篇文章中介绍了 src 目录以及目录下各个文件的作用。下面…...

【嵌入式】MKV31F512VLL12 微控制器 (MCU) 、Cyclone® IV E EP4CE10E22I8LN,FPGA-现场可编程门阵列芯片

1、MKV31F512VLL12 微控制器 (MCU) 是适用于BLDC、PMSM和ACIM电机控制应用的高性能解决方案。这些MCU采用运行频率为100MHz/120MHz、带数字信号处理 (DSP) 和浮点单元 (FPU) 的ARM Cortex-M4内核。KV3x MCU配备两个采样率高达1.2MS/s的16位ADC、多个控制定时器以及512KB闪存。 …...

矢量调制分析基础

前言 本文介绍VSA 的矢量调制分析和数字调制分析测量能力。某些扫频调谐频谱分析仪也能通过使用另外的数字无线专用软件来提供数字调制分析。然而&#xff0c;VSA 通常在调制格式和解调算法配置等方面提供更大的测量灵活性&#xff0c;并提供更多的数据结果和轨迹轨迹显示。本…...

ensp-Ipv6配置配置

ensp-Ipv6配置配置 &#x1f4ce;ipv6.zip&#x1f4ce;Ipv6 网络.docx...

java八股文面试[java基础]—— hashCode 与 equals 区别 == 与 equals的区别

两个对象的hashCode()相同时&#xff0c;equals()相等吗&#xff1f;_两个对象的hashcode一样,equal一样么_不想当个程序员的博客-CSDN博客 equals()&#xff1a;比较的是非基本类型的数据的引用地址&#xff08;即内存地址&#xff09;是否相同&#xff0c;但是对于重写equal…...

Dubbo之PojoUtils源码分析

功能概述 PojoUtils是一个工具类&#xff0c;能够进行深度遍历&#xff0c;将简单类型与复杂类型的对象进行转换&#xff0c;在泛化调用时用到&#xff08;在泛化调用中&#xff0c;主要将Pojo对象与Map对象进行相互转换&#xff09; 功能分析 核心类PojoUtils分析 主要成员…...

【C++】—— C++11新特性之 “右值引用和移动语义”

前言&#xff1a; 本期&#xff0c;我们将要的介绍有关 C右值引用 的相关知识。对于本期知识内容&#xff0c;大家是必须要能够掌握的&#xff0c;在面试中是属于重点考察对象。 目录 &#xff08;一&#xff09;左值引用和右值引用 1、什么是左值&#xff1f;什么是左值引用…...

谈一谈redis脑裂

什么是redis脑裂 &#xff08;1&#xff09;一主多从架构中&#xff0c;主节点与客户端通信正常&#xff0c;主节点与哨兵、从节点连接异常&#xff0c;客户端仍正常写入数据 &#xff08;2&#xff09;哨兵判定主节点下线&#xff0c;重新选主 &#xff08;3&#xff09;原主…...

基于原生Servlet使用模板引擎Thymeleaf访问界面

我们常在Spring Boot项目中使用Thymeleaf模板引擎,今天突发奇想&#xff0c;尝试原生Servlet访问&#xff01; 说做就做 搭建完整的WEB项目 其中的大部分依赖都是后续报错 追加进来的 导入依赖 thymeleaf-3.0.11.RELEASE.jar 第一次访问 访问地址: http://localhost:8080…...

【C语言】15-函数-1

1. 初步认识函数 通过前几章的学习,已经可以编写一些简单的 C 语言程序了,但是如果程序的功能比较多,规模比较大,把所有的程序代码都写在一个主函数(main函数)中,就会使主函数变得庞杂、头绪不清,使阅读和维护程序变得困难。此外,有时程序中要多次实现某一功能就需要…...

08-信息收集-架构、搭建、WAF等

信息收集-架构、搭建、WAF等 信息收集-架构、搭建、WAF等一、前言说明二、CMS识别技术三、源码获取技术四、架构信息获取技术五、站点搭建分析1、搭建习惯-目录型站点2、搭建习惯-端口类站点3、搭建习惯-子域名站点4、搭建习惯-类似域名站点5、搭建习惯-旁注&#xff0c;c段站点…...

Qt --- 显示相关设置 窗口属性等

主界面&#xff0c;窗口 最小化 最大化 关闭按钮、显示状态自定义&#xff1a; setWindowFlags(Qt::CustomizeWindowHint); setWindowFlags(Qt::WindowCloseButtonHint); //只要关闭按钮 setWindowFlags(Qt::WindowFlags type) Qt::FrameWindowHint:没有边框的窗口 Qt::Window…...

使用小程序实现左侧菜单,右侧列表双向联动效果

目录 引言理解双向联动效果的重要性scrollview属性介绍实现左侧菜单数据准备渲染菜单列表监听菜单点击事件实现右侧列表数据结构设计初始数据渲染监听列表滚动事件左侧菜单与右侧列表联动获取当前滚动位置计算对应菜单项联动效果优化用户体验考虑平滑滚动效果菜单高亮状态...

selenium中处理验证码问题

验证码 基本作用&#xff1a;可以实现当前访问页面的数据安全性、还可以减少用户的并发数&#xff1b; 类型&#xff1a;1、纯数字、纯字母&#xff1b;2、汉字组合&#xff1b;3、数学运算题&#xff1b;4、滑动&#xff1b;5、图片&#xff08;选不同的、选相同、成语顺序&…...

EMR电子病历系统 SaaS电子病历编辑器源码 电子病历模板编辑器

EMR&#xff08;Electronic Medical Record&#xff09;指的是电子病历。它是一种基于电子文档的个人医疗记录&#xff0c;可以包括病人的病史、诊断、治疗方案、药物处方、检查报告和护理计划等信息。EMR采用计算机化的方式来存储、管理和共享这些信息&#xff0c;以便医生和医…...

一些自定义hooks

文章目录 1、点击框外隐藏弹窗hook 1、点击框外隐藏弹窗hook **描述&#xff1a;**有一个需要自己封装弹窗的组件&#xff0c;实现点击弹窗框外时隐藏弹窗 代码&#xff1a; import { useEffect } from “react”; // 点击框外hooks import { useEffect } from "react&q…...

基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法

文献计量学是指用数学和统计学的方法&#xff0c;定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体&#xff0c;注重量化的综合性知识体系。特别是&#xff0c;信息可视化技术手段和方法的运用&#xff0c;可直观的展示主题的研究发展历程、研究现状、研究…...

lEC 61068-2-14_2023环境试验.第2-14部分:试验.试验N:温度变化, 最新版发布

https://download.csdn.net/download/m0_67373485/88251313 lEC 61068-2-14_2023环境试验.第2-14部分:试验.试验N:温度变化 A change of temperature test is intended to determine the effect on the specimen of a changeof temperature or a succession of changes of tem…...

CFDEM学习笔记

本文用来记录自己学习CFDEM的笔记。 资料总结 虚拟机&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1MPMTJQfl76mW0H5bbT_rAg 提取码&#xff1a;rqli 开机密码&#xff1a;530944988 知乎博客&#xff1a;作者说明了如何关闭颗粒碰撞计算来达到提升计算速度。 Githu…...

SpringBoot入门篇1 - 简介和工程创建

目录 SpringBoot是由Pivotal团队提供的全新框架&#xff0c; 其设计目的是用来简化Spring应用的初始搭建以及开发过程。 1.创建入门工程案例 ①创建新模块&#xff0c;选择Spring初始化&#xff0c;并配置模块相关基础信息 ②开发控制器类 controller/BookController.jav…...

MyBatis-Plus updateById不更新null值

文章目录 前言方式一 调整全局的验证策略方式二 调整字段验证注解方式三 使用 UpdateWrapper 前言 在 MyBatis-Plus 中&#xff0c;使用updateById&#xff0c;null字段并不会更新&#xff0c;其实是和更新的策略有关&#xff0c;当然&#xff0c;也有插入策略&#xff0c;本文…...

用pytorch实现AlexNet

AlexNet经典网络由Alex Krizhevsky、Hinton等人在2012年提出&#xff0c;发表在NIPS&#xff0c;论文名为《ImageNet Classification with Deep Convolutional Neural Networks》&#xff0c;论文见&#xff1a;http://www.cs.toronto.edu/~hinton/absps/imagenet.pdf &#xf…...

LeetCode560.和为k的子数组

这道题我用的是暴力法&#xff0c;当然也是不断的提交不断发现问题改出来的&#xff0c;比如我之前是算到和大于目标值就break&#xff0c;其实不行因为后面还可以有负数&#xff0c;我把break删了。后面和为目标之后就答案1然后break然后下一次遍历&#xff0c;测试用例中就出…...

echarts 的dataZoom滑块两端文字被遮挡

问题&#xff1a; 期望&#xff1a; 解决方案&#xff1a; 1&#xff1a;调整宽度&#xff08;4版本的没有width属性&#xff09; 2. 参考&#xff1a;echarts图标设置dataZoom拖拽时间轴时自动调整两侧文字的位置_datazoom 位置_乌栖曲的博客-CSDN博客 设置文字的定位 cons…...

MongoDB基本使用

在 MongoDB 中我们可以使用use命令来创建数据库&#xff0c;如果该数据库不存在&#xff0c;则会创建一个新的数据库&#xff0c;如果该数据库已经存在&#xff0c;则将切换到该数据库。使用use命令创建数据库的语法格式如下&#xff1a; --use database_name use my_db1;数据…...

C++ 中的左值(Lvalues)和右值(Rvalues)

C 中有两种类型的表达式&#xff1a; 左值&#xff08;lvalue&#xff09;&#xff1a;左值参数是可被引用的数据对象&#xff0c;例如&#xff0c;变量、数组元素、结构成员、引用和解除引用的指针都是左值。非左值包括字面常量&#xff08;用引号起的字符串除外&#xff0c;…...

html流光按钮

出处bilibili猫咪爱狗 <!DOCTYPE html> <html><head><style>body {/*内容居中&#xff0c;背景色*/height: 100vh;display: flex;justify-content: center; align-items: center;background-color: #000;}a { /*水平垂直居中*/position: re…...

HAProxy+nginx搭建负载均衡群集

目录 一、常见的Web集群调度器 二、HAProxy群集介绍 1、Haproxy的特性 : 2、Haproxy常用的调度算法 ① 轮询调度&#xff08;Round Robin&#xff09; ② 最小连接数&#xff08;Least Connections&#xff09; ③ 基于来源访问调度算法&#xff08;Source Hashing&am…...

logback-spring.xml 的配置及详解(直接复制粘贴可用)

logback-spring.xml 的配置及详解 一、注意实现二、配置及详解 一、注意实现 logback-spring.xml 中有三处需要根据实际业务进行修改&#xff0c;直接查找“&#xff08;根据业务修改&#xff09;”即可进行定位。 如果不想修改&#xff0c;直接复制粘贴到自己系统运行也可以&…...

C语言易错点整理

前言&#xff1a; 本文涵盖了博主在平常写C语言题目时经常犯的一些错误&#xff0c;在这里帮大家整理出来&#xff0c;一些易错点会帮大家标识出来&#xff0c;希望大家看完这篇文章后有所得&#xff0c;引以为戒~ 一、 题目&#xff1a; 解答&#xff1a; 首先在这个程序中…...

60.每日一练:回文数(力扣)

目录 问题描述 代码解决以及思想 解法&#xff08;一&#xff09; 知识点 解法&#xff08;二&#xff09; 问题描述 代码解决以及思想 解法&#xff08;一&#xff09; class Solution { public:bool isPalindrome(int x) {string arr to_string(x); // 将整数转换为…...

算法通关村第5关【青铜】| Hash和队列的特征

1.Hash基础 &#xff08;1&#xff09;基础 哈希也称为散列&#xff0c;通过算法变成固定长度的输出值&#xff0c;存入对应的位置 例如这个算法为取模算法&#xff0c;indexnumber 模 7 存入1到15 &#xff08;2&#xff09;碰撞处理 当多个元素映射到同一位置上时就产生…...

C++:函数

函数参数的传递机制 C的每个程序至少有一个函数&#xff0c;即主函数main()&#xff0c;函数也是类的方法的实现手段。C的函数包括两类&#xff1a;预定于函数和用户自定义函数。 函数的定义格式为&#xff1a; <返回值类型><函数名>(<参数列表>) <函…...

Linux网络编程:libevent事件通知库

文章目录&#xff1a; 一&#xff1a;libevent库 二&#xff1a;libevent框架 1.常规事件event 1.1 创建事件event&#xff08;event_new&#xff09; 1.2 添加事件到 event_base&#xff08;event_add&#xff09; 1.3 从event_base上摘下事件&#xff08;event_del&a…...

java.lang.reflect.InvocationTargetException:null报未知异常

在项目上线过程中&#xff0c;突然出现大量异常信息&#xff0c;堆栈信息如下&#xff1a; java.lang.reflect.InvocationTargetException: null at jdk .internal.reflect.GeneratedMethodAccessor792 .invoke(Unknown Source) ~[?:?] at jdk.internal.reflect.DelegatingM…...

MySQL高级篇——MySQL架构篇1(Linux下MySQL8的安装与使用)

目录 0 安装前0.1 Linux系统及工具的准备0.2 查看是否安装过MySQL0.3 MySQL的卸载 1 MySQL8的Linux版安装1.1 MySQL的4大版本1.2 下载MySQL指定版本1.3 CentOS7下检查MySQL依赖1.4 CentOS7下MySQL安装过程 2 MySQL登录2.1 首次登录2.2 修改密码2.3 设置远程登录 3 MySQL 8 的密…...

解决 go mod tidy 加载模块超时

如果go mod tidy 加载模块超时 解决方法 修改GOPROXY: 查看go环境相关信息&#xff1a; go envgo env -w GOPROXYhttps://goproxy.cn...

金融市场中的机器学习;快手推出自研语言模型“快意”

&#x1f989; AI新闻 &#x1f680; OpenAI可能面临《纽约时报》的起诉&#xff0c;侵犯知识产权引发争议 摘要&#xff1a;OpenAI使用《纽约时报》的文章和图片来训练AI模型&#xff0c;违反了《纽约时报》的服务条款&#xff0c;可能面临巨大损失。此前&#xff0c;也有其…...

【面试刷题】——什么是深拷贝和浅拷贝?

深拷贝&#xff08;Deep Copy&#xff09;和浅拷贝&#xff08;Shallow Copy&#xff09;是在编程中用来描述对象拷贝的两个概念&#xff0c;特别是在涉及对象包含其他对象&#xff08;如嵌套数据结构、指针等&#xff09;的情况下。 浅拷贝&#xff08;Shallow Copy&#xff…...

物联网(IoT)安全挑战与解决方案: 分析物联网设备面临的安全威胁,以及如何设计和管理安全的IoT生态系统

第一章&#xff1a;引言 随着科技的飞速发展&#xff0c;物联网&#xff08;IoT&#xff09;作为连接世界的桥梁&#xff0c;已经成为现代社会不可或缺的一部分。然而&#xff0c;随着IoT设备数量的不断增加&#xff0c;其安全问题也日益显著。本文将深入探讨IoT领域面临的安全…...

Ubuntu 22.04.3 LTS 维护更新发布

近日消息&#xff0c;Canonical 今天发布了代号为 Jammy Jellyfish、长期支持的 Ubuntu 22.04 第 3 个维护版本更新&#xff0c;距离上个版本相隔 6 周时间。 Ubuntu 22.04.3 LTS 最大的亮点在于内核升级到 Linux Kernel 6.2&#xff0c;此外 Mesa 图形堆栈也升级到 23.0.4 版…...

平安健康,找到了医疗服务的价值密码

健康是人类的永恒需求&#xff0c;围绕医疗和健康服务衍生的产业&#xff0c;却苦于无法和用户建立足够紧密、长期的联系。由此&#xff0c;也不得不面临价值从何而来的问题。 作为医疗服务领域的代表性企业&#xff0c;平安健康医疗科技有限公司&#xff08;股票简称“平安好…...

❤ vue 使用原生组件

❤ vue 使用原生组件 1、做一个input输入框验证开始 ① 想让我们的input输入框类型为时间&#xff0c;只需要为我们的输入框简单的加一个类型的type即可 <input type"date" id"birthday" name"birthday" placeholder"年/月/日"&…...