element

Spring事务(二)事务自定义标签

北慕城南 提交于 2020-08-14 20:53:17
摘要: 本文结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。若有描述错误之处,欢迎指正。 目录 一、注册 InfrastructureAdvisorAutoProxyCreator 二、获取对应class/method的增强器 1. 寻找候选增强器 2. 候选增强器中寻找到匹配项 3. 提取事务标签 对于Spring中事务功能的代码分析,我们首先从配置文件开始人手,在配置文件中有这样一个配置:<tx:annotation-driven/>。可以说此处配置是事务的开关,如果没有此处配置,那么Spring中将不存在事务的功能。那么我们就从这个配置开始分析。 根据之前的分析,我们因此可以判断,在自定义标签中的解析过程中一定是做了一些辅助操作,于是我们先从自定义标签入手进行分析。 使用Idea搜索全局代码,关键字annotation-driven,最终锁定类TxNamespaceHandler,在TxNamespaceHandler中的 init 方法中: @Override public void init() { registerBeanDefinitionParser( "advice", new TxAdviceBeanDefinitionParser()); registerBeanDefinitionParser( " annotation

golang中删除切片中的元素

一世执手 提交于 2020-08-14 20:22:59
背景 从数组中删除一个元素是开发中经常会遇到的问题,今天探讨一下golang中有哪些优雅的删除方法 方案 方案一:移动法 思路:直接删除指定位置的元素,后面的元素依次往前移动一位 该方法保证了元素的顺序,但是如果数组过大的话,移动的代价较大,影响效率 func remove2(s []int, i int) []int { if i < 0 || i >= len(s) { return s } s[i] = s[len(s)-1] s=append(s[:i],s[i+1:]...) return s } 方案二:替换法 思路:将要删除的元素和数组的最后一个元素替换,然后数组的长度-1 该方法删除后不能保证之前的元素顺序,适合于对顺序不敏感的使用场景 func remove(s []int, i int) []int { if i < 0 || i >= len(s) { return s } s[i] = s[len(s)-1] return s[:len(s)-1] } 方案二:置0法 思路: 如果既不想改变数组中元素的顺序,也不想大面积移动元素,那么可以考虑将数组中元素用特殊元素替换的方式,例如,将元素用0或者-1替换的方式,后面判断的时候只需要判断元素的反特征进行遍历 参考 https://stackoverflow.com/questions/37334119/how

vue element-UI form 嵌套table 表单验证记录

核能气质少年 提交于 2020-08-14 20:18:42
效果图 代码 因为分不同模块,但校验需集合至一起,所以单独的搞到一起,在el-form标签上直接绑定即可 :model="tbodyFormData" vue data中定义数据 tbodyFormData: { tableListInfo: [], tableListNotGrade: [], standbyData: [] } 以下是主要嵌套渲染代码 重点在 prop属性的命名,有几层嵌套就写多少层级; :prop="'tableListInfo.' + index + '.gradeList.'+ ind + '.userName'" <template v-for="(list, index) in tbodyFormData.tableListInfo"> <tr :key="list.grade + index" class="colspan"> <td colspan="6" class="col-td">{{ list.grade }}</td> <td class="col-operation"><el-button type="text" size="small" @click="addLivecode(index)">添加活码</el-button></td> </tr> <template v-if="list.gradeList && list

Java 向数组中添加一个元素

半世苍凉 提交于 2020-08-14 18:00:12
方法 一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度。 向数组中添加元素思路: 第一步:把 数组 转化为 集合 list = Arrays.asList(array); 第二步:向 集合 中添加元素 list.add(index, element); 第三步:将 集合 转化为 数组 list.toArray(newArray); 例子: 将数组转化为集合1 String[] arr = {"ID", "姓名", "年龄" }; // 定义数组 List<String> list1 = Arrays.asList(arr); // 将数组转化为集合 1 View Code 定义需要添加元素的集合2 List<String> list2 = new ArrayList<> (); list2.add( "性别" ); list2.add( "出生日期" ); // 定义集合 2 ,并向其中添加元素: 性别、出生日期 View Code 定义一个新集合,将集合1、2中的元素添加到新集合 List<String> titleList = new ArrayList<String> (); // 定义新集合 titleList.addAll(list1); // 将集合 1 中的元素添加到新集合中 titleList.addAll(list2); // 将集合 2

Web自动化测试:UI自动化框架结构以及思路

ぐ巨炮叔叔 提交于 2020-08-14 16:27:54
在学会使用unittest后,实际上UI自动化的基础骨架已经搭建起来了,剩下的就是利于这套框架,增添一些我们需要的功能,目前看来,我们已经可以使用此框架来批量运行用例,欠缺的是整体的思路以及一些其他功能细节,比如日志记录、封装webdriver、读取数据库等功能的实现。 一、框架结构 其中: common: 一些基础的底层方法类,例如:测试报告类、数据配置读取类、日志类、封装webdriver类、数据库连接类、发送邮件类、公共方法类,只要是我们想要实现的一些功能,可以把基础方法的实现放在common文件夹。 config: 配置文件放在这里,比如:账号密码、数据库连接地址等。 log: 运行用例后,日志的存储文件夹。 report: 运行用例后,测试报告的存储文件夹。 page: 在POM设计模式下,关于具体UI页面操作的方法。 test_case: 具体存放编写的测试用例。 run_all: 用来批量运行测试用例。 二、一些设计的想法和理念 2.1数据分离 数据分离,顾名思义是指要把代码中的数据和代码分离开来,这样方便管理和维护。 在写用例以及框架时,会涉及到数据的处理,比如说:账号、密码、元素定位、测试数据等等,对于经常会用到,但是不会经常修改的数据,比如账号、密码等,可以写到配置文件里,然后再读取;而对于元素定位的话,我习惯统一放到类里,作为类的全局变量来进行维护调用

CondenseNet:可学习分组卷积,原作对DenseNet的轻量化改造 | CVPR 2018

房东的猫 提交于 2020-08-14 13:33:39
CondenseNet特点在于可学习分组卷积的提出,结合训练过程进行剪枝,不仅能准确地剪枝,还能继续训练,使网络权重更平滑,是个很不错的工作   来源:晓飞的算法工程笔记 公众号 论文:Neural Architecture Search with Reinforcement Learning 论文地址: https://arxiv.org/abs/1711.09224 论文代码: https://github.com/ShichenLiu/CondenseNet Introduction   DenseNet基于特征复用,能够达到很好的性能,但是论文认为其内在连接存在很多冗余,早期的特征不需要复用到较后的层。为此,论文基于可学习分组卷积提出CondenseNet,能够在训练阶段自动稀疏网络结构,选择最优的输入输出连接模式,并在最后将其转换成常规的分组卷积分组卷积结构。 CondenseNets   分组卷积能够有效地降低网络参数,对于稠密的网络结构而言,可以将$3\times 3$卷积变为$3\times 3$分组卷积。然而,若将$1\times 1$卷积变为$1\times 1$分组卷积,则会造成性能的大幅下降,主要由于$1\times 1$卷积的输入一般有其内在的联系,并且输入有较大的多样性,不能这样硬性地人为分组。随机打乱能够一定程度地缓解性能的降低

element ui设置表格表头高度和每一行的高度

拟墨画扇 提交于 2020-08-14 13:30:33
填坑记录:今天用element ui的表格组件做用户信息展示,直接拉取的官网的代码过来,发现表头和每一行都太高了,如下:      因为第一次使用element ui的表格组件,不太清楚会遇到这样的坑,以为能轻松控制高度,于是去百度大佬们的解决办法,也试了好几个,发现改变不了样式,快准备放弃等明天问下项目组的人的时候,看到了一篇文章:https://blog.csdn.net/u012499506/article/details/81217277(Vue修改element ui table tr th高度以及背景颜色),于是就抱着试试看的心态把大佬的改变背景色的代码复制过来用了一下,发现可以使用,于是就到处折腾,终于实现想要的效果了,先放上代码和效果图: .el- table__header tr, .el - table__header th { padding: 0 ; height: 40px; } .el - table__body tr, .el - table__body td { padding: 0 ; height: 40px; }      我发现表头的行高和表格list内容的行高经组件渲染出来后是在不同的类名下的,截图: 所以将上面的代码放在css下最外层的类名中即可,也不晓得是不是歪打正着。。。也算解决了我遇到的一个坑,留个记录。 补充:今天(2019/6

vue中使用element2

跟風遠走 提交于 2020-08-14 13:16:50
阻止谷歌下记住密码 当我们将input框的类型设置为密码框的时候,就会出现下面这种效果,不仅样式不统一,有的时候,密码框的上面并不是用户名,而是其他的内容,也会被强制显示为用户名: 首先需要解决样式问题: #app input:-webkit- autofill { -webkit-text-fill-color: #fff ! important; -webkit-box-shadow: none ! important; background - color: transparent; background - image: none; transition: background -color 999999s ease- in -out, color 999999s ease- in - out; } 其次,阻止谷歌自带的记住密码: 回车重定向 单个el-input获得焦点时,点击键盘回车,会触发路由重定向。 解决方法:@submit.native.preven t阻止表单默认事件 日期时间框的默认值在IE无法清除 element的日期框添加默认值后,在ie下,默认的清空按钮无法清空默认日期值: 数据应该是已经清空了,但是DOM没有刷新,所以需要强制刷新DOM: 自定义表头 <template> <div> <el-table- column v - for ="(item,

Find Minimum in Rotated Sorted Array 典型二分查找

人走茶凉 提交于 2020-08-14 12:51:24
https://oj.leetcode.com/problems/find-minimum-in-rotated-sorted-array/ Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2 ). Find the minimum element. You may assume no duplicate exists in the array. 解题思路: 最朴素的O(n)的方法,就是找到突然变小的那个元素,肯定是最小的。否则就说明所有元素一直变大,本来就是排序的,则返回第一个元素。 public class Solution { public int findMin( int [] num) { if (num.length == 0 ){ return 0 ; } int min = num[0 ]; for ( int i = 0; i < num.length; i++ ){ if (num[i] < min){ return num[i]; } } return min; } } 不过本题还有一个二分查找的方法,可以将时间复杂度降为O(lgN)。代码如下。 public

VUE 如何覆盖element组件样式

自作多情 提交于 2020-08-14 12:17:38
最近在用element UI开发一个toB系统时,发现设计稿和UI库有不小的出入,由于不是内部系统,所以这块的还原度没办法“得过且过”。我整理了一些覆盖UI库样式的“手段” 为什么UI库(这里用的是element UI)的组件不好直接覆盖? 我们通常的vue工程都是用vue-cli自动生成出来的,不知道大家有没有发现一个细节——生成的*.vue文件上会默认带上“scoped”,如下图: UI库不好覆盖的问题也基本从这里开始了。首先看“scoped”是什么?首先“scoped”并不是vue的专利,( “scoped”属性是HTML5的新特性,如果使用该属性,则样式仅仅应用到style元素的父元素及其子元素。 )说人话就是vue用了scoped属性,导致当前*.vue文件里的style仅仅作用于当前组件的元素,而对 部分 element UI的组件无效(一些简单的组件,例如el-button这种简单替换的还是可以覆盖的)。 “scoped”在工程中是如何工作的? 我们可以用自己的工程运行起来看一下。看看生成的页面是什么样的。 可以看到,在vue中引入了scoped这个概念,scoped的设计思想就是让当前组件的样式不会修改到其它地方的样式,使用了 data-v-hash 的方式来使css有了它对应模块的标识,这样写css的时候不需要加太多额外的选择器,方便很多。