ADB命令
ADB命令abd安装应用1adb install app.apk
adb查看已装应用列表1adb shell pm list package
查看当前正在运行的APK的包名12adb shell logcat | grep cmp=#运行命令后打开想要获取的app即可
查看系统运行时的日志信息1234# DEBUG 信息adb logcat *:D# ERROR 信息adb logcat *:E
有莫名的设备连接1adb kill-server
截图并传回电脑12adb shell /system/bin/screencap -p /sdcard/screenshot.pngadb pull /sdcard/screenshot.png ~/Desktop/
MyHomeLab:2-在esxi中安装openWrt
2-在esxi中安装openWrt开启OpenWrt的wan口访问和ssh
使用以下脚本,chmod +x 赋予权限后运行即可
1234567891011121314151617181920212223242526272829#!/bin/shFILE="/etc/config/firewall"ifecho -e "config rule" >>$FILEecho -e "\toption target 'ACCEPT'" >>$FILEecho -e "\toption src 'wan'" >>$FILEecho -e "\toption proto 'tcp'" >>$FILEecho -e "\toption dest_port '22'" >>$FILEecho -e "\toption name ...
MyHomeLab:1-总纲
1-总纲前沿一时兴起购入了HPE MicroServer Gen10 Plus微型服务器,琢磨着用其运行我的各种项目与NAS等系统,故有此折腾文档。
系统结构
整体是用了ESXI做虚拟化,在ESXI中目前有openWer和Ubuntu两个虚拟机,OpenWrt负责整个esxi内部的网络管理、内网穿透、翻墙等;Ubuntu则通过docker运行各项应用。
网络拓扑目前的网络拓扑如下:整个机器只使用一个物理网口,连接外部路由器,再通过虚拟交换机1连接上OpenWrt,因此OpenWrt是可以和外部路由器联通的,也是整个ESXI虚拟化的所有的系统的网络出入口。OpenWrt的另一边接虚拟交换机2,此时OpenWrt充当了内网的网关、DHCP等。整个内网网段为10.0.0.1/255.255.255.0;其余所有虚拟机如Ubuntu或后续可能会加上的NAS等都会连接到虚拟交换机2中。
VMware Fusion设置NAT+静态ip
VMware Fusion设置NAT+静态ip[toc]
首先为VMware Fusion建立NAT网络VMware Fusion>偏好设置>网络>➕>☑️允许该网络上的虚拟机连接到外部网络(NAT)》手动配置子网ip,如:192.168.33.0子网掩码不变255.255.255.0
mac主机上检查vmnet配置1cat /Library/Preferences/VMware\ Fusion/networking
会看到VNET相关配置
mac主机上检查vmnet2的nat配置到底是vmnet几要看第一步创建时创建的几
1cat /Library/Preferences/VMware\ Fusion/vmnet2/nat.conf
123456789# VMware NAT configuration file# Manual editing of this file is not recommended. Using UI is preferred. # NAT gateway addressip = 192.168.8.2netmask = ...
树莓派上的转发脚本 smsForward.py
树莓派上的转发脚本 smsForward.py代码全览12345678910111213141516171819202122232425262728293031323334353637383940414243import sysimport requestsfrom pyDes import des, PAD_PKCS5, ECB# 加密函数 密钥是19960621# 返回值是十六进制字符串def encrypt(text): key = '19960621' # 为了防止中文乱码,要先转化为字节 b_text = text.encode() des_obj = des(key, ECB, key, padmode=PAD_PKCS5) # 初始化一个des对象,参数是秘钥,加密方式,偏移, 填充方式 secret_bytes = des_obj.encrypt(b_text) # 用对象的encrypt方法加密 return secret_bytes.hex()# 向服务器发送请求def send_message(name, ...
Java三大特性,封装、继承、多态
封装、继承、多态多态1.1 本质上多态分两种1231、编译时多态(又称静态多态)2、运行时多态(又称动态多态)
重载(overload 发生在一个类中,方法名必须相同,不同参数)就是编译时多态的一个例子,编译时多态在编译时就已经确定,运行时运行的时候调用的是确定的方法。
我们通常所说的多态指的都是运行时多态,也就是编译时不确定究竟调用哪个具体方法,一直延迟到运行时才能确定。这也是为什么有时候多态方法又被称为延迟方法的原因。
下面简要介绍一下运行时多态(以下简称多态)的机制。
1.2 多态通常有两种实现方法1231、子类继承父类(extends)2、类实现接口(implements)
无论是哪种方法,其核心之处就在于对父类方法的改写或对接口方法的实现,以取得在运行时不同的执行效果。
要使用多态,在声明对象时就应该遵循一条法则:声明的总是父类类型或接口类型,创建的是实际类型。
2、多态的实现原理Java 的方法调用方式Java 的方法调用有两类,动态方法调用与静态方法调用。静态方法调用是指对于类的静态方法的调用方式,是静态绑定的;而动态方法调用需要有方法调用所作用的对象,是动态绑定的。 ...
进程和线程的区别
进程和线程的区别进程和线程的由来
区别进程是资源分配的最小单位,线程是cpu调度的最小单位
总结:
线程不能看做独立应用,而进程可以
进程有独立地址空间,互相不影响,线程只是进程的不同执行路径
线程没有独立地址空间,多进程的程序比多线程程序健壮
进程的切换比线程切换开销大
Java进程和线程的关系
Java对操作系统提供的功能进行封装,包括进程和线程
运行一个程序会产生一个进程,进程包含至少一个线程
每个进程对应一个JVM实例,多个线程共享JVM里的堆
Java采用单线程编程模型,程序会自动创建主线程。
主线程可以创建子线程,原则上要后于子线程完成执行
范式
范式第一范式一言以蔽之:“第一范式的数据表必须是二维数据表”,第一范式是指数据库的每一列都是不可分割的基本数据项,强调列的原子性,试题中某一属性不能拥有几个值。比如数据库的电话号码属性里面不可以有固定电话和移动电话值,如下图:
说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
第二范式要有主键且其他列完全依赖于主键
第二范式建立在第一范式的基础上,即满足第二范式一定满足第一范式,第二范式要求数据表每一个实例或者行必须被唯一标识。除满足第一范式外还有两个条件,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。
举例来说:当数据表中是联合主键,但是有的列只依赖联合主键中的一个或一部分属性组成的联合主键,此时需要拆表才能复合第二范式。
第三范式不能有传递以来依赖
若某一范式是第二范式,且每一个非主属性都不传递依赖于该范式的候选键,则称为第三范式,即不能存在:非主键列 A 依 ...
Java基础
Java基础合并数组为String并插入分隔符1StringUtils.join(Arrarys.asList(T... a),"-");
List过大时拆批处理(guava包)1Lists.partition(List<T> list, int size).forEach(subList->doMethod(subList));
通过Stream List转List123List<Integer> list = otherList.stream().map(subInt->{ return new Integer(1);}).collect(Collectors.toList());
近端缓存(guava包)示例如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243@Componentpublic class LocalCacheHelper { @Value(& ...
Maven基础
Maven基础统一版本管理在需要子模块与父模块版本统一时,可以使用插件flatten-maven-plugin