Android入门(2)
Android四大组件分别是Activity,Service,BroadcastRecerver和ContentProvider。
其中Activity是所有Android应用程序的门面,你再前端看得到的都在这其中。
而Service就是在后台默默运行,即便用户退出了应用,Service也会在后台运行。
BroadcastReceiver允许你的应用接受来自各处的广播消息,比如电话,短信等,当然,你的应用也可以向外发出广播信息。
ContentProvider则为应用程序之间共享数据提供了可能,比如你想读取系统通讯录中的联系人,即想要通过ContentProvider来实现。
Android入门(1)
目录结构Project项目默认你已经通过idea或者android studio生成了一个android程序了。那么你将会看到如下的目录结构
.gradle和.idea这两个目录下放置到都是Android Studio自动生成的文件,我们无需关心。
app项目中的代码,资源等内容都是放在这个目录下的,我们后面的开发也基本在这个目录下进行
build这个目录主要包括一些在编译时自动生成的文件,我们无需关心。
gradle如果你使用了gradle的wrapper的话,他就会有这个文件,这个文件下主要是gradle的包。
.gitgnore这个文件是用来将来的目录或文件排除在版本控制之外的。
build.gradle这个是项目全局的gradle构建脚本,通常这个文件的内容不需要修改。
gradle.properties这个文件是全局的gradle配置文件,在这里配置到属性将会影响到项目中所有的gradle编译脚本。
gradlew和gradlew.bat这两个文件是用来在命令行界面执行gradle命令的,其汇总gradlew实在Linux或者Mac系统中使用的,gradlew.bat是在W ...
kotlin空指针
在kotlin中,最为核心的一个内容就是kotlin的空安全判断。他可以通过?来简单的确定是否为空类型而接下来要说明的是let函数,对于任何一个类都继承了该方法。例如
123obj.let{obj2? ->//编写具体的业务逻辑}
可以看到,obj对象调用的let函数,后面是lambda表达式,他会直接obj对象本身传递到函数中,就是obj2,如果只有一个参数,也可以直接省略,用it代替。而let的特性让他特别适合处理空指针检查下面示例一个普通的空指针检查
123456fun doStudy(study: Study?){ if(study != null){ study.readBooks() study.doHomework() }}
在kotlin中,你用if判断完后,他会自动检测,然后转化为非空的study类,然后就可以正常的调用。而如果使用let的话,就会是下面这种情况
123456fun doStudy(study: Study?){ study?.let& ...
kotlin(Java函数式API的使用)
Java函数式API的使用123public interface OnClickListener{ void onClick(View v);}
这种接口被称为函数式接口,或者 SAM 接口, SAM 代表单抽象方法。
使用函数式接口的前体这里的前提是,使用kotlin去调用java方法,而且java方法是个单抽象接口方法,就可以直接使用函数式API。已知在kotlin中,有很多简单快捷的函数式API操作。例如:
123val list = listOf("Apple","Banana","Orange","Grape","Watermelon")val maxLengthFruit = list.maxBy{it.length}println(maxLengthFruit)
而这个的前提就是kotlin中可以将函数作为一个参数传递出去。同样也可以使用lambda来简写函数式。我们在这里说的是,如果JAVA是一个单抽象接口方法,我们在kotlin中 ...
kali中使用clash作为代理
一般的桌面级OS,如ubuntu,centos。他们都会有图形化的代理配置如下图所示。但是,在kali中他并没有这个配置。因此你需要通过命令行界面去配置代理。这里以clash为例clashclash是一个广泛使用的代理工具,可以跨平台使用,兼容windows,linux,mac。
clash的安装你可以在这个链接中获得clash的最新版本这里是dashboard的发行版本
这里演示在linux下安装clash的过程
Linux这次演示使用clash+dashboard作为代理服务并配合机场使用
dashboarddashboard是一个ui界面,用来管理clash,他更多用于云服务器,一般默认为9090端口,可以从外界访问,从而控制代理服务。 先在用户目录下安装一个clash文件夹,并进入到其中
1mkdir clash && cd clash
然后再目录下,把机场给的config.yaml下载下来,可以使用wget
1wget "机场给你的订阅链接" -O config.yaml
然后从github上获取clash和dashboard的二进 ...
clash快速开启和关闭代理模式
如何快速开启和关闭代理模式这一步的前提是你已经完成了clash的部署内容上一篇文章当完成了clash的部署后,自然是需要打开代理的简单的方法就是
123export https_proxy=http://127.0.0.1:7890 export http_proxy=http://127.0.0.1:7890 export all_proxy=socks5://127.0.0.1:7891
但是这只是临时使用。如果每次开关代理都这般麻烦,倒不如不用也可以直接将这个部署到/etc/profile或者/root/.bashrc中。但他是永久性的改变。于是有些情况,他并不适用。国内的网站访问时,如果打开代理会使访问速度大大降低。得不偿失。
所以要设计一个便捷的开关方式,用来便捷的打开或者关闭代理。
第一种简洁方式(但是并不太符合所期望的简洁模式) 设计两个sh脚本分别为open.sh和close.sh 先在目录下建一个目录switch1mkdir switch && cd switch
然后编写两个文件,并把以下内容填入open.sh12345#! ...
快速便捷开关代理模式
如何快速开启和关闭代理模式这一步的前提是你已经完成了clash的部署内容上一篇文章当完成了clash的部署后,自然是需要打开代理的简单的方法就是
123export https_proxy=http://127.0.0.1:7890 export http_proxy=http://127.0.0.1:7890 export all_proxy=socks5://127.0.0.1:7891
但是这只是临时使用。如果每次开关代理都这般麻烦,倒不如不用也可以直接将这个部署到/etc/profile或者/root/.bashrc中。但他是永久性的改变。于是有些情况,他并不适用。国内的网站访问时,如果打开代理会使访问速度大大降低。得不偿失。
所以要设计一个便捷的开关方式,用来便捷的打开或者关闭代理。
第一种简洁方式(但是并不太符合所期望的简洁模式) 设计两个sh脚本分别为open.sh和close.sh 先在目录下建一个目录switch1mkdir switch && cd switch
然后编写两个文件,并把以下内容填入open.sh12345#!/ ...
Linux 四个目录命令用途和区别
Linux下 /bin、/sbin、/usr/sbin、/usr/bin 目录的作用和区别首先区别/sbin,/bin/sbin 下的命令属于基本的系统命令,如shutdown,reboot,用于启动系统,修复系统
/bin下存放一些普通的基本命令,如ls,chmod等,这些命令在Linux系统里的配置文件脚本里经常用到
无论是/bin、/sbin、/usr/sbin、/usr/bin他们都是全局可以执行的命令
Node.js 工具集:npm、npx、nrm、nvm
node:是一个基于 Chrome V8 引擎的 JS 运行环境。
npm:是 node.js 默认的包管理系统(用 JavaScript 编写的),在安装的 node 的时候,npm 也会跟着一起安装,管理 node 中的第三方插件。
npx:npm 从 v5.2.0 开始新增了 npx 命令,>= 该版本会自动安装 npx,附带:npx 有什么作用跟意义?为什么要有 npx?什么场景使用?。
nrm:是一个 npm 源管理工具,使用它可以快速切换 npm 源,默认是官方源,当 npm 下载包过慢时,可能需要切换到第三方源(例如:淘宝、科大…),还有公司私有源地址等等。
nvm:node 版本管理器,也就是说:一个 nvm 可以管理多个 node 版本(包含 npm 与 npx),可以方便快捷的 安装、切换 不同版本的 node。
安装nvm的安装只需要执行以下一条命令linux下
1curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
window ...
Nginx URI 匹配和位置配置
location配置
匹配 URI 类型,有四种参数可选,当然也可以不带参数。
命名location,用@来标识,类似于定义goto语句块。1234561. location = # 精准匹配2. location ^~ # 带参前缀匹配3. location ~ # 正则匹配(区分大小写)4. location ~* # 正则匹配(不区分大小写)5. location /a # 普通前缀匹配,优先级低于带参数前缀匹配。6. location / # 任何没有匹配成功的,都会匹配这里处理