算法-动态规划-编辑距离 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/edit-distance/description/?envType=study-plan-v2&envId=top-interview-150
1.2 题目描述 2 动态规划 2.1 思路 dp[i][j] 表示 word1[0,i) 变换为 word2[0,j)的最少步数,那么转移表达式:
i和j上的字符相同时,则dp[i][j] = dp[i-1][j-1],即这一步不需要做调整i和j上的字符不同时,dp[i][j] = min(dp[i-1][j-1], dp[i][j-1], dp[i-1][j]) + 1,即当前要从i转移到j,有三种情况: i-1 j-1上的字符相同,那么直接现在把i字符替换为j即可i可以直接转为j-1,那么现在就增加一个j字符即可i-1可以直接转为j,那么现在就把i字符删除即可 2.2 代码 class Solution { public int minDistance(String word1, String word2) { // dp[i][j] 表示 word1[0,i) 变换为 word2[0,j)的最少步数 int m = word1.length(), n = word2.length(); int[][] dp = new int[m+1][n+1]; // 初始化,word2长度为0时,word1的所有字符串删除来构成即可 for (int i = 0; i <= m; i++) { dp[i][0] = i; } // 初始化,word1长度为0时,word2的所有字符串增加来构成即可 for (int j = 0; j <= n; j++) { dp[0][j] = j; } for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { if (word1.
1. markdown转pdf vscode的md文件转pdf的插件
右键可以直接转换
但是很久没用,现在重新使用出现了报错
ERROR: Failed to download Chromium! If you are behind a proxy, set the http.proxy option to settings.json and restart Visual Studio Code. 解决办法
首先将插件disabled一下,然后重启vscode
在vscode中打开首选项>设置
搜索markdown,找到markdown-pdf:Executable Path
设置成chrome.exe的地址,谷歌一般是默认安装地址,地址一般大差不差
最后重启vscode即可
2. 自动生成大纲 2.1 安装markdown all in one 2.2 生成大纲 Ctrl + Shift + P 调出主命令框。输入Markdown: Open Preview to the Side
2.3 查看大纲 Ctrl + Shift + o查看大纲
3. 转成pdf后,生成pdf大纲 3.1 安装pandoc 3.1.1 直接安装 pandoc下载
自己选择对应的版本安装,下载后知己解压即可
10月11日,文化和旅游部公布了2023年文化和旅游数字化创新示范十佳案例和优秀案例。百度文心大模型创新文化产品生产方式入选十佳案例,也是唯一一个入选的大模型应用案例。文心大模型获奖类型为运用数字化工具助力艺术创作生产,促进文化机构数字化转型升级。
百度文心大模型入选2023年文化和旅游数字化创新示范十佳案例
中国十大传世名画之一、分别藏于浙江省博物馆及台北故宫博物院的《富春山居图》残卷就是被百度文心大模型实现了线上的补全修复。完成绘画的“奇迹”后,AI还为此题诗一首:“一峰一状百树迎,天水合璧两岸情。”不仅如此,每个人都可以根据自己的想法,补全《富春山居图》缺失的部分。
轻轻几笔连接山河的背后,是百度文心大模型从山水画“小白”向“大师”进阶的过程。通过百度文心大模型的技术赋能,让市场看到了AIGC内容生产模式的独特价值。百度正在推动AIGC打开科技与艺术、文化与创新的新想象力,无论是专业人士还是普通大众,都可以利用AIGC技术进行创作,这无形之中降低了内容创作门槛。
从应用上来看,AI作画将不断融入到各种内容创作场景,除了常见的插画师和艺术设计领域,在移动内容生产、游戏、工业设计、AI教育等场景都会有越来越广泛的应用。
文心大模型补全传世名画《富春山居图》残卷
AI不仅可以作画,通过学习文化资源数据,还可以实现个性化生成美术和音乐产品的功能,创新文化产品生产方式,提高生产效率。例如,在今年全国“两会”胜利闭幕之际,新华社联合文心一格推出AIGC歌曲《驶向春天》,整支MV的原画部分由文心一格提供AI绘画技术支持,呈现了令人眼前一亮的国风画面;广州美术学院的一名大二学生肖遥参加了百度文心一格发起的首届“我造”AI创作大赛,她以兵马俑为创作源泉,通过文心一格设计了一套《赛博朋克兵马俑》潮玩盲盒,从确定创意到画作实现,只花了不到1分钟时间,却被专家评估市场价值超百万。
「我造」 AI创作大赛优秀作品:《赛博朋克兵马俑》潮玩盲盒
文化和旅游部科技教育司有关负责人表示,本次公布的示范案例重在以数字技术赋能文化艺术创作生产、助力公共文化服务水平提升、驱动文化和旅游业态创新等。
随着数字化技术的快速发展,消费者对文化产品和服务的需求不断变化,这就要求文化企业能快速响应市场需求,提供个性化、高质量的文化产品和服务。在当前对文化内容创作质量、时效、科技等多维度都提出了高要求的背景下,百度文心大模型运用数字化工具助力艺术创作生产,为文化产业带来了新的生产运作方式,促进文化机构数字化转型升级。未来以文心大模型为代表的技术将成为推动AIGC发展的新引擎,助力内容生产模式创新,为文旅行业带来更多发展新机遇。
前言:本文会从理论部分、代码部分、实践部分三方面进行PPO算法的介绍。其中理论部分会介绍PPO算法的推导流程,代码部分会给出PPO算法的各部分的代码以及简略介绍,实践部分则会通过debug代码调试的方式从头到尾的带大家看清楚应用PPO算法在cartpole环境上进行训练的整体流程,进而帮助大家将理论与代码实践相结合,更好的理解PPO算法。
文章目录 1. 理论部分2. 代码部分2.1 神经网络的定义2.2 PPO算法的定义2.3 on policy算法的训练代码 3. 实践部分 1. 理论部分 2. 代码部分 这里使用的是《动手学强化学习》中提供的代码,我将这本书中的代码整理到了github上,并且方便使用pycharm进行运行和调试。代码地址:https://github.com/zxs-000202/dsx-rl
代码核心部分整体上可以分为三部分,分别是关于神经网络的类的定义(PolicyNet,ValueNet),关于PPO算法的类的定义(PPO),on policy算法训练流程的定义(train_on_policy_agent)。
2.1 神经网络的定义 策略网络actor采用两层全连接层,第一层采用relu激活函数,第二层采用softmax函数。
class PolicyNet(torch.nn.Module): def __init__(self, state_dim, hidden_dim, action_dim): super(PolicyNet, self).__init__() self.fc1 = torch.nn.Linear(state_dim, hidden_dim) self.fc2 = torch.nn.Linear(hidden_dim, action_dim) def forward(self, x): x = F.relu(self.fc1(x)) return F.softmax(self.fc2(x), dim=1) 价值网络critic采用两层全连接层,第一层和第二层均采用relu激活函数,第二层最后输出的维度是1,表示t时刻某个状态s的价值V。
class ValueNet(torch.nn.Module): def __init__(self, state_dim, hidden_dim): super(ValueNet, self).__init__() self.fc1 = torch.nn.Linear(state_dim, hidden_dim) self.fc2 = torch.nn.Linear(hidden_dim, 1) def forward(self, x): x = F.
micropython ESP32-S3点亮板载RGB灯珠 1、vscode中安装 RT-Thread插件
2、新建个文件夹
3、在这个文件夹下面创建一个文件,命名为neopixel.py。在该文件中粘贴下面代码。
# NeoPixel driver for MicroPython on ESP32 # MIT license; Copyright (c) 2016 Damien P. George from esp import neopixel_write class NeoPixel: ORDER = (1, 0, 2, 3) def __init__(self, pin, n, bpp=3, timing=0): self.pin = pin self.n = n self.bpp = bpp self.buf = bytearray(n * bpp) self.pin.init(pin.OUT) self.timing = timing def __setitem__(self, index, val): offset = index * self.bpp for i in range(self.
目录 问题解决方法步骤1:settings.xml 配置1,然后 Update 本地Local仓库步骤2:settings.xml 配置2,添加镜像配置步骤3 其他问题 问题 本来 Local 的 Updated 是 Error 的状态,忘记截图了,只好用已经解决的结果效果图,Error 差不就和远程差不多。
这里的关键所在无需解决 Remote 远程问题,只需要解决 Local Error 的问题,就可以远程。
解决方法 测试记录:
测试环境:
maven 3.8.4
Java 8
在本地安装 Maven,安装链接如下所示:
超详细maven的卸载、重新安装与配置
笔者没那么复杂,但笔者建议在配置这个镜像 <mirrors></mirror>前,最好是先 Update 一下,先更新下中央仓库的索引,即先加上 <localRepository></localRepository>然后 Update 后,再添加<mirrors></mirror>,如果这样子还无法解决 Local 本地仓库的 Error 问题,那么就要考虑翻墙梯子,可以翻墙,然后在更新 Update 如下:
步骤1:settings.xml 配置1,然后 Update 本地Local仓库 <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <!-- <localRepository>/Users/Fred/Downloads/apache-maven-3.5.4/repository</localRepository> --> <localRepository>D:/Environment/maven-3.8.1/myRepository</localRepository> <pluginGroups> </pluginGroups> <proxies> </proxies> <servers> </servers> <mirrors> </mirrors> <profiles> </profiles> </settings> 只关注 Local,而 Remote 的不用理会。
有些时候需要访问模型网格Mesh的数据,比如遍历他的顶点(vertices)等数据,像这样的:
for (int i = 0; i < mesh.vertices.Length; i++)
{
}
问题就来了就是这样简单的一句代码,甚至在循环体内部都没有任何操作,为什么还会有性能问题,特别是当模型顶点数比较多而又在update中跑的时候就非常明显了。
罪魁祸首就是这个大量的GC带来的问题,但是光看这句for循环代码是很难发现问题的,而Mesh类中的vertices属性的注释其实就说明了这个问题:
每次访问vertices时其实是会返回一个副本的而不是直接返回引用(难道内部是为了保证Mesh属性的稳定性,不想让外部轻易修改?也可能是其他考虑吧)。返回数组副本就需要重新开辟内存空间,每次访问都会有一次新的存储空间的开辟,顶点越多,访问的次数也就越多,而且每次开辟的空间也会越大(长度就是顶点数),所以这里的性能问题就随着顶点数的增多非线性的增加。所以Mesh也贴心的准备了一个属性叫vertexCount,就是不要轻易去访问他的数组属性。
经测试,不经vertices属性是这样,其他的几个数组属性如color,triangles等都是这样的。
这也能解释为什么我们直接修改数组中的属性不会生效,比如:
vertices[i].y += 1;//将某个顶点的y坐标加1
就是因为这里是修改的副本中的数据,并没有真正修改到mesh中的数据,如果需要修改需要用这个方式:
mesh.vertices = myVertices;
unity给出了解决办法,可以让mesh放在多线程中使用
在新版本的Unity中提供了MeshDataArray和MeshData等多个API,使Mesh数据操作支持多线程;以更好的支持DOTS。
API文档:https://docs.unity3d.com/es/2020.2/ScriptReference/Mesh.MeshData.html
using UnityEngine; public class ExampleScript : MonoBehaviour { void Start() { var mesh = new Mesh(); mesh.vertices = new[] {Vector3.one, Vector3.zero}; using (var dataArray = Mesh.AcquireReadOnlyMeshData(mesh)) { var data = dataArray[0]; // prints "2" Debug.Log(data.vertexCount); var gotVertices = new NativeArray<Vector3>(mesh.vertexCount, Allocator.TempJob); data.GetVertices(gotVertices); // prints "
1 无 .gitignore 文件时,在项目文件右键,Git Bash 进入命令行
输入
touch .gitignore
生成gitignore文件
2 、在文件.gitignore里输入
node_modules/
dist/
来自于:vscode git提交代码忽略node_modules_老妖zZ的博客-CSDN博客
扫描转换椭圆与圆的绘制 前提 我们先来设计一种数据类型
class Point{ public: double x,y; Point(){this->x = 0; this->y = 0;} Point(double x, double y){this->x=x;this->y=y;} }; 注意此处的类型为double这一点很重要,因为在某些迭代过程中设置为int会导致坐标数值不变,然后进入死循环或者绘制不出来。如果需要int类型,那么无需担心,double到int之间会有一个隐式转换,直接将Point类型中属性值赋给对应的变量即可。(如果你想知道哪些情况下使用int会无法绘制请参考椭圆部分的DDA算法)
圆 基础知识 在直角坐标系中,圆心在原点上的圆有如下方程:
x 2 + y 2 = R 2 x^2+y^2 = R^2 x2+y2=R2
其中R为圆的半径。
若圆心不在原点上,则有更一般形式的方程。
假设圆心为(a,b)则圆的方程为:
( x − a ) 2 + ( y − b ) 2 = R 2 (x-a)^2+(y-b)^2 = R^2 (x−a)2+(y−b)2=R2
同样的,对于圆心在原点上的圆我们有参数方程:
{ x = R cos θ y = R sin θ \begin{cases} x=R\cos \theta \\ y = R\sin \theta \end{cases} {x=Rcosθy=Rsinθ
当两个物体大小很小时,会出现没有碰撞到一起就触发了碰撞事件
把上图的default content offset 调小就能解决问题
ProxyPool 代理IP池 ProxyPool在github的地址或者可以在 GitHub - jhao104/proxy_pool: Python爬虫代理IP池(proxy pool)Python爬虫代理IP池(proxy pool). Contribute to jhao104/proxy_pool development by creating an account on GitHub.https://github.com/jhao104/proxy_pool
链接:https://pan.baidu.com/s/1a-Xuo6gQ5vOXDAjEB3ppGQ?pwd=w8q8 提取码:w8q8
pip install -r requirements.txt 命令行修改法 (1)命令行临时修改法 在用pypi下载python包的时候,可以直接使用pip install packagename -i参数,指定下载源的URL
pip install ping3 -i https://pypi.tuna.tsinghua.edu.cn/simple (2)命令行永久修改法 使用pip config set global.index-url来直接指定下载源的URL,这样就不用手动修改配置文件了
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 命令行永久修改还需要输入一句:"pip config set install.trusted-host pypi.douban.com"
pip源修改来源于网络
在文件中打开cmd
# 如果已经具备运行条件, 可用通过proxyPool.py启动。 # 程序分为: schedule 调度程序 和 server Api服务 # 启动调度程序 python proxyPool.py schedule # 启动webApi服务 python proxyPool.
首先创建一个表格
表头:
<div class="table_box"> <table cellspacing="0" cellpadding="0"> <thead> <tr> <th><input type="checkbox" class="thItem" onclick="fn(this)"></th> <th>姓名</th> <th>岗位工资</th> <th>岗位级别</th> <th>性别</th> <th>生日</th> <th>手机号</th> <th>身份证号</th> <th>项目名称</th> <th>公司名称</th> <th>政治面貌</th> <th>籍贯</th> <th>学历</th> <th>创建时间</th> <th>员工状态</th> <th>用工形式</th> <th>现合同到期时间</th> <th>现合同期限</th> <th>银行卡卡号</th> <th>工资卡开户行</th> <th>操作</th> </tr> </thead> <tbody id="tb"> </tbody> </table> </div> tbody部分直接使用js,意思是使用循环在表格的主体部分加入了表格标签,不用大量的去复制空格子(其实就是up比较懒 (o▽`o) )
<script> let inp = document.getElementById("tb") let str = "" for(let i = 0 ; i < 20 ; i++){ str += `<tr> <td><input type="checkbox" class="thItem""></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> </tr>` } inp.
数组模拟队列 public class 数组模拟队列 { public static void main(String[] args) { ArrayQueue arrayQueue = new ArrayQueue(2); arrayQueue.addQueue(1); arrayQueue.addQueue(10); System.out.println(arrayQueue.getQueue()); System.out.println(arrayQueue.hearQueue()); System.out.println(arrayQueue.getQueue()); System.out.println(arrayQueue.hearQueue()); } } class ArrayQueue{ //数组最大容量 private int maxSite; //队列头 private int front; //队列尾 private int rear; //存放数据模拟队列 private int[]arr; //创建队列的构造器 public ArrayQueue(int arrMaxSize){ maxSite=arrMaxSize; //数组赋值长度 arr = new int [maxSite]; front=-1;//初始化头部 rear=-1;//初始化尾部 } //判断队列是否已满 public boolean isFull(){ return rear == maxSite-1; } //判断队列是否为空 public boolean isEmpty(){ return rear == front; } //添加数据到队列 public void addQueue(int n){ //判断队列是否已满 if (isFull()){ System.
以下列代码为例
//终于给我搞清楚指针的指向究竟是怎么看的了 // 按编号对职工记录进行递增排序 void sortById(List* list) { Employee* p, * q, * tail = NULL; // tail 变量则是一个边界指针,初始值为 NULL。 while (list->head->next != tail) // tail 变量则是一个边界指针,等于tail时,即终止循环 //tail只会不断向前靠,一旦tail为初始数据指针即排序完毕 { p = list->head;//记录头结点,也就是链表位置的指针 q = p->next;//记录初始起始数据指针,便于后面交换数据 while (q->next != tail) { if (q->id > q->next->id) { p->next = q->next; //意思是p的头结点的下一个位置改为q->next,也就是直接连接了下一个最小的节点 q->next = q->next->next; //同理,q的下一个节点,即下一个位置的连接为q的下一个的下一个节点的位置 //也就是直接跳过了中间的q->next // 这里的意思是直接q节点直接跳过q->next,链接q->next->next的意思 //你记住,在左边,最后一个next永远都是指它的下一个位置是什么的意思 // 也就是与哪个节点连接的意思 //而如果前面有多的next,才是看作一个整体, // 如q->next->next, //可看成(q->next)->next,即q的下一个节点的下一个位置,即链接的位置是哪? //而如果在右边,那么next的意思那就全都是看作一起,也就是一个整体 //直接把右边的指针看作成一整块,而不是分开来。 /* 很简单,代码从来都是左边操作,右边赋值的*/ p->next->next = q; /* 这个就很经典了,意思是 (p->next)->next*/ //即p->next这个整体的下一个位置,链接何处 q = p->next; /* q重新指向为p->next这个位置*/ //更新p的指针位置,即更新交换后的起始数据指针 } p = p->next; q = q->next; //第一次循环的时候,已经将头指针和最小的节点给确认了 //所以前两个点可以不用管了,直接往下与新的节点比较就好 } tail = q; //当内循环退出时,表示当前轮次的排序已完成。将 tail 设为最后一次交换的节点 q,相当于缩小了待排序的范围。 //就是冒泡排序的道理一样的,最后的数据一定是最大的,每一次排序完后,最后的位置是不用动的, //而前面的数据很可能还要反复地交换,tail就是每一次标记每次循环中最大的数据,一旦遇见直接跳出排序即可 } printf("
找到C盘目录 C:/Windows/system32/drivers/etc/hosts 修改hosts文件内容,尾部复制粘贴
199.232.69.194 github.global.ssl.fastly.net 140.82.112.4 www.github.com 185.199.108.153 assets-cdn.github.com 185.199.109.153 assets-cdn.github.com 185.199.110.153 assets-cdn.github.com 185.199.111.153 assets-cdn.github.com 185.199.108.153 documentcloud.github.com 185.199.109.153 documentcloud.github.com 185.199.110.153 documentcloud.github.com 185.199.111.153 documentcloud.github.com 140.82.114.3 gist.github.com 185.199.108.153 help.github.com 185.199.109.153 help.github.com 185.199.110.153 help.github.com 185.199.111.153 help.github.com 140.82.112.9 nodeload.github.com 199.232.68.133 raw.github.com 140.82.112.18 status.github.com 140.82.113.18 training.github.com 199.232.68.133 raw.githubusercontent.com 199.232.68.133 user-images.githubusercontent.com 199.232.68.133 avatars1.githubusercontent.com 199.232.68.133 avatars2.githubusercontent.com 199.232.68.133 avatars3.githubusercontent.com 199.232.68.133 cloud.githubusercontent.com 140.82.113.6 api.github.com 刷新生效 ipconfig /flushdns 重新打开GitHub即可
挑选图标 登陆后通过点击图标购物车按钮,将需要的图标加至购物车
点击购物车按钮,添加至项目。
如图添加了对应的icon图标到项目中。
将图标素材下载至本地。
将图标引入vue项目步骤: 1、将下载后的图标文件引入到vue项目中。
2、全局引入项目下面生成的
2、(main.js)全局引入项目下面生成的 fontclass 代码:
//iconfont import '@/assets/fonts/iconfont.css' 3、挑选相应图标并获取类名,应用于页面:
<!-- xxx参照下图的格式 --> <span class="iconfont icon-xxx"></span> 原文链接:https://blog.csdn.net/qq_40598321/article/details/124604522
前言 可以试着做一两个完整的后台管理项目后再去做其他的,下面推荐一些github上的vue后台管理的项目,可以自己选择性的练一下手
Vue2 1、iview-admin
Star: 16.4k
基于 iview组件库开发的一款后台管理系统框架,提供了一系列的强大组件和基础模板,方便开发人员快速搭建一套功能丰富、界面美观、易用的管理系统。iview-admin具有可定制化的主题样式、多语言支持、权限管理、路由控制等功能,适用于中大型企业的后台管理系统或者个人项目的后台管理。 github地址:https://github.com/iview/iview-admin
线上地址:https://admin.iviewui.com/
2、vue-admin
Star: 6.6k
一个基于Vue.js的前端管理系统框架,可以用于构建各种企业级的 应用程序。Vue-admin提供了一系列可重用的组件和插件,包括数据表格、表单、通知、图表等,可以帮助开发人员快速构建类似于 后台管理系统、CRM、ERP等各种应用程序。Vue-admin还提供了灵活的主题定制和国际化支持,可以自定义 品牌风格、颜色和语言等。该框架具有代码精简、易于维护和扩展等优点,可以提高开发效率和 用户体验。 github地址:https://github.com/taylorchen709/vue-admin
线上地址:https://taylorchen709.github.io/vue-admin/
3、d2-admin
Star: 12.2k
一个基于Vue.js和Element UI的企业级中后台解决方案,具有良好的扩展性和灵活性。它提供了丰富的组件和特性,如多语言支持、主题定制、权限管理、数据可视化等,帮助开发者快速构建现代化的 管理后台系统。 github地址:https://github.com/d2-projects/d2-admin
线上地址:https://d2.pub
4、mall-admin-web
Star: 10.8k
mall-admin-web是一个电商后台管理系统的前端项目,基于Vue+Element实现。 主要包括商品管理、 订单管理、 会员管理、 促销管理、运营管理、内容管理、 统计报表、 财务管理、权限管理、设置等功能。 github地址:https://github.com/macrozheng/mall-admin-web
线上地址:https://www.macrozheng.com/admin/
Vue3 1、 vue-manage-system
Star: 16k
是一个基于 Vue3 和 Element Plus 的后台管理系统解决方案,它提供了一系列的通用组件和基础功能,可以帮助开发者快速搭建后台管理系统。该系统包含了用户管理、 权限管理、数据可视化、表单编辑等常见功能,同时也提供了多种主题风格和自定义配置选项,方便开发者根据自己的需求进行定制。 github地址:https://github.com/lin-xin/vue-manage-system
线上地址:https://lin-xin.gitee.io/example/work
2、vue-vben-admin
Star: 17.3k
Vue Vben Admin 是一个基于 Vue3 和 TypeScript 的开源后台管理系统模板,它包含了众多的组件和插件,可以帮助开发者快速构建出高质量的后台管理系统。Vue Vben Admin 具有极高的 可扩展性和灵活性,可以轻松地满足不同的业务需求。它还提供了丰富的文档和示例代码,使得开发者可以快速上手并进行开发 github地址:https://github.
关键字 volatile 详解 相比Sychronized(重量级锁,对系统性能影响较大),volatile提供了另一种解决可见性和有序性问题的方案,本文是JUC第六讲,volatile关键字详解。
文章目录 关键字 volatile 详解1、带着BAT大厂的面试问题去理解volatile2、volatile的作用详解2.1、防重排序2.2、实现可见性2.3、保证原子性:单次读/写1、问题1: i++为什么不能保证原子性? Action1:volatile不保证原子性问题解决2、问题2: 共享的long和double变量的为什么要用volatile? 2.4、在项目中对volatile的使用? 3、volatile 的实现原理 (百度面试题)3.1、volatile 可见性实现1、lock 指令2、缓存一致性 3.2、volatile 有序性实现1、volatile 的 happens-before 关系2、volatile 禁止重排序 4、volatile 的应用场景4.1、模式1:状态标志4.2、模式2:一次性安全发布(one-time safe publication)4.3、模式3:独立观察(independent observation)4.4、模式4:volatile bean 模式4.5、模式5:开销较低的读-写锁策略4.6、模式6:双重检查(double-checked) 5、Volatile/Synchronized两者区别(锁的目标:关注互斥性和可见性)6、Volatile 总结 7、参考文章Action1、volatile 解决多线程内存不可见问题。对于一写多读,是可以解决变量同步问题,但是如果多写,同样无法解决线程安全问题。 1、带着BAT大厂的面试问题去理解volatile 请带着这些问题继续后文,会很大程度上帮助你更好的理解volatile。
volatile关键字的作用是什么?volatile能保证原子性吗? 不能之前32位机器上共享的long和double变量的为什么要用volatile? 现在64位机器上是否也要设置呢?i++为什么不能保证原子性?volatile是如何实现可见性的? 内存屏障。volatile是如何实现有序性的? happens-before等说下volatile的应用场景? 2、volatile的作用详解 Volatile关键字定义
Java提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。 保证了 Java 内存模型的两个特性:可见性、有序性(禁止指令重排)
1、保证此变量对所有线程的可见性(即当一条线程修改了这个值,新值对于其他所有线程来说是立即得知的) 原理是:每次访问变量时都会进行一次刷新,因此每次访问都是主存中最新的版本
2、禁止指令重排序优化(volatile修饰的变量相当于生成内存屏障,重排列时不能把后面的指令排到屏障之前)
保证有序性 3、不保证原子性
2.1、防重排序 背景:我们从一个最经典的例子来分析重排序问题。大家应该都很熟悉单例模式的实现,而在并发环境下的单例实现方式,我们通常可以采用双重检查加锁(DCL)的方式来实现。
其源码如下:
public class Singleton { public static volatile Singleton singleton; /** * 构造函数私有,禁止外部实例化 */ private Singleton() {}; public static Singleton getInstance() { if (singleton == null) { synchronized (singleton.
索引(Index)是帮助MySQL高效获取数据的数据结构。数据库系统维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。
文章目录 1、类型(三种)2、规范(10余条)CheckListAction1 、三个字段联合索引时,如果中间的字段使用了范围查询或者模糊查询,最后一个字段还会用到索引么?Action2、在order by时,索引是如何使用的?Action3、新建一张表,如何界定其索引的数量,有没有选择或者公式Action4、字符串如何加索引,能不能再详细介绍下字符串前缀索引Action5、什么是覆盖索引? 1、类型(三种) 主键索引名为 pk_字段名; 唯一索引名为 uk_字段名; 普通索引名则为 idx_字段名 。
说明: pk_ 即 primary key; uk_ 即 unique key
2、规范(10余条) 序号规范说明例子1【强制】业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽略,但提高查找速度是明 显的; 另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必然有脏数据产生节能环保打标表 UNIQUE INDEX uk_config_brand_spec_auth(config_id, brand_id, specification(255), auth_code(255)) USING BTREE, 区划限价设置表(牧谦) CREATE UNIQUE INDEX uni_district ON db_item.zcy_district_category_price (category_id,config_id,district_id);2【强制】超过三个表禁止 join。需要 join 的字段,数据类型必须绝对一致; 多表关联查询时,保证被关联的字段需要有索引。 即使双表 join 也要注意表索引、 SQL 性能。商品库不存在join3【强制】在 varchar 字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度即可索引的长度与区分度是一对矛盾体,一般对字符串类型数据,长度为 20 的索引,区分度会高达 90%以上,可以使用 count(distinct left(列名, 索引长度))/count(*)的区分度来确定属性值表 create index idx_name on db_item.parana_property_value (name(100))4【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引属性值表 INDEX idx_name(name(20)) USING BTREE SQL:AND name LIKE CONCAT(#{name},‘%’)5【推荐】如果有 order by的场景,请注意利用索引的有序性。 order by 最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现 file_sort(文件排序)的情况,影响查询性能。正例: where a=?
1安装qrcodejs2
npm install qrcodejs2 -save 实操:Terminal下执行
2在所需要的前端页面中引入【找到qrcode.js直接拉到页面中】
或者
import QRCode from 'qrcodejs2' 3在你需要显示二维码的页面加上
<div class="item-pic" id="`qrinvitecode"></div> 4定义生成二维码的方法
this.getQRInviteCode(codeItem) { // 生成二维码 new QRCode('qrinvitecode', { width: 70, //宽度 height: 70, // 高度 text: 需要生成二维码的链接, render: 'canvas' ,// 设置渲染方式(有两种方式 table和canvas,默认是canvas) }) }, // 钩子函数页面一加载就执行 mounted() { this.loadCourseList(); this.getQRInviteCode(); // 调用二维码的方法 }
多积分通道行人检测+KCF跟踪(企业级项目)的原理:
1,采用积分通道特征检测行人
2,采用KCF跟踪检测到的车辆,压入容器里面
3,过线判断
4,清除超出图像范围的跟踪器
效果测试见https://download.csdn.net/download/hnsdgxylh/10855881
有一起研究的大神,可以加Q 2830025146,效果图如下
这里有基于YOLOV4 TINY的人头检测和KCF跟踪的代码
【免费】采用Yolo4tiny检测人头,KCF跟踪每个人头,统计上下人流量,只需要OPENCV资源-CSDN文库
大家好,我是邓飞。
对于vcf文件和plink文件是经常用的文件,对于基因型数据的处理,一般分为:
数据质控数据提取染色体修改名称样本修改名称 今天介绍一下vcf文件的三个处理方法:
1,染色体修改2,样本名称修改3,样本提取 用到的软件是bcftools,用到的系统是Linux。
1. 数据描述 数据使用GWAS-Cookbook中的GWASdat1中的数据,将数据变为vcf格式。
相关基因型数据,可以在这里下载:快来领取 | 飞哥的GWAS分析教程更新啦
将plink的二进制文件,变为vcf的代码:
plink --bfile ../../gwas_cookbook/GWAS-dat1/1_QC_GWAS/HapMap_3_r3_1 --recode vcf-iid --out test1 vcf预览:
2. vcf文件修改染色体名称 整理染色体修改对应关系:
awk '{print $1}' HapMap_3_r3_1.bim |sort |uniq >chr.txt awk '{print $1,"chr"$1}' chr.txt >chr_rename.txt 整理好的对应关系:
$ cat chr_rename.txt 1 chr1 10 chr10 11 chr11 12 chr12 13 chr13 14 chr14 15 chr15 16 chr16 17 chr17 18 chr18 19 chr19 2 chr2 20 chr20 21 chr21 22 chr22 23 chr23 25 chr25 3 chr3 4 chr4 5 chr5 6 chr6 7 chr7 8 chr8 9 chr9 代码:
对象指针和普通变量指针相同,对象指针指向类所实例化的对象,并且可以通过对象指针操作这个对象。【对象指针指向对象】
1、new和malloc的区别【他们申请的空间都在堆区】 new和malloc的区别1)malloc和free是C++/C语言的标准函数#include<stdio.h>;new/delete是C++的关键字2)malloc/free和new/delete都可以动态申请内存和释放内存。new/delete比malloc/free更加智能,其底层也是执行malloc/free。智能是因为new和delete会在创建对象时自动执行构造函数,对象消除时会自动执行析构函数。3)new返回指定类型的指针,并且可以自动计算出所需的大小。malloc必须由用户指定大小,并且默认返回类型为void*,必须进行强制类型转化。 2、程序实例 区别2)的验证
#include <stdio.h> #include <iostream> using namespace std; class Person { public: Person() :Age(10) { cout << "调用构造函数!!!" << endl; } ~Person() { cout << "调用析构函数!!!" << endl; } int Age; }; int main() { Person* p = (Person*)malloc(sizeof(Person)); //使用malloc定义对象指针,不会调用构造函数 free(p); //使用delete来释放对象指针,不会调用析构函数 //malloc需要指定返回值类型;需要指定申请空间的大小 return 0; } 运行结果:
没有运行结果 #include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; class Person { public: Person() :Age(10) { cout << "
Python学习总结–turtle库 turtle库,又被称为海龟,是能够进行绘图操作的一个标准库,包含许多用来图形绘制的方法。
在画布上,默认有一个坐标原点为画布中心的坐标轴, 坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:标原点(位置),面朝x轴正方向(方向),turtle绘图中, 就是使用位置方向描述小乌龟(画笔)的状态。
使用Python中的turtle库不需要特别的准备。要使用turtle库,你需要确保你的Python环境已经安装,并知道如何导入和使用turtle库。
一、库的引用 如python中的其他标准库和三方库一般,想要使用,需在程序开始处进行库的引用,引用方式主要有以下几种:
1、import turtle:直接引入对应的库
备注:使用这种方式引入库,那么在对turtle库中的函数进行调用时,需要使用这种形式:turtle. 函数名()
例如:
# circle()是turtle库中的一个用来绘制圆的函数 import turtle turtle. circle(100) 2、from turtle import *:直接从turtle库中引入其所有的函数
备注:在对turtle库中的函数进行调用时,函数名前不用加turtle库名,即使用这种形式:函数名()
例如:
from turtle import * circle(100) #直接调用 3、import turtle as t:直接引入库,并给库取一个别名
例如:
import turtle as t t. circle(100) #画一个圈 备注:这种方式与方式一很像,在需要多次调用turtle库的函数时,可使用别名简化代码
二、turtle库的基本使用 1、窗体函数:
1)设置窗口的函数:turtle. setup(width,height,starts,starty)
作用:设置绘图窗口的宽高和位置
其中:
width:表示绘图窗口的宽度,值是整数,表示的是像素值;值是小数,表示窗口宽度与屏幕的比例。
height:表示绘图窗口的高度,值是整数,表示的是像素值;值是小数,表示窗口高度与屏幕的比例。
startx:表示绘图窗口左侧与屏幕左侧的像素距离。若不填,默认窗口位于屏幕水平居中。
starty:表示绘图窗口顶部与屏幕顶部的像素距离。若不填,默认窗口位于屏幕垂直居中。
2)画布背景色设置:turtle. bgcolor("red")
3)画笔上箭头的隐藏与显示**:
turtle.
问题 先看问题。下方滚动条滚动到右侧之后上下都有空白,但是缩放之后正常。分析之后是overflow的问题。
overflow作用是什么? overflow在内容大于元素框高度或者宽度时候设置,保证内容显示正常。
单独一个内容大于元素框高度或者宽度比较好调,也不用考虑元素框是否需要设置overflow。
但是内部有多个内容大于元素框高度或者宽度的时候,就需要统一内容的overflow设置,还有考虑父级overflow。如图2所示。
浏览器最大宽度是2048
解决方案 这三个全部设置为overflow:visible,父级div设置overflow:auto
在JAVA中数据类型一共包含两大类,分别是基本数据类型,引用数据类型。那么该篇先来讲一下基本数据类型,有以下类型:
一共有八种类型,将这些概括起来的话可以分为四种类型:整型,浮点型,字符类型,布尔类型。
1.首先整型的简单使用:
这是肯定有同学问:同样是存放整型,为何需要那么多整型类型呢?
OK,同学先别急,是否听说过:存在即合理。
因为每个数据的类型存放的大小都不一样,那么我们作为合格的程序猿,需要合理的数据放在合理的内存上,合理利用。
补充:简单补充一下“常识”,内存中最小的单位为bit ,即一个bit存放一个1/0,一个字节有八个bit位。在JAVA中不存在所谓的 无符号数字!!!
用 int来举例:
以上就是int 类型的数据存放的二进制示例图,其余的整型类型基本一样,就不多赘述了。另外需要补充的是,局部变量使用之前需要初始化,
2.浮点型的简单使用:
值得注意的是机器默认浮点数为双精度,如果使用floa类型去定义一个变量时,需要在该数据后面加上’f‘,不然会出问题。
同理为何需要两种不同的类型去定义浮点数?
答案同上。
那么先来看看浮点数的内存大小:
但是注意浮点数的存储与整型的存储不一样,浮点数的存储比较复杂,我们就不过多的探讨了。
3.字符与布尔类型的简单使用:
内存大小:
个人理解认为字符类型可以与整型归一类,它们之间可以相互转化:
简单粗暴来说:就是字符可以表示一个特定的整型,那么一个特定的整型可以表达一个字符。
接下来,聊聊boolean类型,在JAVA中0不能代表false和非0不能代表true(重点注意一下)。
OK,看到没,这里需要明确的boolean类型才不会报错。
就像以上这样。
4.我们探讨完了基本的数据类型之后,我们再来看看一个字符串类型,这个类型属于引用类型。
先来看看简单的使用:
我列举了三种用法,其中最常用的是第一第二种,两种的用法原理不太一样,现在我们先不探讨。
我们先来聊聊,字符串的拼接:
用字符串拼接完后,整体变成字符串。
补充一点:JAVA中的字符串不同与C语言,不会以'\0'结束。
以上就是简单地介绍了基本数据类型和一个引用类型String.
解决PHP Fatal error: Uncaught UnexpectedValueException: creating archive “phartest.phar” disabled by the php.ini setting phar.readonly
坑
在php.ini中里有个 ";"需要去掉,这个坑我找了很久,最好是比对了朋友的配置文件才发现要去掉 “;”
在pycharm中尝试运行第一个pytorch程序时报错:
通过查阅资料得知,该报错原因是:
OMP:错误#15:初始化libip5md. dll,但发现libip5md.dll已经初始化。
OMP:提示这意味着OpenMP运行时的多个副本已链接到程序中。这很危险,因为它会降低性能或导致不正确的结果
解决方法:
法1.在程序中添加:
import os
os.environ[“KMP_DUPLICATE_LIB_OK”]=“TRUE”
问题得以解决。但这种方法不能从根本上解决问题。
法2.
在该env环境下找到libiomp5md.dll文件,将该文件删除或者重命名。删除文件最好留个备份。在这里我将这个文件重命名为libomp5md.dll后运行程序,问题解决。
自动播放机制 自动播放机制其实就是会拦截自动播放的视频。
chrome、safari、firefox、edge 浏览器在某版本后都限制了video自动播放功能,原因为内部机制认为此视频为垃圾广告,和IOS系统一样,同时也是为客户体验度考虑,因此会限制自动播放功能。
解决办法 视频静音模式允许自动播放
以下几种模式下 非静音也可以自动播放
客户已和当前做了交互方式 :click tap 事件
客户将此网站添加到手机主桌面,就像App一样 采用PWA技术
媒体参与度达到一定值后,同样可以自动播放
PWA 描述: PWA 又为(Progressive Web App,PWA),是一个使用web平台技术构建的应用程序,采用各种Web 技术将浏览器页面实现APP应用化,当然手机应用如支持PWA,可以无需下载通过PWA Web APP 添加到客户主屏幕上,快速访问全屏体验,目前PWA已支持不同操作系统和设备上运行 。
特性:离线访问、推送消息、数据同步、实时更新。
手机无网络情况下,应用的启用动画特效等其实是使用离线访问实现。
媒体参与度 客户与媒体的交互度主要从客户的观看时间、交互行为、观看率、转换率来计算 - 浏览器内部算法。
错误代码示例 如只在video中加入autoplay 无任何错误提示 画面停留在第一帧。
不使用 autoplay,在页面加载后调用 video play 方法 使用 autoplay,同时调用 video play 方法才会出现错误信息 以下代码运行会提示:play() failed because the user didn't interact with the document
原因:提示为未与客户做交互。
解决:可以加入弹框提示,客户交互点击播放 - JS处代码 。 自定义 DIV 弹框、ElementPlus Dialog 均可,自行选择。 <template> <video controls autoplay> <source src="
在Windows的Linux子系统(Windows Subsystem for Linux)WSL2中安装、配置和使用 Docker,可以参考官方教程:WSL上的Docker远程容器入门.
重要步骤总结如下:
先决条件 确保你的计算机运行的是 Windows 10(更新到版本 2004,内部版本 18362 或更高版本)。安装 WSL,并为在 WSL 2 中运行的 Linux 发行版设置用户名和密码。最好安装VS Code、Windows终端,这是可选的,但安装后的使用体验更好。 安装 Docker Desktop 下载 Docker Desktop 并按照安装说明进行操作;安装后,从 Windows 开始菜单启动 Docker Desktop,然后从任务栏的隐藏图标菜单中选择 Docker 图标。 右键单击该图标以显示 Docker 命令菜单,然后选择“设置”。 确保在“设置”>“常规”中选中“使用基于 WSL 2 的引擎”。 通过转到“设置”>“资源”>“WSL 集成”,从要启用 Docker 集成的已安装 WSL 2 发行版中进行选择。 通过使用 docker run hello-world 运行简单的内置 Docker 映像,测试安装是否正常工作。
import numpy as np import struct def toDoubleList(dataStr): bytesTotal = len(dataStr) print("bytesTotal: ", bytesTotal) # 下面的双斜线是除法结果为整数 segLen = bytesTotal // 8 print("segLen: ", segLen) # 如果考虑字节序,字节序为big-endian,则以下语句改为 data = struct.unpack('>'+str(bytesTotal/8)+'d',dataStr) # 相关匹配格式和字节序请见: https://docs.python.org/zh-cn/3/library/struct.html#struct.calcsize data = struct.unpack(segLen * 'd', dataStr) return data ######### def toFloat32List(dataStr): bytesTotal = len(dataStr) print("bytesTotal: ", bytesTotal) # 下面的双斜线是除法结果为整数 segLen = bytesTotal // 4 print("segLen: ", segLen) # 如果考虑字节序,字节序为big-endian,则以下语句改为 data = struct.unpack('>'+str(bytesTotal/4)+'f',dataStr) data = struct.unpack(segLen * 'f', dataStr) return data def toUint16List(dataStr): bytesTotal = len(dataStr) print("
对项目进展进行跟踪时,应该遵循以下5条基本原则:
原则一:实时跟踪进展以尽早暴露风险
要实时跟踪项目状态,尽早暴露风险,不要到了项目后期突然暴雷。比如每日例会,项目经理每日轮询等,都是实时跟踪进展的方法。在跟踪时不应仅仅依靠汇报状态,也要检测完成的质量,判断是否达到了完成标准。如果做不到每日跟踪,也得做到每周跟踪,不应超过此跟踪周期。
在做项目计划时,一般要求任务的颗粒度不超过3人天,也是为了确保在一周内能检查2次是否完成任务了,如果任务颗粒度太大,都不能给出任务状态是否完成的结论,就容易发生90%-90%现象,即前90%的任务花了50%的时间,后10%的任务花费的时间与前90%的任务一样。
原则二: 任务闭环管理以及时调整纠偏
在跟踪任务时,要对照计划进行跟踪,避免任务的遗漏。比如有的开发人员在说昨天完成了什么任务,昨天实际完成的任务和昨天计划完成的任务已经发生了变化,但并没有给出任何解释,这很容易造成任务跟踪只是报流水账,起不到及时纠偏的作用。有的项目在召开每日例会或每周例会时,没有对照昨天的计划或上周的计划来跟踪进展,这种做法就很容易遗漏某些任务没有跟踪。
原则三:任务状态可视化以提升项目透明性
不能仅仅是项目经理和责任人了解任务的进展,而是要让项目组所有成员都要知道,要让项目组外部的人员也能随时看到每个人的进展。让所有的任务状态公开可视至少有3个作用:
1)让所有的任务状态、问题都暴露出来;
2)让大家彼此之间互相督促,每个人都要兑现自己的承诺;
3)培养团队意识,不是你的、我的,而是我们大家的。
看板是很好的可视化任务状态的工具。物理的任务看板是信息辐射器,电子的任务看板是信息冰箱,强烈推荐使用物理的任务看板,除非在异地开发不方便采用物理看板时。
原则四: 总体进展要量化以对齐项目整体目标
不要只关注短期任务的进展,同时要关注离目标还有多远,所有人都要把眼睛盯着目标。总体燃尽图、任务完成比例的趋势图都是很好的监督目标进展的工具。要给出一个定量的数字刻画总体进展,这样便于大家对项目进展有一个明确的共识。任务完成百分比(TCP)与时间流逝百分比(TEP)是两个简单明的跟踪项目总体进展的指标。
原则五:真正达到完工标准以避免快而脏
是否真的完成了某任务,要对照验收标准、质量标准进行检查,否则可能就会为了进度牺牲质量,埋了很多坑,欠下技术债!所以要尽可能的做到当天进行集成、冒烟测试、代码评审、单元测试、静态检查、PO确认等活动。
无论采用敏捷的方法还是传统的方法,都应该遵从上述的五个原则监督项目进展!
这篇文章主要介绍php发送get、post请求的6种方法简明总结,分别为使用file_get_contents 、fopen、fsockopen、curl来发送GET和POST请求,需要的朋友可以参考下
方法1: 用file_get_contents 以get方式获取内容: <?php
$url='http://www.51growup.com/';
$html = file_get_contents($url);
echo $html;
?>
方法2: 用fopen打开url, 以get方式获取内容: <?php
$fp = fopen($url, 'r');
stream_get_meta_data($fp);
while(!feof($fp)) {
$result .= fgets($fp, 1024);
}
echo "url body: $result";
fclose($fp);
?>
方法3:用file_get_contents函数,以post方式获取url <?php
$data = array ('foo' => 'bar');
$data = http_build_query($data);
$opts = array (
‘http' => array (
'method' => 'POST',
'header'=> "Content-type: application/x-www-form-urlencodedrn",
"Content-Length: " . strlen($data) . "rn",
'content' => $data
前言 下面是github上的golang项目,适合练手,可以自己选择一些项目去练习,整理不易,希望能多多点赞收藏一下!废话少说,我们直接进入正题>>>
先推荐几个教程性质的项目(用于新手学习、巩固查缺补漏)
1、7days-golang
Star: 13.5k
来自极客兔兔大神的Go新手引导教程项目,目标人群是新手,整体上七天的知识循循渐进,想学习或者补漏可以参考一下该项目喔 github地址:https://github.com/geektutu/7days-golang
官网:https://geektutu.com/post/gee.html
2、build-web-application-with-golang
Star: 42.2k
从基础开始一步步教你如何使用Go语言构建Web 应用程序,全方面的教程 github地址:https://github.com/astaxie/build-web-application-with-golang
3、GolangTraing
Star: 9.1k
该项目中涵括了各类go的代码案例,整体看来每个例子的代码量不大但内容充实,适合用来练手、巩固知识点 github地址:https://github.com/GoesToEleven/GolangTraining
下面是一些实操的项目推荐
1、gin-vue-admin
Star: 17.9k
基于vite+vue3+gin搭建的开发 基础平台(支持TS,JS混用),集成jwt鉴权,权限管理, 动态路由,显隐可控组件,分页封装,多点登录拦截,资源权限,上传下载, 代码生成器,表单生成器,chatGPT 自动查表等开发必备功能 github地址:https://github.com/flipped-aurora/gin-vue-admin
在线demo网址:https://demo.gin-vue-admin.com/
2、go-admin
Star: 9.6k
基于Gin + Vue + Element UI & Arco Design & Ant Design 的前后端分离权限管理系统 脚手架(包含了: 多租户的支持,基础 用户管理功能, jwt鉴权,代码生成器,RBAC资源控制,表单构建,定时任务等) github地址:https://github.com/go-admin-team/go-admin
官网:https://www.go-admin.pro/
3、Yearning
Star: 7.8k
一个 数据库审计平台,我们可以通过yearning来创建用户,设置权限,规定哪些用户可以查询哪个库,哪些用户可以修改哪个库,查询、修改操作需要经过那些人的审批后才能执行,执行完成的SQL修改语句可以进行回退,可以监控追溯到哪些人执行了哪些SQL github地址:https://github.com/cookieY/Yearning
官网:http://next.yearning.io/
4、ferry
Star: 7.8k
一个基于Gin + Vue + Element UI前后端分离的 工单系统,集工单统计、任务钩子、 权限管理、灵活配置流程与模版等等于一身 github地址:https://github.
hbba网站是不提供下载按钮并且不支持右键的,那么如何下载呢?
1、首先看一下pdf有多少页,一般标准介绍上有写。
2、使用edge或google浏览器打开pdf预览页面,打开开发者模式,用小箭头指向第一页,这样就获取到了图片的源地址,自己把网站域名拼接一下,如这样:
3、可以看到其实pdf就是一张一张图片拼出来的,我们用excle把所有的下载地址拉出来:
4、然后复制一下,粘贴到迅雷中:
下载成功后的截图
Echarts是一个开源的可视化图表库,支持丰富的图表,官网中还有大量示例可以选择使用、参考。
其中比较好玩、有趣的是词云,词云就是用关键词组成的一朵云,更广泛的定义是,由关键词组成的任意一种图案均称为词云。因此,并不仅限于云朵的形状。
Echart之前有词云这个配置,只不过现在没有了。虽然没有词云,但是echarts提供了custom配置,可以自定义图表。我们就可以自己通过配置实现词云。
首先,创建一个容器元素用来存放图表。
<div id="wordcloud"></div> 然后设置样式
<style> #wordcloud{ width:500px; height:500px; } </style> 然后,使用该元素初始化echarts
const echartsInstance = echarts.init(document.getElementById('wordcloud')); 接下来,配置配置对象,使用echarts提供的属性值为custom的type字段进行配置,在custom类型下,需要声明renderItem函数,这个函数的作用是生成针对于每一个数据所配置的图案。
它会对data中的每一项数据都执行该函数,然后在函数进行处理后返回一个图形对象,根据图形对象显示出来。
returnItem函数接收两个参数params和api
params是一个保存了基本配置信息的对象,例如:dataIndex:表示该数据在data中的索引
api是一个拥有操作数据的基本方法的对象,常用方法有value():该方法获取当前数据项的数据即value值
我们在renderItem中返回的是text类型的图像,该图像只显示文本,通过style对象中的text字段设置显示文本。除了显示的文本之外还可以设置字体、颜色等常见样式。
const data = [{ name: 'hellp', value: 10 }, { name: '没有', value: 20 }, { name: '不错', value: 16 }, { name: '还行', value: 30 }, { name: '屏幕', value: 40 }]; const option = { xAxis:{ show:false }, yAxis:{ show:false }, series: [{ type: 'custom', renderItem(params, api){ const x = Math.
提示:阅读本博客预计需要消耗你3-5分钟的时间
首先我们了解这是mybatis的绑定异常,没有找到相关的语句,先说一下出现这种问题的一般原因 :
XML文件中的id与mapper接口中不相同namespace 不对应,找不到返回的实体类或者文件名称不规范没有【mybatis.mapper-locations=classpath:mapper/xxxMapper.xml】、
【mybatis.type-aliases-package=“com.example.bean”】配置属性springboot工程将你的资源文件拦截了,filtering为true 注意: 这是一般的错误导致的绑定异常,如果你已经解决了问题,那么恭喜你,下面的内容可以忽略。
如果经过以上的几项,你的问题还没有得到解决,并反复检查,并未发现相关问题,那么你和我的错误原因就应该很靠近了。
这个时候,我们需要去了解自己的问题到底出在哪里
做几个测试,查看问题所在
1、在你的mapper.xml文件下写几个其他的SQL,看一下是否正常访问,如果你在出现问题之前,已经有现成的SQL,那就先试试之前的SQL是否还能操作数据 (如果之前的有用,那就一定是你的资源文件问题,检查 resource文件夹下的properties文件中的属性是否正常)
2、再重新创建一个实体类,一个接口,一个xml文件,加入到配置中,写SQL进行测试(如果成功,那很有可能就是你之前的错误处没有检查到)
3、首先检查自己的项目工程结构,是否缺少某些文件,查看日志,看一下pom.xml下的依赖包是否正常
解决方式:
1 => 将resource文件夹设置为资源文件夹,重新运行项目
2 => 重新检查博客前面列举的问题原因
3 => 项目关闭重新打开,刷新maven,最后一步,删除项目,重新从码云拉下来。
写博客不易,希望能帮助到你,有问题可留言,大家一起坚持下去!!!
Unity是目前最主流的游戏开发引擎,AppStore里面排名前列的游戏绝大部分都是采用Unity引擎来开发的,所以Unity引擎的前景也是非常好的,同时很多AR,VR也是基于Unity的,所以对于做游戏而言Unity引擎是非常值得学习的。如何学习Unity呢?我总结了一下学习Unity的几个阶段和要注意的事项,希望对大家有所帮助。
C# 程序设计
Unity使用C#来开发,所以学习Unity首先要学习C#的语法,和C#读写文件等API系统调用。学习C#语法可以找个C#的教程也可以买C#的编程语言的书,学习C#学习基本的语法,基础的数据结构,如List, Dictionary等,同时学习一些基础的OS的API操作,比如文件读写等。不用去学习windows 的一些开发和API,因为我们学习都是基于Unity来开发。
Unity基础知识
学完C#以后,接下来就学习Unity编辑器操作与Unity的代码开发。Unity开发大部分都是可视化的,开发起来还是非常简单和方便的。首先学会编辑器的基本操作,摆放3D物体,添加物理刚体,添加组件,运行等基本操作。接下来从场景树节点开始,再到常用的组件实例,GameObject对象,Transform组件, MeshRenderer组件,SkinnedMeshRenderer组件, 基础材质系统(Standart Shader主要参数,Diffuse Shader主要参数)。AudioSource组件,碰撞器组件,物理刚体组件, 物理引擎, 射线检测, 事件系统,接入鼠标按键等事件,UGUI与UI组件,如Canvas组件,Sprite组件,Label组件,Button组件, 滚动列表, Mask组件等。
Unity框架设计与热更新
Unity虽然是可视化编辑,上手简单,但是正式商业项目的时候,需要考虑项目的稳定和可维护性,就不能很任性的像学基础一样,随意的挂代码,随意的绑定资源,节点到编辑器,我们需要自己来制作一个可维护的游戏开发框架, 做框架需要对游戏开发中的多岗位协作(程序,策划,美术)需求要非常清楚,同时要做好资源管理,内存控制,框架还要考虑上线以后的资源更新和逻辑更新做好版本管理和热更新等。
Unity Shader 渲染管线定制
这个相对来说就比较难了,很多大公司要做比较叼的渲染效果,需要开发人员定制特殊的Shader渲染管线来实现。比如卡通渲染,PBR渲染等, 同时不同的平台,渲染效果可能有差异,还需要我们编写代码,来抹平这种差异,同时有些低端机,我们要关掉一些消耗性能的计算,用降低效果来实现游戏的流畅度,这些需要定制渲染管线。
游戏开发中的经典的专题与算法
游戏开发中经典的一些专题与算法也是我们需要去学习的,比如游戏怪物的AI编写,我们会用到行为决策树,地图编辑器, 寻路导航, Socket网络编程, Protobuf协议,如何与服务器对接等常用游戏开发中的专题和算法。
性能优化与稳定性
游戏开发完成以后,对于性能需要优化,比如游戏的流畅度,手感,帧率,CPU占用率,Shader优化,Drawcall优化,阴影优化,内存优化,算法优化等。稳定性也很重要,在测试的过程中保证程序的稳定性,稳定性直接和用户的流水率等运营数据有关系,好的一个游戏产品,稳定性是最基础的保障,同时稳定性又最考验技术主管与团队的功底。
好今天的分享就到这里,从我们的讲述中不难看出,Unity入门容易精通难道理,但是大家也别为难,只要用心的学习积累,这些问题都可以搞定,因为都是成熟的解决方案与技术。
最近在折腾系统,没想到刚重装完系统,开机的时候提示被BitLocker锁住了,还要驱动器的恢复密钥。我的天!我哪知道恢复密钥是啥?
BitLocker是微软的一种安全机制,目的是为了保护硬盘的数据安全,所以要想恢复有两种方法,一是格式化重装,二是登录微软官网找恢复密钥。
对于想要保存数据的朋友来说,格式化数据是行不通的,下面微智启工作室简单介绍一下如何通过微软恢复密钥。
1、https://account.microsoft.com/(复制网址到浏览器打开),可以手机或者电脑操作。
2、登录你的微软账号(是被锁住电脑的微软账号,一般在激活系统时会叫你登录的那个账号)
PS:个人猜想,被锁时,电脑应该联网,恢复密钥才能自动上传到微软后台吧。
3、在标题栏右侧上方点击【设备】
4、查看设备详细信息
5、然后在左下角,可以看到BitLocker恢复相关的
6、进去可能需要邮箱验证码之类的,验证一下就完事。
7、进去之后会发现有几个密钥(如果没看见,可以考虑给电脑联网线刷新试试),该选择哪个呢?
继续回到我们最初的界面那里,可以看到恢复密钥ID开头是122D4CC2开头的,就是我们要恢复的密钥啦。
也就是把绿色框内的恢复密钥,输入进去就完事。
OK,成功开机!
微智启软件工作室——专注于分享优质软件、教程资源、电脑技术,让您更了解计算机。
大家好,小编来为大家解答以下问题,用python代码画出一片星空,用python绘制满天星代码,现在让我们一起来看看吧!
今天用50行Python代码绘制了星空满天的动图快码知识。解释下为什么要做这样一件事,因为昨天是青年节,希望通过这样的方式去表达出每个年轻人都像是星空中的一颗星星,散发这自己的光芒照亮整个夜空```*``效果如下:
我用的是 turtle 工具,它是 Python 的标准库,可以描绘绘图轨迹,操作简单、快捷,api通俗易懂python for语句用法。
下面来看下具体代码,首先做一些全局的设置
import turtle import random import time # 设置画笔大小,数值越小画出的线条越细 turtle.pensize(1) # 绘画延迟,单位:毫秒,数值越小绘画速度越快 turtle.delay(1) # 隐藏画笔 turtle.hideturtle() # 设置画布大小 turtle.setup(800, 800) 复制代码 这里主要设置 turtle 的画笔大小、绘图延迟和画布大小。
绘制星空最关键的就是五角星,下面我们就来创建一个绘制五角星的函数
def star(x, y, left_angle, edge_len, color='yellow'): """ 画一个五角星 :param x: 起始x坐标 :param y: 起始y坐标 :param left_angle: 画笔方向逆时针转动度数 :param edge_len: 五角星边的长度 :pa
这篇文章将会详细介绍基于AQS实现的两个并发类CountDownLatch和Semaphore,通过深入底层源代码讲解其具体实现。
目录
CountDownLatch
countDown()
await()
Semaphore
Semaphore类图
Semaphore的应用场景
acquire()
tryAcquire()
CountDownLatch /** * A synchronization aid that allows one or more threads to wait until * a set of operations being performed in other threads completes. */ 上面是CountDownLatch这个API的前两行注释,一句话已经说明了这个类的作用。
一种同步辅助工具,允许一个或多个线程等待其他线程正在执行的一组操作完成。
CountDownLatch是一个计数器,通过的构造方法指定初始计数器的值,调用CountDownLatch的countDown()方法让计数器的值减少1,当计数器的值变成0时,调用它的await()方法阻塞的当前线程会被释放(其实就是从for循环中结束返回),继续执行剩余的代码。
这个类的结构很简单,就不画类图了,直接贴出代码
package java.util.concurrent; import java.util.concurrent.locks.AbstractQueuedSynchronizer; public class CountDownLatch { private static final class Sync extends AbstractQueuedSynchronizer { private static final long serialVersionUID = 4982264981922014374L; Sync(int count) { setState(count); } int getCount() { return getState(); } protected int tryAcquireShared(int acquires) { return (getState() == 0) ?
文末获取资源,收藏关注不迷路
文章目录 前言一、研究背景二、研究意义三、主要使用技术四、研究内容五、核心代码六、文章目录 前言 随着社会经济的快速发展,人们的生活水平得到了显著提高,但随之而来的社会问题也越来越多。其中最为显著的就是就业问题。为此,招聘信息的展示也变得越来越为重要。但是在大量的招聘信息中,人们在提取自己最想要的信息时变得不那么容易,对于应聘者也是如此。本系统通过对网络爬虫的分析,研究智通人才网站数据,尝试使用Python技术进行开发,将智通人才网招聘信息尽可能的爬取出来,并对结果进行检测判断,最后可视化分析出来,为用户提供精确的查询结果。IT行业招聘数据分析与岗位推荐系统旨在提高数据挖掘的效率,便于科学的管理和分析招聘数据。
本文先分析IT行业招聘数据分析与岗位推荐系统的背景和意义;对常见的爬虫原理,获取策略,信息提取等技术进行分析;本系统使用python进行开发,MySQL数据库进行搭建,实现了招聘的数据爬取;对数据库的查询结果进行检测并可视化分析,对系统的前台界面进行管理,分析爬取的结果,并对招聘数据结果进行大屏显示;最后通过测试实现了数据爬取,存储过滤和数据可视化分析,以及系统管理等功能。
一、研究背景 互联网信息技术已经发展了很长时间,时至今日,越来越多的终端设备出现在人们的生活中,各种网络技术、移动终端日益成熟,而且价格越来越平民化。互联网技术已经到了前所未有的高度,借助于网络基础设施的建设,各种电子芯片和云计算快速的发展。传统信息的传播方式逐渐萎靡,比如报纸杂志等,几乎破产。目前人们只需要通过掌上电脑或者手机就可以查询到自己所需的信息,之所以网络设备如此受欢迎,是因为借助互联网技术所提供的强大信息呈现在网络中,只需要通过手指一点,就可以获取到自己想要知道的内容。用户只需要通过一个关键字,就可以从海量的信息中检索出相关的信息词条,然后将这些信息可视化呈现在用户面前,这种方式受到了用户的喜爱。
本课题所研究的IT行业招聘数据分析与岗位推荐系统也广泛存在于互联网中,通过智通人才网搜索引擎,我们可以获取到对应的招聘数据,然而这些方法大多比较零碎,没有进行专门的分类,甚至存在一些假冒的和带广告性质的宣传,严重影响了招聘数据的获取体验。
近年来,IT行业逐渐成为热门行业,IT行业是个大范围,这个行业实在太大,其中又有很多的分支领域。如何选择前景好的,适合自己的领域重点发展,这是必然之路。目前大多数招聘平台仅具有基础的招聘信息筛选功能,缺乏为求职者进行精准信息推荐功能,无法提供及时且高质量的招聘信息。
智通人才网目前是国内比较大的专业招聘平台,拥有大量的招聘信息和求职者。使用爬虫技术,对智通人才网招聘数据进行抓取,得到海量的信息,然后对数据进行处理和分析,最终将分析的招聘数据数据可视化展现出来,可以服务大众。因此,本选题将招聘数据信息的收集置于具体的智通人才网平台,从而进行研究招聘情况和岗位偏向。
二、研究意义 在目前信息化时代,数据的收集和整理是非常重要的工作。高效的收集可以提高相关工作人员的工作效率。计算机技术也逐渐向精细化方面发展,技术的更新影响了人们的生产生活方式,不同的技术平台也不断的更新着相关的信息。传统的信息采收集都是采取人工的方式,并对信息进行整理、修改、存储等,严重影响了信息制作的时间成本。另外,随着信息量的增加,工作人员整理起来更加的繁琐,而且容易出错,更无从谈起精确的归纳和统计,所以效率逐渐低下。在这些重复的工作中,只有通过信息化技术手段来进行管理,才能有效的提高信息的获取效率。
本IT行业招聘数据分析与岗位推荐系统中,通过相关的技术手段对招聘数据进行爬取,收集智通人才网中的招聘数据信息,并将这些数据存储到数据库中,在收集招聘数据时进行清洗、归纳和整理,形成了有条理的数据集合,可以有效的提高招聘数据数据的效率。借助数据库平台的优势可以对数据进行查询和统计,本系统旨在实现用户对招聘数据的获取,并可以通过可视化平台对数据进行展现,提供系统内的信息检索手段,可以更有效的查询用户需要的招聘数据,最终实现了招聘数据的有效挖掘,提高了数据爬取的准确率,实现了数据的统计查询功能,并对爬取的数据进行管理,提高了工作效率。
对于即将毕业找工作的应届生和社会择业人员来说,上网快速找到合适的工作,无疑是急需的。招聘网站数据可视化项目从繁杂的招聘信息中提取出潜在的、有价值的数据,并以图形的形式进行直观化展示,将用户从一堆杂乱无章的数据里面解放出来。通过该系统用户能够更加高效的理解和分析招聘数据信息,快速获取自身所需要的信息使得招聘信息能够更加明确、有效地进行传递。有利于用户明确学习方向,以及所需要掌握的工作技能和知识。
本题目来源于求职招聘研发项目的子项目,该项目主要完成一个招聘数据系统的设计和开发,该系统用于收集当前地方招聘数据,然后通过爬取、清理、存储、统计招聘数据,并进行招聘数据,是现代化招聘系统不可缺少的部分,为具体岗位的需求发展趋势提供便捷的推荐模式。
大数据技术是获取数据价值极为重要的途径,而招聘大数据能让应聘者更直观地了解人才市场需求。本文提出一种基于大数据技术的招聘服务平台,通过数据可视化对招聘单位的人才需求信息通过图表展示,旨在为广大在求职者特别是初出校园的毕业生进行智能就业推荐服务。
三、主要使用技术 环境需要
1.运行环境:python3.7/python3.8。
2.IDE环境:pycharm+mysql5.7;
3.数据库工具:Navicat11
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.数据库:MySql 5.7版本;
技术栈
后端:python+django
前端:vue+CSS+JavaScript+jQuery+elementui
使用说明
使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
使用PyCharm 导入项目,修改配置,运行项目;
将项目中config.ini配置文件中的数据库配置改为自己的配置,然后运行;
运行成功后,在浏览器中输入:http://localhost:8080/项目名
四、研究内容 在目前计算机信息化快速发展过程中,招聘和求职逐渐转移到网络中来,本题目来源于求职招聘系统研发项目的子项目,该项目主要完成一个招聘数据系统的设计和开发,该系统用于收集当前地方招聘数据,然后通过爬取、清理、存储、统计招聘数据,并进行招聘数据,是现代化招聘管理不可缺少的部分,为热门岗位的推荐提供便捷的模式。本文旨在对智通人才网上的招聘信息、岗位信息进行爬取,收集各种类型的招聘数据信息。然后对招聘数据的内容进行分析,整理招聘数据信息。本系统首先分析智通人才网站的网站结构,查看网站网页的排版,然后读取其包含的招聘信息。具体分为以下几个步骤,指定智通人才网url,爬取网页信息,获取特定的智通人才网url存入队列中,提取招聘数据的信息,将信息存入数据库,然后对岗位和薪资等进行分析,得出招聘数据的可视化视图。
IT行业招聘数据分析与岗位推荐系统用户登录,先验证信息、成功启动系统后进行登录。登录验证成功后,获取到登录权限,跳转到系统首页。
进入到IT行业招聘数据分析与岗位推荐系统大屏界面,通过图形化显示出工作地点统计、学历统计、职位统计、公司类型统计、薪资统计。如果查询失败,返回IT行业招聘数据分析与岗位推荐系统的错误页面。
本系统使用智通人才网作为目标网站,先分析该网站的结构,然后对网页的数据进行爬取,在爬取过程中会遇到一些重复的招聘数据,需要对数据进行清洗,通过数据处理获取到相对完整的招聘数据,并把处理后的数据存储在对象中,通过循环对象来构造数据存储的插入语句,再进行数据存储,将数据保存在MySQL数据库中。
五、核心代码 # coding:utf-8 __author__ = "ila" from django.http import JsonResponse from .users_model import users from util.codes import * from util.auth import Auth import util.message as mes def users_login(request): if request.
文章目录 vue2和vue3有哪些区别?vue3有哪些新的API组合式API生命周期钩子全局API vue3的响应式系统响应式: 核心 setup语法糖到底是什么新项目应该用vue2还是vue3总结一下: vue3可以搭配哪些库使用 想起来上次好好认真学vue,还是刚实习那会儿,如今回头看,已是三年有余了。vue从当初的vue2也大升级到vue3了。新的 API,新的语法糖,新的响应式…
如今,我已不是以前那个小白了,对vue和js的使用也越来越熟练了,打算在好好系统的复习一下vue3的新特性。
vue2和vue3有哪些区别? 首先说明一下,vue2和vue3是Vue.js的两个主要版本。目前vue3已经更新到3.3.4的版本了
vue3是vue2的一个重大升级,当然vue2的版本也在更新,目前已经更新到2.7.14的版本
还有一个消息就是:
Vue 2 将于 2023 年 12 月 31 日停止维护。详见 Vue 2 延长 LTS。Vue 2 中文文档已迁移至 v2.cn.vuejs.org。想从 Vue 2 升级?请参考迁移指南。 我个人觉得vue2和vue3的区别主要有以下几个方面:
性能优化:Vue 3 在底层进行了重写,采用了更先进的编译器和运行时优化,提供了更好的性能表现。Vue 3 的虚拟 DOM 重构、组件渲染优化以及更新机制的改进等方面都使得应用程序的性能更高效。组合式 API:Vue 3 引入了组合式 API,这是一种新的组件组织方式,可以更灵活地复用和组合逻辑。与 Vue 2 中的 Options API 不同,组合式 API 基于函数,可以更清晰地分离关注点,并提供了更好的 TypeScript 支持。Composition API:Vue 3 中的 Composition API 可以让开发者根据功能组织代码,而不是按照选项对象的方式。它可以更好地处理组件中的逻辑复用、代码组织和代码重用。更小的包体积:由于底层的重构和模块的重组,Vue 3 的包体积更小,以及更好的树摇(Tree Shaking)支持,可以减少最终打包文件的大小。TypeScript 内建支持:Vue 3 对于 TypeScript 的支持更加友好,包括改进的类型推断、更好的声明文件支持和针对 Composition API 的类型推导。更好的响应式系统:Vue 2 的响应式系统通过 Object.
1、先搭建实验环境,新添加硬盘sdb1,给到一个5G分区,并格式化为xfs文件系统,临时挂载在一个新目录/data下,并且在/data目录中创建两个文件123.txt,456.txt
2、备份:将sdb1的挂载目录data中的数据备份至/opt/backup中,再将/data中的文件删除,再将backup中的数据解析恢复至原挂载目录/data中,再进入/data目录中进行查看
Anaconda是python常用的包和环境管理器,在生产过程中,有时候需要对环境进行迁移。本文参考Anaconda官方教程,并结合自身经验,提供了将一台可以联网并可以运行目标程序的源计算机A上的环境迁移到一台不能联网的目标计算机B上的解决方案。
在源计算机A上: 该部分在Linux和Windows上操作相同
1. conda-pack安装 推荐使用conda-pack工具进行环境打包,conda-pack是一个命令行工具,它能够打包环境中安装的所有二进制包,满足离线迁移的要求。注意确保目标计算机具有与源计算机相同的平台和操作系统,并且两台计算机的Anaconda版本要保持一致。在base环境中安装conda-pack,从而使其在子环境中可用。conda-pack可以在conda-forge或PyPI上获得。
conda安装(推荐) conda install -c conda-forge conda-pack pip安装 pip install conda-pack 2. 环境打包 文中所有的my_env均为要迁移的环境名,需根据实际情况进行替换,如tensorflow-gpu等。
# 将虚拟环境 my_env 打包为 my_env.tar.gz conda pack -n my_env 执行完这条命令后会在命令行的当前路径下找到一个my_env.tar.gz的压缩包,该压缩包即为打包的环境,将该压缩包拷贝到目标计算机B上。
在目标计算机B上: Linux # 切换到Anaconda环境目录 cd /root/anaconda3/envs # 创建`my_env`文件夹 mkdir -p my_env # 将环境解压到 `my_env`,`~/my_env.tar.gz`是环境压缩包的绝对路径 tar -xzf ~/my_env.tar.gz -C my_env # 激活环境 source /root/anaconda3/envs/my_env/bin/activate # 在环境中运行python (my_env) $ python # 停用环境 (my_env) $ source /root/anaconda3/envs/my_env/bin/deactivate Windows 在Anaconda的安装目录下打开envs文件夹,新建my_env文件夹,将压缩包my_env.tar.gz中的文件解压到该文件夹中。
打开cmd命令行
# 激活环境 C:\ProgramData\Anaconda3\envs\my_env\Scripts\activate.bat # 停用环境 C:\ProgramData\Anaconda3\envs\my_env\Scripts\deactivate.
通过Jenkins官网方式安装,官网地址:Jenkins
# 执行命令
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
# 执行
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
# yum方式安装jdk 11 (Jenkins新版本已经放弃Java8了)
yum install fontconfig java-11-openjdk
# 安装Jenkins
yum install jenkins
# 安装完毕 执行启动
systemctl start jenkins
访问你的 ip:8080 可以看到Jenkins启动成功了 执行 cat /var/lib/jenkins/secrets/initialAdminPassword 就可看到初始化密码了 之后选择插件来安装就可以进行插件下载了,最后再设置你的第一个管理员用户。
如果需要修改默认端口可通过 vim /etc/sysconfig/jenkins 进行修改配置
C++模板——待决名 本文将持续更新,如果有了解这块内容的小伙伴欢迎评论区留言,最近遇到这个问题很多次了😭
概念 参考官方文档:
待决名 - cppreference.com为什么C++模板类的非限定名、待决名名字查找不考虑待决基类? - 知乎 (zhihu.com)【需要较多的前置知识】 简单来说:
template<typename T> struct X { void f_x(){} }; template<typename T> struct Y : X<T> { void f_y() { f_x(); // 非待决名,函数查找在不知道T的具体类型时(即模板未实例化)就查找【立即绑定】 this->f_x(); // 待决名,函数查找在知道T的具体类型时(即模板已实例化)才查找【待会绑定】 } } 我们应该在待决名的情况下,使用待决名的成员;在非待决名的情况下,使用非待决名的成员。
在模板中的使用 参考官方文档:无限定的名字查找 - cppreference.com
问题 问题1: #include <iostream> template<typename T = int> class Base { public: Base() :m_a(0) {} Base(T a) :m_a(a) {} virtual void func(){ // 假设T类型重载了<<运算符且能被输出 std::cout << "Base func()"
1.必须先配置jdk环境,安装jdk参考 Linux配置jdk 2.先卸载Jenkins # rpm卸载
rpm -e jenkins
# 检查是否卸载成功
rpm -ql jenkins
# 彻底删除残留文件
find / -iname jenkins | xargs -n 1000 rm -rf
3.安装Jenkins 在 /usr/ 目录下创建 jenkins文件夹
mkdir -p jenkins
4.下载Jenkins 官网:下载Jenkins 选择合适的版本即可(注意Jenkins版本2.346之后不再支持Java8)
5.把下载好的安装包上传到服务器 /usr/jenkins 目录下 # 先执行下面两条命令:
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
#安装Jenkins需要的key
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
#解压安装命令
rpm -ivh jenkins-2.346-1.1.noarch.rpm
# 修改jekins配置文件 vim /etc/init.d/jenkins # 修改 /etc/sysconfig/jenkins
vim /etc/sysconfig/jenkins
# 修改完配置之后 执行下面命令
systemctl daemon-reload
# 启动Jenkins
2023-2024年云赛道模拟题库上线啦,全面覆盖云计算,云服务,大数据和人工智能考点,都是带有解析,实时更新,永久使用 参赛对象及要求:
参赛对象:现有华为ICT学院及未来有意愿成为华为ICT学院的本科及高职院校在校学生。
参赛要求:
1、为ICT学院可报名选手数量不限,非华为ICT学院最多可报30名选手;
2、参加全国总决赛队伍需要具备可用PC和上网条件;
3、总决赛参赛团队必须由3名学生和1名指导老师组成,学生及指导老师需来自同一所高校;
4、每名总决赛参赛选手只能参加一个赛道(实践赛与创新赛报名互斥)。
赛程介绍:
三个阶段:区域赛;国家赛;全球总决赛。
比赛分为实践赛和创新赛,其中实践赛包含网络和云两个赛道,主要考察学生的ICT理论知识储备、上机实践能力以及团队合作能力;创新赛聚焦物联网、大数据、人工智能等新技术方向的应用创新,主要考察学生的创新、创业与合作开发能力。
五、奖项设置
特等奖,一等奖,二等奖,三等奖。
需要题库麻烦在评论区一键三连,并留言哈,我会在后台私聊你们的哈 2023-2024年云赛道模拟题库
云计算考点
1.在华为云Stack中,为了方便管理员结合企业的IT项目管理云资源,可以创建企业项目,通过企业项目配额来控制各部门对云资源池的使用量。以下哪一项角色无法创建企业项目?(云计算考点)
A.二级VDC管理员
B.代维管理员
C.运营管理员
D.一级VDC管理员
答案:B
解析:在华为云Stack中,企业项目是由运营管理员或者一级VDC管理员创建的。代维管理员是负责维护云平台设备和系统的人员,他们不具备创建企业项目的权限,因此答案是B.代维管理员。
2.以下关于华为云Stack作为商业化解决方案的描述,错误的是哪一项?(云计算考点)
A.可靠性,包括整体可靠性、数据可靠性和单一设备可靠性
B.安全性,遵循行业安全规范,设计安全防护,保证客户数据中心安全
C.可扩展性,支撑数据中心的资源,需要根据业务应用工作负荷需求进行弹性伸缩,IT基础架构应与业务系统松耦合
D.先进性,每年两次同步开源OpenStack发行版本,保证最新开源OpenStack特性同步至客户现网环境
答案:D
解析:华为云Stack作为商业化解决方案,确实具备可靠性、安全性和可扩展性等特点。但是,华为云Stack并不会每年两次同步开源OpenStack发行版本,这是错误的描述。因此,错误的选项是D.先进性。
14.到备份服务器,需要选取对应组件的备份文件,备份文件的原则为?(云计算考点)
A.先查看相应组件故障告警的时间,选取故障时间之前最接近的备份文件进行恢复
B.先查看相应组件故障告警的时间,选取故障时间之后最接近的备份文件进行恢复
C.先查看相应组件故障告警的时间,选取故障时间之前体积最大的备份文件进行恢复
D.先查看相应组件故障告警的时间,选取故障时间之后体积最大的备份文件进行恢复
答案:A
解析:备份文件的原则是先查看相应组件故障告警的时间,选取故障时间之前最接近的备份文件进行恢复。在备份服务器中,存储了各个组件的备份文件,当某个组件发生故障需要进行恢复时,需要选择合适的备份文件进行恢复操作。为了确保数据的完整性和准确性,通常选择故障时间之前最接近的备份文件进行恢复。这样可以尽可能地恢复到故障发生之前的状态,减少数据损失。因此,选项A是正确答案。选项B表示选择故障时间之后最接近的备份文件进行恢复,不符合数据恢复的原则。选项C和D则是根据备份文件的体积大小进行选择,与故障时间是否匹配无关,也不符合数据恢复的原则。
15.当模板制作过程中没有配置“Users“权限组,那么在追加虚拟机用户时,权限组可以设置成?(云计算考点)
A.Users
B.Auditors
C.Operators
D.Administrators
答案:D
解析:当模板制作过程中没有配置"Users"权限组时,追加虚拟机用户时可以设置权限组为"Administrators"。权限组用于定义虚拟机用户的权限级别和访问权限。在缺少"Users"权限组的情况下,"Administrators"权限组是最高权限组,具有最高的管理权限和访问权限。因此,选项D中的"Administrators"是正确的选择。选项A的"Users"权限组在该场景下不可用,选项B和C的"Auditors"和"Operators"权限组的权限级别较低,不符合追加虚拟机用户的需求。
云服务考点 73.哪些操作只有在弹性云服务器关机的情况下才进行?(云服务考点)
A.重置密码
B. 创建镜像
C.更改安全组
D.迁移云服务器
答案:D
解析:在弹性云服务器运行时,可以进行的操作包括重启、调整配置、更改安全组等。但是,有些操作只有在弹性云服务器关机的情况下才能进行。以下是对每个选项的解释:A. 重置密码:不需要关闭弹性云服务器即可进行密码重置操作。B. 创建镜像:可以在弹性云服务器运行时创建镜像,也可以在关机状态下创建。C. 更改安全组:可以在弹性云服务器运行时更改安全组,也可以在关机状态下更改。D. 迁移云服务器:只有在弹性云服务器关机的情况下才能进行迁移,因为需要先停止运行的云服务器并将其数据复制到新的位置,然后重新启动云服务器。因此,选项D 描述了只有在弹性云服务器关机的情况下才能进行的操作。
74.若伸缩组中只启用了一个伸缩策略,伸缩策略中执行动作为:增加两个实例,请问当前伸缩组中有多少个实例?(云服务考点)
A. 1
B. 2
C. 3
D. 不确定
答案:D
解析:根据题目描述,伸缩组中只启用了一个伸缩策略,该伸缩策略执行的动作是增加两个实例。根据给定的信息,无法确定当前伸缩组中有多少个实例。因为我们不知道在执行该伸缩策略之前伸缩组中有多少个实例。假设在执行该伸缩策略之前伸缩组中有N个实例,执行增加两个实例的动作后,伸缩组中的实例数量将增加为N+2个。但由于题目中没有提供伸缩组当前的实例数量,所以无法确定伸缩组中有多少个实例。因此,选项D 不确定是正确答案。
前言 MinIO 是一款高性能的对象存储系统,它可以用于大规模的 AI/ML、数据湖和数据库工作负载。它的 API 与Amazon S3 云存储服务完全兼容,可以在任何云或本地基础设施上运行。MinIO 是开源软件,也提供商业许可和支持
MinIO 的特点有:
简单:MinIO 的安装和使用都非常简单,只需几分钟就可以搭建一个对象存储服务高性能:MinIO 是世界上最快的对象存储系统,可以在32个 NVMe 驱动器和 100Gbe 网络的集群上达到 325 GiB/s 的读取速度和 165 GiB/s 的写入速度Kubernetes原生:MinIO 支持所有主流的 Kubernetes 发行版,可以在公有云、私有云和边缘云上部署企业级:MinIO 提供了一系列的高级功能,如活动活动复制、对象锁定、桶和对象不变性、加密、自动化数据管理接口等 环境搭建 服务器 在腾讯云、阿里云等云厂商选购服务器,如果没有云服务器,也可以在电脑上安装虚拟机
虚拟机安装教程:在虚拟机 VMware 中安装 CentOs 7及使用 Xshell 进行连接
Docker 配置 Docker 环境:在 CentOs7 中安装宝塔面板和 Docker(包括MySQL,Redis)
部署 MinIO Docker 部署 使用容器启动 MinIO,如果没有镜像,会自动拉取镜像
MINIO_ACCESS_KEY 设置登录用户名(至少 3 位),MINIO_SECRET_KEY 设置登录密码(至少 8 位),自行修改(下面默认 admin/admin123)
-v /home/data:/data 即宿主机目录 /home/data 映射容器内目录 /data,同理 -v /home/config 为映射配置文件数据卷
docker run -p 9000:9000 -p 9001:9001 --name minio -d --restart=always \ -e "