Ubuntu上安装Chrome浏览器

文章目录 一、任务概述二、完成任务1、下载Chrome安装包2、安装Chrome浏览器3、启动Chrome浏览器 一、任务概述 大家好!在今天的分享中,我将向大家介绍如何在Linux系统中安装Google Chrome浏览器。Google Chrome作为一款全球用户广泛使用的网页浏览器,以其卓越的性能和强大的功能深受喜爱。 我们将通过三个步骤来完成这个任务:首先,下载Chrome的安装包;然后,进行安装;最后,启动Chrome浏览器。在这个过程中,我会详细介绍每个步骤的操作方法,并展示相关的操作截图,以便大家能够更加直观地理解和掌握。 无论您是初学者还是有经验的用户,我相信这次分享都能为您提供有价值的信息和指导。让我们一起探索Chrome的世界,体验其带来的高效、便捷的网络浏览体验吧!感谢大家的关注与参与,期待接下来的时间里能与大家分享更多有关技术的知识和经验。 二、完成任务 1、下载Chrome安装包 执行命令:wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 2、安装Chrome浏览器 执行命令:sudo dpkg -i google-chrome-stable_current_amd64.deb 执行命令:sudo apt-get -f install 3、启动Chrome浏览器 查看收藏夹里的Chrome图标 单击Chrome图标,启动Chrome浏览器

简易的自定义Shell实现

简易自定义Shell实现 1. 程序概述2. 主要函数解析2.1 getcommand2.2 commandsplit2.3 execute2.4 builtin 3. 完整程序 1. 程序概述 首先,让我们了解一下这个自定义Shell的主要功能和结构。该Shell具有以下特点: 基本的命令解析和执行内建命令支持(cd、export、echo)获取用户名、主机名和当前工作目录显示错误代码传递和显示 2. 主要函数解析 2.1 getcommand int getcommand(char* command) { printf("[%s%s %s]# ",getUsername(),getHostname(),getPWDname()); char* r = fgets(command,MAXIN,stdin); if(r == NULL) return 0; command[strlen(command)-1] = '\0'; return 1; } 此函数用于获取用户输入的命令,并将其存储在指定的字符数组中。它显示包含用户名、主机名和当前工作目录的命令提示符。 2.2 commandsplit void commandsplit(char* in, char* out[]) { int argc = 0; out[argc++] = strtok(in,SEPARATOR); while( out[argc++] = strtok(NULL,SEPARATOR)); return ; } commandsplit 函数将输入的命令字符串分割成命令和参数的数组,并用 SEPARATOR 定义的分隔符进行切割。 2.3 execute void execute(char* agrv[]) { pid_t id = fork(); if(id == 0) { execvp(agrv[0],agrv); exit(1); } else { int status = 0; pid_t rid = waitpid(id,&status,0); if(rid > 0 ) { lostcode = WEXITSTATUS(status); } } } execute 函数使用 fork 创建子进程,并在子进程中执行用户输入的命令。父进程等待子进程执行完成,并获取子进程的退出状态。

快递鸟「物流导盲犬」助力鞋服头部企业客户全链路物流数字化升级

数字化时代,企业全域经营已成为数字商业新浪潮,多店铺多平台多仓库同步发货成为经营常态,消费者对物流服务体验的要求越来越高,企业对物流精细化管理的需求也越来越强烈。快递鸟基于对物流数字化领域的深耕和对行业及客户需求的深度理解,重磅推出「物流导盲犬」产品。物流导盲犬是一款集全链路物流监控、协同、交付管理于一体的中台产品,属于国内领先的DMS( Delivery Management System,物流交付管理系统)。物流导盲犬提供从交易订单产生、包裹出仓、物流运输、消费者签收以及售后退货服务的全链路物流信息追踪和智能管控,助力发货端客户突破物流盲区,在物流交付环节真正做到“主动型智能闭环管理”。 某大型鞋服类企业通过与快递鸟合作,构建了多平台、多店铺、多仓库ALL IN ONE的物流信息数据中台,通过物流导盲犬协同物流上下游,实现了物流数字化升级。在部署物流导盲犬产品后,客户企业已完成95%以上的运单监控,运单的揽收及时率从95.79%提升到98.36%,运输及时率从95.16%提升到97.48%,派送及时率从83.94%提升到86.47%,订单拦截效率提升50%,客服物流售后处理量提效30%,平均节省65%的物流成本,在提升消费者购买体验的同时,实现了降本增效。 01、全链路物流节点监控,多平台、多店铺、多仓库物流数据统一管理 这类集团型企业客户而言,其电商全渠道的布局通常是多仓多店模式,由此带来的问题是,客服需要不停地切换不同商家后台处理物流情况,效率低下。现在,通过部署物流导盲犬,客户可在一个平台上轻松管理多个电商平台、店铺和仓库的物流数据,为物流管理提效。另外,物流导盲犬还提供40多个标准化物流节点监控,其中包含揽收、首次走件、运输停滞、派收等预警超时监控,帮助客户企业主动提前应对异常物流情况,减少电商罚款与客户投诉。 02、异常物流工单直达快递总部系统,线上操作提升效率 以往,物流配送过程中如果出现了快递未按时揽收、收货地址错误等异常情况,客服人员需要通过打电话、群聊等方式与快递公司逐一沟通处理,效率低下。而物流导盲犬支持在线创建异常物流工单并一键操作直达快递总部系统,快递公司的处理结果也会在导盲犬平台同步更新,确保客户能够及时了解问题处理进度,降低客户投诉率。另外,异常运单的包裹拦截上,商家同样可以通过物流导盲犬平台直接对接承运商,承运商返回拦截结果及进度也将在导盲犬平台同步更新,帮助减少拦截成本。 03、短信云呼批量通知,提升用户物流服务体验 在优化用户物流服务上,以往消费者的物流体验很大程度依赖物流公司,客户自己的辅助作用很小。而物流导盲犬支持短信/电话通知功能,从发货到签收中的每个物流节点,客户企业都能及时通过导盲犬平台通知订单用户,主动提醒用户物流进展,一旦出现包装异常、中转异常、收发快递时电话未接听等情况,便可及时同步给收件人、快递员等相关人员,以便快速介入协商解决问题,主动把控用户物流服务体验。、 04、多维度物流数据可视化分析,辅助物流决策 以往,客户企业各部门整理、汇报的数据类型不同,缺乏一个统一的系统汇总所有物流数据,难以辅助物流决策。物流导盲犬可通过大数据算法,帮助客户企业在3分钟内完成多维度的物流数据分析,包括承运商时效分析,发货地-收货地异常统计,店铺、仓库和平台物流健康指数等多个维度的数据分析,物流统计数据还支持以最小单位导出,方便协助客户企业管理层优化物流战略决策,节约物流管理成本。 05、数据全流程安全可信,高峰节点运行稳定 客户企业作为知名鞋服类企业,日均订单过万十分常见,尤其在双十一、618等大促节点。快递鸟日均处理数据服务次数超过5.8亿,连续8年保障了合作客户618、双11、双12等物流高峰节点对高并发、大流量数据处理的需求。另外,作为独立第三方,快递鸟已经获得国家信息系统安全等级保护三级认证,有实力保障客户企业的物流数据安全。此外,物流导盲犬支持快速部署安装,针对企业自研系统提供标准API接口,支持1天内上线。在合作过程中,快递鸟还将提供7*24h 顾问式服务,支持客户项目稳定运营。总之,通过部署物流导盲犬,客户企业实现了多平台、多店铺、多仓库物流全链路数字化管理,既保证了订单准时、准质、准量交付,提升了用户体验,又在物流交付环节真正做到了降本增效。 目前,快递鸟已发布一系列数智物流服务产品,包括物流查询API、电子面单API、在途监控API、物流管家等物流查询和管理产品,以及满足发货端降本增效的智选运力解决方案,如上门取件、即时配、电商退换货和聚合寄件等。当前,快递鸟已打通超2500家快递物流公司系统,客户已覆盖全国50多万企业,包括唯品会、贝店、蘑菇街等电商平台,以及平安银行、跟谁学、娃哈哈、中国国际航空、洽洽、美的集团、旺旺食品集团、微众银行、中国电信、建设银行等知名企业,日物流数据服务量超千万单。 未来,快递鸟将坚持打造领先的物流数字运力服务平台,为客户提供多场景、多行业物流模块解决方案,让合作客户可以将精力专注自身业务领域,实现商业新增长!

Leetcode 139.单词拆分

OJ链接 :139.单词拆分 代码: class Solution { public boolean wordBreak(String s, List<String> wordDict) { Set<String> set = new HashSet<String>(wordDict); int n = s.length(); boolean[] dp = new boolean[n+1]; dp[0] = true;//初始化 保证后边正常 s = " " + s; //映射 for(int i =1;i<=n; i++){ for(int j =1;j<=i;j++){ if( dp[j-1]==true && set.contains(s.substring(j,i+1))){ dp[i]=true; break; } } } return dp[n]; } }

计算机网络(全)

目录 第一章 计算机网络概述 1.1 计算机网络的分类 1.2 因特网发展的三个阶段 1.3 因特网的组成 1.4 三种交换方式 1.4.1 电路交换 1.4.2 报文交换 1.4.3 分组交换 1.5 计算机网络主要性能指标 1.5.1 速率 1.5.2 带宽 1.5.3 吞吐量 1.5.4 时延 1.5.5 丢包率*** 1.5.6 利用率*** 1.6 计算机网络体系结构 1.6.1 网络协议 1.6.2 OSI参考模型 与 TCP/IP参考模型 1.6.3 五层协议模型 1.7 两个重要的新兴网络技术*** 1.7.1 云计算 1.7.2 物联网 第二章 物理层 2.1 基本概念 2.1.1奈氏准则(奈奎斯特定理) 2.1.2 香农定理 2.2 编码&调制 2.2.1 数字数据编码为数字信号 2.2.2 数字数据调制为模拟信号 2.2.3 模拟数据编码为数字信号 2.3 传输介质及物理层设备 2.3.1 传输介质 2.3.2 物理层设备 第三章 数据链路层

Java的JDBC编程—连接Mysql数据库

目录 一、 Java的数据库编程:JDBC 二、JDBC工作原理 三、 JDBC使用 四、JDBC使用步骤总结 五. JDBC常用接口和类 5.1 JDBC API 5.2 数据库连接Connection 5.3 Statement对象 5.4 ResultSet对象 一、 Java的数据库编程:JDBC JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是 Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java 开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。 二、JDBC工作原理 JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包 含一些通用的接口类。 JDBC访问数据库层次结构: JDBC优势: Java语言访问数据库操作完全面向抽象接口编程开发数据库应用不用限定在特定数据库厂商的API程序的可移植性大大增强 三、 JDBC使用 准备数据库驱动包,并添加到项目的依赖中: 在项目中创建文件夹lib,并将依赖包mysql-connector-java-5.1.47.jar复制到lib中。再配置该jar 包到本项目的依赖中:右键点击项目Open Module Settings,在Modules中,点击项目,配置 Dependencies,点击+,JARS or Directories,将该lib文件夹配置进依赖中,表示该文件夹下的 jar包都引入作为依赖。 建立数据库连接 MySQL数据连接的URL参数格式如下: jdbc:mysql://服务器地址:端口/数据库名?参数名=参数值 // 加载JDBC驱动程序:反射,这样调用初始化com.mysql.jdbc.Driver类,即将该类加载到JVM方法 区,并执行该类的静态方法块、静态属性。 Class.forName("com.mysql.jdbc.Driver"); // 创建数据库连接 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test? user=root&password=root&useUnicode=true&characterEncoding=UTF-8"); 创建操作命令(Statement) //3.构造一个Sql String sql =" insert into stu(id,name,age) values(1,zhang,3)"; //需要把 Sql语句转化为对象 PreparedStatement statement = connection.

gorm 高级查询

智能选择字段 GORM 允许通过 Select 方法选择特定的字段,如果您在应用程序中经常使用此功能,你也可以定义一个较小的结构体,以实现调用 API 时自动选择特定的字段,例如: type User struct { ID uint Name string Age int Gender string // 假设后面还有几百个字段... } type APIUser struct { ID uint Name string } // 查询时会自动选择 `id`, `name` 字段 db.Model(&User{}).Limit(10).Find(&APIUser{}) // SELECT `id`, `name` FROM `users` LIMIT 10 注意 QueryFields 模式会根据当前 model 的所有字段名称进行 select。 db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{ QueryFields: true, }) db.Find(&user) // SELECT `users`.`name`, `users`.`age`, ... FROM `users` // 带上这个选项 // Session Mode db.

Spark入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

文章目录 引言1. Spark 基础 1.1 Spark 为何物1.2 Spark VS Hadoop1.3 Spark 优势及特点 1.3.1 优秀的数据模型和丰富计算抽象1.3.2 完善的生态圈-fullstack1.3.3 spark的特点 1.4 Spark 运行模式 2. Spark Core 2.1 RDD详解 2.1.1 RDD概念2.1.2 RDD属性2.1.3 RDD API 2.1.3.1 RDD 的创建方式2.1.3.2 RDD 算子 2.1.4 RDD 持久化/缓存 2.1.4.1 persist 方法和 cache 方法2.1.4.2 存储级别 2.1.5 RDD 容错机制Checkpoint2.1.6 RDD 的依赖关系2.1.7 DAG 的生成和划分 Stage 2.1.7.1 DAG2.1.7.2 DAG 划分Stage 2.1.8 RDD累加器和广播变量 2.1.8.1 累加器2.1.8.2 广播变量 3. Spark SQL 3.1 Spark SQL 概述3.2 数据分类3.3 Spark SQL 数据抽象 3.

IDEA使用小技巧

常用的基本设置 界面字体 File | Settings | Appearance & Behavior | Appearance 编辑区字体 File | Settings | Editor | Color Scheme | Color Scheme Font Use color scheme font instead of the default 控制台字体 File | Settings | Editor | Color Scheme | Console Font Use console font instead of the default 通过ctrl+鼠标滚轮控制字体大小 File | Settings | Editor | General 勾选 change font size with Ctrl+Mouse Wheel将编码全部改为UTF-8 在settings中搜索encode,将编码都改为utf-8JDK设置 Project Structure - Project Settings - Project - SDK单击目录的文件自动打开并定位在编辑区

Visual Studio Code (VS Code)安装教程(非常详细)从零基础入门到精通,看完这一篇就够了

Visual Studio Code(简称“VS Code”)是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代Web和云应用的跨平台源代码编辑器,可在桌面上运行,并且可用于Windows,macOS和Linux。它具有对JavaScript,TypeScript和Node.js的内置支持,并具有丰富的其他语言(例如C++,C#,Java,Python,PHP,Go)和运行时(例如.NET和Unity)扩展的生态系统。 ———来自百度百科 VS Code 的界面确实很好看,如下: 代码高亮括号匹配添加扩展也很方便 VS Code的优点当然不止这些,上面的只是举例。 但是VS Code的安装稍微有点麻烦,本人也是试了很久才搞出来(感谢QYL教的我)。 这篇文章就给大家一下C/C++需要的安装配置: 1.下载安装包 VS Code的官网: https://code.visualstudio.com/ 在官网下载速度太慢,只有几十 Kb/s,要下载几十分钟。 但是,只要将下载链接中的“az764295.vo.msecnd.net” 替换为国内镜像地址“vscode.cdn.azure.cn”,下载速度直接飙升至几十 Mb/s。 如将官网下载链接:https://az764295.vo.msecnd.net/stable/dfd34e8260c270da74b5c2d86d61aee4b6d56977/VSCodeUserSetup-x64-1.66.2.exe 改成: https://vscode.cdn.azure.cn/stable/dfd34e8260c270da74b5c2d86d61aee4b6d56977/VSCodeUserSetup-x64-1.66.2.exe 再回车,就OK了。 2.安装 运行下载的安装程序即可 3.安装扩展 VS Code默认是英语,所以需要在打开VS Code之后再安装中文扩展。 在左边的工具栏点击扩展(Ctrl + Shift + X),搜索框中搜索“Chinese”,选择第一个“中文(简体)”,点击“安装”。 安装以后重启就是中文了。 此外,还需安装两个扩展,分别是“C/C++”和“Code Runner”。同上搜索安装即可。 Update 7.21: 还有下面两个“C/C++ Themes” 和 “C/C++ Extension Pack” 也要安装上。 4.设置 上一步安装的扩展“Code Runner”就是来运行C/C++代码的。而要能够运行,还需点击左边工具栏的设置图标设置。 搜索“Run In Terminal”并勾选“Run In Terminal”设置。这样你在运行代码时才能输入。 还有,字体大小最好设置为 20 左右。 如下图,打开设置就能看到。 5.配置环境变量 右键此电脑 属性 高级系统设置 环境变量

Visual Studio下载安装教程(非常详细)从零基础入门到精通,看完这一篇就够了

Visual Studio安装教程 一、官网下载 官网下载地址: https://visualstudio.microsoft.com/zh-hans/downloads/ 因为是个人学习用途,所以我这里下载的是社区版本。 下载下来的是一个.exe文件 双击打开后,会加载一些东西。最后出现下面的界面 二、安装visual studio (一)更改安装路径 首先,我们要设置一下安装路径。因为visual studio占用的空间十分大,我们千万千万不要把它一股脑地安装在C盘,这会让我们本来就贫乏的C盘空间,雪上加霜。 在这里,切换到安装位置,将下述三项的路径改成D盘或其他非系统盘,这里图片是我已经改完了的。 (二)自定义安装组件 这时我们就可以自定义选择组件进行下载 因为我是需要使用C++,所以这里选择了使用C++的桌面开发和visual studio扩展开发 下面会显示下载所占的空间,供参考(我这里因为已经下载过了) 大家可以根据具体需求,选择自己需要下载的组件 选择好后,在右下角选择安装,就会出现下载界面,等下载完毕后如图所示,点击启动就可以使用啦~ 最后汇总一下,visual studio安装中使用的内存情况: D盘占用6.8G C盘占用1.G 三、开始使用 进入visual studio开发界面,点击创建新项目。 这里我选择了新建一个c++的空项目 在这里定义你的项目名字,以及项目的存储位置(建议放在除C盘外的空间内) 最后点击创建就可以了 (四)创建第一个程序 进入项目界面后,选择右侧的源文件,右键添加—新建项 修改一下c++项的名称,然后点击添加 这样就创建好了 (五)万能的HelloWorld 在界面输入hello world代码 #include <iostream> using namespace std; int main() { cout << "Hello World" << endl; return 0; } 点击上方的执行按钮 等待一会就会调出控制台,显示执行结果。 看到这里,你就可以正式开始接下来的学习啦~ 题外话 初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据: 2023届全国高校毕业生预计达到1158万人,就业形势严峻; 国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。 一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。 6月9日,麦可思研究2023年版就业蓝皮书(包括《2023年中国本科生就业报告》《2023年中国高职生就业报告》)正式发布。 2022届大学毕业生月收入较高的前10个专业 本科计算机类、高职自动化类专业月收入较高。2022届本科计算机类、高职自动化类专业月收入分别为6863元、5339元。其中,本科计算机类专业起薪与2021届基本持平,高职自动化类月收入增长明显,2022届反超铁道运输类专业(5295元)排在第一位。 具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业表现不俗,较五年前起薪涨幅均达到了19%。数据科学与大数据技术虽是近年新增专业但表现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。 “没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。 网络安全行业特点 1、就业薪资非常高,涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.

Dev-C++的下载和安装教程(非常详细)从零基础入门到精通,看完这一篇就够了

Dev****的介绍: Dev-C++(或者叫做 Dev-Cpp)是 Windows 环境下的一个轻量级 C/C++ 集成开发环境(IDE)。非常适合于C/C++语言初学者使用。 它是一款自由软件,遵守GPL许可协议分发源代码。它集合了功能强大的源码编辑器、MingW64/TDM-GCC 编译器、GDB调试器和 AStyle格式整理器等众多自由软件。 Dev****的下载: 第一步:登录官网下载网址 https://sourceforge.net/projects/orwelldevcpp/ 第二步:看到这个页面之后,左键单击一下Download ​ 第三步:等待下载过程(不到一分钟,很快,如果网差的话,嗯。。。软件也不大等待几分钟即可) 第四步:左下角显示下载成功 ​ 第五步:点击 在文件夹中显示,打开软件下载的位置 ​ 第六步:显示这样的状态就代表下载好了! ​ Dev****的安装步骤: 第一步:选中Dev软件,鼠标左键双击 ​ 双击后显示如下状态 ​ 第二步:选择语言,这里我们选择默认English即可,中文需要我们安装完之后进行配置时选择。点击OK ​ 第三步:同意相关协议,点击 I Agree ​ 第四步:直接点击Next(对所选的相关组件保持默认即可) ​ 第五步:点击Browse,选择安装路径(不更改安装路径也可以,这一步建议操作,否则默认安装在C盘) ​ ​ 第六步:点击Install 进行安装 ​ 第七步:安装中,静静等待。。。 ​ 第八步:点击Finish 安装完成。 ​ 第九步:选择语言,点击简体中文/Chinese ​ 第十步:点击Next ​ 第十一步:关于字体,保持默认即可,直接点击Next ​ 第十二步:点击OK。设置成功。 ​ 点击OK之后会直接打开Dev-C++ ,打开的界面如下图所示 ​ Dev****的初步使用进行测试: 第一步:新建源代码文件 第1种方法:点击左上角文件两个字下面的小方块图标, 然后点击源代码。 第2种方法:快捷键:ctrl+n ​ 第二步:编写第一个C++的代码 ​ 第三步:保存 快捷键:ctrl+s 进行保存

android悬浮窗气泡点击穿透事件

一个小众功能记录:新增气泡,拖动气泡,点击气泡事件传递到下层 文章底部附上demo 效果: 1、新建一个service,都在这里面实现 左侧悬浮窗: private void setFloatWinow() { floatingView = LayoutInflater.from(this).inflate(R.layout.floating_window, null); windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); WindowManager.LayoutParams params = new WindowManager.LayoutParams( WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY : WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, PixelFormat.TRANSLUCENT); // 设置悬浮窗口的位置和大小 params.gravity = Gravity.CENTER | Gravity.START; params.x = 0; params.y = 100; floatingView.setOnTouchListener(new FloatingOnTouchListener(params)); floatingView.findViewById(R.id.img_float_add).setOnClickListener(new FloatingAddOnClickListener()); floatingView.findViewById(R.id.img_float_lose).setOnClickListener(new FloatingLoseOnClickListener()); floatingView.findViewById(R.id.img_float_set).setOnClickListener(new FloatingSetOnClickListener()); mLayout_hidden = floatingView.findViewById(R.id.layout_hidden); mImgFloatPlayOrStop = floatingView.findViewById(R.id.img_floatPlayOr_stop); windowManager.addView(floatingView, params); isViewSigleOrMulti(); } 气泡悬浮窗: private void setAnchorPointWindow(int mCode) { WindowManager mSystemService = (WindowManager) getSystemService(WINDOW_SERVICE); WindowManager.

批处理完成工作任务,你值得拥有(2023.12.11)

学习batch批处理命令有感 2023.12.11 引言1、为什么要学习batch批处理?2、batch命令学习2.1 Hello world2.2 其他命令 3、高效完成学习、科研和工作中的任务3.1 设定自己的流水线任务 / 工作流3.2 按时定期执行工作流任务 4、小结 引言 在日常学习和工作中,许多从业者(如设计师、开发者、产品经理、技术总监、总顾问、专家学者、教师、会计、工程师等)应该都少不了与计算机(Computer)打交道,无论是进行Word文档报告的编写、Excel表格数据的处理、PPT动态演示文稿的制作、音视频文件的剪辑、脚本及程序代码的编写等事务流程,大家可能需要使用适合自己的、与操作系统适配兼容的软件(Software)来完成每天的任务(Task),当然在任务开始以前,制定妥善的计划(Plan)不可或缺,尽管我们有时无法做到按部就班,但从大方向而言计划可以作为行动指南来引领自己的行动(Action)。 任务作为需求和驱动力,在学习和参考有限知识(Knowledge)的基础上需要计划方案来做基础的可行性支撑,然后行动作为落实计划从而完成任务的具体操作(Operation),通过掌握相当的计算机技能(Skill),将软件和计算机硬件作为高效、省时、快速、得力的辅助工具(Tool)来帮助人们实现有规律性、可重复性、能流程化、需自动化完成的工作目标(Goal),从而积累工作经验(Experience),不断提高工作能力(Ability),提升工作效率(Efficiency)。 1、为什么要学习batch批处理? 批处理(Batch)通常作为脚本语言存在于DOS系统和Windows系统当中,对应脚本文件的扩展名为.bat。它可以完成许多批处理的任务,自动执行特定、复杂的操作,同时由于基于命令行环境执行,因此也可快速调用外部可运行程序。 许多流行的商业软件内部都含有批处理功能或二次开发接口,可供用户执行自动化操作。(注:如果学过GIS的话,相必小伙伴们应该了解ArcGIS Desktop中的ModelBuilder工具,可以帮助用户完成挑战性的空间分析任务,并且是可重复执行的。) 2、batch命令学习 不得不令人敬佩的是,微软公司的工作人员给用户提供了较为详细的Windows系统命令-Microsoft文档说明,如果有时间的话,作者还是建议大家像学习英语或看英文论文一样,争取尽可能地读原著、学原文,从官方帮助中学习至真至正的知识和技能,不求师夷之长技以制夷,但求学以致用、求真务实和一丝不苟。 2.1 Hello world @echo off echo hello world pause & exit 2.2 其他命令 具体请查阅pdf文档 3、高效完成学习、科研和工作中的任务 每天一个小目标,一步一个脚印,在成长的道路上脚踏实地,勇往直前。 3.1 设定自己的流水线任务 / 工作流 花费一定时间,梳理流水线任务流程,步骤分解,按序执行。 3.2 按时定期执行工作流任务 4、小结 现代社会的科技发展如日中天,高新技术不断涌现,先进理念层出不穷,新鲜的想法、观念如果具备一定的创新性、可行性、前瞻性,还能与时俱进,那么就有很大的机会脱颖而出,成为大众所追逐的潮流和理解的主流事物。从视频实时监控及时做好备份记录、后台自动化运维、数据库定时备份按期更新,这些都是无处不在的应用。 好奇心是一个非常可贵的东西,说不上来它的价值何在,但毋庸置疑的是,它是一种神奇的驱动力,能够带领自身去探索宇宙万物、遨游知识海洋。越为核心的技术越是于底层存在,因为它根基坚实,支撑有力,为不多数人所掌握,十分难能可贵 蒹葭苍苍,白露为霜;所谓伊人,在水一方。2023年的冬天会让人更加难忘,不仅是因为今年突如其来的皑皑白雪,遍地银装,相比于去年排队核酸检测的辛苦,值得回味! 我们每个人都有自己的人生理想、生活目标,希望大家都可以实现人生价值,追寻心中所想,自由、快乐、爱情、团圆这些美好而难忘的时刻总是转瞬即逝,时间会冲淡一切,历史难以忘却, 假如生活欺骗了你 不要悲伤,不要心急 忧郁的日子里需要镇静 相信吧,快乐之日将会来临 心儿永远向往着未来 现在却常是忧郁 一切都是瞬息,一切都将会过去 而那过去了的,将会成为深切的怀恋

查看任意hsv值的颜色(Trackbar)

import cv2 import numpy as np def nothing(*arg): pass cv2.namedWindow("hsv", cv2.WINDOW_AUTOSIZE) cv2.createTrackbar("h", "hsv", 0, 180, nothing) cv2.createTrackbar("s", "hsv", 127, 255, nothing) cv2.createTrackbar("v", "hsv", 127, 255, nothing) im=np.zeros((300,300,3), 'uint8') while 1: h = cv2.getTrackbarPos('h', 'hsv') s = cv2.getTrackbarPos('s', 'hsv') v = cv2.getTrackbarPos('v', 'hsv') im[...,0]=h im[...,1]=s im[...,2]=v im=cv2.cvtColor(im, cv2.COLOR_HSV2BGR) cv2.imshow('hsv', im) ch=cv2.waitKey(5) if ch == 27: # esc break cv2.destroyAllWindows() 轻微改动就能变成查看任意rgb值的颜色哦

Linux上编译和测试V8引擎源码

介绍 V8引擎是一款高性能的JavaScript引擎,广泛应用于Chrome浏览器和Node.js等项目中。在本篇博客中,我们将介绍如何在Linux系统上使用depot_tools工具编译和测试V8引擎源码。 步骤一:安装depot_tools depot_tools是一个用于Chromium开发的工具集合,我们首先需要安装它。在终端中执行以下命令: git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH=/path/to/depot_tools:$PATH 步骤二:获取V8源码 在任意目录下创建一个V8源码目录,并切换到该目录: mkdir ~/v8 cd ~/v8 然后使用fetch命令获取V8源代码及其所有分支和依赖项: fetch v8 cd v8 步骤三:安装依赖项 在V8源码目录下执行以下命令,拉取最新更改并安装任何新的生成依赖项: git pull && gclient sync 接着,安装其他构建依赖项: ./build/install-build-deps.sh 步骤四:编译V8 在编译V8之前,我们介绍两种不同的编译方式。 1. 使用gm快速搭建 gm是depot_tools中的一个方便的多合一脚本,用于生成构建文件、触发构建并选择性地运行测试。执行以下命令进行快速搭建: tools/dev/gm.py x64.release 或者,您可以创建一个gm的别名(alias),将其指向V8引擎工具目录下的/path/to/v8/tools/dev/gm.py文件,然后使用已知配置构建V8,例如: gm x64.release 2. 原始手动搭建 首先,使用gn命令为目录生成构建文件,例如生成到out/foo目录: gn gen out/foo --args='is_debug=false target_cpu="x64" v8_target_cpu="arm64" use_goma=true' 然后,使用ninja命令编译V8: ninja -C out/x64.release 如果系统找不到ninja命令,需要将depot_tools添加到环境变量中: export PATH=/path/to/depot_tools:$PATH 步骤五:测试V8 与编译一样,我们介绍两种测试方式。 1. 使用gm快速测试 如果您希望在生成后立即运行测试,可以执行以下命令: gm x64.release.check gm会输出它正在执行的所有命令,以便在必要时进行跟踪和重新执行。您还可以使用单个命令生成所需的二进制文件并运行特定测试,例如: gm x64.debug mjsunit/foo cctest/test-bar/* 2. 原始手动搭建测试 将输出目录传递给测试驱动程序,并从构建中推断出其他相关标志,例如:

如何用Jmeter做性能测试(超详细)

前言 今天我们来说说jmeter如何进行性能测试,我们都知道jmeter工具除了可以进行接口功能测试外,还可以进行性能测试。当项目趋于稳定,根据性能需求就可以着手准备性能测试了,今天就说一说jmeter如何进行性能测试,jmeter进行性能测试的前提是接口的功能逻辑是通的,没有阻塞bug。 同时,在这我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看就行,希望对你有所帮助!【公众号:互联网杂货铺】 Jmeter性能测试、接口自动化测试全集!字节大佬分享,永久白嫖! ​第一步:设置线程数量 第二步:添加事务控制器 根据业务场景设置事务,将需要进行并发测试的接口拖拽到事务控制器节点下,输出性能测试报告后可以查看该事务的性能测试结果 ​第三步:设置同步定时器,同步定时器主要设置两个参数 Number of Simulated User to Group by:每组模拟的用户数,用来控制父节点请求的最大并发数是多少,如果设置为50,表示最大50个线程并发执行; Timeout in milliseconds:超时时间(毫秒),如果设置为3000,表示如果3秒内50个线程到达父节点则立即并发运行。如果30内未达到50个线程,则有多少线程并发执行多少线程。 ​第四步:添加监听器 Graph Results:图形结果,查看运行趋势 View Results in Table:用表格查看结果,查看运行的明细 Summary Report:聚合报告,统计响应信息并提供请求数,平均值,最大,最小值,错误率,大约吞吐量(以请求数/秒为单位)和以kb/秒为单位的吞吐量 Transactions per Second:每秒事务数,每秒钟系统能够处理的交易或事务的数量,它是衡量系统处理能力的重要指标。 Hits per Second:每秒点击率,象征着压力大小 ​第五步:通过非GUI模式运行脚本,并分析性能测试报告,输出测试结果 性能测试评价:真对增加稿件事务进行1000UV并发测试时,平均事务响应时间1.67秒,最大2.99秒,均符合需求(<3秒),但是CPU使用里大于80%,存在瓶颈;期间由于连接服务器失败(Non HTTP response code: java.net.ConnectException/Non HTTP response message: Connection refused: connect),导致错误率达到了31.2%,远超5%,存在瓶颈。 压力测试是一个循序渐进的过程,比如每次压力之前设置100,300,500,800,1000,1500,2000,......线程,分析每次压力测试的结果,同时可以设置循环次数查看长时间并发情况下的性能结果,由于时间关系我只压了一次。最后,性能指标需要达到四个标准即:多、快、好、省,时间特性(响应时间快)、处理效率高(TSP),长时间运行稳定,资源特性(系统资源使用率低)。设置好业务场景也是非常关键的,否则测试的结果是不符合业务需求的。

软件测试之测试用例,一篇足矣

一、介绍 测试用例就是一个文档,描述输入、动作、或者时间和一个期望的结果,其目的是确定应用程序的某个特性是否正常的工作。 二、基本格式 用例的基本要素包括测试用例编号、测试标题、重要级别、测试输入、操作步骤、预期结果等。 用例编号:编号有一定的规则,如系统测试用例的编号这样定义规则: PROJECT1-ST-001 ,命名规则是项目名称+测试阶段类型(系统测试阶段)+编号。定义测试用例编号,便于查找测试用例,便于测试用例的跟踪。 测试标题:对用例描述,测试用例标题应该清楚表达测试用例的用途。比如 “ 测试用户登录时输入错误密码时,软件的响应情况 ” 。 重要级别:定义测试用例的优先级别,可以笼统的分为 四个不同的等级。 前置条件: 输入限制:提供测试执行中的各种输入条件。根据需求中的输入条件,确定输入。测试用例的输入对软件需求当中的输入有很大的依赖性,如果软件需求中没有很好的定义需求的输入,那么测试用例设计中会遇到很大的障碍。 操作步骤:提供测试执行过程的步骤。对于复杂的用例,测试用例的输入需要分为几个步骤完成,这部分内容在操作步骤中详细列出。 预期结果:提供测试执行的预期结果,预期结果应该根据需求说明书中的输出得出。如果在实际中,得到的实际测试结果与预期结果不符,那么测试不通过;反之则测试通过。 同时,在这我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看就行,希望对你有所帮助!【公众号:互联网杂货铺】 软件测试视频教程观看处: 软件测试工程师大忌!盲目自学软件测试真的会毁终生,能救一个是一个...... 三、示例 四、测试用例设计方法 常见的有:等价类划分法、边界值分析法、错误推测法、流程分析法、判定表法、正交实验法。 等价类法:就是将测试的范围划分成几个互不相交的子集,他们的并集是全集,从每个子集选出几个有代表性的值作为测试用例。如:密码长度6-10位,则划分1-5位 、6-10位、10位以上三类。 边界值法:软件大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。选出的测试用例,应选取正好等于、刚刚大于、刚刚小于边界的值,例如:成年人年龄假定 X 为整数, 18≤X≤100,那么 X 在测试中应该取的边界值为:17,18,19,99,100,101。 错误推测法:在测试时,根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例的方法。这方法没有固定的形式,依靠的是经验和直觉,有针对性地设计。只能作为一种补充。 流程分析法:又称为场景法,是根据不同的业务场景来编写测试用例,需要把所以可能产生分支的地方考虑到。流程分析主要包括三个流程:基本流、备选流、异常流。 基本流:也就是正向流程,通过业务流程输入都为正确的,能够最终达到目标的流程。如:经典的ATM机取款流程,插入银行卡—输入正确的密码—输入正确的金额-取钱-取卡。 备选流:通过实现业务流程时,因错误操作或异常输入,导致流程存在反复,但最终能够达到预期的操作流程,如:ATM机取款,插入银行卡—输入错误的密码—重新输入正确的密码—输入正确的金额-取钱-取卡。 异常流:实现业务流程时,因操作错误或异常输入,导致没有完成业务流程,如ATM机取款,插入银行卡—输入错误的密码3次—吞卡。 正交实验法:就是在各因素互相独立的情况下,设计出一种特殊的表格,找出能以少数替代全面的测试用例。 状态迁移法:根据测试对象和测试数据之间的关系。测试对象的输出行为不仅仅和当前的输入数据有关,而且和测试对象当前的状态有关。状态迁移图是设计状态转换测试用例的基础,基于状态迁移图进行的测试就是状态迁移测试。例如:订单状态:未支付、超时取消、已取消、已支付、已收货、已完成等。步骤:画出状态迁移图、通过状态迁移图画出状态转换树、从状态转换树推导出测试路径、根据测试路径编写合法测试用例 五、缺陷报告 报告内容:标题、描述(简洁、准确、完整、反映缺陷本质)、重现步骤、严重程度(致命、严重、一般、较小)、优先级(紧急、高、中和低)、截图、编号、缺陷状态、指派人、测试环境、版本、所属模块等。 编写测试报告要做到以下几点: 1、对错误的描述要做到简洁、准确、完整,揭示错误实质 2、每个软件问题报告只书写一个缺陷或错误 3、明确指明错误类型和严重程度 4、每一个步骤尽量只记录一个完整操作 5、复现的操作步骤要完整,准确,简短 6、可以附加必要的错误特征图像 7、可以附加必要的测试用例 严重等级划分: 致命:系统任何一个主要功能完全丧失,用户数据受到破坏,系统崩溃、悬挂、死机等。 严重:系统的主要功能部分丧失,数据不能保存,系统的次要功能完全丧失,系统所提供的功能或服务受到明显的影响。 一般:系统的次要功能没有完全实现,但不影响⽤户的正常使用。例如:提供信息不太准确或用户界⾯差、操作时间长等一些问题。 较⼩:是操作者不⽅便或遇到⿇烦,但它不影响功能的操作和执⾏,如个别不影响产品理解的错别字、⽂字排列不整齐等⼀些⼩问题。

Python程序若是未来需要打包尽量避免使用多进程

在Python开发中,我们通常会遇到使用多进程、多线程和协程的情况。这些并发编程的方式各自具有不同的特点、优缺点和适用场景。本文将首先阐述Python进程、线程和协程的区别,然后讨论在不同操作系统(Windows、Mac和Linux)上实现多进程的方式,并探讨由于多进程实现方式的不兼容性,为什么在打包多进程的程序时应尽量避免使用多进程。 1. Python进程、线程和协程的区别及各自的优缺点 进程:进程是操作系统中独立运行的一个程序单位,具有独立的内存空间和系统资源。Python中使用multiprocessing模块实现多进程编程。优点是进程之间的内存独立,可以充分利用多核处理器,适用于CPU密集型任务。缺点是进程间通信(IPC)开销较大,且需要额外的资源管理。 线程:线程是进程中的执行单元,共享进程的内存空间和系统资源。Python中使用threading模块实现多线程编程。优点是线程之间共享内存,易于编程和调试,适用于I/O密集型任务。缺点是全局解释器锁(GIL)的存在,使得多线程并不能充分利用多核处理器。 协程:协程是一种用户级线程,称为轻量级线程或纤程。Python中使用asyncio模块实现协程编程。优点是协程可以在单线程中实现并发,避免了线程切换的开销,适用于I/O密集型任务。缺点是需要遵循特定的异步编程模型,对代码的改造和理解有一定的要求。 2. 多进程实现方式在不同操作系统上的异同 在不同操作系统上,多进程的实现方式存在一些差异。 Windows:在Windows操作系统中,使用multiprocessing模块创建多进程是比较常见的方式。它通过创建子进程来实现并发执行。Windows下的多进程编程与Unix/Linux系统下的方式有一些区别,主要是因为Windows下没有fork系统调用。因此,在Windows中,需要使用spawn或forkserver作为启动方法。 Mac和Linux:在Mac和Linux操作系统中,多进程编程通常使用fork系统调用来创建子进程。fork调用会创建一个与父进程相同的副本,包括所有的内存和资源。这种方式可以在子进程中继续执行父进程的代码。 3. 多进程的兼容性问题 由于多进程实现方式在不同操作系统上的差异,导致在打包多进程的程序时可能会遇到一些兼容性问题。一些常见的问题包括: 跨平台兼容性:由于Windows、Mac和Linux的多进程实现方式不同,程序在不同操作系统上的运行结果可能会有所差异。这可能导致程序在打包后在不同操作系统上出现错误或不可预测的行为。 打包工具限制:一些常用的打包工具(例如PyInstaller、cx_Freeze等)可能对多进程程序的打包支持不完善或存在限制。这可能导致打包后的程序无法正常运行或出现各种异常。 资源管理问题:多进程编程需要额外的资源管理,如进程间通信、共享内存等。在打包多进程的程序时,由于不同的打包工具和操作系统之间的差异,可能会出现资源管理方面的问题,导致程序运行不稳定或出现内存泄漏等问题。 综上所述,由于多进程实现方式的不兼容性和相关兼容性问题,我们在进行Python开发并打包程序时,尽量避免使用多进程。可以考虑使用其他并发编程方式,如多线程或协程,根据具体的应用场景选择合适的解决方案。 使用多线程可以充分利用多核处理器,并且在I/O密集型任务中表现良好。而协程则可以在单线程中实现并发,避免了线程切换的开销,适用于处理大量的I/O操作。 当确实需要使用多进程时,建议在编写多进程程序时考虑跨平台兼容性,并选择适当的打包工具或技术,以确保程序在不同操作系统上的稳定运行。同时,对多进程编程要有深入的理解,并合理管理资源,以避免可能出现的问题。 综上所述,尽管多进程在某些情况下可能是有益的,但由于其在不同操作系统上的实现方式不同以及相关的兼容性问题,我们在Python开发中,若需要打包程序,尽量避免使用多进程,而可以考虑使用其他并发编程方式,如多线程或协程,以获得更好的跨平台兼容性和稳定性。

一个根据多个项目积累总结下来的Go-tools实用工具包

最近项目一直有用Golang开发项目,也组织团队做了几个大型的项目都是用的Go语言,Go语言是我目前用的所有语言里的写代码最舒服最爽的语言。其实go的开发效率并不低,尤其现在项目里用go-zero框架后,基于goctl整理了一套开发流程,团队开发效率更高了。 不废话了,上干货,分享一个我们经过几个项目总结下来用到的go工具包, 绝对实用 说明 本工具目前主要在go-zero框架里使用,但正常没有用到 go-zero框架功能的模块在哪都可用,使用时注意甄别这是我们日常开发中, 经过多个项目沉淀下来的工具包 工具包功能清单 aligreen 阿里内容安全审核,支持语音/图片/文字/视频,异步与同步alioss 阿里云oss存储alipay 支付宝支付apple 苹果支付batcher 批处理任务captchax 验证码 数字/图片/算术/短信constant 常量配置copierx copier包的复制转换类型扩展ctxdata 获取context上下文数据 比如上下文的用户信息interceptor 拦截器 rpc服务日志拦截器jwtx jwt辅助函数与登录互踢功能limitx 限流器orderno 订单号otel 链路追踪realnamex 实名检测result 接口返回数据统一封装sandpay 杉德支付sms 短信 目前主要接阿里snowflake 雪花算法 全局唯一ID生成器tool 加密/ip获取/随机字符wechat 微信支付xerr 错误处理 https://github.com/vmee/go-tools