- 根据关键字搜索应用程序 | 92090为进程ID
ps aux | grep smart
- 查看进行资源占用情况
top -p 92090
1.添加远程版本库
在bec项目目录下执行一下命令:
git remote add baga https://gitlab.xxxx/project.git
2.在用一下命令查看是否添加成功:
git remote -v
3.推送代码到远程仓库:
git push baga
docker save -o 要打镜像包的名称 镜像
docker load -i 镜像包名
docker tag node:16.14.2 **/node:16.14.2
docker push **/node:16.14.2
netstat -aon|findstr "17181"
tasklist|findstr "16756"
task异步用法,它和thread有什么区别?
1.什么是thread
当我们提及多线程的时候会想到thread和threadpool,这都是异步操作,threadpool其实就是thread的集合,具有很多优势,不过在任务多的时候全局队列会存在竞争而消耗资源。thread默认为前台线程,主程序必须等线程跑完才会关闭,而threadpool相反。
总结:threadpool确实比thread性能优,但是两者都没有很好的api区控制,如果线程执行无响应就只能等待结束,从而诞生了task任务。
2.什么是task
task简单地看就是任务,那和thread有什么区别呢?Task的背后的实现也是使用了线程池线程,但它的性能优于ThreadPoll,因为它使用的不是线程池的全局队列,而是使用的本地队列,使线程之间的资源竞争减少。同时Task提供了丰富的API来管理线程、控制。但是相对前面的两种耗内存,Task依赖于CPU对于多核的CPU性能远超前两者,单核的CPU三者的性能没什么差别。
什么是装箱和拆箱?
装箱:从值类型接口转换到引用类型。
拆箱:从引用类型转换到值类型。
git 切换到一个分支的命令是什么?A分支代码合并待B分支的命令是什么?
如何使用缓存实现API调用次数限制,阐述实现思路。
怎么实现服务的依赖注入?服务的生存期有哪几种?
如何实现 Web API 的授权访问?说说它的优势。
1.IQueryable和IEnumerable都是延时执行(Deferred Execution)的,而IList是即时执行(Eager Execution)
2.IQueryable和IEnumerable在每次执行时都必须连接数据库读取,而IList读取一次后,以后各次都不需连接数据库。前两者很容易造成重复读取,性能低下,并且可能引发数据不一致性
3.IQueryable和IEnumerable的区别:IEnumberalb使用的是LINQ to Object方式,它会将AsEnumerable()时对应的所有记录都先加载到内存,然后在此基础上再执行后来的Query。所以上述TestIEnumerable例子中执行的SQL是"select top(5) ...",然后在内存中选择前两条记录返回。
4.IList(IList<T>)会立即在内存里创建持久数据,这就没有实现“延期执行(deferred execution)”,如果被加载的实体有关联实体(associations),此关联实体不会被加载(既不立即加载,也不延迟加载)。
5.IQeurable(IQuerable<T>)不会立即在内存里创建持久数据,只有遍历它(如通过foreach)、把它转换成List等情况下才会向内存加载数据,它可以实现“延期执行”,如果当前被加载的实体有关联实体(associations),此关联实体可被接下来的访问加载。
6.IQueryable实现了IEnumberable接口。但IEnumerable<T> 换成IQueryable<T>后速度提高很多。原因:IQueryable<T>不需要将所有数据都读取到内存
7.IQueryable接口与IEnumberable接口的区别: IEnumerable<T> 泛型类在调用自己的SKip 和 Take 等扩展方法之前数据就已经加载在本地内存了,而IQueryable<T> 是将Skip ,take 这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。
8.IEnumerable跑的是Linq to Object,强制从数据库中读取所有数据到内存先。
参考:
https://bbs.csdn.net/topics/392147930?page=1
https://blog.csdn.net/seal203/article/details/51986118
1.查看防火墙状态
查看防火墙状态 systemctl status firewalld
开启防火墙 systemctl start firewalld
关闭防火墙 systemctl stop firewalld
开启防火墙 service firewalld start
若遇到无法开启
先用:systemctl unmask firewalld.service
然后:systemctl start firewalld.service
2.查看对外开放的端口状态
查询已开放的端口(已开放的端口号集合):firewall-cmd --zone=public --list-ports
查询已开放的端口 netstat -ntulp | grep 端口号:可以具体查看某一个端口号
查询指定端口是否已开 firewall-cmd --query-port=666/tcp
提示 yes,表示开启;no表示未开启。
3.对外开发端口
查看想开的端口是否已开:firewall-cmd --query-port=6379/tcp
添加指定需要开放的端口:firewall-cmd --add-port=123/tcp --permanent
重载入添加的端口:firewall-cmd --reload
查询指定端口是否开启成功:firewall-cmd --query-port=123/tcp
移除指定端口:firewall-cmd --permanent --remove-port=123/tcp
master,trunk,不再额外命名,名称即为自己。
dev命名,dev+拉取日期+代表性的功能(可选):dev-20171024-user
feature命名,feature+拉取日期+功能名称,例如:feature-20171035-userlogin
release命名,release+拉取/发布日期+功能名称,与dev功能名称对应,例如:release-20171201-user
bugfix命名,bugfix+拉取日期+bug名字(issue id),例如:bugfix-20171223-loginerror
tag,里程碑性质,加版本号,例如:v1.0.0 ,在readme.md中写入版本声明,变动的内容
SOA模型中,服务使用者和服务提供商通过中间件消息传送组件进行协作,通常称为Enterprise 服务总线或 ESB 。
SOA体系结构入下图所示:
在 SOA模型中,已向 ESB 注册的集中式服务提供商。 将业务逻辑内置于 ESB 中以集成提供者和使用者。 然后,服务使用者可以使用 ESB 查找这些提供程序并与其通信。
尽管有 SOA 的承诺,但实现此方法通常会增加复杂性并引入瓶颈。 维护成本变得很高,ESB 中间件成本高昂。 服务倾向大。 它们通常是共享的依赖项和数据存储。 最终,Soa 通常会产生一个带有集中服务的 "分布式单一结构" 结构,这些服务可经受更改。
在分布式应用程序中跟踪状态存在一下问题:
Dapr 状态管理提供 密钥/值 API。 此功能不支持关系数据存储或图形数据> 存储。
jwt和token区别主要体现在接收的信息是否需要进入数据库查询信息。服务端验证客户端发来的token信息要进行数据的查询操作;而JWT验证客户端发来的token信息不需要, JWT使用密钥校验不用数据库的查询。
TOKEN是一个宽泛的概念,翻译为令牌, 是访问资源的凭证。
JWT是json web token缩写。用点号分为三段,分别表示头、信息和签名。可以使用在RESTFUL接口定义, 也可以使用在普通的web。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过密钥验证token的正确性,判断是否通过验证。
第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品),第三部分是签证(signature).
jwt的头部承载两部分信息:
完整的头部就像下面这样的JSON:
{
'typ': 'JWT',
'alg': 'HS256'
}
然后将头部进行base64加密(该加密是可以对称解密的),构成了第一部分.
载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分
标准中注册的声明 (建议但不强制使用) :
公共的声明 :
公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.但不建议添加敏感信息,因为该部分在客户端可解密.
私有的声明 :
私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着该部分信息可以归类为明文信息。
定义一个payload:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
然后将其进行base64加密,得到Jwt的第二部分。
jwt的第三部分是一个签证信息,这个签证信息由三部分组成:
这个部分需要base64加密后的header和base64加密后的payload使用.
连接组成的字符串,然后通过header中声明的加密方式进行加盐secret
组合加密,然后就构成了jwt的第三部分。
// javascript
var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload);
var signature = HMACSHA256(encodedString, 'secret'); // TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
将这三部分用.
连接成一个完整的字符串,构成了最终的jwt:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
注意:secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt的签发和jwt的验证,所以,它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。
df -k
将以字节为单位输出磁盘的使用量。df -h
选项可以以更符合阅读习惯的方式显示磁盘使用量。df -T
选项显示文件系统类型。tail filename.txt
。-n
选项指定要显示的行数:tail -n N filename.txt
。-f
选项进行实时查看,这个命令执行后会等待,如果有新行添加到文件尾部,它会继续输出新的行,在查看日志时这个选项会非常有用。你可以通过 CTRL-C
终止命令的执行:tail -f log-file
。这个命名可以在不加载整个文件的前提下显示文件内容,在查看大型日志文件的时候这个命令会非常有用:less huge-log-file.log
。
当你用 less 命令打开某个文件时,下面两个按键会给你带来很多帮助,他们用于向前和向后滚屏:
CTRL+F – forward one window
CTRL+B – backward one window
cat file1 file2
。-n
命令可以在每行的前面加上行号:cat -n /etc/logrotate.conf
。mv -i file1 file2
。-v
会输出重命名的过程,当文件名中包含通配符时,这个选项会非常方便:mv -v file1 file2
。rm -i filename.txt
。rm -i file*
。rm -r example
。查找指定文件名的文件(不区分大小写):find -iname "MyProgram.c"
。
搜索文件用什么命令? 格式是怎么样的?
答案:
find <指定目录> <指定条件> <指定动作>
whereis 加参数与文件名
locate 只加文件名
find 直接搜索磁盘,较慢。
find / -name "string*"
grep -i "the" demo_file
。grep -A 3 -i "example" demo_text
。grep -r "ramesh" *
。ifconfig -a
。ifconfig eth0 up
和 ifconfig eth0 down
。chmod ug+rwx file.txt
。chmod g-rwx file.txt
。chmod -R ug+rwx file.txt
。/etc/init.d
文件下,这个命令可以直接运行这个文件夹里面的脚本,而不用加上路径。service ssh status
。service --status-all
。service ssh restart
。索引(Index)是帮助MySQL高效获取数据的数据结构。
一个没有索引的数据库表就相当于一本没有索引的新华字典,当你想找出其中一个汉字的时候,无异于寻找MH370碎片啊。我们为指定的字段创建索引之后,当我们根据条件查找数据的时候,数据库引擎就可以利用查找算法(二分查找法)很高效的查出来。
索引也是要占用存储空间的,建立索引的时候也是有一定的规则可寻的。
1)选择一些经常要作为查询条件的字段。
2)选择区分度高的字段,count(distinct 字段)/count(*),当然最小就是1了,也就是唯一索引了。这个值越小,查询的效率越高。当这个值大到一定的程度的时候(具体还不是很清楚),数据库就会放弃索引进行全表扫描。你可以想象一下,如果一个表有一百万的数据,其中有一个性别的字段,这个字段只会出现两个值。然后你为该字段建了一个索引,自以为查询性能提升了N倍。其实,你就相当于把一百万条数据按照性别分别放到两个箱子里面,假设每个箱子里面有50万条性别为男的记录,因为这个箱子里面的性别都是一样的,索引也起不了任何作用了,什么二分查找也用不上了,只能用暴力算法解决咯,全表扫描咯。相反,你可以为一个人的身份证号码建立唯一索引,这样就可以从头到尾用二分查找法查找了,效率杠杠滴。
索引的出现就是为了提高查询效率,就像书的目录。其实说白了,索引要解决的就是查询问题。
查询,是数据库所提供的一个重要功能,我们都想尽可能快的获取到目标数据,因此就需要优化数据库的查询算法,选择合适的查询模型来实现索引。
另外,为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间,因为索引也要随之变动。
BTree索引、Hash索引、FullText索引
普通索引、唯一索引、复合索引
唯一索引:唯一索引要求字段中不会出现重复数据。
复合索引:将多个字段组合起来作为索引,必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用。
建立索引:
create index 索引名 on 表名(索引字段名)
建立唯一索引:
create unique index 索引名 on 表名(索引字段名)
建立复合索引:
create index 索引名 on 表名(索引字段名1,索引字段名2...)
查看表中索引:
show index from 表名
删除索引:
drop index 索引名 on 表名
查看索引是否命中:
Mysql:当结果的type为 index时索引命中
explain +sql语句