小编Ada*_*old的帖子

O(n)时间非递归过程遍历二叉树

我正在读一本名为" 算法简介 "的书.我想很多人都知道.我刚刚碰到一个看似相当困难的问题:

编写一个O(n)-time非递归过程,给定一个n节点二叉树,打印出每个节点的密钥.在树本身之外使用不超过恒定的额外空间,并且在过程中不要修改树,即使是暂时的.

我看到还有另外一个问题:如何在没有额外内存的情况下在O(n)时间遍历二叉树,但主要区别在于我无法修改树.我正在考虑使用一些访问过的标志,但我还没有提出正确的解决方案.这可能是我看不到的明显的东西.你会如何设计一个解决这个问题的算法?即使是对答案的一些指示也会受到赞赏.

algorithm binary-tree

5
推荐指数
1
解决办法
3860
查看次数

用span标签效果seo打破一个单词

我想知道是否打破一个带有span标签的单词来改变第一个字母的字体大小,会影响谷歌机器人读取这个单词的能力吗?受此影响的词语是关键词.

html css seo

5
推荐指数
2
解决办法
2882
查看次数

寻找一个java代码生成库

什么是"好"的java代码生成库?我在JaxMe中找到了一代人,但它很穷而且年老.我喜欢通过java代码生成java代码.所以基本上使用一个lib告诉它必须生成一个具体的类或接口与X字段,Y方法等,然后写入文件系统..我知道框架使用它们,但找不到一个独立的lib .. - Ed

java code-generation

5
推荐指数
1
解决办法
5117
查看次数

现场注射 - 这是一个坏习惯吗?

我和我的同事现在有几个星期有争议.我想听听社区对此的看法.

我们在申请中使用guice.在这个应用程序的UI部分,我更喜欢通过DI和自定义注释(也就是工厂的位置)来实例化所有字段和组件,并在buildUI方法中将它们连接起来.

看起来如下:

我的方法:

@Inject
@PreConfigured(caption="foo", width="100%")
Label field;

private void buildUI() {
   this.addComponent(field);
}
Run Code Online (Sandbox Code Playgroud)

我还写了一些数据绑定和i18n的注释.

我的同事这样做:

他的方法:

private Label field;

private void buildUI() {
   field = new Label();
   field.setCaption("foo");
   field.setWidth("100%");
   this.addComponent(field);
}
Run Code Online (Sandbox Code Playgroud)

这里的代码可能很长.考虑到数据绑定和其他主题,第二个代码可以变得更长,而我的方法只是另一个注释.

我的理由是:

  1. 配置所有组件的行为和外观的中心位置
  2. 代码重用
  3. 性能 - 在长时间运行的应用程序中,组件的初始化代码变得"热",jit对其进行更多优化.
  4. 更具可读性.

他的理由是:

  1. 可读性
  2. 视图代码不会遍布整个地方.
  3. 该课程没有DI
  4. 依赖注入的灵活性被高估,特别是如果注入具体类.
  5. 使用DI的唯一有效方法是构造函数注入.

但是,我还阅读了福勒的一些文章,他说,定位注射(用场注射替代)是一个糟糕的设计决定.但是在其他项目中没有重用的视图呢?

Field Injection是一个糟糕的设计吗?或者上面介绍的另一种方式更优雅?

亲切的问候基督徒

PS:我知道讨论只是基于意见而开始,但这是一个长期持续的讨论(setter vs constructor injection),这可能是值得放手的.

java dependency-injection

5
推荐指数
1
解决办法
2094
查看次数

如何使用Spring REST消耗protobuf参数?

我正在尝试将protobuf参数传递给REST端点,但我得到了

org.springframework.web.client.HttpServerErrorException:500 null

每次我试试.我现在拥有的是这样的:

@RestController
public class TestTaskEndpoint {

    @PostMapping(value = "/testTask", consumes = "application/x-protobuf", produces = "application/x-protobuf")
    TestTaskComplete processTestTask(TestTask testTask) {
        // TestTask is a generated protobuf class
        return generateResult(testTask);
    }
}


@Configuration
public class AppConfiguration {

    @Bean
    ProtobufHttpMessageConverter protobufHttpMessageConverter() {
        return new ProtobufHttpMessageConverter();
    }

}

@SpringBootApplication
public class JavaConnectorApplication {

    public static void main(String[] args) {
        SpringApplication.run(JavaConnectorApplication.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的测试看起来像这样:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@WebAppConfiguration
public class JavaConnectorApplicationTest {


    @Configuration
    public static class RestClientConfiguration {

        @Bean
        RestTemplate restTemplate(ProtobufHttpMessageConverter hmc) …
Run Code Online (Sandbox Code Playgroud)

spring protocol-buffers spring-restcontroller

5
推荐指数
1
解决办法
2937
查看次数

如何在RxJava 2中发生错误后继续处理?

我有一个PublishSubject和一个Subscriber我用来处理(可能)无限的预处理数据流.问题是某些元素可能包含一些错误.我想忽略它们并继续处理.我怎么能这样做?我尝试过这样的事情:

    val subject = PublishSubject.create<String>()
    subject.retry().subscribe({
        println("next: $it")
    }, {
        println("error")
    }, {
        println("complete")
    })

    subject.onNext("foo")
    subject.onNext("bar")
    subject.onError(RuntimeException())
    subject.onNext("wom")
    subject.onComplete()
Run Code Online (Sandbox Code Playgroud)

我的问题是没有任何错误处理方法可以帮助我:

onErrorResumeNext() - 指示Observable在遇到错误时发出一系列项目

onErrorReturn(?) - 指示Observable在遇到错误时发出特定项目

onExceptionResumeNext(?) - 指示Observable在遇到异常后继续发出项目(但不是另一种可抛出的项目)

retry(?) - 如果源Observable发出错误,请重新订阅它,希望它能完成而不会出错

retryWhen(?) - 如果源Observable发出错误,请将该错误传递给另一个Observable以确定是否重新订阅源

我尝试retry()了例子,但它无限期地在错误之后挂起我的进程.

我也试过,onErrorResumeNext()但它没有按预期工作:

    val backupSubject = PublishSubject.create<String>()
    val subject = PublishSubject.create<String>()
    var currentSubject = subject
    subject.onErrorResumeNext(backupSubject).subscribe({
        println("next: $it")
    }, {
        println("error")
        currentSubject = backupSubject
    }, {
        println("complete")
    })

    backupSubject.subscribe({
        println("backup")
    }, {
        println("backup error")
    })

    currentSubject.onNext("foo")
    currentSubject.onNext("bar") …
Run Code Online (Sandbox Code Playgroud)

java kotlin rx-java2

5
推荐指数
1
解决办法
2522
查看次数

如何解决Kotlin多平台库项目中的lambda/SAM问题?

我在 Kotlin 中遇到 SAM 问题。我正在开发一个具有接受 lambda 函数的库。我的问题是我不能简单地写这个:

fun myFun(someLambda: (A) -> B) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

因为如果 Java 用户想要调用它,他们需要将 a 传递Function1给它,这不是很好的用户体验。如果我创建一个 SAM:

fun myFun(someSam: Function<A, B>) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

那么对于 Kotlin 用户来说就很麻烦了。到目前为止,我一直在做的是,我采用了 SAM 方式,并为 Kotlin 用户的所有这些函数添加了一个扩展函数,它只是转换为 SAM 函数:

inline fun <A, B> MyClass.someFun(crossinline fn: (A) -> B) {
    return someFun(object : Function<A, B> {
        override fun accept(value: A): B {
            return fn.invoke(value)
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

这种方法有很多样板,而且也很难维护。有更好的替代方案来解决这个问题吗?

java kotlin kotlin-multiplatform

5
推荐指数
1
解决办法
177
查看次数

从 Gradle 5.1.1 升级到 6.0.1 破坏了 Kotlin 多平台构建

我已经升级了我的 Kotlin 多平台项目以使用 Gradle 6.0.1

gradle wrapper --gradle-version 6.0.1 --distribution-type all
Run Code Online (Sandbox Code Playgroud)

现在我的构建正在崩溃。它无法识别我添加为项目依赖项的常见模块:

dependencies {
    commonMainApi("mygroup:mylib:$myversion")
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 Kotlin DSL,这个项目也是一个多平台项目。我得到的是一堵文本墙,详细说明了所有无法解析的导入(所有导入都应该是从common我的依赖项中的common模块导入到我的项目中的模块)。

我所做的唯一一件事就是升级到 Gradle 6.0.1。如果我恢复以前的状态,我的构建就可以了。我究竟做错了什么?

gradle kotlin kotlin-multiplatform

5
推荐指数
1
解决办法
342
查看次数

调试模式在带有 Kotlin 的 IDEA 中停止工作

我已经在一个项目上工作了一段时间,有一天我试图在调试模式下运行我的项目,但我收到了以下错误消息:

Failed to find Premain-Class manifest attribute in C:\Users\myuser\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlinx\kotlinx-coroutines-core-metadata\1.3.8-native-mt-1.4.0-rc\5b54677a19ebb20ec7dac0d9e4dfc806df327df\kotlinx-coroutines-core-metadata-1.3.8-native-mt-1.4.0-rc.jar
Error occurred during initialization of VM
agent library failed to init: instrument
Run Code Online (Sandbox Code Playgroud)

我试过

  • 使缓存无效并重新启动
  • 重新导入项目
  • .gradle从项目我的 HOME 目录中删除文件夹

但没有任何帮助。

我能做些什么来解决这个问题?我没有更改可以实现这一点的代码,它在一天前工作。

java debugging gradle kotlin

5
推荐指数
1
解决办法
941
查看次数

在我的 Node.js 项目中使用相当快的操作时,如何协调 husky 预提交挂钩?

我的文件中有一个 husky 预提交钩子package.json

\n
"husky": {\n  "hooks": {\n    "pre-commit": "npx pretty-quick --staged"\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我的项目中还有一个.prettierrc文件:

\n
{\n  "printWidth": 100,\n  "singleQuote": false,\n  "trailingComma": "all"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我的问题是,当我更改文件(已正确格式化)并运行时,npx pretty-quick --staged我会看到我所期望的内容:

\n
  Finding changed files since git revision 88264bc2a.\n  Found 1 changed file.\n\xe2\x9c\x85  Everything is awesome!\n
Run Code Online (Sandbox Code Playgroud)\n

但是当我尝试使用git commit钩子运行相同的命令时,我得到以下输出:

\n
husky > pre-commit (node v14.17.0)\n  Finding changed files since git revision 88264bc2a.\n  Found 1 changed file.\n\xe2\x9c\x8d\xef\xb8\x8f  Fixing up src/somefile.ts.\n\xe2\x9c\x85  Everything is awesome!\n
Run Code Online (Sandbox Code Playgroud)\n

它不应该修复该文件,因为它已经正确格式化。我检查了配置选项pretty-quick,没有选项可以确定它正在使用哪个更漂亮的配置,而且我也无法明确告诉它要使用哪个配置(尽管我只有一个 …

git node.js typescript husky prettier

5
推荐指数
0
解决办法
1157
查看次数