学习python,从入门到放弃(52) 虚拟环境 诸多项目在你的机器上如何无障碍的打开并运行
1.把所有需要用到的模块全部下载下来,如果有相同模块不同版本每次都重新下载替换
2.提前准备好多个解释器环境,针对不同的项目切换即可
django版本区别 路由匹配的方法不一样
url() 支持正则 path() 第一个参数不支持正则
如果想使用正则 也提供了方法
from django.urls import path,re_path path方法提供了转换器功能
path('index/<int:id>/', index) 匹配对应位置的数据并且自动转换类型 有五种转换器可供选择
视图函数返回值 视图函数必须返回一个HttpResonse对象
HttpResponse class HttpResponse(...): pass render def render(...): return HttpResponse(...) redirect def redirect(...): JsonResponse对象 user_dict = {'name': 'jason', 'pwd': 123, 'hobby': '好好学习'} return JsonResponse(user_dict,json_dumps_params={'ensure_ascii':False}) class JsonResponse(HttpResponse): def __init__(self, data,json_dumps_params=None, **kwargs): data = json.dumps(data, **json_dumps_params) 使用JsonResponse不是原始的json模块,django对json序列化的数据类型的范围做了扩充
一、概览 1、redis集群最少需要6个节点,且redis集群下只有db0,不支持多db。
2、服务器
服务器一:192.168.3.13:6391、192.168.3.13:6392、192.168.3.13:6393 服务器二:192.168.3.14:6391、192.168.3.14:6392、192.168.3.14:6393 3、开放端口
节点访问:6391-6393 集群连接:16391-16393 # 添加6391端口 firewall-cmd --zone=public --add-port=6391/tcp --permanent # 刷新防火墙 firewall-cmd --reload
二、创建容器 分别在二台服务器上执行以下操作 1、开放以上端口
2、安装镜像
docker pull redis:6.2.5 3、新建目录和配置文件
for port in $(seq 6391 6393); \ do \ mkdir -p /home/apps/redis-node-${port}/{conf,data} touch /home/apps/redis-node-${port}/conf/redis.conf cat << EOF >/home/apps/redis-node-${port}/conf/redis.conf #端口 port ${port} bind 0.0.0.0 #启用集群模式 cluster-enabled yes cluster-config-file nodes.conf #超时时间 cluster-node-timeout 5000 # 集群连接地址及端口 cluster-announce-ip 192.168.3.13 cluster-announce-port ${port} cluster-announce-bus-port 1${port} appendonly yes #集群加密 masterauth 123456 requirepass 123456 EOF done 4、创建容器并启动
[u@VM-12-11-centos asm-generic]$ cat /proc/version Linux version 4.18.0-305.10.2.el8_4.x86_64 (
[email protected]) (gcc version 8.4.1 20200928 (Red Hat 8.4.1-1) (GCC)) #1 SMP Tue Jul 20 17:25:16 UTC 2021 [u@VM-12-11-centos asm-generic]$ nl errno-base.h 1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 #ifndef _ASM_GENERIC_ERRNO_BASE_H 3 #define _ASM_GENERIC_ERRNO_BASE_H 4 #define EPERM 1 /* Operation not permitted */ 5 #define ENOENT 2 /* No such file or directory */ 6 #define ESRCH 3 /* No such process */ 7 #define EINTR 4 /* Interrupted system call */ 8 #define EIO 5 /* I/O error */ 9 #define ENXIO 6 /* No such device or address */ 10 #define E2BIG 7 /* Argument list too long */ 11 #define ENOEXEC 8 /* Exec format error */ 12 #define EBADF 9 /* Bad file number */ 13 #define ECHILD 10 /* No child processes */ 14 #define EAGAIN 11 /* Try again */ 15 #define ENOMEM 12 /* Out of memory */ 16 #define EACCES 13 /* Permission denied */ 17 #define EFAULT 14 /* Bad address */ 18 #define ENOTBLK 15 /* Block device required */ 19 #define EBUSY 16 /* Device or resource busy */ 20 #define EEXIST 17 /* File exists */ 21 #define EXDEV 18 /* Cross-device link */ 22 #define ENODEV 19 /* No such device */ 23 #define ENOTDIR 20 /* Not a directory */ 24 #define EISDIR 21 /* Is a directory */ 25 #define EINVAL 22 /* Invalid argument */ 26 #define ENFILE 23 /* File table overflow */ 27 #define EMFILE 24 /* Too many open files */ 28 #define ENOTTY 25 /* Not a typewriter */ 29 #define ETXTBSY 26 /* Text file busy */ 30 #define EFBIG 27 /* File too large */ 31 #define ENOSPC 28 /* No space left on device */ 32 #define ESPIPE 29 /* Illegal seek */ 33 #define EROFS 30 /* Read-only file system */ 34 #define EMLINK 31 /* Too many links */ 35 #define EPIPE 32 /* Broken pipe */ 36 #define EDOM 33 /* Math argument out of domain of func */ 37 #define ERANGE 34 /* Math result not representable */ 38 #endif [u@VM-12-11-centos asm-generic]$ nl errno.
一、添加用户
useradd UserName useradd -g GroupName UserName //创建并添加至组 示例
useradd tom
说明:
1.当创建用户成功后,会自动的创建和用户名相同的home目录 2.也可以通过 useradd -d 目录名指定目录 二、指定/修改密码 passwd 用户名
三、删除用户
userdel UserName
删除用户 userdel UserName 删除用户以及home目录 userdel -r UserName 四、查找用户 id userName 显示: uid=0(root) gid=0(root) groups=0(root)
五、切换用户 su - 用户名
注意:
从权限高的用户切换至权限低的用户,不需要输入密码,反之需要 当需要返回到原来的用户时,使用``exit/logout指令 六、查看当前用户/登录用户 whoami
[用户组]
创建组 groupadd GroupName 删除组 groupdel GroupName 添加用户并添加至组 useradd -g GroupName UserName 修改用户组 usermod -g GroupName UserName 用户/组相关文件
本文借鉴自鲁迅杂文《聪明人和傻子和奴才》,如有雷同,纯属巧合。
有个程序员特别喜欢寻人诉苦,只要一点事,就喜欢诉苦。
有一日,他遇到一个聪明人。
“大佬。”他悲哀的说,“我们公司待遇越来越差了,中午吃不饱,加班没加班费,老板还各种克扣,生产环境出个事故,要罚款,问题解决不及时,要罚款,缺陷太多,要罚款,迟到要扣钱,有时候没有在群里及时回复收到,也要被扣钱,简直太没人性了。”
“这实在是令人同情啊!”,聪明人说。
“哎哎哎!”聪明人一边叹息着,一边拍了拍他的肩膀。
“这日子太难熬了,我是敷衍不下去了,我一定要跑路!”他目光坚定,看向远方。
“可是你有什么法子呢,倒不如就这么干着吧。来都来了,都干了好几年了,还有啥是你应付不了的呢。坚持一下,说不定云开雾散,会有好事发生呢!”聪明人问。
“我现在还没什么法子,不过我跟你吐槽,大概也有了主意,又得了你的同情,已经舒坦很多了,可见天理没有灭绝。”
但是,过几日,他又开始寻人诉苦。
“大佬。”他垂着泪说,“我们公司真的太保守了,技术守旧,公司效益一般,还讲究各种规矩和流程,各个部门间各种内斗撕逼,三天两天各种评审会总结会,我怕我是干不下去了!”
“混账东西。”这次他遇到了一个傻子。
“是啊,我都看不下去了。人家都是微服务啊,云原生啊,restapi啊,我们公司还抱残守缺,总是守着那几行破代码,没有一点革新意识。而且代码质量也越来越差了,简直就是一个巨型焦油坑。最近我们公司又跑了好几个人,听说都是嫌代码太差跑路的。”
“你不会要求老板要重构代码么?”
“这怎么行?“
“那么,你带我过去,我帮你看看。”
这个人领着傻子来到他们公司,来到他的工位前,打开他的电脑上的代码。
傻子啥也不说,准备开始改代码。
”你干啥!!“这个人惊恐的说。
”我帮你把代码重构一下。“
”这不行,公司要骂人的,说不定会把我开掉。“
”管他呢。“傻子已经开始准备写单元测试了。
”来人啊,来人啊,有个强盗要改我们代码啦,快来人啊!!“他哭嚷着,在地上围地打滚,声嘶力竭。
一群程序员凑了过来,把傻子赶跑了。
随后,公司老板也来了。
”刚刚有个强盗要强行改我们代码,我首先叫喊起来,大家一起把他赶跑了。“他恭敬而得胜的说。
”你做得很不错!“老板竖起来大拇指,夸奖起来。
这一天来了许多慰问的人,聪明人也在内。
”大佬,这一次我保护了公司代码,受到了老板表扬,各项事情感觉都向好的方面发展了。你说过终会云开雾散,实在是有先见之明!“他高兴的说。
”可不是么。。。“聪明人也代为高兴似的回答他。
/** * 1、基本数据类型的变量: * * 1)、整数类型:byte(1字节=8bit),short(2字节),int(4字节),long(8字节) * * 2)、浮点数类型:float(4字节),double(8字节) * * 3)、字符类型:char(2字节)----Unicode码 * * 4)、布尔类型:boolean(未指定字节数)----true和false * * 2、引用数据类型的变量: * * 除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型,比如String。 * */ /** * 包装类: * 1、基本包装类 * Boolean * Byte * Short * Character * Long * Integer * Float * Double * * 2、高精度数字 * BigDecimal * BigInteger * */ /** * 1、自动类型转换 * byte 、char 、short --> int --> long --> float --> double * * 2、强制类型转换 * 使用强转符:(),可能导致精度损失 * */ 1、MAIN方法 import com.
安装插件remote development:
如果远程服务器位配置ssh登录服务要先配置远程服务器,在本地(Windows)也要安装ssh客户端,在Windows上可以这样检查在powershell里输入ssh命令查看,另外,如果要对ssh作配置,再配置
或者调出命令面板:Ctrl+shift+p 输入 remote-ssh,选择remote-ssh:connect to host
选择configure ssh host
如果默认的配置文件在c盘,选择settings specify a custom configuration file把默认的配置文件更改,因为因为默认使用的为:c盘.ssh下的config文件,会和Powershell的冲突,当然有解决办法,但是很麻烦。所以采用这个方法
设置默认配置文件:
然后是直接配置ssh configuration 文件了:
调出命令面板(Ctrl+shift+P)>输入:remote ssh>选择remote ssh:connect host>选择configure ssh host
>再选择默认的配置文件>进入配置文件>写入配置项:
Host Centos HostName 192.168.10.21 User root 或者可以这样连接和设置: 然后点击远程资源管理器:
然后点击设置:
选择默认配置文件后写入配置文件
连接远程ssh服务器:
之后会要求输入密码>选打开文件夹>选择要打开的文件夹 OK了
配置完之后默认会在centos端对应用户目录下多了一个.vscode-server的文件夹
同时,在extensions下会有对应客户端的服务端插件
针对各种语言的调试,必须要在服务端本地配置可调试,在vscode端才可以调试
前言: 看了一篇博客,感觉算法实现的意思跟我想的不一样,又不想继续看别的代码了。索性就自己写了一个我所理解的,供大家参考 这里不介绍银行家算法的概念,重点放在代码实现上 想要看银行家算法的前置知识和概念可以看(复制进入)https://www.cnblogs.com/wkfvawl/p/11929508.html
1.yum install libgdiplus --应该是先更新yum
2.如果报错安装yum install epel-release
后再
yum install libgdiplus
3.libgdiplus的几个依赖
yum -y install autoconf automake libtool yum -y install freetype-devel fontconfig libXft-devel yum -y install libjpeg-turbo-devel libpng-devel giflib-devel libtiff-devel libexif-devel yum -y install glib2-devel cairo-devel yum -y install mlocate
ln -s /usr/lib64/libgdiplus.so /usr/lib64/gdiplus.dll
或者
cd /usr/lib && ln -s libgdiplus.so gdiplus.dll
4.如果还有错误
yum install libgdiplus-devel 5.如果还有错误
vim dx.h5.api.runtimeconfig.json
[appmanager@localhost api]$ cat dx.h5.api.runtimeconfig.json { runtimeOptions: { tfm: net6.
下载canal-1.1.4
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gztar zvfx canal.deployer-1.1.4.tar.gz
配置MySQL
[mysqld]
log-bin=mysql-bin # 开启Binlog
binlog-format=ROW # 设置Binlog格式为ROW
server_id=1 # 配置一个ServerID
给Canal开专门MySQL用户并授权
CREATE USER canal IDENTIFIED BY 'canal'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';FLUSH PRIVILEGES;
show master status;
vim canal/conf/example/instance.properties
canal.instance.gtidon=false
# position infocanal.instance.master.address=127.0.0.1:3306canal.instance.master.journal.name=binlog.000009canal.instance.master.position=155canal.instance.master.timestamp=canal.instance.master.gtid=
# username/passwordcanal.instance.dbUsername=canalcanal.instance.dbPassword=canalcanal.instance.connectionCharset = UTF-8canal.instance.defaultDatabaseName=test# table regexcanal.instance.filter.regex=.*\\..
canal/bin/startup.sh
查看日志canal/logs/example/example.log
while (true) { Message message = connector.getWithoutAck(batchSize); // 获取指定数量的数据 long batchId = message.getId(); try { int size = message.