我正试图从蒂姆斯在线评判中解决这个问题.要解决此问题,您需要生成一个包含1 000 000个小写拉丁字母的序列,并在1秒内将其写入标准输入.
使用C++或Java很容易解决这个问题.我这里有python解决方案:
import os
from random import randint
s = ''.join(chr(97 + randint(0, 25)) for i in range(1000000))
os.write(1, bytes(s, 'utf8'))
Run Code Online (Sandbox Code Playgroud)
需要1.7秒:
$ time python3.3 1219.py > /dev/null
real 0m1.756s
user 0m1.744s
sys 0m0.008s
Run Code Online (Sandbox Code Playgroud)
我得到了"超出时间限制"的结果.所以问题是"如何更快地做到这一点?"
UPD1:使用randint(97, 122)减少16ms的时间.现在是1.740s
UPD2: @Martijn Pieters的解决方案需要0.979秒,但它也没有通过测试.
UPD3 Martijn Pieters提出了一个非常好的解决方案,但它仍然很慢:
from sys import stdin
from random import choice
from string import ascii_lowercase
s = ''.join([choice(ascii_lowercase) for _ in range(1000000)])
stdout.write(s)
Run Code Online (Sandbox Code Playgroud)
需要0.924秒
from sys import stdout
from random import …Run Code Online (Sandbox Code Playgroud) 当我在控制台中运行它时,有一个简单的python多处理代码就像魅力一样:
# mp.py
import multiprocessing as mp
def do_smth():
print('something')
if __name__ == '__main__':
ctx = mp.get_context("spawn")
p = ctx.Process(target=do_smth, args=tuple())
p.start()
p.join()
Run Code Online (Sandbox Code Playgroud)
结果:
> $ python3 mp.py
something
Run Code Online (Sandbox Code Playgroud)
然后我用Dockerfile创建了一个简单的Docker容器:
FROM python:3.6
ADD . /app
WORKDIR /app
Run Code Online (Sandbox Code Playgroud)
和docker-compose.yml:
version: '3.6'
services:
bug:
build:
context: .
environment:
- PYTHONUNBUFFERED=1
command: su -c "python3.6 forever.py"
Run Code Online (Sandbox Code Playgroud)
在哪里forever.py:
from time import sleep
if __name__ == '__main__':
i = 0
while True:
sleep(1.0)
i += 1
print(f'hello {i:3}')
Run Code Online (Sandbox Code Playgroud)
现在我forever.py用docker compose 运行: …
为什么这段代码会打印int?
public static void main(String[] args) {
short s = 5;
A(s);
}
public static void A(int a){
System.out.println("int");
}
public static void A(Short a){
System.out.println("short");
}
Run Code Online (Sandbox Code Playgroud) 我试图将json对象反序列化为java bean.我面临的主要问题是,我想object将json字符串的字段视为普通字符串,即使它包含一个可能正确的json对象.json结构是这样的:
{
"type":"user",
"object":{
"id":"1",
...}
}
Run Code Online (Sandbox Code Playgroud)
我如何告诉gson忽略该object值,以便它不被反序列化为一个对象?我希望它只被映射到String我的bean中的普通字段,以便我可以为它配置一个正确的反序列化,一旦我从type字段中获得了类型.
在Linux中,我可以使用以下命令找到当前时间(以毫秒为单位):
date +%s%N
Run Code Online (Sandbox Code Playgroud)
但是在FreeBSD上,我只得到了
[13:38 ]#date +%s%N
1299148740N
Run Code Online (Sandbox Code Playgroud)
如何在FreeBSD中获得以毫秒(或纳秒)为单位的时间?
我可以通过以下方式在matlab中获得修改时间:
>> f = dir('my_filename.dat');
>> f.date
Run Code Online (Sandbox Code Playgroud)
但是我怎么能改变呢?