Java Collections类排序学习

jdk自带排序学习,比如我们写一个排序代码 List score = new ArrayList(); score.add(1); score.add(12); score.add(45); score.add(67); Collections.sort(score); 来看一下sort的实现 /** * Sorts the specified list into ascending order, according to the * {@linkplain Comparable natural ordering} of its elements. * All elements in the list must implement the {@link Comparable} * interface. Furthermore, all elements in the list must be * <i>mutually comparable</i> (that is, {@code e1.compareTo(e2)} * must not throw a {@code ClassCastException} for any elements * {@code e1} and {@code e2} in the list).

Android系统禁止进入深休眠的方法

在PowerManagerService中 mWakeLockSuspendBlocker 是控制CPU休眠的锁。 mDisplaySuspendBlocker 是控制显示开关的锁。 通过查看文件,亮屏时看到的也是这两个锁: # cat /sys/power/wake_lock PowerManagerService.Display PowerManagerService.WakeLocks 当按下电源键,会调用goToSleep—>goToSleepInternal —>goToSleepNoUpdateLocked—>updatePowerStateLocked; 当Activity用户无操作活动超时,会调用handleUserActivityTimeout—>updatePowerStateLocked—>; 最终走的都是updatePowerStateLocked 1. 如果想实现按 power 键不关闭屏幕,则不让mDisplaySuspendBlocker进行release操作即可。 frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java @Override // Binder call public void goToSleep(long eventTime, int reason, int flags) { + if(true){ + return; + } if (eventTime > SystemClock.uptimeMillis()) { throw new IllegalArgumentException("event time must not be in the future"); } 2. 如果想实现关闭屏幕后系统不进入休眠,,则让mDisplaySuspendBlocker进行release操作,mWakeLockSuspendBlocker不进行release操作。 frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java /** * Updates the suspend blocker that keeps the CPU alive.

天锐绿盾——公司办公终端电脑文件数据|资料防泄密软件

天锐绿盾是一种专门用于保护公司办公终端电脑文件数据和资料防泄密的软件。它可以有效地防止未经授权的人员访问和泄露重要的公司文件和数据。 PC端访问地址1:www.drhchina.com PC端访问地址2: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 天锐绿盾具有以下主要特点和功能: 文件加密:天锐绿盾可以对公司办公终端电脑上的重要文件和数据进行加密,确保只有授权人员可以解密和访问这些文件。 权限管理:通过天锐绿盾,管理员可以为不同的用户或用户组分配不同的权限,控制他们对公司文件和数据的访问和操作权限。 防止外部存储设备的数据传输:天锐绿盾可以防止未经授权的用户使用外部存储设备(如U盘、移动硬盘等)将公司文件和数据复制、传输到其他设备上,有效防止数据泄露风险。 防止截屏和屏幕录制:天锐绿盾可以防止未经授权的人员对公司文件和数据进行截屏和屏幕录制,进一步保护公司的机密信息。 安全审计和监控:天锐绿盾可以实时监控和记录用户对公司文件和数据的访问和操作情况,并生成相应的安全审计报告,帮助公司管理层了解公司数据的使用情况,及时发现和处理安全隐患。 移动端访问地址: http://tinyurl.com/mtzxbpcu 通过使用天锐绿盾,公司可以更好地保护办公终端电脑上的重要文件和数据,减少数据泄露和信息安全风险,确保公司信息的机密性和完整性。

doris部署

doris-2.0.1.1部署安装 一、下载doris安装包二、解压到/data下,修改名称三、修改fe配置文件四、启动doris-fe五、验证doris-fe六、修改be配置文件七、启动doris-be八、mysql中连接be,在Doris中添加后端节点九、设置密码 一、下载doris安装包 wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.0.1.1-bin-x64.tar.gz 二、解压到/data下,修改名称 tar xf apache-doris-2.0.1.1-bin-x64.tar.gz -C /data/ cd /data/ mv apache-doris-2.0.1.1-bin-x64/ doris-2.0.1.1 三、修改fe配置文件 vim /data/doris-2.0.1.1/fe/conf/fe.conf ## 修改为ip地址 priority_networks = 192.168.12.111/24 若服务器上部署多个doris,需要修改使用的端口,只有一个doris跳过此步骤 http_port = 18030 rpc_port = 19020 query_port = 19030 edit_log_port = 19010 四、启动doris-fe /data/doris-2.0.1.1/fe/bin/start_fe.sh --daemon 五、验证doris-fe 访问情况:可以看到版本号相关信息 mysql连接测试:IsMaster、Join 和 Alive 三列均为true,则表示节点正常 mysql -uroot -P19030 -h192.168.12.111 --skip-ssl mysql> show frontends\G; 六、修改be配置文件 vim /data/doris-2.0.1.1/be/conf/be.conf ## 修改为ip地址 priority_networks = 192.168.12.111/24 ## 修改jdk JAVA_HOME=/data/soft/jdk 若服务器上部署多个doris,需要修改使用的端口,只有一个doris跳过此步骤 be_port = 19060 webserver_port = 18040 heartbeat_service_port = 19050 brpc_port = 18060 七、启动doris-be /data/doris-2.

Serverless与Kubernetes(K8s)的区别、优缺点及应用场景

Serverless与Kubernetes(K8s)的区别 架构模型 Serverless是一种基于事件驱动的计算模型,它允许开发者编写应用程序时无需关心底层的基础设施。在Serverless架构中,云服务提供商会负责管理服务器、操作系统、运行时环境等基础设施,开发者只需关注业务逻辑的实现。 Kubernetes(K8s)是一个开源的容器编排平台,它可以自动化地部署、扩展和管理容器化应用程序。在K8s架构中,开发者需要自己管理基础设施,包括服务器、操作系统、容器运行时等。 资源管理 Serverless架构中,资源的分配和管理是由云服务提供商自动完成的。开发者无需关心服务器的分配和释放,也无需关心资源使用情况。这种模式可以降低运维成本,提高开发效率。 在K8s架构中,资源的分配和管理是由开发者自己控制的。开发者需要根据应用程序的需求,手动创建和管理Pod、Service等资源对象。虽然这增加了运维的复杂性,但也使得开发者能够更加灵活地控制资源使用。 扩展性 Serverless架构具有很好的扩展性,可以根据应用程序的实际负载自动调整资源。当负载增加时,云服务提供商会自动分配更多的资源;当负载减少时,资源会被自动释放。这种模式可以确保应用程序始终处于最佳性能状态,同时降低了运维成本。 K8s架构也具有很好的扩展性,可以通过水平扩展(增加副本数量)和垂直扩展(增加单个副本的资源)来满足应用程序的性能需求。但需要注意的是,K8s架构中的扩展操作需要开发者自己完成,这增加了运维的复杂性。 Serverless与Kubernetes(K8s)的优缺点 Serverless的优点 简化运维:Serverless架构将基础设施的管理交给了云服务提供商,开发者无需关心服务器的分配和释放,也无需关心资源使用情况。这大大降低了运维成本,提高了开发效率。弹性伸缩:Serverless架构可以根据应用程序的实际负载自动调整资源,确保应用程序始终处于最佳性能状态。同时,这种模式还可以降低运维成本。低成本:Serverless架构按实际使用量计费,开发者只需为实际消耗的资源付费。这降低了开发成本,特别适合初创企业和小型团队。 Serverless的缺点: 冷启动延迟:由于Serverless架构需要为每个请求分配新的实例,因此在高并发场景下可能会出现冷启动延迟。函数执行时间限制:大多数Serverless平台对函数的执行时间有限制,如果函数执行时间过长,可能会导致任务被中断。受限于云服务提供商的功能:由于Serverless架构依赖于云服务提供商,因此开发者可能无法使用某些特定的功能或服务。 Kubernetes(K8s)的优点 灵活性:K8s架构允许开发者自己管理基础设施,包括服务器、操作系统、容器运行时等。这使得开发者能够更加灵活地控制资源使用,满足各种应用场景的需求。可移植性:K8s是开源的,可以在任何支持Kubernetes的平台上运行。这使得K8s架构具有很好的可移植性,可以轻松地在不同的环境中部署和迁移应用程序。生态系统丰富:K8s拥有丰富的生态系统,包括各种插件、工具和服务。这些组件可以帮助开发者更加高效地管理和扩展应用程序。 Kubernetes(K8s)的缺点 复杂性:K8s架构涉及到多个组件和概念,如Pod、Service、Deployment等。这使得K8s的学习曲线较陡峭,运维成本较高。资源占用:K8s架构需要额外的资源来运行和管理容器化应用程序,这可能会增加运维成本。版本兼容性问题:K8s的不同版本之间可能存在兼容性问题,升级过程中可能需要处理一些兼容性问题。 应用场景和最佳实践 Serverless应用场景和最佳实践 事件驱动型应用:Serverless架构非常适合事件驱动型应用,如Webhook、定时任务等。这些应用通常具有较低的并发需求,而且不需要长时间运行。通过使用Serverless架构,可以降低运维成本,提高开发效率。微服务架构:Serverless架构可以作为微服务架构的一部分,用于实现某些特定的功能或服务。这样可以降低微服务架构的复杂性,提高开发效率。快速原型开发:Serverless架构可以快速搭建和部署应用程序原型,帮助开发者验证想法和概念。这对于初创企业和小型团队来说非常有价值。 Kubernetes(K8s)应用场景和最佳实践 大规模分布式应用:K8s架构非常适合用于部署和管理大规模的分布式应用程序,如电商网站、社交网络等。这些应用通常具有高并发需求,需要大量的服务器和资源来支持。通过使用K8s架构,可以实现应用程序的高可用性和弹性伸缩。持续集成和持续部署(CI/CD):K8s可以与CI/CD工具链集成,实现自动化的构建、测试和部署过程。这可以提高开发效率,降低运维成本。当然,Serverless也支持,只是会和云产商绑定,才能达到比较好的体验,比如阿里云的云效和SAE服务。多租户应用:K8s架构可以用于实现多租户应用,如SaaS平台、PaaS平台等。通过使用K8s架构,可以实现资源的隔离和共享,提高应用程序的安全性和可扩展性。 总结 Serverless和Kubernetes(K8s)分别适用于不同的应用场景和需求。Serverless架构适合事件驱动型应用、微服务架构和快速原型开发;而Kubernetes(K8s)适合大规模分布式应用、CI/CD和多租户应用。在选择技术方案时,需要根据实际需求进行权衡和选择。

Oracle导入导出dump

创建目录: create directory *** as '/bak'; #***名称可以随便命名 需要手工创建/bak,并且此目录oracle用户有读取,目录地址空间要够用。 查看所有目录 select * from DBA_DIRECTORIES;---查询导入导出的目录 导入 impdp ****/**** directory=dump_dir dumpfile=***.dmp logfile=***.log table_exists_action=replace remap_schema=old:new--改变用户 remap_tablespace=old:new ---改表空间 dumpfile多文件导入 dumpfile=test_20200327%U.DMP table_exists_action说明: a.忽略(SKIP,默认行为); b.在原有数据基础上继续增加(APPEND); c.先DROP表,然后创建表,最后完成数据插入(REPLACE); d.先TRUNCATE,再完成数据插入(TRUNCATE)。 导出 expdp ****/**** TABLES=用户.表名 DIRECTORY=dump_dir dumpfile=****.dmp logfile=****.log TABLES=表1,表2,表3;--按表导出 --SCHEMAS=用户;--按用户导出

Linux 软件安装以及管理

本篇主要记录常用的软件安装和管理方式,主要是 yum/rpm/dnf/apt/pip;大致都是一样的,主要是部分软件提供了解决依赖的功能;内容不包括源码安装,源码安装情况相对比较复杂,后续有时间再补充。 约定: 案例所用模板软件均为 python 案例所用模板命令均为 dig 一、 RPM Linux安装软件,一般分为两种,一种是源码编译或者解压安装,另外的就是rpm包的安装了,yum /dnf/apk 等命令,是在rpm的基础上增加了解决依赖的功能 安装 很多时候,软件都是有依赖的,所以需要多个包依次安装或者同时安装,这也是为什么需要yum rpm -ivh python.rpm # 安装rpm包 rpm -ivh --nodeps python.rpm # 强行安装,不检查依赖 -i|--install 安装 -U|--upgrade 更新 -v 打印详情 -h, --hash 打印进度条,具体是通过hash打印,没仔细了解 查询 rpm 的数据存储在rpmdb 中,如下提供的是一些常用的rpm软件的查询方式 以下参数需配合-q使用 -q, --query 查询,其他查询命令均需要搭配-q使用 -a, --all query/verify all packages rpm -qa|grep python rpm -qa python -c, --configfiles list all configuration files rpm -qc samba-common 需要有配置文件的软件才有返回值 -d, --docfiles list all documentation files rpm -qd python -dump 查看可以导出的文件 rpm -q --dump python -l, --list list files in package rpm -ql python -s, --state display the states of the listed files rpm -qs python -R 查询软件依赖 rpm -qR python -f, --file 查询命令所属rpm,命令需全路径 rpm -qf /bin/python -i 查询rpm包的信息,包含编译时间和安装时间 rpm -qi python 卸载 卸载尽量使用yum卸载!尽量避免强制卸载!!特别是依赖多且不清楚用途的软件!

蓝牙网关在物联网领域三大应用

蓝牙网关在物联网的应用主要包括物联网室内定位、物联网数据采集、物联网连接控制三大应用领域,以下对三大应用领域做详细解释。 一、物联网蓝牙室内定位 蓝牙网关在室内定位的应用包括人员定位和资产设备定位两大方向。 1、人员定位 蓝牙网关安装于室内的特定地方,人员可以佩戴蓝牙工牌、蓝牙手环等穿戴设备,蓝牙穿戴设备广播蓝牙信号,蓝牙网关扫描终端设备信号,即可实现室内人员定位,如果穿戴设备添加了人体生命采集功能,亦可实时获取到人员的生命体征信息。 应用场景:养老院、医院、工厂、工地、学校、矿井等应用领域。 2、资产设备定位 蓝牙网关安装于室内特定区域,在重要的资产设备上安装蓝牙信标或蓝牙资产标签,蓝牙信标或蓝牙资产标签广播蓝牙信号,蓝牙网关扫描设备终端的信标数据,即可实现对物资物料的资产定位管理,后台实时了解到物资物料在室内空间的内分布。 应用场景:医院、工厂、仓库、学校、园区、畜牧等应用领域。 二、物联网数据采集 蓝牙网关安装于工业环境的特定区域,厂区内大量部署温度、湿度、水浸、粉尘浓度、光照等传感器,用来实时监测厂区内工业现场的环境数据。各类传感器数据通过蓝牙广播的方式上报,蓝牙网关扫描手机,实时获取各类环境数据指标,杜绝环境变化造成的各类风险。 应用场景:园区、厂区等应用领域 三、物联网数据连接 蓝牙网关可以连接终端蓝牙设备,可同时连接控制20个蓝牙终端设备,实现蓝牙终端和蓝牙网关的双向传输。比如后台下发数据给电子价签、电子手环等终端设备。 应用场景:商超、医院、学校等应用领域

如何在小米4A刷OpenWRT系统并通过cpolar实现公网访问本地路由器

文章目录 前言1. 安装Python和需要的库2. 使用 OpenWRTInvasion 破解路由器3. 备份当前分区并刷入新的Breed4. 安装cpolar内网穿透4.1 注册账号4.2 下载cpolar客户端4.3 登录cpolar web ui管理界面4.4 创建公网地址 5. 固定公网地址访问 前言 OpenWRT是一个高度模块化、高度自动化的嵌入式Linux系统,可以让路由器变得更智能,简单的说,路由器刷了OpenWrt就相当于一个Linux系统带无线带多网卡的电脑。 举个栗子:有usb功能的路由器刷后可以实现多端文件共享 ,挂站,远程监控甚至智能家居 ;无线可桥接,可以无线连接一般的chinanet热点并拨号;组建局域网无线网络传输数据等。 今天就分享一下如何在小米路由器4A千兆版刷入OpenWRT并通过内网穿透工具实现公网远程访问。 1. 安装Python和需要的库 首先打开 www.python.org 下载一个 Python3 的安装包并安装。 安装完成后执行以下命令升级pip与安装需要的库: python -m pip install --upgrade pip pip install pycryptodome pip install requests 2. 使用 OpenWRTInvasion 破解路由器 打开 OpenWRTInvasion 的 releases 页面,下载一个可用的版本,我这里选择的是支持Windows的版本的是0.0.7。 下载后得到的压缩包名为:OpenWRTInvasion-0.0.7,将改文件解压缩到一个无中文的路径即可。 小米路由器联网,登录路由器,在地址栏中找到参数stok并复制等号后的字符,保持网页不要关闭。 在解压OpenWRTInvasion的目录打开cmd(本教程中使用的是Windows PowerShell) 输入python remote_command_execution_vulnerability.py指令运行破解脚本 根据提示输入路由器IP(192.168.31.1),粘贴之前复制的stok等号后的字符,开始破解 破解成功后会有提示,可以复制提示的指令连接Telent或者SSH,用户名、密码都是root 3. 备份当前分区并刷入新的Breed 首先执行以下指令查看与备份分区 cat /proc/mtd #显示路由分区 dd if=/dev/mtd0 of=/tmp/all.bin #备份所有分区到/tmp/all.bin dd if=/dev/mtd1 of=/tmp/Bootloader.

并发List源码剖析

并发包中的并发List只有CopyOnWriteArrayList。 CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略。 在CopyOnWriteArrayList的类图中,每个CopyOnWriteArrayList对象里面有一个array数组对象用来存放具体元素,ReentrantLock独占锁对象用来保证同时只有一个线程对array进行修改。 这里只要记得ReentrantLock是独占锁,同时只有一个线程可以获取就可以了,后面会专门对JUC中的锁进行介绍。 如果让我们自己做一个写时复制的线程安全的list我们会怎么做,有哪些点需要考虑? 何时初始化list,初始化的list元素个数为多少,list是有限大小吗?如何保证线程安全,比如多个线程进行读写时如何保证是线程安全的?如何保证使用迭代器遍历list时的数据一致性? 主要方法源码解析 初始化 首先看下无参构造函数,如下代码在内部创建了一个大小为0的Object数组作为array的初始值。 然后看下有参构造函数。 添加元素 CopyOnWriteArrayList中用来添加元素的函数有add(E e)、add(int index,E element)、addIfAbsent(E e)和addAllAbsent(Collection<?extends E> c)等,它们的原理类似,所以以add(E e)为例来讲解。 在如上代码中,调用add方法的线程会首先执行代码(1)去获取独占锁,如果多个线程都调用add方法则只有一个线程会获取到该锁,其他线程会被阻塞挂起直到锁被释放。 所以一个线程获取到锁后,就保证了在该线程添加元素的过程中其他线程不会对array进行修改。 线程获取锁后执行代码(2)获取array,然后执行代码(3)复制array到一个新数组(从这里可以知道新数组的大小是原来数组大小增加1,所以CopyOnWriteArrayList是无界list),并把新增的元素添加到新数组。 然后执行代码(4)使用新数组替换原数组,并在返回前释放锁。 由于加了锁,所以整个add过程是个原子性操作。 需要注意的是,在添加元素时,首先复制了一个快照,然后在快照上进行添加,而不是直接在原来数组上进行。 获取指定位置元素 使用E get(int index)获取下标为index的元素,如果元素不存在则抛出IndexOutOfBoundsException异常。 在如上代码中,当线程x调用get方法获取指定位置的元素时,分两步走,首先获取array数组(这里命名为步骤A),然后通过下标访问指定位置的元素(这里命名为步骤B),这是两步操作,但是在整个过程中并没有进行加锁同步。 假设这时候List内容如图所示,里面有1、2、3三个元素。 由于执行步骤A和步骤B没有加锁,这就可能导致在线程x执行完步骤A后执行步骤B前,另外一个线程y进行了remove操作,假设要删除元素1。 remove操作首先会获取独占锁,然后进行写时复制操作,也就是复制一份当前array数组,然后在复制的数组里面删除线程x通过get方法要访问的元素1,之后让array指向复制的数组。 而这时候array之前指向的数组的引用计数为1而不是0,因为线程x还在使用它,这时线程x开始执行步骤B,步骤B操作的数组是线程y删除元素之前的数组。 所以,虽然线程y已经删除了index处的元素,但是线程x的步骤B还是会返回index处的元素,这其实就是写时复制策略产生的弱一致性问题。 修改指定元素 使用E set(int index,E element)修改list中指定元素的值,如果指定位置的元素不存在则抛出IndexOutOfBoundsException异常。 如上代码首先获取了独占锁,从而阻止其他线程对array数组进行修改,然后获取当前数组,并调用get方法获取指定位置的元素,如果指定位置的元素值与新值不一致则创建新数组并复制元素,然后在新数组上修改指定位置的元素值并设置新数组到array。 如果指定位置的元素值与新值一样,则为了保证volatile语义,还是需要重新设置array,虽然array的内容并没有改变。 删除元素 删除list里面指定的元素,可以使用E remove(int index)、boolean remove(Object o)和boolean remove(Object o,Object[] snapshot,int index)等方法,它们的原理一样。下面讲解下remove(int index)方法。 如上代码其实和新增元素的代码类似,首先获取独占锁以保证删除数据期间其他线程不能对array进行修改,然后获取数组中要被删除的元素,并把剩余的元素复制到新数组,之后使用新数组替换原来的数组,最后在返回前释放锁。 弱一致性的迭代器 遍历列表元素可以使用迭代器。在讲解什么是迭代器的弱一致性前,先举一个例子来说明如何使用迭代器。 迭代器的hasNext方法用于判断列表中是否还有元素,next方法则具体返回元素。好了,下面来看CopyOnWriteArrayList中迭代器的弱一致性是怎么回事,所谓弱一致性是指返回迭代器后,其他线程对list的增删改对迭代器是不可见的,下面看看这是如何做到的。 当调用iterator()方法获取迭代器时实际上会返回一个COWIterator对象,COWIterator对象的snapshot变量保存了当前list的内容,cursor是遍历list时数据的下标。 为什么说snapshot是list的快照呢?明明是指针传递的引用啊,而不是副本。 如果在该线程使用返回的迭代器遍历元素的过程中,其他线程没有对list进行增删改,那么snapshot本身就是list的array,因为它们是引用关系。 但是如果在遍历期间其他线程对该list进行了增删改,那么snapshot就是快照了,因为增删改后list里面的数组被新数组替换了,这时候老数组被snapshot引用。 这也说明获取迭代器后,使用该迭代器元素时,其他线程对该list进行的增删改不可见,因为它们操作的是两个不同的数组,这就是弱一致性。 下面通过一个例子来演示多线程下迭代器的弱一致性的效果。 在如上代码中,main函数首先初始化了arrayList,然后在启动线程前获取到了arrayList迭代器。 子线程threadOne启动后首先修改了arrayList的第一个元素的值,然后删除了arrayList中下标为2和3的元素。 主线程在子线程执行完毕后使用获取的迭代器遍历数组元素,从输出结果我们知道,在子线程里面进行的操作一个都没有生效,这就是迭代器弱一致性的体现。 需要注意的是,获取迭代器的操作必须在子线程操作之前进行。

Vue 自定义带数字的(1,2,3,4,...)分页组件

效果图如下: 组件代码: <template> <div class="paging flex flex-center-cz flex-center-sp"> <div class="flex flex-space-between "> <div class="flex"> <div class="flex flex-center-cz margin-left-s font-s color-gray">共<span class="count">{{recordCount}}</span> 条</div> <img class="logo-18 margin-s pointer" style="transform: scaleX(-1)" src="@/assets/images/icon/next.png" @click="prior" /> <div class="pointer color-gray font-l margin-right-s margin-left-s flex flex-center-cz" v-for="num in pageList" :key="num" @click="valueChange(num)" :class="{ 'highLight': num === selectedNumber }"> {{ num }} </div> <img class="logo-18 margin-s pointer" src="@/assets/images/icon/next.png" @click="next"/> <div class="flex flex-center-cz margin-left-s font-s">转到</div> <input type="number" style="width: 50px;" v-model="

如何查看崩溃日志

​ 目录 描述 思路 查看ipa包崩溃日志 简单查看手机崩溃信息几种方式 方式1:手机设置查看崩溃日志 方式2: Xocde工具 方式3: 第三方软件克魔助手 环境配置 实时日志 奔溃日志分析 方式四:控制台资源库 线上崩溃日志 线上监听crash的几种方式 方式1: 三方平台的SDK 方式2: 自己实现异常监听,然后提交后台 常见的造成的崩溃的情况 1.数组越界 2.多线程问题 3.主线程无响应 4.野指针 信号可捕获的崩溃日志收集 信号捕获的原理 信号不可捕获的崩溃日志收集 iOS 后台保活的 5 种方式 采集过程原理 崩溃日志分析 描述 模拟器和真机调试运行正常,但是导出ipa包安装运行出现奔溃。记录一下提醒一下遇到同样问题的人少走弯路。 思路 首先遇到问题,头脑要保持清醒。思考为什么会出现这样的问题? 模拟器和真机调试运行正常,模拟器和真机调试是在DeBug模式下运行的 导出ipa包的环境是Release模式下 所以可以重点是在Release模式下查看崩溃信息才能定位问题。 查看ipa包崩溃日志 手机数据线连接电脑,借助克魔助手就可以看,Xcode -> Window-> Devices and Simulator 进入后,选择【View Device Logs】 日志文件看的好难受,好像也没有办法定位具体问题,接着分析 刚才不是分析在Release模式下出现的问题嘛,所以可以直接将本地调试的Dudeg的模式修改为Relese模式,然后运行。默认是Debug模式,选择Release模式,然后本地调试的时候就和导出的ipa环境一致啦。同时记得要勾选 【Zombie Ojects】,可以定位出野指针和僵尸对象。然后运行Xcode,可以定位到具体问题啦,同时控制台也输出了使用的对象提前释放导致的问题。 简单查看手机崩溃信息几种方式 方式1:手机设置查看崩溃日志 步骤:【设置】-> 【隐私】 -> 【分析与改进】-> 【分析数据】 方式2: Xocde工具 手机数据线连接电脑,借助Xcode就可以看,Xcode -> Window-> Devices and Simulator,具体和上面一致,请参照上图示例。

开源大数据集群部署(二)集群基础环境实施准备

作者:櫰木 环境准备 本次使用到的二进制软件包目录为:系统初始化前提是操作系统已完成安装、各个主机之间网络互通,系统常用命令已安装,本默认这些前提条件已具备,不在阐述。 1 主机环境初始化 安装centos系统完成后需要对主机进行初始化配置和验证工作,在所有主机上(hd1.dtstack.com-hd3)均要进行操作,并按照对应hosts修改主机名: (主机名必须为xxx.xxx.com 匹配freeipa安装需求) (1) 主机配置映射(操作权限root) $ cat>>/etc/hosts <<EOF 172.16.104.226 hd1.dtstack.com 172.16.106.252 hd2.dtstack.com 172.16.107.127 hd3.dtstack.com 172.16.106.165 hd.dtstack.com EOF (2)关闭防火墙&selinux(操作权限root) $ systemctl stop firewalld $ systemctl disable firewalld $ setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config (3) 创建集群系统用户(操作权限root) 系统用户属组用途hadoophadoophadoop集群用户mysqlhadoopmysql数据库用户hdfshadoophadoop集群用户trinohadooppresto集群用户prometheusprometheus监控平台用户grafanagrafana监控平台用户zookeeperzookeeperzk集群用户hivehadoophive组件用户yarnhadoophadoop集群用户 创建hadoop集群所需用的的用户和用户组 创建示例如下: [root@hd1.dtstack.com ~]$ remote_op.sh "groupadd hadoo p" [root@hd1.dtstack.com ~]$ remote_op.sh "useradd hive -G hadoop" [root@hd1.dtstack.com ~]$ remote_op.sh "echo hive | passwd --stdin hive" (4)安装java环境(操作权限root) 本次中java软件包安装目录在/root/bigdata $ cd /opt/bigdata $ tar -zvxf zulu11.

软考考试多少分通过?

根据《人力资源社会保障部办公厅关于单独划定部分专业技术人员职业资格考试合格标准有关事项的通知》(人社厅发〔2022〕25号)的相关规定,软考考试在一般情况下是需要达到45分才能及格的。 但在一些特定地区却有不同的要求。这些地区包括国家乡村振兴重点帮扶县、西藏自治区、四个省份的涉藏州县、新疆维吾尔自治区南疆四地州、甘肃临夏州、四川凉山州、乐山市的峨边县、马边县以及金口河区。在这些地区,软考考试实行单独划线政策,即使分数低于45分,考生也可以获得合格证书。 此外,软考考试必须一次过,如果没有通过,成绩就不会被保留。 如果你只通过了某一门考试,无法通过另一门的话,那只能收拾好行李回家哭泣了。如果你现在还没有确定要考哪一门,我强烈建议选择软考中高级考试,当然如果你有自己的想法或者单位要求的话另当别论。 为什么这两个考试如此热门呢?因为很多人都希望通过它们。这其中有些门道。如果你有单位硬性要求,那就必须一次性通过。而这两个考试的通过率最高,其他的考试通过率不能保证,因此不建议报考其他考试。毕竟,既然投入了时间去备考,肯定是希望能够一次性顺利通过。当然,高级考试的难度肯定比中级考试略高,但差距不是特别大,主要难点集中在论文部分。 与其他级别相比,中高级对IT知识的考察要求较低,不仅限于计算机专业背景的学生可以应考。在综合知识方面,IT只占总分的25分。即使没有考察这25分,考生仍然有50分可供获得,这给予了5分的容错率。 别以为这50分很难拿,考试内容都是选择题,主要考察的是教材中的知识。也就是说,只要你把这门科目的内容记住就能通过了。而且这75道选择题的顺序是按照教材章节来出的,每一章都有相应数量的题目,可以有章可循。当然了,你得记住一些知识点,但并不是直接死记硬背教材的全部内容。教材有接近800页,涵盖了2400个知识点,就像是一块板砖一样庞大。除非你是个记忆力超强的人,不然谁能把整本书的知识点都背下来呢?我们已经不是学生了,记忆力也没那么好了。当年我还是学生的时候就是学习很差,连出师表都背不下来,更别说这么厚的一本书了。 走个捷径,画个重点吧,资料如下

Typecho 最新XC主题 去除域名授权全解密源码

简介: Typecho 最新XC主题 去除域名授权全解密源码 这是一款多样式主题,首页支持六种主题样式,支持Pjax优化访问速度,多种单页,如友链、说说等。评论支持表情,自定义编辑器,支持其他样式功能。该主题功能性挺高,比较花里胡哨,感觉有一股joe的味道。 安装教程 1:/usr/themes/ 导入主题文件,在控制台启动主题 2:/usr/plugins/ 导入评论ua标识插件,在控制台启动插件才能使用评论页(可以关闭显示ua,但必须启动插件) 3:每次更新都必须删除主题源文件从新上传解压 启用主题后提示错误↓ 这是少部分人数据库缓存导致的,可以先启用默认主题,然后在启用本主题,一次不行就多重复几次,还不行或者重装Typecho包 温馨提示:启用了本主题可能会出现一些页面异常,强烈建议清理一次浏览器缓存再打开

SpringCloud入门

中文官网地址:Spring Cloud中文网-官方文档中文版 Spring Cloud九大组件: 1、注册中心:Eureka 2、服务调用:Feigh 3、负载均衡:Ribbon 4、熔断降级:Hystrix 5、网 关: Gateway 6、链路追踪:Sleuth 7、事务管理:LCN/Seata 8、配置中心:config 9、服务监控:admin 微服务划分 微服务是一种软件开发架构思想,它将一个大型应用程序分解为多个独立的、可自由组合和部署的小型服务,这些小型服务各自对应一个特定的业务功能,可独立开发、测试、部署和扩展 微服务划分的6个原则 单一职责原则 每个微服务应该只负责一个特定的业务功能。单一职责原则有助于保持服务的聚焦和简单,便于独立开发和维护 业务领域驱动划分 根据应用程序的业务需求和领域知识来对服务进行划分 最小可行服务 在进行微服务划分时,应该尽量保持服务的粒度足够小,但仍能独立完成一个完整的业务功能,以提高灵活性 高内聚低耦合 高内聚意味着服务内部的组件和功能之间有紧密的关联,而低耦合则是指各个服务之间的依赖关系尽可能简单和少 数据自治原则 每个微服务应该对其所使用的数据有完全的控制权 技术多样性 微服务架构允许使用不同的技术栈来实现不同的服务,这有助于充分利用各种技术的优势,提高系统性能和可扩展性,但同时也需要注意控制技术多样性带来的管理和维护成本

交易猫转转闲鱼源码-二手闲置源码 闲鱼链接源码

交易猫转转闲鱼源码一款二手闲置源码,今天测试了一下,交易猫转转闲鱼源码功能完整 搭建教程: 上传源码到服务器然后解压好,然后找到数据库config/Conn.php修改,然后导入数据库 1、 一键生成链接卡框分享,效果逼真 2、使用简单,支持自定义订单内容。 3、 输入相应内容,上传商品图片,快速生成链接一键分享转发 下载源码:https://pan.baidu.com/s/1ytoKFN0gdcqJoJCh5Pvg6w?pwd=duke 

【一周安全资讯0106】国家标准《信息安全技术 网络安全信息报送指南》正式发布;全球1100万SSH服务器面临“水龟攻击”威胁

要闻速览 1、国家标准GB/T 43557-2023《信息安全技术 网络安全信息报送指南》发布 2、《未成年人网络保护条例》元旦起施行 织密未成年人网络保护立体“安全网” 3、深圳证监局:证券期货经营机构应建立健全网络安全应急处置机制 4、黑客大规模恶意注册与ChatGPT相似的域名 超65万个 5、全球1100万SSH服务器面临“水龟攻击”威胁 6、澳大利亚地方法院遭勒索攻击:敏感案件数据泄露,司法权威性被破坏 一周政策要闻 国家标准GB/T 43557-2023《信息安全技术 网络安全信息报送指南》发布 近日,全国信息安全标准化技术委员会正式发布了GB/T 43557-2023《信息安全技术 网络安全信息报送指南》(以下简称《报送指南》)。作为国内领先的安全运营商,聚铭网络是该《报送指南》的主要起草单位之一。 《报送指南》描述了网络安全信息报送的信息类型、要素、格式规范,以及网络安全信息报送活动的参与角色、基本流程、报送方式;为网络安全信息报送活动中的各参与角色提供参考。 《报送指南》指出,报送的网络安全信息类型包括脆弱性信息、网络安全威胁信息、网络安全事态信息、网络安全事件信息、网络安全态势信息、网络安全资讯、其他信息等,并对各信息类型进行了详细的叙述。 据悉,该《报送指南》将于2024年7月1日起正式实施。 信息来源:全国标准信息公共服务平台https://std.samr.gov.cn/gb/search/gbDetailed?id=0DF2F72AE2E6403DE06397BE0A0A87C4 《未成年人网络保护条例》元旦起施行 织密未成年人网络保护立体“安全网” 2024年1月1日,《未成年人网络保护条例》(以下简称《条例》)正式实施。作为我国首部专门性的未成年人网络保护综合立法,《条例》的施行标志着我国未成年人网络保护法治建设进入新阶段。 《条例》着眼于平衡未成年人发展权和受保护权的相互关系,明确指出,未成年人网络保护工作应当坚持最有利于未成年人的原则,适应未成年人身心健康发展和网络空间的规律和特点。保护工作不是单一主体责任,而是要实行社会共治。 对此,《条例》围绕“网络素养促进”“网络信息内容规范”“个人信息网络保护”“网络沉迷防治”等重点内容,对不同主体的权利义务进行了确定与细化。例如,相关部门依据各自职责做好未成年人网络保护工作;学校、家庭应当教育引导未成年人参加有益身心健康的活动,科学、文明、安全、合理使用网络,预防和干预未成年人沉迷网络;网络产品和服务提供者应当遵守法律、行政法规和国家有关规定,履行未成年人网络保护义务,承担社会责任。 近年来,针对未成年人的网络保护相关体系不断完善,《网络安全法》《未成年人保护法》《儿童个人信息网络保护规定》《未成年人网络保护条例》等构筑了多层次、多维度的法律法规制度体系,未成年人用网安全感日益提升。 信息来源:中华人民共和国国家互联网信息办公室 //www.cac.gov.cn/2023-10/24/c_1699806932316206.htm 业内新闻速览 深圳证监局:证券期货经营机构应建立健全网络安全应急处置机制 新年伊始,监管再就券商网络安全事件进行通报。1月3日,深圳证监局发布的《证券期货机构监管通讯》指出,近期,某券商发生网络安全事件,公司技术部门应急处置后认为处置速度快、造成影响小,不构成网络安全事件,未履行报告义务。不过,经深圳证监局复查,该事件造成12名客户的17笔交易委托单出现延迟报送,最长延迟时间超过4分钟,属于网络安全事件。另一家券商核心交易系统容量评估不到位,向北交所申请的报盘网关流速容量不足,导致北交所交易流量突增时报盘拥堵,部分客户报盘及撤单延迟。 对此,深圳证监局表示,上述事项反映出公司网络安全应急处置和信息系统管理存在薄弱环节。辖区各证券期货经营机构应建立健全网络安全应急处置机制,认真研判事件性质及风险等级,完善应急报告与处置流程,加强信息系统检测与容量评估,做好系统扩容的技术准备,确保交易系统安全稳定运行。 近年来,证券行业信息系统建设投入逐年增长,并持续深化金融服务渗透率。中国证券业协会最新统计数据显示,从信息安全领域看,2020年至2022年券商该项投入分别为7.78亿元、9.55亿元、10.92亿元,分别占当年总投入的4.34%、4.31%、4.04%。同时,持续加大人力投入,2022年券商信息安全相关人员出现了大幅增长,增幅高达44.89%。 但证券行业信息安全事件仍旧时有发生,网络信息安全面临的各种新问题日益凸显。仅仅在2023年,中信证券、东方财富证券、江海证券、华宝证券等4家公司,均因网络安全问题被监管部门“点名”,包括机房基础设施建设安全性不足、信息系统设备可靠性管理疏漏、信息系统升级论证测试不充分、App个人信息保护合规性检测不充分、未及时报告网络安全事件等诸多问题。 因国家信息安全及证券IT稳定性和可用性要求极高,券商需持续加大网络安全投入,通过加强网络安全手段和平台建设、创新网络安全人才培养机制、开展网络安全知识技能普及工作等方式,全方位筑牢网络安全“防火墙”。 为进一步引导证券公司强化网络与信息系统安全稳定运行保障体系和能力建设,2023年6月,中证协印发了《证券公司网络和信息安全三年提升计划(2023—2025)》,明确未来三年全面提升证券公司网络和信息安全的总体目标,其中包括网络和信息安全防护体系基本健全、牢牢守住不发生系统性网络和信息安全风险的底线。 消息来源:深圳监管局 http://www.csrc.gov.cn/shenzhen/c101531/c7454973/content.shtml 黑客大规模恶意注册与Chat GPT相似的域名 超65万个 站长之家(ChinaZ.com)1月2日 消息:近日,网络安全研究人员发现了一个巨大的网络安全威胁,涉及ChatGPT模型名的滥用。黑客们大规模注册了与ChatGPT相似的域名,以模糊用户判断,通过滥用ChatGPT模型信誉,欺骗用户信任,使他们倾向于访问欺诈性网站。 这场网络攻击的一部分是Cl0p勒索软件组织的行动。该组织于H22023年发动了一次大规模的攻击,利用MOVEit的零日漏洞(CVE-2023-34362)。此次攻击中,Cl0p不仅仅是加密受害者的数据,还采用了一种新策略,即在勒索未付款时将数据泄露到公开网络,这与ALPHV勒索软件组织的策略相似。 最近,ESET 的网络安全研究人员发现了超过650,000个类似 ChatGPT 的恶意注册域名。除此之外,网络安全专家还发现了Mozi僵尸网络的关闭。Mozi曾是过去三年中最大的僵尸网络之一,其突然关闭引发了对开发者或中国当局是否使用了关闭开关的猜测。同时,Android/Pandora威胁涉及对智能电视、电视盒子和移动设备进行DDoS攻击,突显了网络安全威胁的多样性。特别值得注意的是,攻击者针对ChatGPT用户发起的定向攻击,试图访问类似 “chapgpt” 的可疑域名。此外,文章还提到了对OpenAI API密钥的不安全处理,强调了对密钥隐私的保护需求。在网络安全领域,还出现了Android间谍软件(如“SpinOk”)的显著增加,以及H22023年JS/Agent和持续的Magecart攻击未打补丁的网站。此外,加密窃取者的数量激增,包括Lumma Stealer等恶意软件服务,专注于窃取加密货币钱包的信息。然而,与加密货币威胁的增加不同,比特币的价值却上升。所有这些网络安全演变突显了网络威胁策略的多样性。为了提高网络安全,开发人员和管理员需要采取更好的安全措施,防范各种威胁。 消息来源:站长之家 https://www.chinaz.com/2024/0102/1587341.shtml 全球1100万SSH服务器面临“水龟攻击”威胁 安全威胁监控平台Shadowserver最近的一份报告警告说,互联网上有近1100万台SSH服务器(由唯一的IP地址标识),很容易受到水龟攻击(TerrapinAttack),从而威胁到某些SSH连接的完整性。 “水龟攻击”是德国波鸿鲁尔大学安全研究人员开发的新攻击技术,。利用了SSH传输层协议的弱点,并结合了OpenSSH十多年前引入的较新的加密算法和加密模式。后者已被广泛的SSH实现所采用,因此影响当前的大多数SSH实例。“水龟攻击”会在握手过程中操纵序列值,损害SSH通道的完整性,特别是在使用ChaCha20-Poly1305或带有Encrypt-then-MAC的CBC等特定加密模式时。与攻击相关的三个漏洞的编号为:CVE-2023-48795、CVE-2023-46445和CVE-2023-46446。 攻击者可降级用于用户身份验证的公钥算法,并禁用OpenSSH9.5中针对击键计时攻击的防御。“水龟攻击”的一个重要前提是攻击者需要处于中间人(MiTM)位置来拦截和修改握手交换。这意味着“水龟攻击“的威胁并不是特别严重。在许多情况下,修补CVE-2023-48795可能不是优先事项。但值得注意的是,攻击者经常会先入侵目标网络,并潜伏等待合适的时机实施水龟攻击。安全威胁监控平台Shadowserver的报告显示,互联网上有近1100万台暴露的SSH服务器很容易受到“水龟攻击”,约占Shadoserver监控的IPv4和IPv6空间中所有扫描样本的52%。大多数易受攻击的系统位于美国(330万个),其次是中国(130万个)、德国(100万个)、俄罗斯(70万个)、新加坡(39万个)和日本(38万个)。 虽然并非所有1100万个SSH服务器实例都面临立即受到攻击的风险,但这至少表明对手有大量可供选择的目标实例。波鸿鲁尔大学团队发布了一个“水龟攻击“漏洞扫描器(https://github.com/RUB-NDS/Terrapin-Scanner),可帮助用户检查SSH客户端或服务器是否存在水龟攻击漏洞。 消息来源:GoUpSec https://baijiahao.baidu.com/s?id=1787217928205300569&wfr=spider&for=pc 澳大利亚地方法院遭勒索攻击:敏感案件数据泄露,司法权威性被破坏 安全内参1月4日消息,澳大利亚维多利亚州法院系统遭受了勒索软件攻击。一位独立安全专家认为,攻击由俄罗斯黑客策划。 维多利亚州法院服务局(CSV)发言人表示,黑客侵入了法院系统的音视频存档区域。这意味着高度敏感案件的证人证词等听证录音可能已被访问或窃取。CSV正在努力通知出庭记录遭黑客访问的人,并计划设立一个联系中心,向自认为受攻击影响者提供服务。相关录音覆盖了2023年11月1日至12月21日期间的听证会,也可能包括11月之前的部分听证会。此次攻击于2023年12月21日被发现。当时,圣诞节假期将至,员工发现他们的计算机被锁定,屏幕上出现一条消息,写着“你被黑了!”(YOU HAVE BEEN PWND)。根据消息提示,法庭工作人员查看了一个文本文件。黑客在文件中威胁要公布从法院系统窃取的文件,并要求工作人员访问暗网的一个地址,获取如何恢复文件的说明。黑客访问了近两个月的县级法院录音周二(1月2日)上午,CSV发布最新消息,表示县级法院案件受到的影响最为严重。黑客可能在线访问了去年11月1日至12月21日期间所有刑事和民事听证会的录音,其中有至少两起案件涉及童年性虐待问题。维多利亚州最高法院也受到重创,去年11月的录音可能都被黑客访问,涉及上诉法院、刑事庭、实践法庭以及两个地区性听证会。去年11月或12月开始的儿童法庭听证会录音没有受到影响。但是,去年10月的一次听证会录音或已在线曝光。一些治安法庭的预审听证会录音受到影响,但维多利亚州民事及行政法庭(VCAT)的听证会录音未受波及。代理州长Ben Carroll表示,法院运营并未受到影响。他说,“据我了解,这次攻击基本上已经被限制,所有法院案件、听证、证据和程序都得到了彻底的保护。我们非常有信心将查明事件真相。”专家称攻击可能是俄罗斯黑客所为独立网络安全专家Robert Potter在查验攻击证据之后,认为基本可以确定法院系统遭受了网络钓鱼攻击,攻击者是俄罗斯黑客,使用了“麒麟”(Qilin)商业勒索软件。他说,“这是一种双重勒索手段。他们把数据拿走,然后加密。如果你不付钱,他们就会泄露数据,你也永远无法访问数据。”CSV发言人表示,“我们立即采取行动,隔离并停用受影响网络,并制定计划,确保法院持续运营。因此,一月的听证会将继续进行。维护法院用户的安全是我们的优先事项。目前,我们的工作重点是确保系统安全。”

网友:硕士5年了,税前才70w,感觉自己很失败。

最近在网上看到这样一个评论,一网友说自己硕士毕业5年了,税前才70w,感觉自己很失败。 他的职位是后端开发,税前是70w,我们按照一年13到18薪来计算,当然能发到18薪是少数。按照这个区间来算的话,月薪大概在3.8w-5.38w之间。 硕士毕业5年的薪资不好查,在OfferShow上看下一个硕士校招的薪资,这里只统计后端开发,每个公司给到的薪资都不一样,也有一些可以给到30k的。毕业5年就算工资翻一倍,年薪也是能达到70w的。 不过对于这位网友的言论,大多数人持有的是负面评论,我们可以看下。 看完了薪资我们来看一道谷歌的面试题,这题是LeetCode的第447题:回旋镖的数量,一网友在谷歌面试的时候遇到这题,我们来看下。 问题描述 来源:LeetCode第447题 难度:中等 给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i 和 k 之间的欧式距离相等(需要考虑元组的顺序)。 返回平面上所有回旋镖的数量。 示例1: 输入:points = [[0,0],[1,0],[2,0]] 输出:2 解释:两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]] 示例2: 输入:points = [[1,1],[2,2],[3,3]] 输出:2 n == points.length 1 <= n <= 500 points[i].length == 2 -10^4 <= xi, yi <= 10^4 所有点都 互不相同 问题分析

Python实现PowerPoint(PPT/PPTX)到PDF的批量转换

演示文稿是一种常见传达信息、展示观点和分享内容的形式,特别是PowerPoint演示文稿,广泛应用于各行各业,几乎是演讲等场合的必备工具。然而,演示文稿也有其限制,对设备的要求较高,且使用不同的软件或设备演示时,可能呈现出不同的效果,也会出现某些元素不被支持的情况。这种情况可以通过将演示文稿转换为PDF文档来解决。PDF格式具有高度的跨平台性,能够在不同的设备上展示出相同的外观,且不需要安装特别的软件,甚至在浏览器中就能很好地进行展示。同时,PDF文件还能方便我们进行打印等操作。如果需要处理大量的PPT转PDF的工作,一个个打开并另存为PDF是非常低效率的做法。我们可以利用Python编程语言的强大的工具来自动化这个过程,使得批量转换变得简单而高效。 本文将介绍如何使用Python将PowerPoint演示文稿(PPT、PPTX等)转换为PDF文件,使演示内容能够在更多的设备上展示,且保持内容展示效果一致。同时为大家带来一款免费的在线转换工具,将各种格式文件转换为PDF文件。 本文主要包括以下内容: 文章目录 转换演示文稿为PDF的优势将PowerPoint演示文稿批量转换为PDF文件将演示文稿转换为PDF文件并设置页面大小将演示文稿的单页转换为PDF文件免费在线转换工具总结 本文所使用的方法需要用到Spire.Presentation for Python,可从官网下载或通过PyPI安装:pip install Spire.Presentation。 转换演示文稿为PDF的优势 兼容性:PDF格式具有广泛的兼容性,可以在不同操作系统和设备上准确显示。将PowerPoint文件转换为PDF可以确保接收方能够正确浏览和阅读您的演示内容。安全性和保密性:PDF格式可以设置密码和限制权限,提供更高的安全性和保密性。这对商业演示、敏感数据的展示以及知识产权保护非常重要。打印方便:PDF文件在打印时可以保持格式的一致性,无论是在个人打印机还是专业印刷机上。将PowerPoint文件转换为PDF格式可以确保打印输出结果与原始演示一致,方便分享和分发纸质副本。 将PowerPoint演示文稿批量转换为PDF文件 Presentation.SaveToFile(fileName: str, fileFormat: FileFormat) 可将演示文件转换为 PDF 文档。以下是执行此操作的详细步骤: 创建一个 Presentation 类对象。使用 Presentation.LoadFromFile() 方法加载演示文稿文件。使用 Presentation.SaveToFile(fileName: str, fileFormat: FileFormat) 方法将演示文稿保存为 PDF 文档。 代码示例: Python from spire.presentation import * from spire.presentation.common import * # 设置文件夹路径和输出文件夹路径 folder_path = "Documents/" output_folder = "Output/" # 遍历文件夹中的文件 for file_name in os.listdir(folder_path): file_path = os.path.join(folder_path, file_name) # 判断文件名是否以.pptx或.ppt结尾 if file_name.lower().endswith('.pptx') or file_name.lower().endswith('.ppt'): # 根据文件名生成输出路径 output_path = os.

Chrome您的连接不是私密连接或专用连接

方法一: 在当前页面用键盘输入 thisisunsafe ,不是在地址栏输入,就直接敲键盘就行了因为Chrome不信任这些自签名ssl证书,为了安全起见,直接禁止访问了,thisisunsafe 这个命令,说明你已经了解并确认这是个不安全的网站,你仍要访问就给你访问了。 方法二: 在Chrome的地址栏中输入:chrome://flags/#show-cert-link,选择"启用",重启Chrome浏览器。打开问题网页,点击地址栏左侧的"不安全"图标,选择"证书"下面的"无效"链接,打开查看问题证书。如果对该网站足够信任,可以不用理会证书的问题,直接点击下面的"高级"链接,点击"继续前往…(不安全)"链接就可以忽略证书问题,进入到证书有问题的网站。 方法三: 打开chrome://flags找到“Show in-form warnings for sensitive fields when the top-level page is not HTTPS”设置为 disabled找到 “Allow invalid certificates for resources loaded from localhost”设置为 “enabled”点启用,然后重启浏览器

MySQL运维实战(3.1) MySQL官方客户端使用介绍

作者:俊达 引言 MySQL是MySQL安装包默认的客户端,该客户端程序通常位于二进制安装包的bin目录中,或者通过rpm安装包安装mysql-community-client,是数据库管理系统的重要组成部分。MySQL客户端不仅仅是一个简单的软件工具,更是连接用户与数据库之间的桥梁,对于有效地使用MySQL数据库的功能和特性至关重要。熟练掌握MySQL客户端的使用方法对于数据库管理和数据操作具有重要意义,在接下来的内容中,我们将介绍MySQL官方客户端的使用方法。 1 使用mysql程序 linux终端下,输入mysql命令登陆数据库。如果提示mysql不存在,要看mysql程序是否在命令行的搜索路径。 [root@box3 ~]# mysql -bash: mysql: No such file or directory ### 测试环境中,mysql位于/usr/local/mysql, 设置PATH [root@box3 ~]# cat ~/.bash_profile ... PATH=$PATH:$HOME/bin:/usr/local/mysql/bin export PATH [root@box1 ~]# mysql --version mysql Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using EditLine wrapper 2 mysql主要命令行参数说明 命令行参数说明–help查看帮助信息。mysql --help–version查看客户端版本-p, --password用户密码,小写的p-P, --port服务端口,大写的P-u, --user用户名-h, --host服务地址-S, --socketsocket文件。和-S和 -h -P只能使用其中一种方式登陆。-v, --verbose输出更多提示信息,使用-vvv 输出更多信息。在批量执行脚本时,我们可能会需要增加输出信息,便于查看脚本执行过程中的信息。-s, --silent安静模式,输出更少的提示信息-B, --batch批模式,输出更少提示信息。会影响wait_timeout参数。-e执行sql语句。mysql -e ‘select now()’-A, --no-auto-rehash登陆时不读取mysql数据字典。在数据库中表多的时候,使用-A选项能提高连接的速度。–tee将命令和结果输出到文件–no-defaults不从默认的配置文件中读取选项–defaults-file从指定的配置文件中读取选项–ssl-modessl连接模式required: 启用sslverify_ca:验证服务端证书verify_identity:验证服务端身份disabled:不启用ssl–ssl-cassl CA证书。服务端和客户端使用同一个ca证书–ssl-cert客户端ssl证书–ssl-key客户端ssl私钥 3 关于mysql客户端空闲超时 mysql服务端会终止空闲时间超过一定时长的会话,有2个参数会影响超时时间。空闲时间是指客户端没有发送请求到服务端的连续时间。 interactive-timeout 交互模式下的连接空闲超时时间。使用mysql client连接是,超时时间会设置为interactive-timeout指定的值。

SpringBoot项目中开启MyBatis的SQL日志

本文的配置文件为yaml格式,properties格式自行调整。 方法一: logging: level: com: hbsc: iotmiddleplatform: mapper: debug //日志输入时的名字 file: name: logs.log 方法二: mybatis-plus: configuration: #添加日志支持 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

软件测试/测试开发|什么是Python,我们为什么选择Python?

简介 要说最近几年,哪个编程语言是最受欢迎的?学习人数最多的?那非Python莫属,加上人工智能时代的到来,Python热度就更加持续,那么Python为什么能够超越Java和C语言,成为现在最受欢迎的语言呢?本文就带大家一探究竟。 Python简介 Python发展背景 Python 是一种高级编程语言,由荷兰人吉多·范罗苏姆(Guido van Rossum)于 1980 年代中期发明并首次发布。他最初设计 Python 语言是为了解决他在编程中遇到的问题,并希望创造一种比 C 语言更易用、更具有表达力和动态性的语言。Python 的名字来源于英国广播剧《巨蟒与香蕉》(Monty Python),这是一种幽默、调侃式的文化现象,也是 Python 语言的一个特色。Python 语言的设计哲学是优雅、明确、简单,它具有丰富的库和广泛的应用领域,包括 Web 开发、数据分析、人工智能、科学计算、网络编程、GUI 编程等等。由于其易学易用、可读性强、可扩展性好的特点,Python 已经成为目前最受欢迎的编程语言之一,在编程语言排行榜上一直名列前茅。 Python特点 简单易学:Python 的语法简单易懂,容易上手,适合初学者学习。可读性强:Python 的代码结构清晰,缩进规则明确,代码可读性强,易于维护。可扩展性好:Python 支持多种编程范式,包括面向对象、函数式、过程式等,同时也支持 C/C++ 扩展,可以方便地与其他语言进行交互。库丰富:Python 拥有丰富的标准库和第三方库,可以满足各种需求,如数据处理、网络编程、图形界面等。跨平台性强:Python 可以在多种操作系统上运行,包括 Windows、Linux、Mac OS 等。 Python优点 简单易学,适合初学者学习。可读性强,易于维护。可扩展性好,支持多种编程范式和 C/C++ 扩展。库丰富,可以满足各种需求。跨平台性强,可以在多种操作系统上运行。 主要应用领域 Python在很多领域都有广泛的应用,下面是Python的主要的应用领域: 数据科学:Python 拥有强大的数据处理和分析能力,因此在数据科学领域得到了广泛的应用,如数据挖掘、机器学习、人工智能等。网络编程:Python 的网络编程能力强大,可以用于开发 Web 应用、网络爬虫、网络服务器等。自动化测试:Python 可以用于编写自动化测试脚本,可以提高测试效率和质量。游戏开发:Python 可以用于游戏开发,如 Pygame 等库可以方便地进行游戏开发。科学计算:Python 可以用于科学计算,如 NumPy、SciPy 等库可以方便地进行科学计算。 安装和使用Python 安装Python Python安装非常简单,我们可以在Python官网上下载适合自己电脑的安装包,然后一直下一步即可,但是我们需要在安装时,将Python添加到环境变量中,方便我们的使用。 使用Python 安装完Python之后,我们就可以直接使用Python,我们可以直接在cmd中使用python,如下图: 我们可以直接输入我们的脚本,如下: print("hello world!") 运行如下图: 但是更多时候,我们不会在cmd里编写Python脚本,我们更多是借助第三方的IDE来编写我们的Python脚本,一般我们会使用Pycharm或者VScode来编写我们的脚本,后续我们会介绍如何安装Pycharm和VScode. 总结 本文主要介绍了Python的历史沿革和目前的发展形式,介绍了如何安装Python和python的最基础使用,后续我们将介绍更多有关Python的使用。希望本文能帮到大家! 获取更多技术资料,请点击! 推荐 Python全栈开发与自动化测试开发班 由浅入深实战进阶,从小白到高手

了解什么是UV纹理?

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 什么是UV? UV 是与几何图形的顶点信息相对应的二维纹理坐标。UV 至关重要,因为它们提供了表面网格与图像纹理如何应用于该表面之间的联系。它们基本上是控制纹理上哪些像素对应于 3D 网格上的哪个顶点的标记点。它们在雕刻中也很重要。 为什么UV映射很重要? 没有UV贴图的布局失真 默认情况下,大多数 3D 应用程序将在最初创建网格时创建自动 UV 布局。但是,如果您将角色头部的纹理直接拖放到 3D 模型上,您很可能会看到非常不理想的结果。这是因为在建模过程中,通常不会考虑 UV,因此,2D 图像无法按照您期望看到的方式环绕 3D 对象。 模型完成后,为了正确地设置模型纹理,您需要开始布置 UV 的过程(通常称为 UV 贴图)。这基本上是创建 3D 对象的 2D 表示的过程。想象一下,您的模型展开并展平为平面 2D 图像。自然接缝会出现在哪里?在3D模型上,哪里需要最详细的细节?这些是您在创建UV布局时需要考虑的事项类型。 UV 贴图的工作原理 UV贴图在实际应用中的样子 每个 3D 应用程序都有一个 UV 编辑器,您可以使用它来展开和编辑模型的 UV。根据您的 3D 应用程序,3D 模型上的每个面或多边形都与 UV 贴图上的面相关联。UV贴图是一项关键技能,需要掌握在表面上获得准确的纹理。 UV的实际创建是通过投影技术完成的。可以把它想象成一台投影仪在屏幕上放映电影。概念是相同的,只是在 3D 应用程序中,通常有几种不同的 UV 投影类型可供您使用。这些基于简单的几何形状,在开始为单个对象布局 UV 时,通常是一个很好的起点。 三种类型的UV贴图 以下是三种类型的UV贴图和示例: 球面图圆柱形地图平面图 请注意,虽然这些投影类型很棒,但它们通常不是每个 UV 布局的多合一解决方案。一旦你开始创建复杂的网格,你很快就会发现,单个平面或圆柱面贴图根本无法创建所需的结果。

Python函数调用的9大方法

在Python中,函数是一种非常重要的编程概念,它们使得代码模块化、可重用,并且能够提高代码的可读性。本文将深入探讨Python函数调用的9种方法,包括普通函数、匿名函数、递归函数、高阶函数等,以及它们的应用示例。 方法1:普通函数 普通函数是Python中最基本的函数类型。它们由def关键字定义,可以带有参数和返回值。 def add(a, b): return a + b result = add(3, 4) print(result) # 输出 7 方法2:匿名函数(Lambda函数) 匿名函数,也称为Lambda函数,是一种短小的、临时的函数,通常用于简单的操作。Lambda函数使用lambda关键字定义,没有函数名,可以用于函数式编程中的一些操作。 multiply = lambda x, y: x * y result = multiply(3, 4) print(result) # 输出 12 方法3:递归函数 递归函数是一种调用自身的函数。递归在解决问题中经常使用,例如计算斐波那契数列。 def fibonacci(n): if n <= 0: return 0 elif n == 1: return 1 else: return fibonacci(n-1) + fibonacci(n-2) result = fibonacci(5) print(result) # 输出 5 方法4:高阶函数 高阶函数是指能够接受函数作为参数或返回函数作为结果的函数。它们可以用于函数的组合、变换和抽象。 def apply(func, x): return func(x) square = lambda x: x**2 result = apply(square, 5) print(result) # 输出 25 方法5:闭包 闭包是一种函数对象,它包含了它自己的代码和环境。这使得它可以访问外部函数的变量,即使外部函数已经执行完毕。

ros2 基础学习 15- URDF:机器人建模方法

URDF:机器人建模方法 ROS是机器人操作系统,当然要给机器人使用啦,不过在使用之前,还得让ROS认识下我们使用的机器人,如何把一个机器人介绍给ROS呢? 为此,ROS专门提供了一种机器人建模方法——URDF(Unified Robot Description Format,统一机器人描述格式),用来描述机器人外观、性能等各方面属性。 机器人的组成 建模描述机器人的过程中,我们自己需要先熟悉机器人的组成和参数,比如机器人一般是由硬件结构、驱动系统、传感器系统、控制系统四大部分组成,市面上一些常见的机器人,无论是移动机器人还是机械臂,我们都可以按照这四大组成部分进行分解。 硬件结构 就是底盘、外壳、电机等实打实可以看到的设备; 驱动系统 就是可以驱使这些设备正常使用的装置,比如电机的驱动器,电源管理系统等; 传感系统 包括电机上的编码器、板载的IMU、安装的摄像头、雷达等等,便于机器人感知自己的状态和外部的环境; 控制系统 就是我们开发过程的主要载体了,一般是树莓派、电脑等计算平台,以及里边的操作系统和应用软件。 机器人建模的过程,其实就是按照类似的思路,通过建模语言,把机器人每一个部分都描述清楚,再组合起来的过程。 URDF ROS中的建模方法叫做URDF,全称是统一机器人描述格式,不仅可以清晰描述机器人自身的模型,还可以描述机器人的外部环境,比如这里的桌子,也可以算作一个模型。 URDF模型文件使用的是XML格式,右侧就是一个机器人的URDF描述,乍看上去,有点像网页开发的源代码,都是由一系列尖括号包围的标签和其中的属性组合而成。 如何使用这样一个文件描述机器人呢?比如这个机械臂,大家可以看下自己的手臂,我们的手臂是由大臂和小臂组成,他们独自是无法运动的,必须通过一个手肘关节连接之后,才能通过肌肉驱动,产生相对运动。 在建模中,大臂和小臂就类似机器人的这些独立的刚体部分,称为连杆Link,手肘就类似于机器人电机驱动部分,称为关节joint。 所以在URDF建模过程中,关键任务就是通过这里的和,理清楚每一个连杆和关节的描述信息。 连杆Link的描述 标签用来描述机器人某个刚体部分的外观和物理属性,外观包括尺寸、颜色、形状,物理属性包括质量、惯性矩阵、碰撞参数等。 以这个机械臂连杆为例,它的link描述如下: link标签中的name表示该连杆的名称,我们可以自定义,未来joint连接link的时候,会使用到这个名称。 link里边的部分用来描述机器人的外观,比如: 表示几何形状,里边使用调用了一个在三维软件中提前设计好的蓝色外观,就是这个stl文件,看上去和真实机器人是一致的 表示坐标系相对初始位置的偏移,分别是x、y、z方向上的平移,和roll、pitch、raw旋转,不需要偏移的话,就全为0。 第二个部分,描述碰撞参数,里边的内容似乎和一样,也有和,看似相同,其实区别还是比较大的。 部分重在描述机器人看上去的状态,也就是视觉效果; 部分则是描述机器人运动过程中的状态,比如机器人与外界如何接触算作碰撞。在这个机器人模型中,蓝色部分是通过来描述的。 在实际控制过程中,这样复杂的外观在计算碰撞检测时,要求的算力较高,为了简化计算,我们将碰撞检测用的模型简化为了绿色框的圆柱体,也就是里边描述的形状。 坐标系偏移也是类似,可以描述刚体质心的偏移。 如果是移动机器人的话,link也可以用来描述小车的车体、轮子等部分。 关节Joint描述 机器人模型中的刚体最终要通过关节joint连接之后,才能产生相对运动。 URDF中的关节有六种运动类型。 continuous,描述旋转运动,可以围绕某一个轴无限旋转,比如小车的轮子,就属于这种类型。 revolute,也是旋转关节,和continuous类型的区别在于不能无限旋转,而是带有角度限制,比如机械臂的两个连杆,就属于这种运动。 prismatic,是滑动关节,可以沿某一个轴平移,也带有位置的极限,一般直线电机就是这种运动方式。 fixed,固定关节,是唯一一种不允许运动的关节,不过使用还是比较频繁的,比如相机这个连杆,安装在机器人上,相对位置是不会变化的,此时使用的连接方式就是Fixed。 Floating是浮动关节,第六种planar是平面关节,这两种使用相对较少。 在URDF模型中,每一个link都使用这样一段xml内容描述,比如关节的名字叫什么,运动类型是哪一种。 parent标签:描述父连杆; child标签:描述子连杆,子连杆会相对父连杆发生运动; origin:表示两个连杆坐标系之间的关系,也就是图中红色的向量,可以理解为这两个连杆该如何安装到一起; axis表示关节运动轴的单位向量,比如z等于1,就表示这个旋转运动是围绕z轴的正方向进行的; limit就表示运动的一些限制了,比如最小位置,最大位置,和最大速度等。

记录一下,二本渣转行Python实现空调自由,下午茶自由

基本情况 本科专业建筑环境与设备工程,16年7月毕业,同学很多去了工地。我受不了工地居无定所,去了制造业。 制造业确实环境不好,虽然我的岗位是研发工程师,但是经常要在车间干体力活车间,累的满头大汗,跟车间的大妈大叔撕逼。 不管是自然环境还是人文环境,只能用恶劣来形容吧。而且我们是单休,动不动就加班,最扯淡的是加班是没有钱的。但凡节假日一般放一天,国企两天,搞笑的是周日值班一天,给32块钱。 看到我们办公室里面三十几岁的男生还没有女朋友,还有即使有女朋友的还在住员工宿舍,而且有的快十年的工作经验,还出国待过,现在月薪不到1w。 想到七八年以后我的生活是这样,我就惶恐不安,我觉得我七八年后不要过这样的生活。 于是决心转行,瞄准IT行业。理由很简单,从业环境好,工作内容没有体力活(ps:相对于体力劳动,我更喜欢脑力劳动),相同的努力下,钱比制造业多,而且现在各个行业都与互联网相关。 提前准备 从去年也就是11月开始自学数据分析的一些课程。当时由于没有计算机基础,走了不少弯路,看了一些教程,东拼西凑,感觉乱七八糟。 甚至有一段时间,我不断怀疑自己,放弃大学四年的知识,现在不做传统行业的研发,转身去接触一个新的东西是不是对的? 那段时间,我认识了一些数据分析岗位的在职者,年龄不大。有个同学就建议我先做python开发,再做数据分析,(因为他说数据分析如何如何难,机器学习算法都是大牛玩儿的)我当时犹豫了很久,还自学了Django教程,前端知识,http协议,去熟悉Linux。准备去找python开发的职位(其实我对软件开发不感冒)。 后来,我在“得到” 上看了两篇文章,至今对我很有启发。 第一篇文章《转行》说了以下重点: 1. 寻找一个导师 导师可以降低你加入一个新行业的成本,帮助你熟悉环境和行业规则,也会鼓励你完成心理方面的转变。 2. 建立新的社交网络 过去的人脉关系会阻碍你的转行,因为他们是以过去对你的认知来评价你。新领域的人脉,会给你提供各种各样新的机会和情感支持,帮助你融入。 第二篇文章《职场人终身学习心法》归纳下: 首先,如果想系统地学习,那就建议选择系统的渠道。 既然在这个领域你是新手,就不要指望自己能把散落的信息整合成系统了,那是高手要做的事情。要想系统地学习,那就踏踏实实地拿出几个月的时间来,看5本这个领域的经典书,选一门系统课,或者跟着一个系统学习过的老师把这个领域的骨架摸清楚。 你又不比别人聪明几倍,却想用几分之一的时间,就掌握人家花了好长时间下了硬功夫,系统掌握的知识,怎么可能呢? 先接受一个已经存在的系统,再在上面修修改改,对于新手是最适合的方案。 用3句话来总结一下上面两篇文章: 1. 转行最好有人带、有人指导 2. 去认识做大数据这块的人,否则身边的人脉关系会不断否定你,打击你(以及要说服女朋友支持你折腾,如果有的话!) 3.系统学习,要几个月,不要贪多,要扎扎实实看书 这样一看,我就明白多了,并且知道该怎么做了。 当然,上面的建议是建立在你下决心要转行的基础上。先问问自己下面几个问题: 喜欢不喜欢转行后的工作? 评估自己转行的优势与劣势? 问问自己为什么不待在现在的行业了? 自己是不是有很强的自我驱动力? 自己是不是能保持终身学习? 自己搜集信息和整合信息的能力是不是很强?自己是不是不怕失败? 转行失败了,我拿什么保底? 把这些令人焦虑和令人害怕的事情考虑清楚,再去做决定,我要不要转行。这些问题你想清楚了,就清除了学习的道路上的精神障碍。 学习的那段时间,我基本上学习每天3-5小时。我们是单休,周日的话,我陪着女友。(此处撒了狗粮)。其实每个星期也就平均30小时左右。加上在办公室没有事情的情况下,我给工作的电脑装了某些软件,看看东西,用有道云笔记记录。 基本上,这几个月,先后看了《python背记手册》《Python编程从入门到实战》《R语言实战》 ,还看了SQL的一些教程,以及一些数据分析师需要的思维。最后面试的时候,掌握的技能,SQL,python,R。会一点简单的爬虫,懂点Linux。 但是但是,每一个我都掌握的很浅,书我都只看了一半。像一些复杂的算法,我还不能深入的理解。 辞职面试 自己2月28号辞职流程走完,是直接裸辞了,当时很多人劝我不要冲动,不要裸辞,没想到辞职以后整个神清气爽。 我自己认为不能等完全学好了再去找,到那时候黄花菜都凉了,毕竟世上的事情都没有那么多时间让你去准备好的,而且17届的马上也毕业出来了,到时候再去会更加尴尬。 辞职以后,3月5号来到深圳。密集的面试维持了两周,几乎天天出去面试,还有就是面试的时候,会被打脸的,问一些技术细节,以及没有工作经验。我是很直接就告诉面试官,我就是要转行的,我没有这块的工作经验。 面试主要是两块,一块是考察你的思维,还有一块是考察你的技术细节 。期间面试的比较有名的公司有平安银行,ofo,链家网。拿了3个offer。但是其他两个都是大小周加班,我都没有选择。现在的公司是做互联网金融的。 转行后的我 我之前在制造业,现在出来找工作,特别在意是不是双休,五险一金有没有给我交全(之前公司是没有一金的),节假日是不是正常放假。 现在的话,这个公司制度是,不鼓励员工加班,基本一下班,办公室人几乎走光。我自己也走啦,回来以后继续学习。 每天对着电脑上班,确实比之前的工作累好多。但是还是感觉比之前工作状态好太多。 还有就是未来的领导很重要,我面试时候都会跟领导聊聊,看看领导人咋样,问问公司氛围咋样,这样对自己进入以后就非常有益。 待遇这块是比以前的工作好一些的。考虑到还要在深圳租房子,每个月剩不了多少。但是每天下班回来自己煮饭,吃的很饱,就很开心。周末的话,和女友在一起煮饭。这个周末我俩煮了鸡汤。 自己的话也知道自己水平,虽然已经入职了,但是像自己很菜鸟的,老大让我用python连个数据库,我连了一下午才搞定。还让我用python写个excel数据透视的自动化报表,憋了一天了,我的代码还没出来。现在来看,转行也只是进行了一半,因为后面还要继续学的很多啊。 新公司用的SAS,我现在又开始看SAS了。老大也一直跟我强调,工具只是用来解决问题的,如果你有更好的办法就去尝试,数据分析思维是很重要的。不过我的老大,人非常好,也愿意教我。 后面的路还很长,希望自己一直坚持,一直加油。做一个终身学习者。 关于转行的话,确实很难,可能会交不起房租,像我现在就是穷的一塌糊涂,不过幸好有个女朋友哈哈,没钱了问她要。而且影响因素是多方面的,希望各位要转行的宝宝一定要慎重,想清楚。其次,就是一定要坚持学习,不要怀疑自己,状态要好。 下面这个是以前的工作环境。办公室在旁边的小房子里面。 下面是新公司的办公环境,瞬间觉得转行后生活很美好。没在制造业和工地待过的人是无法体会这种改变的,自然环境和人文环境简直是质的飞跃啊。 转行以后的生活 「Python学习资源推荐」 一、Python所有方向的学习路线 Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。 二、学习软件 工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

什么是多边形网格以及如何编辑它?

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 ✔更好地了解多边形网格概念和基本元素。 ✔了解在创建 3D 对象时是否可以不使用多边形网格。 介绍 多边形网格是 3D 建模中经常使用的一个词,它的含义几乎已经消失了。因此,如果您想了解什么是 3D 建模,您还必须深入研究多边形网格概念。 在这个简短的指南中,我们将阐明它的基本组件,以及一般的过程,让您更好地了解多边形网格。 什么是多边形网格? 多边形网格是顶点、边和面的集合,用于定义 3D 对象的形状和轮廓。它是计算机图形学中用于在 3D 空间中创建对象的最古老的几何表示形式。 这是一个带有纹理坐标的多边形网格 它背后的想法很简单。多边形代表由连接虚拟点组成的“平面”形状。但多边形网格远不止于此。 所以,让我们在这里更详细地了解一下。 多边形网格:元素 虽然多边形网格的概念有点模糊,但一旦你研究了它背后的几何形状,一切都变得简单了。 这些是多边形网格的元素: 多边形网格构建点 - 顶点位置 顶点 3D 空间中构成面的点,并存储 x、y 和 z 坐标信息。边 连接两个顶点的一条线。面 一 组闭合的边,其中三边面形成三角形网格,四边面形成四边形网格。面包含用于照明和阴影的曲面信息。多边形是一组面(通常当您有四个以上的连接顶点时)。曲面 一组连接的多边形,用于定义网格的不同元素。 注意:通常您希望构成面的顶点数位于同一平面上。但是,如果折点超过三个,则多边形可以是凹面或凸面。 除了我们已经讨论过的所有元素之外,提到UV坐标也很重要,因为大多数网格都支持它们。UV 坐标包括 3D 对象的 2D 表示,用于定义在 UV 映射时如何将纹理应用于该对象。 尽管多边形网格通过各种技术得到应用,但它并不是最终的解决方案。仍然有一些对象无法使用网格表示创建。 它通常不能覆盖曲面和有机物体。更不用说液体、头发和其他折痕物体,这些物体很难用基本的多边形网格创建。 多边形网格的构造 在详细介绍多边形网格创建过程之前,我们想介绍一下用于构建多边形网格的最常用工具。 虽然您可以通过定义所有顶点和面来手动创建多边形网格,但更常见的方法是使用特定工具。 细分 顾名思义,细分工具通过添加新的顶点和面将边和面分割成更小的部分。旧顶点和边定义新面的位置。但是,它可能会更改在此过程中连接的旧顶点。

零基础python学习后薪资有多少?

零基础python学习后薪资有多少?python开发的第三方招聘信息网站显示15k左右,具体薪资多少根据个人的能力以及工作年限都有很大的关系。Python应用广泛在软件质量控制、提升开发效率、可移植性、组件集成、丰富库支持等方面均处占优势。 无论是从入门级选手到专业级开发人员都在做的爬虫,Web 程序开发、桌面程序开发、科学计算、图像处理,Python 都可以胜任。 对于那些从未写过代码的人零基础的人来说,与其他语言相比,Python 代码也很简洁易懂。使用 Python 编写的程序其可维护性也是很不错的。从商业角度来看,这也可以很大程度上在降低开发成本的同时提高程序员的生产力。 目前初级Python工程师薪资待遇就达10-15K,而随着开发经验的积累,Python开发者薪资呈直线上升的变化趋势,工作8年的Python开发者薪资攀升至25K左右。随着互联网的发展如此高的薪资和广阔的市场前景引起了人们的关注。 正因为Python在大数据和人工智能领域的爆发性发展, 导致Python 方向岗位的薪水在水涨船高,成为目前极有潜力的编程语言之一。目前国内python人才需求呈大规模上升,薪资水平也水涨船高。学python的人大多非科班出身。很多大学并没有开始此专业,因此就出现了大量的人才缺口。 而薪资也随之涨高。目前Python开发者的工资基本都是在15K以上,而且它的涨幅不知道为什么高的离谱,可以达到50%的涨幅, Python语言的发展前景非常可观,那么零基础python学习后薪资15k要掌握哪些技术? 一、 Python 语言 想使用 Python 做后台开发,第一步就是就是学习 Python 语言。首先要将学习 Python 基本语法,再学习 Python 高级用法(例如闭包,面向对象等),接着再了解各个标准库的用法,最后熟悉下 PEP8 编码规范。 二、开发框架 大部分后台业务逻辑都会使用 Web 框架来开发,目的是提高开发效率。常用的 Python web框架有Django、Flask、Tornado 等。个人推荐熟练掌握 Django,因为 Django 是一个全能型框架。另外需要了解 REST,学习如何编写 RESTful APIs。 三、数据库 现在网站业务后端用得比较多的有三种类型的数据库,关系型数据库(mysql等),文档型数据库(mongodb等),和内存型数据库(redis等)。因为三种数据库各有优势和其使用场景,所以需要了解下不同类型数据库的使用方法和应用场景,灵活应用到后端代码中。所以要学习如何使用、设计、优化数据库。 四、前端知识 需要了解基本的HTML、CSS、JavaScript。通常前后端开发是分离的,了解前端知识是有帮助的。能知道自己需要将传递哪些内容给前端,从而提供团队合作效率。如果对前端知识感兴趣,可以了解下 Bootstrap、Vue等。 五、Web 服务器 Nginx 目前很流行,使用也是很广泛。因为其占用内存少,稳定性高、并发能力强。所以需要掌握 Web 应用部署以及如何使用 Nginx 实现负载均衡。 六、Linux 操作系统 Nginx 通常运行在 Linux 服务器上,所以需要学习 Linux 系统。了解一些常见的 Linux 命令、文件与目录管理、账号与身份管理、程序与资源管理等。 七、计算机网络 后台开发经常要跟网络打交道,所以熟悉对网络协议 TCP/IP 和 HTTP。学习 TCP/IP 可以阅读《TCP/IP详解卷1:协议》,学习 HTTP 可以阅读《图解Http》和《Http权威指南》

Three.js 纹理贴图的实现

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 纹理贴图简介 当我们创建一个网格时,比如我们不起眼的立方体,我们传入两个组件:几何体和材质。 网格需要两个子组件:几何体和材料 const mesh = new Mesh(geometry, material); 几何形状定义了网格的形状,材料定义了网格的各种表面属性,特别是它对光的反应。几何体和材质,以及影响网格的任何光影,在渲染场景时控制网格的外观。目前,我们的场景包含一个网格,其形状由 a 定义,曲面由 a 定义,颜色参数设置为紫色。这由单个 照亮,当我们渲染场景时,结果就是这个简单的紫色框。BoxBufferGeometryMeshStandardMaterialDirectionalLight 由混凝土制成的立方体。 将其与现实世界中的混凝土盒子进行比较 - 或木箱,或金属箱,或由几乎任何物质制成的盒子,除了光滑的塑料,我们可以立即看到我们的3D盒子根本不现实。现实世界中的物体通常是划伤、破损和肮脏的。但是,应用于我们盒子的材料看起来不是这样的。相反,它由平滑地应用于网格的整个表面的单一颜色组成。除非我们希望我们所有的作品看起来像全新的塑料,否则这是行不通的。 除了颜色之外,材质还有许多参数,我们可以用这些参数来调整物体表面的各种属性,如粗糙度、金属度、不透明度等。但是,就像颜色参数一样,这些参数均匀地应用于网格的整个表面。例如,如果我们增加材料的属性,物体的整个表面将变得更加粗糙。如果我们将 设置为红色,则整个对象将变为红色。.roughness.color 相比之下,大多数真实世界对象的表面属性从一个点到另一个点会发生变化。考虑一个代表人脸的网格。再一次,它由几何形状和材料组成,就像我们的立方体网格一样。大比例特征(如眼睛、鼻子、耳朵、颈部和下巴)由几何图形定义。然而,要创建逼真的面孔,不仅仅是精心制作的几何图形。仔细观察皮肤,我们可以看到有很多小肿块、皱纹和毛孔,更不用说眉毛、嘴唇和轻微的胡须了。在创建像人脸这样的复杂模型时,艺术家必须决定使用几何图形表示模型的哪些部分,以及在材质级别表示哪些部分,请记住,使用材料表示事物通常比几何图形便宜。当模型必须在移动设备上运行时,这是一个特别重要的考虑因素,因为高性能至关重要。例如,虽然可以在几何形状上对眉毛上的每根头发进行建模,但这样做会使该模型不适合在除最强大的设备之外的所有设备上实时使用。相反,我们必须在材质级别表示头发等小特征,并为眼睛、鼻子和耳朵等大比例特征保留几何图形。 另请注意,此面由单个几何图形组成。我们通常希望避免将几何体拆分得过多,因为每个网格只能有一个几何体,因此每个单独的几何体都对应于场景中的新网格。场景中的对象越少,性能越好,开发人员和 3D 美术师也更容易使用。换句话说,我们不想被迫为耳朵和眼睛创造不同的几何形状。无论如何,这是不切实际的。仔细观察嘴唇,我们可以看到嘴唇的红色和下巴的肤色之间没有明显的区别。这意味着我们需要某种方法来修改材料属性,以便它们可以在物体表面上平滑地变化。我们需要能够这样说: 构成嘴唇的几何形状部分是红色的构成下巴的几何形状部分是肤色,上面覆盖着轻微的胡须构成眉毛的几何形状部分是头发颜色的 ...等等。这不仅适用于颜色。例如,皮肤比头发和嘴唇更有光泽。因此,我们还需要能够指定其他属性(如粗糙度)如何在几何体中从一个点变化到下一个点。 此颜色纹理使用 UV 映射映射到面部几何体上 这就是纹理映射的用武之地。用最简单的术语来说,纹理映射意味着拍摄图像并将其拉伸到 3D 对象的表面上。我们将以这种方式使用的图像称为纹理,我们可以使用纹理来表示颜色、粗糙度和不透明度等材质属性。例如,要更改几何体某个区域的颜色,我们将位于顶部的纹理区域的颜色更改为颜色,如附着在面部模型上的颜色纹理所示。 虽然获取 2D 纹理并将其拉伸到像立方体这样的规则形状上很容易,但对于像脸这样的不规则几何体来说,要做到这一点要困难得多,多年来,已经开发了许多纹理映射技术。也许最简单的技术是投影映射,它将纹理投射到物体(或场景)上,就好像它通过电影放映机照射一样。想象一下,把你的手放在电影放映机前,看到图像投射到你的皮肤上。 将 UV 坐标显式写入纹理的测试纹理。 虽然投影映射和其他技术仍然广泛用于创建阴影(或模拟投影仪)等操作,但这不适用于将面部的颜色纹理附加到面部几何体上。取而代之的是,我们使用一种称为UV映射的技术,它允许我们在几何体上的点和面上的点之间创建连接。使用UV贴图,我们将纹理划分为带有点的2D网格(0,0)在左下角和点(1,1)在右上角。然后,重点(0. 5,0.5)将位于图像的确切中心。同样,几何体中的每个点在网格的 3D 局部空间中都有一个位置。因此,UV 贴图是将纹理中的 2D 点分配给几何体中的 3D 点的过程。例如,假设面部模型中的嘴唇位于该点(0,0,0 ).我们可以看到纹理中的嘴唇靠近中心,在周围(0. 5,0.5).因此,我们将创建一个映射: (0. 5,0.5)⟶(0,0,0 )

工作五年,一年内我靠这系列java面试宝典从13K到大厂30K

我认为对于面试以及进阶最佳的学习方法莫过于刷题+博客+书籍+总结! 前三者我将淋漓尽致地挥毫于这篇文章中,至于总结要靠个人。实际上越到后面你越会发现面试并不难,其次就是在刷题的过程中有没有去思考,刷题只是次之,这又是一个层次了,这里暂时不提后面再谈。 我总结了一系列大厂面试中常问的面试技术点、深入解析以及答案,将为最近准备面试的各位去大厂保驾护航! 何谓面试? 我所理解的面试,它是一个过程,是不断沉淀、不断总结、善于传达自己的专业领域技术以及解决问题能力的过程。 以下是我总结的一些Java面试资料和答案,我靠着这份资料,薪资从12K涨到了30K,对于工作5年来说,这个不算什么。但还是希望可以帮助到大家! 并发篇 并发编程可以说是Java编程的灵魂,可以让系统性能更高,用户响应速度更快,让我们的程序模块化和异步化,且内部机制与实现原理也是一线互联网面试官比较青睐的。 知识点: Java内存模型 AQS、CAS 锁 并发工具类 …… 面试题:(部分) Synchronized 相关问题 1. Synchronized 用过吗,其原理是什么? 2. 获取对象的锁,这个“锁”到底是什么?如何确定对象的锁? 3. 乐观锁一定就是好的吗? 可重入锁 ReentrantLock 及其他显式锁相关问题 1. 除了 ReetrantLock,你还接触过 JUC 中的哪些并发工具? 2. CyclicBarrier 和 CountDownLatch 看起来很相似,请对比下呢? Java 线程池相关问题 1. Java 中的线程池是如何实现的? 2. 如何在 Java 线程池中提交线程? Java 内存模型相关问题 1. 请对比下 volatile 对比 Synchronized 的异同。 2. 请谈谈 ThreadLocal 是怎么解决并发安全的? 3. 很多人都说要慎用 ThreadLocal,谈谈你的理解,使用 ThreadLocal 需要注意些什么? 4. 你在多线程环境中遇到的常见的问题是什么?你是怎么解决它的? 5. …… JVM 阿里面试必问JVM!我们所有的程序都运行在Java虚拟机上,只有对Java虚拟机底层原理进行深入的学习,全面理解JVM的运行机制、运行时数据区、垃圾收集算法等,还有事务及Spring MVC整个流程、AQS等。

个体工商户年报申报流程(不要再花冤枉钱)

个体工商户年报申报网址:https://www.gsxt.gov.cn/index.html 个体工商户年报一般在1月1日至6月30日报。根据相关法律规定,个体工商户应当于每年1月1日至6月30日,通过企业信用信息公示系统或者直接向负责其登记的工商行政管理部门报送上一年度年度报告。 目录 一、进入申报官网 二、选择登记机关所在地 三、选择个体户登录方式 四、选择年度报告填写 一、进入申报官网 首先,进入到国家企业信用信息公示系统,点击主页中的企业信息填报。 二、选择登记机关所在地 个体户营业执照在哪里地方注册的,就选择哪里。 三、选择个体户登录方式 选择统一社会信用代码和身份证号码进行登录,统一社会信用代码在营业执照上有。 四、选择年度报告填写 登录之后选择年度报告填写。 然后根据自己的经营情况,如实填写即可。填写完成之后,选择左侧的预览并公示,最后选择提交并公示就完成了。 

全新热门电商API接口,实现闲鱼商品详细搜索功能

近年来,电商行业蓬勃发展,API(Application Programming Interface)接口已经成为电商平台的重要组成部分。API接口联讯数据不仅可以实现平台间的数据交互,还可以为开发者提供丰富的功能,满足用户多样化的需求。在这个全新的热门电商API接口的时代背景下,闲鱼在商品详细搜索功能方面迎来了一次革新。 一、什么是热门电商API接口 热门电商API接口是指电商平台提供的用于与其他平台进行数据交互的接口。这些接口可以将平台上的数据、功能和资源开放给开发者,使得开发者可以利用这些接口实现第三方应用程序和服务。通过使用热门电商API接口,用户可以更加便捷地获取、搜索、管理电商平台的商品信息。 二、闲鱼商品详细搜索功能的需求 作为中国最大的二手交易平台,闲鱼拥有庞大的商品信息数据库。然而,传统的搜索功能对于用户来说并不足够。用户往往需要根据商品的更加详细的属性进行搜索,如商品的品牌、型号、颜色、尺寸等。因此,开发一种全新的商品详细搜索功能对于闲鱼来说势在必行。 三、实现闲鱼商品详细搜索功能的全新热门电商API接口 为了实现全新的闲鱼商品详细搜索功能,闲鱼开发团队基于热门电商API接口进行了全面的升级和优化。新的API接口不仅支持对商品的基本属性进行搜索,还支持对商品更加详细的属性进行搜索。例如,用户可以根据商品的品牌、型号、颜色、尺寸等进行筛选。此外,新的API接口还支持模糊搜索、排序和分页等功能,为用户提供更加精准、便捷的搜索体验。 四、全新热门电商API接口的优势 全新热门电商API接口的引入给用户带来了诸多优势。首先,用户可以根据更加详细的商品属性进行搜索,提高了搜索结果的准确性和精确性。其次,API接口支持模糊搜索,使得用户无需准确输入商品的属性值,即可快速找到所需商品。此外,API接口还支持对搜索结果进行排序和分页,帮助用户更好地组织和展示搜索结果。总而言之,全新热门电商API接口为用户提供了更加智能、个性化的商品搜索体验。 全新热门电商API接口的推出为闲鱼的商品详细搜索功能带来了革命性的提升。通过利用API接口,用户可以根据商品更加详细的属性进行搜索,提高了搜索的准确性和精确性。全新热门电商API接口的推出,标志着闲鱼在智能搜索领域的进一步创新,将为用户带来更加便捷、准确的商品搜索体验。

【每日论文阅读】Do Perceptually Aligned Gradients Imply Robustness?

近似人眼梯度 https://icml.cc/virtual/2023/oral/25482 对抗性鲁棒分类器具有非鲁棒模型所没有的特征——感知对齐梯度(PAG)。它们相对于输入的梯度与人类的感知非常一致。一些研究已将 PAG 确定为稳健训练的副产品,但没有一篇研究将其视为一种独立现象,也没有研究其自身的影响。在这项工作中,我们关注这一特征并测试感知对齐梯度是否意味着鲁棒性。为此,我们制定了一个新的目标,在训练分类器中直接推广 PAG,并检查具有此类梯度的模型是否对对抗性攻击更稳健。对多个数据集和架构的大量实验验证了具有对齐梯度的模型表现出显着的鲁棒性,揭示了 PAG 和鲁棒性之间令人惊讶的双向联系。最后,我们表明更好的梯度对齐可以提高鲁棒性,并利用这一观察结果来提高现有对抗训练技术的鲁棒性。 噪音图-》目标类图。人言认同的方向走,因此是人言对齐梯度。 利用范数做

Java面试资料合集(24年目前最全整理面试跳槽必备)

有了他们闭着眼睛也能找到工作? 这段时间不是正好到了金三银四的季节了嘛,我司前段时间在整体环境不是很景气的大前提下也是招到了很多的开发小伙伴。 听到开发组的组长说这批进来的一些新人还算是很优秀的,本来我心里的小算盘是,这样后面再给他们提一些需求的时候应该就能够正常完成了吧,不会出现在发版的时候还有很多bug需要等到凌晨才能够回家,不会出现刚刚提出的需求就直接一句这个功能没法做的情况了吧 但是 事与愿违的事情是好像并没有开发组长想的那么好,我后面询问了组长,组长的意思确实说,在面试的时候表现的还不错啊 ,就是不知道怎么回事在具体执行的时候好像表现的却有些不尽如人意啦。 于是我抱着怀疑的态度打入了那些开发人员的内部 想要一探究竟 最终也是在我的软硬兼施下 那些人都拿出了自己的看家本领——原来是一份又一份的各种面试资料。 于是我也是把他们都给收集了起来,正好这段时间大家也都在找工作,就无偿的分享给大家 毕竟现在互联网寒冬,有了这些资料还是能够给自己增添一些底气的。 都有什么 Java基础 基础部分的话,只需要看这个部分,就能够吊打市面上一般的中厂了,把这个部分的内容吃透就能够顺利的通过一到三面的基础部分, 从最开始的JVM 入手到 基础的Java集合与基础 再到多线程和高并发,再到后面的Spring的原理与基础以及网络等等。应有尽有 如下的JVM: 对于其中 start 和run 的区别 这个也是面试过程中经常问道的点: 又或者是Java中令人头疼的锁的相关内容: 等等等等 大家都可以看看目录 基本上现在市面上主流的技术都会涉及到,所以拥有了这个 就是相当于拥有了大厂的第一块敲门砖 当然 这些只能是基础部分相当于是给你打开了一扇通往大厂的门,但是后面却还是需要披荆斩棘 微服务为王? 现在微服务为王的时代里面 ,你能够准确说出来目前的微服务都有哪些框架吗?你能够完整的说出RPC的原理嘛?你有能够准确的说出来Dubbo的实现原理吗? 若是不能够 我推荐你看下面的内容: Dubbo原理讲解: 以及各种可能出现的题目,都会考虑在里面 http 或者https 当然不排除一些想要进行更深层次学习的小伙伴,那就离不开 http协议了 不要小看这个简单的协议,可以说 出一本书来讲都不为过 首先会进行一个最为详细的讲诉: 然后对于其中的头部的具体详细讲解也都一应俱全: 细致入微的讲解:从1.0 讲到1.1 可以说只要是你把这个pdf里面的http协议内容吃透 就算是以基础为长的腾讯也那你没有办法: Redis 既然前面都聊完服务端的相关内容,那么又怎么少得了redis呢? 但是你对Redis 又有多少的了解呢? 明白到底该如何讲明白有什么优缺点吗? 才能够让面试官认为你是有真材实料 有是否明白有哪些的过期策略呢? 又或者是对于各种场景下的具体使用呢?能不能真的完全讲明白 然后面面俱到呢? 面试大厂必备 若是你觉得上面的信息太过于繁杂或者是太过于散,那没有问题 这里还有一些直接是面试大厂需要的内容: 线程相关: volatile相关内容: 什么是双亲委派机制: 以上的资料可以说得上是完完全全能够满足你的各种要求。 小结 当然更多的内容这里就不再过多展示了 ,但是若是你以为我整理的就那么多内容 那你就大错特错了

Java中加载本地库的方法:System.load与System.loadLibrary

Java中加载本地库的方法:System.load与System.loadLibrary 当你在Java中工作与本地库(Native Libraries)即JNI(Java Native Interface)时,了解如何加载这些库文件是非常重要的。JNI允许Java代码和其他语言写的代码进行交互,这通常是通过称为“本地库”的共享库文件实现的。在Java中,有两种方法可以加载这些本地库:System.load和System.loadLibrary。 System.load 使用System.load方法可以加载库文件,这要求你提供库文件的完整绝对路径。这里的“库文件”既可以是JNI库也可以是任何其他类型的共享库。 例如,在Windows平台上加载一个JNI库,你可以这样做: System.load("C://path_to_your_library//YourLibrary.dll"); 这种方式允许你从任何你想要的位置加载库,不受java.library.path系统属性的限制。 System.loadLibrary 而System.loadLibrary方法略有不同,它只需要库的名称而不是完整路径,也不需要文件的扩展名。 例如,在Windows上: System.loadLibrary("YourLibrary"); 这里,“YourLibrary.dll”必须位于java.library.path指定的路径中。 要了解java.library.path的当前设置,可以获取这个属性的值: System.getProperty("java.library.path"); 在Windows上,这通常包括一些与JRE相关的目录、程序的当前目录、Windows目录、系统(System32)目录和PATH环境变量指定的目录。 C:\Windows\System32 C:\Windows\SysWOW64 注意依赖的库 如果你的JNI库依赖其他的库,你需要确保这些依赖也在java.library.path中或者在系统的PATH中。如果你使用System.load来载入主JNI库,那么也需要先用System.load单独地加载每一个依赖。 例如,如果YourLibrary.dll依赖于Dependency.dll,那么: System.load("C://path_to_your_library//Dependency.dll"); System.load("C://path_to_your_library//YourLibrary.dll"); 如果使用System.loadLibrary,只需确保Dependency.dll在java.library.path的某个目录下即可。 总结 使用System.load和System.loadLibrary都可以加载JNI库,关键的区别在于路径的指定方式。 加载库时出现的任何错误通常会抛出一个UnsatisfiedLinkError,这意味着Java不能找到你指定的本地库。如果发生这种情况,检查路径和库名是否正确,并确保所有必需的依赖都是可访问的。

目标检测-One Stage-YOLOv5

文章目录 前言一、YOLOv5的网络结构和流程YOLOv5的不同版本YOLOv5的流程YOLOv5s的网络结构图 二、YOLOv5的创新点1. 网络结构2. 输入数据处理3. 训练策略 总结 前言 前文目标检测-One Stage-YOLOv4提到YOLOv4主要是基于技巧的集成,对于算法落地具有重大意义,YOLOv5则在工程应用方面更近一步,将算法深度集成,使得使用者不用再过多关注算法实现,且提供了多种预训练模型,到目前为止,由ultralytics团队开发的ultralytics包,已经支持YOLOv3、YOLOv5、YOLOv6、YOLOv8、YOLO-NAS、RT-DETR等等,其中YOLOv5和当前YOLO家族最新的YOLOv8是由ultralytics团队研发的。 提示:以下是本篇文章正文内容,下面内容可供参考 一、YOLOv5的网络结构和流程 YOLOv5的不同版本 YOLOv5给出了五个版本:Yolov5n、Yolov5s、Yolov5m、Yolov5l、Yolov5x ps: 要注意的是Yolov5n是YOLOv5 系列中的一个变体,专为 Nano 设备(如 NVIDIA Jetson Nano)进行优化。YOLOv5n 在保持较快速度的同时,提供适用于边缘设备的准确度。因此不算Yolov5n的话,YOLOv5s网络是YOLOv5系列中深度最小,特征图的宽度(channels)最小的网络。其他的三种(m、l、x)都是在此基础上不断加深,不断加宽。 YOLOv5的流程 利用自适应图片缩放技术对输入图片进行缩放 ps: 传统的缩放填充后,两端的黑边大小都不同,如果填充的比较多,则存在信息冗余,影响推理速度。 yolov5对原始图像自适应的添加最少的黑边。图像高度上两端的黑边变少了,在推理时,计算量也会减少,即目标检测速度会得到提升。注意自适应图片缩放只在检测时使用,在训练时仍使用传统填充方法。举例说明自适应图片缩放计算过程: 根据原始图片大小以及输入到网络的图片大小计算缩放比例,并选择小的缩放系数 第一步得到缩放系数的计算缩放后的图片大小 计算黑边填充数值:将416-312=104,得到原本需要填充的高度,再采用32对104取余,得到8个像素,再除以2,即得到图片高度两端需要填充的数值。之所以利用32取余,是因为YOLOv5的网络经过5次下采样,而2的5次方,等于32。所以至少要去掉32的倍数,再进行取余,以免产生尺度太小走不完stride(filter在原图上扫描时,需要跳跃的格数)的问题。 将利用Focus在不丢失信息情况下对输入影像进行下采样将下采样图像输入Backbone+PANet提取多尺度特征利用自适应anchor计算获取预选框 ps: YOLO系列中,可以针对数据集设置初始的anchor。在网络训练中,网络在anchor的基础上输出预测框,进而和GT框进行比较,计算loss,再反向更新,迭代网络参数。在YOLOv3、4版本中,设置初始anchor的大小都是通过单独的程序使用K-means算法得到,但是在YOLOv5中,将此功能嵌入到代码中,每次训练数据集之前,都会自动计算该数据集最合适的Anchor尺寸,该功能可以在代码中设置超参数进行关闭。自适应anchor的计算具体过程如下: ①获取数据集中所有目标的宽和高。 ②将每张图片中按照等比例缩放的方式到 resize 指定大小,这里保证宽高中的最大值符合指定大小。 ③将 bboxes 从相对坐标改成绝对坐标,这里乘以的是缩放后的宽高。 ④筛选 bboxes,保留宽高都大于等于两个像素的 bboxes。 ⑤使用 k-means 聚类三方得到n个 anchors,与YOLOv3、YOLOv4 操作一样。 ⑥使用遗传算法随机对 anchors 的宽高进行变异。倘若变异后的效果好,就将变异后的结果赋值给 anchors;如果变异后效果变差就跳过,默认变异1000次。这里是使用 anchor_fitness 方法计算得到的适应度 fitness,然后再进行评估。 将上一步得到的anchor输入不同的分类和边框回归器使用非极大值抑制DIoU-NMS去除冗余窗口(训练时用的CIoU loss) YOLOv5s的网络结构图 二、YOLOv5的创新点 1. 网络结构 卷积块从CBM换回了CBL(激活函数从Mish到Leaky relu)设计了CSP_2X结构应用于Neck中,加强了网络特征融合的能力。backbone最前端添加了Focus模块(基本上是Yolov2中的pass through)以减小特征图尺寸,减小了模型复杂度。 2. 输入数据处理 Mosaic数据增强自适应锚框计算自适应图片缩放 3. 训练策略 多尺度训练(Multi-scale training)。 如果网络的输入是416 x 416。那么训练的时候就会从 0.

VTK将二维图像向三维空间中无参数化的曲面表面进行纹理映射(含代码)

实现纹理映射主要是建立纹理空间与模型空间、模型空间与屏幕空间之间的映射关系(见图 6-28): 其中纹理空间可以定义为u-v 空间,每个轴标范围为 (0.1)。其中对于一个纹理图像,其左下角 v 标为 0.0),右上角标为 1.1)。而对于简单的参数模型,可以方便地建立模型与纹理空间的映射关系,例如球面、圆柱面等。 而根据图形学三维空间变换容易实现模型空间到屏幕空间的变换,因此最终显示在计算机屏幕上的图像即是纹理映射后的结果。 而对于无参数化曲面的纹理映射技术,通常需要将纹理空间到模型空间的映射分解为两个简单映射。这里需要引入一个包围景物的中介三维曲面作为中介映射媒介,主要实现步骤如下: 1.先将二维纹理空间映射为一个简单的三维物体表面,例如球面、圆柱面等; 2.然后将上述中介物体表面的纹理映射到模型表面,例如以模型表面法线与中介模型的交点作为映射点。这样即可实现由纹理空间到模型空间的映射。 VTK中定义了多个类实现纹理空间到模型空间的映射,例如vtkTextureMapToPlane通过一个平面建立纹理空间到模型空间的映射关系; vtkTextureMapToCylinder 通过圆柱面建立映射关系; vtkTextureMapToSphere 通过球面建立映射关系。 vtkTexture 则实现加载纹理(在第2章中已经介绍过)。另外,vtkTransformTextureCoords 也是一个非常有用的类,可以实现纹理坐标的平移和缩放,例如,如果要实现重复纹理,只需通过vtkTransformTextureCoords::SetScale()将纹理坐标每个方向进行放大,如由[0,1]变换到[0,101即可。 下例中使用vtkTextureMapToCylinder 来建立纹理映射(TextureMap.cpp): #include <vtkSmartPointer.h> #include <vtkRenderWindowInteractor.h> #include <vtkRenderWindow.h> #include <vtkRenderer.h> #include <vtkActor.h> #include <vtkPolyDataMapper.h> #include <vtkTransformTextureCoords.h> #include <vtkTexture.h> #include <vtkTextureMapToSphere.h> #include <vtkTextureMapToCylinder.h> #include <vtkBMPReader.h> #include <vtkTexturedSphereSource.h> #include <vtkXMLPolyDataReader.h> //测试:../data/masonry.bmp ../data/cow.vtp int main (int argc, char *argv[]) { if (argc < 3) { std::cout << "Usage: " << argv[0] << "

那几本霸占我休息时间的PDF!

今天给大家分享几套大厂(百度/小米/美团)学习进阶资料,以及全套面试题,包括 3 本大厂手册(高并发、JVM、Java 并发编程)、1 本 Java 实战演练 35 讲、10 本面渣逆袭手册(操作系统、计算机网络、Java、MySQL、Redis、Spring 等),基本涵盖后端大部分技术栈,文末附高清电子版。 01 高并发手册 大厂必备手册,总共 7 章:高并分布式架构、MySQL 和 Redis 一致性、限流、缓存击穿/穿透/雪崩、Redis 高可用、分库分表、MySQL 主从。 内容绝对干货,随便拿出一篇,都是高频面试考点,关键是手绘图也非常的精美,所谓一图胜千言,大家来欣赏一下我们的诚意。 高清pdf版获取方式 点击下方公众号发送:3137 02 JVM 手册 面试/进阶必备手册,总共 8 章:JVM 内存结构、运行时数据区域、类的加载过程、JVM常用命令、性能检测工具、JVM调优实例、垃圾收集器、JVM 总览。 很多书籍直接上来啃,会非常痛苦,这份手册几乎包含了 JVM 最核心的知识点,无论是面试,还是实操,都能轻松过关。 03 Java 并发编程手册 面试/进阶必备手册,总共 9 章:Java并发编程基础、volatile、synchronized、final、对象的共享、同步⼯具类、线程池基本知识、多线程实战、锁。 有理论,有实战,每一位学习 Java 同学必不可少的面试和进阶宝典,有了这本手册,基本能全部搞定 Java 并发编程所有知识。 04 Java 实战演练 35 讲 工作实战手册,35 个 Java 实战技巧,都是大厂的实战经验,整体刷一遍后,开发效率大大提高,实战性非常强! 05 面渣逆袭手册 这份面试逆袭手册整理了一个多月,内容涵盖操作系统、计算机网络、Java、MySQL、Redis、Spring,质量非常高!!!不要再看网上那些到处拼凑出来的面试题了! 不管大家最近要不要去面试,我都推荐大家先保存起来,后面自己肯定是能够用得上的! 截图截麻了,大家自行下载哈,都是干货! 高清pdf版获取方式 扫码回复【3137】免费领取 你在看吗

css3动画

动画(animation)是css3中具有颠覆性的特征之一,可以通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果。相比较过渡,动画可以实现更多变化,更多控制,连续自动播放等效果。 动画的基本使用 1.现定义动画 2.再使用(调用)动画 1.用keyframes定义动画(类似定义类选择器) 语法: @keyframes 动画名称 { 0% { width:100px; } 100% { width:200px; } } 2.元素使用动画 语法: div { 调用动画 animation-name: 动画名称; 持续时间 animation-duration: 持续时间; } 动画序列 1.0%是动画的开始,100%是动画的完成。这样的规则就是动画序列。 2.在@Keyframes中规定某项css样式,就能创建由当前样式逐渐改为新样式的动画效果。 3.动画是使元素从一种样式逐渐变化为另一种样式的效果。您可以改变任意多的样式任意多的次数。 4.请用百分比来规定变化发生的时间,或用关键词“from”和“to”,等同于0%和100%。 动画的常用属性 动画简写属性 animation : 动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 动画起始或者结束的状态; 速度曲线细节 animation-timing-function : 规定动画的速度曲线,默认是"ease"

Jmeter 性能 —— 吞吐量与并发用户数关系!

1、吞吐量和并发用户数的关系 2、已知在线用户数为3000,算出对应的并发用户数 ①我们常用的确定并发用户数的公式是: C=活动用户数×操作时间/系统运行时间 如每天最大在线用户数为3000人,每个用户平均操作时间为1小时,系统运行时间为24小时,那么并发用户数为: 3000×3600/24*3600 =125 ②那么我们在Jmeter中去压测的时候,可以采用阶梯式压测方法。 从20-40-60-80-100-120-140-160-180-200,看看什么时候吞吐量达到最高,并且响应时间和错误率也是最低。 找到这个点求出得到最佳的并发用户数为100 ③实际上最佳并发用户数为100,但是理论要支持125的并发,这个时候就要去看看有没有什么地方需要去优化的。 如果发现还是服务器的配置太低了,网络带宽也不行,还是买个好点的服务器吧。 3、混合业务场景的TPS计算方式 TPS的计算 单业务与混合业务业务基准测试场景构建 单业务测试 混合业务测试:登录-资料录入-发短信认证-核保 页面渲染+业务处理时间+思考时间=单次业务时间 5分钟内完成2000笔资料录入+发短信认证 计算平均并发(单位时间内平均能同时处理完成的录入+认证业务) 平均并发=(单次时间*业务量)/业务总时间平均并发(5s*2000)/300=33峰值并发=平均并发数+3*根号平均并发 =33+17=50 下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你! 最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。 如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

服务器网卡介绍

本篇文章对服务器网卡进行基础介绍,包括基本概念、网卡厂商及网卡绑定策略等。 1、基本概念 服务器网卡(Network Interface Card)是一种用于连接服务器与网络之间的硬件设备。它允许服务器通过网络与其他设备进行通信,包括传输数据、接收数据和处理网络请求。 以下是一些关于服务器网卡的重要概念和特点: 速度和带宽:服务器网卡的速度指的是其数据传输速率,通常以千兆位每秒(Gbps)或万兆位每秒(10 Gbps)为单位。较高的速度可以提供更快的数据传输和响应速度。带宽指的是网卡能够处理的数据量,通常以每秒传输的数据量(Mbps或Gbps)来衡量。 接口类型:服务器网卡通常使用不同类型的接口来连接到服务器主板。常见的接口类型包括PCIe(Peripheral Component Interconnect Express)和PCI(Peripheral Component Interconnect)。PCIe接口通常提供更高的带宽和更快的数据传输速度。 支持的协议:服务器网卡通常支持多种网络协议,如Ethernet、TCP/IP、UDP等。这些协议允许服务器与其他设备进行通信,并实现数据传输和网络连接。 冗余和负载均衡:一些服务器网卡支持冗余配置,即在一个网卡故障时,其他网卡可以继续工作,确保服务器的稳定性和可靠性。此外,一些服务器网卡还支持负载均衡,即将网络流量分配到多个网卡上,以提高网络性能和可靠性。 硬件加速:一些高级服务器网卡具有硬件加速功能,可以在网卡上处理一些网络任务,如数据包过滤、数据包分析和加密解密等。这可以减轻服务器的负担,提高网络性能。 远程管理:一些服务器网卡具有远程管理功能,允许管理员通过远程访问服务器网卡来监控和管理服务器。这对于远程维护和故障排除非常有用。 1.1、网卡分类 1.2、网卡功能 1.3、网卡接口 2、服务器网卡 2.1、服务器专用网卡 VS 普通网卡 2.3、网卡主流厂商 3、网卡绑定(bond) 服务器bond是一种网络连接聚合技术,通过将多个网络接口绑定在一起,形成一个虚拟的网络接口,提供更高的带宽和冗余。服务器bond可以提高服务器的网络性能和可靠性。 这里仅简单介绍下bond0和bond1这两种最常用的网卡绑定方式,其他方式如有需要可自行Google 3.1、Bond0 轮询策略 链路负载均衡,增加带宽,支持容错,一条链路故障会自动切换正常链路。交换机需要配置聚合口,思科叫port channel 特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是我们知道如果一个连接 或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降 3.2、Bond1 主备策略 主备模式,只有一块网卡是active,另一块是备用的standby,所有流量都在active链路上处理,交换机配置的是捆绑的话将不能工作,因为交换机往两块网卡发包,有一半包是丢弃的。 特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N End 公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我吧! 本文由mdnice多平台发布

看图识熊(四)

概述 人工智能已经快要进入应用的高峰期了,但并不需要每个人都学习算法、建模。对于程序员来说,应该先从自己会的方向入手,学习如何应用AI来解决问题,开发应用。 本文将带着大家动手,从头做一个看图识熊的应用,输入一张熊的照片,程序输出这是什么熊。这里不会讲到AI的算法、模型,但会对涉及到的应用有关的概念做些介绍。 文中,我们将使用微软认知服务的必应图像搜索准备训练数据,然后用微软认知服务的定制化视觉服务训练模型,导出模型,最后将模型集成到应用中。 准备数据 机器学习总是离不开数据,没有数据就无法进行训练。 微软认知服务中除了提供了语音、视觉类的服务,还提供了搜索服务,其中就有必应图像搜索服务。 必应图像搜索的在线体验地址是 Bing Image Search API | Microsoft Bing。 输入要搜索图片的关键字,指定需要的图片的参数,右侧就可以预览搜索结果。还可以切换到JSON显示,可以看到返回值是结构化的数据,很容易得到每张图的链接地址。 如果需要大量的数据,可以申请一个密钥,写个简单程序调用必应图片搜索,然后下载图片即可。 本文计划让我们的程序可以识别出棕熊、黑熊、北极熊、熊猫这四种熊,所以需要分别搜索这四种熊的图片,每种熊需要的训练数据不多,5张图片就够了,大家可以手动下载图片。另外,为了防止随便给一张图片就被分类成某种熊,我们还需要一些负例,可以找5张其它动物的图片,作为负例。 这里需要注意一下,在选择训练数据的时候,要注意数据的泛化性。也就是说,选出来的图要尽可能的不一样。比如,不能只选草地上的,也不能只选走路的熊,还得选站着的熊。不然,可能模型会把草地认成熊。 最好是按照文件夹把熊都分好类,这样一会儿训练的时候就比较容易。这个用文件夹分类的过程,其实就是标记数据的过程。我们这次要解决的问题是分类问题,所以,标记起来是非常快的。有些应用标记起来就没那么容易了。比如图片中的目标检测,要对每个目标画一个框,而且要尽量画准。再比如音频的标记,要听录音,然后把文字打出来,甚至需要每个字都写上在什么时候开始、什么时候结束。所以,有了数据、再把人类知识应用到数据上,有时会是很大的工作量。 获取模型 在机器学习应用中,任何情况下都需要一个或大或小的模型。而怎么得到这个模型,往往是其中最复杂的部分。有的时候,在缺少强大计算资源与高性能算法的情况下,我们不一定需要自己从零开始训练模型。我们需要用的一些轮子,已经有人给我们造好了。比如微软提供的定制化视觉服务。 定制化视觉服务简介 定制化视觉服务,相当于在云端提供了一个生成模型的方法,把模型相关的复杂的算法都简化了。同时,它能够让用户自己管理训练数据,定义自己的分类问题。这样在易用、强大之间找到了一个平衡点。 从适用的范围上讲,如果要分类的项在图像中比较突出,则定制化视觉服务可发挥比较好的效果。但是,定制化视觉服务并不适合用于检测细微的差异。例如,检测质量发现产品中的细微裂纹或凹陷。另外,因为这个世界纷繁复杂,能进入人眼的物体和它们的排布、表现方式的组合,几乎是无穷无尽的。定制化视觉服务后面的模型也不能解决所有领域的问题,这样会影响精确性。所以定制化视觉服务既提供了通用模型,又提供了几个特定的领域模型。如果对识别性能要求很高,则需要定制化视觉服务后面的领域模型非常强大才行。 从训练速度上讲,传统的训练模型需要数小时的时间,而定制化视觉服务采用了迁移学习的方法,这种方法可以在已有的预训练模型的基础上,只有需要少量的训练图片和很短的训练时间,就可以训练出针对特定问题的新的模型。有点类似四五岁的小孩子学习新的动物,已经用了四五年的时间对动物的各种特征有了初步了解,也会基本的认知分类,然后再给他一种新的动物的几张图片,他瞬间就能学会如何成功的区分新的动物。 体验定制化视觉服务 下面我们一起动手在线体验一下定制化视觉服务,试着训练模型并导出。 登录定制化视觉服务 定制化视觉服务的官方地址是 Custom Vision - Home,打开网站后,点击SIGN 在。使用该服务需要准备微软账号,也可以直接在定制化视觉服务官方地址上创建。 登录后,界面会提示要求同意一些条约。条约的大致内容就是,个人必须在微软要求的规则下使用微软提供的这项服务。请勾选I 同意 此时,界面会提示注册Azure,因为定制化视觉服务实际上是Azure提供的一项云服务,正式使用这项服务需要有Azure订阅。 不过我们现在只是免费试用,所以选择Continue with trial,如果在根据本文流程做完了一个小应用之后,你觉得确实需要使用这项服务,那么你可以去注册Azure账号,获取Azure订阅。 创建定制化视觉服务项目 点击NEW PROJECT,填写项目信息。填写好Name和Description,这里Name不妨填写为BearClassification。随后选择Classification和General(compact),点击Create。 项目类型一栏,定制化视觉服务提供了分类和目标检测两种服务,这里选择分类项目。 分类 Types一栏,这里使用的图片中,每张图片只有一种熊,这里选择每张图片一个标签的模式。 Domains一栏,可以看到服务提供了多种预定义的场景,可以对特定领域的分类给出更好的结果。但是这里没有专门针对动物的,所以使用通用领域。另外还可以看到有的领域区分带compact标记和不带标记的,本文使用带标记的,即General(compact)领域。 带有compact标记,表明训练后的结果是一个压缩模型。压缩模型,顾名思义,模型占用的空间更少,运行更快,甚至可以放到手机这种移动设备里。当然,会有一个小问题就是精确度会受影响。但是压缩模型也有好处,导出模型后,模型文件的使用是没有任何限制的,而其余的几种场景只能通过调用API来进行预测,当前属于免费试用,有10000次调用上限。 添加数据 点击Add images,选择前面事先准备好的5张黑熊的照片,然后在弹出的Image upload页面中,设置My Tags的值为black bear,然后点击Upload 5 files。 注意,My Tags值不能使用中文,否则后续识别的结果会乱码。 重复以上步骤,依次添加灰熊、北极熊和大熊猫的训练数据,对应的标签是棕熊、北极熊和giant panda。 最后,上传不是熊的图片做为负例,对应的标签可以直接选择Negative。 训练 在添加了所有的数据集和标签之后,点击网页上方的Train,开始训练模型。 大约十秒钟以后,训练就完成了,页面会自动跳转到Performance页面,并显示本次训练的结果。如图所示,这里只训练了一次,左侧只有一个Iteration1,如果有多次训练就会出现多个Iteration,右侧是本次训练得到的模型的一些指标。 Precision准确率和Recall召回率,是两个评估模型好坏的主要指标。简单来说,两个数都是越大越好。但是这两个数据其实很难两全,提高其中一个,必然会降低另一个。 举个例子,欧美的法律很讲证据,是无罪推定。即,不能证明某人有罪,那就判他无罪。所以,被判刑的人,都是证据确凿的。这时,我们说罪犯中实际犯罪的人的比例非常高,但是很多罪犯可能并没被抓起来,所以召回率很低。而电视里看到的特务经常会说,宁可错杀一千,不可放过一个。这是有罪推定。只要有疑点,就抓起来。我们假设这里说的都是真正的罪犯。这时,我们说,罪犯中实际犯罪的人比例可能不高,有不少都是被冤枉的,所以准确率很低。但可以认为罪犯基本上都被抓住了,所以召回率比较高。 在这个项目中,以brown bear为例:Precision准确率,表示在所有被识别为棕熊的图片中真正有棕熊的图片所占的比例;而Recall召回率则是测试结果中正确识别为棕熊的图片占测试集中所有棕熊图片的比例。

使用命令行方式搭建uni-app + Vue3 + Typescript + Pinia + Vite + Tailwind CSS + uv-ui开发脚手架

使用命令行方式搭建uni-app + Vue3 + Typescript + Pinia + Vite + Tailwind CSS + uv-ui开发脚手架 项目代码以上传至码云,项目地址:https://gitee.com/breezefaith/uniapp-vue3-ts-scaffold 文章目录 使用命令行方式搭建uni-app + Vue3 + Typescript + Pinia + Vite + Tailwind CSS + uv-ui开发脚手架一、前言二、脚手架技术栈简介2.1 uni-app2.2 vue32.3 TypeScript2.4 Pinia2.5 Tailwind CSS2.6 uv-ui2.7 vite 三、详细步骤3.1 Node.js安装3.2 创建以 typescript 开发的uniapp工程3.3 集成Pinia3.3.1 安装pinia3.3.2 修改main.ts3.3.3 创建一个store3.3.4 在组件中使用store 3.4 集成Tailwind CSS3.4.1 安装postcss、sass、autoprefixer、tailwindcss和@uni-helper/vite-plugin-uni-tailwind以及相关依赖3.4.2 创建配置文件postcss.config.js和tailwind.config.js3.4.2.1 创建配置文件3.4.2.2 修改tailwind.config.js3.4.2.3 修改postcss.config.js 3.4.3 修改vite.config.js3.4.4 创建并引入tailwind.css3.4.4.1 创建tailwind.css3.4.4.2 App.vue中引入tailwind.css 3.4.5 在组件中使用tailwindcss 3.5 集成uv-ui3.5.1 安装uv-ui3.5.2 在组件中使用uv-ui 四、总结 一、前言 近日心血来潮想做一个开源项目,目标是做一款可以适配多端、功能完备的模板工程,包含后台管理系统和前台系统,开发者基于此项目进行裁剪和扩展来完成自己的功能开发。但前台系统花样繁多,可能是PC端浏览器,可能是微信网页,微信小程序,安卓,鸿蒙……因此笔者只能从个人的开发需求出发,搭建了原生vue3版、原生微信小程序版、原生React版和uniapp版的前台系统模板。

Ubuntu20.04系统环境配置

随着Android版本不断更新,源代码占用空间越来越大,随便一份代码就几百G,部分编译一次随随便便就是半小时以上,几个人一起用服务器显得力不从心经常卡死,最近新配置了一台服务器,Ubuntu预装了20.04系统,在配置系统环境中出现了一系列的问题。 1.配置静态IP ip link可以查看网卡名 sudo vi /etc/netplan/修改目录下的yaml文件文件名可能有差别,修改内容如下: network: ethernets: ens160: dhcp4: no addresses: [192.168.0.101/24] optional: true gateway4: 192.168.0.1 nameservers: addresses: [8.8.8.8,8.8.4.4] version: 2 sudo netplan apply 应用新的配置 ifconfig 查看一下ip发现静态IP已经配置好了 2.配置samba用户 sudo apt-get install samba 安装samba sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak 备份smb配置 sudo adduser blue 创建Linux用户 sudo passwd blue smbpasswd -a blue 创建samba用户和口令 vim /etc/samb/smb.conf 修改smb配置 [blue] comment = blue path = /home/blue public = yes guest ok = no writable = yes sudo /etc/init.

K8S--安装MySQL8(单机)

原文网址:K8S--安装MySQL8(单机)-CSDN博客 简介 本文介绍K8S部署MySQL8(单机)的方法。 ----------------------------------------------------------------------------------------------- 分享Java真实高频面试题,吊打面试官: Java后端真实面试题大全 - 自学精灵 分享靠谱的Java高级实战,包含:高并发、架构、全局处理等:JavaWeb高级实战 - 自学精灵 ----------------------------------------------------------------------------------------------- 本文的目标 1.通过PV和PVC(hostPath方式)存储MySQL的数据 2.通过Deployment、Service部署MySQL8,并通过NodePort暴露给外部 3.使用Navicat进行测试 官网网址 运行一个单实例有状态应用 | Kubernetes 概述 1.持久化PV存储方式 数据库必须持久化数据,否则节点重启后数据就没了。PV和PVC可以对数据持久化,支持多种方式: hostPath、NFS、RDB等等。数据要节点共享的,否则如果节点在其他机器上启动了,就无法访问到数据了。所以,生产环境一般采用这些方式:NFS挂载、用云服务器的RDB等。 本文为了简单,只部署一个MySQL节点,使用hostPath方式,不支持节点共享。 2.持久化PV分配方式 本文我直接手动预先创建。生产环境应该通过StorageClass采用Dynamic Provisioning。 3.数据库高可用 数据库一般要配置主从或者集群,实现高可用。一般使用StatefulSet部署,StatefulSet用于管理有状态应用的负载均衡,管理一组Pod的实现、扩容、缩容,并保证它们的顺序和唯一性。 StatefulSets维护的Pod有唯一的、持久的身份和稳定的主机名,不用管它们位于哪个节点上。即使StatefulSet中的Pod发生故障,存储卷与新Pod进行匹配也很容易。 1.创建PV和PVC存储 先创建目录: mkdir -p /work/devops/k8s/app/mysql/mnt 创建名为 pv.yaml的文件,内容如下: apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv namespace: db labels: type: db-pv spec: storageClassName: manual capacity: storage: 5Gi accessModes: - ReadWriteOnce hostPath: path: "/work/devops/k8s/app/mysql/mnt" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pvc namespace: db spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 5Gi 创建pv:

PTA是什么?BT-WIFI共存

参考自:《PTA是什么?BT-WIFI共存》 《WiFi 与BT 共存机制》 在2.4G频段,WIFI和BT共用天线,两者之间是如何控制?是否无法同时用WIFI和BT? 蓝牙和WIFI共存设计 蓝牙和802.11b/g/n都可能工作在2.4GISM,可能互相干扰。干扰的典型应用之一是VOIP,用手机的WLAN打VOIP电话,用蓝牙耳机来通话。互相干扰的后果是用户能感觉到通话质量的下降。 设计上有些方法能够减少相互干扰,尽量维持蓝牙和wifi的throughput(吞吐量),使得用户的使用体验不受影响。方法主要是AFH和分时。 是否存在相互干扰和相互干扰是否严重受以下条件影响: 1.共用天线还是单独用自己天线2.干扰是噪音还是阻塞3.蓝牙通信频率是否落在wifi带内4.蓝牙和wifi是接收还是发射5.蓝牙和wifi的具体应用的通信特点 1. 共用天线还是单独用自己天线 如果蓝牙和wifi使用单独的天线,蓝牙天线和wifi天线之间的隔离大小会影响干扰的程度。如果认为有一定的隔离度,蓝牙和wifi是可以同时发射或者接收的。 如果蓝牙和wifi共用天线,蓝牙和wifi不可以同时工作。(如果不考虑相互干扰,可以同时接收。) 2. 干扰是噪音还是阻塞 干扰分为两种。一种是噪音,主要发生在频率冲突时;另一种是大信号阻塞,和频率是否冲突没有关系,和具体射频设计及天线间隔离有关系。 3. 蓝牙通信频率是否落在wifi带内 如果蓝牙通信频率落在wifi频带内,噪音干扰和阻塞干扰都会有。如果蓝牙通信频率落在wifi频带外,只有阻塞干扰。 AFH是针对噪音干扰最好的方法,蓝牙和wifi的性能都能维持100%。唯一问题是无法解决阻塞干扰。 4. 蓝牙和wifi是接收还是发射 假设蓝牙和wifi使用自己单独的天线,蓝牙和wifi是能够同时发射和同时接收的。如果一个发射,一个接收,在频率冲突时会有相互干扰。另外,同时发射可能会对另一侧设备带来干扰。 5. 蓝牙和wifi的具体应用的通信特点 共存时相互干扰是否严重还和具体应用时通信特点有关。比如数据量是否大,是否是数据流,是否是timecritical的。所以有的设计是host可以根据不同应用配置不同的优先级,以达到最好的tradeoff。 主要设计方法简单介绍: AFH AFH:auto freq. hopping自适应调频机制,当蓝牙设备发现在某些信道上有较强干扰时,会自动跳到其他干扰小的信道。现在的蓝牙一般都具备此项功能。 AFH是解决噪音干扰的最好方法。通过在跳频频率中避开wifi的频带,既可以避免频率冲突带来的干扰,也丝毫不损失蓝牙和wifi的性能。另外,AFH不只针对wifi干扰,道理上其它干扰源也可以避开。 AFH功能包括两个方面,一是channel的好坏区分;二是使用新的channellist跳频。 Channel的好坏区分有三种来源,一是自己通过scanRSSI或者检查PER等方式自己区分channel;二是通过另侧设备的区分信息,如master取slave的区分结果,或slave依照master的区分结果;三是依靠host通过HCI命令set_AFH_host_channel_classification传下来。 蓝牙和wifi共存设计中,host通过HCI命令告诉蓝牙哪些channel不可用是很有效的。如果蓝牙自己区分,应该既自己检查channel,也需要读另侧设备的区分信息,因为两者如果距离稍远,可能看见的badchannel是不同的。 分时(TDM,PTA) 分时是利用蓝牙和wifi间的握手信号,使蓝牙和wifi分时在2.4G工作,这样可以避免噪音干扰和阻塞干扰。问题是会降低蓝牙和wifi的throughput。所以这个机制应该只在AFH不能提供良好效果时使用。 802.15.2中有规定仲裁方式和信号(PTA,packet traffic arbitration)的框架,很多蓝牙芯片厂商也有自己专有的握手信号定义。道理上来讲我们的设计还需要了解主流wifi芯片的握手信号定义。 这些握手信号都差不多。简单说明如下: 2-wire Wifi给蓝牙信号wl_active,表示wifi有通信,如果这个信号asserted,蓝牙应该只接收/发射highpriority的包,其它包delay。 蓝牙给wifi信号bt_priority,表示蓝牙要发highpriority的包,wifi必须停止当前通信。 可以看出,这两根信号分别是保护wifi和蓝牙通信的。所以assert的多与少会影响2.4G带宽在两者间的分配。 从蓝牙芯片设计的角度,蓝牙芯片必须支持对于包优先级的区分和delay包的处理。一般来说,定时同步,inquiry,page,SCO等是高优先级,传送数据的包则是普通优先级。如果处理得细致和灵活,很多参数是需要可以配置和可调的,因为可能需要host根据具体应用来配置。 如果蓝牙芯片知道wifi的频带,bt_priority也可以只在频率冲突时拉起。 3-wire 三线方案和两线方案相似。多加一根蓝牙输出的bt_active,这样和bt_priority一起可以表示两种优先级的蓝牙通信。 4-wire 四线方案和三线方案相似,再多加一根蓝牙输出的bt_freq,指示蓝牙通信是否和wifi频带冲突。 PTA PTA:package traffic arbitration数据传输仲裁(或 数据包流量仲裁),通常有1wire,2wire,3wire等制式。当wifi和BT同时工作时,BT和Wifi通过PTA了解彼此的工作状态,频率等信息,来防止频率等的冲突带来的互扰。比如,Wifi占用了ISM(Industrial Scientific Medical)频段前20M频带,蓝牙可调频到其他频段工作;当蓝牙通话时,为保证通话不断线,可能又会调整wifi的工作状态。各家的PTA算法不尽相同。 802.15.2中没有规定PTA具体的硬件接口和仲裁判定,是依赖实现的。也有类似上述的2/3/4线方案。但PTA的基本思想是蓝牙和wifi提交申请给PTAcontroller,(一般PTAcontroller集成在wifi中),由PTAcontroller来许可。所以PTA中的相关信号都是指将要的操作,不同于上面的是指已经发生的操作。 下文介绍数据包流量仲裁 (Packet Traffic Arbitration,PTA) . 数据包流量仲裁使用仲裁器来决定 WLAN 或蓝牙是否使用射频RF。如果蓝牙需要使用RF,它会请求仲裁服务器进行访问,仲裁者做出决定。性能取决于仲裁服务器的实现方式以及从蓝牙和 Wi-Fi 设备可获得多少信息。IEEE 802.

Gstreamer常用指令

1、测试 fbdevsink 命令 gst-launch-1.0 videotestsrc ! fbdevsink 2、使用playbin元件自动寻找元件播放音视频 gst-launch-1.0 playbin uri=file:///tmp/bad_apple.mp4 3、使用decodebin元件自动寻找解码器,指定fb元件播放视频 gst-launch-1.0 filesrc location=bad_apple.mp4 ! qtdemux ! decodebin ! sunxifbsink 4、指定硬件解码器和fb元件的播放视频命令 gst-launch-1.0 filesrc location=bad_apple.mp4 ! qtdemux ! h264parse ! omxh264dec ! videoconvert ! sunxifbsink 5、同时播放音视频的命令 gst-launch-1.0 filesrc location=bad_apple.mp4 ! qtdemux name=demux demux.audio_0 ! queue ! decodebin ! audioconvert ! audioresample ! alsasink demux.video_0 ! queue ! h264parse ! omxh264dec ! videoconvert ! videoscale ! sunxifbsink 6、播放本地mp3文件 gst-launch-1.0 filesrc location=/11.

软件系统设计开发规程

软件设计开发规程目的在于为需求设计、开发、实现解决方案。根据适当情况,解决方案、设计和实现包括单独的产品、产品组件以及产品相关的生命周期的过程,或者它们的组合,以及包括如何利用准则进行接口设计。 技术解决方案过程包括: 1、选择最佳解决方案; 2、制定架构设计; 3、制定概要设计; 4、制定详细设计和数据库设计; 5、利用准则进行接口设计; 6、实现设计; 7、进行单元测试; 8、进行代码审查; 9、建立和维护用户文档。 软件相关全资料获取:软件开发全套资料-CSDN博客