Bubble Sort Algorithm-冒泡排序

    Bubble sort is an algorithm that is used to sort a list of elements,for example elements in an array. This algorithm compares two adjacent elements and then swaps them if they are not in order. The process is repeated util no more swapping is needed.       冒泡排序是对一系列元素排序的一种算法,比如数组中的元素。该算法对比相邻的元素,如果顺序不对则交换它们。 该过程一直重复,直到不需要交换为止       The main advantage of Bubble Sort … Read more

Xshell通过跳板机连接只有ipv6的vps

    最近折腾了一台欧洲小鸡只有ipv6地址,由于我本地宽带不支持ipv6,所以没有通过xshell或者putty直连。     解决方式可以通过跳板机的方式连,意思就是通过支持ipv6的跳板机代理连接我们只有ipv4的vps。     如果跳板机只支持ipv4是不可行的,我们可以使用WRAP使我们的跳板机支持ipv6。我有一台支持ipv6的vps,所以就不用在跳板机上装WRAP了。     下面总结一下Xshell通过跳板机连接的方式     先添加我们的跳板机,在Xshell菜单选择:文件->打开->新建 填写跳板机vps信息,然后再属性里面点击隧道->添加隧道 ,填写信息,类型选Dynamic,端口随便设置一个,然后点确认保存。     然后再添加我们的ipv6vps,文件->打开->新建,填写vps信息  左侧属性内点击代理->浏览->添加代理,类型选SOCKS5,主机填写127.0.0.1, 端口号更上面设置跳板机的隧道一直,这里我设置的是1088,点击确认保存 以上设置完后,先连接跳板机,再连接ipv6机器,当跳板机显示绿色环形的时候,代表通过跳板机连接ipv6小机成功

使用warp解决vir,rn等谷歌验证码问题

什么是wrap? Cloudflare官网解释,wrap是为个体或组织提供一个更快,更安全,更有隐私体验的专线。为了不通的网络需求,wrap有多种模式。 wrap都有什么模式? 1.1.1.1 1.1.1.1是cf的公共DNS解析器,提供了更快更安全的网络浏览,它也通过DNS over HTTPS 或DNS over TLS提供加密服务,以提高安全和隐私 1.1.1.1 with wrap wrap使用 BoringTUN 加密从设备发出的数据并直接发送刀CloudFlare的边缘网络。保证了用户安全,阻止了第三方查看网络上传输的数据  warp via LOCAL PROXY 目前只支持桌面客户端,wrap配置为本代理,只有配置了代理的应用的数据才会走wrap warp+ 能够利用CloudFlare世界众多的数据中心提供更加私有和健硕的网络连接,提高整体端对端的性能  warp unlimited warp+的按月订阅服务,目前只能通过安卓和ios终端订阅 使用warp过vir,rn的谷歌验证 使用warp的一键脚本  https://github.com/P3TERX/warp.sh ipv4出栈由warp接管 bash <(curl -fsSL git.io/warp.sh) wg4 2. ipv4和ipv6双栈都由warp接管 bash <(curl -fsSL git.io/warp.sh) wgd 3. 用wrap给没有ipv6的vps添加ipv6,然后v2单独配置谷歌走ipv6 bash <(curl -fsSL git.io/warp.sh) wg6  v2客户端需要添加配置让特定地址走ipv6 outbounds里面添加:     {       "tag":"IP4_out",       "protocol": "freedom",       "settings": {}     },     {       "tag":"IP6_out",       "protocol": "freedom",       "settings": {         "domainStrategy": "UseIPv6"       }      } routing里面添加:       {         "type": "field",         "outboundTag": "IP6_out",         "domain": ["geosite:netflix","geosite:google"]        },       { … Read more

Android Studio Arctic Fox 原生项目集成Flutter模块Failed to apply plugin class ‘FlutterPlugin’

今天升级Android Studio Arctic Fox Patch2后,新建Android原生项目,并在原生项目工程上新建Flutter module,编译无法通过,报错信息: Caused by: org.gradle.api.internal.plugins.PluginApplicationException:  Failed to apply plugin class 'FlutterPlugin'.   Caused by: org.gradle.api.InvalidUserCodeException:  Build was configured to prefer settings repositories over project repositories but repository 'maven'  was added by plugin class 'FlutterPlugin' 谷歌了半天没有找到解决方法,只好自己一步步慢慢解决,最终找到了解决方式。 根据报错信息,应该是在构建Flutter module的时候出的问题,大体意思是构建过程被配置为更喜欢settings里的仓库,而不是project里面的仓库,但是仓库maven通过FlutterPlugin添加了。 打开Android原生工程的settings.gradle文件,对比发现通过Arctic Fox创建的项目,settings.gradle多了这些配置信息: dependencyResolutionManagement {     repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)     repositories {         google()         mavenCentral()         jcenter() // Warning: this repository is going to shut down soon     } } 根据gradle文档描述,DependencyResolutionManagement是gradle6.8之后新增的配置项,它为构建的所有工程配置依赖解析 RepositoriesMode配置在构建中仓库如何设置,总共有三种方式: FAIL_ON_PROJECT_REPOS 表示如果工程单独设置了仓库,或工程的插件设置了仓库,构建就直接报错抛出异常 PREFER_PROJECT 表示如果工程单独设置了仓库,就优先使用工程配置的,忽略settings里面的 PREFER_SETTINGS 表述任何通过工程单独设置或插件设置的仓库,都会被忽略 到这里,综合报错信息就豁然开朗了,原来是因为settings.gradle里配置了FAIL_ON_PROJECT_REPOS,而Flutter插件又单独设置了repository,所以会构建报错,所以我直接把FAIL_ON_PROJECT_REPOS改成PREFER_PROJECT,再重新build,接下来又有报错信息了,大致信息如下: Execution failed for task ':app:mergeDebugResources'. > Could not resolve all files for configuration ':app:debugRuntimeClasspath'.    > Could not find org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.30.      Searched in the following locations:        – https://storage.flutter-io.cn/download.flutter.io/org/jetbrains/kotlin/kotlin-stdlib-jdk8/        1.5.30/kotlin-stdlib-jdk8-1.5.30.pom        … 原来都所有依赖库都按找flutter module里面配置的仓库下载依赖了,打开Android工程目录下的build.gradle,添加下面的配置: allprojects {     repositories {         google()         jcenter()     } } 然后sync,重新build,成功了!顺手给stackoverflow提交了一个回答~: PluginApplicationException: Failed to apply plugin … Read more

Flutter 集成到现有的安卓原生项目中-集成方式

Flutter可以作为Gradle子工程或AAR文件嵌入到现有的安卓原生项目中,集成流程可以使用Android Studio的插件或手动集成,从Flutter v1.26开始,支持在原生项目中集成多个Flutter引擎、screen,view的实例。 注意:你的原生安卓项目可能支持mips或x86架构,Flutter目前(2021年9月)只支持AOT模式编译x86_64,armabi-v7a,arm64-v8a 可以在app上使用abiFilters安卓Gradle插件api限制支持的架构,避免缺少libflutter.so造成的运行时异常,比如: android {   //…   defaultConfig {     ndk {       // Filter for architectures supported by Flutter.       abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64'     }   } } Flutter引用有x86和x86——64版本,当使用模拟器JIT模式调试时,Flutter模块会正确的运行。 用Android Studio集成 Android Studio自动集成Flutter module是非常方便的,可以在项目中同时编辑android原生代码和Flutter代码,并可以继续使用Flutter插件,比如Dart代码自动补全,hot reload,widget检查等。 添加到app的流程支持Android Studio 3.6,42+的IntelliJ Flutter插件,Android Studio集成也只支持使用源码gradle子项目集成,而不支持使用AAR. 使用Android Studio菜单栏的File>New>New Module…,你可以创建一个新的Flutter module集成,或者选择一个之前创建的Flutter module Android Studio插件会自动配置Android工程,添加Flutter module作为依赖。 手动集成 手动集成Flutter module到安卓项目,不使用Android studio插件,按照如下步骤: 创建一个Module 假设我们有一个Android app在 some/path/MyApp 路径,我们想要我们的Flutter 工程在同级目录 cd some/path/ flutter create -t module –org com.adamin flutter_m3 这样会在some/path/flutter_m3目录下创建一个Flutter module,里面有一些Dart代码作为你的初始代码,还有个.android的隐藏文件夹,.android文件夹包含一个android项目,它既可以帮助你通过flutter run命令单独运行flutter模块,也是一个包装器,可以帮助将Flutter模块引导为可嵌入的android 库。 Java 8 需求 Flutter Android … Read more

数据结构基础-链表

数据结构基础-链表(linked list) 链表在数据结构中通常用来实现其他的数据结构,它是一个节点序列,其中每个节点存储自己的数据和指向下一个节点位置的指针(地址),可以被想象成一个链接链: 列表中最后一项有一个指向NULL的链接,表示链的结尾。 优点(与数组对比) 尽管链表有点像数组,但是它不限制声明元素的长度 数组需要把数据存储在连续的内存或者磁盘上,链表不需要 链表插入和移除元素更高效,不需要重新分配和组织整个,因为数据不需要连续存储 缺点 不允许随机访问,访问数据必须第一个开始遍历,因为没法办用链表实现二分查找 需要额外的内存空间指向链接 链表通常用作构建其他数据结构的基本模块,比如栈,队列,树,图。 链表的细分类型 单链表 链表中每个元素都指向下一个元素,最后一个元素指向空 环形链表 链表中每个元素都指向下一个元素,最后一个元素指向第一个 双向链表 链表中每个元素都指向下一个元素,也指向上一个元素,首个元素的向上指向空,最后一个元素向下指向空 双向环形链表 跟双向链表类似,但是首个元素向上指向最后一个,最后一个向下指向第一个 Java实现的简单的双向链表 /** * java 实现双向链表demo */public class DoubleLinkedList {    class Node{        Node prev;        int data;        Node next;        public Node(int data) { … Read more

markdown 常用语法

一至六级标题分别对应一到六个#,然后加一个空格,举例 # 一级标题## 二级标题### 三级标题#### 四级标题##### 五级标题###### 六级标题 效果如下: 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题   文字加粗,要加粗的文字左右两边加两个*,不能带空改 : **加粗文字** 效果 加粗文字 文字斜体,文字左右两边加1个*,不能带空改: *斜体* 效果 斜体文字 文字加粗并斜体,文字左右两边加3个*,不能带空改: ***加粗斜体*** 效果 加粗斜体 文字加删除线,文字左右两边加2个~ ~~删除线~~ 效果 删除线 文字加粗删除线,套娃,两个~两个*中间加文字 ~~**加粗删除线**~~ 效果,加粗删除线 文字加粗斜体删除线,套娃,两个~三个*中间加文字 ~~***加粗斜体删除线***~~ 效果 加粗斜体删除线 斜体删除线,套娃,两个~1个*中间加文字 ~~*斜体删除线*~~ 效果 斜体删除线 引用,另起一行, 加>,后面加空改,跟文字 > 引用数据 效果   引用数据 分割线 ,三个以上-或* —***—-等 效果 图片 … Read more

终端和git设置代理解决gradle,pub,go,git等龟速问题

首先是终端设置代理: windows: 临时设置: set http_proxy=http://192.168.0.1:1024 set https_proxy=%http_proxy% 192.168.0.1:1024根据是要代理的ip和端口,根据自己的实际地址设置 以上是设置http代理,如果要设置socks5代理,比如ss,v2等把http:// 改成socks5://  ss设置: set http_proxy=socks5://127.0.0.1:1080 set https_proxy=%http_proxy% v2设置: set http_proxy=socks5://127.0.0.1:10808 set https_proxy=%http_proxy% 永久设置: 修改环境变量,新增系统变量: ss http_proxy socks5://127.0.0.1:1080 # 代理地址 https_proxy socks5://127.0.0.1:1080 v2 http_proxy socks5://127.0.0.1:10808 # 代理地址 https_proxy socks5://127.0.0.1:10808 http http_proxy http://192.168.0.1:1024 # 代理地址 https_proxy http://192.168.0.1:1024 Linux/MAC 首先bash编写脚本proxy.sh #!/bin/bash export http_proxy=socks5://127.0.0.1:1080 # ss代理地址,可以替换成v2或者http的 export https_proxy=$http_proxy export | grep http 设置权限:chmod+x proxy.sh source proxy.sh 取消: unset http_proxy 然后是git设置代理: 设置代理: 打开gitbash,输入下面指令 git config –global http.proxy socks5://127.0.0.1:1080    git config –global https.proxy socks5://127.0.0.1:1080 以上代理地址也可以设置成v2或者http地址 取消代理: git config –global –unset http.proxy  git config –global –unset https.proxy 查看代理: git config –get http.proxy git config –get https.proxy

懒人专用:git add ,commit,push合并同时调用

通常我们开发提交代码的时候要重复的使用下面git指令 git add -A  git commit -m "xxxx" git push 对于经常提交代码来说难免有些繁琐,下面提供两种简单的方式把三条指令合并提交 第一种:   打开gitbash,输入如下命令并回车 git config –global alias.acp '!f() { git add -A && git commit -m "$@" && git push; }; f'  以后提交代码就可以直接用一条指令: git acp "xxxx(提交message)" 第二种: 在.bash_profile输入如下: gitacp() {     git add .     git commit -m "$*"     git push } alias acp=gitacp source .bash_profile 以后提交代码就可以一条指令: acp "xxxx(提交message)"

CentOS8 安装Nginx,PHP8,Mysql8.0

CentOS8 安装nginx  dnf makecache  更新dnf 仓库缓存 dnf install nginx 安装nginx   (如果要安装最新版本的nginx可以到 Nginx RPMS 查看最新版,复制链接,然后输入命令 dnf install  http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.18.0-2.el8.ngx.x86_64.rpm) 3.systemctl start nginx 启动nginx 4.systemctl enable nginx 开机启动  5.防火墙开启80和443端口  firewall-cmd –add-service={http,https} –permanent  或者 firewall-cmd –permanent –zone=public –add-port=80/tcp  , firewall-cmd –permanent –zone=public –add-port=443/tcp,如果要查询某个端口是否开启,可以用firewall-cmd –query-port=80/tcp 命令 6.重启防火墙  firewall-cmd –reload CentOS8 安装PHP8  安装epel和remi   dnf install epel-release -y dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y 2.开启php8 module dnf module list php  dnf module enable php:8.0 3.安装php8 dnf install php php-cli php-common 4.验证 php -v CentOS8 安装mysql8  dnf install mysql-server 安装mysql8 … Read more