Python实现二分查找法

基本思想:对于一个有序数组,从数组中间元素开始与target元素进行比较,target较大则到中间元素的右半部分继续二分查找,target较小则到中间元素的左半部分继续二分查找,相等则查找到了target缘故。

注意:
(1)必须是有序数组
(2)target元素可能找不到

两种实现方法:注意索引边界的不同。

def binarySearch(list, target):
	left = 0
	right = len(list) - 1  
	#在list[left...right]里查找target,注意是左闭右闭
	while left <= right:
		mid = (right + left) // 2    #取中间元素索引
		if list[mid] == target:
			return mid
		elif target > list[mid]
			left = mid + 1     #到list[mid + 1 ...right]里查找
		else:  #target < list[mid]
			right = mid - 1    #到list[left ...mid - 1]里查找
	return -1    #未找到target元素
def binarySearch(list, target):
	left = 0
	right = len(list)
	#在list[left...right)里查找target,注意是左闭右开
	while left < right:
		mid = (right - left) // 2 + left    #防止上面的写法整型溢出
		if list[mid] == target:
			return mid
		elif target > list[mid]
			left = mid + 1     #到list[mid + 1 ...right)里查找
		else:  #target < list[mid]
			right = mid        #到list[left ...mid)里查找
	return -1     #未找到target元素

二分查找法的时间复杂度:O(logn)

3、循环不变量:在循环中不改变的量,即在循环开始和在循环迭代过程中永远保持不变的条件。

比如二分查找的第一个写法里循环开始和在循环迭代过程中要一直保持在list[left…right]左闭右闭的范围里查找target,这个条件就是一个循环不变量。

其他数据结构基本算法的Python实现版本可从github:全python实现的数据结构与算法中获取

如何将树莓派CM4的Wi-Fi改为外置天线

树莓派 CM4 在设计时考虑到兼容性,系统默认用的是内置 PCB 天线。那怎么设置,切换到外置 WiFi 天线呢?

首先,你得把树莓派 CM4 天线(Antenna Kit)给焊上去,也就是下图那个黄色圆点。 

然后编辑 /boot/config.txt 文件。

在文件末尾加入一行配置:

dtparam=ant2

然后重启 树莓派CM4 ,让配置生效即可。

一个外置天线,大概三十多块钱人民币吧。

一条命令搞定全志XR806编译环境

XR806广泛应用于家电、安防等产品,比如以下案例。

  1. 智能家电,如空凋、冰箱、洗衣机,通过无线模组,通过家电<->服务器<->手机的连接关系,实现远程控制。
  2. IPC。即网络摄像头,网络编码模块将模拟摄像机采集到的模拟视频信号编码压缩成数字信号,从而可以直接接入网络交换及路由设备。
  3. 智能门锁。XR806特有的超低功耗技术,保证了稳定连接的前提下也保证了续航。

但是编译环境的设置比较麻烦,这里提供容器化安装方式,一条命令装好(使用前必须先安装Docker)

省的大家又是找源代码,又是配置环境了。

docker pull verdureorange/ubuntu_xr806:v1

Ubuntu 20.04 for Allwinner XR806.

Integrated demo codes and compilation tools, easy to quickly generate image package.

Teaching video: https://youtu.be/maNb565bnyI

Author: Medivh

If you have any questions, you can send me an email. Email:verdureorange@gmail.com

Linux /dev/mapper/ubuntu–vg-ubuntu–lv磁盘满了怎么解决

在安装Ubuntu Server后,经常会发现磁盘没用到一半突然满了。

这大概率是你在安装Ubuntu Server的时候采用了LVM模式。

可以先用指令 df -h 查看磁盘情况。

root@mysheep:/var/lib/docker# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               955M     0  955M   0% /dev
tmpfs                              198M  1.2M  196M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  3.9G  3.5G  237M  94% /
tmpfs                              986M     0  986M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              986M     0  986M   0% /sys/fs/cgroup
/dev/loop0                          90M   90M     0 100% /snap/core/8039
/dev/loop1                          89M   89M     0 100% /snap/core/7270
/dev/sda2                          976M   77M  832M   9% /boot
tmpfs                              198M     0  198M   0% /run/user/1000

所以现在需要扩容,用指令显示存在的卷组,vgdisplay

root@mysheep:/var/lib/docker# vgdisplay
  --- Volume group ---
  VG Name               ubuntu-vg
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <19.00 GiB
  PE Size               4.00 MiB
  Total PE              4863
  Alloc PE / Size       1024 / 4.00 GiB
  Free  PE / Size       3839 / <15.00 GiB
  VG UUID               lhPVeA-sFX5-5sQ6-2mAq-VR41-uvjU-YrPzFI

看到这一行,发现还能扩容:

Free PE / Size 3839 / <15.00 GiB

这就是可以扩充的大小。

lvextend -L 120G /dev/mapper/ubuntu--vg-ubuntu--lv     //增大至120G
lvextend -L +20G /dev/mapper/ubuntu--vg-ubuntu--lv     //增加20G
lvreduce -L 50G /dev/mapper/ubuntu--vg-ubuntu--lv      //减小至50G
lvreduce -L -8G /dev/mapper/ubuntu--vg-ubuntu--lv      //减小8G
lvresize -L  30G /dev/mapper/ubuntu--vg-ubuntu--lv     //调整为30G
resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv            //执行调整

上面是示范,可以根据自身情况来进行扩容,最后执行最后的调整指令,然后就扩充成功了。

oot@mysheep:/var/lib/docker# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               955M     0  955M   0% /dev
tmpfs                              198M  1.2M  196M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  9.8G  3.5G  5.9G  37% /
tmpfs                              986M     0  986M   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              986M     0  986M   0% /sys/fs/cgroup
/dev/loop0                          90M   90M     0 100% /snap/core/8039
/dev/loop1                          89M   89M     0 100% /snap/core/7270
/dev/sda2                          976M   77M  832M   9% /boot
tmpfs                              198M     0  198M   0% /run/user/1000

文章来自:https://blog.csdn.net/Fish_Sheep/article/details/103325378

急招:软件安全验证工程师(安谋科技)

地点:

深圳 or 上海市(均可)

时间:

2022年3月-12月

职位描述:

作为安全团队的软件验证工程师,你不仅将是验证概念者,还将与开发工程师一起参与复杂系统的设计,并对软件质量提供有效和深入的见解。 通过不断提高验证执行效率和测试代码覆盖率,你将成为软件质量的强有力的保障。  

角色和责任:

一、安全软件的验证案例设计和实现,验证执行,bug报告和跟踪。

二、与研发人员深度合作,确保产品迭代质量。

三、持续优化和增强验证用例/代码。

四、严格执行测试流程,为流程改进提供建设性意见。  

五、设计和实现自动测试框架和测试用例。  

要求:

一、熟悉软件测试方法,流程和机制,安全栈优先。  

二、包括以下验证目标:固件,RTOS(例如,mbed或Zephyr), Linux内核/驱动程序,网络堆栈,中间件。  

三、熟悉微服务的概念,有实际验证经验者优先。  

四、有设计/实现自动测试框架开发的经验。  

五、理解移动和物联网设备中的基本安全概念(例如加密方案)。  

六、开放,自我激励和团队合作精神。  

七、3~5年软件验证经验。  

联系方式:

有意者可将简历发送至:Will.Wang@armchina.com

俄准备启用本国互联网“Runet” 未来几天或将与全球断开

俄《消息报》3月1日报道称,俄罗斯对乌克兰发起特别军事行动后,西方国家正对俄实施各种制裁。一些国家的黑客频繁对俄罗斯发动网络攻击,以阻止它们正常运行。未来几天,俄罗斯可能与全球互联网断开。

针对网络威胁,俄罗斯政府准备启动自己的“大局域网”Runet。俄联邦消费者权益保护和公益监督局称,目前正在与国家计算机事故协调中心进行协调,以应对黑客对关键信息基础设施的攻击,并做好启用Runet的准备。

Runet是俄罗斯出于国家网络防御目的而构建的一个脱离全球互联网的内部局域网。俄总统普京早在2019年5月就签署了《互联网主权法》,根据这一法律,俄罗斯互联网基础设施将逐步摆脱对境外网络的依赖,尤其是在遭受外部攻击时,俄罗斯可以独立运行国内互联网。

此前,俄罗斯相关部门多次进行过互联网断网测试并取得成功。俄罗斯认为,在社交媒体影响力和网络攻击日益增加的背景下,建立“主权互联网”是必不可少的举措。

俄罗斯五年前已布局“主权互联网”

早在2019年5月,俄罗斯总统普京就签署了了《主权互联网法》(Sovereign Internet Law),该法律通过让互联网流量经由政府控制的基础设施路由来传输,并创建一套国家域名系统,以加强对俄罗斯互联网的控制,赋予俄罗斯政府对互联网更多的控制权。

甚至在当年底,俄罗斯政府还宣布已经完成了国家断网测试,并且测试持续了数日,普通用户都没有注意到任何变化。俄通信部还与相关政府部门及企业举行了首次全俄互联网、物联网和通信网运行稳定保障演习,目的是保障俄网络在任何情况下都能无间断运行。

该测试旨在确保俄罗斯的国家互联网基础设施——“俄罗斯网络”(RuNet) 能够在不接入全球 DNS 系统和外部互联网的情况下都能无间断正常运行,甚至在遭遇外部力量断网时,俄境内的互联网仍可安全运行。

在断网测试过程中,依次切断了主要电信公司和ISP与全球互联网的连接,断网后的互联网流量在俄内部重新路由,像使用本地服务器,通过备份重建互联网的基础设施一样,也将使RuNet成为世界上最大的内部网。

为了做到这一点,该法案要求所有本地互联网服务提供商在俄罗斯通信部的管理下,通过战略要道重新路由所有的互联网流量,而这些“扼流点”既可以充当俄罗斯外部互联网连接的“开关”,也可以作为互联网监控设备保护数据隐私,类似于我国的“防火墙”技术。

当然,俄方没有透露有关测试的任何技术细节以及测试的具体内容。但当年的报道称,俄方测试了几种断开连接的场景,以确保内部网能够在没有外部互联网的情况下独立运行。这些测试包含了通信的稳定性、蜂窝通信的安全性、保护个人数据和拦截流量问题,以及使用物联网的安全性。

巧合的是,其中一项测试模拟了来自外国的恶意网络攻击的场景,与俄罗斯现在面对的情况几乎如出一辙。​