百度UEditor粘贴或插入的表格不显示边框的解决办法

这个方法是我自己研究出来的。

编辑器里面可以看到表格有边框,在前台页面展示出来的却没有边框。

修改办法:

打开ueditor.all.js

1、找到下面的代码,修改

utils.each(tables, function (table) {
removeStyleSize(table, true);
domUtils.removeAttributes(table, [‘style’]); //改这里,原来是 [‘style’, ‘border’]
utils.each(domUtils.getElementsByTagName(table, “td”), function (td) {
if (isEmptyBlock(td)) {
domUtils.fillNode(me.document, td);
}
removeStyleSize(td, true);
});
});
这是为了不让UEditor去掉粘贴的表格的边框,也就是table元素的border属性(不是border内联样式)

2、UEditor插入的表格实际是没有边框的,编辑器中看到边框,其实是因为编辑器里面(<iframe>中)有下面这个全局css
td,th{ border:1px solid #DDD; }
但是前台展示是没有这段全局css的,所以导致看不到边框。

我们可以让编辑器中无边框的表格,显示成虚线灰色的边框,这也是其他很多html编辑器的处理方式。

找到并修改下面的代码

utils.cssRule(‘table’,
//选中的td上的样式
‘.selectTdClass{background-color:#edf5fa !important}’ +
‘table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}’ +
//插入的表格的默认样式
‘table{margin-bottom:10px;border-collapse:collapse;display:table;}’ +
‘td,th{padding: 5px 10px;border: 1px dashed #DDD;}’ + //这里修改 1px solid #DDD 为 1px dashed #DDD
‘caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}’ +
‘th{border-top:1px dashed #BBB;background-color:#F7F7F7;}’ + //这里修改 1px solid #BBB 为 1px dashed #BBB
‘table tr.firstRow th{border-top-width:2px;}’ +
‘.ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }’ +
‘td p{margin:0;padding:0;}’, me.document);
目的是让全局的td/th边框样式显示为灰色虚线

3、*后就是table上右键菜单中有个”表格-设置表格边线可见”的功能。这个功能会让表格显示出实线边框,实际前台展示也是有边框的。

现在td是有实线边框的,可是th却还是虚线,所以要改下面的代码,增加一段对th的处理

注意:th就是表格标题列/行。可以用右键菜单”表格-插入表格标题列/行”插入th

execCommand: function () {
var table = getTableItemsByRange(this).table;
utils.each(domUtils.getElementsByTagName(table,’td’),function(td){
td.style.borderWidth = ‘1px’;
td.style.borderStyle = ‘solid’;
td.style.borderColor = ‘windowtext’;
});
//增加下面一段
utils.each(domUtils.getElementsByTagName(table,’th’),function(th){
th.style.borderWidth = domUtils.getComputedStyle(th, “border-width”);
th.style.borderStyle = ‘solid’;
th.style.borderColor = ‘windowtext’;
});
}

*后如果你用的是ueditor.all.min.js,需要将改过的代码压缩一份min版本。

————————————————

VScode连接远程服务器上的jupyter notebook

工欲善其事,必先利其器,开发工具这个东西觉得折腾下还是有好处的。但常常感觉专门抽出时间搞这个浪费时间,更常见的现象是已经明显感觉到当前的开发工具用的很别扭,而且告诉自己等这个忙完了要搭一个更方便的工具,到*后却没下文了直到下次再次遇到这种感觉。我这会就是再次遇到了,想用VSCode连接服务器上的jupyter notebook运行tensorflow代码,这样在本地的VScode中直接写代码就方便了很多。整个过程很简单,我自诩记性也不错,但还是不如这白纸黑字来的保险,查资料也是很花时间的。

首先是本机与服务器之间配置ssh就不仔细描述了,要是忘了google一下“ssh远程登录服务器”大把都是资料而且大多数说的都是对的。但*好在~/.ssh/config中按照下面的样子再配置下,ssh用起来会更方便的。

%title插图%num

接下来是vscode这边要能远程连接到服务器上,记住不是在本地写代码然后再发送到服务器上,而是直接连接到了服务器的某个路径下,VScode对文件的增删改查就相当于是操作了服务器上这个路径下的对应文件(也许说的比较啰嗦,但是觉得概念还是要清楚的)。实现这个目的只需要3步:

1、在扩展(EXTENSIONS)中搜插件Remote – SSH安装后再重新启动VScode。
2、鼠标点击VScode左下角的齿轮选择命令模式(command paletten),mac对应的快捷键是shift+cmd+p。
3、在VScode顶部中间弹出的下拉菜单中输入Remote – SSH点击图片中选中的选项,接下来再点击你要连接的服务器的名字就行了,*后会弹出一个新的VSCode。
vscode现在就可以远程连接服务器了,如果想写python代码,直接创建文件就可以了。

%title插图%num

%title插图%num

而服务器这边要能够创建jupyter noteboot,也就是些安装了,不难就是找起来有点麻烦。我喜欢用conda安装一个虚拟环境就是因为隔离了干净省心,真要是搞坏了直接删了重新建一个。服务器上的操作也只需要3步:

1、安装虚拟环境:

conda create –name notebook python=3.6
2、激活虚拟环境并安装jupyter notebook:

source activate notebook
conda install -c conda-forge jupyter notebook
3、创建一个notebook服务:

sudo jupyter notebook –port=8889 –allow-root
结果如下:*下面的两个URL就是刚才启动的服务的地址,我复制http://localhost:8889/?token=aef9a514fa484b83aa4554371024ebc5b50bbed25c2521ab,当然复制另一个也没问题。

%title插图%num

*后在已经连接到服务器的VScode中进入命令模式,点击下图下拉菜单中被选中的选项(好绕口,理解就好)。意思也很明显:指定一个本地或者远程的jupyter服务连接。

%title插图%num

把刚才复制的URL粘贴进去,按回车。

%title插图%num

创建一个jupyter文件测试下:

%title插图%num

整个过程就这么简单而且内容也不多,但就是写了快两个小时吧,正好有今晚有时间就整理一下,以后就不需要google再去各种找了。后面几张大图看起来好丑,感觉以后要学一些有关排版设计的内容了,忽然想起自己曾今自学了一段时间PS,好久没用这会好像也忘差不多了。回头自己读刚才写的blog隐隐约约有种很着急的感觉,不知道是思维还是文笔的锅,总之有时间就多写写,“感觉”也是可以慢慢积累的呢~。

Spring MVC+Mybatis常见错误及解决

1

org.apache.ibatis.binding.BindingException: Parameter 'username' not found. Available parameters are [0, 1, param1, param2]

出现这个错误是由于在执行sql的时候无法匹配sql语句的通配符造成的,有两个解决方法:
<1>、在对应dao的xml文件的sql语句要这样写

<select id=”findByUsernameAndPassword” resultType=”com.lzcc.model.User”>
select * from user where username = #{0} and password = #{1};
</select>
1
2
3
<2>、在dao接口的方法中的参数中添加@param注解
————————————————

List<User> findByUsernameAndPassword(@Param(“username”) String username,@Param(“password”) String password) throws SQLException;
————————————————

Python是什么

Python是什么

python 中文就是蟒蛇的意思。
在计算机中,它是一种编程语言。
Python(英语发音:/ˈpaɪθən/), 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,*个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的*终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C++重写。
1,发展历程编辑
自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程。Python[1] 已经成为*受欢迎的程序设计语言之一。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。自从2004年以后,python的使用率是呈线性增长[2] 。
由于Python语言的简洁、易读以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学
已经采用Python教授程序设计课程。例如卡耐基梅隆大学的编程基础和麻省理工学院的计算机科学及编程导论就使用Python语言讲授。众多开源的科学
计算软件包都提供了Python的调用接口,
例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3个十分经典的
科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语
言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。
说起科学计算,首先会被提到的可能是MATLAB。然而除了MATLAB的一些专业性很强的工具箱还无法替代之外,MATLAB的大部分常用功能都可以在Python世界中找到相应的扩展库。和MATLAB相比,用Python做科学计算有如下优点:
● 首先,MATLAB是一款商用软件,并且价格不菲。而Python完全免费,众多开源的科学计算库都提供了Python的调用接口。用户可以在任何计算机上免费安装Python及其*大多数扩展库。
● 其次,与MATLAB相比,Python是一门更易学、更严谨的程序设计语言。它能让用户编写出更易读、易维护的代码。
● *后,MATLAB主要专注于工程和科学计算。然而即使在计算领域,也经常会遇到文件管理、界面设计、网络通信等各种需求。而Python有着丰富的扩展库,可以轻易完成各种高级任务,开发者可以用Python实现完整应用程序所需的各种功能。%title插图%num
2,产生
Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者。
ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC
这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido 认为是非开放造成的。Guido
决心在Python 中避免这一错误。同时,他还想实现在ABC 中闪现过但未曾实现的东西。
就这样,Python在Guido手中诞生了。可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix shell和C的习惯。
3,风格
Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。
设计者开发时总的指导思想是,对于一个特定的问题,只要有一种*好的方法来解决就好了。这在由Tim
Peters写的Python格言(称为The Zen of Python)里面表述为:There should be one– and
preferably only one –obvious way to do it. 这正好和Perl语言(另一种功能类似的高级动态语言)的中心思想TMTOWTDI(There’s More Than One Way To Do It)完全相反。
Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。其中很重要的一项就是Python的缩进规则。
一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而C语言
是用一对花括号{}来明确的定出模块的边界的,与字符的位置毫无关系)。这一点曾经引起过争议。因为自从C这类的语言诞生后,语言的语法含义与字符的排列
方式分离开来,曾经被认为是一种程序语言的进步。不过不可否认的是,通过强制程序员们缩进(包括if,for和函数定义等所有需要使用模块的地方),Python确实使得程序更加清晰和美观。
4,设计定位
Python的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。
Python开发者的哲学是“用一种方法,*好是只有一种方法来做一件事”。在设计Python语言时,如果面临多种选择,Python开发者一般会拒*
花俏的语法,而选择明确的没有或者很少有歧义的语法。由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大
规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this可以获得完整的列表。
Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。所以很多人认为Python很慢。不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python设计师
倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。可用的JIT技术是PyPy。
Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。
虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。Python的支持者较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shellscript、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。
Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和
工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很
多人还把Python作为一种“胶水语言”(glue
language)使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如Google
Engine使用C++编写性能要求*高的部分,然后用Python或Java/Go调用相应的模块。《Python技术手册》的作者马特利(AlexMartelli)说:“这很难讲,不过,2004 年,Python 已在 Google 内部使用,Google 召募许多 Python高手,但在这之前就已决定使用Python,他们的目的是 Python where we can, C++ where we
must,在操控硬件的场合使用 C++,在快速开发时候使用 Python。”

iOS图标&启动图生成器(一)

前 言
一个完整的app都需要多种尺寸的图标和启动图。一般情况下,设计师需要根据开发者提供的一套规则,设计出各种尺寸的图标和启动图供开发人员使用。

但*近作者利用业余时间做了个app,因为不希望耽误设计师较多时间,希望能自己来搞定各种尺寸的图标,就只跟设计师要了*大尺寸的图标和启动图各一个。本想着找一下现成的工具,批量生成需要的的图片,但*后没有找到,只好自己使用Photoshop切出了不同尺寸的图片。

这期间还换过一次图标和启动图,作者就重复了切图工作,这花费了大量的时间。于是事后,作者开发了一个mac app——图标&启动图生成器(简称生成器)以提高工作效率。作者用两篇文章分别介绍生成器的使用和实现细节。

本篇文章介绍生成器的功能和使用方式。

01 生成器功能介绍
根据原图一键生成整套规则的图片;

支持选择所需要的平台规则;

支持选择/输入图片导出路径;

自动打开导出的图片文件夹。

02 生成器支持的平台
截止本篇文章发布,生成器v0.3版本共支持12套平台规则。

iPhone AppIcons(iPhone app 图标规则)

iPhone LaunchImages Portrait(iPhone app 竖屏启动图规则)

iPhone LaunchImages Landscape(iPhone app 横屏启动图规则)

iPad AppIcons(iPad app 图标规则)

iPad LaunchImages Portrait(iPad app 竖屏启动图规则)

iPad LaunchImages Landscape(iPad app 横屏启动图规则)

Mac AppIcons(Mac app 图标规则)

Watch AppIcons(Apple Watch app 图标规则)

CarPlay AppIcons(CarPlay app 图标规则)

Android AppIcons(Android app 常用图标规则)

Android LaunchImages Portrait(Android app 常用竖屏启动图规则)

Android LaunchImages Landscape(Android app 常用横屏启动图规则)

03 生成器界面介绍
在了解了生成器的基础功能后,来看看生成器的界面。如下图。
%title插图%num

生成器的界面比较简洁,控件元素按照从上到下、从左到右的顺序分别为:

图片框(承载源图片)

平台选择器(供选择平台规则)

路径按钮(供选择图片导出路径)

路径文本框(显示选择的路径,支持直接输入路径)

导出按钮(在目标路径中生成符合所选定的平台规则的图片,并打开路径文件夹)

04 生成器使用步骤
生成器的使用步骤非常简单,这里以此生成器app的图标生成过程为例进行介绍。

1、准备源图片
此生成器是一个mac app,需要10种尺寸的图标,如下图。

%title插图%num
其中,所需要的*大图标的尺寸为1024*1024。作者需要准备好这张*大尺寸的图片,并拖拽到图片框中作为源图片。

2 、选择平台规则
作者需要生成符合mac app图标规则的所有图标图片,所以这里选择Mac AppIcons。

3、选择导出路径
这时,点击导出按钮已经能够将源图片切成所需要的一套图片了。但在这之前,选择一个合适的图片导出路径,会便于作者管理生成的图片。另外,对文件路径规则比较熟悉的同学可以直接输入路径。

4、导出图片
点击导出按钮可以在目标路径中生成符合所选定平台规则的图片,并打开这些图片所在的文件夹以供使用。

按照以上4步,可以快速得到所需要的符合各种平台规则图标和启动图。

05 获取app资源

给天下的小白科普一下iOS和安卓的区别

IOS与安卓的区别:
1、两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
2、两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
3、IOS中用于UI指令权限*高,安卓中

指令权限*高。iphone沙盒机制解释:应用程序位于文件系统的严格限制部分,程序不能直接访问其他应用程序。以杀毒软件中的

解释一下。“沙盒”技术是发现可疑行为后让程序继续运行,当发现的确是病毒时才会终止。“沙盒”技术的实践运用流程是:让疑似病毒文件的可疑行为在虚拟的“沙盒”里充分表演,“沙盒”会记下它的每一个动作;当疑似病毒充分暴露了其病毒属性后,“沙盒”就会执行“回滚”机制:将病毒的痕迹和动作抹去,恢复系统到正常状态。

机制解释:android本身不是为触摸屏打造的,所以所有的应用都是运行在一个虚拟的环境中,由底层传输数据到虚拟机中,再由虚拟机传递给用户UI,任何程序都就可以轻松访问其他程序文件。

是开源的,但是由于版本的不同意,各式各样的系统都有,界面会比IOS的好看些。软件方面:苹果的软件靠ITUNES赚钱还需要相应的许可所以相对而言质量要比较高一些。 安卓软件可以随便开发随便弄软件质量会不是很高,但是也有精品的软件。
由于安卓是开源的,软件和硬件不是一体的,所以可以刷不同的ROM,适合喜欢研究手机的人。
Android抗衡iOS还是有些力不从心,比如在移动应用开发者的收入方面,平台的整合度,操作的流畅度等。尤其在企业级市场,几乎已被iOS全面占领,新兴的企业都表示更加青睐iOS而非所谓“开放”、基于

而在另一方面你还有Android。它开源,生态环境开放,市场也开放。而把这些都融合起来还是Google,这家Android平台的开发者本身也是一家广告公司。

droid是google公司做的手机系统,ios是苹果公司做的手机系统。
droid手机系统的手机很多厂家公司在做如HTC,三星,中兴等等。。。 ios只有苹果公司的手机和数码产品才会是ios的手机系统。
droid手机系统和ios软件开发工具不同,平台不同。软件也不用,所以两个两个平台的软件不能通用,但是好的软件都会有两个系统版本,如QQ 有IOS版也是就iphoneQQ,和android版QQ。
两个系统都是现在智能手机上*火的系统,也是*有发展的系统。
安卓手机完全开源,任何软件开发商或者个人都能开发安卓的软件。苹果IOS完全封源开发
正是由于开源和各个品牌手机硬件差异*大,导致安卓手机的系统体验各有差异,软件兼容性也不如IOS。所以安卓手机总体的系统体验,流畅度,软件兼容性,明显不如系统和软件开发都对硬件有*其针对性的IOS,软件数量也不如IOS,游戏数量也不如IOS,而且很多高质量软件,特别是游戏都是先出现在IOS上。不过常用的大公司的软件,比如二楼说的QQ,不会出现上述问题。
安卓系统的软件几乎都是免费,而IOS的软件和游戏,好的基本都付费,当然苹果可以越狱,越狱后也是免费使用。
安卓手机支持FLASH,可以玩QQ农场,不过需要高端安卓机2.2以上系统才支持。IOS不支持FLASH,只支持HTML5,所以苹果上不能看FLASH,甚至苹果有时候连HTML5的视频兼容性也不好。
安卓手机使用起来上手快,下载歌曲电影等直接放到手机里就能看,IOS则需要同步到手机中,不过越狱后也能直接放到手机里看。

Flink之checkpoint和savepoint的区别

1.什么是Checkpoint
Checkpoint:一种由 Flink 自动执行的快照,其目的是能够从故障中恢复。Checkpoint 使 Flink 的状态具有良好的容错性,通过 checkpoint 机制,Flink 可以对作业的状态和计算位置进行恢复。
Checkpoint 对于用户层面,是透明的,用户会感觉程序一直在运行。 用户无法对其进行交互,用户可以在程序启动之前,设置好实时程序 Checkpoint 相关参数,当程序启动之后,剩下的就全交给 Flink 自行管理。
(1)checkpoint的目录结构: 由元数据文件、数据文件(与 state backend 相关)组成。可通过配置文件中 “state.checkpoints.dir” 配置项来指定元数据文件和数据文件的存储路径,实际系统中一般存储在hdfs上。
(2)checkpoint的两种mode:Exactly Once 和 At least Once。默认的 Checkpoint 模式是 Exactly Once. Exactly Once 和 At least Once 具体是针对 Flink 状态 而言。

Exactly Once 含义是:保证每条数据对于 Flink 的状态结果只影响一次。打个比方,比如:在统计”flink”这个单词数时,目前实时统计的 个数为2,同时这个结果在这次 Checkpoint 成功后保存在相应的存储路径下。在下次 Checkpoint 之前, 又来1个”flink”单词,突然程序遇到外部异常容错自动回复,从*近的Checkpoint 点开始恢复,那么会从单词书为2这个状态开始恢复,所以即使程序遇到外部异常自我恢复,也不会影响到 Flink 状态的结果。
At Least Once 含义是:每条数据对于 Flink 状态计算至少影响一次。比如在单词统计”flink”
时,你统计到的某个单词的单词数可能会比真实的单词数要大,因为同一条消息,你可能将其计算多次。
(3)checkpoint的保留:在默认的情况下仅用于恢复失败的作业,并不保留,当程序取消时 checkpoint 就会被删除。当然,你可以通过配置来保留 checkpoint,这些被保留的 checkpoint 在作业失败或取消时不会被清除。

CheckpointConfig config = env.getCheckpointConfig();
config.enableExternalizedCheckpoints(ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
1
2
ExternalizedCheckpointCleanup 配置项定义了当作业取消时,对作业 checkpoint 的操作:

ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION:当作业取消时,保留作业的
checkpoint。注意,这种情况下,需要手动清除该作业保留的 checkpoint。
ExternalizedCheckpointCleanup.DELETE_ON_CANCELLATION:当作业取消时,删除作业的
checkpoint。仅当作业失败时,作业的 checkpoint 才会被保留。
2.什么是Savepoint
Savepoint:用户出于某种操作目的(例如有状态的重新部署/升级/缩放操作)手动(或 API 调用)触发的快照。
Savepoint 是依据 Flink checkpointing 机制所创建的流作业执行状态的一致镜像。 你可以使用 Savepoint 进行 Flink 作业的停止与重启、fork 或者更新。 Savepoint 由用户创建,拥有和删除。 他们的用例是计划的,手动备份和恢复。当然,Savepoint 必须在作业停止后继续存在。
Savepoint 由两部分组成: 稳定存储(列入 HDFS,S3,…) 上包含二进制文件的目录(通常很大),和元数据文件(相对较小)。 稳定存储上的文件表示作业执行状态的数据镜像。 Savepoint 的元数据文件以(*对路径)的形式包含(主要)指向作为 Savepoint 一部分的稳定存储上的所有文件的指针

3.两者之间的区别
1.目的:checkpoint重点是在于自动容错,savepoint重点在于程序修改或者更新后从状态中恢复
2.触发者:checkpoint是flink自动触发,而savepoint是用户主动触发
3.状态文件保存:checkpoint一般都会自动删除;savepoint一般都会保留下来,除非用户去做相应的删除操作
————————————————

Python并发技术

Python并发技术

1、前言
目前大多数编程语言都直接支持并发,而且其标准库通常还提供了一些封装程度较高的功能。并发可以用多种方式来实现,这些方式*重要的区别在于如何访问”共享数据”:是通过”共享内存”等方式直接访问,还是通过”进程间通信”等方式访问。

基于线程的并发:是指同一个系统进程里有各自独立的若干个线程,它们都在并发执行任务。这些线程一般会依序访问共享内存,以此实现数据共享。程序中,通常采用某种锁定机制来确保同一时间只有一个线程能够访问数据。

基于进程的并发:是指多个进程独立地执行任务,这些进程一般通过IPC来访问数据,如果编程语言或者程序库支持,那么也可以通过共享内存来实现数据共享。
还有一种并发,它基于并发等待,而非并发执行,这种方式通常用来实现异步IO。

Python都支持上述两种方式。
Python对多线程的支持方式相当普通,但对于多进程的支持则比大多数语言或程序库更为高级,此外Python的多进程与多线程采用同一套机制,使得开发者很容易就能在两套方案中来回切换。

由于全局解释器锁(GIL),所以Python解释器器在同一刻只能运行于一个处理器中,因此想通过多线程并发来提升程序速度,其效果可能仍然不够理想。

一般来说,计算密集型任务不适合用多线程来实现,因为者通常比非并发程序还要慢。
一种方法是改用Cython来编写代码,Cython代码实际上与Python一样,只是多加了一套写法,能够把程序编译成纯C。这种程序执行起来可以比原来快100倍,而并发很难达到这样的效果。
如果遇到使用并发的场合,而所执行的任务又是计算密集型的,*好避开GIL,改用multiprocessing模块。如何使用多线程,那么同一个进程里的线程在执行时会相互争抢GIL,但如果改用multiprocessing模块,那么每个进程都是独立的,它们都有自己的Python解释器锁,所以就不会争夺GIL了。

对于网络通信等”网络密集型”任务来说,并发可以大幅提高程序执行速度,在这种情况下,决定程序效率的注意因素是网络延迟,这与使用线程还是进程来实现并发没有多大关系。

2、计算密集型并发
使用多线程来执行计算密集型任务的效率比非并发程序的效率还要低,
这是因为python 将所有处理任务都放在了同一个核里。
使用多进程会把任务排布在多个核心上面。
计算密集型程序所使用的线程或进程数量一般与核心数相同。

(1) 用队列及多进程实现并发
(2)用Future及多进程实现并发
Python 3.2 新增了concurrent.futures模块,提供了一种优雅而高级的方式,可以用多线程或多进程实现并发。

3、IO密集型并发
(1)用队列及线程实现并发
(2) 用Future及多进程实现并发

Elasticsearch多索引查询搜索 排序异常问题方案

Elasticsearch6.8
HighLevel方式
场景:全局搜索,综合搜索,可能有帖子,产品,文章等,要倒序,哪个发布了就在*上面显示出来

问题
在多索引全局查询时,比如设置了sourceBuilder.sort(“字段名”, SortOrder.DESC);会报错如下
Elasticsearch exception [type=class_cast_exception, reason=java.lang.Long cannot be cast to org.apache.lucene.util.BytesRef

Elasticsearch exception [type=class_cast_exception, reason=java.lang.Long cannot be cast to org.apache.lucene.util.BytesRef

试了好几种解决方案没有办法打到自己想要的效果,后续研究下有没有好的解决方案和高版本是否支持

我的方案:
因为加入的顺序是顺序的,比如id为1,2,3,4,5……也有createTime字段
所以先查询符合条件的条数

restHighLevelClient.count(countRequest, RequestOptions.DEFAULT);

然后根据条数计算你要取的起始位置

sourceBuilder.from(count > 10 ? count – esSearchDTO.getFrom() * esSearchDTO.getSize() : 0);
sourceBuilder.size(esSearchDTO.getSize());

比如pageNum=1,pageSize=10,一共100条数据,你要取*后10条,则用100 – 110=90,从第90位置取10条到100
第二页为100-210=80,从第80取10到90

取出数据后有不同类型的对象怎么办?如何排序?
可以在各个索引中定义createTime
在*后得到的结果中使用Collections.sort取共同字段createTime进行比较排序
————————————————
版权声明:本文为CSDN博主「东北_老乡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Goligory/article/details/115128595

 

2021年3月中旬流通领域重要生产资料市场价格变动情况

中国统计信息服务中心 卓创资讯   据对全国流通领域9大类50种重要生产资料市场价格的监测显示,2021年3月中旬与3月上旬相比,29种产品价格上涨,19种下降,2种持平。 2021年3月中旬流通领域重要生产资料市场价格变动情况  产品名称 单位 本期价格(元) 比上期 价格涨跌(元) 涨跌幅 (%) 一、黑色金属         螺纹钢(Φ16-25mm,HRB400E) 吨 4665.8 -6.2 -0.1 线材(Φ6.5mm,HPB300) 吨 4795.1 11.2 0.2 普通中板(20mm,Q235) 吨 4978.3 43.1 0.9 热轧普通薄板(3mm,Q235) 吨 5045.1 35.8 0.7 无缝钢管(219*6,20#) 吨 5550.3 35.2 0.6 角钢(5#) 吨 4932.7 57.1 1.2 二、有色金属         电解铜(1#) 吨 66696.0 202.5 0.3 铝锭(A00) 吨 17516.9 293.6 1.7 铅锭(1#) 吨 14765.1 -262.3 -1.7 锌锭(0#) 吨 21710.0 311.2 1.5 三、化工产品         硫酸(98%) 吨 490.7 28.2 6.1 烧碱(液碱,32%) 吨 443.9 7.5 1.7 甲醇(优等品) 吨 2277.5 -9.3 -0.4 纯苯(石油苯,工业级) 吨 6415.3 -161.6 -2.5 苯乙烯(一级品) 吨 8947.9 -684.1 -7.1 聚乙烯(LLDPE,7042) 吨 9164.3 16.0 0.2 聚丙烯(T30S) 吨 9638.5 55.5 0.6 聚氯乙烯(SG5) 吨 8921.2 393.1 4.6 顺丁胶(BR9000) 吨 13509.3 211.8 1.6 涤纶长丝(FDY150D/96F) 吨 8103.6 38.0 0.5 四、石油天然气         液化天然气(LNG) 吨 3493.8 173.8 5.2 液化石油气(LPG) 吨 3917.8 42.2 1.1 汽油(95#国VI) 吨 7622.1 219.8 3.0 汽油(92#国VI) 吨 7377.3 219.8 3.1 柴油(0#国VI) 吨 6197.4 173.3 2.9 石蜡(58#半) 吨 6802.6 508.0 8.1 五、煤炭         无烟煤(洗中块) 吨 950.0 0.0 0.0 普通混煤(4500大卡) 吨 485.4 18.8 4.0 山西大混(5000大卡) 吨 555.0 24.7 4.7 山西优混(5500大卡) 吨 635.0 31.6 5.2 大同混煤(5800大卡) 吨 660.0 26.6 4.2 焦煤(主焦煤) 吨 1482.9 -57.1 -3.7 焦炭(二级冶金焦) 吨 2297.4 -213.6 -8.5 六、非金属建材         普通硅酸盐水泥(P.O 42.5袋装) 吨 460.0 -5.7 -1.2 普通硅酸盐水泥(P.O 42.5散装) 吨 413.5 -2.6 -0.6 浮法平板玻璃(4.8/5mm) 吨 2270.5 58.7 2.7 七、农产品(主要用于加工)         稻米(粳稻米) 吨 4095.5 -2.0 0.0 小麦(国标三等) 吨 2562.6 1.3 0.1 玉米(黄玉米二等) 吨 2849.6 -65.6 -2.3 棉花(皮棉,白棉三级) 吨 16176.9 -350.9 -2.1 生猪(外三元) 千克 27.9 -1.3 -4.5 大豆(黄豆) 吨 5427.6 -14.9 -0.3 豆粕(粗蛋白含量≥43%) 吨 3346.8 -268.5 -7.4 花生(油料花生米) 吨 9556.0 -56.5 -0.6 八、农业生产资料         尿素(小颗料) 吨 2173.7 -6.2 -0.3 复合肥(硫酸钾复合肥,氮磷钾含量45%) 吨 2425.0 23.4 1.0 农药(草甘膦,95%原药) 吨 30778.6 916.1 3.1 九、林产品         天然橡胶(标准胶SCRWF) 吨 14601.4 -212.0 -1.4 纸浆(漂白化学浆) 吨 6331.3 -183.7 -2.8 瓦楞纸(高强) 吨 4216.3 -14.7 -0.3 注:上期为2021年3月上旬。    附注   1.指标解释   流通领域重要生产资料市场价格,是指重要生产资料经营企业的批发和销售价格。与出厂价格不同,生产资料市场价格既包含出厂价格,也包含有经营企业的流通费用、利润和税费等。出厂价格与市场价格互相影响,存在时滞,两者的变动趋势在某一时间段内有可能会出现不完全一致的情况。   2.监测内容   流通领域重要生产资料市场价格监测内容包括9大类50种产品的价格。类别与产品规格说明详见附表。   3.监测范围   监测范围涵盖全国31个省(区、市)300多个交易市场的近2000家批发商、代理商、经销商等经营企业。   4.监测方法   价格监测方法包括信息员现场采价,电话、即时通讯工具和电子邮件询价等。   5.涨跌个数的统计   产品价格上涨、下降、持平个数按照涨跌幅(%)进行统计。   6.发布日期 每月4日、14日、24日发布上一旬数据,节假日顺延。 附表:流通领域重要生产资料市场价格监测产品规格说明表  序号 监测产品 规格型号 说明   一、黑色金属      1   螺纹钢 Φ16-25mm,HRB400E 屈服强度≥400MPa  2 线材 Φ6.5mm,HPB300 屈服强度≥300MPa  3 普通中板 20mm,Q235 屈服强度≥235MPa  4 热轧普通薄板 3mm,Q235 屈服强度≥235MPa  5 无缝钢管 219*6,20# 20#钢材,屈服强度≥245MPa  6 角钢 5# 屈服强度≥235MPa   二、有色金属      7 电解铜 1# 铜与银质量分数≥99.95%  8 铝锭 A00 铝质量分数≥99.7%  9 铅锭 1# 铅质量分数≥99.994% 10 锌锭 0# 锌质量分数≥99.995%   三、化工产品     11  硫酸 98% H2SO4质量分数≥98% 12 烧碱(液碱) 32% NaOH质量分数≥32%的离子膜碱 13 甲醇 优等品 水质量含量≤0.10% 14 纯苯(石油苯) 工业级 苯纯度≥99.8% 15 苯乙烯 一级品 纯度≥99.5% 16 聚乙烯(LLDPE) 7042 熔指:2.0±0.5g/10min 17 聚丙烯 T30S 熔指:3.0±0.9g/10min 18 聚氯乙烯 SG5 K值:66-68 19 顺丁胶 BR9000 块状、乳白色,灰分≤0.20% 20 涤纶长丝 FDY150D/96F 150旦,AA级   四、石油天然气     21 液化天然气 LNG 甲烷含量≥75%,密度≥430kg/m3 22 液化石油气 LPG 饱和蒸汽压1380-1430kPa 23 汽油 95#国VI 国VI标准 24 汽油 92#国VI 国VI标准 25 柴油 0#国VI 国VI标准 26 石蜡 58#半 熔点不低于58℃   五、煤炭     27 无烟煤 洗中块 挥发分≤8% 28 普通混煤 4500大卡 山西粉煤与块煤的混合煤,热值4500大卡 29 山西大混 5000大卡 质量较好的混煤,热值5000大卡 30 山西优混 5500大卡 优质的混煤,热值5500大卡 31 大同混煤 5800大卡 大同产混煤,热值5800大卡 32 焦煤  主焦煤 含硫量<1% 33 焦炭 二级冶金焦 12.01%≤灰分≤13.50%   六、非金属建材     34 普通硅酸盐水泥 P.O 42.5袋装 抗压强度42.5MPa 35 普通硅酸盐水泥 P.O 42.5散装 抗压强度42.5MPa 36 浮法平板玻璃 4.8/5mm 厚度为4.8/5mm的无色透明玻璃   七、农产品(主要用于加工)     37 稻米 粳稻米 杂质≤0.25%,水分≤15.5% 38 小麦 国标三等 杂质≤1.0%,水分≤12.5% 39 玉米 黄玉米二等 杂质≤1.0%,水分≤14.0% 40 棉花(皮棉) 白棉三级 纤维长度≥28mm,白或乳白色 41 生猪 外三元 三种外国猪杂交的肉食猪 42 大豆 黄豆 杂质≤1.0%,水分≤13.0% 43 豆粕 粗蛋白含量≥43% 粗蛋白≥43%,水分≤13.0% 44 花生 油料花生米 杂质≤1.0%,水分≤9.0%   八、农业生产资料     45 尿素 小颗料 总氮≥46%,水分≤1.0% 46 复合肥 硫酸钾复合肥 氮磷钾含量45% 47 农药(草甘膦) 95%原药 草甘膦质量分数≥95%   九、林产品     48 天然橡胶 标准胶SCRWF 杂质含量≤0.05%,灰分≤0.5% 49 纸浆 漂白化学浆 亮度≥80%,黏度≥600cm³/g 50 瓦楞纸 高强 80-160g/m2  

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速