- TLS1.3握手过程
龙贝尔莱利
cc语言服务器
tls1.3首次连接密码套件:"TLS_AES_256_GCM_SHA384"==0x1302为例;椭圆曲线为x25519;C->S表示client->server,S->C表示server->client.相同方向的包可以并在一起发送,占用一次RTT(往返时间)。[Server视角]1.a_tls_get_client_hello()C->SExtension:Key_share(x25519l
- Java集合List每回取出10个数据,分页操作。
文杰一米八
java算法
最近遇到一个需求,在点击加载更多的时候,每页返回10个数据。设计了一个小算法。话不多说,直接上代码。publicstaticvoidmain(String[]args){System.out.println("请输入当前页数:");Scanners1=newScanner(System.in);inta=s1.nextInt();System.out.println("请输入每页条数:");Sca
- 鸿蒙NEXT开发【后台合理使用定位导航】后台任务功耗优化
ADgai1987
鸿蒙开发实例harmonyos性能优化鸿蒙鸿蒙系统openharmony功耗
在使用定位导航服务时,申请长时任务的应用应设置正确的应用场景。约束NA示例新闻类应用可以使用被动定位:方式1:import{geoLocationManager}from'@kit.LocationKit';letrequestInfo:geoLocationManager.LocationRequest={'scenario':geoLocationManager.LocationRequest
- 鸿蒙NEXT开发【后台合理使用上传下载】后台任务功耗优化
ADgai1987
鸿蒙开发实例harmonyos鸿蒙系统鸿蒙性能优化openharmony后台任务功耗
应用需要上传下载时,应使用系统上传下载服务,不要申请长时任务。约束NA示例上传import{BusinessError,request}from'@kit.BasicServicesKit';letuploadTask:request.UploadTask;letuploadConfig:request.UploadConfig={url:'http://www.example.com',//需要
- 鸿蒙NEXT开发【分层架构设计】应用架构
ADgai1987
鸿蒙开发实例harmonyos架构华为鸿蒙鸿蒙系统ui分布式
随着应用规模的扩大和业务需求的复杂化,代码的复杂度相应提升。因此,良好的应用架构设计变得尤为重要,架构设计的目的是让应用更易于维护、扩展和测试。开发者在应用开发过程中,经常面临以下挑战:代码组织混乱,模块间的耦合度高,导致一个模块的变动可能对其他模块产生影响,从而使代码难以维护。应用的扩展性差,新功能的添加往往需要对现有代码进行大量的修改。为了解决这些问题,开发者需要关注以下几个方面的架构设计:[
- tomcat配置存放静态资源,实现网页访问并下载
qq_40711092
tomcatjava
配置server.xml在server.xml文件中的Host标签下嵌入一个Context标签,path是映射的web路径,doBase是本地磁盘的物理路径。-->-->设置tomcat允许访问静态文件夹,修改web.xml文件中如下图位置将false修改为truedefaultorg.apache.catalina.servlets.DefaultServletdebug0listingstru
- GO 高级特性篇
醒醒a
golang面试题golang开发语言后端
1.context1.1什么是context?上下文,这里指协程上下文,go在1.7引入的,用于在goroutine之间传递上下文信息和控制信号,包括跟踪,取消信号和超时等信息,这些信息可以被多个goroutine共享和使用,实现协作式的并发处理.随着context包的引入,标准库中很多接口因此加上了context参数,比如database/sql包,context几乎成为了并发控制和超时控制的标
- 深入解析Spring AI框架:在Java应用中实现智能化交互的关键
鵝鵝鵝
javaspring数据库后端开发语言
合集-Spring源码分析(22)1.Spring入门系列:浅析知识点2023-04-102.Spring源码系列:初探底层,手写Spring2023-04-123.Spring源码系列:核心概念解析2023-04-204.Spring源码系列(补充):详解ApplicationContext2023-04-215.Spring源码:bean的生命周期(一)2023-05-016.Spring源码
- Kotlin协程中withContext、async 和 launch 的区别
小李飞飞砖
kotlinjava前端
文章目录一、withContext、async和launch对比1.withContext2.async3.launch总结对比任务启动:适用情境:二、为何说withContext是顺序执行1.挂起协程但不创建新协程2.顺序流程的保证3.用例场景的体现结论withContext、async和launch是Kotlin协程库中用来管理并发和异步任务的三个不同的构建器。它们适用于不同的场景,具有不同的
- 使用Airbyte实现数据集成的详细指南
dagGAIYD
python
Airbyte是一个功能强大的数据集成平台,专门用于从API、数据库和文件构建到仓库和数据湖的ELT(Extract,Load,Transform)管道。凭借庞大的ELT连接器目录,Airbyte为数据仓库和数据库提供了广泛的支持。本文将详细介绍如何安装和使用Airbyte,特别是在Python环境中利用langchain-airbyte库进行数据集成。技术背景介绍在现代数据驱动的应用中,数据集成
- 【学习总结|DAY021】Java 多线程
123yhy传奇
java学习开发语言
多线程是Java编程中非常重要的概念,它允许程序同时执行多个任务,提高程序的执行效率。本文将详细介绍多线程的创建方式、常用方法、线程安全、线程同步、线程池以及并发和并行的概念,并结合代码案例进行讲解。一、线程的创建方式Java中创建线程主要有三种方式:方式一:继承Thread类classMyThreadextendsThread{@Overridepublicvoidrun(){//线程执行的任务
- ElasticSearch查询 第四篇:匹配查询(Match)
悦光阴
字符串javapythonelasticsearch索引
《ElasticSearch查询》目录导航:ElasticSearch查询第一篇:搜索APIElasticSearch查询第二篇:文档更新ElasticSearch查询第三篇:词条查询ElasticSearch查询第四篇:匹配查询(Match)ElasticSearch查询第五篇:布尔查询匹配(Match)查询属于全文(Fulltext)查询,不同于词条查询,ElasticSearch引擎在处理全
- 常见的图形库概览-01-Chart.js 入门例子
后端java
入门例子Chart.js入门示例//在这里编写Chart.js代码//获取canvas元素的上下文constctx=document.getElementById('myChart').getContext('2d');//创建图表constmyChart=newChart(ctx,{type:'bar',//图表类型:柱状图data:{labels:['January','February','
- React的类组件和函数组件
读心悦
深入浅出reactreact.jsjavascript前端
文章目录类组件函数组件函数组件核心的API类组件类组件就是基于ES6Class的语法,通过继承React.Component得到的React组件,React类组件是有自己的生命周期的,在不同的生命周期里执行不同的逻辑。比如:importReactfrom"react";classCommextendsReact.Component{constructor(prop
- 【HarmonyOS NEXT 】应用开发:ArkTS工程目录结构(Stage模型)
纳米小川
HarmonyOSharmonyos华为
【HarmonyOSNEXT】应用开发:ArkTS工程目录结构(Stage模型)一、目录结构二、部分目录及文件介绍SDK:5.0.0DevEcoStudio:5.0.3Node.js:18.20.1一、目录结构├─AppScope├─app.json5//应用的全局配置信息├─entry//应用/服务模块,编译构建生成一个HAP。├─src├─main├─ets//用于存放ArkTS源码├─ent
- python-with...as--管理上下文环境的语法结构
赵钱孙李的赵
python
在Python中,with…as语句是一种用于管理上下文环境的语法结构,常用于处理资源的获取和释放,如文件操作、网络连接、锁定互斥等。它通过上下文管理协议(contextmanagementprotocol)来确保资源的正确使用和释放,即使在处理过程中出现了异常。在Python中,任何实现了上下文管理协议的对象都可以用作with…as语句中的上下文管理器。上下文管理协议要求对象实现两个特殊方法:e
- python--数据结构
赵钱孙李的赵
python学习记录者python
1.list列表1.1特点有序:列表按照插入顺序排列。可变:可以添加,删除或者修改列表中的元素。异构:包含不同类型的数据。可重复:可迭代对象:可以使用迭代器协议来遍历列表中的元素,列表支持两种基本的迭代方法:for循环和迭代器协议。ps:迭代器协议要求对象实现两个特殊方法:iter():返回一个迭代器对象next():返回迭代器中的下一个值,如果没有更多值时,它会抛出StopIteration异常
- React中使用extends实现子类继承父类
独酌101112
前端
首先看两个对象:classAmerican{constructor(name,age){this.name=namethis.age=age}}consta1=newAmerican('Jack',20)console.log(a1)classChinese{constructor(name,age){this.name=namethis.age=age}}constc1=newChinese('
- HarmonyOS NEXT - LocalStorage:页面级UI状态存储
兔子不吃饭
HarmonyOSNEXTuiharmonyos华为
管理应用拥有的状态概述上一个章节中介绍的装饰器仅能在页面内,即一个组件树上共享状态变量。如果开发者要实现应用级的,或者多个页面的状态数据共享,就需要用到应用级别的状态管理的概念。ArkTS根据不同特性,提供了多种应用状态管理的能力:LocalStorage:页面级UI状态存储,通常用于UIAbility内、页面间的状态共享。AppStorage:特殊的单例LocalStorage对象,由UI框架在
- python小波变换
万元神万得
python
def extract_wavelet_features(data, column_name='声波强度 (AE)', scales=np.arange(1, 4), wavelet='cmor'): emr_values = data[column_name].values coefficients, frequencies = pywt.cwt(emr_values, scales
- React 18之新hook
yjwlike
reactreactjs
目录useIduseId语法增加前缀实例useTransitionuseDeferredValue代码实例useSyncExternalStoreuseInsertionEffectreact18新出了5个hook,分别是:useIduseTransitionuseDeferredValueuseSyncExternalStoreuseInsertionEffectuseIduseId用于生成一个
- 链表(双向环形链表)Java版
爱学Java
Java数据结构与算法链表java数据结构
双向环形链表(一个哨兵)双向环形链表介绍双向环形链表的特点应用场景代码实现双向环形链表介绍双向环形链表是双向链表的一种特殊形式,其特点是链表的头节点和尾节点相互连接,形成一个环。相较于普通双向链表,环形结构使得链表可以在任意节点上循环遍历,非常适合某些场景,例如实现循环队列、游戏中的回合逻辑等。双向环形链表的特点1,环形结构:头节点的prev指向尾节点,尾节点的next指向头节点。2,双向性:每个
- C#使用rabbitmq (简单例子)
罗汉松驻扎的工作基地
c#rabbitmq
首先在visualstudio项目里面用nuget工具加入easyNetQDLL然后做一个help类usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingEasyNetQ;usingEasyNetQ.Topology;namespa
- 数据结构——练习题-银行牌号系统代码
doubt。
数据结构c++算法
老师布置的一道上机作业,作为参考,利用队列构成#include#includeusingnamespacestd;#defineOK1#defineERROR0typedefintStatus;intID=0;//全局变量,当前的编号//结点类型typedefstructnode{intid;//数据域,排队的编号structnode*next;//指针域}Node;//队列类型typedefst
- GCC支持Objective C的故事?Objective-C?GCC只能编译C语言吗?Objective-C 1.0和2.0有什么区别?
程序员小迷
编程语言小话ios编译器c语言ios开发语言objective-cgccmsvcclang
GCC支持ObjectiveC的故事Objective-C主要由Stepstone公司的BradCox和TomLove在1980年左右发明。乔布斯离开苹果公司后成立了NeXTSTEP公司,买下了Objective-C语言的授权。GCC对Objective-C语言的支持是在1992年加入的,具体是在GCC1.3版本中首次引入的。GCC的后续版本继续改进了对Objective-C的支持,包括对Obje
- 解锁C#编程新姿势:Z.ExtensionMethods入门秘籍
步、步、为营
c#数据库.net服务器
一、引言在C#的开发旅程中,我们常常会遇到各种重复性高、复杂度低的任务,这些任务虽然基础,但却占据了我们大量的开发时间。比如处理字符串时,经常需要进行非空判断、格式转换;操作日期时间时,计算某个月的起始和结束日期;管理集合时,对元素进行遍历、排序等。这些看似简单的操作,若每次都手动编写代码,不仅效率低下,还容易出错。Z.ExtensionMethods的出现,如同为C#开发者们配备了一把万能钥匙,
- 十六进制文本码流转pcap(text2pcap)
wang.wenchao
css前端
HextoPCAPConverterbody{font-family:Arial,sans-serif;margin:0;padding:0;padding-top:0;min-height:100vh;background:rgb(251,250,250);display:flex;justify-content:center;align-items:flex-start;}.container
- HTML<center>标签
新生派
html前端
HTML5不支持。标签在HTML4中用于使文本居中对齐。用什么来代替呢?例子居中对齐文本(使用CSS):h1{text-align:center;}p{text-align:center;}div{text-align:center;}ThisisaheadingThisisaparagraph.Thisisadiv.
- ES Mapping ,1 字段类型
问简
#Elasticsearchelasticsearch大数据bigdata
mapping映射是定义一个文档以及其所包含的字段如何被存储和索引的方法。动态映射(dynamicmapping)显式映射(explicitmappings)maping创建PUTindex1{"mappings":{//类型定义关键字"properties":{"索引字段1":{"type":"text"//字段类型定义},"索引字段2":{"type":"text""index":false/
- React框架详解:从入门到精通(详细版)
布兰妮甜
#Reactreact.js前端前端框架
文章目录前言一、官方网站二、安装React使用CreateReactApp手动安装三、React核心概念1.组件化2.JSX3.虚拟DOM4.Props和State四、生命周期方法五、新特性介绍1.Hooks2.ContextAPI六、状态管理1.Redux2.Mobx3.ReactContextAPI七、最佳实践1.组件划分2.代码复用3.性能优化4.错误边界结语前言React是由Faceboo
- 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节点最多