类BigDecimal,用来对超过16位有效位的数进行精确的运算。...BigDecimal所创建的是对象,故我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。...构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。...首先,创建BigDecimal对象,进行BigDecimal的算术运算后,分别建立对货币和百分比格式化的引用,最后利用BigDecimal对象作为format()方法的参数,输出其格式化的货币值和百分比...BigDecimal都是不可变的(immutable)的, 在进行每一次四则运算时,都会产生一个新的对象 ,所以在做加减乘除运算时要记得要保存操作后的值。
缘起 架构分层 开发分布式的项目时,DO持久化对象和DTO传输对象的转换是不可避免的。...其二,远程调用需要额外注意网络传输的开销,如果生产者方从数据库加载出了一个一对多的依赖,而消费者只需要一这个实体的某个属性,多的实体会使得性能产生下降,并没有很好的方式对其进行控制(忽略手动set)。...从DTO到Orika 各类博客不乏对DTO的讨论,对领域驱动的理解,但却鲜有文章介绍,如何完成DO对象到DTO对象的转换。我们期待有一款高性能的,易用的工具来帮助我们完成实体类的转换。...具有相同的地位,负责对象间的映射,也是实际使用中,我们使用的最多的类。...可以看到几乎每个方法都传入了一个Type,用于获取拷贝类的真实类型,而不是传入.class字节码,下面介绍正确的打开姿势: @Testpublic void genericTest1() { MapperFactory
下图就是一个常见的反例: 为了视觉效果的简洁,可以默认状态可以不展示拖拽隐喻,但悬停时一定要有拖拽隐喻。 点阵图标是现在最主流方式,不论移动端还是桌面端都通用。...下图是优化后正确的效果: 通过图标和指针,也能暗示拖动的方向,减少学习成本。 2. 拖拽状态 拖拽过程中,主要有两方面问题需要解决:拖拽对象不突出和拖拽对象遮挡背景,以下反例中都能体现。...下图是优化后正确的效果: 3. 目标暗示 有的拖拽交互,目标不明确,第一次使用很难理解。 例如下图,你不确定是不是可以拖到灰色背景处。...下图是优化后正确的效果: 6. 选中状态 不知道大家有没有过这样的经历,把一个东西拖拽到另一个地方,拖完后就忘记刚刚拖的是什么了。 尤其是在这过程中页面还跳动一下,就完全找不着北了。...如果拖动操作较为复杂,涉及的对象多,就建议增加这个选中态,方便查找。 下图是优化后正确的效果: 选中状态不太适合用在移动端,但移动端本身也不适合复杂的拖拽操作。
在实际的开发中,我们常常会用到工具类去拷贝对象的属性,将一个对象的属性转换成另外一个对象的属性值。首先:答应我不要去自己重复造轮子,写Beanutil了,为什么不去使用现成的工具类呢?...现成的工具类简单又安全,自己写的万一哪天出了问题呢。 这里的beanUtil 我首推hutool,它的工具类的真的太丰富了,真的感觉它太懂中国的程序员了。...hutool官方的解释是这样的: 属性拷贝选项 包括: 1、限制的类或接口,必须为目标对象的实现接口或父类,用于限制拷贝的属性,例如一个类我只想复制其父类的一些属性,就可以将editable设置为父类...我们将它的可以set的属性全部的设置一下。...这个在实际的开发中还是很实用的,具体场景具体的分析。 和之前一样,代码案例在shigen的gitee上,感兴趣的伙伴可以自行去查看。
按钮样式的正确方式 如果你正在建立一个网站或一个web应用,你可能会用到按钮,也许看起来像按钮的链接。不管怎样,让这些正常展示是很重要的。...使用正确的元素有几个优点:它对搜索引擎友好(尤其是链接!),它适用于键盘导航,它提高了所有用户的可访问性。 尽管如此,开发人员很少使用元素。...这是我们想要做的事情: 可应用于链接或按钮的“按钮”样式; 我们希望有选择地应用它,因为我们的页面中会有其他链接和按钮样式。 这需要一个CSS组件。...对于其他人来说,使用鼠标或触摸指针是不可能的或困难的。 他们依靠使用键盘或专用设备访问网站。 在我见过的大多数Web项目中,设计师都指定了预期的鼠标移过样式,但未指定焦点样式。 我们应该做什么?...不是活动的(例如,如果我们的JS未能加载),则会中断焦点样式。
博客: http://www.cnblogs.com/webRobot ❈—— ——此文以纪念南京大屠杀79周年 今天Toby教你如何用python的basemap包绘制轰炸东京的地图。...在数据可视化过程中,我们常常需要将数据根据其采集的地理位置在地图上显示出来。比如说我们会想要在地图上画出城市,飞机的航线,乃至于军事基地等等。通常来说,一个地理信息系统都会带有这样的功能。...今天我们讨论如何在Python上实现,并且使用免费的工具包。 matplotlib是Python常用的数据绘制包。它基于numpy的数组运算功能。...他们是免费工具,但其功能足可以与科研界的大佬Matlab竞争。 Basemap是Matplotlib的一个子包,负责地图绘制。在数据可视化过程中,我们常需要将数据在地图上画出来。...这样的地理绘图有助于读者理解空间相关的信息。
youtube这个不存在的网站上有很多有用的资料,一般来说我们是可以下载所有视频到本地以供离线的情况下的研究学习,网上有很多工具提供了下载功能,但是在试用了很多标称很好用的软件后,老高发现,真的没有一个能和...youtube-dl相提并论,所以老高还是记录一下如何使用正确使用youtube-dl!
1.插入节点,在已知节点 b 的前面插入 x ? 接口定义 首先我们定义链表的基本接口,为了显示出 B 格,我们模仿我们 Java 中的 List 接口定义。...,一个用于保存当前节点的数据 item,另外一个则是 指向下一个节点的 next 指针。...,否则需要找到当前链表指定位置的节点元素,并在该元素前面插入新的节点数据,重新组织两者节点的 next指针。...这里的删除比较复杂,老铁们记得多画图来辅助理解,防止出现指针指向错误造成意想不到的结果。...,我们一定要多写才能掌握指针打断的正确操作,尤其是在删除操作最复杂。
前言 需求就是想把wgs84的地理坐标转换成2000的投影坐标,在网上看的方法但是会报错,说是ArcGIS10.5的问题,今天试了下10.2的版本可以了,所以记录下过程,免得以后忘记了。
一、旁路由的配置 上图是旁路由的连接方式,一般作为旁路由的只有一个LAN口,可以把它想成一个普通的连接路由器的电脑。...这样配置后,网络流量变成下图了: 这样旁路由其实就是一个没有路由功能的二级路由器了,你会发现在你迅雷等高速下载的时候旁路由的cpu会异常的高,都用来nat了,而不是最初旁路由的目的–只加解密科学流量。...查看有没有设置正确的方法很简单 1.迅雷等高速下载的时候看cpu占用是不是很高 2.比较靠谱的一种,看上下行的流量,正确配置的话,旁路由的上行是大于下行的,如果上下相同且数据流量很大(高速下载时候比较明显...这是下载速度: 正确配置的上下行速度和cpu占用: 错误配置的上下行速度和cpu占用: 3.最最靠谱的是去主路由看联网设备信息,会发现该设备的ip是电脑的,但是mac地址是软路由的 当然,如果用的主路由是华为...、小米、360等,那没辙,只能用上述加防火墙规则或者加wan口,采用nat的方式避免它的检验(这样还不如弄成二级路由省时省心),或者换一个主路由器。
Shapefile文件简介 Shapefile文件是美国ESRI公司发布的文件格式,因其ArcGIS软件的推广而得到了普遍的使用,是现在GIS领域使用最为广泛的矢量数据格式。...官方称Shapefile是一种用于存储地理要素的几何位置和属性信息的非拓扑简单格式。 一般地,Shapefile文件是多个文件的集合,至少包括一个shp,shx以及dbf文件。...shx索引文件用于存储几何数据的索引信息,包含对主文件中每个记录长度的描述(注意不是空间索引) dbf表文件是使用dBase数据库表文件进行空间属性数据存储的文件 所以,我们如果要自己完全从底层写代码解析...Shapefile文件的话,需要根据shx文件中的信息读取shp中的二进制数据并转化为几何对象,然后再读取dbf表格,将属性添加到几何对象上就完成了对一个Shapefile文件的解析....GDAL中的空间要素模型是按照OGC的Simple Feature规范实现的,有兴趣的童鞋可以参考官方文档:Simple Feature Access 使用GDAL打开Shapefile文件 下面的例子演示了如何打开
互联网的大数据时代,网络爬虫的工作离不开大数据。在我们使用网络过程中,肯定遇到过访问网站IP受限这种问题。...其实不是你的IP出现了问题,而是对方因为目标网站的服务器的限制,限制了多次注册,多次访问,才会限制本地IP。...当然网上的免费代理IP也同样可以使用,免费代理IP的获取方式非常简单,直接通过网络搜索,然后网络爬虫编程一个程序来筛选可用的IP,免费的代理IP虽然很多,但是也只适合业务较小的用户,对IP质量要求不高的用户...不仅会影响业务的进展,爬虫效果也不会稳定。 对于大工作量的爬虫来说,效率是第一位的,只有高效率才能在有限的时间里,完成大量的工作。...要提高效率,则必须要高质量稳定的代理IP像公司企业对IP需求量大的网络爬虫用户,完全可以使用隧道转发的爬虫代理加强版,来提高业务的进展,加强业务的稳定性,不仅节约了业务时间,也能保证代理的正常运行,满足的大量客户的需求
项目场景: 线程池的地方用的还是挺多的,一般来说用的多的还是execute方法,submit方法还是用的挺少的,一般ThreadPoolExecutor 的 submit 方法通常用于将一个任务提交到线程池中执行...).append(queue.size()); } return info.toString(); } ---- 原因分析: 提示:跑了一次看到日志按照单线程的方式执行...:34 INFO UtilsTest :123 - thread name start:command-thread-4======== 原来submit的方式用错了...最后只能修改业务逻辑,因为对执行结果不是特别需求,所有可以改成execute方式,当然如果逻辑对返回值的需求特别的可以解耦,使用生产者消费者模式,一边计算一边处理,实现逻辑可以这样,在submit...总结 习惯了用execute就忘记了submit的正确使用方式,惯性是很恐怖的,还是得多多跑跑单元测试。
Generator的正确打开方式 前两年大量的在写Generator+co,用它来写一些类似同步的代码 但实际上,Generator并不是被造出来干这个使的...Generator的理解: image.png 一个咖啡机,虽说我并不喝咖啡,可惜找不到造王老吉的机器-.- 我所理解的Generator咖啡机大概就是这么的一个样子的: 首先,我们往机器里边放一些咖啡豆...yield (yield num),而其中返回的值就是我们在next中传入的参数了,作为yield num的返回值存在。...一些实际的使用场景 上边的所有示例都是建立在已知次数的Generator函数上的,但如果你需要一个未知次数的Generator,仅需要创建一个无限循环就够了。...小记 Generator还有更多的使用方式,(实现异步流程控制、按需进行数据读取) 个人认为,Generator的优势在于代码的惰性执行,Generator所实现的事情,我们不使用它也可以做到,只是使用
在很多情况下,可能并不需要将应用的配置选项定义在配置文件中,在应用启动时直接初始化可能是一种更方便快捷的方式。...,现在摒弃配置文件,转而采用编程的方式直接对用户信息进行初始化,所以需要对程序做如上改写。...程序运行后会在控制台上产生下图所示的输出结果。 ? 具名Options同样可以采用类似的方式进行初始化。...如果采用命令行的方式启动这个应用程序,并利用命令行参数设置不同的环境名称,就可以在控制台上看到下图所示的针对DateTimeFormatOptions的不同设置。 ?...运行该程序并按照下图所示的方式指定不同的格式化字符串,系统会根据我们指定的规则来验证其有效性。 ?
大家好,又见面了,我是你们的朋友全栈君。 最近在玩旁路由,踩了一些坑,也学习了点相关知识,特整理记录下。...一、旁路由的配置 上图是旁路由的连接方式,一般作为旁路由的只有一个LAN口,让他们ip在一个网段即可 比如主路由网关192.168.0.1,旁路由配置成192.168.0.2 1.主路由配置...普通流量只是上行经过旁路由转发一下,ip不会改变;下行的时候主路由发现ip包是电脑,会直接发过去。...正常这样处理是比较完美的,旁路由只加解密科学流量,但是有些路由器这么配置,国内流量是无法上网的,只有国外的没问题,必须要配置一条防火墙规则:iptables -t nat -I POSTROUTING
以一个简单例子说明如何打开栅格影像 下面的例子打开一副GeoTIFF影像,输出了影像的一些信息,然后遍历了所有波段,输出波段的一些信息 import gdal # 打开栅格数据集 ds = gdal.Open...计数是从1开始的 band = ds.GetRasterBand(b + 1) # 波段数据的一些信息 print(f'数据类型:{gdal.GetDataTypeName(band.DataType...当我们得到Band对象以后,如果按照GDAL的C/C++接口惯例,我们可以使用WriteRaster()方法进行数据写入(C/C++接口是WriteBlock()),但是在Python中我们有很强大的...下面介绍几种转换的方法: 在Dataset级别进行转换,转换结果是一个三维数组,第一个维度是波段数 在Band级别进行转换,转换的结果是一个二维数据 使用gdal_array模块中的LoadFile()...:{image.shape}') # 输出结果为:数据的尺寸:(3, 4800, 4800) # 这说明ReadAsArray方法将每个波段都转换为了一个二维数组 # 获得第一个波段的数据 band1
关于 Hadoop 所谓的消亡,以及它跌落神坛的报道数不胜数。有很多人放马后炮说,Hadoop 从一开始就没有意义。...如今围绕着 Hadoop缺陷的争论和当初对其的大肆追捧一样激烈。 在这些喋喋不休的争论中,你可能已经得出结论,Hadoop 已经死了。个人认为这个想法虽然可以理解,但却是错误的。...你不用输入 ifconfig 这样的命令,从而查看你的 WiFi 适配器是如何联网的。甚至你不用关心它附加的网关,以及它使用何种 DNS 服务器。...让人们完全脱离命令行是一回事,但让人们更简便的做同样的事情,并没有什么本质的改变。 BI 工具供应商也尝试改善这一现状。但他们通过简化 Hadoop,并将其当作 SQL 数据库来处理。...在技术工具和 BI 用户之间有重要的中间地带。找到它,你将走上正轨。 Hadoop的前景 Hadoop 没有死,这毋庸置疑。Hadoop 是非常强大的关键技术。
依赖注入使我们可以将依赖的功能定义成服务,最终以一种松耦合的形式注入消费该功能的组件或者服务中。...除了采用依赖注入的形式消费承载某种功能的服务,还可以采用相同的方式消费承载配置数据的Options对象。...一、将配置绑定为Options对象 Options模式是一种采用依赖注入的方式来提供Options对象的编程方式,但这并不意味着我们会直接利用依赖注入框架来提供Options对象本身,因为利用依赖注入框架获取的是一个能够提供...对于前面演示的两个实例来说,提供的Options对象都是由配置文件提供的数据绑定生成的,如果新的配置数据被重新加载之后能够提供与之匹配的Options对象,那么这将是最理想的编程模式,可以通过IOptionsMonitor...Options的名称和承载的数据打印在控制台上,所以控制台上输出的内容总是与配置文件的内容同步。
循环子组件忘记加key了~ 出于方便,有时候会不假思索的使用循环的索引作为key,但是这样真的好吗?什么样的值才是key的最佳选择?...为了弄明白,本文将从三个方面来分析"key": 1.为什么要使用key 2.使用index做key存在的问题 3.正确的选择key 1.为什么要使用key react官方文档是这样描述key的: Keys...因此你应当给数组中的每一个元素赋予一个确定的标识。...2.使用index做key存在的问题 2.1 受控组件 单纯的展示组件比如span,这些组件是受控组件,意味着他们的值将是我们给定好的。...3.正确的选择key 3.1 纯展示 如果组件单纯的用于展示,不会发生其他变更,那么使用index或者其他任何不相同的值作为key是没有任何问题的,因为不会发生diff,就不会用到key。
领取专属 10元无门槛券
手把手带您无忧上云