2018年9月12日(周三)

TS

变量声明

var
let
const 
解构复制

对象解构

const {a, b} = {a: 'name', b: 'age'};//普通解构赋值
const {a: age, b} = {a: 'name', b: 'age'};// 解构赋值 属性重命名
let {a, b}:{ a: string, b: string } = {a: 'name', b: 'age'};//解构赋值,且声明类型
类型推断

ts根据右边的数据会推断类型

接口

interface 关键字
interface Person {
    name: string;
}
可选属性
interface Person {
   name: string;
    age?: string; 
}

只读属性

interface Person {
   readonly  name: string;
}
readonly vs const

最简单判断该用readonly还是const的方法是看要把它做为变量使用还是做为一个属性。 做为变量使用的话用const,若做为属性则使用readonly。

任意属性
interface Person {
   [name:string]: string;
}
// 这里有个特殊情况 
interface Person {
    name: string;
    [propName: string]: number;
}// 这样声明会报错 即 [propName: string]是匹配name的,但是name的值为string,而[propName: string]是number,所以会报错
函数类型
interface Person {
    (x: number, y: number): number;
}
const tom: Person = function (a,b): number {
    return 2;
};
// 这里的参数可以不和x,y相同,也可不指定类型,因为ts会自动推断,但是传值的类型必须和x,y的类型一致
可索引类型
interface Perosn {
    [index: number]: any; 理解为数组
    或
    [index: string]: any;理解为对象
}

index共支持两种类型 index number,可以同时使用两种类型的索引,但是数字索引的返回值必须是字符串索引返回值类型的子类型。 这是因为当使用 number来索引时,JavaScript会将它转换成string然后再去索引对象。 也就是说用 100(一个number)去索引等同于使用”100”(一个string)去索引,因此两者需要保持一致
例如:

interface Person {
    name: string;
}

interface Tom extends Person {
    age: number;
}

interface PeopleList {
    [indexe: string]: Person;

    [index: number]: Tom;
}

const p: Person = {
    name: 'tom',
};
const t: Tom = {
    name: 'tom',
    age: 23,
};
const pl: PeopleList = {
    h: p,
    2: t,
};
类JAVA接口,用于类实现
interface Person {
    name: string;

    say(name: string, age: number): any;
}

class Tom implements Person {
    name = 'tom';
    age = 26;

constructor(){

}
    say(name: string, age: number) {
        return name + age.toString();
    }
}

当使用class实现interface的时候,在constructor内部实现该接口时,会报错,这是因为类分为静态部分和实例部分而constructor属于静态部分,实现时并不会检查静态部分
操作静态部分

继承

可以继承接口

接口继承类

接口继承类,但不会去实现类

class Do {
    public name: string = 'yzm';

    private action(): string {
        return this.name;
    }
}
interface Person extends Do {}
// 当类实现的接口是集成其他的类,且其他的类含有private protected方法或属性,则此时子类继承父类才能实现该接口,否则会报错
如下,会报错 应为 class DD extends Do implements Person{}
class DD implements Person {
    public name = 'hello word';

    public action(): string {
        return 'hello word';
    }
}

Linux 命令

ps

进程查看器

linux上进程有5种状态:
运行(正在运行或在运行队列中等待)
中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
停止(进程收到SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU信号后停止运行运行)

ps工具标识进程的5种状态码:

D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process

常用参数

a   显示所有进程
-a  显示同一终端下的所有程序
aux 显示所有包含其他使用者的进程
u   指定用户的所有进程

组合使用

ps aux | grep node #查看所有含有node的进程

ps命令文档

free

free # 查看内存使用情况

crontab

固定时间间隔执行命令或脚本

crontab [-u user] file [ -e | -l | -r ]
-u user:用来设定某个用户的crontab服务;
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示

谷歌浏览器

内存查看

谷歌任务管理器查看

Shift + ESC

这里写图片描述

Profiles查看

F12打开开发者工具
打开Memory选项卡

这里写图片描述

通过该工具可以详细查看内存和对比内存使用情况 用 Chrome 开发者工具分析 javascript 的内存回收

要用C语言输出2025历,并从11周三开始,你需要编写一个程序来计算每个的天数,同时考虑到闰的情况。下面是一个简单的C语言程序示例,用于生成和打印2025历。 ```c #include <stdio.h> // 函数用于判断是否为闰 int isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } // 函数用于计算某的天数 int getDaysOfMonth(int year, int month) { int daysOfMonth[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (month == 2 && isLeapYear(year)) { return 29; } return daysOfMonth[month - 1]; } // 函数用于计算从初到指定的总天数 int totalDaysUntilMonth(int year, int month) { int days = 0; for (int i = 1; i < month; ++i) { days += getDaysOfMonth(year, i); } return days; } // 函数用于打印每个历 void printMonth(int year, int month, int startDay) { printf(" %d %d\n", year, month); printf(" 一 二 三 四 五 六\n"); int days = getDaysOfMonth(year, month); for (int i = 0; i < startDay; ++i) { printf(" "); } for (int day = 1; day <= days; ++day) { printf("%2d ", day); if ((day + startDay) % 7 == 0) { printf("\n"); } } printf("\n\n"); } int main() { int year = 2025; int startDay = 3; // 11星期三,用数字3表示(星期天为0,星期一为1,依此类推) for (int month = 1; month <= 12; ++month) { printMonth(year, month, startDay); startDay = (startDay + getDaysOfMonth(year, month)) % 7; } return 0; } ``` 这个程序首先定义了几个函数来判断闰、获取某个的天数以及计算初到某的总天数。`printMonth`函数用于打印每个历,而`main`函数则循环遍历2025的每个,计算起始星期并打印每个历。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值