在XAF中有Excel导出,但没有Excel导入,一开始不理解,难道Excel导入很难实现吗,当我自己去实现Excel导入功能时,才发现难的不是技术,而是要有足够的灵活性,在不同的项目中或不同的业务场景中,都会有不同的需求,可能需要很多客制化,那能不能实现通用的Excel导入功能呢,我感觉满足所有需求是不可能的,但满足大多数需求还是有可能的。
Excel导入本质是数据的映射,就是将Excel的行映射到XAF的BO对象中,这中间要涉及到数据类型的转换,如数值、日期、布尔、枚举、引用等类型,同时还要有数据的校验,由于Excel输入的灵活性及随意性,可以提高输入的方便性,但输入的准确性会大打折扣,所以数据的校验很重要。
结合XAF的特点,再加上Excel的灵活性,本Excel导入模块,优先考虑了采用XAF的Model进行Excel导入模板的创建,由于Model可以在设计时及运行时创建,这样可以解决Excel导入模板的灵活性,再通过XAF的条件表达式(Criteria)来实现数据的验证及数据的转换,基本可以解决大部分Excel导入的需求。
首先看一下项目结构:
项目中带有Sample的是示例项目,主要项目为三个,EasyXaf.ExcelImporters为主项目,EasyXaf.Blazor.ExcelImporters为Blazor适配项目,EasyXaf.Win.ExcelImporters为WinForm适配项目,根据项目类型选择不同的项目。
本模块支持XPO及EFCore,由于Blazor项目需要一个存储临时文件的实体,而XPO与EFCore的实体类是不一样的,模块中并没包含这个实体(ExcelImporterTempFile),而是将其放到了示例模块项目中,如下图
在项目引用模块时,需要将文件ExcelImporterTempFile.cs拷贝到自己的项目中,对于EFCore项目,还要将ExcelImporterTempFile类,添加到DbContext中,如下图
完成以上操作后,就可以正常使用了。
下面通过一个简单的示例来讲解Excel导入模块的功能
简易Excel模板制作
导出的Excel模板
编辑后的Excel模板
导入Excel数据
上面是简单的演示,Excel导入的过程需要4个步骤
模板的有效性验证
模板的制作是整个Excel导入模块的核心功能,为了提高用户在Excel输入的体验,同时为了避免输入错误数据,在模板中加入了有效性验证,如必填验证,数值及日期的范围验证,布尔值及枚举的下拉选择,同时还支持引用类型的下拉选择等
Excel录入数据
了解上面的简单介绍后,下面讲解一些具体的设置
在User中有一个IsActive属性,它的类型为布尔型,在本模块中布尔型默认会使用下拉选择,如果IsActive属性定义了CaptionForFalse及CaptionForTrue,则采用定义的文本,否则会采用'否'与'是',但同时我们也可以设置PredefinedValues属性,如非活动与活动
PredefinedValues不仅可以用在布尔型中,也可以用在其它所有类型中(在数值及日期中也可以使用),同时它的优先级最高,定义了PredefinedValues后,则会忽略其自身的下拉选择,如果用在枚举中,要保证与枚举顺序保持一致
Excel模板中的效果
默认情况下,在Excel模板中必填列的标头文本会加粗,如感觉不明显或想着重强调,可以修改相应的样式,NumberFormat对应着单元格的数值格式,可以通过它设置格式中数值或日期的显示格式。
Excel模板中的效果
如果我们没有设置列的Caption属性,它将采用BO中定义的Caption,如果BO的Caption也为空,则采用BO类型的Name属性。同时可以用它来适配外来的Excel工作表,这样就可以不用修改Excel工作表原有标头文本,通过与其它参数配合,可以实现外来Excel工作表直接导入。
Excel模板中的效果
在Excel模板中我们一般不需要对列进行隐藏,但有时我们需要通过导入来更新时,有时需要Oid等字段,如果我们不想显示出来,可以对其进行隐藏,只是进行了隐藏,用户可以轻松的显示出来,无法通过它隐藏数据
Excel模板中的效果
本模块中引用类型默认不下拉选择,这主要基于安全考虑,由于引用类型下拉选择数据源中的数据并不是面向所有用户的,所以不能把不相关的都显示出来,这里需要单独的定义,可以通过PredefinedValues或DataSoruceCriteria,而DataSoruceCriteria可以通过表达式来限制数据源的显示。
Excel模板中的效果
一般验证错误是不需要忽略的,但有时我们提供了下拉选择,也允许用户输入下拉列表之外的内容时,就需要忽略验证错误,这样Excel不会阻止用户的输入
必须包含的Excel工作表列
有时我们要保证数据的完整性,要求用户输入比较完整的信息,在Model中定义的列,如果是必填的,那么在导入时首先会检查Excel工作表对应的列是否存在,如果不存在则无法导入,而对于不是必填的列,由于Excel的灵活性,用户可以很轻松的删除,我们可以将MustIncludeColumn设为True,这样缺少当前列时将无法成功导入。
默认值一般用在当用户没有输入值时采用的值,格式为Criteria表达式。同时默认值还有一种使用场景,与VisibleInTemplate结合使用,当VisibleInTemplate为False,当前列不会显示在Excel模板中,可以通过设置默认值,用于它的初始值,例如:当我们希望用户导入的数据只在他自己所在的部门,但我们又不想用户自己选择部门,就可以通过这种方式。
这里的不显示就是不在Excel模板中创建列,Excel模板不会包含它,与ColumnVisible是不一样的,ColumnVisible会将列包含在Excel模板中,而VisibleInTemplate一般主要用于不想要用户自己输入,可以结合DefaultValue一起使用
模板中的列默认都是更新的,但有时我们是不需要更新的,比如在盘点时,我们只更新数量,但其它的列则是展示列没有必要更新,再比如,当用户表中部分用户手机号错误或不全时,需要比对确认,那么在导入时,我们希望只更新手机号
一般主要用在引用类型的查找,通过设置Criteria来查找引用类型,同时也可以通过它来实现数据的转换,如下面在导入时在用户名的前面加上USER。ValueCriteria扩展性很强,可以使用XAF中的表达式函数,也可以使用自定义表达式函数
Excel模板中的效果
导入后的效果
导出Excel模板时包含视图数据,这里的视图数据是视图查询出来的可显现数据,主要用在数据更新,可以对导出的数据进行修改,然后再次导入
主键主要用于更新,主键不一定是BO的真实主键,也可以是其它的唯一字段,如果不是BO的主键,需要设置KeyCriteria
导入数据方式是导入数据时创建BO对象的方式,有4种导入方式
- 同步(Synchronize),它不仅创建不存在的数据,同时还会更新已存在的数据(默认行为)
- 仅创建(OnlyCreation),它只创建不存在的数据,已存在的数据不会更新
- 仅更新(OnlyUpdate),不存在的数据不会创建,更新已存在的数据
- 全创建(AllCreation),不管是否存在都会创建
由于Excel的灵活性,无法避免错误的产生,如果导入时对数据验证不通过时,则将其显示在相应的单元格中,如果验证错误没有对应的单元格,则将其错误信息放在对应行的第一个单元格中。错误单元的背景可以通过ErrorBackgroundColor来设置,为空时将采用默认背景颜色。
数据验证是导入数据的保障,本模块中会依次采用下面的方式进行数据验证
- 数据类型的验证
- 模板中定义的最大值,最小值
- BO中定义的规则
- 模板中自定义的规则
Excel导入模块现已实现了基础功能,今后还会根据业务的需求扩充新功能
http://www.cnblogs.com/haoxj/p/17419045.html
在开发中往往有很多一样的代码,所以我们通常抽成一个公共类,以便复用,同样也是为了代码的简洁性。比如常量,我们会通常放到一个类里统一调用,还有utils、adapter等等。但是也有不少人会忽略字体和颜色的统一和标准。1.字体(values目录下的dimens.xml文件中)<resources> <!--Defaultscreenmargins,pertheAndroidDesignguidelines.--> <dimenname="activity_horizontal_margin">16dp</dimen> <dimenname="activity_vertical_margin">16dp</dimen> <!--字体--> <dimenname="font_larger">22sp</dimen> <dimenname="font_large">18sp</dimen&
<?php declare(strict_types=1); namespaceapp\admin\controller; usethink\facade\View; classIndex { publicfunctionindex() { returnView::fetch('index'); } /** *TP6多文件上传操作 */ publicfunctionuploadAct01() { //获取表单上传文件 $files=request()->file('files'); $savename=[]; foreach($filesas$file){ $savename[]=\think\facade\Filesystem::disk('public')->putFile('files',$file);//:disk('public')->putFile('files',$file);是路径:public/files/时间目录/图片
作者|青暮编辑|蒋宝尚今日,一份长长的公开信在reddit机器学习版块火了起来,信的内容涉及1700名科学家联名抵制一项人工智能研究发表在SpringerNature上。这1700名科学家,不少是来自MIT、NYU、哈佛等著名学府以及Google、DeepMind、微软等知名企业的学者。例如《算法霸权》一书的作者凯西·奥尼尔、ResponsibleAI的全球领导者RummanChowdhury博士等等。联合抵制的研究是名为《ADeepNeuralNetworkModeltoPredictCriminalityUsingImageProcessing》的论文。论文的作者是来自美国哈里斯堡大学的研究人员,在论文中作者声称开发了能够预测某人是否可能成为犯罪分子的自动计算机面部识别软件。并且该软件具有80%的准确性,可以仅基于其面部图片来预测某人是否为罪犯。另外作者还强调了论文中的算法模型没有种族偏见。对于这篇论文具体所讲述的“故事”,其中一个作者Sadeghian表示:“我们已经知道,机器学习技术在与面部识别和情感检测有关的各种任务上可以胜过人类。”“这项研究表明,这些工具可以从图像中提取出
本文转载自:机器之心|参与:Racoon、张倩、Jamin全景分割将实例分割与语义分割统一起来,自提出之后一直被用于分割街景等图像。但最近,有人把这项技术用到了养猪场。许多研究表明,我们可以通过猪的日常行为来推断其健康状态,所以如何有效观察「猪」的行为显得极其重要,这可以保证我们在「必要时」采取迅速的干预行动,以保证猪的健康状态。长时间观察动物的行为很难人工完成,因此通常情况下采取的方案是使用基于传感器的自动化系统。自动识别系统的使用可以大大简化对猪的行为的研究,尤其是基于计算机视觉的系统。其优势在于,它们可以对目标进行有效的状态评估,同时也不会影响动物的正常行为。近年来,这一方向的研究已经引入了深度学习的方法,并表现出不错的效果。传统意义上的「目标」和「关键点」检测器已被用于检测单个动物。虽然效果良好,但是边界框以及稀疏关键点无法追踪动物的轮廓,从而会导致丢失许多有效信息。因此,来自德国基尔大学和哥廷根大学的研究者开发了一套用在养猪场的全景分割系统。他们按照相对较新的定义进行猪的全景分割,目的在于对单个猪进行像素级的精确分割。为实现以上目的,他们提出了一种用于语义分割的神经网络框架,
本文大约1500字。目录hash三种hash在vue.config.js中配置hash源码hash以前使用JQuery开发前端页面的时候,页面中引用的资源文件如js、css等,一般尾部加一个t=[时间戳]参数,用于防止修改不生效。现在工程化开发,使用Webpack编译,打包的资源文件路径里自动带有一串随机字符串,称为hash:<linkhref=/static/css/chunk-vendors.d637be65.cssrel=preloadas=style>复制“d637be65”即是hash。每次build都会生成不同的hash,所以每次编译部署,都不会有缓存问题。这个hash是如何生成的?它的生成机制是什么?三种hashWebpack打包后的资源按大小分有三类,从小到大排列:module,即模块,每个引入的文件就是一个module,常言模块化,是开发中的物理最小代码单位chunk,N个模块打包在一起形成的的一个文件(如果chunk有split,则每个分开的文件都是一个独立的chunk)bundle,一次工程编译打包的最终产物,有可能就是chunk,也有可能包含多个ch
原文链接:https://zhuanlan.zhihu.com/p/34558421本文介绍各种常见的网络问题以及排错方法,包括Pod访问异常、Service访问异常以及网络安全策略异常等。说到Kubernetes的网络,其实无非就是以下三种情况之一Pod访问容器外部网络从容器外部访问Pod网络Pod之间相互访问当然,以上每种情况还都分别包括本地访问和跨主机访问两种场景,并且一般情况下都是通过Service间接访问Pod。排查网络问题基本上也是从这几种情况出发,定位出具体的网络异常点,再进而寻找解决方法。网络异常可能的原因比较多,常见的有CNI网络插件配置错误,导致多主机网络不通,比如IP网段与现有网络冲突插件使用了底层网络不支持的协议忘记开启IP转发等.sysctlnet.ipv4.ip_forward.sysctlnet.bridge.bridge-nf-call-iptablesPod网络路由丢失,比如kubenet要求网络中有podCIDR到主机IP地址的路由,这些路由如果没有正确配置会导致Pod网络通信等问题在公有云平台上,kube-controller-manager会自动
注:SpringFramework版本是3.2.81.HttpInvokerServiceExporter时序图(描述的是serviceInterface为interface类型时的情况,注意下面的图中步骤4、9中为了方便阅读,加了返回值,严格来说这是不合理,这么画的目的是为了方便阅读)HttpInvokerServiceExporter中有个俩个属性很重要,即service和serviceInterface,它的配置可以参考官方文档service是实际的服务类实例,是spring的bean;serviceInterface如果是interface接口类则生成动态代理(如果不是interface类型,则生成Cglib代理),表示服务类提供哪些服务——这个接口用于动态代理。HttpInvokerServiceExporter通过InitialzeBean来初始化必要的操作,这个操作在Spring中第一次对HttpInvokerServiceExporter进行getBean时进行。 2.HttpInvokerProxyFactoryBean时序图(下图中步骤3、13、14中有返回值,
金三银四了,3月底,4月初,找工作换单位的黄金时期。4月初将会有有一大批职场人士流动。。。 作为Java开发码农的你是不是也在蠢蠢欲动,或者已经搞了几轮车轮战了?我们为大家准备了77道经典Java面试题,如果你面试不力,基础还不够强,那么你或许会受用!1、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?2、JDK和JRE的区别是什么?3、static关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?4、是否可以在static环境中访问非static变量?5、Java支持的数据类型有哪些?什么是自动拆装箱?6、Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?7、Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?8、Java支持多继承么?9、接口和抽象类的区别是什么?10、什么是值传递和引用传递?11、进程和线程的区别是什么?12、创建线程有几种不同的方式?你喜欢哪一种?为什么?13、概括的解释下线程的几种可用状态。14、同步方法和同步代码块的区别是什么?
面试官如何判断面试者的机器学习水平?首先这个问题问的很广。做机器学习方向很多,有些公司更偏重于数据挖掘,而有些更倾向于深度学习。同理,相对应的岗位有些偏重理论也有些偏重实践。这些因素叠加造成了机器学习相关的岗位分布广,如数据分析师,算法工程师,机器学习科学家等,很难一概而论。大概从实习生的时候就开始根着老板招聘面试机器学习方向的候选人,到现在前前后后大概也参与了20个左右机器学习求职者的技术面试。其中有在读的研究生(实习生岗位),也有已经工作了多年或者学术背景深厚的名校博士(相对高级的“科学家”岗位)。不谈具体岗位的前提下,我想回答以下几个问题:1.为什么要避免学科性的偏见2.如何测试面试者的知识广度3.怎样测试面试者的知识深度4.为何需要确认基本的编程和数据分析能力5.怎么提高机器学习面试成功率▼▼▼避免学科间的偏见与歧视机器学习作为一个交叉广度大,各学科融合深的学科,各种背景的面试者都有。我建议一定不要预设立场,无论是数学、统计、物理、计算机,或是其他学科的面试者都有独特的知识储备。比如机器学习其实和统计学习有很大部分是重叠的,甚至和优化(如运筹学)、数学(线代等)也有很多相关的地
最近开始打包我们的一些应用,不得不说,我已经爱上了Docker这个工具。在AWSEC2上,它的存在使我们的工作方便了许多。然而,我们遇到的唯一问题是Docker的磁盘占用问题。我们在AmazonLinux的主机上运行Docker,另外我们有一个扩展服务器用来建立Docker镜像作为我们的buildpipeline。一旦建立成功,就会将镜像通过ansible-playbook推送到我们的服务器上。如果可能的话我会在我的blog上介绍更多关于它的内容。我们注意到随着时间的推移,Docker似乎占用了主机的所有磁盘空间。输入df-h显示 /var/lib/docker目录增长到几乎覆盖整个磁盘的程度。所以我们四处寻找,得到了以下的解决办法。1.确保已退出的容器被删除如果一个docker容器存在时,这个容器不能被自动删除。你可以通过dockerps-a命令查看所有的容器。如果要清理所有已退出的容器,可以使用dockerrm-v$(dockerps-a-q-fstatus=exited)这条指令会删除所有已经退出的容器。-v指删除任何不再需要的docker容器。如果没有这样的容器会返回docke
浏览器不支持canvas1.Clickspacetopauseorbegingame.2.Entertheletterontherocketstohitthem.3.Numberoftheheartswilladdonetogetherwiththerocketsaftertenrocketshit.4.Failedwhenthenumberofheartsequalszero.5.Clickanywheretostartgame!1.动画实现common.js中并未使用setTimeOut()或者setInterval()作为动画定时器,而是使用window.requestAnimationFrame,一种更为优化的方式实现动画效果。requestAnimFrame的用法,先设置浏览器的兼容,并设置动画的帧率,这里设置为每1000/60ms执行一次回调函数window.requestAnimFrame=(function(){ returnwindow.requestAnimationFrame|| window.webkitRequestAnimationFrame|| windo
Scikit-learn的包是机器学习使用的最全也是实用的包,封装了许多机器学习算法,包括各种分类、回归、聚类、降维、模型选择、预处理等许多方面的内容,提供了相当于黑盒的接口,非常适合初学者使用。在朋友的推荐下发现了Kaggle这个网站,这里面有很多的机器学习的数据和基本的题目,通过这些练习可以比较好的掌握机器学习的算法。因此就在这当中拿了Titanic号遇难人员的预测做了个实验。其实做法十分简单,权当熟悉框架了。题目要求题目给定了Titannic号上人员的信息(包括阶层、姓名、性别、年龄、船上直系亲属的个数、船上表亲的个数、船票号、船费、包厢、登船地点等内容),并给出他们的生存情况;然后再给定一些人的信息,让我们预测他们的生存情况。数据是以csv文件的形式给出的,如上图所示。最后从类似的文件里读取另外一波人的信息,并将预测结果输出到一个csv文件中。具体数据规范见原题《Titanic号遇难人员的预测》。解决方案对于这种问题其实只要把字符串的描述的特征提取成特征向量然后随便跑个学习算法就可以了,至于什么学习算法好还是要具体问题具体分析,都用一遍就知道了,我这里用的是朴素贝叶斯模型。注意
1、简单说明 在网上看到一份比较nice的基于webSocket网页聊天项目,准备看看学习学习,如是有了这篇文章!原博主博客:http://blog.csdn.net/Amayadream/article/details/50551617 谢谢博主的文章和项目,我是抱着学习的态度,若有理解错的地方,请指正。 2、项目内容 项目的功能说明去原博主博客看吧,项目上改进的地方,我具体做以下说明。 (1)webSocket服务 对于webSocket服务代码,我进行一部分的封装和优化,主要是消息内容的封装、用户信息封装。 页面显示用户的昵称,指定用户昵称进行消息发送。 ChatServer.java packagecom.ccq.webSocket; importcom.ccq.pojo.User; importcom.ccq.utils.CommonDate; importnet.sf.json.JSONObject; importorg.apache.log4j.Logger; importjavax.servlet.http.HttpSession; importjavax.web
MobileComputing 枚举二叉树然后计算其宽度即可,每次枚举两个节点构造一个父节点,计算宽度时需要注意的是每棵树的左节点的右边缘可能超过其右子树的左边缘,反之亦然。 #include<bits/stdc++.h> usingnamespacestd; constintmaxn=12; intn,s,idx,w[maxn],vis[maxn]; doubler,res,lw[maxn],rw[maxn]; voiddfs(intcnt){ if(cnt==s)return; for(inti=0;i<maxn;i++){ if(!vis[i])continue; for(intj=0;j<maxn;j++){ if(!vis[j]||i==j)continue; doubleL=max(lw[i],lw[j]-1),R=max(rw[j],rw[i]-1); if(1+L+R<r){ vis[i]=vis[j]=0; if(cnt==s-1)res=max(res,1+L+R); intid=idx++; vis[id]=1; w[id]=w
1991:Linux开始于LinusTorvalds在Usenet上的一个帖子,说它“只是一个爱好“。 1992:Linux发布第一个GPL版本,最初是依据一些商业限制进行许可。 1993:在Linux根据GPL许可证发布后,第一批发行版出现:Slackware和Debian。当时Linux上有100位开发者。 1994:Linux发布1.0版本,唯一支持的机器是单处理器的i386计算机。 1995:Linux发布1.2版本,得到了更多外部对内核的贡献。 1996:被网友说是在抠脚的吉祥物Tux发布。 1999:Linux发布2.2版本,LinusTovalds将Linux的维护工作移交给AlanCox。 2001:Linux发布2.4版本,IBM承诺在Linux上花费10亿美元,新的maintainerMarceloTosatti。 2002:Linux开发从补丁和邮件形式转变为源代码控制管理。 2003:Linux发布2.6版本,SCOGroup向IBM提起诉讼。 2004:Linux商业化增强, 公司打算定期发布。 2005:Linux有一些许可问题,所以Linus写了
A招待 本题是一个三进制下的模拟题。为什么判定这是三进制?是因为砝码的重量一定是3的幂次。 假如砝码的重量都是2的幂次,那么根据二进制的相关知识可以知道110=4+2+0=6,也就是6可以由一个2单位的砝码和一个4单位的砝码称量。换成三进制的的话,对于数字13,三进制表示是111,也就是1+3+9,重量为13的物体可以由1,3,9这三个重量的砝码称量。但是三进制表达式中含有2这个数字,题给的每种重量的砝码只有一个,那这要怎么办呢? 因为可以在天平的物体盘里添加砝码,所以只需要通过添加配重块把物品盘的重量配成三进制下只有0和1两个数字的情况即可。所以对于表达式里含有2这个数字的某个值,比如说,52的表达式就是1221,当你在物品盘里加上一个重量为3的砝码时,根据进位,表达式就会变成2001,正好是55,再添加一个重量为27的砝码,表达式变为10001,十进制是82,这样这个数字就可以由81和1直接表示了。 实现这个思路直接模拟即可。 /**OperationOverlord1944.6.6Daybreak**/ /**LastRemote**/ lldigits[50000],
RAID(RedundantArrayofIndependentDisks,独立冗余磁盘阵列) RAID概念: RAID技术通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据冗余备份效果 复制 1.RAID0(最少2块) 概念:RAID0技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中。 优点:RAID0技术能够有效地提升硬盘数据的吞吐速度,在最理想的状态下,硬盘设备的读写性能会提升数倍 缺点:不具备数据备份和错误修复能力,若任意一块硬盘发生故障将导致整个系统的数据都受到破坏复制 2.RAID1(最少2块) 概念:RAID1技术把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正
h3{background:rgba(42,92,170,1);box-shadow:01px6px1pxrgba(10,10,0,0.5);color:rgba(255,255,255,1);font-size:18px;font-weight:bold;height:30px;padding:8px05px10px;text-shadow:2px2px3pxrgba(34,34,34,1)} h4{background:linear-gradient(90deg,rgba(208,208,208,1)0,rgba(255,255,255,1)100%);font-size:5px;height:25px;padding:1px05px5px} 监督学习 说明: 监督学习分为是指有一批确定标签的数据下训练神经网络,然后来对新数据进行预测。常见要解决的问题有两类,一是回归问题,二是分类问题。 无监督学习主要处理聚类问题,暂不讲。 回归问题 比如根据房子的面积估计房价。我得有一批直到房子面积和对应价格的数据,然后拟合曲线,然后根据曲线来预测新值。 分类问题 分类问题可
谷歌Chrome浏览器,可以很方便地用来当3G手机模拟器。在Windows的【开始】-->【运行】中输入以下命令,启动谷歌浏览器,即可模拟相应手机的浏览器去访问3G手机网页: 谷歌Android: chrome.exe--user-agent="Mozilla/5.0(Linux;U;Android2.2;en-us;NexusOneBuild/FRF91)AppleWebKit/533.1(KHTML,likeGecko)Version/4.0MobileSafari/533.1" 苹果iPhone4: chrome.exe--user-agent="Mozilla/5.0(iPhone;CPUiPhoneOS5_0_1likeMacOSX)AppleWebKit/534.46(KHTML,likeGecko)Mobile/9A405" 苹果iPad2: chrome.exe--user-agent="Mozilla/5.0(iPad;CPUOS5_0_1likeMacOSX)AppleWebKit/534.46(KHTML,likeGecko)Mobile/
时间戳转换为日期,网上搜了好几个或多或少都有点问题,自己整理了一下,写了个方法 console.log(formatDate(1565280000000))输出:复制 2019-08-0900:00:00 Date.prototype.format=function(datetime) { vardate=newDate(datetime);//时间戳为10位需*1000,时间戳为13位的话不需乘1000 varyear=date.getFullYear(), month=("0"+(date.getMonth()+1)).slice(-2), sdate=("0"+date.getDate()).slice(-2), hour=("0"+date.getHours()).slice(-2), minute=("0"+date.getMinutes()).slice(-2), second=("0"+date.getSeconds()).slice(-2); //拼接 varresult=year+"-"+month+"-"+sdate+""+