if ($server_port !~ 443){ rewrite ^(/.*)$ https://$host$1 permanent; }
View Details1、通过instanceof判断 instanceof运算符用于检验构造函数的prototype属性是否出现在对象的原型链中的任何位置,返回一个布尔值。
1 2 3 4 |
let a = []; a instanceof Array; //true let b = {}; b instanceof Array; //false |
在上方代码中,instanceof运算符检测Array.prototype属性是否存在于变量a的原型链上,显然a是一个数组,拥有Array.prototype属性,所以为true。 需要注意的是,prototype属性是可以修改的,所以并不是最初判断为true就一定永远为真。 其次,当我们的脚本拥有多个全局环境,例如html中拥有多个iframe对象,instanceof的验证结果可能不会符合预期,例如:
1 2 3 4 5 6 7 8 |
//为body创建并添加一个iframe对象 var iframe = document.createElement('iframe'); document.body.appendChild(iframe); //取得iframe对象的构造数组方法 xArray = window.frames[0].Array; //通过构造函数获取一个实例 var arr = new xArray(1,2,3); arr instanceof Array;//false |
导致这种问题是因为iframe会产生新的全局环境,它也会拥有自己的Array.prototype属性,让不同环境下的属性相同很明显是不安全的做法,所以Array.prototype !== window.frames[0].Array.prototype,想要arr instanceof Array为true,你得保证arr是由原始Array构造函数创建时才可行。 2、通过constructor判断 我们知道,实例的构造函数属性constructor指向构造函数,那么通过constructor属性也可以判断是否为一个数组。
1 2 |
let a = [1,3,4]; a.constructor === Array;//true |
同样,这种判断也会存在多个全局环境的问题,导致的问题与instanceof相同。 3、通过Object.prototype.toString.call()判断 Object.prototype.toString().call()可以获取到对象的不同类型,多个全局环境也适用
1 2 3 4 5 6 7 8 9 |
// 检验是否是数组 let a = [1,2,3] Object.prototype.toString.call(a) === '[object Array]';//true //检验是否是函数 let b = function () {}; Object.prototype.toString.call(b) === '[object Function]';//true //检验是否是数字 let c = 1; Object.prototype.toString.call(c) === '[object Number]';//true |
4、通过Array.isArray()判断 简单好用,而且对于多全局环境,Array.isArray() 同样能准确判断,但有个问题,Array.isArray() 是在ES5中提出,也就是说在ES5之前可能会存在不支持此方法的情况。
1 2 |
let a = [1,2,3] Array.isArray(a);//true |
最终推荐方法
1 2 3 4 5 |
if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === '[object Array]'; }; } |
from:https://www.cnblogs.com/chenmeijiao/p/12060845.html
View Details打开AS时出现了Unsupported Modules Detected: Compilation is not supported for following modules: app, KeyboardView. Unfortunately you can’t have non-Gradle Java modules and Android-Gradle modules in one project的错误,解决步骤如下: (1)关闭as (2)删除.idea目录 (3)删除app/build目录 (4)重新打开as from:https://blog.csdn.net/qq_40600379/article/details/106485687
View Detailsnetstat netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况。 netstat 查看端口占用语法格式:
1 |
netstat -tunlp | grep 端口号 |
-t (tcp) 仅显示tcp相关选项 -u (udp)仅显示udp相关选项 -n 拒绝显示别名,能显示数字的全部转化为数字 -l 仅列出在Listen(监听)的服务状态 -p 显示建立相关链接的程序名 例如查看 8000 端口的情况,使用以下命令:
1 2 |
# netstat -tunlp | grep 8000 tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 26993/nodejs |
更多命令:
1 2 3 |
netstat -ntlp //查看当前所有tcp端口 netstat -ntulp | grep 80 //查看所有80端口使用情况 netstat -ntulp | grep 3306 //查看所有3306端口使用情况 |
from:https://www.cnblogs.com/music-liang/p/11912928.html
View Details忙了一早晨,就是因为这个错误提示!!!!No cached version of com.android.tools.build:gradle:3.6.2 available for offlin 先说我的android studio 版本号:3.6.2 在之前的版本当中Settings->Builder….bababa… >gradel> offline work有这么个选项,但是在最新的版本当中是没有这个选项的!!!我找了一早晨!! 好了废话不多说,正题,位置在哪里?在这里!!! 默认的状态是: 你只要取消选中就是offline work不启动,也就是离线模式不不启用!!如果在截图当中没有这个,那么这个界面就在view->window tool->gradle,只要你选择了就会在右则弹出来这个选项 from:https://www.cnblogs.com/flay/p/12641381.html
View Details前天电脑重装了系统,所有东西重新配置,打开项目编译后发现:Could not resolve all artifacts for configuration ':classpath';这是什么鬼,然后常规clean、rebuild、offline work、修改本地gradle…一番操作之后,依然没用。最后上google寻求帮助,成功解决了这个问题。真凶尚不明确,怀疑是网络问题,资源库加载不下来。 解决办法如下:在根目录的build文件里加上这两句镜像代码,重新编译解决
1 |
maven{url 'http://maven.aliyun.com/nexus/content/groups/public/'} |
from:https://blog.csdn.net/c18871189293/article/details/105681103
View Details在 Android Studio 上新建项目,出现 Unable to start the daemon process. 错误,具体错误信息如下: Error:Unable to start the daemon process. This problem might be caused by incorrect configuration of the daemon. For example, an unrecognized jvm option is used. Please refer to the user guide chapter on the daemon at https://docs.gradle.org/3.3/userguide/gradle_daemon.html Please read the following process output to find out more: ———————-- OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0 解决方法 方法一:删除 C:\Users\UserName\.gradle 目录,重新启动 Android Studio即可。重启动后,它会自动为你创建一个新的。 方法二:修改配置。File -> Settings. 选择左边导航栏的Compiler项,设置 VM Options 为 -Xmx512m即可。 方法三:其它应该,留出更多的内存空间试试。 from:https://blog.csdn.net/cto_1649900265/article/details/79419275
View Details
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
DELIMITER // CREATE DEFINER=`root`@`localhost` PROCEDURE `p_Uppercase`(IN `dbname` varchar(200)) BEGIN DECLARE done INT DEFAULT 0; DECLARE oldname VARCHAR(200); DECLARE cur CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema = dbname; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN cur; REPEAT FETCH cur INTO oldname; SET @newname = UPPER(oldname); SET @isNotSame = @newname <> BINARY oldname; IF NOT done && @isNotSame THEN SET @SQL = CONCAT('rename table `',oldname,'` to `', LOWER(@newname), '_tmp` '); PREPARE tmpstmt FROM @SQL; EXECUTE tmpstmt; SET @SQL = CONCAT('rename table `',LOWER(@newname),'_tmp` to `',@newname, '`'); PREPARE tmpstmt FROM @SQL; EXECUTE tmpstmt; DEALLOCATE PREPARE tmpstmt; END IF; UNTIL done END REPEAT; CLOSE cur; END// DELIMITER ; |
View Details
目录 一、环境变量的概念 1、环境变量的含义 2、环境变量的分类 3、Linux环境变量 二、常用的环境变量 1、查看环境变量 2、常用的环境变量 三、设置环境量 1、系统环境变量 2、用户环境变量 3、环境变量脚本文件的执行顺序 四、重要环境变量的详解 1、PATH环境变量 2、LANG环境变量 3、LD_LIBRARY_PATH环境变量 4、CLASSPATH 五、环境变量的生效 六、应用经验 七、版权声明 一、环境变量的概念 1、环境变量的含义 程序(操作系统命令和应用程序)的执行都需要运行环境,这个环境是由多个环境变量组成的。 2、环境变量的分类 1)按生效的范围分类。 系统环境变量:公共的,对全部的用户都生效。 用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。 2)按生存周期分类。 永久环境变量:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。 临时环境变量:使用时在Shell中临时定义,退出Shell后失效。 3、Linux环境变量 Linux环境变量也称之为Shell环境量变,以下划线和字母打头,由下划线、字母(区分大小写)和数字组成,习惯上使用大写字母,例如PATH、HOSTNAME、LANG等。 二、常用的环境变量 1、查看环境变量 1)env命令 在Shell下,用env命令查看当前用户全部的环境变量。 上图只截取了部分环境变量,并非全部。 用env命令的时候,满屏显示了很多环境变量,不方便查看,可以用grep筛选。
1 |
env|grep 环境变量名 |
例如查看环境变量名中包含PATH的环境变量。
1 |
env|grep PATH |
2)echo命令
1 |
echo $环境变量名 |
1 |
<img style="background-color: #ffffff; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 16px;" src="https://longsheng.org/wp-content/uploads/2020/09/6dd2aa3bec1b66f9e354678685aa51e6.png" alt="在这里插入图片描述" /> |
注意,符号$不能缺少,这是语法规定。 2、常用的环境变量 1)PATH 可执行程序的搜索目录,可执行程序包括Linux系统命令和用户的应用程序,PATH变量的具体用法本文后面的章节中有详细的介绍。 2)LANG Linux系统的语言、地区、字符集,LANG变量的具体用法本文后面的章节中有详细的介绍。 3)HOSTNAME 服务器的主机名。 4)SHELL 用户当前使用的Shell解析器。 5)HISTSIZE 保存历史命令的数目。 6)USER 当前登录用户的用户名。 7)HOME 当前登录用户的主目录。 8)PWD 当前工作目录。 9)LD_LIBRARY_PATH C/C++语言动态链接库文件搜索的目录,它不是Linux缺省的环境变量,但对C/C++程序员来说非常重要,具体用法本文后面的章节中有详细的介绍。 10)CLASSPATH JAVA语言库文件搜索的目录,它也不是Linux缺省的环境变量,但对JAVA程序员来说非常重要,具体用法本文后面的章节中有详细的介绍。 三、设置环境量
1 2 |
变量名='值' export 变量名 |
或
1 |
export 变量名='值' |
如果环境变量的值没有空格等特殊符号,可以不用单引号包含。 示例:
1 2 3 4 5 6 |
export ORACLE_HOME=/oracle/home export ORACLE_BASE=/oracle/base export ORACLE_SID=snorcl11g export NLS_LANG='Simplified Chinese_China.ZHS16GBK' export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:. |
采用export设置的环境变量,在退出Shell后就会失效,下次登录时需要重新设置。如果希望环境变量永久生效,需要在登录脚本文件中配置。 1、系统环境变量 系统环境变量对全部的用户生效,设置系统环境变量有三种方法。 1)在/etc/profile文件中设置。 用户登录时执行/etc/profile文件中设置系统的环境变量。但是,Linux不建议在/etc/profile文件中设置系统环境变量。 2)在/etc/profile.d目录中增加环境变量脚本文件,这是Linux推荐的方法。 /etc/profile在每次启动时会执行/etc/profile.d下全部的脚本文件。/etc/profile.d比/etc/profile好维护,不想要什么变量直接删除/etc/profile.d下对应的 shell 脚本即可。 […]
View Details快手极速版是我个人最喜欢的APP,原因很简单,薅羊毛的时候简单粗暴无需过多的技术也不需要有提现的各种限制,只要够3元就可以提现,而且也不吝惜金币,每天1万多金币问题不大,废话不多说直接上代码。 我的快手极速版邀请码: 2rvxaem.看文章加关注点分享都不用…加下邀请码就好。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
auto.waitFor();//判断和等待开启无障碍 let see_count = rawInput('请输入滑动次数','1000');//手动输入滑动次数默认是1000次。 app.launchApp('快手极速版');//只有一个快手极速版所以直接Launch就可以,不用包名 sleep(10000);//等待splash时间 console.show(); //开启日志(悬浮窗权限) for (var i = 1; i < see_count; i++) { toast("快手极速版滑动" + i + "次"+"总计:"+ see_count + "次");//系统自带目前我huweinova不显示还不知道为啥 console.log("快手极速版滑动" + i + "次"+"总计:"+ see_count + "次"); kuaiShouCloseIsLike(); randomUpSildeScreen();//模仿人类随向上滑动一次,表示对这个视频有兴趣 randomDownSildeScreen();//模仿人类随连续下滑2次,表示对当前视频无兴趣 randomHeart();//模仿人类随随机点赞 randomFollow();//模仿人类随随机关注 slideScreenDown(device.width / 2, device.height-200, device.width / 2, 500, 300); } //关闭当前程序 home();//回到首页 exits();//退出js脚本 /** * 快手关闭是否喜欢对话框 */ function kuaiShouCloseIsLike(){ if(className("android.widget.TextView").text("不影响").exists()){ className("android.widget.TextView").text("不影响").findOnce().click(); } } /** * 屏幕向下滑动并延迟8至12秒 */ function slideScreenDown(startX, startY, endX, endY, pressTime) { swipe(startX, startY, endX, endY, pressTime); let delayTime = random(8000, 12000); sleep(delayTime);//模仿人类随机时间 } /** * 随机上滑(防止被判定是机器)上滑后停留时间至少是10S,造成假象表示是对内容感兴趣 * 点赞和关注先不搞。 */ function randomUpSildeScreen(){ let randomIndex = random(1, 50); if(randomIndex==1){ console.log("快手极速版随机上滑被执行了!!!"); pressTime = random(200, 500); swipe(device.width / 2, 500, device.width / 2, device.height-200, 300); delayTime = random(10000, 15000); sleep(delayTime); } } /** * 连续下滑对上一个无兴趣 * 其实得和上滑做个排他,既然无兴趣不要在上滑 */ function randomDownSildeScreen(){ let randomIndex = random(1, 50); if(randomIndex==1){ console.log("连续下滑被执行了"); swipe(device.width / 2, device.height-200, device.width / 2, 500, 300); sleep(2000); swipe(device.width / 2, device.height-200, device.width / 2, 500, 300); delayTime = random(8000, 10000); sleep(delayTime); } } /**随机点赞并休息一秒 */ function randomHeart() { index = random(1, 50); if (index == 6) { var target = id('a4l').findOnce(); if (target == null) { return; } else { target.click(); sleep(1000); console.log("随机点赞并休息一秒"); } } } function randomFollow(){ index = random(1, 100); if (index == 66) { var target = id('nebula_thanos_bottom_follow_button_layout').findOnce(); if (target == null) { return; } else { target.click(); sleep(1000); } } } /** * 随机评论(未实现) */ function randomComment() { content = "666" id('comment_button').findOnce().click(); sleep(1000);//阻塞下面的动作 id("recycler_view").className("androidx.recyclerview.widget.RecyclerView").scrollable(true).findOne().children().forEach(child => { var target = child.findOne(id("comment")); target.click(); }); sleep(1000); } |
from:https://www.cnblogs.com/zy0412326/p/12590829.html
View Details