所以这里没什么新鲜的,我只是想弄清楚一些,似乎无法在其他帖子中找到任何内容.
我正在创造一个新的资源,说:
/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)
我这样做有几个原因:
现在我知道我真的在这里的灰色区域,但大多数人都说回归整个资源是"坏"的做法.但是,如果服务器更改/添加信息到资源,该怎么办?它肯定会添加id,但也可能添加其他内容,如时间戳.在我不返回整个资源的情况下,最好是进行POST,返回id,然后让客户端执行GET以获取新资源.
所以我有一个String看起来像的整数"82389235",但我想迭代它以将每个数字分别添加到a MutableList.但是,当我按照我认为可以处理的方式进行操作时:
var text = "82389235"
for (num in text) numbers.add(num.toInt())
Run Code Online (Sandbox Code Playgroud)
这会将与字符串完全无关的数字添加到列表中.然而,如果我用println它将它输出到控制台,它会很好地遍历字符串.
如何正确转换Char为Int?
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 有替代品或解决方法吗?
我有一个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)
此代码有两个问题:
(List)queue;那么我们有更优雅的方式来做到这一点吗?
澄清问题:
队列是否反转并不重要.我需要的是反转元素的int数组.
我想知道为什么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) 我试图每隔几分钟不断地向 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 个请求之后,我收到了 …
我已经定义了这个类:
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) 说我有一个不可变的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应该没问题,但是创建一个新对象是有益还是有理由?或者它是否是首选?
在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.
令人惊讶的是(对我来说),这段代码没有做我想要的:
fun ByteArray.toHexString() : String {
return this.joinToString("") { it.toString(16) }
}
Run Code Online (Sandbox Code Playgroud)
结果Byte是有符号的,所以你得到单个字节的负十六进制表示,这导致完全虚假的最终结果.
此外,Byte.toString不会填充您想要的前导零.
什么是最简单的(没有额外的库,理想情况下没有扩展名).最有效的修复?
kotlin ×5
java ×4
angularjs ×1
arrays ×1
byte ×1
character ×1
collections ×1
hex ×1
http2 ×1
immutability ×1
java-11 ×1
list ×1
overloading ×1
queue ×1
rest ×1
sql ×1
sql-server ×1
string ×1
t-sql ×1