如何在Perl中将FF02500000000020更改为20000000005002FF?
我能做的方法是:
然后
my $num2=0xFF025000;
my $num3=0x00000020;
my $s2=pack('I!',$num2);
my $s3=pack('I!',$num3);
print unpack ("H*", "$s2") . "\n";
print unpack ("H*", "$s3") . "\n";
Run Code Online (Sandbox Code Playgroud)然后再将两部分组合起来.
有什么简单的方法吗?
我有一个关于 Dijkstra 算法的运行时复杂性的问题。(参见 CLRS 版本 3 中的伪代码):
DIJKSTRA(G, w, s)
1 INITIALIZE-SINGLE-SOURCE(G, s)
2 S ? ?
3 Q ? V[G]
4 while Q != ?
5 do u ? EXTRACT-MIN(Q)
6 S ? S ? {u}
7 for each vertex v ? Adj[u]
8 do RELAX(u, v,w)
Run Code Online (Sandbox Code Playgroud)
我知道第 3 行是 O(V),第 5 行总共是 O(VlogV);第 7 行总共是 O(E),第 8 行隐含了 reduction_key() 因此每个 Relax() 操作的 logV。但是在relax()中,d[v]>d[u]+weight后决定放宽,在调用reduce_key(Q, pos, d[v] ) 用 d[v] 替换 pos 的键?请注意,此查找本身的成本为 O(V)。所以每个 Relax() 应该花费 O(V),而不是 O(logV),对吗?
关于空间复杂度的一个问题:为了比较队列 Q …
我的问题是如何在以下情况下实现位图?
如果图的顶点在最小生成树(MST)中,则标记相应的位; 稍后通过检查位来检查它是否在MST中.
一开始,我正在考虑使用
typedef struct bit_t{
char bit0:1;
} bit;
bit bitmap[num_of_vertex];
Run Code Online (Sandbox Code Playgroud)
并使用位图数组来记录该位;
但后来我发现sizeof(位图[num_of_vertex])是num_of_vertex字节,而不是num_of_vertex/8字节.所以它不像我想象的那样节省空间;
到目前为止我用了
long bit_record = 0;
...
bit_record |= 1<< u;//set vertex as in MST
...
Run Code Online (Sandbox Code Playgroud)
然后用以下方法检查顶点是否在MST中:
static bool is_in_MST(int v, int bit_record){
int mask = 1 << v;
if (mask & bit_record)
return true;
else
return false;
}
Run Code Online (Sandbox Code Playgroud)
尽管代码有效,但如果num_of_vertex大于32,它将无法工作.
一般情况下如何实现上述情况中的位图?
在 VPC 中,我有两个子网,一个是带有一个 EC2 实例的公有子网,另一个是带有 2 个 EC2 实例的私有子网。所有 3 个 EC2 实例都具有相同的 IAM 角色来访问 S3。
如果我登录并运行,公有子网中的EC2实例可以直接访问S3 aws s3 ls。但是,私有子网中的两个 EC2 实例都不能。可能是什么原因?
私有子网中的 EC2 使用接受来自整个 VPC 的流量的安全组。
公共子网中的 EC2 使用接受来自Anywhere 的流量的安全组。
所有 3 个 EC2 实例使用相同的路由表、相同的 NACL、相同的 IAM 角色以及策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
如果我在私有子网的 EC2 中手动创建凭证配置文件,则它可以登录并访问“aws s3 ls”。
更新: 私有子网的路由表确实有一个 VPC 终端节点。路由表为:
其中,#3表示EC2可以通过VPC端点访问S3。添加 #2 是因为 ELB 位于 EC2 实例前面并且必须访问互联网。
另一个观察结果:如果我在私有子网中启用分配公共 IP …
我选择这个亚马逊Linux:亚马逊Linux AMI 2017.09.1(HVM),SSD卷类型 - ami-1a033c7a.我使用命令安装了Ansible:
sudo pip install ansible,
Run Code Online (Sandbox Code Playgroud)
它显示安装完成.当我运行ansible --version时,它显示:
ansible 2.4.1.0
config file = None
configured module search path = [u'/home/ec2-
user/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python2.7/site-
packages/ansible
executable location = /usr/local/bin/ansible
python version = 2.7.12 (default, Nov 2 2017, 19:20:38) [GCC 4.8.5
20150623 (Red Hat 4.8.5-11)]
Run Code Online (Sandbox Code Playgroud)
为什么config file = None?它不应该显示/etc/ansible/ansible.cfg?我没有看到/etc/ansible/hosts,甚至没有文件夹/etc/ansible.我安装正确,文件夹在哪里/etc/ansible?
假设我需要启用一个服务然后启动该服务(例如某个Web服务器),是否应该创建一个任务来启用该服务,然后创建另一个任务来启动该服务?或者我应该创建一个任务来启用该服务,在这个服务,创建一个通知,这将触发处理程序来启动服务?
如果使用通知处理程序的策略,那么问题是,如果该服务被成功启用,但不知何故没有启动,再后来,当我再次运行剧本上。由于该服务已启用,因此将不再启动。
我认为将它们放在单独的任务中也许更好?通常,人们如何在Ansible中实现它们?
如果单独编写任务,这是我的代码:
tasks:
- name: enable airflow service
systemd:
name: airflow-worker.service
enabled: yes
- name: start airflow service
service:
name: airflow-worker
state: started
Run Code Online (Sandbox Code Playgroud) 我有以下Python代码来检测EC2是否真正启动。但当“实例状态”显示正在运行时,它就完成了。我应该使用哪个 API 函数来阻止,直到 EC2“状态检查”显示“2/2 检查已通过”
ec2 = boto3.resource('ec2')
instance = ec2.Instance(instanceid)
instance.wait_until_running()
Run Code Online (Sandbox Code Playgroud) 我想设置 S3 存储桶的生命周期规则,以便存储桶中的每个文件在生成后 7 天将被删除。
如果我设置生命周期规则如下(下面是terraform代码,类似于控制台设置,所以我这里只用它),从今天起7天后,“test”桶中的所有文件是否会被删除,或者每个文件都将被删除因为它们是在不同的日期创建的,所以在不同的日期删除?我希望它们在不同的日期被删除,而不是一起被删除。
顺便说一句,我想我不需要配置:永久删除以前的版本,因为我的 s3 没有启用版本。如果我错了,请纠正我。
resource "aws_s3_bucket" "s3" {
bucket = "test"
lifecycle_rule {
id = "remove_after_7d"
enabled = true
expiration {
days = 7
}
}
}
Run Code Online (Sandbox Code Playgroud) 我创建了一个 AWS S3 存储桶,并在属性中启用了“默认加密”。那么我是否还需要创建类似于下面的存储桶策略?
注意我只是想让s3以一般的方式加密,没有非常特殊的要求。
"Statement": [
{
"Sid": "DenyIncorrectEncryptionHeader",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::s3_bucket_name/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
},
{
"Sid": "DenyUnEncryptedObjectUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::s3_bucket_name/*",
"Condition": {
"Null": {
"s3:x-amz-server-side-encryption": "true"
}
}
}
]
Run Code Online (Sandbox Code Playgroud) 我想在 Kubernetes pod 中运行一个本地脚本,然后将输出结果设置为一个 linux 变量
这是我尝试过的:
# if I directly run -c "netstat -pnt |grep ssh", I get output assigned to $result:
cat check_tcp_conn.sh
#!/bin/bash
result=$(kubectl exec -ti <pod_name> -- /bin/bash -c "netstat -pnt |grep ssh")
echo "result is $result"
Run Code Online (Sandbox Code Playgroud)
我想要的是这样的:
#script to be called:
cat netstat_tcp_conn.sh
#!/bin/bash
netstat -pnt |grep ssh
#script to call netstat_tcp_conn.sh:
cat check_tcp_conn.sh
#!/bin/bash
result=$(kubectl exec -ti <pod_name> --
/bin/bash -c "./netstat_tcp_conn.sh)
echo "result is $result
Run Code Online (Sandbox Code Playgroud)
结果显示result is /bin/bash: ./netstat_tcp_conn.sh: No such file …
amazon-s3 ×3
amazon-ec2 ×2
ansible ×2
algorithm ×1
amazon-iam ×1
bash ×1
bitmap ×1
boto3 ×1
c ×1
c++ ×1
dijkstra ×1
kubernetes ×1
perl ×1
terraform ×1