element

AMS:用类json配置快速搭建管理后台页面

三世轮回 提交于 2020-11-17 02:57:03
今天给大家分享一个开源项目——AMS,一个由唯品会开源的,基于类json配置的管理后台前端解决方案。 背景 我们先来回顾一下,管理后台的搭建方式。 最原始的方式,前后端还未分离,前后端代码融合一起,往往是后端把整个管理后台负责了 发展到前后端分离和JQ兴起,前端可以完全手写实现,也可以使用类似bootstrap这些框架进行快速搭建 在发展到React/Vue这些MVVM框架的兴起,也产生了很多对应的配套,比如Element-ui、Ant Design 由于管理后台对UI要求不高以及功能通用,UI框架的使用给前端带来极大的方便,前端可以不需要再关心UI组件的实现,只需要把UI框架提供的组件像搭积木一样搭建,然后再去写数据交互逻辑,就可以比较快的实现一个管理后台。 这样看好像很完美,特别是用着高质量的UI框架,坑少~ 但是!积木搭久了,你会发现还是要写不少代码: UI组件代码。比如你写一个列表,拿Element-ui举例,你可能需要用到 el-table 、 el-table-column ,然后再来个分页 el-pagination 。可能90%的场景都是这样的,但是你每次都要写,即使复制,可能也要微调 搭完UI,然后要写数据逻辑交互,比如请求个列表接口,梳理接口字段,把数据塞到表格,然后处理分页时的数据交互逻辑。同理,每个项目每个列表都要这样。 上面举例的只是一个列表场景

selenium 入门(Java)

核能气质少年 提交于 2020-11-16 00:24:46
官网: https://www.seleniumhq.org/ 下载地址: https://sites.google.com/a/chromium.org/chromedriver/downloads 华为镜像地址: https://mirrors.huaweicloud.com/chromedriver/ 阿里镜像地址: https://npm.taobao.org/mirrors/chromedriver/ 下载时,浏览器版本与 selenium 驱动版本要对应。 引入依赖,这里测试了 chrome 与 ie < dependency > < groupId > org.seleniumhq.selenium </ groupId > < artifactId > selenium-chrome-driver </ artifactId > < version > 3.141.59 </ version > < exclusions > < exclusion > < artifactId > guava </ artifactId > < groupId > com.google.guava </ groupId > </ exclusion > </ exclusions > </ dependency > < dependency > < groupId > org

vue elementUi中uolad文件上传和v-viewer相结合实现图片的预览下载和删除功能

|▌冷眼眸甩不掉的悲伤 提交于 2020-11-15 17:50:12
1.首先安装element ui 和 v-viewer(可以使用cnpm)   npm i element-ui -S   npm i v-viewer -S 2.全局配置element ui 和 v-viewer(main.js中)   import ElementUI from 'element-ui'   import 'element-ui/lib/theme-chalk/index.css'     Vue.use(ElementUI)   import Viewer from 'v-viewer'   import 'viewerjs/dist/viewer.css'   Vue.use(Viewer, {     defaultOptions: {       zIndex: 9999     }   }) 3.页面中使用 <template>   <div>     <el-upload action="action" ref="upload" list-type="picture-card" :auto-upload="false"     accept=".jpg, .jpeg, .png, .gif, .bmp, .JPG, .JPEG, .PBG, .GIF, .BMP" >       <i slot="default" class="el-icon

推荐算法注意点和DeepFM工程化实现

*爱你&永不变心* 提交于 2020-11-15 11:31:18
©PaperWeekly 原创 · 作者|贲忠奇 学校|混沌大学推荐算法工程师 研究方向|推荐算法、反作弊 缘起 今年疫情期间开始优化公司的推荐系统,因为 DeepFM 具有使用线性特征、低阶交叉特征和高阶特征的优点,决定采用此算法试试能否提高线下的 auc 和线上的 CTR 预估。 DeepFM 算法介绍详见 [1],在 DeepFM 工程化的时候,遇到了特征稀疏、一列多值和共享权重的情况,主要参考石塔西的实现。那我为什么要继续炒冷饭呢?因为石塔西实现的 TensorFlow 框架用的是高阶 api,显得灵活性低一些。 主要存在两个问题,在实际过程中,无法保存 auc 最优的模型,early stopping 也不能保证停在效果最好的阶段;在线上预测阶段是不能按照文件的方式去读取。主要是针对以上两个问题,进行改造,实现了工程化上线。 效果方面:点击率 PV 提升了 2.67%;点击率 UV 提升了 3.64%;平均点击数提升了 4.53%。推荐系统实际工程中需要注意样本、特征、算法等方方面面的问题,下面开始介绍整个项目。 项目背景 混沌大学 APP(以下简称 APP)是一个提供哲科思维和创新商业的课程在线学习软件,在线视频学习是 APP 提供的最重要的业务功能。APP 内提供上百门十几分钟至几小时不等的长视频课程,为了用户更快的发现合适自己的课程,以及拥有更好的学习体验,APP

PyTorch中scatter和gather的用法

青春壹個敷衍的年華 提交于 2020-11-14 07:38:04
PyTorch中scatter和gather的用法 闲扯 许久没有更新博客了,2019年总体上看是荒废的,没有做出什么东西,明年春天就要开始准备实习了,虽然不找算法岗的工作,但是还是准备在2019年的最后一个半月认真整理一下自己学习的机器学习和深度学习的知识。 scatter的用法 scatter中文翻译为散射,首先看一个例子来直观感受一下这个API的功能,使用pytorch官网提供的例子。 import torch import torch.nn as nn x = torch.rand(2,5) x tensor([[0.2656, 0.5364, 0.8568, 0.5845, 0.2289], [0.0010, 0.8101, 0.5491, 0.6514, 0.7295]]) y = torch.zeros(3,5) index = torch.tensor([[0,1,2,0,0],[2,0,0,1,2]]) index tensor([[0, 1, 2, 0, 0], [2, 0, 0, 1, 2]]) y.scatter_(dim=0,index=index,src=x) y tensor([[0.2656, 0.8101, 0.5491, 0.5845, 0.2289], [0.0000, 0.5364, 0.0000, 0.6514, 0.0000], [0

将AE开发的专题图制作功能发布为WPS

南楼画角 提交于 2020-11-13 09:33:59
AE开发可以定制化实现ArcGIS的地理处理功能,并实际运用于其他方面的工作,有时候我们还希望将AE开发的功能发布为网络地理信息处理服务(WPS),从而能在Web端更自由便利地调用所需要的地学处理算法。本文记录的就是这一过程,大体思路为:用C#类库封装专题图制作的方法并生成为Dll,再用C++调用这一Dll并生成C++的Dll,然后在Java中用jna来调用C++的Dll,实现Java调用AE开发的专题图制作的算法,最后用Tomcat将这一地学算法发布为服务。该服务只需要传递Shp文件的路径和专题图输出路径两个参数,便可以自动化执行,输入Shp矢量文件,输出Jpg专题图文件。 具体实现过程分为以下三方面来进行介绍: 一、将AE开发的功能封装为C#的Dll 在实验阶段,我其实先写了一个C#的Windows窗体应用程序,用以实现专题图制作功能,其界面如下所示: 这个程序可以实现简单的专题图制作功能,以天地图图层为背景,加载Shp文件到PageLayoutControl控件,通过点击按钮来添加标题、指北针、比例尺、图例等专题图要素,这些要素依据Shp文件并调用AE的相关接口来生成,生成后加载到PageLayoutControl窗口的固定位置,最后通过点击按钮来将其导出为Jpg图片,并保存在本地目录。 但是由于Windows窗体应用程序无法生成可以被C++调用的Dll

javascript ES6 新特性之 扩展运算符 三个点 ...

a 夏天 提交于 2020-11-13 06:23:34
对于 ES6 新特性中的 ... 可以简单的理解为下面一句话就可以了: 对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中。 作用类似于 Object.assign() 方法,我们先来看一下 Object.assign() 方法: Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。如下: const target = { a: 1, b: 2 }; const source = { b: 4, c: 5 }; const returnedTarget = Object.assign(target, source); console.log(target); // { a: 1, b: 4, c: 5 } console.log(returnedTarget); // { a: 1, b: 4, c: 5 } 语法 Object.assign(target, ...sources) 参数: target(目标对象), sources(源对象) 返回值: 目标对象。 Object.assign() 方法中如果有相同的对象属性前面的会被后面的替换掉。 接下来我们看一个最简单的例子: let bar = { a: 1, b: 2 }; let baz = { ...bar }; console

ES6对于数组的扩展

做~自己de王妃 提交于 2020-11-12 17:54:40
扩展运算符(...),用于将数组转化为逗号分隔的参数序列。 ...实现数组的拷贝: 数组是一维数组时,扩展运算符可以深拷贝一个数组(对象同理): let arr = [1, 2, 3, 4, 5, 6 ]; let arr1 = [...arr]; arr == arr1 // false 当数组为多维时,数组中的数组变成浅拷贝(对象同理): let arr = [1, 2, 3, 4, 5, 6, [1, 2, 3 ]]; let arr1 = [...arr]; arr1.push( 7 ); arr1[arr1.length - 2][0] = 100 ; console.log(arr); // [1, 2, 3, 4, 5, 6,[100, 2, 3]] console.log(arr1); // [1, 2, 3, 4, 5, 6, [100, 2, 3],7] 合并数组: [...arr,...arr2,...arr3] // 结合解构赋值,生成剩余数组 -- 扩展运算符只能置于参数最后 let [one,...rest] = [1,2,3,4,5 ]; one // 1 rest // [2,3,4,5] // 扩展字符串成数组 [... 'babe'] // ["b", "a", "b", "e"] // 可以把类数组对象转换为真正的数组 function

java-集合框架

荒凉一梦 提交于 2020-11-10 05:03:08
一 集合的由来 需求1:20个学员。用Student描述,创建Student对象。 既然对象很多先进行存储---数组。 Student[] stus = new Student[20]; 需求2:又来来了一个新学员。 原来的容器用不了。数组的长度是固定的。 解决: 创建一个新数组,将原来数组中的元素复制到新数组中。 麻烦。Java中提供解决问题的对象---->集合。 当数据多了需要存储,需要容器,而数据的个数不确定,无法使用数组,这时可以使用Java中另一个容器--集合。 集合和数组的区别? 数组的长度是固定的。 集合的长度是可变的。 数组中存储的是同一类型的元素,可以存储基本数据类型值。 集合存储的都是对象。而且对象的类型可以不一致。 什么时候使用集合呢? 当对象多的时候,先进行存储。 这些容器怎么区分? 区分的方式:每一个容器的数据结构不一样。 数据存储到的一种方式。 不断的向上抽取过程中,出现体现,形成了集合框架。 最顶层:Collection接口。 学习体系:看顶层,用底层。 了解顶层Collection: 一个容器:添加,删除,获取等功能。 Collection: |--List:有序的,带索引的,通过索引就可以精确的操作集合中的元素,元素是可以重复的。 List提供了增删改查动作 增加add(element) add(index,element) ; 删除remove