def

Jenkins Pipeline 参数详解

♀尐吖头ヾ 提交于 2020-11-10 07:03:16
Pipeline 是什么 Jenkins Pipeline 实际上是基于 Groovy 实现的 CI/CD 领域特定语言(DSL),主要分为两类,一类叫做 Declarative Pipeline ,一类叫做 Scripted Pipeline 。 Declarative Pipeline 体验上更接近于我们熟知的 travis CI 的 travis.yml ,通过声明自己要做的事情来规范流程,形如: pipeline { agent any stages { stage( ' Build ' ) { steps { // } } stage( ' Test ' ) { steps { // } } stage( ' Deploy ' ) { steps { // } } } } 而 Scripted Pipeline 则是旧版本中 Jenkins 支持的 Pipeline 模式,主要是写一些 groovy 的代码来制定流程: node { stage( ' Build ' ) { // } stage( ' Test ' ) { // } stage( ' Deploy ' ) { // } } 一般情况下声明式的流水线已经可以满足我们的需要,只有在复杂的情况下才会需要脚本式流水线的参与。 过去大家经常在 Jenkins 的界面上直接写脚本来实现自动化

护网杯2019 mergeheap --pwn

北战南征 提交于 2020-11-10 06:43:21
护网 又是签到 一天 这道题一开始 不懂得如何泄露 libc 信息,就蒙了 后来群里师傅也是刚刚好 做出 到这里 我就接着做了 。 先看下保护,发现 全开了 然后 就看下流程 大概 就是添加 chunk show 合并两个chunk 可利用的 洞就是 int merge() { int v1; // ST1C_4 signed int i; // [rsp+8h] [rbp-18h] int index1; // [rsp+Ch] [rbp-14h] int index2; // [rsp+10h] [rbp-10h] for ( i = 0 ; i <= 14 && ptr_array[i]; ++ i ) ; if ( i > 14 ) return puts( " full " ); printf( " idx1: " ); index1 = sub_B8B(); if ( index1 < 0 || index1 > 14 || ! ptr_array[index1] ) return puts( " invalid " ); printf( " idx2: " ); index2 = sub_B8B(); if ( index2 < 0 || index2 > 14 || ! ptr_array[index2] ) return puts( " invalid " );

【Python】【有趣的模块】tqdm | inspect

╄→гoц情女王★ 提交于 2020-11-10 03:38:51
tqdm """ #【tqdm】 显示循环的进度条,再也不用担心程序跑到哪里还要跑多久了 #tqdm 可以直接包裹iterable对象 from tqdm import tqdm,trange from time import sleep text = "" for char in tqdm(['a','b','c','d']): text += char sleep(1) #trange(i)相当于tqdm(range(i)) from tqdm import tqdm,trange from time import sleep for i in trange(100): sleep(0.01) #可以在循环外预先定义tqdm对象 pbar = tqdm(['a','b','c','d','e','f','g','aaa']) for char in pbar: pbar.set_description("Processing %s" % char) #Processing aaa: 100%|██████████| 8/8 [00:00<00:00, 14260.28it/s] ''' 有两个参数比较有用,desc(str)和leave(bool) desc可以指定这个循环的的信息,以便区分。上面的set_description(str)和这个应该是一样的。

django 序列化

做~自己de王妃 提交于 2020-11-10 03:07:39
对于查询数据,如果使用ajax请求发送数据,获取数据后,如何在前台展示,那么就需要后台返回json数据,在前台处理。 情景一:   后台查询的是queryset ,里面是一个个对象,也就是使用了all()方法。 后台处理:   用到了django 提供的序列化。 from app01 import models import datetime import json from django.core import serializers from django.shortcuts import render, HttpResponse def xlh(request): message = { ' status ' : False, ' da ' : None, ' error ' : None} if request.method == ' GET ' : return render(request, ' xlh.html ' ) else : data = models.Book.objects.all() data = serializers.serialize( ' json ' , data) print (type(data)) message[ ' da ' ] = data message[ ' status ' ] = True return

flask 过滤器

佐手、 提交于 2020-11-10 02:53:51
作用的对象是jinja2模版中的变量({{}}) 参考链接: http://jinja.pocoo.org/docs/2.9/templates/#builtin-filters 内置过滤器 字符串操作 { # 当变量未定义时,显示默认字符串,可以缩写为d #} <p>{{ name | default( ' No name ' , true) }}</p> { # 单词首字母大写 #} <p>{{ ' hello ' | capitalize }}</p> { # 单词全小写 #} <p>{{ ' XML ' | lower }}</p> { # 去除字符串前后的空白字符 #} <p>{{ ' hello ' | trim }}</p> { # 字符串反转,返回"olleh" #} <p>{{ ' hello ' | reverse }}</p> { # 格式化输出,返回"Number is 2" #} <p>{{ ' %s is %d ' | format( " Number " , 2) }}</p> { # 关闭HTML自动转义 #} <p>{{ ' <em>name</em> ' | safe }}</p> { % autoescape false % } { # HTML转义,即使autoescape关了也转义,可以缩写为e #} <p>{{ ' <em>name<

字节跳动AI Lab秋招提前批已经过半啦,还没上车的小伙伴抓紧了!

只谈情不闲聊 提交于 2020-11-10 01:45:19
1. 我们是谁? 字节跳动AI Lab,成立于2016年,致力于开发为字节跳动内容平台服务的创新技术,不仅仅是进行理论研究,我们的想法还可以通过实验证明和快速跟踪用于产品部署。 人工智能涉及的研究领域极多,我们重点关注以下领域:自然语言处理、计算机视觉、机器学习、系统&网络、计算机图形&增强现实、安全&隐私、语音与音频、数据挖掘 。公司平台的庞大用户群确保了有价值的用户数据的持续流入,这有助于我们改进现有模型,研发新的应用程序来提高用户体验。 我们拥有处于世界领先水平的研究人员,也致力于成为最聪明学生的教育中心,发挥他们无限的潜力。发表论文、发表演讲、参加会议,我们立志能够成为学术界积极的参与者。我们的科学家不是停留在封闭实验室的传统布局中,而是嵌入到整个组织,工程团队随时可以快速有效地大规模部署他们的最佳创意。 官网链接:https://ailab.bytedance.com/ 2. 福利待遇 就近住房补贴,用五环外的租房成本住在北三环城中心; 六险一金,入职即送年假7天,带薪病假高达8天,附带年度体检(仅限全职员工); 免费三餐自助,节省时间可选择盒饭,减肥健身可选择健康餐; 免费健身房和康体娱乐中心; 下午茶,零食水果、咖啡牛奶统统不限量👇 3. 投递方式 点击下方图片,长按扫描二维码。 点击阅读原文 , 直接去官网投递,记得输入我的内推码哦~ 本文分享自微信公众号 -

react项目打包部署上线完毕后,刷新报错404

非 Y 不嫁゛ 提交于 2020-11-09 19:22:00
报错分析: 在浏览器内可以从首页跳转到其他路由地址,而不报错是因为这些是由前端自己渲染的。React Router定义的对应路由,脚本并没有刷新访问请求后台数据,是JS动态更改的location。 当刷新时,先访问的是后台地址,反馈数据后再加载页面内的React代码,最后才在浏览器内执行,这时报错404。是因为后台并没有针对这个过程的路由给出返回的HTML内容,就没有执行React-Router。 只需要把原来的BrowserRouter替换成HashRouter,这样所有的请求都会定位在index.html页面,服务器端就不需要做任何的配置了。 路由控制为BrowserRouter时,URL是指向真实URL的资源路径,当通过真实URL路径访问网站时,由于路径是指向服务器的真实路径,而该路径下并没有相关的资源,所以访问时就报错404. 在React项目中采用React-Router来配置页面路由时,React-Router是建立在history基础上,常见的history路由方案有三种形式: 1、hashHistory 2、browserHistory 3、createMemoryHisory 在本地开发时使用BrowserRouter是不出现问题的,因为在webpack.config.js中使用了webpack-dev-server就已经做好了配置。 BrowserRouter:

堆重启_uaf_hacknote

ぃ、小莉子 提交于 2020-11-09 15:26:12
参考链接 http://blog.eonew.cn/archives/490 https://blog.csdn.net/weixin_44864859/article/details/107181869 这里记录下经典的含有后门的UAF漏洞程序。 //hacknote 最简单的堆题目 libc 2.23 以及 含后门的UAF漏洞程序 //hacknote先看第一个含有后门的UAF漏洞程序: 查看文件相关属性及开启保护 32位elf程序,没有去符号。// 给源代码会更香。 只开启了NX保护。 $ file hacknote_backdoor hacknote_backdoor: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=44ee75c492628b3691cdcdb07759e9bbe551644a, not stripped $ checksec hacknote_backdoor [*] Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX

图:BFS(深度优先搜索)图解分析代码实现

霸气de小男生 提交于 2020-11-09 11:26:26
文章目录 一、介绍 二、图的建立 2.1建立图类 2.2建立图 三、BFS 3.1图解: 3.2代码 四、DFS和BFS完整代码 一、介绍 图的DFS(深度优先搜索)与BFS(广度优先搜索)是图的两种遍历方式。 主要区别在于当到达图中的一个顶点后,DFS直接到达其中的一个(未遍历过的)顶点,之后再以这个新的顶点为基点重复上面的操作;而BFS到达图中的一个顶点后,会先遍历顶点周围的所有(未遍历过的)顶点,然后在以其中的一个顶点为基点,重复上面的操作。 举个简单的例子: 如果分别用DFS和BFS进行遍历(以A为起点): DFS :A B D E C (一条路走到头) BFS :A B C D E (先把A的周围走完,接着走完B和C的周围) 这篇文章将进行BFS的分析,前一篇文章分析DFS。 二、图的建立 2.1建立图类 使用邻接矩阵保存图的信息。 为了给每个顶点起名字,使用了两组map集合使顶点的名字与邻接矩阵的数字一一对应。 用boolean型数组记录某节点是否被访问过。 代码 : class graph { int vertexNum ; //顶点数 int edgeNum ; //边数 int [ ] [ ] adjacentMatrix ; //邻接矩阵 boolean [ ] isVisited ; //各顶点是否被访问 Map < Character , Integer >

批量重命名脚本(Python)

房东的猫 提交于 2020-11-09 09:36:44
便携的批处理脚本,代码如下: 1 import os 2 import sys 3 def rename(): 4 path=input( " 请输入路径(例如D:/picture): " ) 5 name=input( " 请输入开头名: " ) 6 startNumber=input( " 请输入开始数: " ) 7 fileType=input( " 请输入后缀名(如 .jpg、.txt等等): " ) 8 print ( " 正在生成以 " +name+startNumber+fileType+ " 迭代的文件名 " ) 9 count= 0 10 filelist= os.listdir(path) 11 for files in filelist: 12 Olddir= os.path.join(path,files) 13 if os.path.isdir(Olddir): 14 continue 15 Newdir=os.path.join(path,name+str(count+int(startNumber))+ fileType) 16 os.rename(Olddir,Newdir) 17 count+=1 18 print ( " 一共修改了 " +str(count)+ " 个文件 " ) 19 20 rename() 来源: oschina 链接: