- Java虚拟机(JVM)深入解析
I~Lucky
jvm
Java虚拟机(JVM)是Java程序运行的核心环境,它负责将Java字节码转换为机器码并执行。本文将深入解析JVM的运行时数据区、类加载机制以及执行引擎,帮助读者更好地理解JVM的工作原理。一、运行时数据区(RuntimeDataArea)运行时数据区是JVM在执行Java程序时分配的内存区域,主要包括以下几个部分:1.方法区(MethodArea)方法区用于存储类信息、常量、静态变量以及即时编
- 设置和获取时区
yiwang103
服务器linux算法物联网c++
1.设置时区tzset函数可以根据环境变量TZ设置时区信息,并更新全局变量timezone和daylight。这些变量可以用来获取时区偏移量和是否使用夏令时。#includeintmain(){//SettheTZenvironmentvariablesetenv("TZ","PST8PDT",1);tzset();//Getthetimezoneoffsetexternlonginttimezo
- Linux性能优化CPU篇之平均负载
linux
首先使用uptime命令查看对应平均负载.平均负载是指单位时间内,系统处于可运行状态和不可中断状态进程数所谓的可运行状态的进程是指,正在使用CPU或者正在等待的CPU进程数量,也就是我们常用的ps命令,处于R状态。不可中断状态的进程是正在处于内核关键流程中的进程,注意这些进程不可以被打断的,当我们向一个磁盘写入一个文件的时候,它是不可以被打断的。那么平均复杂怎么样才算好呢?平均负载最理想的情况是等
- git连接GitHub的超时问题
枯树老斑鸠
gitgithub
在进行GitHub的连接测试,以及进行gitpull的时候,出现报错ssh:connecttohostgithub.comport22:Connectiontimedout原因是ssh阻塞了22端口,可以通过修改配置文件,不走22端口,改走其他端口,就能解决这个问题。一种是在用户主目录下.ssh/中添加配置文件。cd~/.ssh/touchconfig写入下列内容:Hostgithub.comUs
- python安装包提示Requirement already satisfied
可爱的的编辑人员
配置pythonnumpy开发语言
python安装cnocr提示Requirementalreadysatisfied错误信息如下:Requirementalreadysatisfied:pyreadline3inc:\python310\lib\site-packages(fromhumanfriendly>=9.1->coloredlogs->onnxruntime->cnocr)(3.4.1)Installingcollec
- 解决 GitHub 端口连接超时
御风牧云_
Android开发环境配置
一,前言GitHub端口默认使用的本机端口为22,某些情况下如果此端口被占用,就会导致GitHub连接超时错误。ssh:connecttohostgithub.comport22:ConnectiontimedoutWindows下可以通过下面的命令,来查看端口占用情况netstat-ano二,解决方案可以通过SSH命令临时修改端口号为443,测试是否可以连接到GitHubssh-T-p443gi
- 利用python向modbus RTU设备(RS485串口通信)发送16进制指令
无名小白12138
python开发语言
importserialimporttime#配置串口通信参数serial_port='COM1'baudrate=9600#创建串口连接ser=serial.Serial(port=serial_port,baudrate=baudrate)#检查串口是否已打开ifser.is_open:try:hex_data=bytes.fromhex('01100010000102000564C3')se
- Flink 常见面试题
知否&知否
flink大数据kafka
1、Flink的四大特征(基石)checkpoint:基于Chandy-Lamport算法,实现了分布式一致性快照,提供了一致性的语义。State:丰富的StateAPI。ValueState,ListState,MapState,BroadcastState.Time:实现了Watemark机制,乱序数据处理,迟到数据容忍。Window:开箱即用的滚动、滑动、会话窗口。以及灵活的自定义窗口。2、
- python多线程锁_python:线程,多线程锁,多线程递归锁
八亿中产
python多线程锁
#!usr/bin/envpython#-*-coding:utf-8-*-__author__="Samson"importthreading,timedefrun(n):print("task",n)time.sleep(2)print("currentthread:",threading.current_thread())#当前线程t_obj=[]#存线程实例start_time=time.
- day39——多线程实例、多线程锁
weixin_33953384
javapython
python的锁可以独立提取出来1mutex=threading.Lock()2#锁的使用3#创建锁4mutex=threading.Lock()5#锁定6mutex.acquire([timeout])7#释放8mutex.release()概念资源加锁其实并不是给资源加锁,而是用锁去锁定资源,你可以定义多个锁,像下面的代码,当你需要独占某一资源时,任何一个锁都可以锁这个资源就好比你用不同的锁都
- jdbc连接出现ServerTimezone问题
一个小坑货
常见错误积累mysqljava
代码中添加时区需要在jdbc的url连接中添加serverTimezone=Asia/Shanghai。例如:jdbc:mysql://localhost:3306/db1?serverTimezone=Asia/Shanghaijdbc:mysql://localhost:3306/db1?serverTimezone=GMTIdea链接mysql错误Idea链接mysql错误—Goto‘Adv
- 行为识别的方法
人工智能专属驿站
深度学习
行为识别主要有以下几大类方法,每类方法各有特点及典型算法:传统方法特点:利用手工设计特征对行为进行表征,再用统计学习的分类方法进行识别。需一定专业知识设计特征,耗费人力物力,对复杂场景、遮挡等适应性差,但对简单背景、规则动作识别效果尚可。典型算法:时空关键点(Space-TimeInterestPoints):基于视频图像中的关键点在时空维度上的变化来提取动作特征,但可能忽略视频细节,泛化能力较弱
- uniapp:钉钉小程序录音
dingcho
前端uni-app钉钉小程序
-->{{longPress=='1'?'点击录制':'录音中...'}}{{playStatus=='1'?'播放中...':'单击播放'}}{{'剩余:'+count+'s'}}再点击结束录音删除varinit//录制时长计时器vartimer//播放录制倒计时exportdefault{data(){return{count:null,//录制倒计时longPress:'1',//1显示按住
- 避坑指南:Element UI在Vue2项目开发中的那些坑与解
前端没钱
前端基础与进阶ui
文章目录一、引言二、ElementUI初体验之坑(一)安装后不生效解决方案:(二)组件引入报错解决方案:三、表单组件的那些“小脾气”(一)重置表单后无法输入(二)表单自动校验“抽风”解决方案:四、日期组件的“时差”问题(一)DatePicker日期难改解决方案:(二)datetime类型报错解决方案:(三)IE11日期显示“失踪”解决方案:五、表格组件的“疑难杂症”(一)el-table列自适应“
- 猜数字游戏#C语言
Eternallassmpsit
游戏c语言算法
#include"stdio.h"#include"stdlib.h"#include"time.h"voidmenu(){printf("************************\n");//菜单printf("*****1.play*****\n");printf("*****0.exit*****\n");printf("************************\n");}/
- kali设置系统时间
浅夏入秋^_^
渗透linux安全运维
kali设置系统时间1、查看系统时间,发现时间不对┌──(root㉿kali)-[~]└─#date2022年05月29日星期日23:08:47EDT2、修改系统时间步骤:tzselect#依次选择Asia-China-BeijingTime-Yesecho"ZONE=Asia/Shanghai">>/etc/sysconfigrm-f/etc/localtime#链接到上海时区文件ln-sf/u
- 《CPython Internals》阅读笔记:p221-p231
python
《CPythonInternals》学习第12天,p221-p231总结,总计11页。一、技术总结无。二、英语总结(生词:2)1.atatimeidiom.separately(单独地)inthespecifiedgroups(一次)。示例:(1)Icanonlydoonethingatatim(我一次只能做一件事)。(2)Wecarriedtheboxestwoatatimeupthestair
- 超越 RAG:Memobase 为 AI 应用注入长期记忆丨社区来稿
人工智能
本文由RTE开发者社区成员通过社区网站投稿提供,如果你也有与实时互动(Real-TimeEngagement,RTE)相关的项目分享,欢迎访问网站rtecommunity.dev发布,优秀项目将会在公众号发布分享。目录什么是AI记忆?AI记忆的类型短记忆vs.长记忆UserMemoryvs.AgentMemory:两种记忆,两种侧重记忆vs.RAG:到底有什么区别?为什么AI应用需要记忆?现在的长
- 如何防止缓存雪崩、击穿和穿透?思维导图 代码示例(java 架构)
用心去追梦
缓存java架构
防止缓存雪崩、击穿和穿透是确保缓存系统稳定性和性能的关键。以下是一个思维导图结构,以及一个简化的Java架构代码示例,展示了如何通过设计和技术手段来预防这些问题。思维导图结构防止缓存问题缓存雪崩分散过期时间设置随机的TTL(Time-To-Live)限流与熔断服务降级流量控制预热机制提前加载热点数据缓存击穿分布式锁使用Redis等工具实现分布式锁缓存冗余多副本存储异步更新异步加载数据到缓存缓存穿透
- 一门科学的诞生:哈佛大学计算机研究发展的“酵母”时代
斐夷所非
computerscience计算机科学
注:机翻,未校。AScienceIsBorn:The“yeastytimes”whencomputerresearchgrewatHarvardbyHarryR.LewisSeptember-October2020IllustrationbyMarkSteeleDramatisPersonaeThirtyveteransofHarvard’sAikenComputationLabreunitedo
- python捕获异常
青云游子
python
try:name="aaa"id="aaa"exceptExceptionase:print("任务报错")print(str(e))print(str(traceback.print_exc()))spark.sql("""insertintotabledim.aaaselect'1','666','{name}','{id}',null,null,null,null,current_times
- python+playwright自动化测试(三):事件等待机制
觅远
自动化测试pythonpython开发语言自动化
目录goto设置等待强制等待wait_for_timeoutwait_forwait_for_selectorwait_for_load_statewait_for_urlwait_for_eventwait_for_functionplaywright中的timeout默认为30s,timeout=30000,有时需要根据具体情况进行自定义调整。goto设置等待page.goto('https:
- java代码中使用linux cp带*通配符导致的空文件问题
DamonREN
javalinux服务器
1、背景:在定时任务中,执行完生成文件后需要IFT任务传输至其他系统,结果发现传输的文件都为空文件。排查发现在代码中使用了以下代码:Stringcmd="cp"+sourcePath+(prefixFileName+"*_"+preDate+".txt")+""+destPath;Runtime.getRuntime().exec(cmd);2、排查分析:将日志中打印的cmd字符串,单独在服务器上
- python常用库学习四——subprocess
木头人123。
python库学习python
目录前言1、subprocess.run()(1)函数参数列表(2)函数的参数含义(3)使用示例2、subprocess.Popen(1)函数参数列表(2)函数参数含义(3)使用示例3、常见的subprocess.Popen类方法(1)Popen.poll()(2)Popen.communicate(input=None,timeout=None)(3)Popen.send_signal(sign
- Time-LLM :超越了现有时间序列预测模型的学习器
福安德信息科技
AI预测大模型学习人工智能python大模型时序预测
AI预测相关目录AI预测流程,包括ETL、算法策略、算法模型、模型评估、可视化等相关内容最好有基础的python算法预测经验EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transformer模型及Paddle实现迁移学习在预测任务上的tensoflow2.0实现holt提取时序序列特征TCN时
- JIT模式深度解析:如何精准预测,高效执行
团队协作
JIT(Just-In-Time)模式,即准时制生产方式,是一种以减少浪费、提高效率为目标的生产管理方法。以下是对JIT模式的详细解析:一、JIT模式的定义JIT模式是指在精确测定生产各工艺环节作业效率的前提下,按订单准确地计划,以消除一切无效作业与浪费为目标的一种管理模式。它强调在正确的时间,将正确的原材料和零部件,以正确的数量,送往正确的地点,以满足生产或客户的需求。这种生产方式也被称为零库存
- 供应链管理新境界:SCM如何促进信息共享与高效合作
团队协作
一、SCM是什么SCM,全称SupplyChainManagement,即供应链管理,是一种集成化的管理思想和方法,它执行供应链中从供应商到最终用户的物流的计划和控制等职能。SCM涵盖了从供应商到制造商、分销商、零售商,直到最终用户的整个过程中商品、服务以及信息的流动和转换。在SCM中,企业努力将顾客所需的正确的产品(RightProduct)能够在正确的时间(RightTime)、按照正确的数量
- Kubernetes 为什么减少对 Docker 的依赖:容器运行时演进背后的技术考量
云计算
引言容器技术的发展离不开Docker和Kubernetes的深度合作。Docker推动了容器化技术的普及,而Kubernetes则为大规模容器编排和自动化管理提供了强有力的支持。然而,随着Kubernetes逐步发展,尤其是在容器运行时(ContainerRuntime)方面的需求发生变化,Kubernetes在1.20版本中宣布将减少对Docker的依赖,并计划在1.24版本后停止维护docke
- linux高级编程,HuTool工具超详细笔记
2401_84415708
程序员linux笔记python
DateTime类继承于java.util.Date类,为Date类扩展了众多简便方法,这些方法多是DateUtil静态方法的对象表现形式,使用DateTime对象可以完全替代开发中Date对象的使用。//使用对象获取日期成员的年、月、日DateTimedateTime=newDateTime(“2021-01-0512:34:23”,DatePattern.NORM_DATETIME_FORMA
- bizhan爬虫,反爬虫机制严重
yzx991013
爬虫
importosimportreimportrequestsimportjsonimportsubprocessfromlxmlimportetreefromtimeimportsleep#请求头信息header={"referer":"https://www.bilibili.com","user-agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)Apple
- C/C++Win32编程基础详解视频下载
择善Zach
编程C++Win32
课题视频:C/C++Win32编程基础详解
视频知识:win32窗口的创建
windows事件机制
主讲:择善Uncle老师
学习交流群:386620625
验证码:625
--
- Guava Cache使用笔记
bylijinnan
javaguavacache
1.Guava Cache的get/getIfPresent方法当参数为null时会抛空指针异常
我刚开始使用时还以为Guava Cache跟HashMap一样,get(null)返回null。
实际上Guava整体设计思想就是拒绝null的,很多地方都会执行com.google.common.base.Preconditions.checkNotNull的检查。
2.Guava
- 解决ora-01652无法通过128(在temp表空间中)
0624chenhong
oracle
解决ora-01652无法通过128(在temp表空间中)扩展temp段的过程
一个sql语句后,大约花了10分钟,好不容易有一个结果,但是报了一个ora-01652错误,查阅了oracle的错误代码说明:意思是指temp表空间无法自动扩展temp段。这种问题一般有两种原因:一是临时表空间空间太小,二是不能自动扩展。
分析过程:
既然是temp表空间有问题,那当
- Struct在jsp标签
不懂事的小屁孩
struct
非UI标签介绍:
控制类标签:
1:程序流程控制标签 if elseif else
<s:if test="isUsed">
<span class="label label-success">True</span>
</
- 按对象属性排序
换个号韩国红果果
JavaScript对象排序
利用JavaScript进行对象排序,根据用户的年龄排序展示
<script>
var bob={
name;bob,
age:30
}
var peter={
name;peter,
age:30
}
var amy={
name;amy,
age:24
}
var mike={
name;mike,
age:29
}
var john={
- 大数据分析让个性化的客户体验不再遥远
蓝儿唯美
数据分析
顾客通过多种渠道制造大量数据,企业则热衷于利用这些信息来实现更为个性化的体验。
分析公司Gartner表示,高级分析会成为客户服务的关键,但是大数据分析的采用目前仅局限于不到一成的企业。 挑战在于企业还在努力适应结构化数据,疲于根据自身的客户关系管理(CRM)系统部署有效的分析框架,以及集成不同的内外部信息源。
然而,面对顾客通过数字技术参与而产生的快速变化的信息,企业需要及时作出反应。要想实
- java笔记4
a-john
java
操作符
1,使用java操作符
操作符接受一个或多个参数,并生成一个新值。参数的形式与普通的方法调用不用,但是效果是相同的。加号和一元的正号(+)、减号和一元的负号(-)、乘号(*)、除号(/)以及赋值号(=)的用法与其他编程语言类似。
操作符作用于操作数,生成一个新值。另外,有些操作符可能会改变操作数自身的
- 从裸机编程到嵌入式Linux编程思想的转变------分而治之:驱动和应用程序
aijuans
嵌入式学习
笔者学习嵌入式Linux也有一段时间了,很奇怪的是很多书讲驱动编程方面的知识,也有很多书将ARM9方面的知识,但是从以前51形式的(对寄存器直接操作,初始化芯片的功能模块)编程方法,和思维模式,变换为基于Linux操作系统编程,讲这个思想转变的书几乎没有,让初学者走了很多弯路,撞了很多难墙。
笔者因此写上自己的学习心得,希望能给和我一样转变
- 在springmvc中解决FastJson循环引用的问题
asialee
循环引用fastjson
我们先来看一个例子:
package com.elong.bms;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import co
- ArrayAdapter和SimpleAdapter技术总结
百合不是茶
androidSimpleAdapterArrayAdapter高级组件基础
ArrayAdapter比较简单,但它只能用于显示文字。而SimpleAdapter则有很强的扩展性,可以自定义出各种效果
ArrayAdapter;的数据可以是数组或者是队列
// 获得下拉框对象
AutoCompleteTextView textview = (AutoCompleteTextView) this
- 九封信
bijian1013
人生励志
有时候,莫名的心情不好,不想和任何人说话,只想一个人静静的发呆。有时候,想一个人躲起来脆弱,不愿别人看到自己的伤口。有时候,走过熟悉的街角,看到熟悉的背影,突然想起一个人的脸。有时候,发现自己一夜之间就长大了。 2014,写给人
- Linux下安装MySQL Web 管理工具phpMyAdmin
sunjing
PHPInstallphpMyAdmin
PHP http://php.net/
phpMyAdmin http://www.phpmyadmin.net
Error compiling PHP on CentOS x64
一、安装Apache
请参阅http://billben.iteye.com/admin/blogs/1985244
二、安装依赖包
sudo yum install gd
- 分布式系统理论
bit1129
分布式
FLP
One famous theory in distributed computing, known as FLP after the authors Fischer, Lynch, and Patterson, proved that in a distributed system with asynchronous communication and process crashes,
- ssh2整合(spring+struts2+hibernate)-附源码
白糖_
eclipsespringHibernatemysql项目管理
最近抽空又整理了一套ssh2框架,主要使用的技术如下:
spring做容器,管理了三层(dao,service,actioin)的对象
struts2实现与页面交互(MVC),自己做了一个异常拦截器,能拦截Action层抛出的异常
hibernate与数据库交互
BoneCp数据库连接池,据说比其它数据库连接池快20倍,仅仅是据说
MySql数据库
项目用eclipse
- treetable bug记录
braveCS
table
// 插入子节点删除再插入时不能正常显示。修改:
//不知改后有没有错,先做个备忘
Tree.prototype.removeNode = function(node) {
// Recursively remove all descendants of +node+
this.unloadBranch(node);
// Remove
- 编程之美-电话号码对应英语单词
bylijinnan
java算法编程之美
import java.util.Arrays;
public class NumberToWord {
/**
* 编程之美 电话号码对应英语单词
* 题目:
* 手机上的拨号盘,每个数字都对应一些字母,比如2对应ABC,3对应DEF.........,8对应TUV,9对应WXYZ,
* 要求对一段数字,输出其代表的所有可能的字母组合
- jquery ajax读书笔记
chengxuyuancsdn
jQuery ajax
1、jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()
- JWFD工作流拓扑结构解析伪码描述算法
comsci
数据结构算法工作活动J#
对工作流拓扑结构解析感兴趣的朋友可以下载附件,或者下载JWFD的全部代码进行分析
/* 流程图拓扑结构解析伪码描述算法
public java.util.ArrayList DFS(String graphid, String stepid, int j)
- oracle I/O 从属进程
daizj
oracle
I/O 从属进程
I/O从属进程用于为不支持异步I/O的系统或设备模拟异步I/O.例如,磁带设备(相当慢)就不支持异步I/O.通过使用I/O 从属进程,可以让磁带机模仿通常只为磁盘驱动器提供的功能。就好像支持真正的异步I/O 一样,写设备的进程(调用者)会收集大量数据,并交由写入器写出。数据成功地写出时,写入器(此时写入器是I/O 从属进程,而不是操作系统)会通知原来的调用者,调用者则会
- 高级排序:希尔排序
dieslrae
希尔排序
public void shellSort(int[] array){
int limit = 1;
int temp;
int index;
while(limit <= array.length/3){
limit = limit * 3 + 1;
- 初二下学期难记忆单词
dcj3sjt126com
englishword
kitchen 厨房
cupboard 厨柜
salt 盐
sugar 糖
oil 油
fork 叉;餐叉
spoon 匙;调羹
chopsticks 筷子
cabbage 卷心菜;洋白菜
soup 汤
Italian 意大利的
Indian 印度的
workplace 工作场所
even 甚至;更
Italy 意大利
laugh 笑
m
- Go语言使用MySQL数据库进行增删改查
dcj3sjt126com
mysql
目前Internet上流行的网站构架方式是LAMP,其中的M即MySQL, 作为数据库,MySQL以免费、开源、使用方便为优势成为了很多Web开发的后端数据库存储引擎。MySQL驱动Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采用了自己的实现接口,常用的有如下几种:
http://code.google.c...o-mysql-dri
- git命令
shuizhaosi888
git
---------------设置全局用户名:
git config --global user.name "HanShuliang" //设置用户名
git config --global user.email "
[email protected]" //设置邮箱
---------------查看环境配置
git config --li
- qemu-kvm 网络 nat模式 (四)
haoningabc
kvmqemu
qemu-ifup-NAT
#!/bin/bash
BRIDGE=virbr0
NETWORK=192.168.122.0
GATEWAY=192.168.122.1
NETMASK=255.255.255.0
DHCPRANGE=192.168.122.2,192.168.122.254
TFTPROOT=
BOOTP=
function check_bridge()
- 不要让未来的你,讨厌现在的自己
jingjing0907
生活 奋斗 工作 梦想
故事one
23岁,他大学毕业,放弃了父母安排的稳定工作,独闯京城,在家小公司混个小职位,工作还算顺手,月薪三千,混了混,混走了一年的光阴。 24岁,有了女朋友,从二环12人的集体宿舍搬到香山民居,一间平房,二人世界,爱爱爱。偶然约三朋四友,打扑克搓麻将,日子快乐似神仙; 25岁,出了几次差,调了两次岗,薪水涨了不过百,生猛狂飙的物价让现实血淋淋,无力为心爱银儿购件大牌
- 枚举类型详解
一路欢笑一路走
enum枚举详解enumsetenumMap
枚举类型详解
一.Enum详解
1.1枚举类型的介绍
JDK1.5加入了一个全新的类型的”类”—枚举类型,为此JDK1.5引入了一个新的关键字enum,我们可以这样定义一个枚举类型。
Demo:一个最简单的枚举类
public enum ColorType {
RED
- 第11章 动画效果(上)
onestopweb
动画
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
- Eclipse中jsp、js文件编辑时,卡死现象解决汇总
ljf_home
eclipsejsp卡死js卡死
使用Eclipse编辑jsp、js文件时,经常出现卡死现象,在网上百度了N次,经过N次优化调整后,卡死现象逐步好转,具体那个方法起到作用,不太好讲。将所有用过的方法罗列如下:
1、取消验证
windows–>perferences–>validation
把 除了manual 下面的全部点掉,build下只留 classpath dependency Valida
- MySQL编程中的6个重要的实用技巧
tomcat_oracle
mysql
每一行命令都是用分号(;)作为结束
对于MySQL,第一件你必须牢记的是它的每一行命令都是用分号(;)作为结束的,但当一行MySQL被插入在PHP代码中时,最好把后面的分号省略掉,例如:
mysql_query("INSERT INTO tablename(first_name,last_name)VALUES('$first_name',$last_name')");
- zoj 3820 Building Fire Stations(二分+bfs)
阿尔萨斯
Build
题目链接:zoj 3820 Building Fire Stations
题目大意:给定一棵树,选取两个建立加油站,问说所有点距离加油站距离的最大值的最小值是多少,并且任意输出一种建立加油站的方式。
解题思路:二分距离判断,判断函数的复杂度是o(n),这样的复杂度应该是o(nlogn),即使常数系数偏大,但是居然跑了4.5s,也是醉了。 判断函数里面做了3次bfs,但是每次bfs节点最多