This commit is contained in:
RainSun 2020-04-02 17:29:57 +08:00
parent ab91634327
commit f2820294c6
9 changed files with 365 additions and 49 deletions

View File

@ -0,0 +1,37 @@
## 算法复杂性分析
* 最优性
* 最坏情况最优
* 平均情况最优
## 第二章
* 递归
* 递归算法:直接或者间接的调用自身
* 递归函数:用函数自身给出定以的函数
* 阶乘函数
* **边界条件**和**递归方程**是递归函数的两个要素
* Fibonacci 兔子繁殖问题
* 双递归函数:当一个函数以及他的一个变量是由函数自身定义时,无法找到非递归定义
* 避免使用嵌套函数
* 整数划分
* 分治法
* 将一个难以直接解决的大问题,分割成一些规模比较小的相同问题,以便各个击破分而治之
* 分解
* 将一个问题分解为k个子问题子问题独立且与原问题形式相同
* 求解
* 若子问题规模较小而且容易被解决就直接解,否则递归的解这些子问题
* 合并
* 将各个子问题的解合并得到原问题的解
* 适用条件
* 该问题规模能缩小到一定的程度就可容易的解决
* 可以分解为若干个规模较小的相同问题,该问题具有最优子结构性质
* 该问题分解出的子问题可以合并为该问题的解
* 子问题相互独立,子问题之间不包含相同的子问题
* 用分治法设计算法时最好使子问题的规模大致相同
* 二分法
* 大整数的乘法
* 加减法代替乘法
* 每个矩阵都分成相等4块
* strassen矩阵乘法
* 棋盘覆盖
* 分割成四四份然后没有特殊方块的三份交汇处放一个方框
*

View File

@ -75,4 +75,23 @@
* 模型
* 高性能的运算
* 客户的努力
#
# 特征选择
* 目的:降维
* 噪音?无关?重复?冗余?
* 属性分布
* 找出好的属性
* 如果一个属性可以把两个类别完美分开就是好的类别
* 熵
* 衡量不确定性
* 在概率为0或者1的时候为0 在0.5处为1拱形
# 高维数据可视化
* 线性方法
* 主成分分析 PCA
* 线性判别分析 LDA
* 多维尺度分析 MDS
* 星象图,雷达图
* 散点矩阵图
* 直观显示两个维度之间的相关性
* 不能显示多个维度上的协同关系
* 散点图数目与数据维度平方成正比
* 箱尾图

View File

@ -50,6 +50,7 @@
`export FLASK_APP=coc.py`
`export FLASK_APP=api.py`
`export FLASK_APP=ccb.py`
`export FLASK_APP=yg.py`
`export FLASK_ENV=development`
@ -88,6 +89,7 @@ autostart = True
`gunicorn coc:app -c gunicorn.conf.py`
`gunicorn api:app -c gunicorn.conf.py`
`gunicorn ccb:app -c gunicorn.conf.py`
`gunicorn yg:app -c gunicorn.conf.py`
查询gunicorn

View File

@ -113,4 +113,111 @@
* 就是用迭代器来控制生成器
* 可以用throw()配合try catch实现错误的双向或 内外双向传递
* 每次被调用的时候都会是一个新的生成器
* 加*
* 加*
* 模块
* `import``export` 必须在使用它们的最顶层作用域
* 命名导出
```
// 方式一
export var bar = [1,3,4]; export function foo() {}
// 方式二
var bar = []; function foo() {}; export {bar, foo}
```
* 导出的是在模块内的最后的值
```
var a = 1
export { a }
a = 2
-> 最后导出的是2而不是1
```
* 导出可以指定名称
```
var a = 1
export { a as b }
-> 只有b可以被导入a被隐藏
```
* 导入不是赋值操作,而是类似指针一样的绑定
* es6倾向于一个文件一个export可以使import变得简单
* 默认导出的两种形式
```
export default function foo() {} -> 导出的是表达式的绑定
function foo() {} export default foo -> 同上,即`export default`接受的是一个表达式
function foo() {} export { foo as default } -> 导出的是标识符的绑定也就是导出foo在文件中最后的值
```
* 一个模块只能有一个default
```
// 方式一
export default function foo() {}
export function bar() {}
// 方式二
function foo() {}
function bar() {}
export { foo as default, bar }
```
* 可以导出别的模块的导出 -> 感觉可以用来集成模块,,也没啥用
```
export { foo, bar } from 'baz'
export { foo as FOO, bar as BAR } from 'baz'
export * from 'baz'
```
* 导入模块如果有default`import foo from "baz"`引入那个default
* 对导入进行重命名`import { foo as Foo } from "baz" -> Foo()`
* 对复合导入`import FOOFN, { bar, baz } from "baz"`
* 命名空间导入`import * as foo from "foo" -> foo.bar()`当前只能全部导入
* 如果有默认导出,就是`foo.default()`
* 默认+命名空间`import foofn, * as hello from "world"` `foofn -> hello.default` 尽量不要用这种迷惑操作
* 所有导入的绑定都是只读的,所有的赋值操作都会报错
* 所有导入都会被提升,全局访问
* 类
* 使用`class`声明类,类名大写
```
class Foo {
constructor(a, b) {
this.x = a;
this.y = b;
}
gimmeXY() {
return this.x * this.y
}
}
```
* 不能使用call所以只能通过new实例化
* 类不能被提升,所以实例化之前必须声明
* 声明一个class并没有创建一个同名的全局对象属性
* class本身并不是一个实体而是一个包裹着其他像函数和属性这样的具体实体并把它们组合到一起的元概念
* class也可以是一个表达式
```
var x = class Y {} -> 对于把类定义(严格说是构造器本身)作为函数参数传递,或者把它赋值给一个对象属性的时候特别管用
```
* 把类理解为一个宏用于自动产生一个prototype对象
* 类对extends以及super提供语法糖
```
class Bar extends Foo {
constructor(a, b, c) {
super(a, b)
this.z = c
}
gimmeXYZ() {
return super.gimmeXY() * this.z
}
}
```
* 如果子类不定义构造函数就会
```
constructor(...args) {
super(...args)
}
```
* 子类不在构造器中使用`super`是无法使用`this`
* 可以拓展原生类
```
class MyCoolArray extends Array {
first() {return this[0]}
last() {return this[this.length -1 ]}
}
a = new MyCoolArray(1, 2, 3)
a.first()
```
* `new.target`在构造器中访问new直接调用的构造器
* Promise
*

24
Miscellaneous/lacus.conf Normal file
View File

@ -0,0 +1,24 @@
server {
listen 80;
server_name blog.powerrain.cn;
return 301 https://blog.powerrain.cn$request_uri;
}
server {
#SSL 访问端口号为 443
listen 443 ssl http2; #填写绑定证书的域名
server_name blog.powerrain.cn;
#证书文件名称
ssl_certificate 1_blog.powerrain.cn_bundle.crt;
#私钥文件名称
ssl_certificate_key 2_blog.powerrain.cn.key;
ssl_session_timeout 5m;
#请按照这个协议配置
ssl_protocols TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security "max-age=31536000";
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:8100;
}
}

File diff suppressed because one or more lines are too long

View File

@ -278,3 +278,93 @@ server {
}
access_log /home/pi/data/nginx/logs/portainer443.log;
}
server {
listen 80;
server_name yg.canary.moe;
return 301 https://yg.canary.moe$request_uri;
access_log /home/pi/data/nginx/logs/yg.log;
}
server {
#SSL 访问端口号为 443
listen 443 ssl http2; #填写绑定证书的域名
server_name yg.canary.moe;
#证书文件名称
ssl_certificate 1_yg.canary.moe_bundle.crt;
#私钥文件名称
ssl_certificate_key 2_yg.canary.moe.key;
ssl_session_timeout 5m;
#请按照这个协议配置
ssl_protocols TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security "max-age=31536000";
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /home/pi/data/yg/foreEnd;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /verify/ {
alias /home/pi/data/yg/adminForeEnd/;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /swagger/ {
alias /home/pi/data/yg/swagger/;
index index.html index.htm;
}
location /v1/ {
proxy_pass http://127.0.0.1:5007/;
}
location /photo/ {
alias /home/pi/data/yg/backEnd/upload/;
}
access_log /home/pi/data/nginx/logs/yg443.log;
}
server {
listen 80;
server_name aria.canary.moe;
return 301 https://aria.canary.moe$request_uri;
access_log /home/pi/data/nginx/logs/aria.log;
}
server {
#SSL 访问端口号为 443
listen 443 ssl http2; #填写绑定证书的域名
server_name aria.canary.moe;
#证书文件名称
ssl_certificate 1_aria.canary.moe_bundle.crt;
#私钥文件名称
ssl_certificate_key 2_aria.canary.moe.key;
ssl_session_timeout 5m;
#请按照这个协议配置
ssl_protocols TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security "max-age=31536000";
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /home/pi/data/aria/yaaw/;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /rpc/ {
proxy_pass http://127.0.0.1:6800/;
}
location /download {
alias /home/pi/data/aria/download;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
autoindex_format html;
charset utf-8,gbk;
}
access_log /home/pi/data/nginx/logs/aria443.log;
}
# ccb http://127.0.0.1:5005
# pi http://127.0.0.1:3000
# cloud http://0.0.0.0:5299
# coc http://127.0.0.1:5003
# portainter http://127.0.0.1:5006

View File

@ -1,48 +1,9 @@
function setNumIterator() {
if(!Number.prototype[Symbol.iterator]) {
Object.defineProperty(
Number.prototype,
Symbol.iterator,
{
writable: true,
configurable:true,
enumerable: false,
value: function iterator(){
var i, inc, done = false, top = +this;
// 正向迭代还是反向迭代?
inc = 1 * (top < 0 ? -1 : 1);
console.log(top)
return {
// 使迭代器本身成为iterable
[Symbol.iterator](){return this;},
next() {
if(!done) {
// 初始迭代总是0
if(i == null) {
i = 0
}
// 正向迭代
else if(top >= 0) {
i = Math.min(top, i + inc);
}
// 反向迭代
else {
i = Math.max(top, i + inc);
}
// 本次迭代后结束?
if (i == top) done = true;
return {value: i, done: false};
} else {
return {done: true};
}
}
}
}
}
)
}
class MyCoolArray extends Array {
first() { return this[0] }
last() { return this[this.length - 1] }
}
setNumIterator()
for (var i of 3) {
console.log(i)
}
b = [1, 2, 3]
a = new MyCoolArray(...b)
console.log(a.first())
console.log(a[2])
console.log(b[-1])

View File

@ -0,0 +1,32 @@
* 调度策略
* SCHED_NORMAL(SCHED_OTHER): 普通的分时进程
* SCHED_FIFO: 先进先出的实时进程
* SCHED_RR: 时间片轮转的实时进程
* SCHED_BATCH: 批处理进程
* SCHED_IDLE: 只在系统空闲时才能被调度执行的进程
* 调度时机
* 主动式
* 在内核中直接调用schedule() 当进程需要等待资源而暂时停止运行,主动请求调度把自己挂起
* current -> state = TASK_INTERRUPTIBLE(可唤醒的阻塞态)
* schedule()
* 被动式
* 又名抢占式调度用户态抢占2.4+2.6内核态抢占2.6
* 用户抢占 -> 用户态(时间) / 抢占
* 从**系统调用**返回用户空间
* 从**中断处理程序**返回用户空间
* 内核态抢占
* 进程/线程一旦运行到**内核态**,就可以一直执行,直到它**主动放弃**或者**时间片耗尽**为止,会降低整个系统的实时性 2.4
* 中断处理程序完成,返回**内核空间**之前
* 当内核代码再一次具有可抢占性的时候,如**解锁**以及**使能软中断**
* 不允许抢占
* 内核正在运行中断处理
* 正在执行调度
* 持有锁的时候
* 抢占计数
* 抢占式内核有一个内核抢占计数preement_count
* 调度步骤
* schedule函数工作流程
* 清理当前运行中的进程
* 选择下一个要运行的进程
* 设置新进程的运行环境
* 进程上下文切换