Kotlin 1.7.0 正式发布!主要新特性一览

6月9号,Kotlin 发布了1.7.0正式版。本文将大致过一遍主要的新特性。

本文主要来自 What's new in Kotlin 1.7.0 | Kotlin,部分来自 Kotlin 1.7.0-Beta 现已发布 | The Kotlin Blog ,完整内容也请参考这些链接。受限于本人水平,难免有误,敬请谅解。

作者:FunnySaltyFish (github.com)

以下是此版本主要更新:

  • 新的 Kotlin К2 compiler 发布 Alpha 版本, 带来显著的性能提高。 目前仅有 JVM 可用,其余编译器插件,包括 kapt 均无法使用

  • Gradle 中增量编译的新方法。现在,在依赖的非 Kotlin 模块内所做的更改也支持增量编译,并且与 Gradle 兼容。

  • 稳定的opt-in 注解要求、明确非空类型 和 Builder 推理。

  • 用于类型参数的下划线运算符。在指定其他类型时,可以使用它来自动推断参数类型。

  • 内联类的内联值可以委托。现在,您可以创建在大多数情况下不分配内存的轻量级wrapper。

新的 Kotlin K2 编译器

此 Kotlin 版本引入了新的 Kotlin K2 编译器的 Alpha 版本。新的编译器旨在加快新语言功能的开发,统一Kotlin支持的所有平台,带来性能改进,并为编译器扩展提供API。

我们已经发布了一些关于我们的新编译器及其优点的详细说明:

  • The Road to the New Kotlin Compiler
  • K2 Compiler: a Top-Down View

需要强调的是,对于新K2编译器的Alpha版本,我们主要关注性能改进,并且它仅适用于JVM项目。它不支持Kotlin / JS,Kotlin / Native 或其他多平台项目,并且包括 kapt 在内的编译器插件都无法使用它。

我们的基准测试显示了我们内部项目的一些杰出成果:

Project 现版本 Kotlin 编译器 新的 K2 Kotlin 编译器 相对提升
Kotlin 2.2 KLOC/s 4.8 KLOC/s ~ x2.2
YouTrack 1.8 KLOC/s 4.2 KLOC/s ~ x2.3
IntelliJ IDEA 1.8 KLOC/s 3.9 KLOC/s ~ x2.2
Space 1.2 KLOC/s 2.8 KLOC/s ~ x2.3

KLOC/s 为每秒钟编译器处理的源代码行数(千行)

您可以查看 JVM 项目的性能提升,并将其与旧编译器的结果进行比较。要启用 Kotlin K2 编译器,请使用以下编译器选项:

-Xuse-k2

此外,K2 编译器 还包括许多错误修复: fixed-in-frontend-ir sort by: Priority, votes, updated)。请注意,此列表中以 State: Open 开头的 bugs 实际上在 K2 里也已得到修复。

下一个 Kotlin 版本将提高 K2 编译器的稳定性并提供更多功能,敬请期待并提供您的反馈!

语法

内联类的内联值也能委托了

如果要为值或类实例创建轻量级wrapper,则必须手动实现所有接口方法,委托实现解决了这个问题。但在 1.7.0 之前,它不适用于内联类。此限制已被删除,因此您现在可以创建在大多数情况下不分配内存的轻量级wrapper。

// 接口,唯一的方法返回一个字符串
interface Bar {
    fun foo() = "foo"
}

@JvmInline
// kt1.7之前,对内联类不能如此写
// 否则会报 "Value class cannot implement an interface by delegation if expression is not a parameter"
// kt1.7 解除了这个限制
value class BarWrapper(val bar: Bar): Bar by bar

fun main() {
    val bw = BarWrapper(object: Bar {})
    println(bw.foo())
}

类型参数的下划线运算符

Kotlin 1.7.0 为类型参数引入了一个下划线运算符 。可以使用它在指定其他类型时自动推断类型参数:_

abstract class SomeClass {
    abstract fun execute(): T
}

class SomeImplementation : SomeClass() {
    override fun execute(): String = "Test"
}

class OtherImplementation : SomeClass() {
    override fun execute(): Int = 42
}

object Runner {
    inline fun , T> run(): T {
        return S::class.java.getDeclaredConstructor().newInstance().execute()
    }
}

fun main() {
    // T 被推断为 String,因为 SomeImplementation 继承自 SomeClass
    val s = Runner.run()
    assert(s == "Test")

    // T 被推断为 Int ,因为 OtherImplementation 继承自 SomeClass
    val n = Runner.run()
    assert(n == 42)
}

构建器推断变更

构建器推断 (Builder inference) 是一种特殊的类型推断,在调用泛型构建器函数时很有帮助。 它可以帮助编译器推断调用的类型实参,方法是使用其 lambda 实参中其他调用的相关类型信息。

在此版本中,如果常规类型推断无法获得有关类型的足够信息,即可自动激活构建器推断。(以前需额外指定 -Xenable-builder-inference 编译器选项——在 1.6.0 版本中引入)。这意味着现在您无需应用任何额外的注解或选项,即可编写自己的使用构建器类型推断的构建器。

FunnySaltyFish:放几个栗子:

val result = buildList {
    // Type argument is inferred into Float based on the expected type
    val x: Float = get(0)
} // result has the List type

fun takeMyLong(x: Long) { ... }

fun String.isMoreThat3() = length > 3

fun takeListOfStrings(x: List) { ... }

fun main() {
    val result1 = buildList {
        val x = get(0)
        takeMyLong(x)
    } // result1 has the List type

    val result2 = buildList {
        val x = get(0)
        val isLong = x.isMoreThat3()
    // ...
    } // result2 has the List type

    val result3 = buildList {
        takeListOfStrings(this)
    } // result3 has the List type
}

更多内容详见: 了解如何编写自定义通用构建器。

稳定的 opt-in requirements

Opt-in requirements 已为 Stable ,无需添加额外的编译器参数.

在 1.7.0 之前, opt-in 需要指定参数 -opt-in=kotlin.RequiresOptIn 以避免 warning,现在不需要了; 不过,您仍然可使用 -opt-in 选择加入其他 annotations、 module-wise.

稳定的明确非空类型

在 Kotlin 1.7.0 中,绝对不可为 null 的类型已提升为 Stable。它们在扩展通用 Java 类和接口时提供了更好的互操作性。

使用新语法 T & Any 标记此为明确非空(绝对不可空)类型。 此语法来自 intersection types 的符号。在 & 左侧为可空的类型参数,右侧为不可空的Any

fun  elvisLike(x: T, y: T & Any): T & Any = x ?: y

fun main() {
    // OK
    elvisLike("", "").length
    // 错误: 'null' 无法用于 non-null 值
    elvisLike("", null).length

    // OK
    elvisLike(null, "").length
    // 错误: 'null' 无法用于 non-null 值
    elvisLike(null, null).length
}

在此 KEEP 中了解有关绝对不可为 null 的类型的更多信息。

标准库

在 Kotlin 1.7.0 中,标准库进行了一系列更改和改进。它们引入了新功能,稳定了实验性功能,并统一了对 Native、JS 和 JVM 的命名捕获组的支持:

min() 和 max() 集合函数回归

在 Kotlin 1.4 中,我们将 min()max() 集合函数重命名为 minOrNull()maxOrNull()。 这些新的名称能够更好地反映它们的行为 – 如果接收器集合为空,则返回 null。 它还有助于使函数的行为与整个 Kotlin Collections API 中使用的命名惯例保持一致。

minBy()maxBy()minWith()maxWith() 同样如此,在 Kotlin 1.4 中均具有自己的 *OrNull() 同义词。 受此变更影响的旧函数已逐渐弃用。

Kotlin 1.7.0-Beta 重新引入了原始的函数名称,但加入了不可空返回类型。 现在,更新后的 min()max()minBy()maxBy()minWith()maxWith() 会严格返回集合元素或抛出异常。

fun main() {
    val numbers = listOf()
    println(numbers.maxOrNull()) // "null"
    println(numbers.max()) // "Exception in… Collection is empty."
}

正则表达式特定位置匹配

在 1.5.30 中引入的 Regex.matchAt()Regex.matchesAt() 函数现已达到稳定版本。 它们提供了一种方式来检查正则表达式在 StringCharSequence 中的特定位置是否具有精确匹配。

  • matchesAt() 可以检查匹配并返回布尔结果:
fun main(){
    val releaseText = "Kotlin 1.7.0 is on its way!"
    // 正则表达式: 一个数字, “.”, 一个数字, “.”, 一个或多个数字
    val versionRegex = "\\d[.]\\d[.]\\d+".toRegex()

    println(versionRegex.matchesAt(releaseText, 0)) // "false"
    println(versionRegex.matchesAt(releaseText, 7)) // "true"
}

  • matchAt() 会在找到匹配的情况下返回匹配,在未找到匹配的情况下返回 null
fun main(){
    val releaseText = "Kotlin 1.7.0 is on its way!"
    val versionRegex = "\\d[.]\\d[.]\\d+".toRegex()

    println(versionRegex.matchAt(releaseText, 0)) // "null"
    println(versionRegex.matchAt(releaseText, 7)?.value) // "1.7.0"
}

对以前语言和 API 版本的扩展支持

为了支持库作者 开发可在各种旧 Kotlin 版本中使用的库,并解决 Kotlin 主版本更新频率增加的问题,我们扩展了对以前语言和 API 版本的支持。

在 Kotlin 1.7.0 中,我们支持三个以前的语言和 API 版本,而不是两个。这意味着 Kotlin 1.7.0 支持针对 1.4.0 的 Kotlin 版本的库开发。有关向后兼容性的详细信息,请参阅兼容性模式。

通过反射获取注解

1.6.0 首次引入的 拓展函数 KAnnotatedElement.findAnnotations() 现已进入 Stable. 此 反射 函数返回某元素特定类型的所有注解, 包括 独立使用 和 重复使用 的注解.

@Repeatable
annotation class Tag(val name: String)

@Tag("First Tag")
@Tag("Second Tag")
fun taggedFunction() {
    println("I'm a tagged function!")
}

fun main() {
    val x = ::taggedFunction
    val foo = x as KAnnotatedElement
    println(foo.findAnnotations())
    // [@Tag(name=First Tag), @Tag(name=Second Tag)]
}

稳定的深度递归函数

深度递归函数 (DeepRecursiveFunction) 自 Kotlin 1.4.0 以来一直作为实验性功能提供,现在它们在 Kotlin 1.7.0 中是稳定的。使用DeepRecursiveFunction 可以定义一个函数,该函数将其堆栈保留在堆上,而不是实际的调用堆栈。这允许您运行非常深的递归计算。使用invoke以调用这类函数。

在此示例中,深度递归函数用于以递归方式计算二叉树的深度。即使此示例函数以递归方式调用自身 100,000 次,也不会抛出 StackOverflowError

class Tree(val left: Tree?, val right: Tree?)

val calculateDepth = DeepRecursiveFunction { t ->
    if (t == null) 0 else maxOf(
        callRecursive(t.left),
        callRecursive(t.right)
    ) + 1
}

fun main() {
    // 生成一颗深度为 100000 的二叉树
    val deepTree = generateSequence(Tree(null, null)) { prev ->
        Tree(prev, null)
    }.take(100_000).last()

    println(calculateDepth(deepTree)) // 100000
}

若递归深度超过1000, 请考虑在代码中使用深度递归函数。

基于默认时间源的时间标记现在基于内联类

Kotlin 1.7.0 通过将 返回的时间标记更改为内联类,提高了时间测量功能的性能。这意味着调用像TimeSource.MonotonicmarkNow()elapsedNow()measureTime()measureTimedValue()TimeMark 这样的函数不会为其实例分配包装类。特别是在测量作为hot path一部分的代码段时,这有助于最大限度地减少测量对性能的影响:

@OptIn(ExperimentalTime::class)
fun main() {
    val mark = TimeSource.Monotonic.markNow() // 返回的 `TimeMark` 为内联类
    val elapsedDuration = mark.elapsedNow()
}

仅当从 TimeMark 中获取的时间源对 TimeSource.Monotonic 为静态时,此优化才可用。

Java Optionals 的新实验性扩展函数

Kotlin 1.7.0 附带了新的便利函数,简化了 Java 中Optional类的使用。这些新功能可用于在 JVM 上拆箱和转换可选对象,并帮助使 Java API 的使用更加简洁。

拓展函数getOrNull()getOrDefault()getOrElse() 允许您获取 Optional 的值(如果有的话)。否则,将视情况获得null、默认值或函数返回的值:

val presentOptional = Optional.of("FunnySaltyFish")

println(presentOptional.getOrNull())
// "FunnySaltyFish"

val absentOptional = Optional.empty()

println(absentOptional.getOrNull()) // null
println(absentOptional.getOrDefault("给个默认值")) // "给个默认值"
println(absentOptional.getOrElse {
    println("Optional 值缺失")
    "默认值"
})
// "Optional 值缺失"
// "默认值"

扩展函数 toList()toSet()asSequence()将现有 Optional的值转换为列表、集合或序列,否则返回空集合。扩展函数 toCollection()将值追加到已存在的目标集合:

val presentOptional = Optional.of("I'm here!")
val absentOptional = Optional.empty()
println(presentOptional.toList() + "," + absentOptional.toList())
// ["I'm here!"], []
println(presentOptional.toSet() + "," + absentOptional.toSet())
// ["I'm here!"], []
val myCollection = mutableListOf()
absentOptional.toCollection(myCollection)
println(myCollection)
// []
presentOptional.toCollection(myCollection)
println(myCollection)
// ["I'm here!"]
val list = listOf(presentOptional, absentOptional).flatMap { it.asSequence() }
println(list)
// ["I'm here!"]

这些扩展函数在 Kotlin 1.7.0 中作为实验性引入。您可以在此 KEEP 中了解有关Optional扩展的更多信息。与往常一样,我们欢迎您在 Kotlin 问题跟踪器中提供反馈。

支持 JS 和本机中的命名捕获组

从 Kotlin 1.7.0 开始,命名捕获组不仅在 JVM 上受支持,在 JS 和 Native 平台上也受支持。

若要为捕获组命名,请在正则表达式中使用 (?group) 语法。若要获取与组匹配的文本,请调用新引入的 MatchGroupCollection.get() 函数并传递组名。

按名称检索匹配的组值

fun dateReplace() {
    val dateRegex = Regex("(?
\\d{2})-(?\\d{2})-(?\\d{4})") val input = "Date of birth: 27-04-2022" println(dateRegex.replace(input, "\${yyyy}-\${mm}-\${dd}")) // "Date of birth: 2022-04-27" — by name println(dateRegex.replace(input, "\$3-\$2-\$1")) // "Date of birth: 2022-04-27" — by number }

命名反向引用

现在,您还可以在反向引用组时使用组名。反向引用与捕获组先前匹配的相同文本匹配。为此,请使用正则表达式中的语法:\k

fun backRef() {
    val regex = "(?\\w+), yes \\k<title>".toRegex()
    val match = regex.find("Do you copy? Sir, yes Sir!")!!
    println(match.value) // "Sir, yes Sir"
    println(match.groups["title"]?.value) // "Sir"
}

</code></pre> 
 <h4>换表达式中的命名组</h4> 
 <p>命名组引用可与替换表达式一起使用。请考虑 <code>replace()</code> 函数,该函数将输入中指定正则表达式的所有匹配项替换为替换表达式;以及仅替换第一个匹配项的 <code>replaceFirst()</code> 函数。</p> 
 <p>替换字符串中出现的 <code>${name}</code> 将替换为与具有指定名称的捕获组相对应的子序列。您可以按名称和索引比较组引用中的替换项:</p> 
 <pre><code>fun dateReplace() {
    val dateRegex = Regex("(?<dd>\\d{2})-(?<mm>\\d{2})-(?<yyyy>\\d{4})")
    val input = "Date of birth: 27-04-2022"
    println(dateRegex.replace(input, "\${yyyy}-\${mm}-\${dd}")) // "Date of birth: 2022-04-27" — by name
    println(dateRegex.replace(input, "\$3-\$2-\$1")) // "Date of birth: 2022-04-27" — by number
}

</code></pre> 
 <h2>Gradle</h2> 
 <p>好多,不翻了。见 kotlinlang.org/docs/whatsn…</p> 
 <p>除上述之外,还有一些涉及到 JS/Native 的部分没有翻译,感兴趣的可自行参阅原链接。</p> 
</article>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1756089178187120640"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(Kotlin 1.7.0 正式发布!主要新特性一览)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1899041939643232256.htm"
                           title="使用Python从酷狗音乐网站下载音乐" target="_blank">使用Python从酷狗音乐网站下载音乐</a>
                        <span class="text-muted">0zxm</span>
<a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E5%AE%9E%E6%88%98%E9%A1%B9%E7%9B%AE/1.htm">爬虫实战项目</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/1.htm">网络爬虫</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/xhtml/1.htm">xhtml</a>
                        <div>当然可以!以下是你的博客文章的Markdown格式:使用Python从酷狗音乐网站下载音乐!!!本程序仅供学习参考1.程序介绍这个程序使用了Python的requests库,以及一些哈希算法来实现从酷狗音乐网站搜索歌曲并下载的功能。下面是它的主要功能:从酷狗音乐网站搜索歌曲展示搜索结果列表选择并下载指定的歌曲2.代码实现#代码实现部分,包括get_signature、get_list、show_l</div>
                    </li>
                    <li><a href="/article/1899041686303076352.htm"
                           title="Java集合_八股&场景题" target="_blank">Java集合_八股&场景题</a>
                        <span class="text-muted">吃海鲜的骆驼</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E4%B8%93%E9%A2%98/1.htm">面试专题</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>Java集合在Java开发中,集合框架是面试和实际开发中非常重要的内容。以下是一些常见的Java集合八股文问题和场景题,以及详细答案和示例代码。1.Java集合框架的结构是什么?答案:Java集合框架主要分为三大接口:Collection、Map和Queue。Collection:是集合的顶级接口,它又分为List和Set。List:有序集合,允许重复元素,如ArrayList、LinkedLis</div>
                    </li>
                    <li><a href="/article/1899041686978359296.htm"
                           title="Java多线程和锁_八股&场景题" target="_blank">Java多线程和锁_八股&场景题</a>
                        <span class="text-muted">吃海鲜的骆驼</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E4%B8%93%E9%A2%98/1.htm">面试专题</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>Java多线程_八股&场景题Java多线程是面试和实际开发中非常重要的内容。以下是一些常见的Java多线程八股文问题和场景题,以及详细答案和示例代码。1.Java中创建线程的几种方式?答案:主要有以下几种方式:继承Thread类:重写run()方法,通过start()启动线程。实现Runnable接口:实现run()方法,通过Thread类启动线程。实现Callable接口:通过FutureTas</div>
                    </li>
                    <li><a href="/article/1899041559987417088.htm"
                           title="JVM常见八股问题" target="_blank">JVM常见八股问题</a>
                        <span class="text-muted">学Java的skyyyyyyyy</span>
<a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>1.什么是JVM?回答:JVM是Java虚拟机,负责将Java字节码转换为机器码并执行。它提供了内存管理、垃圾回收、线程管理等功能,使得Java程序能够在不同操作系统上运行而无需修改。2.JVM的内存结构是什么?JVM内存结构主要包括以下几个部分:方法区:存储类的结构信息,如类名、访问修饰符、常量池、字段描述等。堆区:存储对象实例,几乎所有的对象都在这里分配内存。栈区:每个线程都有一个栈帧,用于存</div>
                    </li>
                    <li><a href="/article/1899040020635906048.htm"
                           title="华为OD面经 - 二战失利C++视觉算法" target="_blank">华为OD面经 - 二战失利C++视觉算法</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA%E9%A2%98%E5%BA%93c%2B%2Bcjava/1.htm">华为题库c++cjava</a>
                        <div>24届河南大学本,计算机科学与技术专业。因为考研没有成功,毕业后一直在家准备二战,二战再次失利,gap半年后决定找工作,找了一些国企和私企的面试机会,但一直没有找到满意的offer。经过朋友推荐,决定尝试华为OD的岗位。由于本科期间有做过一些C++相关的项目和开源贡献,投递了C++视觉算法岗位。机考准备:因为考研期间的刷题基础还在,所以准备机考并没有花太多时间。主要集中在数据结构和算法题目上,尤其</div>
                    </li>
                    <li><a href="/article/1899038241756082176.htm"
                           title="vite+vue+ts+element-plus从零开发管理后台框架(08)-顶部整体布局" target="_blank">vite+vue+ts+element-plus从零开发管理后台框架(08)-顶部整体布局</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/vue3/1.htm">vue3</a>
                        <div>顶部整体使用左、中、右的布局。左侧宽度跟菜单宽度一样,如果菜单未折叠就显示后台logo和后台名称,如果折叠了就只显示后台logo。右侧内容自适应,主要是显示系统工具按钮和用户信息。中间使用剩余空间,主要是显示菜单折叠按钮和多页签。布局编辑src/views/Main.vue,template段el-header修改如下。leftcenterrightstyle段el-header类修改如下.el-</div>
                    </li>
                    <li><a href="/article/1899035132996677632.htm"
                           title="JVM如何判断一个对象可以被回收" target="_blank">JVM如何判断一个对象可以被回收</a>
                        <span class="text-muted">代码小白%</span>
<a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a>
                        <div>JVM是Java虚拟机(JavaVirtualMachine)的缩写,它是一个能够运行Java字节码的虚拟计算机。JVM是Java平台的一部分,它提供了平台独立性,即Java程序可以一次编写,在任何支持JVM的操作系统上运行。JVM主要有以下功能:加载代码:JVM加载编译好的字节码文件(.class文件)并将其转换为内存中的类。验证字节码:JVM会验证字节码,确保它遵循Java规范,并不会破坏系统</div>
                    </li>
                    <li><a href="/article/1899035133520965632.htm"
                           title="【一文学会 HTML5】" target="_blank">【一文学会 HTML5】</a>
                        <span class="text-muted">熬夜超级玩家</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>目录HTML概述基本概念HTML发展历程HTML基本结构网页基本标签标题标签(``-``)段落标签(``)换行标签(``)水平线标签(``)注释(``)特殊符号图像标签基本语法主要属性图像的对齐和样式响应式图像链接标签基本语法重要属性`href`属性`target`属性`title`属性`rel`属性`download`属性链接样式示例代码特殊链接形式图像链接按钮链接块元素和行内元素块元素(Blo</div>
                    </li>
                    <li><a href="/article/1899031728559812608.htm"
                           title="面试__八股" target="_blank">面试__八股</a>
                        <span class="text-muted">big muscle</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a>
                        <div>java解释执行,即时编译(编译成本地代码,效率高,内存占用多,C1,C2)编译优化技术:方法内联,复写传播,无用代码删除字节码就是虚拟机所使用的指令集类加载:加载(获取类的二进制流文件,方法区的数据结构,内存生成这个类的class对象),链接(验证,准备(类变量初始化),解析(符号引用替换为直接引用)),初始化(常量初始化)栈帧主要是局部变量区和操作数栈,方法返回地址,对象头的markword;</div>
                    </li>
                    <li><a href="/article/1899026563584815104.htm"
                           title="es6+新增特性有哪些" target="_blank">es6+新增特性有哪些</a>
                        <span class="text-muted">光影少年</span>
<a class="tag" taget="_blank" href="/search/es6/1.htm">es6</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>ES6+(ES6及以后版本,如ES7、ES8等)新增了许多特性,主要包括以下几个方面:1.ES6(2015)新增特性变量声明let和const(块级作用域)var(仍可用,但更推荐let和const)模板字符串constname="Tom";console.log(`Hello,${name}!`);//Hello,Tom!解构赋值constuser={name:"Alice",age:25};c</div>
                    </li>
                    <li><a href="/article/1899026059647578112.htm"
                           title="tcp udp区别" target="_blank">tcp udp区别</a>
                        <span class="text-muted">C18298182575</span>
<a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/udp/1.htm">udp</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a>
                        <div>TCP(传输控制协议)和UDP(用户数据报协议)是两种常用的传输层协议,它们在数据传输方式、可靠性和应用场景等方面有显著区别。以下是它们的主要区别:1.连接方式TCP:面向连接的协议。通信前需要通过“三次握手”建立连接,通信结束后通过“四次挥手”断开连接。UDP:无连接的协议。直接发送数据,不需要建立或断开连接。2.可靠性TCP:提供可靠的数据传输。通过确认机制、重传机制、流量控制和拥塞控制确保数</div>
                    </li>
                    <li><a href="/article/1899015471529783296.htm"
                           title="H.264---序列参数集(SPS)---宽高获取" target="_blank">H.264---序列参数集(SPS)---宽高获取</a>
                        <span class="text-muted">SXM19940913sxm</span>
<a class="tag" taget="_blank" href="/search/H264/1.htm">H264</a>
                        <div>SequenceParamaterSet(NALUnit=7)SPS和PPS一般处于码流的起始位置,但也可能出现在码流中间,主要原因是:1、解码器需要在码流中间开始解码;2、编码器在编码的过程中改变了码流的参数(如图像分辨率等);SPS结构(H264文档7.3.2.1)/**SequenceParameterSet@see7.3.2.1SequenceparametersetRBSPsyntax*</div>
                    </li>
                    <li><a href="/article/1899010424821575680.htm"
                           title="PyBroker: 使用Python进行机器学习驱动的算法交易指南" target="_blank">PyBroker: 使用Python进行机器学习驱动的算法交易指南</a>
                        <span class="text-muted">任铃冰Flourishing</span>

                        <div>PyBroker:使用Python进行机器学习驱动的算法交易指南pybrokerAlgorithmicTradinginPythonwithMachineLearning项目地址:https://gitcode.com/gh_mirrors/py/pybroker一、项目目录结构及介绍PyBroker项目遵循了清晰的组织结构来简化其源码管理和维护。以下是该仓库的主要目录及其简介:├──docs#文</div>
                    </li>
                    <li><a href="/article/1899008031513964544.htm"
                           title="yolov5代码详解--1.python代码脚本" target="_blank">yolov5代码详解--1.python代码脚本</a>
                        <span class="text-muted">三炭先生</span>
<a class="tag" taget="_blank" href="/search/yolo%E7%AE%97%E6%B3%95/1.htm">yolo算法</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>一、detect.py作为YOLOv5模型推理的核心执行文件,detect.py实现了从数据加载到结果输出的完整目标检测流水线。本文只讲代码中最主要的opt内函数的含义,这是detect最核心的东西,至于其他的代码注释我会放在下面,有什么不懂可以评论区提问。下面对每个命令行参数进行详细介绍,说明它们在检测推理过程中的含义和作用:--weights指定模型权重文件的路径(或多个路径),也可以是远程T</div>
                    </li>
                    <li><a href="/article/1899001096588816384.htm"
                           title="Manus AI Agent 技术解读:架构、机制与竞品对比" target="_blank">Manus AI Agent 技术解读:架构、机制与竞品对比</a>
                        <span class="text-muted">智想天开</span>
<a class="tag" taget="_blank" href="/search/AI%E6%8A%80%E6%9C%AF/1.htm">AI技术</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a>
                        <div>目录1.Manus是什么?1.1研发背景1.2技术特点1.3工具调用能力1.4主要应用场景2.Manus一夜爆火的原因何在?2.1技术突破带来的震撼2.2完整交付的产品体验2.3生态与开源策略3.Manus与其他AIAgent的对比分析3.1技术架构3.2任务执行能力3.3工具调用能力3.4产品化进展3.5测试基准表现4.Manus的挑战与未来发展4.1现阶段的局限性4.2对人力市场和软件行业的影</div>
                    </li>
                    <li><a href="/article/1898989871633068032.htm"
                           title="JAVA反射" target="_blank">JAVA反射</a>
                        <span class="text-muted">m0_74015467</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>一、反射概述Java反射(Reflection)是Java语言中一项极为强大的特性,它犹如一把神奇的钥匙,允许程序在运行时查询、访问和修改类、接口、字段和方法的信息。简单来说,反射赋予了程序动态操作类的能力,打破了传统编程中在编译期就确定所有行为的限制,让程序能够根据运行时的情况灵活地做出响应。二、类信息详解(一)类信息的构成类信息主要存储在JVM的方法区中,它是类的元数据集合,具体包含以下几个重</div>
                    </li>
                    <li><a href="/article/1898989114477309952.htm"
                           title="《基于机器学习的DDoS攻击检测与防御系统设计与实现》开题报告" target="_blank">《基于机器学习的DDoS攻击检测与防御系统设计与实现》开题报告</a>
                        <span class="text-muted">大数据蟒行探索者</span>
<a class="tag" taget="_blank" href="/search/%E6%AF%95%E4%B8%9A%E8%AE%BA%E6%96%87%2F%E7%A0%94%E7%A9%B6%E6%8A%A5%E5%91%8A/1.htm">毕业论文/研究报告</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/ddos/1.htm">ddos</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a>
                        <div>目录一、课题的研究目的和意义1.1课题背景1.2课题目的(1)提高DDoS攻击检测的准确性(2)加强DDoS攻击的防御能力(3)提升网络安全防护的技术水平1.3课题意义(1)理论意义(2)实践意义二、国内(外)研究现状及分析2.1国内研究现状2.2国外研究现状2.3总结回顾三、课题主要研究内容及可行性分析3.1课题主要内容3.2可行性分析(1)技术成熟度与应用前景(2)数据处理能力四、研究方案和技</div>
                    </li>
                    <li><a href="/article/1898987728851234816.htm"
                           title="第一行代码(第三版)kotlin-android-extensions报错处理" target="_blank">第一行代码(第三版)kotlin-android-extensions报错处理</a>
                        <span class="text-muted">代码随想笔记</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>classMainActivity:AppCompatActivity(){overridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)valmBt_1:Button=findViewById(R.id.button1)</div>
                    </li>
                    <li><a href="/article/1898984825566588928.htm"
                           title="【Unity Shaders】Reflecting Your World —— Unity3D中的遮罩反射(Masking Reflections)" target="_blank">【Unity Shaders】Reflecting Your World —— Unity3D中的遮罩反射(Masking Reflections)</a>
                        <span class="text-muted">妈妈说女孩子要自立自强</span>
<a class="tag" taget="_blank" href="/search/Unity/1.htm">Unity</a><a class="tag" taget="_blank" href="/search/Shaders/1.htm">Shaders</a><a class="tag" taget="_blank" href="/search/Unity/1.htm">Unity</a><a class="tag" taget="_blank" href="/search/Shaders/1.htm">Shaders</a>
                        <div>本系列主要参考《UnityShadersandEffectsCookbook》一书(感谢原书作者),同时会加上一点个人理解或拓展。这里是本书所有的插图。这里是本书所需的代码和资源(当然你也可以从官网下载)。==========================================分割线==========================================写在前面有时候,我们</div>
                    </li>
                    <li><a href="/article/1898984826262843392.htm"
                           title="【Unity Shaders】Reflecting Your World —— Unity3D中的法线贴图和反射" target="_blank">【Unity Shaders】Reflecting Your World —— Unity3D中的法线贴图和反射</a>
                        <span class="text-muted">妈妈说女孩子要自立自强</span>
<a class="tag" taget="_blank" href="/search/Unity/1.htm">Unity</a><a class="tag" taget="_blank" href="/search/Shaders/1.htm">Shaders</a><a class="tag" taget="_blank" href="/search/Unity/1.htm">Unity</a><a class="tag" taget="_blank" href="/search/Shaders/1.htm">Shaders</a>
                        <div>本系列主要参考《UnityShadersandEffectsCookbook》一书(感谢原书作者),同时会加上一点个人理解或拓展。这里是本书所有的插图。这里是本书所需的代码和资源(当然你也可以从官网下载)。==========================================分割线==========================================写在前面有很多情况你</div>
                    </li>
                    <li><a href="/article/1898984699351592960.htm"
                           title="【Unity Shaders】Reflecting Your World —— 在Unity3D中创建Cubemaps" target="_blank">【Unity Shaders】Reflecting Your World —— 在Unity3D中创建Cubemaps</a>
                        <span class="text-muted">妈妈说女孩子要自立自强</span>
<a class="tag" taget="_blank" href="/search/Unity/1.htm">Unity</a><a class="tag" taget="_blank" href="/search/Shaders/1.htm">Shaders</a><a class="tag" taget="_blank" href="/search/Unity/1.htm">Unity</a><a class="tag" taget="_blank" href="/search/Shaders/1.htm">Shaders</a><a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%BD%A2/1.htm">图形</a><a class="tag" taget="_blank" href="/search/Shader/1.htm">Shader</a><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F/1.htm">游戏</a><a class="tag" taget="_blank" href="/search/unity/1.htm">unity</a><a class="tag" taget="_blank" href="/search/unity3d/1.htm">unity3d</a>
                        <div>本系列主要参考《UnityShadersandEffectsCookbook》一书(感谢原书作者),同时会加上一点个人理解或拓展。这里是本书所有的插图。这里是本书所需的代码和资源(当然你也可以从官网下载)。==========================================分割线==========================================写在前面为了在Sha</div>
                    </li>
                    <li><a href="/article/1898980034568318976.htm"
                           title="智能指针用过吗,有哪些,他们的区别和各自的优缺点" target="_blank">智能指针用过吗,有哪些,他们的区别和各自的优缺点</a>
                        <span class="text-muted">Nicole Potter</span>
<a class="tag" taget="_blank" href="/search/U3D%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%9D%A2%E8%AF%95%E9%A2%98%E6%B1%87%E6%80%BB/1.htm">U3D客户端面试题汇总</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a>
                        <div>智能指针主要用于处理C++之中动态内存分配时由于一些操作可能会导致悬空指针以及内存泄漏问题的情况。C++之中的智能指针主要包含unique_ptr,shared_ptr,weak_ptr这三种。1,unique_ptr是一种独享的智能指针,一个unique_ptr只能指向一个对象,不允许被复制。它优点是由于不存在引用计数的操作,性能较高,但是由于不允许被复制,所以使用场景比较受限。但是可以通过mo</div>
                    </li>
                    <li><a href="/article/1898978649810464768.htm"
                           title="基于信息间隙决策理论的碳捕集电厂调度(Matlab代码实现)" target="_blank">基于信息间隙决策理论的碳捕集电厂调度(Matlab代码实现)</a>
                        <span class="text-muted">砌墙_2301</span>
<a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>‍个人主页欢迎来到本博客❤️❤️博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。本文目录如下:目录1概述基于信息间隙决策理论(IGDT)的碳捕集电厂调度研究综述一、信息间隙决策理论(IGDT)的定义与核心原理二、碳捕集电厂调度的主要研究方向与挑战三、IGDT在碳捕集电厂调度中的模型框架四、现有调度方法的局限性及IGDT的改进五、实证研究案例分析六、总结与</div>
                    </li>
                    <li><a href="/article/1898970126338813952.htm"
                           title="Grafana 对接 Zabbix 数据源API错误" target="_blank">Grafana 对接 Zabbix 数据源API错误</a>
                        <span class="text-muted"></span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>介绍主要报错为Invalidparams.Invalidparameter"/":unexpectedparameter"user".主要原因为Zabbix6.4.0以上的版本更新了API,导致Grafana的数据源插件不兼容。解决方案更新到最新的Grafana和grafana-zabbix插件即可。(大于4.2.10)grafana-clipluginsupgrade-all参考:https:/</div>
                    </li>
                    <li><a href="/article/1898963275152945152.htm"
                           title="MongoDB 集群模式简单了解" target="_blank">MongoDB 集群模式简单了解</a>
                        <span class="text-muted">黑风风</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E8%BF%90%E7%BB%B4/1.htm">网络运维</a><a class="tag" taget="_blank" href="/search/NoSQL/1.htm">NoSQL</a><a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>MongoDB集群模式简单了解在现代应用架构中,数据库的扩展性和高可用性至关重要,而MongoDB作为NoSQL数据库的佼佼者,提供了多种集群模式来应对不同场景的需求。这篇文章将深入探讨MongoDB的主要集群模式,并分析它们的适用场景和优缺点。1.MongoDB的三大集群模式MongoDB主要提供以下三种集群模式,每种模式都有其独特的应用场景和优势:副本集(ReplicaSet)——高可用性与数</div>
                    </li>
                    <li><a href="/article/1898954705367789568.htm"
                           title="Etcd学习笔记" target="_blank">Etcd学习笔记</a>
                        <span class="text-muted">江小年</span>
<a class="tag" taget="_blank" href="/search/etcd/1.htm">etcd</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>etcd的介绍与安装主要用于微服务的配置中心和服务发现,数据可靠性比redis更强在对外api的应用中,如何知道order服务的rpc地址?如果服务的ip地址变化了怎么办?在传统的配置文件模式,修改配置文件,应用程序是需要重启才能解决的,所以引入etcdwindows安装etcd-v3.5.16-windows-amd64.zipdocker安装dockerrun--nameetcd-d-p237</div>
                    </li>
                    <li><a href="/article/1898950672536104960.htm"
                           title="C语言------指针从入门到精通" target="_blank">C语言------指针从入门到精通</a>
                        <span class="text-muted">Oracle_666</span>
<a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>第一部分:前言:本篇文章主要划分为两大部分:第一部分适合零基础的同学,主要学习了解指针的概念,对指针大概有个概念。如果你已经有基础,即可跳过第一部分的内容。第二部分主要是分解指针的实现逻辑,通过19个例子,再结合代码公式把不同类型的指针及指针的应用详细解析。指针是干啥用的?指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要想了解一个指针就需要理解指针的四方面的内容:指针的类型、指</div>
                    </li>
                    <li><a href="/article/1898948532186968064.htm"
                           title="spring核心:IOC和AOP详解" target="_blank">spring核心:IOC和AOP详解</a>
                        <span class="text-muted">sc重新启程</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a>
                        <div>引言Spring是众多开源java项⽬中的⼀员,基于分层的javaEE应⽤⼀站式轻量级开源框架,目的是简化企业应用程序的开发,主要核⼼是IOC(控制反转/依赖注⼊)与AOP(⾯向切⾯)两⼤技术,实现项⽬在开发过程中的轻松解耦,提⾼项⽬的开发效率。在项⽬中引⼊Spring可以降低组件之间的耦合度,实现软件各层之间的解耦。SpringIOCIOC,InversionofControl,控制反转,指将对</div>
                    </li>
                    <li><a href="/article/1898948405867114496.htm"
                           title="PSPNet在图像超分辨率中的应用" target="_blank">PSPNet在图像超分辨率中的应用</a>
                        <span class="text-muted">AI天才研究院</span>
<a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E4%BC%81%E4%B8%9A%E7%BA%A7%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98/1.htm">AI大模型企业级应用开发实战</a><a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%BA%94%E7%94%A8%E5%85%A5%E9%97%A8%E5%AE%9E%E6%88%98%E4%B8%8E%E8%BF%9B%E9%98%B6/1.htm">AI大模型应用入门实战与进阶</a><a class="tag" taget="_blank" href="/search/DeepSeek/1.htm">DeepSeek</a><a class="tag" taget="_blank" href="/search/R1/1.htm">R1</a><a class="tag" taget="_blank" href="/search/%26amp%3B/1.htm">&</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AEAI%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">大数据AI人工智能大模型</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E7%A7%91%E5%AD%A6/1.htm">计算科学</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E8%AE%A1%E7%AE%97/1.htm">神经计算</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E5%9E%8B%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">大型语言模型</a><a class="tag" taget="_blank" href="/search/AI/1.htm">AI</a><a class="tag" taget="_blank" href="/search/AGI/1.htm">AGI</a><a class="tag" taget="_blank" href="/search/LLM/1.htm">LLM</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/Python/1.htm">Python</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1/1.htm">架构设计</a><a class="tag" taget="_blank" href="/search/Agent/1.htm">Agent</a><a class="tag" taget="_blank" href="/search/RPA/1.htm">RPA</a>
                        <div>PSPNet在图像超分辨率中的应用1.背景介绍图像超分辨率(ImageSuper-Resolution,ISR)是计算机视觉领域的一个重要研究方向,旨在从低分辨率图像中重建高分辨率图像。传统的ISR方法主要基于插值算法,如双线性插值、双三次插值等,但这些方法往往无法恢复图像的高频细节信息。近年来,随着深度学习的发展,基于卷积神经网络(ConvolutionalNeuralNetwork,CNN)的</div>
                    </li>
                    <li><a href="/article/1898946137461682176.htm"
                           title="计算机网络之应用层(FTP)" target="_blank">计算机网络之应用层(FTP)</a>
                        <span class="text-muted">DKPT</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/1.htm">计算机网络</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/1.htm">计算机网络</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>一、FTP的基本概念FTP是建立在TCP协议之上的一个应用层协议,它采用C/S(客户端/服务器)模式进行工作。在FTP协议中,客户端负责发起文件传输请求,而服务器则负责响应这些请求并提供文件访问服务。二、FTP的工作原理FTP的工作原理基于客户端-服务器模型,主要通过以下步骤实现文件的传输和管理:1、建立控制连接:客户端首先通过TCP协议连接到FTP服务器的21端口,建立起控制连接。这个连接用于传</div>
                    </li>
                                <li><a href="/article/115.htm"
                                       title="C/C++Win32编程基础详解视频下载" target="_blank">C/C++Win32编程基础详解视频下载</a>
                                    <span class="text-muted">择善Zach</span>
<a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/Win32/1.htm">Win32</a>
                                    <div>课题视频:C/C++Win32编程基础详解 
视频知识:win32窗口的创建 
                  windows事件机制 
主讲:择善Uncle老师 
学习交流群:386620625 
验证码:625 
 
--</div>
                                </li>
                                <li><a href="/article/242.htm"
                                       title="Guava Cache使用笔记" target="_blank">Guava Cache使用笔记</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/guava/1.htm">guava</a><a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a>
                                    <div>1.Guava Cache的get/getIfPresent方法当参数为null时会抛空指针异常 
 
我刚开始使用时还以为Guava Cache跟HashMap一样,get(null)返回null。 
实际上Guava整体设计思想就是拒绝null的,很多地方都会执行com.google.common.base.Preconditions.checkNotNull的检查。 
 
 
2.Guava</div>
                                </li>
                                <li><a href="/article/369.htm"
                                       title="解决ora-01652无法通过128(在temp表空间中)" target="_blank">解决ora-01652无法通过128(在temp表空间中)</a>
                                    <span class="text-muted">0624chenhong</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>解决ora-01652无法通过128(在temp表空间中)扩展temp段的过程 
 
一个sql语句后,大约花了10分钟,好不容易有一个结果,但是报了一个ora-01652错误,查阅了oracle的错误代码说明:意思是指temp表空间无法自动扩展temp段。这种问题一般有两种原因:一是临时表空间空间太小,二是不能自动扩展。 
分析过程: 
   既然是temp表空间有问题,那当</div>
                                </li>
                                <li><a href="/article/496.htm"
                                       title="Struct在jsp标签" target="_blank">Struct在jsp标签</a>
                                    <span class="text-muted">不懂事的小屁孩</span>
<a class="tag" taget="_blank" href="/search/struct/1.htm">struct</a>
                                    <div>非UI标签介绍: 
控制类标签: 
1:程序流程控制标签   if   elseif    else 
<s:if test="isUsed"> 
 <span class="label label-success">True</span> 
</</div>
                                </li>
                                <li><a href="/article/623.htm"
                                       title="按对象属性排序" target="_blank">按对象属性排序</a>
                                    <span class="text-muted">换个号韩国红果果</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E5%AF%B9%E8%B1%A1%E6%8E%92%E5%BA%8F/1.htm">对象排序</a>
                                    <div>利用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={
</div>
                                </li>
                                <li><a href="/article/750.htm"
                                       title="大数据分析让个性化的客户体验不再遥远" target="_blank">大数据分析让个性化的客户体验不再遥远</a>
                                    <span class="text-muted">蓝儿唯美</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a>
                                    <div>顾客通过多种渠道制造大量数据,企业则热衷于利用这些信息来实现更为个性化的体验。 
分析公司Gartner表示,高级分析会成为客户服务的关键,但是大数据分析的采用目前仅局限于不到一成的企业。 挑战在于企业还在努力适应结构化数据,疲于根据自身的客户关系管理(CRM)系统部署有效的分析框架,以及集成不同的内外部信息源。 
然而,面对顾客通过数字技术参与而产生的快速变化的信息,企业需要及时作出反应。要想实</div>
                                </li>
                                <li><a href="/article/877.htm"
                                       title="java笔记4" target="_blank">java笔记4</a>
                                    <span class="text-muted">a-john</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>操作符 
1,使用java操作符 
      操作符接受一个或多个参数,并生成一个新值。参数的形式与普通的方法调用不用,但是效果是相同的。加号和一元的正号(+)、减号和一元的负号(-)、乘号(*)、除号(/)以及赋值号(=)的用法与其他编程语言类似。 
      操作符作用于操作数,生成一个新值。另外,有些操作符可能会改变操作数自身的</div>
                                </li>
                                <li><a href="/article/1004.htm"
                                       title="从裸机编程到嵌入式Linux编程思想的转变------分而治之:驱动和应用程序" target="_blank">从裸机编程到嵌入式Linux编程思想的转变------分而治之:驱动和应用程序</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%AD%A6%E4%B9%A0/1.htm">嵌入式学习</a>
                                    <div>    笔者学习嵌入式Linux也有一段时间了,很奇怪的是很多书讲驱动编程方面的知识,也有很多书将ARM9方面的知识,但是从以前51形式的(对寄存器直接操作,初始化芯片的功能模块)编程方法,和思维模式,变换为基于Linux操作系统编程,讲这个思想转变的书几乎没有,让初学者走了很多弯路,撞了很多难墙。 
    笔者因此写上自己的学习心得,希望能给和我一样转变</div>
                                </li>
                                <li><a href="/article/1131.htm"
                                       title="在springmvc中解决FastJson循环引用的问题" target="_blank">在springmvc中解决FastJson循环引用的问题</a>
                                    <span class="text-muted">asialee</span>
<a class="tag" taget="_blank" href="/search/%E5%BE%AA%E7%8E%AF%E5%BC%95%E7%94%A8/1.htm">循环引用</a><a class="tag" taget="_blank" href="/search/fastjson/1.htm">fastjson</a>
                                    <div>          我们先来看一个例子: 
          
package com.elong.bms;

import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;

import co</div>
                                </li>
                                <li><a href="/article/1258.htm"
                                       title="ArrayAdapter和SimpleAdapter技术总结" target="_blank">ArrayAdapter和SimpleAdapter技术总结</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/SimpleAdapter/1.htm">SimpleAdapter</a><a class="tag" taget="_blank" href="/search/ArrayAdapter/1.htm">ArrayAdapter</a><a class="tag" taget="_blank" href="/search/%E9%AB%98%E7%BA%A7%E7%BB%84%E4%BB%B6%E5%9F%BA%E7%A1%80/1.htm">高级组件基础</a>
                                    <div>ArrayAdapter比较简单,但它只能用于显示文字。而SimpleAdapter则有很强的扩展性,可以自定义出各种效果 
  
ArrayAdapter;的数据可以是数组或者是队列 
  
     // 获得下拉框对象 
AutoCompleteTextView textview = (AutoCompleteTextView) this
</div>
                                </li>
                                <li><a href="/article/1385.htm"
                                       title="九封信" target="_blank">九封信</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%BA%E7%94%9F/1.htm">人生</a><a class="tag" taget="_blank" href="/search/%E5%8A%B1%E5%BF%97/1.htm">励志</a>
                                    <div>        有时候,莫名的心情不好,不想和任何人说话,只想一个人静静的发呆。有时候,想一个人躲起来脆弱,不愿别人看到自己的伤口。有时候,走过熟悉的街角,看到熟悉的背影,突然想起一个人的脸。有时候,发现自己一夜之间就长大了。         2014,写给人</div>
                                </li>
                                <li><a href="/article/1512.htm"
                                       title="Linux下安装MySQL Web 管理工具phpMyAdmin" target="_blank">Linux下安装MySQL Web 管理工具phpMyAdmin</a>
                                    <span class="text-muted">sunjing</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/Install/1.htm">Install</a><a class="tag" taget="_blank" href="/search/phpMyAdmin/1.htm">phpMyAdmin</a>
                                    <div>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 </div>
                                </li>
                                <li><a href="/article/1639.htm"
                                       title="分布式系统理论" target="_blank">分布式系统理论</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a>
                                    <div>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, </div>
                                </li>
                                <li><a href="/article/1766.htm"
                                       title="ssh2整合(spring+struts2+hibernate)-附源码" target="_blank">ssh2整合(spring+struts2+hibernate)-附源码</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86/1.htm">项目管理</a>
                                    <div>最近抽空又整理了一套ssh2框架,主要使用的技术如下: 
spring做容器,管理了三层(dao,service,actioin)的对象 
struts2实现与页面交互(MVC),自己做了一个异常拦截器,能拦截Action层抛出的异常 
hibernate与数据库交互 
BoneCp数据库连接池,据说比其它数据库连接池快20倍,仅仅是据说 
MySql数据库 
  
项目用eclipse</div>
                                </li>
                                <li><a href="/article/1893.htm"
                                       title="treetable bug记录" target="_blank">treetable bug记录</a>
                                    <span class="text-muted">braveCS</span>
<a class="tag" taget="_blank" href="/search/table/1.htm">table</a>
                                    <div>// 插入子节点删除再插入时不能正常显示。修改:
//不知改后有没有错,先做个备忘
 Tree.prototype.removeNode = function(node) {
      // Recursively remove all descendants of +node+
      this.unloadBranch(node);

      // Remove</div>
                                </li>
                                <li><a href="/article/2020.htm"
                                       title="编程之美-电话号码对应英语单词" target="_blank">编程之美-电话号码对应英语单词</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a>
                                    <div>

import java.util.Arrays;

public class NumberToWord {

	/**
	 * 编程之美 电话号码对应英语单词
	 * 题目:
     *  手机上的拨号盘,每个数字都对应一些字母,比如2对应ABC,3对应DEF.........,8对应TUV,9对应WXYZ,
     *  要求对一段数字,输出其代表的所有可能的字母组合</div>
                                </li>
                                <li><a href="/article/2147.htm"
                                       title="jquery ajax读书笔记" target="_blank">jquery ajax读书笔记</a>
                                    <span class="text-muted">chengxuyuancsdn</span>
<a class="tag" taget="_blank" href="/search/jQuery+ajax/1.htm">jQuery ajax</a>
                                    <div>1、jsp页面 
 
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()</div>
                                </li>
                                <li><a href="/article/2274.htm"
                                       title="JWFD工作流拓扑结构解析伪码描述算法" target="_blank">JWFD工作流拓扑结构解析伪码描述算法</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E6%B4%BB%E5%8A%A8/1.htm">活动</a><a class="tag" taget="_blank" href="/search/J%23/1.htm">J#</a>
                                    <div>  对工作流拓扑结构解析感兴趣的朋友可以下载附件,或者下载JWFD的全部代码进行分析 
 
 
  /*  流程图拓扑结构解析伪码描述算法 
 
        public java.util.ArrayList DFS(String graphid, String stepid, int j) </div>
                                </li>
                                <li><a href="/article/2401.htm"
                                       title="oracle I/O 从属进程" target="_blank">oracle I/O 从属进程</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>I/O 从属进程 
 
  I/O从属进程用于为不支持异步I/O的系统或设备模拟异步I/O.例如,磁带设备(相当慢)就不支持异步I/O.通过使用I/O 从属进程,可以让磁带机模仿通常只为磁盘驱动器提供的功能。就好像支持真正的异步I/O 一样,写设备的进程(调用者)会收集大量数据,并交由写入器写出。数据成功地写出时,写入器(此时写入器是I/O 从属进程,而不是操作系统)会通知原来的调用者,调用者则会</div>
                                </li>
                                <li><a href="/article/2528.htm"
                                       title="高级排序:希尔排序" target="_blank">高级排序:希尔排序</a>
                                    <span class="text-muted">dieslrae</span>
<a class="tag" taget="_blank" href="/search/%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F/1.htm">希尔排序</a>
                                    <div>
    public void shellSort(int[] array){
        int limit = 1;
        int temp;
        int index;
        
        while(limit <= array.length/3){
            limit = limit * 3 + 1;
    </div>
                                </li>
                                <li><a href="/article/2655.htm"
                                       title="初二下学期难记忆单词" target="_blank">初二下学期难记忆单词</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/english/1.htm">english</a><a class="tag" taget="_blank" href="/search/word/1.htm">word</a>
                                    <div>kitchen 厨房 
cupboard 厨柜 
salt 盐 
sugar 糖 
oil 油 
fork 叉;餐叉 
spoon 匙;调羹 
chopsticks 筷子 
cabbage 卷心菜;洋白菜 
soup 汤 
Italian 意大利的 
  
Indian 印度的 
workplace  工作场所 
even 甚至;更 
Italy 意大利 
laugh 笑 
m</div>
                                </li>
                                <li><a href="/article/2782.htm"
                                       title="Go语言使用MySQL数据库进行增删改查" target="_blank">Go语言使用MySQL数据库进行增删改查</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>目前Internet上流行的网站构架方式是LAMP,其中的M即MySQL, 作为数据库,MySQL以免费、开源、使用方便为优势成为了很多Web开发的后端数据库存储引擎。MySQL驱动Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采用了自己的实现接口,常用的有如下几种: 
 
  http://code.google.c...o-mysql-dri</div>
                                </li>
                                <li><a href="/article/2909.htm"
                                       title="git命令" target="_blank">git命令</a>
                                    <span class="text-muted">shuizhaosi888</span>
<a class="tag" taget="_blank" href="/search/git/1.htm">git</a>
                                    <div>---------------设置全局用户名:
git config --global user.name "HanShuliang" //设置用户名 
git config --global user.email "13241153187@163.com" //设置邮箱

---------------查看环境配置
git config --li</div>
                                </li>
                                <li><a href="/article/3036.htm"
                                       title="qemu-kvm 网络 nat模式 (四)" target="_blank">qemu-kvm 网络 nat模式 (四)</a>
                                    <span class="text-muted">haoningabc</span>
<a class="tag" taget="_blank" href="/search/kvm/1.htm">kvm</a><a class="tag" taget="_blank" href="/search/qemu/1.htm">qemu</a>
                                    <div>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()
</div>
                                </li>
                                <li><a href="/article/3163.htm"
                                       title="不要让未来的你,讨厌现在的自己" target="_blank">不要让未来的你,讨厌现在的自己</a>
                                    <span class="text-muted">jingjing0907</span>
<a class="tag" taget="_blank" href="/search/%E7%94%9F%E6%B4%BB+%E5%A5%8B%E6%96%97+%E5%B7%A5%E4%BD%9C+%E6%A2%A6%E6%83%B3/1.htm">生活 奋斗 工作 梦想</a>
                                    <div> 故事one 
 23岁,他大学毕业,放弃了父母安排的稳定工作,独闯京城,在家小公司混个小职位,工作还算顺手,月薪三千,混了混,混走了一年的光阴。    24岁,有了女朋友,从二环12人的集体宿舍搬到香山民居,一间平房,二人世界,爱爱爱。偶然约三朋四友,打扑克搓麻将,日子快乐似神仙;    25岁,出了几次差,调了两次岗,薪水涨了不过百,生猛狂飙的物价让现实血淋淋,无力为心爱银儿购件大牌</div>
                                </li>
                                <li><a href="/article/3290.htm"
                                       title="枚举类型详解" target="_blank">枚举类型详解</a>
                                    <span class="text-muted">一路欢笑一路走</span>
<a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/%E6%9E%9A%E4%B8%BE%E8%AF%A6%E8%A7%A3/1.htm">枚举详解</a><a class="tag" taget="_blank" href="/search/enumset/1.htm">enumset</a><a class="tag" taget="_blank" href="/search/enumMap/1.htm">enumMap</a>
                                    <div>枚举类型详解 
一.Enum详解 
     1.1枚举类型的介绍 
  
JDK1.5加入了一个全新的类型的”类”—枚举类型,为此JDK1.5引入了一个新的关键字enum,我们可以这样定义一个枚举类型。 
  
   Demo:一个最简单的枚举类 
  
public enum ColorType {
   RED</div>
                                </li>
                                <li><a href="/article/3417.htm"
                                       title="第11章 动画效果(上)" target="_blank">第11章 动画效果(上)</a>
                                    <span class="text-muted">onestopweb</span>
<a class="tag" taget="_blank" href="/search/%E5%8A%A8%E7%94%BB/1.htm">动画</a>
                                    <div>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/</div>
                                </li>
                                <li><a href="/article/3544.htm"
                                       title="Eclipse中jsp、js文件编辑时,卡死现象解决汇总" target="_blank">Eclipse中jsp、js文件编辑时,卡死现象解决汇总</a>
                                    <span class="text-muted">ljf_home</span>
<a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/jsp%E5%8D%A1%E6%AD%BB/1.htm">jsp卡死</a><a class="tag" taget="_blank" href="/search/js%E5%8D%A1%E6%AD%BB/1.htm">js卡死</a>
                                    <div>使用Eclipse编辑jsp、js文件时,经常出现卡死现象,在网上百度了N次,经过N次优化调整后,卡死现象逐步好转,具体那个方法起到作用,不太好讲。将所有用过的方法罗列如下: 
  
1、取消验证 
windows–>perferences–>validation 
把 除了manual 下面的全部点掉,build下只留 classpath dependency Valida</div>
                                </li>
                                <li><a href="/article/3671.htm"
                                       title="MySQL编程中的6个重要的实用技巧" target="_blank">MySQL编程中的6个重要的实用技巧</a>
                                    <span class="text-muted">tomcat_oracle</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>每一行命令都是用分号(;)作为结束 
对于MySQL,第一件你必须牢记的是它的每一行命令都是用分号(;)作为结束的,但当一行MySQL被插入在PHP代码中时,最好把后面的分号省略掉,例如: 
mysql_query("INSERT INTO tablename(first_name,last_name)VALUES('$first_name',$last_name')"); 
</div>
                                </li>
                                <li><a href="/article/3798.htm"
                                       title="zoj 3820 Building Fire Stations(二分+bfs)" target="_blank">zoj 3820 Building Fire Stations(二分+bfs)</a>
                                    <span class="text-muted">阿尔萨斯</span>
<a class="tag" taget="_blank" href="/search/Build/1.htm">Build</a>
                                    <div> 题目链接:zoj 3820 Building Fire Stations 
 题目大意:给定一棵树,选取两个建立加油站,问说所有点距离加油站距离的最大值的最小值是多少,并且任意输出一种建立加油站的方式。 
 解题思路:二分距离判断,判断函数的复杂度是o(n),这样的复杂度应该是o(nlogn),即使常数系数偏大,但是居然跑了4.5s,也是醉了。 判断函数里面做了3次bfs,但是每次bfs节点最多</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>