我理解以下代码可以(可能不是非常有效)在Java中找到一个免费的TCP端口:
public static int findFreePort() {
int port;
try {
ServerSocket socket= new ServerSocket(0);
port = socket.getLocalPort();
socket.close();
} catch (Exception e) { port = -1; }
return port;
}
Run Code Online (Sandbox Code Playgroud)
我不明白的原因是,为什么(或者是否)对这种方法的两次成功调用保证返回两个不同的端口.例如,这里假设(搜索findFreePort
方法调用).
它是否正确?
我用Paint.Net插件调试了一些问题,当有几个线程从单个实例调用一个方法时,我偶然发现了Random类的一些问题.
出于一些奇怪的原因,似乎如果我不阻止并发访问,通过同步被调用的方法,我的Random实例开始表现......随机(但在不好的意义上).
在下面的示例中,我创建了几百个线程,它们可以重新调用一个Random对象.当我运行它时,我有时(不总是,但几乎)得到明显错误的结果.如果我取消注释Synchronized
方法注释,问题永远不会发生.
using System;
using System.Threading;
using System.Runtime.CompilerServices;
namespace testRandom {
class RandTest {
static int NTIMES = 300;
private long ac=0;
public void run() { // ask for random number 'ntimes' and accumulate
for(int i=0;i<NTIMES;i++) {
ac+=Program.getRandInt();
System.Threading.Thread.Sleep(2);
}
}
public double getAv() {
return ac/(double)NTIMES; // average
}
}
class Program
{
static Random random = new Random();
static int MAXVAL = 256;
static int NTREADS = 200;
//[MethodImpl(MethodImplOptions.Synchronized)]
public static int getRandInt() …
Run Code Online (Sandbox Code Playgroud) 如果我没有弄错的话,所有关于NSIS docs(例如ReadEnvStr
)中的环境变量(EV)的讨论都会处理目标计算机中的EV:所有这些都发生在安装时.
我想知道在编译时是否支持在开发人员(构建)机器上访问EV .具体来说,假设我有
!define SRCDIR "C:\progs\version1\src"
...
File /r "${SRCDIR}\*.*"
Run Code Online (Sandbox Code Playgroud)
而我宁愿写信
!define SRCDIR "%{PROG_DIR}\src"
Run Code Online (Sandbox Code Playgroud)
(或类似的东西),其中PROG_DIR
是环境变量.可以这样做吗?
我试图澄清一些关于 React 中布尔属性的混淆(最好来自权威来源)。
假设有MyComponent
几个布尔道具prop1
,prop2
...
首先:似乎布尔道具就像其他道具一样:您可以在defaultProps 或解构 params 中定义默认值:
const MyComponent = ({ prop1, prop2 }) => (
...
)
MyComponent.defaultProps = {
prop1: false,
prop2: true,
}
Run Code Online (Sandbox Code Playgroud)
或者等效地(不?)
const MyComponent = ({ prop1 = false, prop2 = true }) => (
...
)
Run Code Online (Sandbox Code Playgroud)
不清楚的是如何传递值。再一次,自然的“React 风格”似乎是
<MyComponent prop1={ BOOLEAN_EXPRESION1 } prop2={ BOOLEAN_EXPRESION2 } />
Run Code Online (Sandbox Code Playgroud)
...包括静态文字( false/true
)。
但是,它还指出传递布尔属性的正确(推荐?)方法是属性的存在/不存在,正如HTML5 规定的那样。
所以,而不是<MyComponent prop1={true} prop2={false} />
,应该写<MyComponent prop1 …
我正在使用 Formik 和 yup 验证,遵循以下模式:
const handleSubmit = async (values, { setStatus }) => {
setStatus(''); // clean errors messages
try {
... do submit work ...
const res = await sendData( convertValues(values)); //
... more work
} catch (e) {
console.error(e);
setStatus('an error occurred '...);
}
};
const validationSchema = Yup.object({
code: Yup.string().required(t('Required')),
....
});
return (
<Formik onSubmit={handleSubmit} initialValues={initialValues} validationSchema={validationSchema}>
{({ setFieldValue, status }) => (
<Form>
....
<MyErrorComponent msg={status} />
</Form>
)}
</Formik>
);
Run Code Online (Sandbox Code Playgroud)
这在这种情况下有问题:
handleSubmit …
我需要在旧的16位MS-DOS中用C进行一些基本的串行编程.我知道基础知识,我编写了一些串行通讯.在几十年前的某个微控制器中,但现在已经是古老的知识了,找到信息并不容易.我正在寻找一些可靠的(不一定是免费或开源)库或代码,以及一般信息.
假设我正在使用Win7机器进行开发,我也在寻找有关如何测试它的一些说明/建议.例如,如果可以模拟从我的Win7机器中的控制台终端到在DOSBOX环境中运行我的DOS程序的模拟COM端口的零调制解调器连接,或类似的东西.
我想在Google appengine中使用一个小型图书馆; 其中一个类(比如说MyClass.writeToFile()
)使用的方法之一,java.io.FileOutputStream
在列入黑名单的类中(好吧,不是白名单).
这是否意味着MyClass
在类加载时会失败,或者只是在(如果)我尝试调用违规方法时会失败?在什么时候检查("FileOutputStream不允许")完成?当加载MyClass
文件并检测到它"引用/依赖于"FileOutputStream时(我不知道这是否在MyClass
字节码中声明)?或者在 第一次FileOutputStream
调用时尝试加载MyClass.writeToFile()
?
此外,假设该方法MyClass.writeToFile()
对我的库不是必不可少的(但是MyClass
),是否有一些解决方法,或者应该重构库(并构建,比如两个不同的罐子,一个完整的成熟和其他适合沙盒的)?
Deflater.setLevel()对我来说不能正常工作.
static void test1() throws Exception {
byte[] output = new byte[20];
Deflater compresser = new Deflater();
// compresser.setLevel(Deflater.BEST_COMPRESSION);
compresser.setInput("blah".getBytes("UTF-8"));
compresser.finish();
int len = compresser.deflate(output);
System.out.println("len="+ len+ " " +Arrays.toString(output));
}
Run Code Online (Sandbox Code Playgroud)
上面的工作对我来说没问题(Java 7),但是当我取消注释该compresser.setLevel()
行时,它会中断(deflate()
返回0个字节).任何压缩级别都会发生同样的情况,除了DEFAULT
.更具体地说,当级别集与构造函数中设置的(显式或隐式,如此处)相同时,它只"工作"(相反,它是无害的) - 也就是说,它只能在它无用时才能使用.
请参阅Ideone上的示例.
这个问题指出了同样的问题,并且接受的答案基本上说:不要用setter设置级别,在构造函数中执行.远非令人满意,IMO - 为什么setLevel()
存在?它坏了还是我们错过了什么?
该文档“的Pipenv高级用法”,在“指定基本上什么”一节中,介绍了如何包括包装的要求,有条件的操作系统平台,在Pipfile
,如:
pywinusb = {version = "*", sys_platform = "== 'win32'"}
Run Code Online (Sandbox Code Playgroud)
根据平台的不同,当想要为包指定不同的版本或选项时,不清楚该怎么做。
具体来说,我有这个要求:
faust = {version=">=1.10.1", extras=["aiodns", "ciso8601", "cython"]}
Run Code Online (Sandbox Code Playgroud)
我想排除ciso8601
Windows 中的可选附加项。
如果我写
faust = {version=">=1.10.1", extras=["aiodns", "ciso8601", "cython"], platform_system = "!= 'Windows'"}
faust = {version=">=1.10.1", extras=["aiodns", "cython"], platform_system = "== 'Windows'"}
Run Code Online (Sandbox Code Playgroud)
我收到错误: tomlkit.exceptions.KeyAlreadyPresent: Key "faust " already exists.
另外,我想在setup.py
(install_requires
部分) 中做同样的事情。