git
参考资料Git - Book (git-scm.com)
简介概念
仓库:用来保存项目元数据和对象数据库的地方
工作区:对应某个版本,当前的文件状态
暂存区:如果要commit,提交的是这里的内容
分支:把某些工作从开发主线上分离出来,对于协同开发起到重要作用
提交:每次需要修改的内容完成以后,保存一个快照
远程仓库:用来协同的远程仓库,作用为同步本地修改,完成写作需求
版本控制
什么是版本控制
版本控制是一种记录文件内容变化,以便于将来查阅特定版本修订情况的系统.
版本控制其实最重要的是可以记录文件的修改历史, 从而让用户能够查看历史版本, 方便版本切换
git和代码托管中心代码托管中心是基于网络服务器的远程代码仓库,一般我们简单的成为远程库
局域网
GitLab
互联网
GitHub
GItee
分支在版本控制过程中,同时推进多个任务,我们可以为每个任务创建单独的分支,使用分支意味着从主线上离开了,开发分支不会影响主分支的运行
git切换分支本质上是移动Head指针
原理
区域工作区:除去.git文件夹的部分
暂存区:累积修改
本地库:以diff的形式存放历史代 ...
oauth2
基本概念Oauth是一种授权机制,由资源的所有者告诉系统,同意第三方进入系统获取资源,系统会产生一个短期的进入令牌(token)供第三方应用使用
交互角色
资源所有者:即用户,用户在某些情况下会需要访问自己的资源
客户应用:通常是一个web或者无线应用,他需要访问用户的受保护资源
资源服务器:存储受保护的资源,定义了可访问资源的api,接收并验证客户端的访问令牌以决定是否授权访问资源
授权服务器:负责验证资源所有者的身份并向客户端办法访问令牌
使用场景开放系统间的授权社交登录如使用github账号登录gitee
开放api令牌与密码令牌与密码都可以用来进入系统,但有差异
令牌是短期的,到期会自动失效, 用户自己无法修改,密码一般长期有效,用户不修改不会发生变化
令牌可以被资源拥有者撤销,会立即失效
令牌范围有限
授权方式不管哪一种授权方式,第三方应用申请令牌之前,都必须到系统备案。说明自己的身份,然后会拿到两个身份识别码,客户端ID(client ID)和客户端密钥(client secret)。这是为了防止令牌被滥用,没有备案过的第三方应用,是拿不到令牌的。
授权码 autho ...
algorithm
动态规划
什么是动态规划(Dynamic Programming)?动态规划的意义是什么? - 知乎 (zhihu.com)
最少钞票数量问题引入
假设您是个土豪,身上带了足够的1、5、10、20、50、100元面值的钞票。现在您的目标是凑出某个金额w,需要用到尽量少的钞票。
这里使用贪心算法:首先使用最大面值,直到剩余的金额不满最大面值则依次向下,直到满足w。
但如果面额为1, 5, 11的面额纸币凑15时,贪心算法会得到错误的结果:
11+1+1+1+1 5张
但完全可以 5+5+5 3张
而贪心算法只能考虑眼前利益
那考虑其他办法,比如使用暴力算法,但这样的情况过多,时间无法承受。
重新分析:当我们第一步选用11元面值时,会面对w=4的情况:从上图= f(4)+1.同理,当我们第一步选用1,w=14:cost=f(14)+1,第一步选用5,w=10:cost = f(10)+1.
其中,cost为钞票数量,f为最少钞票数,那此时f(15) = min(以上三种cost情况)
这就是动态规划
动态规 ...
nginx
基本概念反向代理对客户端隐藏服务器的真实位置,与正向代理(vpn)相反
负载均衡轮询,加权轮询,iphash
动静分离动态页面与静态页面交给不同的服务器解析
默认的配置文件123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events { w ...
aidlux 配合 nginx 搞一个小服务器用
内网渗透工具选择一款的内网渗透工具,such as 飞鸽,点击注册,注意客户端要下载arm64的免费的基本能用,不过速度比较慢,对速度有要求比如想要远程控制aidlux的建议付费上高速通道。
nginx反向代理aidlux 已经安装了nginx,其配置文件在:/etc/nginx/下我们可以在这个文件夹下创建一个conf结尾的文件:其中末尾斜杠可参考nginx如何配置代理转发
服务自启在/root/下找到 .rc.local文件编辑后台启动部分可以参考Linux nohup 命令
React
虚拟DOM
本质是object类型的一般对象
虚拟DOM属性较少(相对于真实DOM),因为虚拟DOM是React的内部使用,无需真实DOM的那么多属性
虚拟DOM最终会被React转换为真实DOM呈现在页面上
1234567891011121314151617181920<!DOCTYPE html><html> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react-dom.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalo ...
office
excelexcel中取消合并单元格并填充
选中区域,点击取消合并单元格
键盘“f5”,定位条件选择空值
此时所选区域为刚才所选区域中的空值区域,也就是取消合并单元格之后空出来的地方
键盘输入“=”,键入公式,点击空值上方单元格(合并单元格中的值)
“ctrl”+“enter”批量赋值
定位快捷键ctrl+G,方便在选中数据集中选出符合条件的单元格
MATCHmatch函数可以比较某个值在某个数据集中是否存在,如果存在返回其行,不存在则显示“#N/A”,藉由此可以筛选出某个数据集中在指定数据集中不存在的值,配合excel的定位功能中的公式部分(错误),可以删除不存在的整行数据。
12=MATCH(A1,J:J,0)=MATCH(要查找的值,数据集:J,J表示整个J列,0表示完全匹配)
excel中生成SQL语句12345678910=CONCAT("UPDATE amer_model SET description='",C6,"',sender='",D6,"',rec ...
aidlux上部署mirai
aidlux上部署miraijdk11安装
注:如果遇到失败的情况可以尝试换源,我没有换源安装成功了
apt-get update
apt install openjdk-11-jdk
安装mirai
(感谢AidLux开发者技术1群的网友 “受、死 ” 提供的思路)
先下载windows版本的iTXTech MCL Installer
运行后会生成这些文件
将这些文件(安装器,文档,cmd文件可以除外)通过aidlux网页端的文件管理器上传到aidlux中
如存入/home/mirai/目录下
前往/home/mirai/目录,运行./mcl执行安装(或者java -jar mcl.jar执行安装)
安装完成(直接启动)
./mcl 启动
自动登录设置
vim打开/home/mirai/config/Console/AutoLogin.yml文件
编辑账号密码,:wq保存退出
滑动验证码问题
参考mirai (mamoe.net ...
Spring
一些经验构造方法注入Spring 团队提倡使用基于构造方法的注入,因为这样一方面可以将依赖注入到一个不可变的变量中 (注: final 修饰的变量),另一方面也可以保证这些变量的值不会是 null。
ApplicationContextAware接口一个bean实现该接口,spring会自动调用该类中实现的setApplicationContext接口。
参考案例:quartz中的AutowiringSpringBeanJobFactory
123456789101112131415161718/** * 负责生成job实例 */public class AutoWiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware { private AutowireCapableBeanFactory beanFactory; @Override public void setApplicationContext(final Applicatio ...
响应式架构
问题传统架构
线程池预先创建大量线程,一个请求绑定一个线程
一般一个线程需要1M左右的内存
且线程切换需要耗时
所以,内存开销与时间开销会随着线程量而增大
大量资源开销在线程的管理上
异步调用
发生阻塞后告诉系统,让当前线程先做别的事情,阻塞结束再提醒系统
Callback
回调地狱
响应式编程
发布和订阅
backpressure 背压
控制流速,避免大量数据的接受
协商
订阅者通过自己的能力来通知发布方的通知数量
一些知识函数式接口可有多个重载
使用lambda表达式时可指定参数类型来判断使用哪个方法
常用函数式接口
supplier 0输入,1输出
consumer 1输入, 0输出
function 1输入,1输出
unaryOperator 同类型的1输入1输出
BiFunction 2输入,1输出
流编程注意中间操作是不会执行的, 只是一个声明, 一个流编程必须有一个终止操作才会执行
且在流编程中,终止操作只能有一个, 中间操作0-n个
Project Reactorpublisherflux发布0-n个对象
创建方式
1234567Flux.just(1,2,3,4, ...