小编Moi*_*ira的帖子

缓解POST响应的"最佳"练习

所以这里没什么新鲜的,我只是想弄清楚一些,似乎无法在其他帖子中找到任何内容.

我正在创造一个新的资源,说:

/books (POST)
Run Code Online (Sandbox Code Playgroud)

身体:

{
  title: 'The Lion, the Witch and the Wardrobe',
  author: 'C. S. Lewis'
}
Run Code Online (Sandbox Code Playgroud)

我知道我应该返回201(Created),其中包含新资源的Location头:

Location: /books/12345
Run Code Online (Sandbox Code Playgroud)

我似乎无法回答的问题是服务器应该在体内返回什么.

我经常做这种反应:

{
  id: 12345,
  title: 'The Lion, the Witch and the Wardrobe',
  author: 'C. S. Lewis'
}
Run Code Online (Sandbox Code Playgroud)

我这样做有几个原因:

  1. 我为像angularjs这样的前端框架编写了api.在我的特定情况下,我使用角度资源,我经常只需要资源的ID来找到它.如果我没有在响应正文中返回id,我需要从Location头解析它.
  2. 在所有书籍的GET中,我通常返回整个对象而不仅仅是id.从这个意义上说,我的客户端代码不必区分从哪里获取id(位置标题或正文).

现在我知道我真的在这里的灰色区域,但大多数人都说回归整个资源是"坏"的做法.但是,如果服务器更改/添加信息到资源,该怎么办?它肯定会添加id,但也可能添加其他内容,如时间戳.在我不返回整个资源的情况下,最好是进行POST,返回id,然后让客户端执行GET以获取新资源.

rest angularjs angularjs-resource

194
推荐指数
2
解决办法
15万
查看次数

如何将Char转换为Int?

所以我有一个String看起来像的整数"82389235",但我想迭代它以将每个数字分别添加到a MutableList.但是,当我按照我认为可以处理的方式进行操作时:

var text = "82389235"

for (num in text) numbers.add(num.toInt())
Run Code Online (Sandbox Code Playgroud)

这会将与字符串完全无关的数字添加到列表中.然而,如果我用println它将它输出到控制台,它会很好地遍历字符串.

如何正确转换CharInt

list character data-conversion kotlin

15
推荐指数
4
解决办法
9625
查看次数

Kotlin替代javah

javah因为JDK 8已弃用,将/已经JDK 10移除,并且根据JEP 313和弃用文本,javac-h标志应替代地使用:

警告:该javah工具计划在下一个主要JDK版本中删除.该工具已被javacJDK 8中添加的'-h'选项取代.建议用户迁移到使用javac'-h'选项; 有关更多信息,请参阅javac手册页.

问题是,javah对编译.class文件进行javac操作,同时对源文件(即.java文件)进行操作.

javah与Kotlin和external函数一起正常工作,因为一切都最终编译为Java字节码,但由于在使用Kotlin时没有任何Java源文件,我看不出任何方法javac -h可行.

javahKotlin 有替代品或解决方法吗?

java java-native-interface kotlin

12
推荐指数
1
解决办法
1167
查看次数

反转队列<Integer>并将其转换为int数组

我有一个Queue<Integer>声明为Queue<Integer> queue=new LinkedList();,我需要反转其中的元素顺序,然后将其转换为int数组.我在下面写了代码:

Collections.reverse((List)queue);
int[] res=queue.stream().mapToInt(Integer::intValue).toArray();
Run Code Online (Sandbox Code Playgroud)

此代码有两个问题:

  1. 表达铸造(List)queue;
  2. 我想知道是否有单线解决方案.

那么我们有更优雅的方式来做到这一点吗?


澄清问题:

队列是否反转并不重要.我需要的是反转元素的int数组.

java queue collections

11
推荐指数
3
解决办法
996
查看次数

BINARY_CHECKSUM - 取决于行数的不同结果

我想知道为什么BINARY_CHECKSUM函数返回相同的不同结果:

SELECT *, BINARY_CHECKSUM(a,b) AS bc
FROM (VALUES(1, NULL, 100),
            (2, NULL, NULL),
            (3, 1, 2)) s(id,a,b);

SELECT *, BINARY_CHECKSUM(a,b) AS bc
FROM (VALUES(1, NULL, 100),
            (2, NULL, NULL)) s(id,a,b);
Run Code Online (Sandbox Code Playgroud)

输出继电器:

+-----+----+------+-------------+
| id  | a  |  b   |     bc      |
+-----+----+------+-------------+
|  1  |    | 100  |        -109 |
|  2  |    |      | -2147483640 |
|  3  | 1  |   2  |          18 |
+-----+----+------+-------------+

-- -109 vs 100
+-----+----+------+------------+
| id  | a  |  b …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

10
推荐指数
1
解决办法
388
查看次数

如何使用 HttpClient 处理 HTTP/2 GOAWAY?

我试图每隔几分钟不断地向 REST API 发送 GET 和 POST 请求。问题是,在恰好 1000 个请求之后,我收到了一个GOAWAY帧(和一个IOException):

GOAWAY 帧(类型=0x7)用于启动连接关闭或发出严重错误情况的信号。
HTTP/2 规范


我做了一些研究,发现 1000 个请求不仅是nginx 的默认最大值,Cloudfront(相关的 Chromium 问题)和 Discord 也表现出相同的行为。

我尝试使用具有默认 HTTP/2 配置的本地 nginx 服务器重现此问题:

服务器 {
    听 443 http2 ssl;
    http2_max_requests 1000;
    ...
}
var client = HttpClient.newBuilder()
        .version(HttpClient.Version.HTTP_2)
        .build();

for (var i = 0; i < 1100; i++) {
    var url = URI.create(String.format("https://localhost/images/test%d.jpg", i));

    var request = HttpRequest.newBuilder().uri(url).build();

    client.send(request, HttpResponse.BodyHandlers.discarding());
    System.out.printf("Image %d processed%n", i);
}
Run Code Online (Sandbox Code Playgroud)

在大约 1000 个请求之后,我收到了 …

java http2 java-http-client java-11

10
推荐指数
1
解决办法
6843
查看次数

带有+ =和 - =的Kotlin IllegalAccessError用于委托接口

我已经定义了这个类:

class NeverNullMap<K, V>(private val backing: MutableMap<K, V> = mutableMapOf(), val default: () -> V): MutableMap<K, V> by backing {
    override operator fun get(key: K): V = backing.getOrPut(key, default)
}
Run Code Online (Sandbox Code Playgroud)

我可以像这样完美地使用它:

fun main(args: Array<String>) {
    val myMap = NeverNullMap<String, Int> {0}
    println(myMap["test"])
    myMap["test"] = myMap["test"] + 10
    println(myMap["test"])
}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,输出是:

0
10
Run Code Online (Sandbox Code Playgroud)

但当我尝试将其更改为:

fun main(args: Array<String>) {
    val myMap = NeverNullMap<String, Int> {0}
    println(myMap["test"])
    myMap["test"] += 10
    println(myMap["test"])
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

Exception in thread "main" java.lang.IllegalAccessError: tried to access method kotlin.collections.MapsKt__MapsKt.set(Ljava/util/Map;Ljava/lang/Object;Ljava/lang/Object;)V …
Run Code Online (Sandbox Code Playgroud)

kotlin

8
推荐指数
1
解决办法
220
查看次数

不可变类型是否需要复制构造函数?

说我有一个不可变的DecimalNumber类:

public final class DecimalNumber {

    public final String str;

    public DecimalNumber(String str) { this.str = str; }
    public DecimalNumber(DecimalNumber copy) { this(copy.str); }

    public boolean isZero() {...}

    public DecimalNumber add(DecimalNumber other) {...}

    ...

}
Run Code Online (Sandbox Code Playgroud)

我决定这样实施add:

public DecimalNumber add(DecimalNumber other) {

    if (other.isZero())
        return /* the same object */

    ...

}
Run Code Online (Sandbox Code Playgroud)

我应该返回this(减少内存使用)还是复制对象new DecimalNumber(this)

我认为简单地返回this应该没问题,但是创建一个新对象是有益还是有理由?或者它是否是首选?

java immutability

6
推荐指数
1
解决办法
511
查看次数

Kotlin:可以通过元编程在编译期间修改函数吗?

在JavaScript/Python等动态语言中,可以在运行时覆盖或"修改"函数.例如,为了修改alertJS中的函数,可以这样做:

const _prev_alert = window.alert;
window.alert = function() {
  _prev_alert.apply(this, arguments);
  console.log("Alert function was called!");
}
Run Code Online (Sandbox Code Playgroud)

这将输出"调用警报功能!" 每次alert调用函数时都到控制台.

现在,显然这样的事情在Kotlin-JVM或Kotlin-Native的运行时期间是不可能的,因为它们具有静态特性.但是,对于那些相同的语言,是否有可能在编译期间修改未编译的函数?我不是指来自库的预编译函数,而是我在我正在开发的同一个项目中编写的函数.

例如,假设我有一个我写的函数get_number.我可以修改get_number为返回一个不同的数字而不改变它在main中的调用方式而不直接修改它的代码吗?(或者有一种方法我可以写原件,get_number所以修改可能在线下吗?)

fun main(args: Array<String>) {
    println(get_number())
}

fun get_number(): Int {
    return 3
}

// Without modifying the code above, can I get main to print something besides 3?
Run Code Online (Sandbox Code Playgroud)

我一直在阅读Kotlin的Annotations and Reflections元编程,所以也许那些可以控制编译器的行为并覆盖get_number代码?或者这是完全的疯狂,这种性质的唯一方法是通过在Kotlin上开发我自己的,独立的元编程包装器?

此外,只是为了澄清,这个问题不是关于Kotlin-JS,答案(如果存在)应该适用于Kotlin-JVM或Native.

overloading self-modifying kotlin kotlin-extension

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

将字节数组转换为十六进制字符串

令人惊讶的是(对我来说),这段代码没有做我想要的:

fun ByteArray.toHexString() : String {
    return this.joinToString("") { it.toString(16) }
}
Run Code Online (Sandbox Code Playgroud)

结果Byte是有符号的,所以你得到单个字节的负十六进制表示,这导致完全虚假的最终结果.

此外,Byte.toString不会填充您想要的前导零.

什么是最简单的(没有额外的库,理想情况下没有扩展名).最有效的修复?

arrays string hex byte kotlin

5
推荐指数
3
解决办法
6042
查看次数