FreeSWITCH的高可用部署方式有两种:主备切换和负载均衡,官方文档介绍的主备切换部署是采用Corosync & Pacemaker,负载均衡采用前置opensips。但对使用keepalived进行主备切换的高可用方式没有介绍,同时网上对该种部署方式也没有介绍。
本人对Corosync & Pacemaker不熟悉,目前在职的公司web应用大部分采用keepalived+haproxy,所以对keepalived稍微熟悉一点,因此尝试使用keepalived进行freeswitch进行主备切换的高可用部署。
使用keepalived进行freeswitch进行主备切换的高可用部署比较简单,本文介绍的部署方案有两个亮点(自以为):1、主节点不抢占VIP,否则可能导致主节点恢复后VIP切换导致正在交互的SIP信令处理失败;2、FS可用性检测脚本和主备切换后话务接管脚本。
一、前提 1、freeswicth和keepalived均能通过服务启动;
2、两个节点freeswitch连接同一个mysql数据库;
二、环境 OS:Red Hat Enterprise Linux Server release 7.9
A节点IP:100.207.104.77
B节点IP:100.207.104.78
VIP:100.207.104.89
freeswitch域名:callcenter.xxxxx.com ---域名也可以直接使用VIP ,---域名暂无启用。
三、配置 3.1、允许应用绑定非本机IP
在两个节点均执行以下命令:
echo 'net.ipv4.ip_nonlocal_bind=1' >> /etc/sysctl.conf
cat > /etc/sysctl.conf << EOF # sysctl settings are defined through files in # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/. # # Vendors settings live in /usr/lib/sysctl.d/. # To override a whole file, create a new file with the same in # /etc/sysctl.
我们在App上,经常能看到【查找附近的人】这么个功能,但是你知道它是怎么实现的吗?
Redis的GEO功能 Redis的3.2版本提供了GEO功能,能够方便地进行地理位置信息的存储与查找
存储经纬度信息
#命令格式:GEOADD key 经度 维度 memberGEOADD USER:LOCATION 114.18612410 22.29358599 HongKongAlice 获取成员的地理位置信息
#命令格式:GEOPOS key membergeopos USER:LOCATION HongKongAlice 计算两个坐标之间的距离
unit表示单位有以下四个值:
- m (meter) 代表米
- km (kilometer)代表千米
- mi (miles)代表英里
- ft (ft)代表尺
#命令格式:geodist key member1 member2 [unit]geodist USER:LOCATION HangZhouTom HongKongAlice km 获取指定位置范围内的所有地理位置
以下命令可以实现附近的人功能
#命令格式:georadius key 经度 维度 距离 [unit]georadius USER:LOCATION 114.18612509965897 22.293586120392426 2000 km#命令格式:georadiusbymember key member 距离 [unit]georadiusbymember USER:LOCATION HongKongAlice 2000 km 删除地理位置信息
GEO没有提供删除的命令,但是因为本身是由zset实现的,可以使用zrem对地理位置进行删除
zrem key memberzrem USER:LOCATION HongKongAlice 查找附近的人功能实现三步骤 1.
LaTeX技巧总结 前言LaTeX工具介绍Overleaf(推荐)使用流程切换界面语言更改编译器文档定位快捷键 TeXLive和TeXStudio LaTeX模板LaTeX技巧LaTeX中文支持首行缩进进行缩进不进行缩进 显示下划线 LaTeX基础导言区与正文区文档类型宏包编译器注释单行注释多行注释 英文引号空格换行换段新页转义字符可选参数[htbp] 文章架构纸张布局标题级别标题、作者、时间摘要引用、脚注架构 字体,大小,颜色链接列表图片可选参数[htbp]单张图片多张图片 表格数学公式公式支持注意事项公式编号自动编号手动编号 自定义标题样式算法(伪代码)代码块基础用法高级用法 论文写作模板双栏跨栏图表无自动编号的标题引用公式引用图片引用表格引用页面内参考文献引用bib参考文献引用改变引用颜色 前言 若想学习Markdown,请参见我的另一篇博客:Markdown详细教程+技巧总结 。
若想直接学习LaTeX数学公式,请参见我的另一篇博客:LaTeX数学公式-详细教程 。
本篇文章介绍LaTeX的基本用法,并有自己的经验和总结。另外,可以从LaTeX的官方文档进行学习,官方文档大部分是英文文档,链接:LaTeX在线文档 ,LaTex宏包文档。
本篇文章内容包含LaTeX工具,LaTeX模板,LaTeX技巧,LaTeX基础,文章架构,字体、大小和颜色,链接,列表,图片,表格,数学公式,算法(伪代码),代码块,论文写作,等等。
LaTeX工具 介绍 LaTeX工具分为在线工具和本地工具,本地工具又分为前台和后台。在线工具推荐Overleaf,本地工具推荐前台使用TeXStudio,后台推荐使用TeXLive(后台工具有TeXLive,MikTeX,CTeX等)。
各个后台的比较:TeXLive有跨平台的性质,适用于Linux、Mac以及Windows系统;TeXLive是完全安装,大小大概为5G左右;每年有一次更新。TeXStudio只适用于Windows系统;它只安装基本的东西,其他任何需要的东西可以动态安装;只有发生重大变化时才会更新。CTeX只适用于Windows系统;默认编码不是UTF-8;已经不再维护,不再更新了,容易出Bug。
可以根据需求选择合适的本地后台,若觉得安装配置比较麻烦,则可以使用Overleaf在线工具,有网络即可使用,更重要的是国内也可以使用,并支持中文界面。详细使用方法在下文介绍。
Overleaf(推荐) 网址:Overleaf 。
注册账户并登录后即可使用。
使用流程 点击New Project后还可以使用Templates模板,如下图:
新建项目后,左边为源代码视图,右边为预览视图。可以点击左上角的Menu下载源文件,PDF文件,或设置编译器,如下图:
展开Recompile按钮可以设置自动编译,并忽略语法检查,如下图:
切换界面语言 方法1
点击Overleaf界面左下角的国旗标志可以切换界面语言,切换成中文的操作如下图:
方法2
直接更改网址如下:https://cn.overleaf.com/project
即可切换界面语言为中文。
更改编译器 在项目菜单的设置中可以更改,如下图:
文档定位 在项目中线顶部有2个箭头样式的按钮,可以使tex文档和PDF文档相互定位,如下图:
补充:
左键双击PDF文档的特定位置,tex文档会跳转到对应位置。
快捷键 Overleaf内置了很多快捷键,本人分类为常用快捷键和全部快捷键如下:
常用快捷键
Ctrl+B:粗体
Ctrl+I:斜体
Ctrl+/:注释
Ctrl+Z:撤销
Ctrl+Y:重做
Ctrl+F:查找和替换
Ctrl+Home:到文档顶部
Ctrl+End:到文档底部
Ctrl+S:重新编译
Ctrl+Enter:重新编译
全部快捷键
可以在Overleaf项目中点击菜单中的快捷键选项查看,如下图:
2021年5月
TeXLive和TeXStudio 安装及配置详情可参见其他人的博客:LaTeX新手入门以及TeXlive和TeXstudio的安装使用 。
本人一般使用在线工具Overleaf,因此个人教程暂略,后期若安装本地环境再进行完善。
LaTeX模板 LaTeX有很多模板,可以直接使用,方便用户排版。
Overleaf中一些常用模板,包含Project,Resume,Homework,Letter,Memo,Poster,Book,Journal,Thesis。
给KVM虚拟机ubuntu系统扩容,用图形界面 gparted 工具是很容易了,但受限于宿主机内存不足,无法运行图形界面,因此需用命令行方式解决。
然而查找了很多网上的教程,扩容完 /dev/vda 之后,就直接 lvextend 扩容逻辑卷。我使用后依然没有扩容效果。
其实上述两个操作之间需要补充扩容物理卷和格式化操作。此文将记录完整过程。
扩容前磁盘使用状态 扩容操作过程 1. 运行虚拟机,在宿主机上给虚拟机镜像扩容 命令: cd /var/lib/libvirt/images/ virsh start ubuntu20.04-worker virsh blockresize --path /var/lib/libvirt/images/ubuntu20.04-worker.qcow2 --size 40G ubuntu20.04-worker 2. 进入虚拟机中进行扩容操作 1)使用 fdisk -l 查看磁盘空间,可以看到 /dev/vda 设备已经扩到40G,其中已分配的有25G :
2)使用 growpart /dev/vda 3 命令扩容磁盘设备,之后再次查看磁盘/dev/vda 设备已经分配了40G:
尽管 /dev/vda3 已经扩容,但根目录是挂载在 /dev/mapper/ubuntu--vg-ubuntu--lv 分区的,而它是位于 /dev/vda3 中的,但是为什么到现在还是23G呢?使用 lsblk 命令可以看到,目前 /dev/vda3 中增加的磁盘空间并未格式化成 lvm 类型,因此 ubuntu--vg-ubuntu--lv 分区依然是23G。接着使用 pvs 命令看到物理卷的可用区间是0。
因此我们需要先让新增的空间变成物理卷认可的空间,然后才能给 /dev/mapper/ubuntu--vg-ubuntu--lv 分区扩容:
3)使用 pvresize /dev/vda3 命令将新增的磁盘空间添加到物理卷中,接着再用 pvs 查看,现在可以看到 PFree 已经不是0了:
一、场景
App应用测试在二次回归时,提出了安卓端视频定位不准的问题。
二、分析
代码层面使用了安卓原始的MediaPlayer中的seekTo接口来定位:
mp.setOnInfoListener(new MediaPlayer.OnInfoListener() { @Override public boolean onInfo(MediaPlayer mp, int what, int extra) { AFLog.d(TAG, "视频播放信息监听what="+ what +" firstEnter="+firstEnter); if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START){ //首次根据前端传递过来进行定位 if (firstEnter){ AFLog.d(TAG, "--------seekValue "+ seekValue ); if (seekValue != 0){ mp.seekTo(seekValue*1000); } firstEnter = false; } //视频准备渲染完成,隐藏进度框 // if (mLoadingDialog !=null && mLoadingDialog.isShowing()){ // mLoadingDialog.dismiss(); // } hidGifLoading(); }else if (what == MediaPlayer.MEDIA_INFO_BUFFERING_START ){ //视频缓冲 // if (null != mLoadingDialog){ // mLoadingDialog.
OpenSSL 远程升级到 3.2.1 文章目录 OpenSSL 远程升级到 3.2.1背景升级 OpenSSL1. 查看 OpenSSL版本2. 下载最新稳定版本 OpenSSL3. 解压缩,安装4. 配置 背景 最近的护网行动,被查出来了好几个关于OpenSSH的漏洞。需要升级OpenSSH,升级OpenSSH需要同时升级OpenSSL
系统信息如下:
centos: 7
openssl: 1.0.1
升级 OpenSSL 1. 查看 OpenSSL版本 openssl version 2. 下载最新稳定版本 OpenSSL wget https://www.openssl.org/source/openssl-3.1.2.tar.gz 3. 解压缩,安装 ## 进入文件目录 cd /usr //文件下载在 /usr ## 解压文件 tar -zxvf openssl-3.1.2.tar.gz ## 编译,并指定编译参数 ./config --prefix=/usr/local/openssl #如果此步骤报错,需要安装perl以及gcc包 # 安装 make && make install #备份默认的openssl,防止升级失败恢复 mv /usr/bin/openssl /usr/bin/openssl.bak mv /usr/include/openssl /usr/include/openssl.bak 部分编译参数说明
–openssldir=OPENSSLDIR:安装目录,默认是 /usr/local/ssl 。
–prefix=PREFIX:设置 lib include bin 目录的前缀,默认为 OPENSSLDIR 目录。
要成为一名出色的 GPT Prompt 工程师,需要掌握一系列的技能和知识,涵盖了自然语言处理(NLP)、机器学习、深度学习等领域。以下是您可能需要学习的关键知识领域:
自然语言处理(NLP)基础:
学习 NLP 的基本概念,如分词、词性标注、命名实体识别等。
理解句法分析、语义分析和语言生成等核心任务。
机器学习和深度学习:
学习机器学习的基本算法,如线性回归、决策树、支持向量机等。
掌握深度学习的基本概念,包括神经网络、激活函数、优化算法等。
自然语言处理技术和库:
熟悉常用的 NLP 库,如NLTK、spaCy、Transformers等。
学习如何使用这些库进行文本处理、特征提取和模型训练。
GPT 模型和预训练模型:
深入了解 GPT 架构及其变种,理解其工作原理和训练过程。
学习如何使用预训练模型,如 GPT-3,进行文本生成和语言理解任务。
文本生成和生成策略:
探索不同的文本生成技术,如基于规则、基于模板、基于概率等。
理解生成策略,包括随机性、温度调节、核心词等概念。
Prompt Engineering:
学习如何设计有效的提示(prompt)以引导模型生成所需的文本。
掌握如何调整提示的结构、内容和格式,以获得所需的输出。
Fine-tuning 和模型部署:
了解如何对预训练模型进行微调,以适应特定任务或应用领域。
学习如何将训练好的模型部署到实际应用中,考虑性能和效率。
数据处理和数据集构建:
理解数据在模型训练中的重要性,学习如何处理文本数据并构建训练集。
掌握数据预处理、清洗、标注和增强等技术。
计算机科学和编程:
掌握编程语言(如Python)和相关工具,能够实现和调试算法和模型。
熟悉数据结构、算法设计和软件工程原则。
持续学习和实践:
跟踪最新的研究进展、技术和论文,保持对领域的深入了解。
参与实际项目和竞赛,不断实践和提升您的技能。
请注意,成为一名出色的 GPT Prompt 工程师需要时间和努力,因为这是一个不断发展和进化的领域。从基础知识开始,逐步深入学习和实践,积累经验,您将能够在这个领域取得成功。
目录
【kubernetes】k8s高可用集群搭建(三主三从)
一、服务器设置
二、环境配置
1、关闭防火墙
2、关闭selinux
3、关闭swap
4、修改主机名(根据主机角色不同,做相应修改)
5、主机名映射
6、将桥接的IPv4流量传递到iptables的链
7、时间同步
8、master之间进行免密登录设置
三、安装部署
(一)配置部署keepalived服务
1、安装Keepalived(所有master主机)
2、k8s-master1/2/3节点配置
3、启动和检查
4、查看启动状态
5、启动完成后在master1查看网络信息
(二)配置部署haproxy服务
1、所有master主机安装haproxy
2、修改配置文件
3、启动和检查
4、查看启动状态
5、检查端口
(三)配置部署Docker服务(所有主机)
(四)部署kubelet kubeadm kubectl工具
1、使用 YUM 方式安装Kubernetes时,推荐使用阿里的yum。
2、安装kubelet kubeadm kubectl
(五)部署Kubernetes Master
1、创建kubeadm-config.yaml文件
2、查看所需镜像信息
3、下载k8s所需的镜像(所有master主机)
4、使用kubeadm命令初始化k8s
5、根据初始化的结果操作
6、查看集群状态
1)修改kube-controller-manager.yaml文件
2)修改kube-scheduler.yaml文件
3)查看集群状态
4)查看pod信息
5)查看节点信息
(六)安装集群网络
在k8s-master1节点执行
没有变成ready:(原因是网络插件缺失)
上传插件:
再次查看节点信息:
(七)添加master节点
1、在k8s-master2和k8s-master3节点创建文件夹
2、在k8s-master1节点执行
3、将其他master节点加入集群
查看节点信息
(八)加入Kubernetes Node
查看节点信息
查看pod信息
(九)测试Kubernetes集群
1、所有node主机下载测试镜像
2、在Kubernetes集群中创建一个pod,验证是否正常运行。
3、创建完 Deployment 的资源清单之后,使用 create 执行资源清单来创建容器。
1、检查系统已安装的当前 SSH 版本 使用命令 ssh -V 查看当前 ssh 版本,输出如下:
OpenSSH_7.6p1 Ubuntu-4ubuntu0.7, OpenSSL 1.0.2n 7 Dec 2017 2、安装依赖,依次执行以下命令 sudo apt update
sudo apt install build-essential zlib1g-dev libssl-dev
3、设置环境 为了创建一个合适的环境来安装 OpenSSH 服务,需要创建一个安装环境
sudo mkdir /var/lib/sshd
sudo chmod -R 700 /var/lib/sshd/
sudo chown -R root:sys /var/lib/sshd/
4、下载源码并安装 从任何可用的HTTP镜像下载OpenSSH 9.3 版本,或者使用wget命令直接在终端下载
下载源码到任意文件夹下:
wget -c https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.3p1.tar.gz 解压:
tar -xzf openssh-9.3p1.tar.gz 进入源码文件夹路径:
cd openssh-9.3p1/
安装时如果要启用PAM和SELinux支持,需分别添加--with-pam和--with-selinux选项,需要安装所有必需的头文件才能使它们正常工作
安装依赖:
sudo apt install libpam0g-dev libselinux1-dev libkrb5-dev
安装 ssh,依次执行以下三命令:
./configure --with-kerberos5 --with-md5-passwords --with-pam --with-selinux --with-privsep-path=/var/lib/sshd/ --sysconfdir=/etc/ssh make sudo make install 安装完成后,重启系统,否则远程连接将继续使用旧版本
前言 最近做一个项目,需要在arm开发板实现https post功能,一开始按照网上的教程,将curl库移植到arm开发板,但是发现我移植的curl不支持https,后面继续查才知道curl库默认是不支持https的,要支持的话需要在移植的时候加入openssl库。
移植环境 虚拟机:ubuntu16.04
交叉编译器:arm-linux-gnueabihf-gcc
openssl版本:1.1.1v
curl版本:7.63.0
openssl和curl的源码还有证书我已经长传至我的gitee,可以直接下载使用
openssl+curl: 嵌入式arm开发板使用curl+openssl实现https通信 (gitee.com)
源码编译 openssl编译 将openssl源码解压出来,然后进入源码目录,打开终端,输入裁剪命令
./config no-asm shared --prefix=/data1/code/openssl-arm --cross-compile-prefix=arm-linux-gnueabihf- # --prefix:库和头文件生成路径 # --cross-compile-prefix:指定arm编译器 裁剪完后要注意,打开生成的Makefile文件,将这里的-m64去掉,不然编译会报错 接着直接编译和安装
make -j4 & make install curl编译 同样的,将源码解压出来,裁剪
./configure --prefix=/data1/code/curl-arm --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ --with-ssl=/data1/code/openssl-arm # --prefix:库和头文件生成路径 # --host:指定arm编译器 # --with-ssl:支持https,这里直接填写上面openssl的生成路径 要注意的是,裁剪完后,会有提示信息,这里ssl support 为enabled即表示成功添加https支持,如果没有的话即使编译成功出来也无法https连接(注意所有源码编译路径不要有中文,我一开始放在中文路径编译,ssl support一直是no,后面换成没有中文的路径居然就可以了)
接着就是执行编译安装
make -j4 & make install 实际应用 先用生成的在curl的安装目录bin下找到可执行文件,将其放到arm开发板
接着将openssl和curl安装路径下的lib文件也一起打包放到开发板(如果要节省空间就只打包动态库即可,so文件,编译的时候没关系,编译器优先链接动态库),注意,一定要打包,因为库文件有链接属性,如果直接复制会丢失链接属性,放到开发板后需要给设置环境变量,不然找不到库。
这个时候还无法执行程序,还需要证书文件,直接去官网下载,并放到开发板,设置环境变量
export CURL_CA_BUNDLE=/opt/cafile/cert.pem 接着执行命令
./curl -h|grep ssl 出现以下内容就说明可以支持https了 最后试着使用https post百度
./curl "
实现思路: 在一个单独的vue组件文件中只写出上导航栏和左侧导航栏的内容将你想要展示的页面主内容写到单独的组件中在index.js写路由,将【想要展示的页面主内容的路由】作为【子路由】写在【只写出上导航栏和左侧导航栏的路由】的下面; 在elment-plus官网上找到自己需要的布局容器模型
Container 布局容器 | Element Plus (element-plus.org)https://element-plus.org/zh-CN/component/container.html#%E5%B8%B8%E8%A7%81%E9%A1%B5%E9%9D%A2%E5%B8%83%E5%B1%80
重要代码 我的侧边栏是菜单,在菜单里面加上router属性,它的子菜单你点击它才能跳转到相应的路由去展示内容;
注意一定要主内容区域的标签里加上黄色区域的代码,这样你的其他页面才能在主内容区域显示;
<el-main style="background: #f6f4f4"> <router-view/> </el-main> 【核心】index.js路由的书写 /0路由里只写了上导航栏和左侧导航栏的框架(后面简称框架),主体区是没有内容的,我在/first路由下写了首页要展示的内容,所以当访问/0路由时,使用redirect将路由重定向到/firest路由,就可以既展示框架又展示主体内容,children:[ ]里面写了所有要在主体区域的页面路由;
效果图:
一、什么是事务? 简单说就是逻辑上的一组操作,要么都执行,要么都不执行。
举个例子,假如小明要给小红转账100元,这个转账会涉及到两个关键操作:①将小明的余额减少100元。 ②将小红的余额增加100元 。但是万一再这两个操作之间突然出现错误,比如说银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都失败。
二、事务的特性ACID 1、原子性:事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么全不起作用。
2、一致性:执行事务前后,数据保持一致。例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的。
3、隔离性:并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间的数据是独立的。
4、持久性:一个事务被提交之后,他对数据库的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
实现:
持久性:通过 redo log来保证的
原子性:通过 undo log来保证的
隔离性:通过 MVCC 或锁机制来保证的
一致性:通过持久性+原子性+隔离性来保证
三、并发事务带来的问题 在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对统一数据进行操作)。并发虽然是必须的,但是可能会导致以下的问题。
脏读(Dirty Read):当一个事务正在访问数据并且对数据进行了修改,此时还未提交到数据库中,这时另一个事务也访问并使用了这个数据,由于上个事务还未提交,此时他读到的就是“脏数据”,根据“脏数据”所做的操作可能时不正确的。丢失修改(Lost of Modify):指一个事务读取到一个数据,另一个事务也访问了该数据。那么在第一个事务修改了这个数据后,第二个事务也进行了修改,此时第一个事务的修改结果就被覆盖了,也就是丢失了,因此称为丢失修改。 例如:事务1读取某表中的数据A=20,事务2也读取A=20,事务1修改A=A-1,事务2也修改A=A-1,最终结果A=19,事务1的修改被丢失。死锁(Deadlock):两个或多个事务相互等待对方释放资源,导致系统无法继续执行。这种情况下,只能通过终止其中一个事务或者回滚来解决死锁。不可重复读(Unrepeatableread):一个事务在读取某个数据后,另一个事务修改了该数据并提交。当第一个事务再次读取同一数据时,得到的结果与之前不一致。因此称为不可重复读。幻读(Phantom read):幻读与不可重复读类似,它发生在一个事务(T1)读取了几行数据,接着另一个并发事务(T2)插入了一些数据时。在随后的查询中,第一个事务(T1)就会发现一些原本不存在的记录,就好像发生了幻觉一样,所以称为幻读。 不可重复度和幻读的区别: 不可重复读的重点是修改,幻读的重点在于新增或者删除。
例1(同样的条件, 你读取过的数据, 再次读取出来发现值不一样了 ):事务1中的A先生读取自己的工资为 1000的操作还没完成,事务2中的B先生就修改了A的工资为2000,导 致A再读自己的工资时工资变为 2000;这就是不可重复读。
例2(同样的条件, 第1次和第2次读出来的记录数不一样 ):假某工资单表中工资大于3000的有4人,事务1读取了所有工资大于3000的人,共查到4条记录,这时事务2 又插入了一条工资大于3000的记录,事务1再次读取时查到的记录就变为了5条,这样就导致了幻读。
四、事务隔离级别 SQL 标准定义了四个隔离级别:
READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。
隔离级别脏读不可重复读幻影读READ-UNCOMMITTED√√√READ-COMMITTED×√√REPEATABLE-READ××√SERIALIZABLE××× MySQL InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ(可重读)
需要注意的是:与 SQL 标准不同的地方在于InnoDB 存储引擎在 REPEATABLE-READ(可重读) 事务隔离级别下,允许应用使用 Next-Key Lock 锁算法来避免幻读的产生。这与其他数据库系统(如 SQL Server)是不同的。所以说虽然 InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ(可重读) ,但是可以通过应用加锁读(例如 select * from table for update 语句)来保证不会产生幻读,而这个加锁度使用到的机制就是 Next-Key Lock 锁算法。从而达到了 SQL 标准的 SERIALIZABLE(可串行化) 隔离级别。
1.使用 Student @Data public class Student { private Long id; private String name; private Long idCard; private LocalDate birthday; } StudentDTO @Data public class StudentDTO { private Long userId; private Long idCard; private String userName; private String idNumber; private LocalDate dateOfBirth; private Long phone; } StudentConvert @Mapper(implementationName = "StudentConvertUtil", implementationPackage = "com.ylz.mapstruct.domain.convert.impl") public interface IStudentConvert { IStudentConvert INSTANCE = Mappers.getMapper(IStudentConvert.class); @Mapping(source = "id", target = "userId") @Mapping(source = "name", target = "
lambda用法及其高阶函数 lambda函数1、lambda 语法1.1 参数arg1.2 参数表达式expression1.3 常见的lambda函数示例:无参匿名函数带参匿名函数 2、lambda 用法之高阶函数2.1 map() 函数:2.2 reduce()函数2.3 sorted() 函数:2.4 filter() 函数:2.5 和for连用(1)res=[ lambda x,i=i : x*i for i in range (6) ]第一种:带参数x第二种:无参使用: (2)错误操作:res = [lambda x : x*i for i in range(6)]第一种:带参数x第二种:无参使用: (3)res = lambda x : [x*i for i in range(6)]第一种:带参数x第二种:无参使用: 3、复习一下列表推导式:for..in...if语法(不使用lambda)2.6.1 带有 if 语句2.6.2 带有 for 嵌套2.6.3. 既有 if 语句又有 for 嵌套: for..in..if..2.6.4. 列表推导式生成矩阵 lambda函数 1、lambda 语法 lambda arg1,arg2,…argn(传入的参数):expression(要执行的语句)
匿名函数不需要return来返回值,表达式expression执行完的结果就是返回值。
# 普通python函数 def func(a,b,c): return a+b+c print func(1,2,3) # 返回值为6 # lambda匿名函数 f = lambda a,b,c:a+b+c print f(1,2,3) # 返回结果为6 1.
由于之前配置jetson nano的时候瞎配置的,也没有写什么实际性的教程,所以这一次就系统性的从jetson nano的配置开始写
后续yolov5或其他内容网上都有比较详细的教程了,我给的参考链接里也有较为详细的教程,可以直接自己参考这些。
但是假如也想要一个详尽教程的话就可以评论或者私信,我会考虑出后续yolov5或者其他模块的安装与配置
我们在做旋转目标检测,所以用的不仅是基础yolov5,想要学习该旋转检测项目配置的话,可能要等我们比完赛
本篇文章有错误,请去看新版
Jetson Nano的配置+opencv+torch+torchvision(新版)_瞎某某Blinder的博客-CSDN博客https://blog.csdn.net/Blindbaby123/article/details/131864241?spm=1001.2014.3001.5502
本篇文章有错误,请去看新版
Jetson Nano的配置+opencv+torch+torchvision(新版)_瞎某某Blinder的博客-CSDN博客https://blog.csdn.net/Blindbaby123/article/details/131864241?spm=1001.2014.3001.5502 本篇文章有错误,请去看新版
jetson nano的基础及进阶配置(用于视觉识别深度学习)_瞎某某Blinder的博客-CSDN博客https://blog.csdn.net/Blindbaby123/article/details/131552519?spm=1001.2014.3001.5502
目录
一. Jetson nano
1. 基础配置
(1) 烧录
(2) 设置中文
(3) 其他设置
1.风扇
2.镜像设置
2. 模块设计
(注)文件权限设置
(1) 配置CUDA
(2) 安装pip3(用来下载python的库)
(3) 配置可能需要用到的库和环境
(4) 安装opencv会用到的依赖
(5) 更新cmake (可能时间较长,耐心等待)
(6) 安装U盘驱动
(7) 安装pytorch及torchvision(视个人情况而定)
1. 下载
2. 安装
3. 安装torchvision的依赖
4. 安装
5. 检验是否安装成功
(8) 安装虚拟环境achiconda
虚拟环境使用教程
一. Jetson nano 1. 基础配置 主要参考链接【Jetson Nano 入门】环境配置汇总_jetson nano配置_Huih_cannot_fly哼的博客-CSDN博客
Spring Security 在最近几个版本中配置的写法都有一些变化,很多常见的方法都废弃了,并且将在未来的 Spring Security7 中移除,因此又补充了一些新的内容,重新发一下,供各位使用 Spring Security 的小伙伴们参考。
接下来,我把从 Spring Security5.7 开始(对应 Spring Boot2.7 开始),各种已知的变化都来和小伙伴们梳理一下。
1. WebSecurityConfigurerAdapter 首先第一点,就是各位小伙伴最容易发现的 WebSecurityConfigurerAdapter 过期了,在目前最新的 Spring Security6.1 中,这个类已经完全被移除了,想凑合着用都不行了。
准确来说,Spring Security 是在 5.7.0-M2 这个版本中将 WebSecurityConfigurerAdapter 过期的,过期的原因是因为官方想要鼓励各位开发者使用基于组件的安全配置。
那么什么是基于组件的安全配置呢?我们来举几个例子:
以前我们配置 SecurityFilterChain 的方式是下面这样:
@Configuration public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeHttpRequests((authz) -> authz .anyRequest().authenticated() ) .httpBasic(withDefaults()); } } 那么以后就要改为下面这样了:
@Configuration public class SecurityConfiguration { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .
1. 建图 1.1 绘制地图 绘制地图需要什么?
1.配备以下设备的机器人: LIDAR和Odometry 2.机器人环境
我们使用cartographer_ros这个 cartographer 的 ROS 封装器,来建图。
在ROS2中启动cartographer,需要启动两个节点
import os from launch import LaunchDescription from ament_index_python.packages import get_package_share_directory from launch_ros.actions import Node def generate_launch_description(): cartographer_config_dir = os.path.join(get_package_share_directory('cartographer_slam'), 'config') configuration_basename = 'cartographer.lua' return LaunchDescription([ Node( package='cartographer_ros', executable='cartographer_node', name='cartographer_node', output='screen', parameters=[{'use_sim_time': True}], arguments=['-configuration_directory', cartographer_config_dir, '-configuration_basename', configuration_basename]), Node( package='cartographer_ros', executable='occupancy_grid_node', output='screen', name='occupancy_grid_node', parameters=[{'use_sim_time': True}], arguments=['-resolution', '0.05', '-publish_period_sec', '1.0'] ), ]) 第一个节点指定建图的配置,使用lua语言:
include "map_builder.lua" include "trajectory_builder.lua" options = { map_builder = MAP_BUILDER, trajectory_builder = TRAJECTORY_BUILDER, map_frame = "
在概率领域中,有一道备受争议的谜题广受关注,它就是著名的“三门问题”(Monty Hall problem)。虽然问题简单,但是其出人意料的答案引发了许多人的疑惑和争论。在本文中,我们将深入探讨这个问题,并通过Java代码模拟来验证其解答。
问题背景与情境
三门问题的情景设定如下:假设你参加一个电视游戏节目,面前有三扇关闭的门,其中一扇门后面有一辆汽车,而其他两扇门后面则是山羊。你的目标是选择一扇门,然后主持人会打开另外两扇门中的一扇,露出一只山羊。在这之后,你有机会选择是否要改变你的初选,选择另外一扇门。
直觉与概率的较量
这个问题的关键在于,你应该坚持最初的选择,还是改变选择,才能最大化赢得汽车的概率?直觉可能会让我们倾向于认为改变选择和坚持选择的概率应该是相等的,毕竟剩下的两扇门看似对称。然而,通过概率计算和逻辑推理,我们可以得出令人意外的结论。
代码模拟与验证
为了更好地理解这个问题,让我们通过Java代码来模拟三门问题,并验证最终的结果。以下是代码示例:
public static void main(String[] args) { int totalSimulations = 1000000; int stayWins = 0; int switchWins = 0; Random random = new Random(); for (int i = 0; i < totalSimulations; i++) { int carPosition = random.nextInt(3); // 随机选择汽车放置的门 int initialChoice = random.nextInt(3); // 参赛者初始选择的门 // 主持人打开一扇有山羊的门 int openedDoor; do { openedDoor = random.nextInt(3); } while (openedDoor == carPosition || openedDoor == initialChoice); // 如果坚持初始选择,判断是否获胜 if (initialChoice == carPosition) { stayWins++; } // 如果改变选择,判断是否获胜 int switchedDoor = 3 - initialChoice - openedDoor; // 剩下的门 if (switchedDoor == carPosition) { switchWins++; } } System.
International Journal for Numerical Methods in Biomedical Engineering投稿流程 目标期刊投稿网址注册 投稿流程注意⚠️不要最后在最后检查阶段,重新上传word文件,这样会导致,之前针对word的操作全部改变。Please provide a novelty file for your manuscript in the system. 状态跟踪 目标期刊 International Journal for Numerical Methods in Biomedical Engineering
投稿网址 International Journal for Numerical Methods in Biomedical Engineering
https://onlinelibrary.wiley.com/page/journal/20407947/homepage/forauthors.html?
注册 Easy
投稿流程 … 中间过程省略,这个出版社很人性化,投稿的web UI也很好看。上传word之后,一步步跟着走就行,不用填太多东西。
注意⚠️ 不要最后在最后检查阶段,重新上传word文件,这样会导致,之前针对word的操作全部改变。 Please provide a novelty file for your manuscript in the system. 经过几次投稿后,最后这个问题一直没理解,后来通过阅读作者指导才知道,需要提交新颖性文件,不是一个新的文件…
novelty file:“新颖性文件”——所有作者现在都需要提供一个额外的文件。请用不超过100字的明细表简要描述您的论文对该领域的新贡献。请不要为此而重复你的摘要内容。
类似于以前投稿过的期刊中的coverletter。
状态跟踪 1.Under view 2023.03.30
2. Under view 2023.
1.直接由莫尔应力圆及包络线得到 由于三轴条件下,试样以宏观破裂面破坏,所以试件是以剪切的方式破坏的,根据库伦强度准则,其抗剪强度 τ m \tau_m τm 可以通过粘聚力 c c c 和内摩擦角 φ \varphi φ 确定,表示为
可见斜率为内摩擦角,截距为粘聚力
2.刘泉声(2014)的计算方法 根据库伦强度准则,有:
其中: σ \sigma σ为破坏面上的正应力。当以主应力形式表示时,Coulomb 强度准则变为
其中: b b b 代表单轴压缩条件下,试样完全剪切破坏时对应的强度;m 代表围压对轴向承载力的影响系数。这两个系数与粘聚力 c c c 和内摩擦角 φ 的关系可表示为
即有
(注意b=单轴抗压强度)
这篇文章给大家整理了20个互联网用户数据分析的项目。所有收录的项目,进行了严格的筛选,标准有二:
1.有解说性文字,大家能知道每一步在干嘛,新手友好
2.数据集公开,保证大家可以在原文的基础上自行探索
更多有趣的项目,欢迎登录和鲸社区自己淘宝
【用户分层】汽车用户画像分析及多模型预测分类
对汽车用户画像进行分析,并采用KNN、决策树、随机森林等算法构建模型进行用户分类及预测
【数据分析必备技能】一文带你轻松掌握—AB测试
本文介绍了ABtest基本步骤,且以实例展示比例检验过程;并介绍了常见检验方法如t检验、z检验、非参检验、比例检验等及其适用条件。
电商用户画像标签(上)
基于一个月的淘宝用户行为,给用户打标签 此项目为上部,包含用户属性标签和用户行为标签
电商用户画像标签(下)
包括用户个性化标签、用户偏好标签、群体偏好标签,涉及到TF-IDF算法、余弦相似度算法
淘宝用户行为分析
随着互联网与电商平台的发展,网上购物正成为国内消费者购物的重要方式。在重要的电商平台淘宝中,用户通过浏览商品详情页、收藏、加购或直接购买等方式来进行网上购物。通过对用户行为进行分析,探索用户流量在时间、流程等维度的规律,分析用户的购买量分布、留存率、价值分层,了解受欢迎的商品和商品类别现状,就可以结合店铺的相关营销策略,实现更加精细化的运营,进而服务于业务增长。
游戏APP用户行为统计分析
某游戏APP示例数据,对用户从下载安装到激活注册的数据进行统计分析
教育平台线上课程用户行为分析(含数据可视化处理)
教育平台的线上课程智能推荐策略——此数据集与题目来自于2020年泰迪杯个人技能赛,为某线上平台真实数据
CDnow的用户消费行为数据分析报告-RFM模型
本分析报告篇幅较长,干货满满,逻辑清晰,需要花大概十五分钟时间仔细阅读,非常适合用于类似线上产品的用户行为消费分析,比如某网站付费产品等!
抖音用户浏览行为数据分析与挖掘
浏览数据的用户、作者、作品特征提取,特征数据分析、聚类,以及浏览行为是否点赞的二分类预测
快手APP大学生用户分析
对社区中快手APP大学生用户分析数据简单分析(关键词:数据分析、数据可视化、漏斗分析)
【移动App用户行为分析】以探探为例
本文主要展示了一种对模糊数据处理和分析的思路,以某个具体的App为切入点,揣摩用户心理与特征,同时借助了一些外部公开的数据和资料来验证假设。
关于支付宝用户交易行为数据的探索
提供可视化分析数据,提供用户相似度训练机器学习
【亚马逊🛒用户】数据探索
关于亚马逊🛒用户画像分析的探索,亚马逊公司已成为全球商品品种最多的网上零售商和全球第二大互联网企业。
关于京东消费行为分析:用户标签及剪辑的探索
关于京东消费行为分析:品牌/类别销量情况
260万用户大型家电和电子产品购买分析
2020年4月至2020年11月从大型家用电器和电子产品在线商店购买的数据
从用户增长角度进行电商数据分析
从用户增长的角度,分析了店铺拉新的问题,对用户的生命周期、成长体系进行了定义,对电商的用户运营有比较好的指导意义。
小红书卖货实力与用户分析
假设用户购买金额(revenue)为因变量, 其它六个变量为自变量, 探寻不同特征的人群对总购买金额的贡献大小, 帮助企业定位消费人群并在营销推广等方面做出更好决策。 综合所有变量建立多线性数据模型并分析数据模型的准确性。 准确的数据模型能够帮助预测用户下单金额。
携程用户预定房型预测
对基本特征进行描述性分析;根据在用户的历史信息,挖掘出用户对于某些房型的偏好
棋牌游戏用户流失预测
预测自然流失用户,并将即将流失的用户的特点与筛选规则提交给运营部门
阿里巴巴集团服务类商品用户行为和品类分析
商品子集都是偏服务类的商品,涵盖阿里巴巴集团十个主要的商品大类,例如汽车售后服务、摄影服务、餐饮、电影等,其特色是线上购买、线下服务
黑五消费者用户画像
对数据集中五十多万条黑五消费记录进行分析,获得消费过的用户的用户画像
上传视频等,默认为黑色,无法用视频的第一帧作为封面,以及视频的video为原生组件,层级很高无法覆盖问题,虽然有cover-view,但很多场景还是不灵活
实现的前提条件是 图片是在 阿里云的oss上 自己服务器是不支持的 ,可以用canvas截图
方法 ,将 图片组件image 替换成 视频video 组件
视频组件video
<video :src="item.url" autoplay loop :controls = 'true' :show-fullscreen-btn='false'></video> 重点 将video组件更换为image组件,地址仍写video的地址,在地址后面加上
'?x-oss-process=video/snapshot,t_0,f_jpg' 最后替换的 图片image 组件
<image :src="imgsrc +'?x-oss-process=video/snapshot,t_0,f_jpg'" mode="aspectFill"></image> 源码:
template <view class="u-rela" v-for="(item,i) in videoList" :key="i" :class="[(i==3 || i==7) ? 'u-m-r-0' : 'u-m-r-18']" @click.stop="previewFun(item)" > <image :src="item.img+'?x-oss-process=video/snapshot,t_0,f_jpg'" mode="aspectFill" class="u-w-150 u-h-150" ></image> <image src="@/static/img/stop.png" mode="" class="stopimg"></image> </view> <!-- 视频预览 --> <u-popup :show="videoshow" @close="videoshow=false"> <view class="popbox"> <image src="@/static/img/close.png" mode="
前言 学习一门语言,我们从熟悉其语法开始,慢慢深入动手实践,并开始将其使用到对应的场景上,当我们遇到相应的问题,能够联想到使用该技术,并能够信手拈来的时候,才是我们真正掌握了一门技术或者语言的时候。学习的时候可以和其他学过的知识点相关联,如ES可以与MYSQL特性相关联,就像编程入门从C开始一样,是介于C的语法基础,触类旁通其他语言,下面介绍的是ES的使用场景,语法,和对应的操作过程。
一. ES数据库说明 es数据库是一个搜索引擎,既可以存储数据,又可以将数据进行细粒度划分,切分为多个索引条件,并支持全文检索,是一个分布式概念的数据存储搜索引擎。基于JAVA和Lucence创建。
二. ES的常见概念 集群,节点,索引,类型,映射,文档,段域,反向索引,DSL索引
集群: 多个服务构建成一个集群节点: 一个集群上的节点,指代集群上的一个服务索引: index ,是es的一个基本概念,依靠索引可以进行数据的检索,相当于myql的数据库(database)的量级映射: 在存储数据的时候规定映射规则可以限制存储进es的数据,相当于mysql的表结构。文档:文档是es存储的基本单位,相当于mysql的行的概念段域:相当于mysql的列反向索引:相当于mysql正向查询DSL索引:依靠es查询规则而进行的查询,相当于mysql的sql查询 ES关系型数据库索引(index)数据库(DataBase)类型(Type)表(Table)映射(Mapping)表结构(Schema)文档(Document)行(ROw)字段(Field)列(Column)反向索引正向索引DSL查询SQL查询 三. ES的应用场景 ① 监控。对日志类数据进行存储、分析、可视化。对日志数据,ES给出了ELK的解决方案。其中logstash采集日志,ES进行复杂的数据分析,转换你的日志,并将他们存储在es中,kibana进行可视化展示。
② 线上商城系统,用户需要搜素购物系统网站上的商品信息。es可以存储所有的商品信息和一些库存信息,用户通过搜索引擎可以查询到自己需要的商品信息。
③ json文档数据库。用于存放java格式的文档。
④ 提供全文搜素并高亮关键字
四. ES的使用原理 存储和查询原理 lucence的存储和查询过程主要是:
存储过程: ① 存储文档经过词法分析得到一系列的词(Term)
② 通过一系列词来创建形成词典和反向索引表
③ 将索引进行存储并写入硬盘。
查询过程:
① 用户输入查询语句。
② 对查询语句经过词法分析得到一系列词(Term) 。
③ 通过语法分析得到一个查询树。
④ 通过索引存储将索引读入到内存。
⑤ 利用查询树搜索索引,从而得到每个词(Term) 的文档链表,对文档链表进行交、差、并得到结果文档。
⑥ 将搜索到的结果文档对查询的相关性进行排序。
⑦ 返回查询结果给用户。
ES写数据分别是写入一个新的文档和在原有文档的基础上进行数据的追加(覆盖原有的文档)。两者基本上没有什么区别,后者是把原来的文档进行删除,再重新写入。
ES写数据流程: (1) 客户端选择一个ES节点发送写请求,ES节点接收请求变为协调节点。
(2) 协调节点判断写请求中如果没有指定文档id,则自动生成一个doc_id。协调节点对doc_id进行哈希取值,判断出文档应存储在哪个切片中。协调节点找到存储切片的对应节点位置,将请求转发给对应的node节点。
(3) Node节点的primary shard处理请求,并将数据同步到replica shard
(4) 协调节点发现所有的primary shard和所有的replica shard都处理完之后,就返回结果给客户端。
五. ES存储和查询数据 1.
keil护眼色配置 作为一名嵌入式软件工作人员,keil是我接触最多的编译工具,偶尔一次看到公司大佬的keil页面是这样的
看着舒服多了有没有?于是前去请教了相关的配置方法,大概流程是这样的:
1、打开keil的设置页面,找到colors&fonts选项
2、选中C/C++ Editor Files,会看到右边是一些常用的C语言语句格式配置,其中包含字体样式、大小、字体色、背景色等,在这里我们只需要修改背景色就好了,按照图示RGB参数设置(当然,也可以自定义颜色),依次将右侧的所有类型的背景色替换掉。
注意:红色方框内的不要替换!!!
所有设置完成后,保存,就会看到keil的编辑页面就变成刚开始大家看到的样子了。
keil好用的插件整理 一名优秀的软工不但要能自己写代码,还要学会如何看懂别人的代码,如果你的代码只有自己能看懂,那说明你的程序可读性很差,健壮性有待提高。一个好的编程习惯往往从各种注释开始,文件注释、函数注释、代码对齐、修改内容注释等等(之前的每个项目都花费了大量时间在这个上边)。网上有很多keil注释方法的总结,大体分为两类,一种是在keil里边提前编辑好常用的模板,然后在写工程的时候直接把模板添加上去,模板编辑在设置里的“text completion”位置,每一个宏对应一个模板,下面的模板内容是可以自定义编辑的。
使用时,只需要在需要添加模板的地方插入就行了,插入方式如下:
打开“view”选项的“templates windows” ,工程栏里就会出现该选项框,选中要添加的宏就可以了。
另外一种方法就比较人性化了(也是我在用的方法),就是利用插件。(相信很多人都知道有插件的浏览器跟没有插件的浏览器完全就是两个东西,比如说“油猴”),那么有没有适合keil用的插件呢?还真有!经过一番搜索,最终找到了这个插件工具包,里边包含了几乎所有的常用功能(其实也没啥功能,无非就是偷个懒),可以自动识别函数名称、文件名称等,使用起来也非常方便,只需要在使用的时候打开“tools”工具栏,选中要使用的功能就行了。前提是,一定要保存完成之后才能使用。
至于这些插件的安装方法可以参考这篇文章,谢谢该位博主的分享。大家快行动起来,体验一把当大佬的快感吧!
用Python学数据分析难吗? 数据方向的薪资待遇还是比较高的,而且趋势也比较明显。随着据的落地应用,数据分析将有广泛的发展前景,未来广大的传统行业也将陆续释放出大量的数据分析岗位
通过Python来进行数据分析通常需要学习以下三方面知识:
第一:Python基本语法。Python语言的语法结构还是比较简单易学的
第二:目前采用机器学习进行数据分析是比较常见的方式,通过Python来实现机器学习算法也相对比较容易。学习机器学习的重点在算法上,然后通过Python来完成算法实现,这个过程需要学习一系列库,包括Numpy、Matplotlib、Scipy、pandas等。
第三:大数据平台。大数据分析离不开大数据平台
新手如何学习Python数据分析 python数析的门槛较低,如果是python零基础开,学习的步骤大概是python基础据采集、数据处理、数据分析、数据可视化。
首先学习一点python基础的知识,Python语言基础,函数,文件操作,面向对象,异常处理,模块和包,Linux系统使用,Mysql数据库等;
其次就可以学习一些基本的爬虫,进行数据采集,当然也有很多爬虫工具,直接使用即可。
然后就可以学习数据分析方面知识,主要是学习pandas、numpy等等;
再然后就要学习数据可视化来向别人展现数据,常用matplotlib实现,主要包括一些基本的统计图的绘制,比如条形图,柱状图,散点图。还有一些进阶绘图,比如分位数图,相关系数图等等。还需要掌握3D绘图可视化。
python数据分析该怎么入门呢? 从Python基础语法开始,网上有很多视频课,可以看看。也可以学习B站上的视频课,比如小甲鱼的Python基础课。
入门Python数据分析,请问看什么书籍?
1、《Python编程:入门到实践》
内容分为基础篇和实分。基础篇介绍基本的编程概念,实战篇介绍如何利用新学到的知识开发功能丰富的项目:2D游戏《外星人入侵》,数据可视化实战,Web应用程序。
推荐理由:这本书,书中涵盖的内容是比较精简的,没有艰深晦涩的概念,最重要的是每个小结都附带有”动手试一试”环节。理论和恰到好处,行文逻辑流畅,不跳跃,手把手教的感觉,却绝不啰嗦,非常适合入门。
2、《Python基础教程》
这本书内容涉及的范围较广,既能为初学者夯实基础,又能帮助程序员提升技能,适合各个层次的Python开发人员阅读参考。最后几章的10各项目更是这本书最大的亮点,不仅实用而且讲解到位。
推荐理由:做为一门语言教程书籍,这本书讲得非常不错!该说的说得清楚,不该说的轻轻点到,读者想要网上查找的时候也有迹可循,轻重把握很好。作者会将不同的理解方式和实现方式放在一个例子中,更多的时候作者会有颇为有趣的幽默来让读者感到轻松愉快。
3、《笨方法学Python》
这是一本Python入门书籍,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用。这本书以习题的方式引导读者一步一步学习编程,从简单的打印一直讲到完整项目的实现,让初学者从基础的编程技术入手,最终体验到软件开发的基本过程。
推荐理由:编程入门的必备书,从一个个的小例子入手,不仅是教你写Python代码,还有编程的技巧。
4、《Python编程快速上手》
本书的首部分介绍了基本Python编程概念,第二部分介绍了一些不同的任务,通过编写Python程序,可以让计算机自动完成它们。同时,每章的末尾还提供了一些习题和深入的实践项目,帮助读者巩固所学的知识。
推荐理由:本书尤其适合缺乏编程基础的初学者,语法使用Python 3,书中不仅介绍了Python语言的基础知识,而且还通过项目实践教会读者如何应用这些知识和技能。有其它编程语言经验的同学,也可以直接看着本书快速了解Python可以做什么,语法问题可以边做东西边查!
5、《Python核心编程》
书中内容总共分为3部分。
第1部分为讲解了Python的一些通用应用,包括正则表达式、网络编程、Internet客户端编程、多线程编程、GUI编程、数据库编程等。第2部分讲解了与Web开发相关的主题,包括Web客户端和服务器、CGI和WSGI相关的Web编程、Django Web框架等。第3部分则为一个补充/实验章节,包括文本处理以及一些其他内容。
推荐理由:它仔细、深入地剖析了一些重要的Python主题,而且读者无需大量的相关经验也能看懂。与所有其他Python入门类图书不同的是,它不会用隐晦、难以理解的文字来折磨读者,而是始终立足于帮助读者牢固掌握Python的语法和结构。
想要快速入门Python开发,仅靠看书怎么够,毕竟编程最重要的就是练习。
Python数据分析怎么使用,都需要学习什么技术? Python种面向对象、直译式计算序设计语言,由Guido van Rossum于1989年底发明。由于他简单、、免费开源、可移植性、可扩展性等特点,Python又被称之为胶水语言。下图为主要程序语言近年来的流行趋势,Python受欢迎程度扶摇直上。
Python数据分析,主要需要学习以下内容:
1、Python语法基础
2、Python数据分析扩展包:Numpy、Pandas、Matplotlib等
3、Python爬虫基础(非必须,但可以提升兴趣)
4、Python数据探索及预处理
5、Python机器学习
python的下载和安装环境:难点主要是在环境的安装上,很多小白往往一腔热血但是面对环境安装的时候就泄了气,因为我会用Anaconda为例进行环境的安装,同时我建议初学者不要下载具有IDE功能的集成开发环境,比如Eclipse插件等。
数据类型:python的数据类型比较简单,基本上就可以分为两大类——数值和字符串。
数值:数值是python最基础的数据类型,也是我们赋值给变量时最常用的形式,主要包括整型、布尔型等。
字符串:也就是文本数据,在python中一般用引号来定义,可以通过python进行拼接和重叠,实现文本数据的处理;
索引和切片:索引是有序列每个子元素在序列的位置,切片就是对序列的部分截取。
数据结构:python的数据结构可以分为四种,列表、元组、字典、集合。
列表:用中括号表示,可以容纳任何对象元素,包括字符串,而且每个元素都可以变化;
元组:其实就是一个固定的列表,初始化元素的值是绝对不能变化的;
字典:可以理解为现实的字典,通过查找拼音(键)就能找到这个读音的所有字(数值);中
集合:数学上的概念,每个集合中的元素是无序的,不可重复的对象;
数据分析的目的是从数据里找规律,因此想要掌握python必须要学习一些基础的数理理论,这是成为一个数据分析师必备的能力。对于python来说,其涉及的数理统计学基础主要由算法、统计学、概率论等
sql是python的基础,如果你已经掌握了SQL,那么这一章你就可以直接跳过,那么你就要好好学习这部分的内容,因为sql是入门python的关键基础,同时它也是每个数据分析师必备的技能,主要目的是用sql来进行增删改查等操作,对数据进行筛选。
最后免费分享给大家一份Python全套学习资料,包含视频、源码,课件,希望能帮到那些不满现状,想提升自己却又没有方向的朋友。
关于Python技术储备 学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线 Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
描述
输入一个字符串,输出字符串中单词的倒序。
要求
构成单词的字符只有26个大写或小写英文字母。非构成单词的字符均视为单词间隔符;倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符每个单词最长20个字母。 示例1
输入:I am a student
输出:student a am I
示例2
输入:$bo*y gi!r#l
输出:l r gi y bo
C语言:每次输入指定字符集即一个单词,将其放入数组中,再进行倒序输出。
#include <stdio.h>
#include <stdlib.h>
int main() {
char ch[200][30];
int i=0;
while(1)
{ //输入指定字符集即大小写字母
scanf("%[a-z|A-Z]",ch[i]);
if(getchar()=='\n')
break;
i++;
}
for(int j=i;j>=0;j--)
{
printf("%s ",ch[j]);
}
return 0;
}
Java:以非大小写字母为分隔符,将输入的整个字符串进行分割,将分割得到的字符串数组即单词数组倒序存入新字符串中,新字符串每两个单词中间有一个空格,打印新字符串。
import java.util.Scanner;
public class Main {
public static void main(String[] args) { Scanner in = new Scanner(System.in);
String str=in.
文章目录 更新状态黑客成长日记:二进制安全学习精髓:The Journey,part 0x0:PogrammingPart 0x1: Vuln research basicsPart 0x2:Diving to the deep waterTips to really Master Something @LiveOverflowPart 0x3: Pwn,RepeatPart 0x4: Vuln discoveryPart 0x4: Vuln discoveryPart 0x5: Vuln discovery -CTFs vs. IRL 自我描述:个人感悟:前言部分:必学书籍:基础书籍黑皮书系列Andriod安全Windows安全二进制PWN(Advanced 进阶)Linux平台 学习资料Advanced进阶:学习网站:关于就业:专家推荐推荐书单:计算机及系统原理:编程开发编程语言调试技术数据结构与算法编译原理其他网络技术安全技术 安全开发逆向工程Web安全软件/系统安全无线电安全硬件安全汽车安全产品运营设计运维软技能 更新状态 2023年8月8日更新了更新状态,顶置须知改名"黑客成长日记"
2023年5月3日更新了更新状态,顶置须知。
2023年4月21日更新了顶置须知,更新状态,自我描述。
2023年4月6日正文部分更新了顶置须知,个人感悟,必学书籍,关于就业,新增栏目顶置须知,个人思考。
2022年11月16日正文部分更新了必学书籍,学习资料,Advanced 进阶,学习网站平台,关于就业
黑客成长日记: 分享一段在《遥远的救世主》中,丁元英说过的话:
1.想要干好事记住两句话,别把自己太当人,别把别人太不当人。天下乌鸦一般黑
2.生存法则很简单,就是忍人所不忍, 能人所不能。忍是一条线,能是一条线。这个两者中间就是生存空间。如果我们真能做到忍人所不忍,能人所不能,那我们生存空间比别人大。
3.天下之道论到极致,百姓的柴米油盐,人生冷暖论到极致,男人和女人之间一个情字。
4.所谓真经,就是能达到寂空涅槃的究竟法门,可悟不可修,修为成佛,在求。悟为明性,在知,修行以行制性,悟道以性施行,觉者由心生律修者以律制心,有幸无证者虽不落恶果,却助因助果助念助心,如是生灭,不得涅槃。
5.透视社会层次有三个层面:技术、制度、文化,小到一个人,大到一个国家,一个民族,任何一种命运都是那种文化属性的产物。强势文化造就强者,弱势文化造就弱者。
——2023年8月14日
非常抱歉,这段时间我消失了,停止了更新博文。我在学习免杀技术,并且对其有深刻的了解,目前学习了各种安全软件的防御机制,我学会了以最简单的loader方式绕过DF,360,卡巴斯基等杀毒软件的简单方法,从0到1学习免杀技术只花了1周时间,现在学习红队操作的技术,。我父亲从事嵌入式开发,感谢他带领我进入了计算机行业,让我找到自己热爱的领域,他希望我与他同行,但是我的确对此无兴趣,所以我们长期在某些观点上存在争议。我自己的目标:成为一个手握0day,几秒拿下天下计算机的黑客,这也是大多数同行们奋斗的目标吧,所以我选择二进制安全的行业,我明白国内企业除了几个实验室或者体制内工作,多数安全企业不招这方面的人。我希望能慢慢成长,常年累月下来,先成为Windows的专家,在转向Linux平台,虽然我不能达到MJ0011的高度,但是他一直是我学习的榜样。从开发到挖洞,从ring3到ring0,从LPE到RCE,从OD到WD,有一天我有资格说自己是专家的,C友们再回。 ——2023年8月8日
前一周4月28日清华大学112周年校庆,发表了一篇叫作《敢为》的公众号。我在此处分享一段我比较喜欢的话。
敢,行天下之先;为,他人之不为。
路虽远,行则将至;敢为者,敢而行之。
------2023年5月4日
书单包括了个人的与泉哥推荐的,当然我自己的书单还没学完,而且不够全面和专业,我不能保证"啃书"的学习方式的正确性,所以请你自行制定个人培养方案。
-----------2023年4月6日
今日夜晚Google一手二进制安全学习路线,我的文章没有被收录,很遗憾。看到了腾讯泉哥(我的偶像,漏洞战争作者)在知乎上2020年有关"二进制安全"的回答。
泉哥分享了一个关于德国高中生无任何基础一年之内如何挖掘到Edge浏览器RCE漏洞的故事。拜读完之后,我感到特别惊诧和激动。
分享视频: https://media.ccc.de/v/35c3-9657-from_zero_to_zero_day#t=174
二进制安全学习精髓: 1、学习编程语言(C/C++、asm等等)
2、学习操作系统原理
3、学习常见二进制漏洞原理
4、打打CTF,写写write-up
目录
问题现象
解决方法
解决方法一,在试用ubuntu中通过图形界面调整分辨率
1. 在安装界面点击“try ubuntu”
2.找到设置选项,设置分辨率
3.上述步骤完成后重启即可
解决方法二,从virtualBox的配置上修改分辨率
1. ctrl+R运行windows宿主机cmd命令
2.进入virtualBox软件目录,执行命令调整分辨率
3.上述步骤完成后重启即可
解决后效果
问题现象 安装ubuntu时, virtualBox 默认界面分辨率为600x800。这个分辨率下,ubuntu安装界面甚至都没法显示齐全。
(安装界面不全,甚至连下一步的按钮都点不到。。。)
解决方法 解决方法一,在试用ubuntu中通过图形界面调整分辨率 1. 在安装界面点击“try ubuntu” 2.找到设置选项,设置分辨率 1)点击电源选项;
2)点击设置按钮:
3)设置选项卡中左侧滚动条拉到底部;
4)找到“设备”选项,选中;
5)选择“显示”标签页;
6)点击“分辨率”;
7)选择合适的分辨率;
8)点击“应用”
9)点击“保存”
3.上述步骤完成后重启即可 解决方法二,从virtualBox的配置上修改分辨率 1. ctrl+R运行windows宿主机cmd命令 2.进入virtualBox软件目录,执行命令调整分辨率 1)进入安装目录:
命令:
cd "D:\Program Files\Oracle\VirtualBox" 如果上述命令执行后还在c目录,可以试试以下命令执行
# 先进入D目录 > D: > cd "D:\Program Files\Oracle\VirtualBox" 2) 调整分辨率参数:
VBoxManage.exe setextradata "ubuntu_vm_name" CustomVideoMode1 1360x768x32 其中ubuntu_vm_name改成你的虚拟机命名,记得加上双引号;
1360x768x32是分辨率参数:中间的x是小写字母;前两位数值同第一种解决方案,选择合适的你的即可;第三位是颜色位,填32即可。
3.上述步骤完成后重启即可 解决后效果
目录
安装部署Calico 网络
(一)环境准备
(二)部署docker环境
(三)部署kubernetes集群
(四)部署Calico网络插件
安装部署Calico 网络 (一)环境准备 IP地址
主机名
组件
192.168.100.131
k8s-master
kubeadm、kubelet、kubectl、docker-ce
192.168.100.132
k8s-node01
kubeadm、kubelet、kubectl、docker-ce
192.168.100.133
k8s-node02
kubeadm、kubelet、kubectl、docker-ce
注意:所有主机配置推荐CPU:2C+ Memory:2G+
1、主机初始化配置
所有主机配置禁用防火墙和selinux [root@localhost ~]# setenforce 0 [root@localhost ~]# iptables -F [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disable firewalld [root@localhost ~]# systemctl stop NetworkManager [root@localhost ~]# systemctl disable NetworkManager [root@localhost ~]# sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config 配置主机名并绑定hosts,不同主机名称不同
[root@localhost ~]# hostname k8s-master
[root@k8s-master ~]# cat << EOF >> /etc/hosts
引言 在现代软件开发中,时间和效率显得尤为重要。程序员们需要在尽可能短的时间内编写高质量的代码,并使之处于状态良好的维护周期。为满足这些需求,人工智能技术逐渐成为软件开发的一项核心能力。ChatGPT作为自然语言生成模型中的佼佼者,为程序员们提供了一个全新的方式,能够提高他们的开发效率。下面将重点介绍若干个场景,并具体展示如何在JAVA项目中使用ChatGPT,帮助程序员提高开发效率。
福利:文末有chat-gpt纯分享,无魔法,无限制 一、智能化快速生成代码和优化代码 ChatGPT可以智能地快速生成代码,并根据程序员的需求来进行优化。对于不同的编程语言和不同的任务,ChatGPT可以根据程序员的需求生成优化的代码。例如,在编写Java程序时,ChatGPT可以根据需求生成包括类、方法、变量和注释等基本结构的代码,同时还可以优化代码,比如:减少重复代码、简化代码结构、提高代码效率等。在编写Python程序时,ChatGPT可以生成包括函数、变量、模块和异常处理等基本结构的代码,并提供针对性的优化建议,从而提高程序的性能和可读性。此外,ChatGPT还可以根据程序员的输入生成测试代码,帮助程序员进行单元测试和集成测试。这样可以极大的提高程序的健壮性和可靠性。同时,ChatGPT还可以对代码进行模块化设计,降低代码的耦合性,从而增强代码的可维护性和可扩展性。
总之,ChatGPT可以智能地生成和优化代码,帮助程序员提高开发效率和质量,减少出现错误的概率,从而提高程序的可靠性和稳定性。
1.1 目录
引言
福利:文末有chat-gpt纯分享,无魔法,无限制
一、智能化快速生成代码和优化代码
1.1生成代码
1.2优化代码
1.3保证线程安全
二、语言转换
1.1 Python–>JAVA
2.2 C++–>JAVA
三 接口文档
总结
如果各位有更多有用的 ChatGPT 使用技巧,欢迎在评论中分享!~
生成代码 帮我写一个日期相关的java方法,入参是一个"yyyy-MM-dd HH:mm:ss"格式的日期字符串,要求出参是Date类型。
import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date; public class DateUtils { /** * 将字符串转换为日期对象 * @param dateString 日期字符串,格式为"yyyy-MM-dd HH:mm:ss" * @return Date对象 * @throws ParseException 如果无法解析日期字符串,则抛出ParseException异常 */ public static Date parseStringToDate(String dateString) throws ParseException { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return dateFormat.parse(dateString); }} String dateString = "
一、概述
本文主要介绍在 VSCode 看代码时,怎样使某个单词高亮显示,主要通过以下三步实现:
安装 highlight-words 插件
配置 highlight-words 插件
设置高亮快捷键F8
工作是嵌入式开发的,代码主要是C/C++的,之前一直用 source insight 4 看代码,最近转到 VSCode ,使用 VSCode 看代码时,发现它居然没有单独使某个单词高亮的功能,也就是 source insight 4 的 Highlight Word,快捷键是 F8。所以写了此文,记录一下。
二、安装 highlight-words 插件
VSCode 默认没有单独使单词高亮的功能,需要通过安装插件来实现,在扩展菜单里搜索highlight-words,然后安装 highlight-words 插件,步骤如下图:
打开扩展菜单;
搜索 highlight-words;
安装 highlight-words;
三、配置 highlight-words 插件
在 highlight-words 插件的细节页面,往下滑,会看到一些默认配置:
修改 settings.json 配置文件
从插件的细节页面复制出来的默认配置,经过稍微修改,变成下面代码:
"highlightwords.colors": [ { "light": "#b3d9ff", "dark": "cyan" }, { "light": "#e6ffb3", "dark": "pink" }, { "light": "#b3b3ff", "dark": "lightgreen" }, { "
关于虚拟机网络故障的解决 ⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
个人网站:https://jerry-jy.co/
虚拟机ping不同外网,ping不同本机了,Xshell连接不上去了,注意这里的网关应该这样设置
Windows设置
重新启动网络服务有三条命令
sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service network-manager start 修改CentOS网络
vim /etc/sysconfig/network-scripts/ifcfg-ens33 –end–
天锐绿盾解决方案
伴随着各种计算机辅助软件、管理软件、协同软件的深度应用。湖南建科园林有限公司越来越多的信息以电子文档的形式储存在网络的各个节点上,其中包含着大量的设计图纸、商业计划等重要资料,成为关系企业生存发展的数字资产,一旦被黑客窃取或内部人员有意无意的文件加密泄露防不胜防,不但会减弱企业的核心竞争力,影响到长远的发展,更会给企业的声誉造成重大的负面影响。湖南建科园林选择天锐绿盾来保护他们的信息数据安全,已经充分考虑敏感性数据面临的各种主动泄密和被动泄密风险。
PC访问地址:isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 机密图纸等重要数据透明加密
天锐绿盾数据透明加密模块采用的是先进的文件内核驱动层加密技术。在不影响员工对电脑任何正常操作的前提下,图纸在复制、新建、修改时被系统强制自动加密。加密图纸只能在设计院内部电脑上正常使用,未解密的情况下脱离设计院内部的网络环境,在外部电脑上打开便会显示乱码或无法打开。加密图纸只有被管理员解密之后,带出企业才能正常使用,天锐绿盾加密软件确保机密图纸安全。
设计与其他部门之间的文档流转控制
设计作为企业的核心部门,为了防止勘测数据、设计方案等重要资料在单位内部自由流转扩散,天锐绿盾文档安全管理模块可有效做到对不同岗位、部门人员的文档使用权限进行详细的划分。即授权指定部门或用户只能访问指定部门的文件,权限外的其他文件,即使获取到,也无法打开,确保流转信息安全。
勘测数据、设计方案的外带安全掌控
基于单位员工要经常出差到现场办公的情况,天锐绿盾加密系统提供离线管理功能来保证员工出差时对加密文档的正常使用。对离线外带的电脑设置离线管理,员工终端登录时,可以使用口令认证或者USBKey认证,认证成功后,电脑上的加密文件正常使用。当超过限定离线时间,电脑上的所有加密文件全部打不开。
保障设计资料与合作伙伴的交互安全
为了保障与合作单位之间的文件交互安全,天锐绿盾提供了文档外发管理模块。支持用户根据外发文档的重要性不同授予不同的认证方式和访问权限;设置成功后,外发文档可通过各种方式外发。外部用户无需安装客户端,经过身份认证后,即可在授权范围内访问该文档。
目前大环境下,研发人员流动性很强,这就要求企业建立一套机制,对企业自己的知识库和项目源代码和图纸,技术文档等进行安全控制,不但要对在职人员的主动泄密行为进行管控,更要杜绝离职人员拿走公司的核心资料,避免因泄密给企业造成损失。另外,源代码行业特点要求必须进行源代码加密管理。源码管理工具是一种记录代码更改历史,可以无限回溯,用于代码管理,多个程序员开发协作的工具。比如SVN/GIT等,这就要求源代码加密软件能够与这些源代码管理工具进行无缝兼容。
PC端访问地址: 首页 一般对于源代码加密的需求如下:
1、源代码防泄密的核心需求是:不绑定程序、文件,不区分文件大小,不影响速度,不影响上网。在不影响开发调试效率的前提下,有效管控网络,邮件,屏幕截图等泄密途径。
2、应用软件的开发环境比较复杂,开发平台大部分是windows平台的,但也有很大一部分是linux和MAC平台,所以防泄密软件需要能够适应复杂的开发环境。
3、支持同SVN、CVS、VSS等版本管理服务器无缝结合,当源代码更新上传至服务器时自动解密,下载至终端时自动加密保护。
PC端访问地址: 首页 在不改变研发人员原有工作习惯和工作流程的情况下,系统对EditPlus、Notepad++、Keil、Visusl studio等源代码开发工具,以及CAM350、PADS等电路设计软件进行受控加密保护。源代码加密后,不影响软件的正常编译,合法用户正常双击打开,在授权范围内使用。
通过Nacos Server 和 nacos-config-spring-boot-starter 实现配置的动态变更;
通过Nacos Server和nacos-discovery-spring-boot-starter实现服务注册与发现。
前提条件 您需要先下载 Nacos 并启动 Nacos server。操作步骤参见 [Nacos 快速入门](https://nacos.io/zh-cn/docs/quick-start.html)。 启动配置管理 启动了 Nacos server 后,您就可以参考以下示例代码,为您的 Spring Boot 应用启动 Nacos 配置管理服务了。完整示例代码请参考:[nacos-spring-boot-config-example](https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-boot-example/nacos-spring-boot-config-example) 添加依赖。
<dependency>
<groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> <version>${latest.version}</version> </dependency>
** 注意**:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版
本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。
在 application.properties 中配置 Nacos server 的地址: nacos.config.server-addr=127.0.0.1:8848
使用@NacosPropertySource加载 dataId 为 example 的配置源,并开启自动更新:
@SpringBootApplication
@NacosPropertySource(dataId = "example", autoRefreshed = true)
public class NacosConfigApplication {
postman前端请求详解 主界面1.常见类型的接口请求1.1 查询参数的接口请求1.1.1 什么是查询参数?1.1.2 postman如何请求 1.2 ❤表单类型的接口请求1.2.1 复习下http请求1.2.2❤ 什么是表单 1.3 上传文件的表单请求1.4❤ json类型的接口请求 2. 响应接口数据分析2.1 postman的响应数据展示2.2 数据对我们做接口测试的作用2.3 接口响应Body中的显示主题 3. 接口管理(Collection)3.1 具体步骤3.2 图形化界面3.3 批量执行接口请求 4. 日志调试4.1 查看打印日志4.2 其他实用的功能 5. 断言5.1 断言的特点5.2 书写断言5.3 常用的断言5.3.1 状态行中的断言:5.3.2 响应头中的断言5.3.3 响应体中的断言(断言响应体)5.3.5 响应时间(一般用于性能测试) 6. 变量(全局/集合/环境)6.1 常用的三种变量6.2 定义变量6.3 获取变量 7. 请求前置脚本8. 接口关联9. 常见返回值的获取 主界面 1.常见类型的接口请求 常见的接口有如下四种类型,分别是:
❤含有查询参数的接口 (就是url地址中问号?后面的部分,这个就叫查询参数)❤表单类型的接口❤json类型的接口❤含有上传文件的接口 以下就对这四种类型接口及如何在postman中请求进行说明 。
1.1 查询参数的接口请求 1.1.1 什么是查询参数? 所谓的查询参数,其实就是URL地址中问号(?)后面的部分就叫查询参数,比如:http://cx.shouji.360.cn/phonearea.php?number=13012345678 。
在这个接口中,查询参数就是:number=13012345678 。
而这一部分是由键值对组成,格式为:key1=value1&key2=value2, 如果有多组键值对,要用&隔开
1.1.2 postman如何请求 在postman中实现对这类接口请求非常简单,一般就需要明确俩个参数即可,一个是请求方法,一个请求地址。
针对上面的那个接口,地址已经给出 ,而它的请求方法是get 。那么在postman中只需要把这俩个参数填写上即可请求 。
具体实现步骤:
这里写目录标题 1、如果页面元素经常发生需求变化,你是如何做?2、在你做自动化过程中,遇到了什么问题吗?举例下3、如何处理alert弹窗4、在selenium中如何处理多窗口?a、获得百度浏览器的搜索页面窗口b、点击“hao123”标签,跳转到hao123页面c、获取所有的窗口句柄d、切换到hao123页面e、如果再次切换到搜索页面 5、你查找元素遇到过在Frame里面吗?你是如何处理Frame里面元素定位的?切换到frame中回到主页中 6、如何处理下拉菜单?a、通过text文本查找b、通过value值查找 7、关闭浏览器中quit和close的区别?8、如何实现文件上传(待补充)?第一种方法:send_keys第二种方法:pywinauto 9、如何实现鼠标悬停,键盘事件和拖拽动作?a、鼠标悬停b、拖拽动作c、双击 10、在selenium自动化测试中,你一般完成什么类型的测试?11、自动化测试有误报过bug吗?产生误报怎么办(*)?12、自动化测试过程中,你遇到了哪些问题,是如何解决的(*)?13、如何提高selenium脚本的执行速度14、怎么对含有验证码的功能进行自动化测试15、自动化测试的使用场景(重要)?16、请描述一下自动化测试流程(重要)?17、web和app自动化有什么不同(重要)?18、http和https不同点(重要)19、Selenium 中如何保证操作元素的成功率?也就是说如何保证我点击的元素一 定是可以点击的?20、鼠标操作常用函数(待补充) 1、如果页面元素经常发生需求变化,你是如何做? 利用po模式,业务逻辑和测试逻辑相分离,当某个页面经常发生变化只需要维护页面,包括元素定位表达式,封装业务方法;不需要修改测试逻辑;
页面经常变化正是自动化测试的痛点,我们改不了需求,目前利用po模式是最有效的解决方法。
2、在你做自动化过程中,遇到了什么问题吗?举例下 a、页面经常变化,需要修改脚本
b、脚本不稳定,经常性的跑失败
c、提升效率,会影响稳定性
3、如何处理alert弹窗 先切换到弹窗:alert=driver.switch_to.alert
确认:alert.accept()
取消:alert.dismiss()
获取弹窗中文本:alert.getText()
弹窗中输入内容:alert.sendkeys()
4、在selenium中如何处理多窗口? 以百度浏览器测试:
a、获得百度浏览器的搜索页面窗口 search_window=driver.current_window_handle b、点击“hao123”标签,跳转到hao123页面 driver.find_element_by_xpath('//a[text()="hao123"]').click() time.sleep(2) c、获取所有的窗口句柄 all_handles=driver.window_handles d、切换到hao123页面 for handle in all_handles: if handle!=search_window: driver.switch_to.window(handle) driver.find_element_by_xpath('//a[text()="网易"]').click() e、如果再次切换到搜索页面 driver.switch_to.window(search_window) 5、你查找元素遇到过在Frame里面吗?你是如何处理Frame里面元素定位的? 切换到frame中 def switch_frame(frame_el): driver.switch_to.frame(frame_el) el=driver.find_element_by_xpath('//input[@id="kw"]') el.input('kobe') frame_el=driver.find_element_by_xpath('//iframe[@name="baidu"]') switch_frame(frame_el) 回到主页中 driver.switch_to.default_content() 6、如何处理下拉菜单? a、通过text文本查找 def select(el): s=Select(el) #初始化Select对象 s.select_by_visible_text('kobe') el=driver.find_element_by_xpath('//select[@id="faver"]') b、通过value值查找 def select(el): s=Select(el) s.select_by_value('double') el=driver.find_element_by_xpath('//select[@id="faver"]') 7、关闭浏览器中quit和close的区别? driver.quit():关闭整个浏览器
我这里使用是springboot项目,使用nginx做代理,但header里面的参数没有将ip带过来,所有需要配置nginx将ip带过来。
nginx.conf文件
server { listen 80; listen 443 ssl; server_name xxx.xxx.com; ssl_certificate /web/project/ai-master/ssl/xxx.xxx.com_bundle.pem; ssl_certificate_key /web/project/ai-master/ssl/xxx.xxx.com.top.key; #接口 location /api { #保留代理之前的host 包含客户端真实的域名和端口号 proxy_set_header Host $host; #保留代理之前的真实客户端ip proxy_set_header X-Real-IP $remote_addr; #这个Header和X-Real-IP类似,但它在多级代理时会包含真实客户端及中间每个代理服务器的IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #表示客户端真实的协议(http还是https) proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://aiMasterServer/api; } } RequestUtil.java文件
/** * @Description:请求处理类 * @author: Adobe Chow * @date: 2019/4/25 10:42 * @Copyright: www.winshang.com Inc. All rights reserved. */ public class RequestUtil { public static HttpServletRequest getRequest(){ HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.
本文对glibc堆管理器的各项主要内存操作,以及glibc 2.26后引入的tcache机制进行源码级分析,可作为查找使用。
glibc memory operations 第一次malloc,会初始分配一个0x290的chunk,top chunk split返回给user后,剩余部分继续作为top chunk通常heap的第一个chunk,prev_inuse都为1,防止非法内存访问 unlink 将双向链表中的一个chunk取出,也就是链表中的删除元素维护fd, bk链表,若为large bin,则同时维护nextsize链表可能的泄漏点:不会修改两个链表的指针,可能会造成chunk地址泄漏 libc地址(通过main_arena)
Chunk 为head chunk,bk泄漏bins地址chunk 为tail chunk,fd泄漏bins地址 泄漏堆地址(中间的chunk都可)
static void unlink_chunk (mstate av, mchunkptr p) { // check chunk size in 2 positions if (chunksize (p) != prev_size (next_chunk (p))) malloc_printerr ("corrupted size vs. prev_size"); mchunkptr fd = p->fd; mchunkptr bk = p->bk; // check double-linked list if (__builtin_expect (fd->bk != p || bk->fd != p, 0)) malloc_printerr ("
目录 1、 Frmebuffer(帧缓冲)操作介绍1.1 显示设备的抽象1.2 内存映像1.3 输出画面数据1.4 用户态下操作屏显1.4.1 用文件I / O 操作屏显1.4.2 mmap() 函数1.4.3 ioctl()函数1.4.5 用命令操作屏1.4.6 测试程序 2、Framebuffer总体框架2.1 框架要点2.2 fbmem.c分析2.2.1 fbmem的入口分析2.2.2 fbmem的接口功能2.2.2.1 向上的接口2.2.2.2 向下的接口 2.2.3 相关函数详解2.2.3.1 proc_create()函数2.2.3.2 fb_proc_fops结构体变量2.2.3.3. register_chrdev()函数2.2.3.4 class_create()函数2.2.3.5 register_framebuffer()函数 2.3 LCD驱动分析(设备树匹配的platform平台驱动)2.3.1 设备树相关内容2.3.2 数据结构及函数struct fb_infostruct fb_var_screeninfo 和 struct fb_fix_screeninfostruct fb_var_screeninfostruct fb_fix_screeninfostruct fb_videomode结构体fb_var_to_videomode()与 fb_videomode_to_var()函数struct fb_ops宏 module_platform_driver 2.3.3 LCD驱动的结构与步骤 3、驱动程序实例4、测试LCD显示的应用程序写在结尾参考 1、 Frmebuffer(帧缓冲)操作介绍 1.1 显示设备的抽象 \qquad Linux是工作在保护模式下,Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。
\qquad Framebuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。
1.2 内存映像 \qquad 显示画面的输出,实际是通过往显存里面写像素数据来实现的。由于显存实际是处于内核态的物理内存,所以下一步要把这块物理内存映射到用户态,这样应用程序就可以直接操作这块物理内存了。
\qquad 内存的映像是在使用时,由使用者通过mmap命令实现的。
1.3 输出画面数据 \qquad 我们有了显存之后,要如何才能将画面数据写入显存了?
\qquad 假设我们当前的环境, xres_virtual、yres_virtual分别为800,960;bpp(像素深度)为32位;所以每个像素用一个int来表示,虚拟屏幕尺寸为800*960像素。
本文为笔者学习heap pwn时,学习阅读glibc ptmalloc2源码时的笔记,与各位分享。可能存在思维跳跃或错误之处,敬请见谅,欢迎在评论中指出。本文也借用了部分外网和其他前辈的素材图片,向各位表示诚挚的感谢!如有侵权,请联系笔者删除。
glibc的堆管理器为ptmalloc2
heap management 堆管理器向kernel申请批量内存,自己管理,堆的内存管理空间称为 arena,堆管理器与用户的内存交易发生在arena中
operations malloc n=0时,返回允许的堆的最小内存块 n<0时,size_t 为无符号数,通常无法分配这么大的内存,返回ERRNOMEM free p 为空指针:无操作p 已经释放后,double free当释放较大内存块后,manager通过系统调用将内存直接还给系统 syscalls (s)brk
堆的内存布局由两个指针控制:start_brk, brk,分别为开始和结尾
mmap
malloc 使用mmap创建独立的匿名映射段,可以申请全0内存,且此内存仅被调用进程所调用
void *mmap(void addr[.length], size_t length, int prot, int flags, int fd, off_t offset); Flags - MAP_ANONYMOUS: 该区域为匿名映射,不与任何文件关联,内存赋初值为0
当单次申请超过128KB内存,并且arena中没有剩余空间,则直接调用mmap申请内存,而不是brk
多线程支持 与之前实现中多线程共享一个堆不同,ptmalloc2中,所有的线程共享多个堆,在堆申请、释放时,不需要等待其他线程退出临界区 critical area
使用pthread多线程,自线程申请的堆单独建立,
上图为thread malloc(0x32000)后的vmmap情况,其中:
heap: 为main_arena空间,为初始化大小0x21000
vmmap堆创建时,总共会申请得到1MB内存(0x7ffff00- ~ 0x7ffff40-),其中仅有132KB(0x7ffff0000000 ~ 0x7ffff0021000 = 0x21000B)内存可以作为堆内存进行读写,这是堆默认初始大小,当malloc大于0x20000,会直接使用mmap而不是在堆中创建
由于申请的size大于initial heap size,于是进行了扩充
pwndbg> heap // in thread 2 Allocated chunk | PREV_INUSE | NON_MAIN_ARENA Addr: 0x7ffff00008c0 // tcache_perthread_struct Size: 0x290 (with flag bits: 0x295) Allocated chunk | PREV_INUSE | NON_MAIN_ARENA Addr: 0x7ffff0000b50 // printf in use Size: 0x410 (with flag bits: 0x415) Allocated chunk | PREV_INUSE | NON_MAIN_ARENA Addr: 0x7ffff0000f60 // 0x32000 user space allocated Size: 0x32010 (with flag bits: 0x32015) Top chunk | PREV_INUSE Addr: 0x7ffff0032f70 // remainder / top chunk Size: 0x90 (with flag bits: 0x91) 其他多线程支持机制:
文章目录 1 前言2 解锁 Streamlit 中的 st.dataframe 功能3 使用st.data_editor进行数据编辑4 定制数据编辑器 - 使用 st.column_config4.1 使用 st.column_config.Column 定制数据编辑器的列4.2 使用 st.column_config.TextColumn 定制数据编辑器的文本列4.3 使用 st.column_config.NumberColumn 定制数据编辑器的数字列4.4 使用 st.column_config.CheckboxColumn 定制数据编辑器的复选框列4.5 使用 st.column_config.SelectboxColumn 定制数据编辑器的下拉框列4.6 使用 st.column_config.DatetimeColumn 定制数据编辑器的日期时间列4.7 使用 st.column_config.DateColumn 定制数据编辑器的日期列4.8 使用 st.column_config.TimeColumn 定制数据编辑器的时间列4.9 使用 st.column_config.ListColumn 定制数据编辑器的列表列4.10 使用 st.column_config.LinkColumn 定制数据编辑器的链接列4.11 使用 st.column_config.ImageColumn 定制数据编辑器的图片列4.12 使用 st.column_config.LineChartColumn 定制数据编辑器的折线图列4.13 使用 st.column_config.BarChartColumn 定制数据编辑器的柱状图列4.14 使用 st.column_config.ProgressColumn 定制数据编辑器的进度条列 5 使用 st.table 展示数据框6 使用 st.metric 展示指标数据6.1 使用 st.columns 和 st.metric 创建单个指标数据显示6.2 使用 st.columns 和 st.
首先说明一下,我是已经安装了android studio,也配置了环境变量,但是还是连接不上手机
解决方案:
1.打开开发者模式
https://product.pconline.com.cn/itbk/sjtx/sjwt/1424/14246015.html
2.开启usb调试
https://baiyunju.cc/10770
最后成功:
目录 前言1. RAII接口模式封装生产者消费者2. 问答环节总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。
本次课程学习 tensorRT 高级-RAII 接口模式下的生产者消费者多 batch 实现
课程大纲可看下面的思维导图
1. RAII接口模式封装生产者消费者 这节课我们利用上节课学到的 RAII + 接口模式对我们的消费者生产者进行封装
我们来看代码
infer.hpp
#ifndef INFER_HPP #define INFER_HPP #include <memory> #include <string> #include <future> class InferInterface{ public: virtual std::shared_future<std::string> forward(std::string pic) = 0; }; std::shared_ptr<InferInterface> create_infer(const std::string& file); #endif // INFER_HPP infer.cpp
#include "infer.hpp" #include <thread> #include <queue> #include <mutex> #include <future> using namespace std; struct Job{ shared_ptr<promise<string>> pro; string input; }; class InferImpl : public InferInterface{ public: virtual ~InferImpl(){ worker_running_ = false; cv_notify_one(); if(worker_thread_.
无法获取dpkg前端锁问题 问题尝试解决(可跳过)最终解决 问题 相信经常用Linux的朋友经常会碰到这类问题,注意下面命令应该是
sudo apt update 尝试解决(可跳过) ps命令查看进程
ps -e|grep apt-get 注意当你用的是apt命令的时候,需要改为
ps -e|grep apt 关于apt与apt-get命令不同请参考:Linux必备基础中的安装软件章节
kill命令杀死进程
sudo kill 3450 还是不能解决
注意之所以不行是因为上面是报进程占用时候的解决办法,报进程占用的错误如下
E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它? 最终解决 执行下面两条命令解决
mkdir -p /var/lib/dpkg/{alternatives,info,parts,triggers,updates} cp /var/backups/dpkg.status.0 /var/lib/dpkg/status 测试一下,解决了
这里无法解析域名的原因八成是因为没有联网的原因,这时候你ping一下就会发现ping不通,此时请参考:Ubuntu网络设置
解决了网络问题基本上就ok了
因为我本人一直在虚拟机上使用Ubuntu,每次歇一会不用,再进去就要输密码登录,有时候频繁输密码,真的让人头疼。这里简单记下取消开机密码,自动登录
打开设置,选择详细信息
在用户里选择解锁
输入登陆密码后,打开自动登录即可
下次自动锁屏,再登录应该不需要再输入密码了
1.通过例子例子学习Rust:
Hello World - 通过例子学 Rust 中文版
2.Rust语言学习圣经:
关于本书 - Rust语言圣经(Rust Course)
引言:在搭建项目时如果把上传的文件存储在该项目运行的主机上,会导致访问该项目时加载非常缓慢,因此需要对象存储。并且对象存储具有网站数据动静分离,大幅提升网页性能,储存节点多,支持跨地域实时同步,成本低,可节省服务器空间等优点。本文讲诉的是如何使用七牛云对象存储,用七牛云是因为七牛云送10G空间,对于小网站来说足够了。
七牛云官网
七牛云Java SDK官方文档
1.先在pom.xml中导包 <!--第一种导包方式--> <!--导入指定的7.7.0版本--> <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>7.7.0</version> </dependency> <!--第二种导包方式--> <!--这里指定了一个版本范围,每次更新pom.xml的时候会下载7.7.x版本中的最新版本--> <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>[7.7.0, 7.10.99]</version> </dependency> 2.创建一个QiniuCloudUtil工具类并定义几个必要的变量 不知道这些变量在哪的可以参考 文章 该文章有提及以下变量在哪和如何创建存储空间
public class QiniuCloudUtil { private static final String QiniuCloud_accessKey = "你七牛云的accessKey"; private static final String QiniuCloud_secretKey = "你七牛云的secretKey"; private static final String QiniuCloud_bucket = "你七牛云的存储空间名称"; private static final String QiniuCloud_domainName = "http://你七牛云的存储空间链接"; private static final String customSuffix = ".png";//定义图片保存后的后缀 } 3.上传文件 public class QiniuCloudUtil { /** * 上传图片到七牛云 * @param file 图片 * @return 返回图片存储后的新图片名 * @throws Exception */ public static Object QiniuCloudUploadImage(MultipartFile file) throws Exception{ if(file.
训练一个个人小秘书的过程需要一定的技术知识和资源,以下是一个基本的概述,但请注意,这个过程可能需要相当的时间、计算资源和技术专业知识。
步骤一:数据准备
收集和整理训练数据:你需要大量的文本数据来训练模型。这些数据可以包括书籍、文章、维基百科条目、论坛帖子等。数据越丰富和多样,模型的表现可能越好。
步骤二:选择模型架构
GPT系列模型是一个不错的选择,你可以选择像GPT-3.5这样的版本。这些模型在多个领域都表现得很出色,但也需要大量的计算资源来训练和使用。
步骤三:训练模型
环境设置:你需要一台性能强大的计算机或云服务器,以容纳模型训练所需的计算资源。使用GPU或TPU可以大大加快训练速度。
Fine-tuning(微调):由于GPT模型已经经过大规模的预训练,你可能只需要对其进行一些微调,以使其更适应特定任务。这可能需要一些领域专业知识,以便对模型进行调整。
训练过程:使用你准备好的文本数据来训练模型。训练时间可能会很长,具体取决于模型的规模、数据集的大小和计算资源的能力。
步骤四:设置互动界面
开发一个与模型互动的界面,使用户可以输入问题或指令,并获取模型生成的回复。你可以使用Web应用程序、聊天机器人平台或其他适合的工具来实现这个界面。
步骤五:优化和改进
测试和调试:对于初次训练出来的模型,可能需要进行多轮的测试和调试,以改善其回答的准确性和流畅性。
用户反馈:收集用户的反馈,了解他们在使用小秘书时的体验,并根据反馈不断进行优化和改进。
提示词(Prompts)的使用:
在与模型互动时,你可以使用提示词(Prompts)来引导模型生成特定类型的回答。例如,你可以使用以下提示词:
"帮我解释以下..."" - 用于解释某个概念或主题。
"提供关于...的信息" - 用于获取特定主题的详细信息。
"给我写一封关于...的邮件" - 用于生成邮件文本。
"推荐一本关于...的书" - 用于获取书籍推荐。
使用合适的提示词可以帮助模型更好地理解你的需求并生成相关的回复。
描述
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序。(1 <= nums1.length, nums2.length <= 1000,0 <= nums1[i], nums2[i] <= 1000)
示例1
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例2
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的
思路:新建一个数组,将输入的一个数组的值作为新建数组的下标,相应下标i的新建数组的值设为1,表示数i的个数有1个,如果输入的另一个数组的值,在新建的数组的对应下标的数组值为1,将其数值设为2,表明数i在输入的两个数组中都有,再将新建数组中值为2的下标放入新数组中。
C语言
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
int* arr=(int*)malloc(sizeof(int)*1000);
//两个集合相同元素的个数
int count=0;
for(int i=0;i<nums1Size;i++)
{
arr[nums1[i]]=1;
}
for(int i=0;i<nums2Size;i++)
{
//num2[i]为两个数组共有元素
if(arr[nums2[i]]==1)
{
arr[nums2[i]]=2;