Docker端口不受ufw防火墙限制解决方案安装docker“iptables”:false,禁用docker管理iptables规则。default-address-pools限制docker使用的网络。(后面转发须用到)mkdir-p/etc/dockercat>/etc/docker/daemon.json<
pwn手记录题3
前言:研究生的生活很充实(忙,大概三年我再也没有时间去认真做题了以下是最近比赛的遇到的题目。仅记录脚本,细节不会再核实了(没时间(;´༎ຶД༎ຶ`))可能以后不太会触碰CTF比赛了强网杯-baby_heapfrompwnimport*context(os='linux',arch='amd64',log_level='debug')binary='./pwn'r=process(binary)el
PAT A 1057 Stack
Stackisoneofthemostfundamentaldatastructures,whichisbasedontheprincipleofLastInFirstOut(LIFO).Thebasicoper‐ationsincludePush(insertinganelementontothetopposition)andPop(deletingthetopelement).Nowyouar
LevelDB、BoltDB 和 RocksDB区块链应用比较
MetaverseMan
区块链
LevelDB、BoltDB和RocksDB是三种常用的键值存储数据库,它们在区块链领域(如以太坊、比特币等)或其他高性能应用中有广泛应用。虽然它们都是嵌入式键值存储,但设计目标、性能特性、功能支持和适用场景有显著差异。以下是它们的详细对比,特别是结合区块链公链(如以太坊)中可能涉及的场景。1.LevelDB概述:LevelDB是由Google开发的一个轻量级嵌入式键值存储库,基于LSM树(Log
springboot项目中构建树结构数据返回
两点王爷
java数据结构数据处理springbootjava树结构
需要构建一个树结构返回(ID,PID),具体示例如下1、创建实体数据表--测试省份数据表DROPTABLEIFEXISTStest_province;CREATETABLEIFNOTEXISTStest_province(idBIGINT(32)NOTNULLAUTO_INCREMENTPRIMARYKEYCOMMENT'表ID',pidBIGINT(32)COMMENT'父级ID',nameVA
[论文阅读] 人工智能 + 软件工程 | 代码注释不一致问题研究:从数据革新到端到端解决方案
张较瘦_
前沿技术论文阅读人工智能软件工程
代码注释不一致问题研究:从数据革新到端到端解决方案原文:CCISOLVER:End-to-EndDetectionandRepairofMethod-LevelCode-CommentInconsistencyarXiv:2506.20558CCISolver:End-to-EndDetectionandRepairofMethod-LevelCode-CommentInconsistencyRe
Redis windows下一直保持启动状态
Jerry_carry
redisredis
进入DOS窗口在进入redis的安装目录输入:redis-server--service-installredis.windows.conf--loglevelverbose(安装redis服务)输入:redis-server--service-start(启动服务)输入:redis-server--service-stop(停止服务)
LoRA 实战指南:NLP 与 CV 场景的高效微调方法全解析
fairymt
产品经理的AI秘籍自然语言处理人工智能机器学习
大模型已成AI应用的“标配”,但高昂的训练和部署成本让很多企业望而却步。LoRA(Low-RankAdaptation)作为一种轻量级微调方案,正成为NLP与CV场景中低成本定制的利器。本文详细通过详细介绍LoRA的核心原理、在文本与图像任务中的应用场景、主流工具框架与实践方式,帮助你快速掌握这项高性价比技术。国产生态实战:基于LLaMA-Factory+DeepSeek+LoRA+FastAPI
Webpack中plugin详解
aiguangyuan
Webpack前端开发Webpack
1.Plugin基础1.1.基础使用Webpack通过Plugin机制让其更加灵活,以适应各种应用场景。在Webpack运行的生命周期中会广播出许多事件,Plugin可以监听这些事件,在合适的时机通过Webpack提供的API改变输出结果。一个最基础的Plugin的代码是这样的:classBasicPlugin{//在构造函数中获取用户给该插件传入的配置constructor(options){}
linux 内核日志等级,Linux系统日志管理
走神儿大神
linux内核日志等级
8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?Linux系统中的日志记录了系统每天发生的各种各样的事情,你可以通过它来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志对于安全来说,非常重要。一、日志介绍日志主要包含以下内容:历史事件:时间,地点,人物,事件日志级别:事件的关键性程度,Loglevel系统中常见日志及说明:系统日志服务:CentOS5之前版本sy
linux 内核日志等级,Android--Linux kernel log级别修改
weixin_39625747
linux内核日志等级
在我们开发过程中,内核的信息一开机就会很多,然后一直打个不停,很烦人,也不好看调试信息,更不好在串口终端输入相关的命令进行调试。那么有什么办法可以解决?1、在kernel中修改log默认等级,kernel-3.18/include/linux/printk.hstaticinlinevoidconsole_verbose(void)函数中的console_loglevel=CONSOLE_LOGL
【Linux】修改日志等级方法
zclinux_
linux运维服务器
修改日志等级方法1:修改kernel启动参数内核参数console=ttyS0或console=tty1控制日志输出到哪个终端,可以尝试修改它:编辑GRUB配置:sudovim/etc/default/grub找到GRUB_CMDLINE_LINUX,移除console=相关参数,或改成:GRUB_CMDLINE_LINUX="quietloglevel=3"quiet:禁止大部分启动消息logl
TinyWebserver学习(6)-线程监听函数eventListen()
THMOM91
c++
六、线程监听函数eventListen()一、相关知识总结1、setsockopt()函数setsockopt是用于设置套接字(socket)选项的系统调用,允许应用程序对套接字的行为进行更细粒度的控制。它通常用于配置网络通信的参数,例如超时、缓冲区大小、地址复用等。以下是详细的解析#include#includeintsetsockopt(intsockfd,intlevel,intoptnam
ThinkPHP6.0 如何使用日志
小叔哥哥
问题PHPthinkphp
日志遵循PSR-3规范,除非是实时写入的日志,其它日志都是在当前请求结束的时候统一写入的所以不要在日志写入之后使用exit等中断操作会导致日志写入失败。一.写入日志的几种方法1.助手函数trace/***记录日志信息*@parammixed$loglog信息支持字符串和数组*@paramstring$level日志级别(error/info/notice)*@returnarray|void*/t
record 7035通话与录音都会死机问题原因以及解决方法
record7035通话与录音都会死机问题原因以及解决方法17035配置27036配置原因选择opus编解码后通话会死机。2采用配置basic解决3但是录音只有嘶嘶声没有人声问题是自己的开发板MIC线路没有短接导致,现在OK编译指令使用./build.sh--chip=7035AX-B--version=1.2.3.3-r-fdefconfig.basic./build.sh--chip=7035
【HarmonyOS NEXT】解决自定义弹框遮挡气泡提示的问题
【HarmonyOSNEXT】解决自定义弹框遮挡气泡提示的问题鸿蒙开发能力##HarmonyOSSDK应用服务##鸿蒙金融类应用(金融理财一、问题背景:弹框和气泡,dialog和toast。是我们应用开发中常用的两种提示媒介。在鸿蒙应用中,如果自定义弹框在底部展示时,又弹出气泡进行提示,会发现气泡在弹框层级之下。会被遮挡住,影响气泡的显示。二、解决方案:设置气泡的显示模式为置顶即可:promptA
RabbitMQ中,basicAck、basicNack和basicReject是三种核心的消息确认机制
CATTLECODE
rabbitmq分布式
channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,true); channel.basicReject(message.getMessageProperties().getDeliveryTag(),false);channel.basicAck(message.getMessageProperties(
Authorization Basic认证 笔记
从未、淡定
javascript前端
Basic认证Basic认证过程简单介绍浏览器请求一个需要认证的网页。服务器向浏览器返回“401Unauthorized(未认证)”状态码。浏览器收到此状态码后,询问用户名和密码。浏览器发送附带认证信息(Authorization头信息)的请求。本次请求得到了文档(用户名密码均正确的情况下)。方案1:header添加Authorization原理说明:stringcode=‘fozzie:fozz
JAX study notes[8]
身在此心在彼
计算综合JAX
文章目录jax.typingreferencesjax.typingthefunctionannotationsappliedforstatictypecheckingmaybebecomeaintegralpythoncodingstandard.jax.Arrayisthebaseclassrepresentedarray.toannotateinpythonproject.Level1:An
Ubuntu开放mysql 3306端口
Ubuntu开放mysql3306端口1.检查UFW防火墙规则2.检查iptables规则1.检查UFW防火墙规则sudoufwstatusverbose|grep3306若输出包含3306/tcpALLOW,表示端口已开放(如下)ubuntu@Ubuntu2404:~$sudoufwstatusverbose|grep33063306/tcpALLOWINAnywhere3306/tcp(v6)
《凤凰架构》C12-容器间网络
Epi_HHH
阅读笔记网络容器
一、Linux网络虚拟化1)干预网络通信——以NetFliter与iptable为例钩子是iptables在内核网络协议栈处理数据包时的“插入点”,也就是规则生效的具体时刻和位置。数据包经过网络栈,会在不同阶段被iptables规则检查。INPUT:处理进入本机的数据包OUTPUT:处理由本机发出的数据包FORWARD:处理经过本机转发的数据包PREROUTING:数据包进入路由决策前(常用来做D
HarmonyOS开发实战指南:全局自定义弹窗-promptAction
不停留的码牛
鸿蒙HarmonyOSOpenHarmony服务器前端华为HarmonyOSharmonyosui鸿蒙
场景一:创建并显示全局自定义弹窗方案可以使用openCustomDialog接口,创建并弹出dialogContent对应的自定义弹窗,使用Promise异步回调。创建Params类方便开发者进行传参的,开发者可以在@Builder里自定义组件的内容,宽度跟随子节点自适应,圆角为0,弹窗背景色为透明色;letcontentNode=newComponentContent(uiContext,wra
字符串比较忽略全角半角,忽略大小写的方法
adis789
vb.netc#
C#中直接调用VB.NET的函数,兼论半角与全角、简繁体中文互相转化在C#项目中添加引用Microsoft.VisualBasic.dll,可以在C#程序中直接使用VB.NET中丰富的函数1//命令行编译:csc/r:Microsoft.VisualBasic.dllTest.cs23//如果是用VisualStudio.NETIDE,请按以下方法为项目添加引用:4//打开[解决方案资源管理器],
BP-Tools21.02下载 加解密利器 金融安全交易算法工具 PCI认证工具 金融和智能卡的数据加解密和数据转换工具
小黄人软件
金融安全
21.02版下载金融领域常用算法如AESRSADES都能计算,还能计算DUKPTAES/DES,以及TR31KBH的格式解析和数据包计算,另外还能提供EMVATRparser(ATR命令解析),HSM加密机指令组包,SimCard文件编辑和解析。
antd Table組件,实现三次表格嵌套;
烟雨-yaya
react.jsjavascript前端
文章目录概要示例代码技术细节小结概要本次学习到使用antd里table组件实现三级表格嵌套;父级点击+号出现子表;子级点击+号出现孙表;示例table表格录制代码importReact,{useEffect,useState,useMemo}from"react";import{Table,Divider}from"antd";constMultiLevelTable=()=>{const[exp
Python爬虫网安-request+示例
Whoisshutiao
python爬虫网安python爬虫开发语言网络安全
目录get&post自定义请求头文件上传添加cookie获取网页使用cookiejarsessionssl证书校验超时身份认证(httpbasicAuth)代理配置get&post#!/usr/bin/envpythonimportrequests#get#r=requests.get('http://httpbin.org/get')#print(r.text)#添加参数的get请求data={
力扣打卡第十五天 层次遍历非递归+递归
??tobenewyorker
算法leetcode职场和发展
102.二叉树的层序遍历给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。示例1:输入:root=[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例2:输入:root=[1]输出:[[1]]示例3:输入:root=[]输出:[]提示:树中节点数目在范围[0,2000]内-1000>levelOrder(TreeNod
Java 企业级 Jakarta EE 11 发布
ejinxian
Javajava开发语言JakartaEE11javaEE11
标志着企业级Java在简化开发、提升开发人员生产力和整体性能方面的进步。主要亮点包括:现代化的测试兼容性工具包(TCK)、全新JakartaData规范的引入、对现有规范的重大更新以及对最新JavaLTS版本的支持,使开发人员能够充分利用Java21中的增强功能,包括虚拟线程JakartaData在简化企业应用程序持久化逻辑方面迈出了重要一步。主要功能包括:BasicRepository:基础存储
我的世界进阶模组开发教程——地形生成(1)
lemon_sjdk
我的世界forge模组开发进阶教程java
找到mc的屎山代码,找到net.minecraft.world.level.levelgen包,我们来看看mc是如何完成地形生成的SurfaceRules代码结构与核心功能解析该代码是Minecraft世界生成模块中地表规则(SurfaceRules)的核心实现,用于控制地形表面的方块生成逻辑。以下从多角度进行拆解分析:一、顶层结构解析1.静态条件定义(ConditionSource)public
android launcher3,Android Launcher3 基本功能分析
众卡之友
androidlauncher3
AndroidLauncher3基本功能分析1,界面的布局,从上往下分别为:DeleteDropTarget(应用卸载区域,它是一个DropTarget)Workspace(页面容器,一个页面是一个CellLayout)PageIndicator(指示器,指示workspace当前位于第几个页面)Hotseat(底部图标区域)2,Launcher桌面图标的加载:LauncherApplicatio
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节点最多