关于jquery:全套jQuery学了一下午我敢说这一定是最好的笔记

大家好,我是小索奇 学了一下午的jQuery,我做出了“最好的笔记” 虽说jQuery曾经过期了,但一些我的项目用的也是旧版的技术、很多高校也正在教这一老套的jQuery技术... 理解一下有益无害~ 本篇文章对应jQuery全套教程,文章篇幅较长,能够珍藏备用哈 这是小索奇在学习jQuery期间精心整顿的markdown格式文件(我也想白嫖教程啊,可是翻遍了评论区,没有发现一个人留下了markdown格局的文章,罗唆本人做吧... 下载链接 https://wwvd.lanzoul.com/iUpep0xlqfri 明码:2p7h 博主都在用Markdown语法来写文章?一文让你把握 所以我怯懦的站了进去,为大家筹备一份教程-附带笔记... 因为没有发现一个人做了markdown格局笔记并分享进去,所以才敢说,"最好的笔记"... 当然,只是开个玩笑~ 对应视频教程链接 https://www.bilibili.com/video/BV1Jg4y1B7n4/?spm_id_from=333....拓展 & 补充DOM树是什么 DOM对象:浏览器依据html标签生成的IS对象所有的标签属性都能够在这个对象下面找到批改这个对象的属性会主动映射到标签身上它将HTML文档以树状构造直观的体现进去,所以咱们称之为文档树或DOM树形容网页内容关系的名词DOM树直观的体现了标签与标签之间的关系尽管在html中是标签,然而在JS中获取过去就是DOM对象objectDOM核心思想:把网页内容当做对象来解决js中什么叫做对象,创立一个变量也叫对象吗? 答案是:也叫对象 在JavaScript中,对象是一种数据类型,它能够存储多个键值对。每个键值对都蕴含一个属性名和一个相应的值。能够通过点号或方括号来拜访对象中的属性。 例如: var person = { name: "Tom", age: 25, gender: "male"};console.log(person.name); // 输入 Tomconsole.log(person["age"]); // 输入 25下面的代码创立了一个名为person的对象,该对象有三个属性:name、age和gender。能够通过点号或方括号来拜访这些属性的值。 另一方面,变量是用于存储特定值的标识符。在JavaScript中,变量能够存储任何类型的值,包含字符串、数字、布尔值、对象等。有时候,咱们会将一个对象存储在一个变量中,这样能够不便地拜访该对象的属性。 例如: var person = { name: "Tom", age: 25, gender: "male"};var personName = person.name;console.log(personName); // 输入 Tom下面的代码创立了一个名为person的对象,并将其存储在变量中。而后,将person对象的name属性的值存储在另一个变量personName中,并输入该变量的 值。这里的person变量和personName变量都是JavaScript中的变量,而不是对象。 var a=document.ElementById('text')为什么a叫做dom对象? 在JavaScript中,文档对象模型(DOM)是一种示意HTML或XML文档的规范对象汇合。通过DOM,能够应用JavaScript来拜访和操作HTML或XML文档中的各种元素、属性和事件。 在你的代码中,document.getElementById('text')返回了一个对象,该对象示意具备指定ID的HTML元素。因而,将其赋值给变量a时,a就成为了一个DOM对象。这个DOM对象能够被用于进一步地拜访和操作该HTML元素的各种属性和办法,比方扭转款式、内容等等。 总之,DOM对象是JavaScript中用于拜访和操作HTML或XML文档的规范对象,而且document.getElementById()办法返回的对象也是一种DOM对象,因而在你的代码中,a也被称为DOM对象。 针对没学过js的人群,了解这些对了解jQuery有很大的帮忙! jQueryjQuery是js库, 库:相当于java的工具类,库是寄存货色的, jQuery是寄存js代码的中央, 放的用js代码写的functiondom对象和jQuery对象咱们罕用的alert是属于BOM-操作浏览器的DOM是操作网页内容的dom对象:应用javascript的语法创立的对象叫做dom对象, 也就是js对象。比方:var obj= document.getElementById("txt1"); obj是dom对象,也叫做js对象 ...

May 29, 2023 · 3 min · jiezi

关于jquery:dtcloud使用jquery和echarts

如何在dtcloud中构建前端页面,本文次要介绍在dtcloud中如何应用jquery和echarts等插件 dtcloud中内置了jquery和 Bootstrap的css款式,能够间接应用,并且dtcloud能够解析sass语法,不便大家编写款式,而echarts等文件须要独自加载引入 我的项目目录如下: echarts引入下载echarts.js文件,链接如下https://cdnjs.com/libraries/echarts将echarts.js放在模块中在__manifest__.py中加载该文件 应用QWeb和jquery构建页面QWeb是什么?是一个基于xml的模板引擎,用于生成HTML片段和页面,模板指令是写在xml标签中的以t-结尾的属性,比方t-if如果要让一个标签不被渲染,能够采纳t来包裹,这样会执行它外面的命令然而不产生任何输入,例如: <t t-name="pyecharts_template"></t>qweb罕用指令: t-name 用于指明模板的名称t-extend 用于指明该模板是继承自另外哪一个模板,前面会带父模板的名称,如:t-extend=“Login"t-jquery 一个jQuery的选择器,前面指明选择器的定义,如:t-jquery=".oe_logiin"t-operation 个别跟在t-jquery前面,指明选择器找到元素后执行的动作,其值有:append(追加)、replace(替换)t-if 用于指明元素在页面产生的条件,前面是带一个javascript的表达式,返回True或Falset-att-### 用于指明一个元素的属性值,###是元素的属性名称,如:t-att-value=“javascript表达式”t-foreach 用于指明一个循环调用,前面个别带的是一个数组t-as 用于获得循环中的单个值,与t-foreach搭配应用,前面带的是一个变量名,能够循环中应用变量取值t-esc 用于一个文字输入t-call 用于调用另外模板,前面带一个模板的名称t-set 用于设定一个变量,前面带变量的名称,个别跟t-value搭配应用t-value 用于指定某个变量或元素的值更多理解:https://blog.csdn.net/weixin_44565926/article/details/124851731 2.1 新建一个xml模板,用qweb申明一个模板,(t-name申明模板名称,等下要在js文件中援用此模板)能够在模板中编写html标签内容 2.2 新建一个load_pyecharts.js文件,其中contentTemplate绑定xml模板 2.3 js代码 start: function () { $(document).ready(function () {// js代码编写 })} 2.4 在__manifest__.py的assets中加载上述js和xml文件及css/sass文件 增加菜单home.xml文件 <?xml version="1.0"?><dtcloud> <data> <record id="action_pyecharts" model="ir.actions.client"> <field name="name">Dashboard</field> <field name="tag">load_pyecharts</field> // js文件(core.action_registry.add)注册的名称 </record> <menuitem id="menu_pyecharts" name="首页" font_icon="sidenav-icon feather icon-home" action="action_pyecharts" groups="base.group_user" sequence="10" /> </data></dtcloud>在__manifest__.py的data中引入home.xml文件重启服务、刷新该模块即可看到成果作者:王步宇

April 24, 2023 · 1 min · jiezi

关于jquery:从JQuery出发总结的关于原型使用上的一些浅薄理解

比方咱们当初的需要如下。 有一个函数MyObj,反对如下性能: 能够通过MyObj()的形式返回一个对象,这个对象和new MyObj()是等价的MyObj自身是一个对象,能够通过MyObj.doit()的形式调用其上的办法或属性为了实现需求,第一反馈是: var MyObj=function(){ return new MyObj();};而后在MyObj上挂载静态方法,在MyObj.prototype上挂载对象办法。 看起来稳的很,其实这显著是一个死循环: // VM160:2 Uncaught RangeError: Maximum call stack size exceededMyObj();为了解决这个问题,咱们在MyObj的原型上定义了一个办法: MyObj.prototype.init=function(){ return this;};执行上面的办法: var temp=MyObj.prototype.init();下面返回的temp很显著就是MyObj.prototype,其实就是MyObj对象(例如:new A(),其实就是取A.prototype,这样比照就很好了解了)。 因而能够革新代码如下: var MyObj = function (param) { return MyObj.prototype.init();};这样MyObj和new MyObj()就别离示意类和对象。 问:看起来是不是实现了?答:是的,实现了。问:可是总感觉有点不好,说不出为什么。答:是不是感觉MyObj()打印进去的货色有点多?问:是的。事实上,因为间接取MyObj.prototype作为new MyObj(),实践上说,应用上区别不大,惟一有余的是,挂载在MyObj.prototype上的办法会在打印MyObj对象的时候看见,不难受。 为了看起来难看些,代码再次革新: var MyObj = function () { return new MyObj.prototype.init();};// 为了让MyObj()返回的是MyObj对象,须要批改MyObj.prototype.init的原型MyObj.prototype.init.prototype = MyObj.prototype;此刻的原型关系变成了: MyObj() ==return new MyObj.prototype.init() ==MyObj.prototype.init.prototype ==MyObj.prototype ==new MyObj()此时需要就实现了,而且打印MyObj()的时候,对象上的办法都在原型上,看起来就比拟难受了。

March 12, 2023 · 1 min · jiezi

关于jquery:Y-分钟速成-jquery

源代码下载: jquery-cn.js jQuery是JavaScript的一个函数库,它能够帮你“写更少,做更多”。它集成了很多常见的JavaScript工作并且很容易调用。jQuery被世界各地的很多的大公司和开发者应用。它包含了AJAX,事件处理,文档操作以及很多其它性能,并且更加简略和疾速。 正因为jQuery是JavaScript的一个函数库,所以你须要 首先学习JavaScript ///////////////////////////////////// 1. 选择器// jQuery中的选择器被用来抉择一个元素var page = $(window); // 抉择整个视窗// 选择器能够作为CSS选择器应用var paragraph = $('p'); // 抉择所有段落元素var table1 = $('#table1'); // 抉择id为table1的元素var squares = $('.square'); // 抉择所有类是square的元素var square_p = $('p.square') // 抉择具备square类的所有段落///////////////////////////////////// 2. 事件和成果// jQuery十分长于解决当事件触发的时候应该做什么// 一个十分常见的事件就是文档的就绪事件// 你能够用ready办法,在所有元素实现加载的时候执行$(document).ready(function(){ // 只有文档加载实现当前代码才会执行});// 你也能够用定义了的函数function onAction() { // 本函数在事件触发的时候被执行}$('#btn').click(onAction); // 当点击的时候调用onAction函数// 其它常见的事件:$('#btn').dblclick(onAction); // 双击$('#btn').hover(onAction); // 划过$('#btn').focus(onAction); // 聚焦$('#btn').blur(onAction); // 失焦$('#btn').submit(onAction); // 提交$('#btn').select(onAction); // 当元素被选中$('#btn').keydown(onAction); // 当一个按键被按下$('#btn').keyup(onAction); // 当一个按键被抬起$('#btn').keypress(onAction); // 当一个按键被按住$('#btn').mousemove(onAction); // 当鼠标在挪动$('#btn').mouseenter(onAction); // 鼠标移入元素$('#btn').mouseleave(onAction); // 鼠标来到元素// 如果不提供任何参数的话,那么这些办法能够触发事件// 而不是定义处理事件的办法$('#btn').dblclick(); // 触发元素上的双击// 你能够只用选择器一次而解决多个事件$('#btn').on( {dblclick: myFunction1} // 双击的时候触发 {blur: myFunction1} // 失焦的时候触发);// 你能够用一些成果函数来挪动或暗藏元素$('.table').hide(); // 暗藏元素// 留神:在这些办法中调用函数会依然暗藏元素$('.table').hide(function(){ // 元素先暗藏而后函数被执行});// 你能够在变量中贮存选择器var tables = $('.table');// 一些根本的文档操作方法有:tables.hide(); // 暗藏元素tables.show(); // 显示元素tables.toggle(); // 对被选元素进行暗藏和显示的切换tables.fadeOut(); // 淡出tables.fadeIn(); // 淡入tables.fadeToggle(); // 对被选元素进行淡入和淡出显示的切换tables.fadeTo(0.5); // 把被选元素逐步扭转至给定的不透明度(0和1之间)tables.slideUp(); // 通过调整高度来滑动暗藏被选元素tables.slideDown(); // 对被选元素进行滑动暗藏和滑动显示的切换tables.slideToggle(); // 对被选元素进行滑动暗藏和滑动显示的切换// 下面所有的办法承受速度参数(毫秒)和一个回调函数tables.hide(1000, myFunction); // 继续一秒的暗藏动画而后执行函数// fadeTo要求提供透明度参数作为第二个参数tables.fadeTo(2000, 0.1, myFunction); // 通过2秒钟将透明度变为0.1而后执行函数// 你能够用animate办法实现一些稍微高级的成果tables.animate({margin-top:"+=50", height: "100px"}, 500, myFunction);// animate办法承受一个蕴含CSS和值的对象作为指标,// 其次是可选的速度参数,// 以及最初的回调函数///////////////////////////////////// 3. 操作// 这些相似成果函数然而能够做更多$('div').addClass('taming-slim-20'); // 给所有div增加类taming-slim-20// 常见操作方法$('p').append('Hello world'); // 增加到元素开端$('p').attr('class'); // 获取属性$('p').attr('class', 'content'); // 设置属性$('p').hasClass('taming-slim-20'); // 如果有类则为真$('p').height(); // 获取和设置元素的高度// 对于很多的操作函数来说,获取元素的信息// 仅仅是第一个合乎元素的$('p').height(); // 仅仅获取第一个p标签的高度// 你能够用each来迭代所有元素var heights = [];$('p').each(function() { heights.push($(this).height()); // 把所有p标签的高度退出数组});有倡议?或者发现什么谬误?在 Github上开一个issue,或者发动pull request! ...

December 18, 2022 · 1 min · jiezi

关于jquery:JQuery学习记录

JQuery概述什么是JQuery?jQuery, 顾名思义, 也就是 JavaScript 和查问(Query) , 它就是辅助 JavaScript 开发的 js 类库。 JQuery核心思想它的核心思想是 write less,do more(写得更少,做得更多), 所以它实现了很多浏览器的兼容问题。 JQuery风行水平jQuery 当初曾经成为最风行的 JavaScript 库, 在世界前 10000 个拜访最多的网站中, 有超过 55%在应用jQuery。 jQuery 益处jQuery 是收费、 开源的, jQuery 的语法设计能够使开发更加便捷, 例如操作文档对象、 抉择 DOM 元素、制作动画成果、 事件处理、 应用 Ajax 以及其余性能。 JQuery初体验需要: 应用 jQuery 给一个按钮绑定单击事件? <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>JQuery初体验</title> <!--引入jquery文件--> <script src="jquery-3.5.1.js"></script> <script> $(function() { $("#one").click(function() { alert("应用JQuery给一个按钮绑定单击事件"); }); }); </script></head><body> <button id="one">你真还好吗?</button></body></html>JQuery外围函数$ 是 jQuery 的外围函数, 能实现 jQuery 的很多性能。 $()就是调用$这个函数 传入参数为 [ 函数 ] 时: ...

September 24, 2022 · 9 min · jiezi

关于jquery:jQuery-编程-jQuery-动画

一、动画jQuery提供了一些列的动画根本办法,同时也提供了自定动画计划.animate()。.show()当提供一个 duration(持续时间)参数,.show()成为一个动画办法。.show()办法将为匹配元素的宽度,高度,以及不透明度,同时进行动画操作。持续时间是以毫秒为单位的,数值越大,动画越慢,不是越快。字符串 'fast' 和 'slow' 别离代表200和600毫秒的延时。出了上述工夫,还能够自定工夫,承受毫秒为参数jQuery默认只提供两个缓冲成果:调用 swing, 在一个恒定的速度进行;调用 linear. 更多的缓动函数要应用的插件$("button").click(function () { $("p").show("slow");});复制代码.hide()$("#hidr").click(function () { $("div").hide(1000);});复制代码.fadeIn()通过淡入的形式显示匹配元素。$(document.body).click(function () { $("div:hidden:first").fadeIn("slow");});复制代码.fadeOut()通过淡出的形式显示匹配元素。$("p").fadeOut("slow");复制代码.animate()$("#go").click(function(){ $("#block").animate({ width: "70%",opacity: 0.4,marginLeft: "0.6in",fontSize: "3em",borderWidth: "10px"}, 1500 );});复制代码.slideDown()用滑动动画显示一个匹配元素。$("div").slideDown("slow");复制代码.slideUp()$(document.body).click(function () { if ($("div:first").is(":hidden")) { $("div").show("slow");} else { $("div").slideUp();}});复制代码.delay()设置一个延时来推延执行队列中后续的项。$("div.first").slideUp(300).delay(800).fadeIn(400);复制代码.clearQueue()从列队中移除所有未执行的项。$("#start").click(function () { $("div").slideUp(300).delay(800).fadeIn(400);})$("#stop").click(function () { var myDiv = $("div"); myDiv.clearQueue(); myDiv.stop();});复制代码.fadeTo()调整匹配元素的透明度。透明度的值为:0~1$(this).fadeTo("fast", Math.random());

August 10, 2022 · 1 min · jiezi

关于jquery:jQuery的功能

抉择元素将一个抉择表达式,放进构造函数jQuery()(简写为$),而后失去被选中的元素。抉择表达式能够是CSS选择器: $(document) //抉择整个文档对象 $('#myId') //抉择ID为myId的网页元素 $('div.myClass') // 抉择class为myClass的div元素 $('input[name=first]') // 抉择name属性等于first的input元素也能够是jQuery特有的表达式: $('a:first') //抉择网页中第一个a元素 $('tr:odd') //抉择表格的奇数行 $('#myForm :input') // 抉择表单中的input元素 $('div:visible') //抉择可见的div元素 $('div:gt(2)') // 抉择所有的div元素,除了前三个 $('div:animated') // 抉择以后处于动画状态的div元素扭转后果集范畴 $('div').has('p'); // 抉择蕴含p元素的div元素 $('div').not('.myClass'); //抉择class不等于myClass的div元素 $('div').filter('.myClass'); //抉择class等于myClass的div元素 $('div').first(); //抉择第1个div元素 $('div').eq(5); //抉择第6个div元素从后果集登程,挪动到左近的相干元素,jQuery也提供了在DOM树上的挪动办法: $('div').next('p'); //抉择div元素前面的第一个p元素 $('div').parent(); //抉择div元素的父元素 $('div').closest('form'); //抉择离div最近的那个form父元素 $('div').children(); //抉择div的所有子元素 $('div').siblings(); //抉择div的同级元素获取元素通过attr()办法来批改元素的属性,attr() 办法设置或返回被选元素的属性值。依据该办法不同的参数,其工作形式也有所差别。语法为:$(selector).attr(attribute,value) 获取节点属性名的值,相当于getAttribute(key)办法 $(this).attr(key); 设置节点属性的值,相当于setAttribute(key,value)办法 $(this).attr(key, value); 获取节点属性的值 var diywidgetid = $('#w_1').attr('diywidgetid'); 获取某个元素节点的value值,相当于$(this).attr(“value”); $(this).val();设置某个元素节点的value值,相当于$(this).attr(“value”,value); $(this).val(value); 链式操作选中网页元素当前,能够对它进行一系列操作,并且所有操作能够连贯在一起,以链条的模式写进去 $('div') //找到div元素 .find('h3') //抉择其中的h3元素 .eq(2) //抉择第3个h3元素 .html('Hello'); //将它的内容改为Hello原理就是每一步的jQuery操作,返回的都是一个jQuery对象,所以不同操作能够连在一起。 ...

July 12, 2022 · 1 min · jiezi

关于jquery:wallysRouterboardDR8074AHK01IPQ8074A8x8-5G-80211ax

IPQ8074A 4x4 2.4G 8x8 5G 802.11ax IPQ8074A 4x4 2.4G 8x8 5G 802.11ax DR8074A(HK01) https://www.wallystech.com/Ro... Wallys Communications (Suzhou ) Co., LTD (http://www.wallystech.com) is a professional supplier of wireless communication products and has a complete industrial chain in China. Our biggest advantage is our independent research and development ability, which can support you in the later period. We are also a supplier to Facebook, the quality of the product is unquestionable ...

June 15, 2022 · 2 min · jiezi

关于jquery:10个比较有用的jQuery插件

jQuery是简化了HTML文档遍历、事件处理、动画和Ajax交互最快、最简洁的JavaScript库。随着越来越多的jQuery插件呈现,开发者们能够很轻易地将所须要的组件整合进他们的导航菜单、logo、表格化布局、简短的文本,使其领有指定的大小或是为其创立一系列的滑动成果,以投合网站的主题。jQuery的呈现丰盛了网页的利用和开发,促使了多功能、视觉效果壮丽的网站的呈现。在本文中,咱们将为开发人员列出10个十分有用的jQuery插件,欢送品鉴! Responsive SwipeResponsive Swipe能够让您为不同设施的不同内容服务,您能够应用Responsive Swipe插件创立一个RESS站点发送不同的内容到不同的设施上。 jQuery Location PickerjQuery Location Picker容许您很容易地找到并抉择一个Google地图上的地位,同时提供核心地位和半径,它还能够抉择一片区域。其所有的数据都能够被主动保留到任何HTML元素中,也能够应用Javascript解决。 FilmRollFilmRoll是一个轻量级的传送插件,其专一于一个我的项目,同时还反对内部按钮、全屏等。 CLNDR.jsCLNDR.js是一个日历插件,用来创立日历,容许用户随便的依照本人的想法自定义日历。它提供一些很有帮忙的选项,确定星期的推移、初始加载时显示日历、点击事件等性能。 jQuery MapaeljQuery Mapael是基于Raphael.js的一个jQuery插件,能够显示动静矢量地图。 Sticky KitSticky是一个简略的页面音讯揭示的jQuery插件。能够设置让音讯在页面的四个角落呈现,也能够设置在页面地方呈现。能够手动敞开音讯,也能够设置成主动敞开。 jQuery.FileapijQuery.Fileapi是一个专用于FileAPI的jQuery插件,能多个上传、图片上传、裁剪、调整大小等。 Excolo SliderExcolo Slider是一款简略的jQuery滑动插件,反对响应式设计和触摸启动(仅限几个浏览器),附带幻灯片自动播放性能、鼠标滑动导航性能、分页性能和蕴含其余容易滑动的图像。 jQuery Collage PlusCollagePlus是一个jQuery表格插件,您能够定义图片之间的间隔,通过CSS给它们加边框。 jQuery Fullscreen EditorjQuery Fullscreen Editor能将文本域转换成定制的编辑器,领有全屏编辑的性能,实用于挪动端和桌面浏览器。 关键词:前端培训

April 21, 2022 · 1 min · jiezi

关于jquery:51layui-popupRight-弹出的页面非模板html

showInvoice:function (obj) { active.showPage(obj.data,'company/companyInvoiceLayerList4Admin.jsp','开票治理') },showPage:function (data,page,title) { top.layui.admin.popupRight({ id: 'LAY_'+elemId+'PopupLayer' ,title:title?title:false ,type: 2 ,content: page ,area: layui.setter.popup_layer_area ,success: function(layero,index){ top.window.formData = data; } ,btn: ['敞开'] ,btnAlign: 'c' }); },

April 10, 2022 · 1 min · jiezi

关于jquery:jquery常见事件动画

一、jquery事件 1、事件对象 $(document).click(function (ev) {//不必思考兼容,就通过事件处理函数的参数传入    //jq事件对象    console.log(ev);//原生对象    console.log(ev.originalEvent);// 鼠标绝对于文档的间隔    console.log(ev.pageX, ev.pageY);// 鼠标绝对于屏幕可视区的间隔    console.log(ev.clientX, ev.clientY);// 鼠标绝对于触发事件的元素的左上角的间隔    console.log(ev.offsetX, ev.offsetY);// 鼠标绝对于屏幕的间隔    console.log(ev.screenX, ev.screenY);// 相当于keyCode,比keyCode弱小,还能够记录鼠标的键值,123(左中右);     console.log(ev.which);      console.log(ev.target); // 事件源      console.log(ev.delegateTarget); // 事件绑定的对象      console.log(ev.type); // 事件类型      console.log(ev.ctrlKey); // 相应的功能键是否按下      console.log(ev.shiftKey);      console.log(ev.altKey);      /*          阻止冒泡:         ev.stopPropagation()         ev.cancelBubble = true       阻止事件默认行为:            return false            ev.preventDefault();            ev.returnValue = false      */      ev.preventDefault(); // 阻止默认事件      ev.stopPropagation(); // 阻止冒泡的操作 ...

February 22, 2022 · 2 min · jiezi

关于jquery:前端面试每日-31-第1014天

明天的知识点 (2022.01.24) —— 第1014天 (我也要出题)[软技能] 你心愿年终奖是怎么发的?《论语》,曾子曰:“吾日三省吾身”(我每天屡次检查本人)。前端面试每日3+1题,以面试题来驱动学习,每天提高一点!让致力成为一种习惯,让奋斗成为一种享受!置信 保持 的力量!!! 欢送在 Issues 和敌人们一起探讨学习! 我的项目地址:前端面试每日3+1【举荐】欢送跟 jsliang 一起折腾前端,零碎整顿前端常识,目前正在折腾 LeetCode,打算买通算法与数据结构的任督二脉。GitHub 地址 微信公众号欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个Star, 同时欢送微信扫码关注 前端剑解 公众号,并退出 “前端学习每日3+1” 微信群互相交换(点击公众号的菜单:交换)。 学习不打烊,充电加油只为遇到更好的本人,365天无节假日,每天早上5点纯手工公布面试题(死磕本人,愉悦大家)。心愿大家在这虚夸的前端圈里,放弃沉着,保持每天花20分钟来学习与思考。在这变幻无穷,类库层出不穷的前端,倡议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢送大家到Issues交换,激励PR,感激Star,大家有啥好的倡议能够加我微信一起交换探讨! 心愿大家每日去学习与思考,这才达到来这里的目标!!!(不要为了谁而来,要为本人而来!)交换探讨欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个[Star]

January 31, 2022 · 1 min · jiezi

关于jquery:如何解决layui下select组件大数据卡顿问题

事件是这样,前不久接手了一个老版本的我的项目,从询问过程中得悉我的项目中应用的是layui框架,迫于无奈,只好硬接了。 随着开发有序进行,忽然有一天,测试提出了个问题急匆匆的找上我,怎么回事啊,这个页面一进来就贼卡,有的电脑还忽然解体,以后程序也卡住,风扇也是嗡嗡的叫个不停。听到这,我连忙刺激道:别着急,等我抽根烟找找问题就好了(其实心田是慌的)。 说重点。 通过一顿剖析后得出结论。1. layui是老一套框架了,当看到vue行将成为支流之后,作者连夜跑路说不干了,如同是17还是18年就不干了。所以,仔细的人也会在网上看到一些遗留的bug还在,emm…。2. layui官网不反对多选,要多选须要另外下载额定组件。3. layui select组件及其简略,当遇到大数据时就呈现下拉卡顿问题。4. 不反对疏忽大小写搜寻。。 算了,不想说了。还是说怎么解决吧。 计划:源码下来改不太事实,而且工作量很可能会很大,只能采纳代替计划。通过一番查找和一直实际,总算手写了个selectM.js代替了。 成果:满足业务需要,虚构列表实现下拉、不卡顿、可自在设置是否疏忽大小写搜寻、单选多选自在切换、es6和es5写法同样反对,require形式引入。成果截图如下: 注:因为代码量切实太多且不宜上传,有须要的开发敌人可私言收费支付。

January 28, 2022 · 1 min · jiezi

关于jquery:jquery鼠标事件

截取自:https://www.cnblogs.com/loves...

January 26, 2022 · 1 min · jiezi

关于jquery:针对-jQuery-的优化方法有哪些

我始终在寻找无关jQuery性能优化方面的小窍门,能让我那臃肿的动静网页利用变得轻便些。找了很多文章后,我决定将最好最罕用的一些优化性能的倡议列出来 一、选择器性能优化倡议 1.总是从#id选择器来继承这是jQuery选择器的一条黄金法令。jQuery抉择一个元素最快的办法就是用ID来抉择了。 2.在class后面应用tagjQuery中第二快的选择器就是tag选择器(如$(‘head’)),因为它和间接来自于原生的Javascript办法getElementByTagName()。所以最好总是用tag来润饰class(并且不要忘了就近的ID) jQuery中class选择器是最慢的,因为在IE 浏览器 下它会遍历所有的DOM节点。尽量避免应用class选择器。也不要用tag来润饰ID。 3.应用子查问将父对象缓存起来以备未来的应用 4.优化选择器以实用Sizzle的“从右至左”模型自版本1.3之后,jQuery采纳了Sizzle库,与之前的版本在选择器引擎上的表现形式有很大的不同。它用“从左至右”的模型代替了“从右至左”的模型。 5.采纳find(),而不应用上下文查找find()函数确实快些。然而如果一个页面有许多DOM节点时,须要来回查找时,可能须要更多工夫: 6.利用弱小的链式操作采纳jQuery的链式操作比缓存选择器更无效 7.编写属于你的选择器如果你常常在代码中应用选择器,那么扩大jQuery的$.expr[‘:’]对象吧,编写你本人的选择器。 二、优化DOM操作倡议 8.缓存jQuery对象将你常常用的元素缓存起来 9.当要进行DOM插入时,将所有元素封装成一个元素这里的根本思维是在内存中建设你的确想要的货色,而后更新DOM。这并不是一个jQuery最佳实际,但必须进行无效的JavaScript操作 。间接的DOM操作速度很慢间接的DOM操作很慢。尽可能少的去更改HTML构造。 10.只管jQuery不会抛出异样,但开发者也应该查看对象只管jQuery不会抛出大量的异样给用户,然而开发者也不要依赖于此。jQuery通常会执行了一大堆没用的函数之后才确定一个对象是否存在。所以在对一个作一系列援用之前,应先检查一下这个对象存不存在。 11.应用间接函数,而不要应用与与之等同的函数为了取得更好的性能,你应该应用间接函数如. a j a x ( ) , 而 不 要 使 用 .ajax(),而不要应用.ajax(),而不要应用.get(),. g e t J S O N ( ) , .getJSON(),.getJSON(),.post(),因为前面的几个将会调用$.ajax()。 12.缓存jQuery后果,以备起初应用你常常会取得一个javasript利用对象——你能够用App.来保留你常常抉择的对象,以备未来应用 13.采纳jQuery的外部函数data()来存储状态不要忘了采纳.data()函数来存储信息 14.应用jQuery utility函数不要忘了简略实用的jQuery的 utility函数 。我最喜爱的是$.isFunction(), i s A r r a y ( ) 和 isArray()和isArray()和.each()。 15.为HTML块增加“JS”的class当jQuery载入之后,首先给HTML增加一个叫”JS”的class$(‘HTML’).addClass(‘JS’);只有当用户启用JavaScript的时候,你能力增加CSS款式。 三、对于优化事件性能的倡议 16.推延到( w i n d o w ) . l o a d 有 时 候 采 用 (window).load 有时候采纳(window).load有时候采纳(window).load()比$(document).ready()更快,因为后者不等所有的DOM元素都下载完之前执行。你应该在应用它之前测试它。 ...

January 21, 2022 · 1 min · jiezi

关于jquery:针对jQuery的优化方法有哪些

我始终在寻找无关jQuery性能优化方面的小窍门,能让我那臃肿的动静网页利用变得轻便些。找了很多文章后,我决定将最好最罕用的一些优化性能的倡议列出来一、选择器性能优化倡议1.总是从#id选择器来继承这是jQuery选择器的一条黄金法令。jQuery抉择一个元素最快的办法就是用ID来抉择了。2.在class后面应用tagjQuery中第二快的选择器就是tag选择器(如$(‘head’)),因为它和间接来自于原生的Javascript办法getElementByTagName()。所以最好总是用tag来润饰class(并且不要忘了就近的ID)jQuery中class选择器是最慢的,因为在IE浏览器下它会遍历所有的DOM节点。前端培训尽量避免应用class选择器。也不要用tag来润饰ID。3.应用子查问将父对象缓存起来以备未来的应用4.优化选择器以实用Sizzle的“从右至左”模型自版本1.3之后,jQuery采纳了Sizzle库,与之前的版本在选择器引擎上的表现形式有很大的不同。它用“从左至右”的模型代替了“从右至左”的模型。5.采纳find(),而不应用上下文查找find()函数确实快些。然而如果一个页面有许多DOM节点时,须要来回查找时,可能须要更多工夫:6.利用弱小的链式操作采纳jQuery的链式操作比缓存选择器更无效7.编写属于你的选择器如果你常常在代码中应用选择器,那么扩大jQuery的$.expr[‘:’]对象吧,编写你本人的选择器。二、优化DOM操作倡议8.缓存jQuery对象将你常常用的元素缓存起来9.当要进行DOM插入时,将所有元素封装成一个元素这里的根本思维是在内存中建设你的确想要的货色,而后更新DOM。这并不是一个jQuery最佳实际,但必须进行无效的JavaScript操作 。间接的DOM操作速度很慢间接的DOM操作很慢。尽可能少的去更改HTML构造。10.只管jQuery不会抛出异样,但开发者也应该查看对象只管jQuery不会抛出大量的异样给用户,然而开发者也不要依赖于此。jQuery通常会执行了一大堆没用的函数之后才确定一个对象是否存在。所以在对一个作一系列援用之前,应先检查一下这个对象存不存在。11.应用间接函数,而不要应用与与之等同的函数为了取得更好的性能,你应该应用间接函数如. a j a x ( ) , 而 不 要 使 用 .ajax(),而不要应用.ajax(),而不要应用.get(),. g e t J S O N ( ) , .getJSON(),.getJSON(),.post(),因为前面的几个将会调用$.ajax()。12.缓存jQuery后果,以备起初应用你常常会取得一个javasript利用对象——你能够用App.来保留你常常抉择的对象,以备未来应用13.采纳jQuery的外部函数data()来存储状态不要忘了采纳.data()函数来存储信息14.应用jQuery utility函数不要忘了简略实用的jQuery的 utility函数 。我最喜爱的是$.isFunction(), i s A r r a y ( ) 和 isArray()和isArray()和.each()。15.为HTML块增加“JS”的class当jQuery载入之后,首先给HTML增加一个叫”JS”的class$(‘HTML’).addClass(‘JS’);只有当用户启用JavaScript的时候,你能力增加CSS款式。三、对于优化事件性能的倡议16.推延到( w i n d o w ) . l o a d 有 时 候 采 用 (window).load 有时候采纳(window).load有时候采纳(window).load()比$(document).ready()更快,因为后者不等所有的DOM元素都下载完之前执行。你应该在应用它之前测试它。17.应用Event Delegation当你在一个容器中有许多节点,北京前端培训你想对所有的节点都绑定一个事件,delegation很适宜这样的利用场景。应用Delegation,咱们仅须要在父级绑定事件,而后查看哪个子节点(指标节点)触发了事件。当你有一个很多数据的table的时候,你想对td节点设置事件,这就变得很不便。18.应用ready事件的简写如果你想压缩js插件,节约每一个字节,你应该防止应用$(document).onready()四、测试jQuery19.jQuery单元测试测试JavaSript代码最好的办法就是人来测试。但你能够应用一些自动化的工具如 Selenium , Funcunit , QUit , QMock 来测试你的代码(尤其是插件)。我想在另外一个专题来探讨这个话题因为切实有太多要说的了。20.标准化你的jQuery代码常常标准化你的代码,看看哪个查问比较慢,而后替换它。你能够用Firebug控制台。你也能够应用 jQuery的快捷函数来使测试变得更容易些五、其余罕用jQuery性能优化倡议21.应用最新版本的jQuery最新的版本往往是最好的。更换了版本后,不要遗记测试你的代码。有时候也不是齐全向后兼容的。22.应用HMTL5新的HTML5规范带来的是更笨重的DOM构造。更笨重的构造意味着应用jQuery须要更少的遍历,以及更低劣的载入性能。所以如果可能的话请应用HTML5。23.如果给15个以上的元素加款式时,间接给DOM元素增加style标签要给多数的元素加款式,最好的办法就是应用jQuey的css()函数。然而更15个以上的较多的元素增加款式时,间接给DOM增加style 标签更无效些。这个办法能够防止在代码中应用硬编码(hard code)。24.防止载入多余的代码将Javascript代码放在不同的文件中是个好的办法,仅在须要的时候载入它们。这样你不会载入不必要的代码和选择器。也便于管理代码。25.压缩成一个主JS文件,将下载次数放弃到起码当你曾经确定了哪些文件是应该被载入的,那么将它们打包成一个文件。用一些开源的工具能够主动帮你实现,如应用 Minify (和你的后端代码集成)或者应用JSCompressor , YUI Compressor 或 Dean Edwards JS packer 等在线工具能够为你压缩文件。我最喜爱的是 JSCompressor 。26.须要的时候应用原生的Javasript应用jQuery是个很棒的事件,然而不要忘了它也是Javascript的一个框架。所以你能够在jQuery代码有必要的时候也应用原生的Javascript函数,这样能取得更好的性能。27.从Google载入jQuery框架当你的利用正式上线的时候,请从Google CDN载入jQuery,因为用户能够从最近的中央获取代码。这样你能够缩小服务器申请,而用户如果浏览其余网站,而它也应用Google CDN的jQuery时,浏览器就会立刻从缓存中调出jQuery代码。28.迟缓载入内容不仅能进步载入速度,也能进步SEO优化,应用Ajax来载入你的网站吧,这样能够节约服务器端载入工夫。你能够从一个常见的侧边栏widget开始。 ...

January 14, 2022 · 1 min · jiezi

关于jquery:干货jQuery学习教程jQuery入门看这一篇就够了

jQuery是什么?jQuery 是一个“写得更少,但做得更多”的轻量级 JavaScript 库。 jQuery 极大地简化了 JavaScript 编程,它封装JavaScript罕用的性能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。 jQuery的外围个性能够总结为:具备独特的链式语法和短小清晰的多功能接口;具备高效灵便的css选择器,并且可对CSS选择器进行扩大;领有便捷的插件扩大机制和丰盛的插件。jQuery兼容各种支流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等jQuery库 - 个性jQuery 是一个 JavaScript 函数库。 jQuery 库蕴含以下个性:HTML 元素选取HTML 元素操作CSS 操作HTML 事件函数JavaScript 特效和动画HTML DOM 遍历和批改AJAXUtilities在本教程中将通过教程以及许多在线实例,学到如何通过应用jQuery利用JavaScript成果。 须要具备的基础知识在开始学习 jQuery 之前,应该对以下常识有根本的理解: HTMLCSSJavaScript学习目录•001.jQuery教程-$是函数名 •002.jQuery教程-$是函数名例子 •003.jQuery教程-jQuery教程介绍 •004.jQuery教程-jQuery教程下载 •005.jQuery教程-应用jQuery教程第一个例子 •006.jQuery教程-入口函数简写形式 •007.jQuery教程-dom对象和jQuery教程对象 •008.jQuery教程-dom转jQuery教程对象 •009.jQuery教程-jQuery教程转dom对象 •010.jQuery教程-根本选择器应用 •011.jQuery教程-根本选择器例子 •012.jQuery教程-根本选择器后两个 •013.jQuery教程-温习 •014.jQuery教程-表单选择器 •015.jQuery教程-表单选择器例子 •016.jQuery教程-根本过滤器 •017.jQuery教程-过滤器例子页面定义 •018.jQuery教程-jQuery教程绑定事件形式1 •019.jQuery教程-表单属性过滤器 •020.jQuery教程-表单属性过滤器例子 •021.jQuery教程-第一组函数 •022.jQuery教程-第一组函数例子 •023.jQuery教程-第二组函数前三个 •024.jQuery教程-html函数 •025.jQuery教程-each函数 •026.jQuery教程-each循环json •027.jQuery教程-on绑定事件 •028.jQuery教程-ajax函数 •029.jQuery教程-ajax函数语法 •030.jQuery教程-应用jQuery教程实现ajax申请 •031.jQuery教程-温习 •032.jQuery教程-温习ajax函数 •033.jQuery教程-级联查问性能介绍 •034.jQuery教程-级联查问页面和dao创立 •035.jQuery教程-级联查问servlet •036.jQuery教程-级联查问ajax申请省份数据 •037.jQuery教程-级联查问change事件绑定 •038.jQuery教程-级联查问city的Dao •039.jQuery教程-级联查问ajax申请city数据 ...

December 30, 2021 · 1 min · jiezi

关于jquery:前端面试每日-31-第977天

明天的知识点 (2021.12.18) —— 第977天 (我也要出题)[html] 应用canvas画一个树形菜单节点图[css] 应用css3如何对动画进行延时操作?[js] JavaScript引擎在优化标识符查问方面做了什么?[软技能] 如何率领团队进化?《论语》,曾子曰:“吾日三省吾身”(我每天屡次检查本人)。前端面试每日3+1题,以面试题来驱动学习,每天提高一点!让致力成为一种习惯,让奋斗成为一种享受!置信 保持 的力量!!! 欢送在 Issues 和敌人们一起探讨学习! 我的项目地址:前端面试每日3+1【举荐】欢送跟 jsliang 一起折腾前端,零碎整顿前端常识,目前正在折腾 LeetCode,打算买通算法与数据结构的任督二脉。GitHub 地址 微信公众号欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个Star, 同时欢送微信扫码关注 前端剑解 公众号,并退出 “前端学习每日3+1” 微信群互相交换(点击公众号的菜单:交换)。 学习不打烊,充电加油只为遇到更好的本人,365天无节假日,每天早上5点纯手工公布面试题(死磕本人,愉悦大家)。心愿大家在这虚夸的前端圈里,放弃沉着,保持每天花20分钟来学习与思考。在这变幻无穷,类库层出不穷的前端,倡议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢送大家到Issues交换,激励PR,感激Star,大家有啥好的倡议能够加我微信一起交换探讨! 心愿大家每日去学习与思考,这才达到来这里的目标!!!(不要为了谁而来,要为本人而来!)交换探讨欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个[Star]

December 22, 2021 · 1 min · jiezi

关于jquery:ApacheCN-jQuery-译文集-20211121-更新

创立 jQueryMobile 挪动利用 零、序言一、jQueryMobile 原型制作二、jQuery Mobile 网站三、剖析、长表单和前端验证四、QR 码、地理位置、谷歌地图 API 和 HTML5 视频五、客户端模板、JSON API 和 HTML5 Web 存储六、HTML5 音频七、全响应式照片八、将 jQuery Mobile 集成到现有站点九、内容管理系统和 jQM十、将所有内容放在一起——Flood.FMjQuery 2.0 开发秘籍 零、序言一、文档对象模型操作二、利用 jQuery 事件与用户交互三、应用 AJAX 和 JSON 加载和操作动静内容四、通过 jQuery 成果增加有吸引力的视觉效果五、表单解决六、用户界面七、用户界面动画八、了解插件开发九、jQuery 用户界面十、应用 jQuery Mobile面向设计师的 jQuery 零、序言一、面向设计师的 jQuery二、改良链接三、打造更好的 FAQ 页面四、构建自定义滚动条五、创立自定义工具提醒六、构建交互式导航菜单七、异步导航八、在灯箱中显示内容九、制作幻灯片十、以旋转木马和滑块为特色的内容十一、创立交互数据网格十二、改良表单jQuery 设计模式 零、序言一、对于 jQuery 和复合模式的温习二、观察者模式三、公布/订阅模式四、模块模式的分治五、外观模式六、构建与工厂模式七、异步控制流模式八、模仿对象模式九、客户端模板十、插件和小部件开发模式十一、优化模式jQuery 基础知识 零、序言一、逐局部的 jQuery二、jQuery 选择器和过滤器三、操纵 DOM四、事件五、应用 jQuery 让你的网站变得时尚六、应用 jQuery 实现更好的表单七、与您的服务器通信八、编写您能够稍后浏览的代码九、更快的 jQuery十、通过插件从别人的工作中获益jQuery 游戏开发根底 零、序言一、用于游戏的 jQuery二、创立咱们的第一个游戏三、更好,更快,但不是更难四、侧视五、透视事物六、为游戏增加关卡七、制作多人游戏八、让咱们开始社交九、让游戏挪动化十、制作声音jQuery UI 秘籍 零、序言一、手风琴创作二、主动补全三、制作按钮四、开发数据采集器五、增加对话框六、制作菜单七、进度条八、应用滑块九、应用微调器十、应用选项卡十一、应用工具提醒十二、小部件和更多!jQuery3 学习手册 零、前言一、开始二、抉择元素三、处理事件四、款式和动画五、操纵 DOM六、应用 Ajax 发送数据七、应用插件八、开发插件九、高级选择器和遍历十、高级事件十一、高级成果十二、高级 DOM 操作十三、高级 Ajax十四、附录 A:应用 QUnit 测试 JavaScript十五、附录 B:疾速参考精通 jQuery ...

December 8, 2021 · 2 min · jiezi

关于jquery:前端面试每日-31-第959天

明天的知识点 (2021.11.30) —— 第959天 (我也要出题)[html] 应用canvas画一个羽毛球[css] 你有应用过css的:disabled伪类吗?[js] 应用js写一个全选和反选的操作[软技能] 你感觉前端深刻学习后倒退方向有哪些?《论语》,曾子曰:“吾日三省吾身”(我每天屡次检查本人)。前端面试每日3+1题,以面试题来驱动学习,每天提高一点!让致力成为一种习惯,让奋斗成为一种享受!置信 保持 的力量!!! 欢送在 Issues 和敌人们一起探讨学习! 我的项目地址:前端面试每日3+1【举荐】欢送跟 jsliang 一起折腾前端,零碎整顿前端常识,目前正在折腾 LeetCode,打算买通算法与数据结构的任督二脉。GitHub 地址 微信公众号欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个Star, 同时欢送微信扫码关注 前端剑解 公众号,并退出 “前端学习每日3+1” 微信群互相交换(点击公众号的菜单:交换)。 学习不打烊,充电加油只为遇到更好的本人,365天无节假日,每天早上5点纯手工公布面试题(死磕本人,愉悦大家)。心愿大家在这虚夸的前端圈里,放弃沉着,保持每天花20分钟来学习与思考。在这变幻无穷,类库层出不穷的前端,倡议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢送大家到Issues交换,激励PR,感激Star,大家有啥好的倡议能够加我微信一起交换探讨! 心愿大家每日去学习与思考,这才达到来这里的目标!!!(不要为了谁而来,要为本人而来!)交换探讨欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个[Star]

November 30, 2021 · 1 min · jiezi

关于jquery:count极少的情况下直接取到内存

sharding-core曾经实现了以上所有的解决方案,并且曾经在实现第三种优化,就是极不规则状况下的分页,公务员遴选具体就是当表查问坐落到3张表后其中2张表或者1张表的count极少的状况下间接取到内存而后残余的1张表能够间接通过skip+take获取数据后内存排序,因为工夫起因目前还没实现后续会针对这个状况进行实现。以上就是我为大家带来的实践和干货,http://lx.gongxuanwang.com/ss...具体的实践听得爽了干货我再发一遍吧 sharding-coresharding-core如何启用高性能分页 UseQueryMatch是什么意思,这个就是示意你要匹配的规定,是必须是以后这个类下的属性还是说只须要排序名称一样即可,因为有可能select new{}公务员遴选匿名对象类型就会不一样,PrimaryMatch示意是否只须要第一个次要的orderby匹配上就行了,UseAppendIfOrderNone示意是否须要开启在没有对应order查问条件的前提下增加本属性排序,这样能够保障程序排序性能最优http://lx.gongxuanwang.com/

November 30, 2021 · 1 min · jiezi

关于jquery:它比较复杂一些的数据结构

其实也是比较简单的,方括号外面的示意key值,前面的那个类型示意value的类型。下面老猫其实定义了一个map,并且给它初始化了一些数据。定义一个空的map其实也是比较简单的,遴选公务员次要有上面两种形式西也没法说出什么所以然来,大家既然想要学习这个语言就要去记下它的规定,所以还是得多写多练,长时间不去用可能就遗记了。 总结一下其定义模式map[k]V,当然咱们也能够定义它比较复杂一些的数据结构,例如map外面套map,这种复合型的,那么定义的最终模式就是map[K1]map[K2]V。然而很多时候,咱们是不能晓得这个key是否存在的,咱们取值的时候就要先判断以后的key是否存在,而后再去获取值,其实咱们能够这样写 独抽出来说感觉也不适合,遴选公务员因为咱们很多时候会遍历容器中的字符,因而索性就将其合并在内建容器外面一起分享好了。这里次要想和大家分享的是rune这个内建类型,从后面的章节中咱们都晓得这个相当于是Go的char,那么这个又怎么来用呢?咱们先来看上面例子http://www.gongxuanwang.com/

November 23, 2021 · 1 min · jiezi

关于jquery:jQuery如何操作操作修改样式

jQuery提供了用于款式操作的两种形式,别离是css()办法和设置类款式的办法,前者通过css()办法间接操作元素的款式,如width、height等,后者通过给元素增加或删除类名来操作元素的款式。上面咱们别离进行具体解说。 通过css()办法批改款式jQuery能够应用css()办法来批改简略元素款式;也能够操作类,批改多个款式。上面咱们首先对css()办法进行具体解说。 获取款式css()办法接管参数时只写款式名,则返回款式值。上面咱们通过代码演示。<style> div{ width: 200px; height: 200px; background-color: 'pink'; }</style><div></div><script> console.log($("div").css("width")); // 后果为:200px</script>上述代码中,第2行代码设置div元素款式宽度为200px,高度为200px,背景色为pink。第4行代码定义div元素。第6行代码用来获取div元素的宽度并在控制台中输入后果。 设置单个款式css()接管的参数是属性名和属性值,以逗号分隔,是设置一组款式,属性必须加引号,值如果是数字能够不必跟单位和引号。上面咱们通过代码进行演示。 <script> $("div").css("width", "300px"); //设置width为300px console.log($("div").css("width")); //后果为:300px</script>上述代码中,第2行代码从新设置div元素的宽度为300px。第3行代码输入后果300px。 设置多个款式css()办法的参数能够是对象模式,不便设置多组款式。款式名和款式值用冒号隔开,款式名能够不必加引号。上面咱们通过代码演示。 $("div").css({ width: 400, height: 400, backgroundcolor: "red" //属性名能够不加引号,但须要用驼峰法书写});上述代码中,设置了div元素宽度为400px,高度为400px,背景色为红色。 jQuery批改类类操作就是通过操作元素的类名进行元素款式操作,当元素款式比较复杂时,如果通过css()办法实现,须要在CSS里编写很长的代码,既不美观也不不便。而通过写一个类名,把类名加上或去掉就会显得很不便。上面咱们通过代码演示类的增加、删除和切换。 1.筹备工作 先筹备一个HTML网页,而后用jQuery代码对网页进行操作。HTML代码如下。 <style> .current {background-color: red;}</style><div>增加类名</div><div class="current">删除类名</div><div class="current">切换类名</div>2. addClass()增加类 addClass()办法向被选元素增加一个或多个类名,根本语法如下所示。 $(selector).addClass(className)上述代码中,className示意要增加的类名。示例代码如下。 <script> $("div").click(function(){ $(this).addClass("current"); });</script>上述代码执行后,单击页面中的“增加类名”按钮,就会在div元素上增加current类名,背景色批改为红色。 如果增加多个类,应用空格分隔类名,示例代码如下。 $(this).addClass("current currentl…"); 3. removeClass()移除类 removeClass()办法从被选元素移除一个或多个类,根本语法如下所示。$ (selector).removeClass(className)上述代码中,className参数能够传人一个或多个类名,应用空格来分隔,如果省略该参数,示意移除所有的类名。上面咱们通过代码演示。 <script> $("div").click(function(){ $(this).removeClass("current"); });</script>上述代码执行后,单击页面中的“删除类名”按钮,在div元素上的current类名会被移除,背景色隐没。 4. toggleClass()切换类 toggleClass()办法用来为元素增加或移除某个类,如果类不存在,就移除该类。根本语法如下所示。 $(selector).toggleClass(className,switch)上述代码中,className示意增加或移除的一个或多个类名,多个类名用空格分隔;switch参数用来规定只删除类或只增加类,设为true示意增加,设为false示意移除。上面咱们通过代码演示 toggleClass()的应用。 <script> $("div").click(function(){ $(this).toggleclass("current"); });</script>上述代码执行后,单击页面中的“切换类名”按钮,当div元素上存在current类名时,则被移除,否则就增加。能够实现字体背景色的切换成果。 本文转自:http://web.itheima.com

November 10, 2021 · 1 min · jiezi

关于jquery:JavaScript-事件-onblur-与-onfocus-区别

一、onblur 1.1 阐明 onblur属性在元素失去焦点时触发,onblur罕用于表单验证代码(例如用户来到表单字段)。 1.2 示例 <input type="text" name="" id="" onblur="javascript:alert('onblur');">二、onfocus 2.1 阐明 onfocus属性在元素取得焦点时触发,onfocus罕用于<input>、<select>以及。 2.2 示例 <!--点击后因为一直onfocus会一直弹出,能够间接敞开浏览器标签页终止--><input type="text" name="" id="" onfocus="javascript:alert('onfocus');">版权申明 本博客所有的原创文章,作者皆保留版权。转载必须蕴含本申明,放弃本文残缺,并以超链接模式注明作者后除和本文原始地址:https://blog.mazey.net/428.html (完)

November 1, 2021 · 1 min · jiezi

关于jquery:前端开发之JQuery入门基础操作

下载JQuery 目前jQuery有三个大版本: 1.x:兼容ie678,应用最为宽泛的,官网只做BUG保护,性能不再新增。因而个别我的项目来说,应用1.x版本就能够了, 2.x:不兼容ie678,很少有人应用,官网只做BUG保护,性能不再新增。如果不思考兼容低版本的浏览器能够应用2.x, 3.x:不兼容ie678,只反对最新的浏览器。除非特殊要求,个别不会应用3.x版本的,很多老的jQuery插件不反对这个版本。目前该版本是官网次要更新保护的版本。注:jquery-xxx.js与jquery-xxx.min.js区别:jquery-xxx.js是开发版本,给程序员看的,有良好的缩进和正文,体前端培训积大一些。jquery-xxx.min.js:生产版本,程序中应用,没有缩进,体积小一些,程序加载更快。 导入JQuery的js文件 间接导入min.js文件即可。比方: <script src="js/jquery-3.3.1.min.js"></script> JQuery对象和JS对象 区别与转换 ①区别 JQuery对象在操作时,更加不便。 JQuery对象和js对象办法不通用的。 ②转换 jq-->js:jq对象[索引] 或者 jq对象.get(索引) js-->jq:$(js对象) JQuery的简略应用 ①事件绑定 比方,点击id为b的按钮弹出提示框。 JQuery代码如下: $("#b").click(function(){ alert("b");}); 作用雷同的JS代码如下,能够显著看出JS代码更简单一些。 document.getElementById("b").onclick=function () { alert("b");} ②入口函数 入口函数就是以后页面加载实现后运行的函数,JQuery代码如下: $(function () { alert("页面加载实现");}); 而JS代码如下: window.onload = function () { alert("页面加载实现");}; 注:window.onload和$(function)区别:window.onload只能定义一次,如果定义屡次,后边的会将前边的笼罩掉;而$(function)能够定义屡次。 ③款式管制 比方,设置id为div1的元素背景色彩为红色。JQuery代码如下: $("#div1").css("background-color","red"); 或者: $("#div1").css("backgroundColor","red"); 等价于JS代码: document.getElementById("div1").style.backgroundColor="red";

November 1, 2021 · 1 min · jiezi

关于jquery:jQuery-实现淡入淡出效果

上一节咱们学习了如何实现元素的显示与暗藏,本节咱们来学习如何实现元素的淡入淡出成果。 fadeIn()办法fadeIn() 办法用于淡入已暗藏的元素。 语法如下所示: $(selector).fadeIn(speed,callback);speed:规定成果的时长,可选值有 slow、fast 或毫秒。callback:是 fading 实现后所执行的函数名称。示例:例如当咱们点击按钮时,将紫色正方形设置为淡入成果: <!DOCTYPE html><html><head><meta charset="utf-8"><title>jQuery_侠课岛(9xkd.com)</title><script src="jquery-3.5.1.min.js"></script><script> $(function(){ $("button").click(function(){ $(".rect").fadeIn(2000); }); });</script></head><body> <div> <div style="margin-bottom: 20px;"><button>淡入成果</button></div> <div class="rect" style="width:150px;height:150px;background:plum;display: none;"></div> </div></body></html>在浏览器中的演示成果: 咱们能够通过设置 fadeIn() 办法的参数来实现不同的淡入成果,例如: $(".rect").fadeIn("fast");在浏览器中的演示成果: fadeOut()办法fadeOut() 办法与 fadeIn() 办法成果刚好相同,用于淡出可见元素。 语法如下所示: $(selector).fadeOut(speed,callback);示例:<!DOCTYPE html><html><head><meta charset="utf-8"><title>jQuery_侠课岛(9xkd.com)</title><script src="jquery-3.5.1.min.js"></script><script> $(function(){ $("button").click(function(){ $(".rect").fadeOut(2000); }); });</script></head><body> <div> <div style="margin-bottom: 20px;"><button>淡出成果</button></div> <div class="rect" style="width:150px;height:150px;background:plum;"></div> </div></body></html>在浏览器中的演示成果: fadeToggle()办法fadeToggle() 办法能够在 fadeIn() 与 fadeOut() 办法之间进行切换。 语法如下: $(selector).fadetoogle(speed,callback);如果元素已淡出,则 fadeToggle() 办法会向元素增加淡入成果。如果元素曾经淡入,fadeToggle() 办法会向元素增加淡出成果。 示例:实现一个淡入淡出切换成果: $(function(){ $("button").click(function(){ $(".rect").fadeToggle(2000); });});在浏览器的演示成果: fadeTo()办法fadeTo() 办法容许突变为给定的不透明度,值介于 0 与 1 之间。 语法如下: $(selector).fadeTo(speed,opacity,callback);其中参数 opacity 是必须参数,用于将淡入淡出成果设置为给定的不透明度,其余两个参数为可选参数。 ...

October 18, 2021 · 1 min · jiezi

关于jquery:jQuery-实现显示与隐藏效果

本节咱们来学习如何应用 jQuery 中的办法来实现元素的显示与暗藏效。 hide()办法hide() 办法用于暗藏指定的元素,与 CSS 中的 display:none 成果相似。 语法如下所示: $(selector).hide(speed,easing,callback)speed:可选,规定暗藏成果的速度。可选值为 slow、fast、毫秒。easing:可选,规定在动画的不同点上元素的速度,可选值为 swing、linear。callback:可选,hide() 办法执行完之后,要执行的函数。示例:<!DOCTYPE html><html><head><meta charset="utf-8"><title>jQuery_侠课岛(9xkd.com)</title><script src="jquery-3.5.1.min.js"></script><script> $(function(){ $("button").click(function(){ $(".fruit").hide('slow','linear'); }); });</script></head><body> <div> <button>暗藏上面内容</button> <div class="fruit"> <p>我喜爱的水果:</p> <ul> <li>西瓜</li> <li>苹果</li> <li>香蕉</li> <li>桃子</li> <li>哈密瓜</li> </ul> </div> </div></body></html>在浏览器中的演示成果: show()办法show() 办法用于显示暗藏的指定元素。与 CSS 中 display:none 的成果相似。 语法如下所示: $(selector).show(speed,easing,callback)show() 办法中的参数和 hide() 办法中参数相似。 示例:<!DOCTYPE html><html><head><meta charset="utf-8"><title>jQuery_侠课岛(9xkd.com)</title><script src="jquery-3.5.1.min.js"></script><script> $(function(){ $(".hide").click(function(){ $(".fruit").hide('slow','linear'); }); $(".show").click(function(){ $(".fruit").show('slow','linear'); }); });</script></head><body> <div> <button class="hide">暗藏上面内容</button> <button class="show">显示上面内容</button> <div class="fruit"> <p>我喜爱的水果:</p> <ul> <li>西瓜</li> <li>苹果</li> <li>香蕉</li> <li>桃子</li> <li>哈密瓜</li> </ul> </div> </div></body></html>在浏览器中的演示成果: toggle()办法下面示例中咱们在实现显示和暗藏成果时,须要应用两个按钮别离管制。那么有没有方法只通过一个按钮就能够实现显示和暗藏成果呢。这就须要用到 toggle() 办法了,toggle() 办法能够用于切换 hide() 和 show() 办法。 ...

October 14, 2021 · 1 min · jiezi

关于jquery:前端面试每日-31-第912天

明天的知识点 (2021.10.14) —— 第912天 (我也要出题)[html] 如果让你出一些html的视频教程,你应该怎么出?[css] 写css,class层级过多会影响页面的渲染性能吗?[js] 说说你对JavaScript与无限状态机的了解[软技能] 老师将来会被AI取代吗?说说你的认识《论语》,曾子曰:“吾日三省吾身”(我每天屡次检查本人)。前端面试每日3+1题,以面试题来驱动学习,每天提高一点!让致力成为一种习惯,让奋斗成为一种享受!置信 保持 的力量!!! 欢送在 Issues 和敌人们一起探讨学习! 我的项目地址:前端面试每日3+1【举荐】欢送跟 jsliang 一起折腾前端,零碎整顿前端常识,目前正在折腾 LeetCode,打算买通算法与数据结构的任督二脉。GitHub 地址 微信公众号欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个Star, 同时欢送微信扫码关注 前端剑解 公众号,并退出 “前端学习每日3+1” 微信群互相交换(点击公众号的菜单:交换)。 学习不打烊,充电加油只为遇到更好的本人,365天无节假日,每天早上5点纯手工公布面试题(死磕本人,愉悦大家)。心愿大家在这虚夸的前端圈里,放弃沉着,保持每天花20分钟来学习与思考。在这变幻无穷,类库层出不穷的前端,倡议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢送大家到Issues交换,激励PR,感激Star,大家有啥好的倡议能够加我微信一起交换探讨! 心愿大家每日去学习与思考,这才达到来这里的目标!!!(不要为了谁而来,要为本人而来!)交换探讨欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个[Star]

October 14, 2021 · 1 min · jiezi

关于jquery:jQuery-事件

本节咱们学习 jQuery 中的事件的应用,jQuery 是专门为响应 HTML 页面中的事件而设计的。咱们在应用时,须要遵循以下准则: 把所有 jQuery 代码置于事件处理函数中。把所有事件处理函数置于文档就绪事件处理器中。把 jQuery 代码置于独自的 .js 文件中。如果存在名称抵触,则重命名 jQuery 库。什么是事件首先咱们要晓得什么是事件,页面对不同访问者的响应叫做事件,例如点击某个按钮,抉择单选框或复选框,滑动鼠标等,这些都能够称为事件。 jQuery罕用事件在 jQuery 中,大多数 DOM 事件都有一个相应的 jQuery 办法。例如咱们后面提到过的点击事件的对应的办法为 click() 办法。 click点击事件当咱们点击元素时,会产生 click 点击事件,这须要用到 click() 办法。 示例:<!DOCTYPE html><html><head><meta charset="utf-8"><title>jQuery_侠课岛(9xkd.com)</title><script src="jquery-3.5.1.min.js"></script><script> $(function(){ $("button").click(function(){ alert("hello, xkd!"); }); });</script></head><body> <div> <button>点击按钮</button> </div></body></html>在浏览器中的演示成果: dblclick双击事件当咱们双击元素时,会触发 dblclick 双击事件。触发双击事件须要用到 dblclick() 办法。 留神 dblclick 事件也会产生 click 事件,所有如果这两个事件都被利用于同一个元素,则会产生问题。 示例:例如双击 p 元素并暗藏这个元素: <!DOCTYPE html><html><head><meta charset="utf-8"><title>jQuery_侠课岛(9xkd.com)</title><script src="jquery-3.5.1.min.js"></script><script> $(function(){ $("p").dblclick(function(){ $(this).hide(); }); });</script></head><body> <div> <p>双击暗藏此元素</p> </div></body></html>在浏览器的演示成果: 鼠标事件jQuery 的鼠标有四个相干的事件,包含鼠标指针进入、来到、按下、开释: 当鼠标指针穿过(进入)被选元素时,能够通过 mouseenter() 办法触发 mouseenter 事件。当鼠标指针来到 HTML 元素时,能够通过 mouseleave() 办法触发 mouseleave 事件。当鼠标指针挪动到元素上方,并按下鼠标按键时,能够通过 mousedown() 办法触发 mousedown 事件。当在元素上松开鼠标按钮时,能够通过 mouseup() 办法触发 mouseup 事件。示例:<!DOCTYPE html><html><head><meta charset="utf-8"><title>jQuery_侠课岛(9xkd.com)</title><script src="jquery-3.5.1.min.js"></script><script> $(function(){ $(".one").mouseenter(function(){ alert("mouseenter事件"); }); $(".two").mouseleave(function(){ alert("mouseleave事件"); }); $(".three").mousedown(function(){ alert("mousedown事件"); }); $(".four").mouseup(function(){ alert("mouseup事件"); }); });</script></head><body> <div> <p class="one">mouseenter事件,鼠标指针挪动到元素上,弹出弹出层</p> <p class="two">mouseleave事件,鼠标指针来到元素上,弹出弹出层</p> <p class="three">mousedown事件,在元素上按下鼠标,弹出弹出层</p> <p class="four">mouseup事件,在元素上松开鼠标,弹出弹出层</p> </div></body></html>hover()办法hover() 办法用于在鼠标指针悬停在被选元素上时要运行的两个函数。即 mouseenter() 和 mouseleave() 办法。 ...

October 10, 2021 · 1 min · jiezi

关于jquery:jQuery-选择器

本节咱们来学习 jQuery 中的选择器,选择器是 jQuery 库中最重要的局部之一。 jQuery选择器jQuery 选择器容许咱们选取和操作 HTML 元素,它用于依据 HTML 元素的名称、ID、类、类型、属性和属性值等来查找 HTML 元素。除了基于现有的 CSS 选择器,它还有一些本人自定义的选择器。 要留神 jQuery 中的所有选择器都以美元符号和圆括号结尾,例如 $()。 元素选择器jQuery 元素选择器是依据元素名称匹配绝对应的元素。也就是说它是依据元素的标签名来抉择的,指向的是 DOM 元素的标签名。 示例:例如有上面一段 HTML 代码: <!DOCTYPE html><html><head><meta charset="utf-8"><title>jQuery_侠课岛(9xkd.com)</title></head><body> <h2>你好,欢送来到侠课岛!</h2> <div> <p>侠课岛的学习课程:</p> <ul> <li class="course">Python</li> <li class="course">前端</li> <li class="course">Java</li> <li class="course">PHP</li> </ul> <div> <button>点击按钮</button> </div> </div></body></html>如果咱们要在这个页面中写入 jQuery 代码,首先须要引入 jQuery 文件,格局如下所示: <script src="jquery-3.5.1.min.js"></script>这示意咱们引入的 jquery-3.5.1.min.js 和 index.html 文件位于同一目录下。 接着咱们要在一个新的 <script> 标签中编写 jQuery 代码,留神肯定要另外写一个 <script> ,不能写在 引入文件的 <script> 标签中哟。 例如要实现点击页面中的按钮,暗藏所有 <li> 标签的成果: <script> $(function(){ $("button").click(function(){ $("li").hide(); }); });</script>上述代码中,最开始是一个 jQuery 的加载函数 $(function(){}),这个咱们后面一节讲到过。而后在 button 标签选择器上绑定了一个 click() 点击事件,示意当点击元素时,会触发这个点击事件。而后会运行点击事件中的函数,这函数中的 $("li").hide() 示意选取页面所有的 <li> 标签而后进行暗藏,hide() 就是一个暗藏元素办法。 ...

October 7, 2021 · 1 min · jiezi

关于jquery:jQuery语法

本节咱们学习 jQuery 的语法,通过 jQuery,咱们能够选取 HTML 元素并对它们执行操作。 jQuery语法jQuery 语法是为选取 HTML 元素和对元素执行某些操作而定制的。 根本语法格局: $(selector).action()首先是美元符号 $,是 jQuery 的别名,示意 jQuery 对象。selector 是一个选择符,用于查问 HTML 元素。action() 示意要对元素执行的 jQuery 操作。示例:例如咱们来看几个例子: $(this).hide() // 暗藏以后元素$("span").hide() // 暗藏所有<span>元素$(".xkd").hide() // 暗藏class="xkd"的所有元素$("#xkd").hide() // 暗藏id="xkd"的所有元素文档就绪函数为了避免文档在没有齐全加载之前就运行 jQuery 代码,咱们须要一个文档就绪函数: $(document).ready(function() { // jquery代码});增加这个函数后,就只能在 DOM 加载实现后才能够对 DOM 进行操作。 如果在文档没有齐全加载之前运行函数,可能会失败操作,例如: 试图暗藏一个不存在的元素。尝试获取尚未加载的图像大小下面的函数还有一个简洁的写法: $(function() { // jquery代码});这两种写法的成果都是一样的,然而简写看起来更不便一些。、 链接:https://www.9xkd.com/

October 5, 2021 · 1 min · jiezi

关于jquery:jQuery-安装

本节咱们学习 jQuery 的装置,咱们在理论我的项目中,如果要应用 jQuery,则须要先下载 jQuery 库,而后把它引入到要应用的网页中。 jQuery 有上面几种应用办法: 从官网下载 jQuery 库,而后引入到页面中。应用命令装置 jQuery,例如 npm、bower 命令。从 CDN 中载入 jQuery, 比方从 Google 中加载 jQuery。jQuery下载咱们 能够在 jQuery 的官网下载 jQuery,下载地址为:https://jquery.com/download/。 有两个版本的 jQuery 可供下载: 生产版本:用于理论网站中,已被精简和压缩。开发版本:用于测试和开发,未压缩,是可读代码。咱们依据须要下载相应的版本,例如我下载的是 jquery-3.5.1.min.js 文件,而后能够把下载好文件放到与网页雷同的目录中,这样更方便使用。 接着就能够在页面中引入 jquery 文件啦,引入格局如下所示: <script src="jquery-3.5.1.min.js"></script>应用npm装置jQueryjQuery 在 npm 上注册为软件包,所以咱们能够应用 npm CLI 命令装置最新版本的 jQuery: npm install jquery或者应用 Yarn 命令装置也能够: yarn add jquery应用这两种形式装置 jQuery,咱们能够在 node_modules/jquery/dist/ 中找到一个未压缩的发行版,一个压缩的发行版和一个映射文件。 应用Bower装置jQuery除了 npm,jQuery 还通过 Bower 注册为软件包,所以咱们也能够应用 bower 命令装置最新版本的 jQuery: bower install jquery应用这种形式,会将 jQuery 装置到 Bower 的装置目录,默认为 bower_components。咱们能够在 bower_components/jquery/dist/ 目录下找到一个未压缩的发行版,一个压缩的发行版和一个映射文件。 ...

October 1, 2021 · 1 min · jiezi

关于jquery:这篇是记录小说网站项目开发过程中遇到的问题

这篇开始,我将会记录我在我的项目开发过程中遇到的本人认为的难点问题,记录在博客,也心愿对其他人有所帮忙。小说开发有什么疑难能够私信或微信kjwenlc分割我,大家一起交换提高 这篇的问题是:jquery实现批量删除的性能。 1,全选与单选,jquery代码 // 全选 $("#check_all,#duiqi").click(function() { $("input[name='deleteids[]']").prop("checked",this.checked); }); // 单选 var subChk = $("input[name='deleteids[]']") subChk.click(function() { $("#check_all").prop("checked", subChk.length == subChk.filter(":checked").length ? true:false); });

September 29, 2021 · 1 min · jiezi

关于jquery:jQuery-简介

本教程咱们来学习 JQuery 的根底入门常识。JQuery 是一个疾速、简洁的 JavaScript 框架,是继 Prototype 之后又一个优良的 JavaScript 代码库。jQuery 极大的简化了 JavaScript 编程,例如以前要一大段 JavaScript 代码能力实现的性能,应用 jQuery 很轻松就能实现。 JQuery 倒退历程历程倒退2005年8月Prototype的 “Behaviour” 库的改良2006年1月John Resig 等人于 1 月份创立 jQuery ,8 月第一个稳固版本2007年jQuery1.1.3 版本公布2008年jQuery1.2.6 版本公布2009年1月jQuery 1.3版公布2010年1月jQuery1.4 版本公布2011年1月jQuery1.5 版本公布2012年8月jQuery1.8 版本公布2013年1月jQuery1.9 版本公布2013年4月jQuery2.0 版本公布,除去对IE 6-8的反对以进步性能,并升高文件大小2016年6月jQuery3.0 版本公布,jQuery的劣势轻量级,jQuery 的体积较小,压缩之后,大概只有 100KB。弱小的选择器,jQuery 反对简直所有的 CSS 选择器,以及 jQuery 自定义的特有选择器。杰出的 DOM 封装,jQuery 封装了大量罕用的 DOM 操作,使开发者在编写 DOM 操作相干程序的时候可能更加得心应手。浏览器兼容性,jQuery 打消了浏览器兼容问题。牢靠的事件处理机制,jQuery 的事件处理机制排汇了 JavaScript 中的事件处理函数的精髓,使得 jQuery 在处理事件绑定时十分牢靠。提供了丰富多彩的页面动态效果。与 Ajax 技术的完满联合,极大中央便了程序的开发,加强了页面交互, 晋升了用户体验。有丰盛的插件反对,目前曾经有成千盈百的官网插件反对,而且一直有新插件面世。jQuery库的次要性能HTML 元素选取HTML/DOM 操作CSS 操作JavaScript 成果和动画HTML DOM 遍历和批改AJAXUtilities除此之外,jQuery 还提供了一些插件供咱们应用,对于代码的实现不便且快捷。 jQuery和原生 JavaScript 的区别原生 JavaScript 的 API 名字太长,不容易记住,jQuery 的 API 名字容易记住。原生 JavaScript 有的代码冗余,jQuery 的代码简洁。原生 JavaScript 中的属性或者办法有些浏览器无奈兼容,jQuery 帮咱们解决了浏览器兼容问题。原生 JavaScript 容错率比拟低,后面的代码呈现问题,前面的代码执行不到。jQuery 容错率比拟高,后面的代码呈现问题,不影响前面的代码。原生 JavaScript 不能增加多个入口函数,如果增加了多个,前面的会把后面的笼罩掉。jQuery 能够写多个入口函数。链接:https://www.9xkd.com/ ...

September 27, 2021 · 1 min · jiezi

关于jquery:前端面试每日-31-第891天

明天的知识点 (2021.09.23) —— 第891天 (我也要出题)[html] 如何应用HTML5生成一张缩略图?[css] 应用flex布局,多行,每行均匀5个item,每个item之间有间隙[js] 写一个js办法将字符串数组与数字数组互转[软技能] Git Hook在我的项目中哪些作用?《论语》,曾子曰:“吾日三省吾身”(我每天屡次检查本人)。前端面试每日3+1题,以面试题来驱动学习,每天提高一点!让致力成为一种习惯,让奋斗成为一种享受!置信 保持 的力量!!! 欢送在 Issues 和敌人们一起探讨学习! 我的项目地址:前端面试每日3+1【举荐】欢送跟 jsliang 一起折腾前端,零碎整顿前端常识,目前正在折腾 LeetCode,打算买通算法与数据结构的任督二脉。GitHub 地址 微信公众号欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个Star, 同时欢送微信扫码关注 前端剑解 公众号,并退出 “前端学习每日3+1” 微信群互相交换(点击公众号的菜单:交换)。 学习不打烊,充电加油只为遇到更好的本人,365天无节假日,每天早上5点纯手工公布面试题(死磕本人,愉悦大家)。心愿大家在这虚夸的前端圈里,放弃沉着,保持每天花20分钟来学习与思考。在这变幻无穷,类库层出不穷的前端,倡议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢送大家到Issues交换,激励PR,感激Star,大家有啥好的倡议能够加我微信一起交换探讨! 心愿大家每日去学习与思考,这才达到来这里的目标!!!(不要为了谁而来,要为本人而来!)交换探讨欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个[Star]

September 23, 2021 · 1 min · jiezi

关于jquery:低版本jQuery升级到高版本的jQuery

低版本的jQuery降级到高版本的jQuery波及到兼容性问题,须要应用兼容包jquery-migrate,只须要将与高版本的JQuery同一大版本的jquery-migrate一起应用即可。例:1.10.2版本升级到3.5.1版本 <!--<script type="text/javascript" src="/assets/ui/js/jquery-1.10.2.js" ></script> 将旧版本的正文--><!--增加新版本及migrate--><script src="/assets/scripts/js/jquery-3.5.1.min.js"></script><script src="/assets/scripts/js/jquery.migrate.3.3.0.js"></script>

September 22, 2021 · 1 min · jiezi

关于jquery:memmove用于拷贝字节

就是快与慢的区别,不过依据问题一,能够假设快指向head->next->next,而慢指向head->next,这样当快指针指向NULL时,慢指针就到两头了。星池starpool 不过写的算法中有些小瑕疵,当长度为奇数时正确,当是偶数的时候我抉择返回两头前面一个,而不是两个。咱们选用链表来存储这个圆圈,以此来达到数小``孩的目标,咱们应用如下代码申明一个构造。struct boy { //小孩节点 int code; boy*next; }其中,code示意小孩的编号,next是一个指针,用来指向下一个小孩。当咱们在链表上玩游戏时,应用两个指针记住第一个小孩和以后小孩的地位。 约瑟夫问题中的k=1时计算会呈现谬误,这是因为for循环至多执行0次,https://www.starpool.cn 而咱们须要它至多执行一次,因而起初在调试过后应用了.依据后面的剖析,在减少输入代码,失去如下程序(因为要求减少姓名和学号信息,我将构造体定义和遍历小孩局部稍作批改)

September 16, 2021 · 1 min · jiezi

关于jquery:返回非整型值的函数外部变量

内部变量的大量应用会导致各个函数之间有大量的数据交换,星池starpool 会对程序的构造产生不良的影响。函数与内部变量能够离开进行编译,当 file1 中的函数须要调用 file2 中内部变量时,须要在 file1 中应用 extern 申明 file2 中的内部变量。和函数被限定在本文件内应用。通过 static 润饰的局部变量只能在该函数中应用,然而不会随着函数的退出而开释占用的存储空间。 对于主动变量和寄存器变量的初始化,https://www.starpool.cn 能够不是常量表达式,等效于简略的赋值语句,这类变量在每次进入函数或程序块时都将被初始化。初始化表达式列表用花括号括起来,各初始化表达式之间通过逗号分隔。

September 13, 2021 · 1 min · jiezi

关于jquery:一个不起眼却非常实用的功能介绍

在ThingJS中有许多的官网示例,很直白也很容易被使用者查看和应用,然而在开发的过程中有一个十分有用的性能非常容易被忽视,大多数的人只是疾速浏览了一遍这些官网示例,有时候并没有浏览残缺就开始尝试开发。实际上,除了官网示例,ThingJS的快捷代码性能也十分不便!能够间接将所需代码增加到所编辑的我的项目文件(光标所在位置)中。 快捷代码性能ThingJS的快捷代码性能,从场景到综合,每个快捷代码都能简化咱们的开发,快捷代码有领有以下六个次要性能:场景、创立物体、管制物体、事件、管制层级、地图、摄影机、界面、控件、援用资源、综合。尤其是快捷代码中的综合这一栏,其中有一个场景预览的快捷代码,只须要引入这个快捷代码,就能十分迅速的让你的场景呈现预览选项啦!应用办法如下:鼠标搁置在左上角快捷代码处,抉择栏目,而后双击对应性能,点击该性能即可呈现在以后我的项目上(舒适贴士揭示,请留神代码呈现的地位问题,呈现的代码地位须要依照集体要求来进行调整,快捷代码呈现的地位为鼠标光标最初一次呈现在我的项目中的地位。) THING.Utils.dynamicLoad(['https://www.thingjs.com/guide/ScenePreview/v0.1.7/AppPreview.min.js'], function () { new AppPreview({ app: app, type: 'scene' }); } )以下是设置物体可拖拽的官网示例,这个官网示例在快捷代码中,应用这个性能能够从快捷代码援用,也能够间接去复制这个而后放到ThingJS的我的项目中去哟~ // 设置物体可拖拽obj.draggable = true;/* drag dragstart dragend 事件参数:* {Number} ev.x 鼠标拾取处的屏幕横坐标* {Number} ev.y 鼠标拾取处的屏幕纵坐标* {THING.BaseObject} ev.object 拖拽的物体* {Array} ev.pickedPosition 鼠标拾取 3D 场景中的世界坐标* {Boolean} ev.altKey 拖拽时是否按下 Alt 键* {Boolean} ev.ctrlKey 拖拽时是否按下 Ctrl 键* {Boolean} ev.shiftKey 拖拽时是否按下 Shift 键*/ // 开始拖拽obj.on('dragstart', function(ev) { console.log('开始拖拽');}); // 拖拽中 obj.on('drag', function(ev) { if (ev.picked) {console.log(ev.pickedPosition);}}); // 拖拽完结 obj.on('dragend',function(ev) { console.log('完结拖拽');});ThingJS 应用 JavaScript 语言进行开发。不仅能够针对单栋或多栋修建组成的园区场景进行可视化开发,也能够针对地图级别场景进行开发。无论 3D 场景搭建、3D 成果制作、物联网数据接入,还是 3D 可视化的物联网利用开发,ThingJS 致力于将门槛降到最低、开发周期缩到最短、开发成本降到起码。将开发难度升高到只须要JavaScript语言根底就能开发三维可视化场景,程序员不须要过于理解模型常识,也能应用ThingJS来简化3D可视化场景的开发。 ...

September 8, 2021 · 1 min · jiezi

关于jquery:分别判断了ab两数的01

高八位不大于的话有可能次八位还是a大,本应该输入1,却输入了0,这是不对的,所以就须要判断高八位是否等于,星池starpool如果等于就持续判断后八位,循环上来。这也就是为什么每八bit须要八个LUT别离分为两组来判断大于、等于。就是为了如果高八位不大于的话,判断是等于,就会去判断后八位。这里就须要用到carry4构造来获取后八位的比拟后果了。 如果最低两位依然相等,那么输入值就由CYINT决定。因为比拟器是if(a>b) 输入1,其余输入0,所以CYINT就是0,星池starpool即两数相等。如果比拟器是if(a>=b) 输入1,其余输入0,则CYINT就被设置为1。这里能够本人跑跑看,就能够比拟出差异。

September 6, 2021 · 1 min · jiezi

关于jquery:如何设置phpstorm同一窗口能打开多个项目目录

最开始用的是sublime,是比拟轻量级的文本编辑器,而且表面很酷。起初是用的netbeans,是反对一个窗口多个我的项目开发治理的,也是一款弱小的IDE。起初换公司用的IDE是phpstorm,挺好用的,然而在应用phpstorm的过程中,发现每个我的项目都要独自的关上一个窗口,如果抉择本窗口关上的话,之前在本窗口关上的我的项目就会被笼罩。这样对于多个有关联我的项目并行开发很不不便。那么,咱们能够在设置外面操作如下: File -> settings -> Project:我的项目名 -> Directories -> Add Content Root————————————————版权申明:本文为CSDN博主「湘道」的原创文章,遵循CC 4.0 BY-SA版权协定,转载请附上原文出处链接及本申明。原文链接:https://blog.csdn.net/LY_Deng...

September 3, 2021 · 1 min · jiezi

关于jquery:jquery面试题の1

问题1:jQuery的美元符号$有什么作用?答复:其实美元符号$只是”jQuery”的别名,它是jQuery的选择器,如下代码: $(document).ready(function(){});当然你也能够用jQuery来代替$,如下代码: jQuery(document).ready(function(){});问题2:body中的onload()函数和jQuery中的document.ready()有什么区别? 答复:onload()和document.ready()的区别有以下两点:1、咱们能够在页面中应用多个document.ready(),但只能应用一次onload()。2、document.ready()函数在页面DOM元素加载完当前就会被调用,而onload()函数则要在所有的关联资源(包含图像、音频)加载结束后才会调用。 这个问题很重要,并且经常被问到。 ready() 函数用于在文档进入ready状态时执行代码。当DOM 齐全加载(例如HTML被齐全解析DOM树构建实现时),jQuery容许你执行代码。应用$(document).ready()的最大益处在于它实用于所有浏览器,jQuery帮你解决了跨浏览器的难题。须要进一步理解的用户能够点击 answer链接查看具体探讨。 问题3:jQuery中的Delegate()函数有什么作用? delegate是另一种绑定事件的形式。它将事件处理函数绑定在指定的根元素上, 因为事件会冒泡1,它用来解决指定的子元素上的事件。 .delegate():Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.它的应用形式比bind稍显简单,但它的性能十分弱小: 主动绑定动静增加的元素。因为事件处理函数绑定在#root上,新加的子元素事件也会冒泡到#root。性能好于.bind()。只绑定一个事件处理函数,绑定速度相当快。 问题4. 如何找到所有 HTML select 标签的选中项?这是面试里比拟辣手的 jQuery 问题之一。这是个根底的问题,然而别冀望每个 jQuery 初学者都晓得它。你能用上面的 jQuery 选择器获取所有具备 multiple=true 的 <select > 标签的选中项: $("name='nameOfSelected' :selected")问题5. $(this) 和 this 关键字在 jQuery 中有何不同? 这对于很多 jQuery 初学者来说是一个辣手的问题,其实是个简略的问题。$(this) 返回一个 jQuery 对象,你能够对它调用多个 jQuery 办法,比方用 text() 获取文本,用val() 获取值等等。而 this 代表以后元素,它是 JavaScript 关键词中的一个,示意上下文中的以后 DOM 元素。你不能对它调用 jQuery 办法,直到它被 $() 函数包裹,例如 $(this)。 ...

August 25, 2021 · 1 min · jiezi

关于jquery:变量和类型的划分方法有哪些

如果你还不能很好的解答下面的问题,那阐明你还没有齐全把握这部分的常识,那么请好好浏览上面的文章吧。星池挖矿服务器本文从底层原理到理论利用具体介绍了JavaScript中的变量和类型相干常识下面所提到的原始类型,在ECMAScript规范中,它们被定义为primitive values,即原始值,代表值自身是不可被扭转的。以字符串为例,咱们在调用操作字符串的办法时,没有任何办法是能够间接扭转字符串的: 调用了几个办法,无一例外,这些办法都在原字符串的根底上产生了一个新字符串,而非间接去扭转str,这就印证了字符串的不可变性。 那么,星池挖矿服务器当咱们持续调用上面的代码:str += '6console.log(str); // ConardLi6你会发现,str的值被扭转了,这不就打脸了字符串的不可变性么?其实不然,咱们从内存上来了解:在JavaScript中,每一个变量在内存中都须要一个空间来存储。 无奈间接操作其外部存储,应用援用地址读取通过代码进行调配空间绝对于下面具备不可变性的原始类型,https://www.starpool.cn 我习惯把对象称为援用类型,援用类型的值理论存储在堆内存中,它在栈中只存储了一个固定长度的地址,这个地址指向堆内存中的值。

August 25, 2021 · 1 min · jiezi

关于jquery:JVM虚拟机的数据时区的案例

Java 程序的过程中会把它所治理的内存划分为若干个不同的数据区域。星池挖矿服务器这些区域 有各自的用处,以及创立和销毁的工夫,有的区域随着虚拟机过程的启动而始终存在,有些区域则是依赖用户线程的启动和完结而建设和销毁。依据《Java虚拟机标准》的规定,Java虚拟机所治理的内存 将会包含以下几个运行时数据区域,如下图所示。 是一块较小的内存空间,它能够看作是以后线程所执行的字节码的行号指示器。它的核心作用就是:用于存储下一条所要执行的 JVM 指令的内存地址。 这里所说的线程公有,星池挖矿服务器即不会呈现并发平安问题,JVM 运行时数据区的 5 个局部中,只有 Java 堆、办法区是线程共享的,其余三个均为线程公有,前面还会提到这个知识点。 对象援用(reference)等。这些数据类型在局部变量表中的存储空间以局部变量槽(Slot)来示意,其中64位长度的 long 和 double 类型的数据会占用两个变量槽,其余的数据类型只占用一个。局部变量表所需的内存空间在编译期间实现调配,当进入一个办法时,https://www.starpool.cn 这个办法须要在栈帧中调配多大的局部变量空间是齐全确定的,在办法运行期间不会扭转局部变量表的大小(这里说的“大小”是指变量槽的数量)。

August 25, 2021 · 1 min · jiezi

关于jquery:快速搭建app架构的流程是怎样的呢

我的项目工夫紧迫:疾速开发框架(无可奈何)目前网络上也有一些针对Android的疾速开发框架,上面介绍3个次要的疾速开发框架。星池云服务器针对这些疾速开发框架,集体认为能够参考,但并不举荐应用,因为App整体依赖一个集体保护的框架危险切实太大,框架存在一些学习老本,自身也不肯定完全符合App的需要,应用后可能存在代码的臃肿,还有就是架构限度。 数据库api简化进步性能, 达到和greenDao统一的性能.图片绑定反对gif(受零碎兼容性影响, 局部gif文件只能动态显示), webp; 反对圆角, 圆形, 方形等裁剪, 反对主动旋转… 能够看出xUtils3对于疾速开发是一个不错的抉择。 集体感觉适宜你的才是最好的,不要去自觉的跟风,大家说mvp好那你就应用咯,星池云服务器没有实际就没有话语权,所以说用哪种架构模式自己不发表任何意见:任何模式的动机都是一样的,那就是如何防止简单凌乱的代码,让执行单元测试变得容易,发明高质量应用程序,开发保护更高效。当然咯,是按性能分的包,我的项目的性能不一样而后分包也不一样,然而根本大同小异。 https://www.starpool.cn 所以确定架构分包的时候那就按你的需要来咯。从下面能够看出:架构分包的时候咱们包含逻辑性能和根底性能(通用性能)。

August 24, 2021 · 1 min · jiezi

关于jquery:String的创建的方法怎么样效果好

创立之后长度内容是不可变的,每次拼接字符串,都会产生新的对象如果是间接“ ” 或者字符串常量拼接产生的,保留在字符串常量池中如果是间接通过new形式创立的,星池云服务器保留在堆中。长处:String类提供了丰盛的对于操作字符串的办法,比方:拼接、获取对应下标处的字符、截取子串等等毛病:在进行字符串拼接+=的时候,效率比拟低。 符串序列,在创立的时候,会有一个长度为16的默认空间当拼接字符串的时候,切实原对象的根底之上进行拼接,如果长度不够就扩容创立一个长度为16的StringBuilder对象StringBuilder sb = new StringBuilder(“abc”);//以指定字符串内容为“abc”的形式创立一个StringBuilder对象。 当应用泛型类或者接口时,星池云服务器传递的数据中,泛型类型不确定,能够通过通配符<?>示意。然而一旦应用泛型的通配符后,只能应用Object类中的共性办法,汇合中元素本身办法无奈应用。阻塞状态(Blocked):处于运状态中的线程因为某种原因,临时放弃对CPU的使用权,进行执行,此时进入阻塞状态,直到其进入就绪状态才有机会被CPU选中再次执行.依据阻塞状态产生的起因不同,https://www.starpool.cn 阻塞状态又能够细分成三种:期待阻塞:运行状态中的线程执行wait()办法,本线程进入到期待阻塞状态

August 23, 2021 · 1 min · jiezi

关于jquery:常见的一些的数据结构的说明有哪些

又称堆栈,它是运算受限的线性表,其限度是仅容许在标的一端进行插入和删除操作,不容许在其余任何地位进行增加、查找、删除等操作。星池云服务器咱们能够简略了解成:栈构造对元素的存取有如下要求:先进后出(也就是说,栈中越早存进去的元素,就越在最上面)先进先出(也就是说,最先存进去的元素,是能够最先取出的)例如:咱们生存中排队买结账,最先到的人最先付款,最初到的人得等后面的人都付款完结后能力付款。 咱们指定一个索引减少元素,不能批改原数组的长度,而是须要创立一个新长度的数组,将指定新元素存储在指定索引地位,再把原数组元素依据索引,复制到新数组对应索引的地位。 咱们能够简略了解成:星池云服务器链表构造对元素的存取有如下要求:多个节点之间,通过地址进行连贯。例如:自行车的链条,就是通过上一个环连贯下一个环,这样就造成一个链条了查找元素慢:想查找某个元素,须要通过连贯的节点,顺次向后查找指定元素。 父类的援用指向子类对象:Parent p=new Child();阐明:向上转型时,子类对象当成父类对象,只能调用父类的性能,如果子类重写了父类中申明过的办法,办法体执行的就是子类重过后的性能。然而https://www.starpool.cn 此时对象是把本人看做是父类类型的,所以其余资源应用的还是父类型的。

August 23, 2021 · 1 min · jiezi

关于jquery:fasdfasdfsa

asdfsadafsdf

August 3, 2021 · 1 min · jiezi

关于jquery:5年前学习-null-和-undefined-现在有了新的认知看看这位人才怎么说

作者:Michael Thiessen译者:前端小智起源:dev有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。 许多编程语言都有一个称为null的非值。它批示一个变量以后不指向一个对象,例如,当它还没有初始化的时候。 相比之下,JavaScript有两个这样的非值:undefined和null。在这篇博文中,咱们将钻研它们有什么不同,以及如何最好地应用或防止它们。 1. undefined vs. null这两种值十分类似,常常调换应用。因而,它们的区别是奥妙的。 1.1 ECMAScript语言标准:undefined vs. nullECMAScript语言标准对其形容如下。 undefined是 "当一个变量没有被赋值时应用"null "示意无意不存在任何对象值"1.2 两个非值--一个无奈打消的谬误在JavaScript中领有两个非值当初被认为是一个设计谬误(甚至被JavaScript的创造者Brendan Eich认为)。 那为什么不从 JavaScript 中删除其中的一个值呢?JavaScript 的一个外围准则是绝不毁坏向后兼容。这个准则有很多益处。它最大的毛病是,设计上的谬误无奈被删除。 1.3 undefined和null的历史在Java中(它启发了JavaScript的许多方面),初始化值取决于变量的动态类型。 具备对象类型的变量被初始化为null。每个原始类型都有本人的初始化值。例如,int变量被初始化为0。在JavaScript中,每个变量都能够包容对象值和根本类型值。因而,如果null意味着 "不是一个对象",那么JavaScript也须要一个初始化值,意味着 "既不是一个对象也不是一个原始值"。这个初始化值就是 undefined。 undefined 的呈现如果一个变量myVar还没有被初始化,它的值是undefined。 let myVar;assert.equal(myVar, undefined);如果一个属性.unknownProp失落,拜访该属性会产生undefined的值。 const obj = {};assert.equal(obj.unknownProp, undefined);如果一个函数有一个没有参数的返回语句,该函数隐含地返回undefined。 function myFunc() { return;}assert.equal(myFunc(), undefined);如果一个参数x被省略了,语言将该参数初始化为undefined。 function myFunc() { return;}assert.equal(myFunc(), undefined);myFunc();通过obj?.someProp的可选链路,如果obj未定义或为空,则返回未定义。 > undefined?.somePropundefined> null?.somePropundefined3.null 呈现状况一个对象的原型要么是一个对象,要么在原型链的末端是null。Object.prototype没有原型。 > Object.getPrototypeOf(Object.prototype)null如果咱们将一个正则表达式(如/a/)与一个字符串(如'x')相匹配,咱们要么失去一个带有匹配数据的对象(如果匹配胜利),要么失去空(如果匹配失败)。 > /a/.exec('x')nullJSON数据格式不反对undefined,只反对null。 > JSON.stringify({a: undefined, b: null})'{"b":null}'4.特地解决 undefined 或 null 的运算符4.1 undefined 和参数默认值在以下状况下,将应用参数默认值。 ...

July 29, 2021 · 3 min · jiezi

关于jquery:使用Docker的好处有哪些

本文带大家理解Docker是什么,Docker和传统虚拟化比照的区别,Docker架构是怎么的,Docker的作用以及应用Docker的益处有哪些? Docker是什么 1.1 什么是 Docker docker是一个开源的软件部署解决方案; docker也是轻量级的利用容器框架; docker能够打包、公布、运行任何的利用。 Docker 最后是 dotCloud 公司创始人 Solomon Hykes 在法国期间发动的一个公司外部我的项目,它是基于 dotCloud 公司多年云服务技术的一次变革,并于 2013 年 3 月以 Apache 2.0 受权协定开源,次要我的项目代码在 GitHub 上进行保护。Docker 我的项目起初还退出了 Linux 基金会,并成立推动 凋谢容器联盟(OCI)。 Docker 自开源后受到宽泛的关注和探讨,至今其 GitHub 我的项目曾经超过 4 万 6 千个星标和一万多个 fork。甚至因为 Docker 我的项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最后是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行反对;Google 也在其 PaaS 产品中广泛应用 Docker。 Docker 应用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS页游www.coubai.com 等技术,对过程进行封装隔离,属于 操作系统层面的虚拟化技术。因为隔离的过程独立于宿主和其它的隔离的过程,因而也称其为容器。最后实现是基于 LXC,从 0.7 版本当前开始去除 LXC,转而应用自行开发的 libcontainer,从 1.11 开始,则进一步演进为应用 runC 和 containerd。 ...

July 19, 2021 · 1 min · jiezi

关于jquery:Query类操作是什么意思

 类操作就是通过操作元素的类名进行元素款式操作,当元素款式比较复杂时,如果通过css()办法实现,须要在CSS里编写很长的代码,既不美观也不不便。而通过写 一个类名,把类名加上或去掉就会显得很不便。上面通过代码演示类的增加、删除和切换。 1. 筹备工作 先筹备一个HTML网页,而后用jQuery代码对网页进行操作。HTML代码如下。 <style> .current { background-color: red; } </style> <div>增加类名</div> <div class="current">删除类名</div> <div class="current">切换类名</div> 上述代码中,第2行定义current类的款式为背景色为红色,第5行和第6行定义了两个类名 为current的div元素。 2. addClass()增加类 addClass()办法向被选元素增加一个或多个类名,根本语法如下所示。 $(selector).addClass(className) 上述代码中,className示意要增加的类名,示例代码如下 <script> $("div").click(function() { $(this).addClass("current"); }); </script> 上述代码执行后,单击页面中的“增加类名”按钮,就会在div元素上增加current类名,背景色批改为红色。 如果增加多个类,应用空格分隔类名,示例游戏代码如下。 $(this).addClass("current current1 …"); removeClass()移除类removeClass()办法从被选元素移除一个或多个类,根本语法如下所示。 $(selector).removeClass(className)上述代码中, className参数能够传入一个或多个类名,应用空格来分隔,如果省略该参数,示意移除所有的类名。上面通过代码演示。 <script>$("div").click(function() {$(this).removeClass("current");});</script>上述代码页游www.cungun.com执行后,单击页面中的“删除类名”按钮,在div元素上的current类名会被移除,背景色隐没。 toggleClass()切换类toggleClass()办法用来为元素增加或移除某个类,如果类不存在,就增加该类,如果类存在,就移除该类。根本语法如下所示。 $(selector).toggleClass(className, switch)上述代码中,className示意增加或移除的一个或多个类名,多个类名用空格分隔;switch参数用来规定只删除类或只增加类,设为true示意增加,设为false示意移除。 上面通过代码演示toggleClass()的应用。 <script> $("div").click(function() { $(this).toggleClass("current"); }); </script> 上述代码执行后,单击页面中的“切换类名”按钮,当div元素上存在current类名时,则被移除,否则就增加。能够实现字体背景色的切换成果。

July 16, 2021 · 1 min · jiezi

关于jquery:该来的还是来了盘点-ES12-中有新特性

作者:KUMAR HARSH译者:前端小智起源:blog有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。 明天次要介绍一下 ECMAScript 2021(ES12)的一部分的 JS 性能。 逻辑赋值操作符数字分隔符(1_000)Promise.any 与 AggregateErrorString.prototype.replaceAllWeakRefs 与 FinalizationRegistry 对象逻辑赋值操作符逻辑赋值操作符将逻辑操作(&&、||或??)与赋值表达式组合在一起。 x ||= y;x || (x = y);x &&= y;x && (x = y);x ??= y;x ?? (x = y);带有&&的逻辑赋值操作符 let x = 1;let y = 2;x &&= y;console.log(x); // 2x &&= y 等价于 x && (x = y)。 或者等价于 if(x) { x = y}因为x是一个真值,所以它被赋值为y,即2。 带有||的逻辑赋值操作符let x = 1;let y = 2;x ||= y;console.log(x); // 1x ||= y 等价于 x || (x = y)。 ...

July 16, 2021 · 3 min · jiezi

关于jquery:springboot-ehcache-配置使用方法

pom 引入依赖 <!-- Ehcache --><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId></dependency>2.resources 目录下间接放个文件 ehcache.xml <ehcache xmlns:xsi=" xsi:noNamespaceSchemaLocation=" updateCheck="false"><diskStore path="java.io.tmpdir"/><!--defaultCache:echcache的默认缓存策略 --> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" maxElementsOnDisk="10000000" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"> <persistence strategy="localTempSwap"/></defaultCache> <!-- 菜单缓存策略 --><cache name="menucache" maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" maxElementsOnDisk="10000000" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"> <persistence strategy="localTempSwap"/></cache></ehcache>3.在Service层 办法上加上注解 @CacheEvict(value="menucache", allEntries=true) ,更新页游缓存 @Cacheable(key="'menu-'+#parentId",value="menucache") 读取缓存, "'menu-'+#parentId" 通配符,也能够间接写死字符串 menucache 对应 下面 xml name="menucache" /**删除菜单 @param MENU_ID@fhadmin.org */@CacheEvict(value="menucwww.pizei.comache", allEntries=true)public void deleteMenuById(String MENU_ID) throws Exception{this.cleanRedis();menuMapper.deleteMenuById(MENU_ID);}/** 通过ID获取其子一级菜单@param parentId@return@fhadmin.org */@Cacheable(key="'menu-'+#parentId",value="menucache")public List<Menu> listSubMenuByParentId(String parentId) throws Exception {return menuMapper.listSubMenuByParentId(parentId);}

June 25, 2021 · 1 min · jiezi

关于jquery:盘点用jQuery框架实现for循环的四种方式

摘要:分享在jQuery高级开发中对元素标签体的遍历罕用的几种办法。本文分享自华为云社区《盘点用jQuery框架实现“for循环”的四种形式!》,原文作者:灰小猿 。 明天持续来和大家分享在jQuery高级开发中对元素标签体的遍历罕用的几种办法。 咱们以一个案例的模式进行解说,如果咱们须要遍历的是如下ul标签中的li标签: <body><ul id="city"> <li>北京</li> <li>上海</li> <li>天津</li> <li>重庆</li></ul></body> 一、JS的遍历形式首先第一种:利用js对象进行遍历。 利用js对象的办法进行遍历和咱们平时的for循环遍历是一样的思路和解法,首先咱们应该获取到须要遍历的元素标签,而后应用for循环办法对其中存在的标签进行遍历:上面以一个实例来进行解说。 遍历四个li标签,并且弹出其中的内容,如果标签体内容是“上海”,则不弹出! $(function (message) { // 获取到UI下的所有Li标签 var citys = $("#city li") // 利用js中的for循环进行遍历 // 将获取到的li标签数组进行遍历 for (var i = 0; i < citys.length; i++) { // 循环内容判断 if ("上海" == citys[i].innerHTML){ // break; continue; } // 输入获取到的li标签中的内容 alert(i + citys[i].innerHTML); } });二、JQuery的遍历形式1. jQuery对象.each(callback)应用该办法时须要在each()中实现function()办法,在function()办法中能够进行赋参数,也能够不赋参数, 首先咱们来看不必赋予参数的一种,这种办法只能用于获取元素,而不能显示以后是第几个元素。如下: $(function (message) { // 获取到UI下的所有Li标签 var citys = $("#city li") // 利用jQuery对象的each进行遍历 // 利用this进行遍历 citys.each(function () { // alert(this.innerHTML); alert($(this).html()); }); });其中的this示意:汇合中的每一个元素对象 ...

June 17, 2021 · 2 min · jiezi

关于jquery:CAB402-Programming

CAB402 Programming ParadigmsAssignment 1Due: 18th April 2019Worth: 30%The purpose of this assignment is to develop your functional programming skills by developing a non-trivial application using F#.The principal focus will be on learning to program in a “pure” functional style – i.e. without making use of any mutable state. Inorder to contrast this pure functional style of programming with the more traditional imperative (impure) and object-orientedparadigms, you will develop three separate implementations of the same software component: ...

June 15, 2021 · 21 min · jiezi

关于jquery:教你三种jQuery框架实现元素显示及隐藏动画方式

摘要:在jQuery框架中对元素对象进行显示和暗藏有三种形式,别离是“默认形式显示和暗藏”、“滑动形式显示和暗藏”、“淡入淡出显示和暗藏”。本文分享自华为云社区《jQuery框架实现元素显示及暗藏动画【附案例剖析】》,原文作者:灰小猿。 首先来看一个简略的动画效果图: 我之前也和小伙伴们讲过应用jQuery框架能够很好的对html中元素的属性等进行操作,所以下面显示和暗藏的也只是一个div,而并不是一个图片。上面我就来和小伙伴们讲一个如何对元素的属性进行操作,使其显示或者暗藏! 在jQuery框架中对元素对象进行显示和暗藏有三种形式,别离是“默认形式显示和暗藏”、“滑动形式显示和暗藏”、“淡入淡出显示和暗藏”。接下来咱们就别离对这三种办法进行介绍。 一、默认形式显示和暗藏在默认办法下显示元素的办法是 show([speed,[easing],[fn]])其中的参数含意为: speed:动画的速度。三个预约义的值("slow","normal", "fast")或示意动画时长的毫秒数值(如:1000)easing:用来指定切换成果,默认是"swing",可用参数"linear"。 swing:动画执行时成果是 先慢,两头快,最初又慢。 linear:动画执行时速度是匀速的fn:在动画实现时执行的函数,每个元素执行一次。同时在这里揭示一点就是,以上的三个参数是可有可无的,如果不对其进行设置,那么将以默认值执行。 如下实例代码: // 显示div $("#showDiv").show("slow","swing"); linear 匀速在默认形式下实现元素暗藏的办法是 hide([speed,[easing],[fn]])其中的参数含意和show办法中的一样。同样也是三个参数是可有可无的,如果不对其进行设置,那么将以默认值执行。在这里咱们减少一个最初的执行函数,让其弹出一个窗口“暗藏了...”。 如下实例代码: // 暗藏div$("#showDiv").hide("slow","swing",function () { alert("暗藏了...")});那么难道咱们每次都要定义一个办法用于元素显示,再定义一个办法用于元素暗藏吗?并不是的,jQuery中也充沛的思考到了这一点,所以在有一个既能实现显示又能实现暗藏的办法 toggle([speed],[easing],[fn])当调用该办法的时候,元素就会被暗藏掉,相似于hide()办法,当再次调用时,元素又会被显示进去,相似于show()办法。其中的参数含意和下面一样 实例代码如下: // 能显示能暗藏 $("#showDiv").toggle("slow","linear");默认形式下实现成果如图: 二、滑动形式显示和暗藏从名字上咱们应该也能辨别出,滑动形式和默认形式的不同之处其实就是显示和暗藏时的动画不一样罢了,上面咱们就来介绍一下在滑动形式下进行元素的显示、暗藏、既显示又暗藏, 滑动形式下显示 slideDown([speed],[easing],[fn])实例代码: // 滑动显示div$("#showDiv").slideDown("slow");滑动形式下暗藏 slideUp([speed,[easing],[fn]])实例代码: // 滑动暗藏div$("#showDiv").slideUp("fetch");滑动形式下既显示又暗藏: slideToggle([speed],[easing],[fn])实例代码: // 滑动能显示能暗藏$("#showDiv").slideToggle("slow");滑动形式下实现成果如图: 三、淡入淡出形式显示和暗藏淡入淡出形式下进行元素的显示和暗藏其实和下面两种办法一样的,不同的也只是显示的成果不一样罢了, 淡入淡出形式下显示应用的办法是: fadeIn([speed],[easing],[fn])实现代码: // 淡出显示div$("#showDiv").fadeIn("slow")淡入淡出形式下实现暗藏 fadeOut([speed],[easing],[fn])实现代码: // 淡出暗藏div$("#showDiv").fadeOut("fetch");淡入淡出形式下既显示又暗藏 fadeToggle([speed,[easing],[fn]])实现代码: // 淡入淡出显示和暗藏div$("#showDiv").fadeToggle("fetch")淡入淡出形式下运行的成果如下: 以上就是利用jQuery框架对元素进行显示和暗藏的办法,上面是下面实例的残缺实现代码: <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>默认形式显示和暗藏动画</title> <script type="text/javascript" src="../js/jquery-3.3.1.min.js"></script> <script> function hideFn() { // 暗藏div /*$("#showDiv").hide("slow","swing",function () { alert("暗藏了...") });*/ // 滑动暗藏div $("#showDiv").slideUp("fetch"); // 淡出暗藏div // $("#showDiv").fadeOut("fetch"); } function showFn() { // 显示div // $("#showDiv").show("slow","swing"); // linear 匀速 // 滑动显示div // $("#showDiv").slideDown("slow"); // 淡出显示div $("#showDiv").fadeIn("slow") } function toggleFn() { // 能显示能暗藏 // $("#showDiv").toggle("slow","linear"); // 滑动能显示能暗藏 // $("#showDiv").slideToggle("slow"); // 淡入淡出显示和暗藏div $("#showDiv").fadeToggle("fetch") } </script> </head><body><input type="button" value="点击按钮暗藏div" onclick="hideFn()"><input type="button" value="点击按钮显示div" onclick="showFn()"><input type="button" value="点击按钮切换div显示和暗藏" onclick="toggleFn()"><div id="showDiv" style="width:300px;height:300px;background:pink"> div显示和暗藏</div></body></html>四、案例:广告的主动显示和暗藏既然当初咱们曾经晓得了jQuery框架下是如何进行元素的显示和暗藏的,那么就应该将其利用到理论的案例中去,上面通过实现广告的主动显示和暗藏的案例,来对该技术进一步增强实际。 ...

June 10, 2021 · 1 min · jiezi

关于jquery:pc端实现一个简单的抽拉式的动态效果

先上效果图:ps:为啥要专门上个图呢,次要是不想变成本人厌恶的人。开始正经解说一下思路:次要是用到了,鼠标的挪动,鼠标按下和抬起的动作。遇到的难点,鼠标抬起的动作触发不了,其实是浏览器错把鼠标抬起的动作辨认成了复制,有没有发现你up的时候内容区域字变成选中的状态,只需一行css代码:user-select: none;就能够了。上代码,用的jquery大家本人装置完之后间接copy: draggable (model) { // model你所要触发操作的页面元素 var location1 var location2 console.log('初始值 ', location1, location2) $(model).mousedown(function (e) { location1 = e.clientY console.log('mousedown', location1) $(model).css({ cursor: 'move' }) }).mouseup(function (e) { location2 = e.clientY console.log('元素内mouseup', location2) if (location1 - location2 > 5) { $(model).css({height: '306px', cursor: 'auto'}) } else { $(model).css({height: '46px', cursor: 'auto'}) } }) $(document).mouseup(function (e) { if (location1 - location2 > 5) { $(model).css({height: '306px', cursor: 'auto'}) } else { $(model).css({height: '46px', cursor: 'auto'}) } console.log('整个页面mouseup', e.clientY) }) }心愿能帮到你,做个高兴的cv工程师 ...

May 30, 2021 · 1 min · jiezi

关于jquery:学会-Math-对象这-10-个方法能让你事半功倍

作者:Mehdi Aoussiad译者:前端小智起源:medium有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。 简介JavaScript中的math 对让咱们可能对执行一些数学操作。 它具备数学常数和函数的属性和办法。 在明天的文章中将介绍 Math对象的一些有用办法。 1. Math.min()Math.min()是 JS 数学库中的函数,用于将所有传递的值中的最小值返回给该办法。 Math.min(0, 150, 30, 20, -8, -200) // -2002. Math.max()Math.max()办法可返回两个指定的数中带有较大的值的那个数。 Math.max(0, 150, 30, 20, -8, -200) // 1503. Math.round()Math.round() 函数返回一个数字四舍五入后最靠近的整数。 Math.round(4.7) // 5Math.round(4.4) // 44. Math.sqrt()Math.sqrt() 函数返回一个数的平方根,即: Math.sqrt(64) // 8Math.sqrt(25) // 55. Math.pow()Math.pow() 函数返回基数(base)的指数(exponent)次幂,即: Math.pow(8, 2) // 646. Math.floor()Math.floor() 返回小于或等于一个给定数字的最大整数。 Math.floor(4.7) // 4Math.floor(8.6) // 87. Math.random()Math.random() 函数返回一个浮点, 伪随机数在范畴从0到小于1,也就是说,从0(包含0)往上,然而不包含1(排除1),而后你能够缩放到所需的范畴。实现将初始种子抉择到随机数生成算法;它不能被用户抉择或重置。 Math.random() // 0.154979076452598678. Math.cos()Math.cos() 函数返回一个数值的余弦值。 ...

May 27, 2021 · 1 min · jiezi

关于jquery:超详细的jQuery的-DOM操作一篇就足够

摘要:明天来和大家分享无关jQuery框架中DOM操作的相干技术,又是一个堪称DOM“全家桶”系列的解说,倡议珍藏关注认真学习!本文分享自华为云社区《【JQuery框架】超具体DOM操作看这一篇就够了!》,原文作者:灰小猿 。 明天来和大家分享无关jQuery框架中DOM操作的相干技术,又是一个堪称DOM“全家桶”系列的解说,倡议珍藏关注认真学习! 一、内容操作在进行内容操作时,对于设置和获取元素的内容应用同一个函数进行操作,设置元素内容时间接在函数中传入参数即可。 1. html()作用:获取/设置元素的标签体内容 // 获取mydiv的标签体内容var divValue = $("#mydiv").html()// 设置mydiv的标签体内容var divValue = $("#mydiv").html(“你好”)2. text()作用:获取/设置元素的标签体纯文本内容 // 获取mydiv文本内容var divText = $("#mydiv").text()// 设置mydiv文本内容var divText = $("#mydiv").text(“你好”)3. val()作用:获取/设置元素的value属性值 // 获取myinput 的value值var value = $("#myinput").val()// 设置myinput 的value值var value = $("#myinput").val(“你好”)对于上述代码的理论演示如下: <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script src="../js/jquery-3.3.1.min.js"></script> <script> $(function (){ // 获取myinput 的value值 var value = $("#myinput").val() // alert(value); // 获取mydiv的标签体内容 var divValue = $("#mydiv").html() alert(divValue); // 获取mydiv文本内容 var divText = $("#mydiv").text() // alert(divText) }); </script> </head> <body> <input id="myinput" type="text" name="username" value="张三" /><br /> <div id="mydiv"><p><a href="#">题目标签</a></p></div> </body></html>二、属性操作(1)通用属性操作1. attr():作用:获取/设置元素的属性 ...

May 25, 2021 · 1 min · jiezi

关于jquery:树形数据结构和扁平数据相互转换

树形数据结构:树形数据结构是一类重要的非线性数据结构。树形数据结构能够示意数据表素之间一对多的关系。其中以树与二叉树最为罕用,直观看来,树是以分支关系定义的层次结构。树形数据结构在主观世界中宽泛存在,如人类社会的族谱和各种社会组织机构都可用树形数据结构来形象示意。扁平数据结构: 如下所示一、扁平转树形var data=[{pid:0,id:'a',value:'陕西'}, {pid:'a',id:01,value:'西安'}, {pid:01,id:301,value:'雁塔区'}, {pid:01,id:302,value:'高新区'}, {pid:'a',id:02,value:'渭南'}, {pid:'a',id:03,value:'咸阳'},{pid:0,id:'b',value:'广东'}, {pid:'b',id:11,value:'广州'}, {pid:'b',id:12,value:'深圳'}, {pid:'b',id:13,value:'潮汕'},{pid:0,id:'c',value:'湖南'}, {pid:'c',id:21,value:'长沙'}, {pid:'c',id:22,value:'常德'}, {pid:'c',id:23,value:'岳阳'},];function toTree(data){ let cloneData = JSON.parse(JSON.stringify(data)) // 对源数据深度克隆 let tree = cloneData.filter((father)=>{ //循环所有项 let branchArr = cloneData.filter((child)=>{ return father.id == child.pid;//返回每一项的子级数组 }); if(branchArr.length>0){ father.children = branchArr; //如果存在子级,则给父级增加一个children属性,并赋值 } return father.pid==0;//返回第一层 }); return tree; //返回树形数据}var tree=toTree(data);console.log(tree);//递归办法:function toTree(data) { // 删除 所有 children,以避免屡次调用 data.forEach(function (item) { delete item.children; }); // 将数据存储为 以 id 为 KEY 的 map 索引数据列 var map = {}; data.forEach(function (item) { map[item.id] = item; }); var val = []; data.forEach(function (item) { // 以以后遍历项,的pid,去map对象中找到索引的id var parent = map[item.pid]; // 好绕啊,如果找到索引,那么阐明此项不在顶级当中,那么须要把此项增加到,他对应的父级中 if (parent) { (parent.children || ( parent.children = [] )).push(item); } else { //如果没有在map中找到对应的索引ID,那么间接把 以后的item增加到 val后果集中,作为顶级 val.push(item); } }); return val;} console.log(toTree(data))二、树形转扁平var data=[ {id: "a",pid: 0,value: "陕西",children:[ {id: 01,pid: "a",value: "西安"}, {id: 02,pid: "a",value: "渭南"}, {id: 03,pid: "a",value: "咸阳"}, ]}, {id: "b",pid: 0,value: "广东",children:[ {id: 11,pid: "b",value: "广州"}, {id: 12,pid: "b",value: "深圳"}, {id: 13,pid: "b",value: "潮汕"}, ]}, {id: "c",pid: 0,value: "湖南",children:[ {id: 21,pid: "c",value: "长沙"}, {id: 22,pid: "c",value: "常德"}, {id: 23,pid: "c",value: "岳阳"}, ]}, ];function toLine(data){ return data.reduce((arr, {id, value, pid, children = []}) => arr.concat([{id, value, pid}], toLine(children)), []) return result;}var listarr=toLine(data);console.log(listarr);

May 19, 2021 · 1 min · jiezi

关于jquery:前端面试每日-31-第759天

明天的知识点 (2021.05.14) —— 第759天 (我也要出题)[html] 如果一个页面的html代码量很大你该怎么办?[css] 你有应用过flood-color属性吗?说说它的用处[js] js如何动静设置对象的key?[软技能] 你会配置nginx吗?《论语》,曾子曰:“吾日三省吾身”(我每天屡次检查本人)。前端面试每日3+1题,以面试题来驱动学习,每天提高一点!让致力成为一种习惯,让奋斗成为一种享受!置信 保持 的力量!!! 欢送在 Issues 和敌人们一起探讨学习! 我的项目地址:前端面试每日3+1【举荐】欢送跟 jsliang 一起折腾前端,零碎整顿前端常识,目前正在折腾 LeetCode,打算买通算法与数据结构的任督二脉。GitHub 地址 微信公众号欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个Star, 同时欢送微信扫码关注 前端剑解 公众号,并退出 “前端学习每日3+1” 微信群互相交换(点击公众号的菜单:交换)。 学习不打烊,充电加油只为遇到更好的本人,365天无节假日,每天早上5点纯手工公布面试题(死磕本人,愉悦大家)。心愿大家在这虚夸的前端圈里,放弃沉着,保持每天花20分钟来学习与思考。在这变幻无穷,类库层出不穷的前端,倡议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢送大家到Issues交换,激励PR,感激Star,大家有啥好的倡议能够加我微信一起交换探讨! 心愿大家每日去学习与思考,这才达到来这里的目标!!!(不要为了谁而来,要为本人而来!)交换探讨欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个[Star]

May 15, 2021 · 1 min · jiezi

关于jquery:jQuery基础学习记录一

day01 - jQuery学习指标: 可能说出什么是 jQuery 可能说出 jQuery 的长处可能简略应用 jQuery可能说出 DOM 对象和 jQuery 对象的区别可能写出罕用的 jQuery 选择器 可能操作 jQuery 款式可能写出罕用的 jQuery 动画 1.1. jQuery 介绍1.1.1 JavaScript 库 JavaScript库:即 library,是一个封装好的特定的汇合(办法和函数)。从封装一大堆函数的角度了解库,就是在这个库中,封装了很多事后定义好的函数在外面,比方动画animate、hide、show,比方获取元素等。 简略了解: 就是一个JS 文件,外面对咱们原生js代码进行了封装,寄存到外面。这样咱们能够疾速高效的应用这些封装好的性能了。 比方 jQuery,就是为了疾速不便的操作DOM,外面根本都是函数(办法)。 常见的JavaScript 库:jQuery、Prototype、YUI、Dojo、Ext JS、挪动端的zepto等,这些库都是对原生 JavaScript 的封装,外部都是用 JavaScript 实现的,咱们次要学习的是 jQuery。 1.1.2 jQuery的概念 jQuery总体详情如下 : jQuery 是一个疾速、简洁的 JavaScript 库,其设计的主旨是“write Less,Do More”,即提倡写更少的代码,做更多的事件。j 就是 JavaScript; Query 查问; 意思就是查问js,把js中的DOM操作做了封装,咱们能够疾速的查问应用外面的性能。jQuery 封装了 JavaScript 罕用的性能代码,优化了 DOM 操作、事件处理、动画设计和 Ajax 交互。学习jQuery实质: 就是学习调用这些函数(办法)。jQuery 呈现的目标是放慢前端人员的开发速度,咱们能够十分不便的调用和应用它,从而进步开发效率。 1.1.3 jQuery的长处轻量级。外围文件才几十kb,不会影响页面加载速度。跨浏览器兼容,根本兼容了当初支流的浏览器。链式编程、隐式迭代。对事件、款式、动画反对,大大简化了DOM操作。反对插件扩大开发。有着丰盛的第三方的插件,例如:树形菜单、日期控件、轮播图等。收费、开源。1.2. jQuery 的根本应用1.2.1 jQuery 的下载 jQuery的官网地址: https://jquery.com/,官网即可... ...

April 13, 2021 · 4 min · jiezi

关于github:号称不用写JS代码的前端框架你愿意尝试吗

 大家好,我是为宽广程序员兄弟操碎了心的小编,每天举荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节俭开发效率,实现不加班不熬夜不掉头发,是我的指标! 家喻户晓,jQuery EasyUI是比拟风行的前端框架,实用于企业信息系统或网站后盾治理,随着IE所占市场份额越来越小,EasyUI的兼容性也越来越强,但在开发过程中,对于EasyUI略微简单的组件性能,大多须要通过手写JS代码实现,因而减少了开发难度,升高了开发效率。 明天小编举荐一款前端框架,是基于新版jQuery EasyUI构建,该框架纯HTML调用性能组件,不必写JS代码,能够专一你的后端业务开发! 开源协定 应用 Apache-2.0 开源许可协定 链接地址 个性纯HTML调用组件:通过对EasyUI性能组件的深度封装及扩大开发,能够应用纯HTML调用性能组件,致力于打造不必写JS代码的EasyUI,既有EasyUI的弱小性能,又有定制的好看界面。扩大罕用的组件:整合功能强大的第三方罕用组件,如富文本编辑器ueditor、图表组件echarts、上传组件webuploader,还有自主研发的主动实现、数据过滤、组合查问、数据导入、导出等。完满兼容第三方UI:采纳iframe布局,能够完满兼容第三方UI框架,如bootstrap、layui等,不会呈现因款式抵触而导致页面元素错位等问题。同时引入了Font Awesome字体图标替换EasyUI的原生图标。规范Json接口数据:所有数据均采纳规范的json数据,通过API的形式调用数据,一套后盾,可同时满足前端调用,挪动端APP数据调用及第三方零碎调用,真正实现一源多端的数据提供模式。技术选型整合组件 EasyUI v1.8.6jQuery v1.12.4Bootstrap v3.3.5Font Awesome 4.7.0Echarts v3.5.3Ueditor v1.4.3.3WebUploader v0.1.5拓展组件 图形报表富文本编辑器附件上传奴才表关联提交表格数据可编辑表格查找带回主动实现多级联动动静联动多项抉择按钮启动弹窗内页关上Tab页通用过滤及查问通用导入导出其它组件性能截图演示 根底表单 图形报表 Tree组件 开关按钮 按钮 宰割按钮 分页 进度条 树形下拉框 标签框 选项卡 结尾 本期就分享到这里,我是小编南风吹,专一分享好玩乏味、离奇、实用的开源我的项目及开发者工具、学习资源!心愿能与大家独特学习交换,欢送关注我的公众号【Github导航站】。

April 3, 2021 · 1 min · jiezi

关于前端:阿里云助力江苏省财政厅力推统一公共支付平台

简介: 为深入“放管服”改革,贯彻“互联网+政务服务”要求,江苏省财政厅放慢推动江苏省对立公共领取平台建设,实现全省政府非税支出、政务服务在线收缴和财政电子票据的集中统一解决,不仅节约了因“反复建设”产生的财政支出,更极大晋升了窗口服务效率和老百姓的幸福感。老百姓在缴纳教育费用、医疗费用、交通罚款等费用时都能够应用电子领取,并可开具财政电子票据。 为深入“放管服”改革,贯彻“互联网+政务服务”要求,江苏省财政厅放慢推动江苏省对立公共领取平台建设,实现全省政府非税支出、政务服务在线收缴和财政电子票据的集中统一解决,不仅节约了因“反复建设”产生的财政支出,更极大晋升了窗口服务效率和老百姓的幸福感。老百姓在缴纳教育费用、医疗费用、交通罚款等费用时都能够应用电子领取,并可开具财政电子票据。 电子领取和电子票据的利用极大中央便了缴款人。以水运船舶过闸缴费为例——过来船只达到船闸当前,“船老大”须要下船上岸,到服务窗口通过缴费卡或者现金缴费,再回到船上期待放闸。业务高峰期,一艘船要等2个小时能力过闸。现在,船舶缴费像停车场缴费一样,“船老大”通过APP或小程序即可实现。缴费胜利后,电子票据即刻获取,全程办理最快只需6秒钟。 据江苏省财政厅信息管理核心主任张骏介绍,对立公共领取平台次要蕴含电子领取和电子票据两大外围子系统,其中电子领取曾经接入19个省级部门专用免费零碎以及97个市县(区)财政非税征管零碎;解决在线领取业务达8000万笔/年。 电子票据曾经接入包含江苏省人民医院、南京医科大学第二从属医院等142家三级医院,45家区县全民衰弱信息平台;苏州大学、扬州大学、南京工业大学等60家省属高校;江苏省交警总队、省港航事业倒退核心、省公安居民身份证制证核心、省公安厅出入境、省财政厅等19个省级部门统建专用免费零碎;33个市县(区)财政非税征管零碎。 目前,江苏省对立公共领取平台为医疗机构、各类学校、政府部门等数万家用票单位提供便捷高效的电子缴款和电子票据服务,业务解决性能最高超过3000笔/秒,预计年业务量达10亿笔。 因为平台撑持了全省政务缴款和财政票据,运算量微小且需实时查问、解决信息,所以对系统的稳定性和安全性要求极高。张骏主任示意,通过对多家云厂商的产品调研和比对,采纳了阿里云“专有云”和“分布式数据库”为撑持构建江苏省对立公共领取平台,实现了全省政务缴款和财政电子票据的集中统一解决。 据理解,阿里云专有云通过了“双11”等大规模商业实际验证,具备分布式数据库、大数据处理等云原生产品和技术,可能更好统计业务数据,实现数据驱动业务决策、业务推动数据精细化的双螺旋倒退。 作者:混合云君原文链接本文为阿里云原创内容,未经容许不得转载

March 16, 2021 · 1 min · jiezi

关于vue.js:三只松鼠阿里云数据中台基座上的多渠道多业态生长

简介: 刚刚过来的2020年,对三只松鼠来说更像是一座认知分水岭,三只松鼠CEO章燎原坦言“要遗记流量时代,并习惯放缓增长”,而随后的重要一步,就是以乘风破浪的姿势进入数据中台建设新赛道。刚刚过来的2020年,对三只松鼠来说过得并不算安稳。 甚嚣尘上的谰言和猜想,一直缠绕着这个中国休闲零食领头品牌:2020年9月,三只松鼠CEO章燎原在一次公开演讲中示意三只松鼠要遗记流量时代,并习惯放缓增长;同年10月,三只松鼠传出将砍掉近300个SKU,这也是三只松鼠创建八年以来首次将SKU缩减一半;而在随后的天猫双11,三只松鼠第一次未向外界颁布销售数据…… 每一个动作都被有限解读与放大,裹挟着三只松鼠在舆论中前行。 步入2021年,外界声音仍旧,三只松鼠并未多做回应,只是陆续颁布出3组数据——1月27日,三只松鼠全渠道年货节销售额达22亿元;1月30日,三只松鼠线下门店数量冲破1000家;2月17日,松鼠小镇春节期间累计接待家庭数超过6万组。 既是对过来一年画上了句号,也是对新一年开启了冒号。 流淌在三只松鼠血液里的“疯”劲2009年,还没有成为“松鼠老爹”的章燎原,从安徽小城宁国登程返回杭州加入阿里巴巴十周年庆典。 章燎原在起初重复跟人提及,是那次契机让本人“看到了一束光,点燃了另一种激情”,并觉察到,“电子商务是一个机会”。 2012年,章燎原毅然辞去过后年薪28万的工作,在芜湖的一间民房内开始守业。 回顾刚守业时的心情,章燎原用在“冷水和热水间切换”作为比喻,“一下子很兴奋,一下子又会觉得很有危机感”——这与章燎原的天生性情不无关系,峰瑞资本开创合伙人李丰曾这样评估章燎原:在决定做一件事件以前,他会一直去试错和摸索,而当他一旦认准某一件事时,便有了排除所有烦扰的能力。 章燎原也认同李丰对本人的评估,在他看来,本人是一个信念驱动型的人,一旦找到致力的方向,便会义无反顾,也因而得名“章三疯”。 章燎原的“疯”杂糅在对休闲零食市场的野心里——三只松鼠的初创团队只有5集体,启动资金除开章燎原前几十年的积攒外大多依附亲戚外借,一度账户上的余额仅剩8000元。 2012年天猫双11首秀,三只松鼠就拿下766万元的单日销售额,跃居坚果行业全网第一,随后更是间断八年霸占天猫双11“零食特产类”商品销售额第一宝座;近两年,三只松鼠履行多渠道倒退策略,发力线下,实现全国1000家松鼠联盟小店的布局…… 同时,章燎原的“疯”又交融在对市场的敏锐感知中。 依据三只松鼠的公开财报显示,2016年至2019年,三只松鼠实现营业支出别离为44.23亿元、55.54亿元、70.01亿元、101.73亿元,营业支出呈直线式增长;与此同时,其扣非净利润别离为2.47亿元、2.78亿元、2.56亿元、2.05亿元,自2017年开始出现间断下滑之势。 如何寻找新的市场机会,并实现三只松鼠的再度飞跃,成为章燎原首先要思考的问题。 也正因如此,三只松鼠在近些年开启了系列扭转。 首先,在多渠道倒退上,三只松鼠放慢线下门店布局,作为2020年三只松鼠最重要的策略之一,300多天的工夫里新开线下门店642家,这个数字是2019年新开门店数的2.5倍。 其次,在拓展新品牌占据新市场上,去年4月三只松鼠新增包含小鹿蓝蓝、养了个毛孩、铁功基、喜小雀在内的四个子品牌。其中,除铁功基仍为休闲食品企业外,其余3个子品牌还蕴含婴童食品、婴幼儿配方乳粉销售、母婴服务以及宠物用品、宠物食品、工艺礼品、床上用品等新畛域。 最初,去年11月,坐落于安徽省芜湖市城南十里江湾公园南端的松鼠小镇正式停业,定位于“主题乐园+shopping mall”式的娱乐休闲综合体,周末及节假日淡季客流可达1.6万人次以上,在刚完结的春节假期累计接待家庭数更是超过6万组。 而在这些扭转背地,三只松鼠更是踊跃牵手阿里云打造数据中台,为包含数据融通、全域营销、新品翻新、新店选址等多个业务场景翻新做足筹备。 尝鲜阿里云数据中台 新客ROI晋升40%往年伊始的年货节期间,三只松鼠在经验长达7个月的“自播式直播”线上销售新模式摸索之后厚积薄发,一举拿下全渠道22亿元的销售额,稳坐休闲零食市场年货节全渠道销售额第一宝座。 三只松鼠数字营销中心负责人鼠列侬走漏,尽管“自播式直播”在三只松鼠外部还是一个不到一年的新业务,但如果放眼至整个直播营销畛域来看,“三只松鼠却是一个有着四年教训的老行家了”。 早在2017年,三只松鼠就将直播认为是品牌声量的重要补充,单干了刚起步期间的薇娅,尝试直播带货;并于2018年初步布局淘宝直播,将直播作为销售渠道的补充,且在当年天猫双11充沛感触到了达人直播疾速引爆带货的能力;2019年三只松鼠踊跃布局短视频平台,而到随后的2020年,三只松鼠已将直播作为策略级我的项目,成立品牌数字化营销中心,搭建直播业务的全链路体系,重仓自直播,发展自直播链路的钻研和摸索。 鼠列侬给出的数据显示,仅在2020年,三只松鼠在淘宝直播共发展了1600场店播,累计销售超9000万元;而到下半年,又开拓短视频平台自播业务,实现自播109场,销售额约为879万元。 而当大多数人还只盯着直播业务明面上的销售额数据时,三只松鼠其实曾经着手下一步棋局——通过阿里云数据中台外围产品之一的Quick Audience,三只松鼠可能更为充沛地在直播场景中洞察市场需求,“什么样的产品可能更好地在这个工夫点销售”“什么样的营销模式更能被市场承受”诸如此类问题,过来都是被动地承受信息,当初却能通过积淀数据被动开掘。 在三只松鼠数据中台负责人鼠子麦看来,新业务必定会为企业带来新的数据资产,而新的数据资产,理当为企业带来新的价值。 以直播业务为例,过来,不同平台的直播数据各自积淀在不同平台零碎之中,同时达人带货、店铺自播又各有不同数据衡量标准,不足全面高效买通的技术。 鼠子麦介绍,三只松鼠通过自研供应链零碎曾经可能实现多零碎数据的买通,比方围绕某一商品,通过自研松鼠云造零碎能够看到该单品从研发入仓、线上线下各渠道的销售、消费者购买后订单的在途追踪(快递是不是延期等)、消费者购买后的评估反馈等全链路数据;他补充道,“数据中台可能对消费市场有更为精准地剖析和后果出现,使咱们可能更好地前置对商品的系列动作,比方广告投放选品以及智能营销等。” 2020年天猫双11期间,三只松鼠使用阿里云数据中台进行全域营销,新客ROI失去40%以上的晋升: Step1:通过Quick Audience回流短视频平台营销曝光数据; Step2:使用Quick Audience将营销曝光数据与品牌自有数据资产穿插剖析,辨认其中新增消费市场; Step3:使用数据工厂建模优选新增消费市场中的中、高质量局部; Step4:在淘系平台进行钻展营销投放。 鼠子麦走漏,全域营销只是三只松鼠尝鲜数据中台我的项目的开始,“下一步咱们将联结阿里云数据中台打造更加全面全域化数字营销平台,同时争取赋能到供应链其余版块” 与全域营销逻辑相似,三只松鼠正在通过阿里云数据中台洞察更为粗疏的市场需求,以不同细分市场需求为原点,倒推新商品的研发和上市,同时又在此过程中通过市场偏好数据模型计算同步制订对应营销策略,真正践行“市场须要什么,企业生产什么,并抉择最为适合的渠道去触达”这一闭环。 此外,三只松鼠前期发力也将牵手阿里云数据中台,充沛整合多维度数据资源,构建统一标准,将积淀的数据资产通过数据中台赋能到火线业务部门;同时,持续摸索数据中台在辅助业务数据分析、外部算法能力降级、智能预测等畛域的使用。 截至目前,三只松鼠使用数据中台近4个月,曾经充沛感触到数据资产的再使用及所蕴含的价值,“很多企业仍旧在张望数据中台,但其实只有明确本人遇到的问题是什么,以及分明想要获得怎么的成果,那么剩下的就能够交由阿里云数据中台去实现,”鼠子麦说道,“因为阿里云数据中台有丰盛的产品及针对性解决方案,简直能够实用于大多数企业现阶段数字化转型的多样场景。” 踏入2021年的三只松鼠,不论外界风雨几何,仍旧心怀“疯”劲,站立在阿里云数据中台新基建上,背阴拥抱着多渠道、多业态的数智化转变。 作者:数据中台君原文链接本文为阿里云原创内容,未经容许不得转载

March 15, 2021 · 1 min · jiezi

关于jquery:Java单元测试技巧之PowerMock

简介: 高德的技术大佬向老师在议论方法论时说到:“简单的问题要简单化,简略的问题要深刻化。” 这句话让我感触颇深,这何尝不是一套编写代码的办法——把一个简单逻辑拆分为许多简略逻辑,而后把每一个简略逻辑进行深刻实现,最初把这些简略逻辑整合为简单逻辑,总结为八字真言即是“化繁为简,由简入繁”。 前言高德的技术大佬向老师在议论方法论时说到:“简单的问题要简单化,简略的问题要深刻化。”这句话让我感触颇深,这何尝不是一套编写代码的办法——把一个简单逻辑拆分为许多简略逻辑,而后把每一个简略逻辑进行深刻实现,最初把这些简略逻辑整合为简单逻辑,总结为八字真言即是“化繁为简,由简入繁”。编写Java单元测试用例,其实就是把“简单的问题要简单化”——即把一段简单的代码拆解成一系列简略的单元测试用例;写好Java单元测试用例,其实就是把“简略的问题要深刻化”——即学习一套办法、总结一套模式并利用到实际中。这里,作者依据日常的工作教训,总结了一些Java单元测试技巧,以供大家交换和学习。 筹备环境======== PowerMock是一个扩大了其它如EasyMock等mock框架的、性能更加弱小的框架。PowerMock应用一个自定义类加载器和字节码操作来模仿静态方法、构造方法、final类和办法、公有办法、去除动态初始化器等等。 1.1. 引入PowerMock包为了引入PowerMock包,须要在pom.xml文件中退出下列maven依赖: 1.2. 集成SpringMVC我的项目在SpringMVC我的项目中,须要在pom.xml文件中退出JUnit的maven依赖: 1.3. 集成SpringBoot我的项目在SpringBoot我的项目中,须要在pom.xml文件中退出JUnit的maven依赖: 1.4. 一个简略的测试用例这里,用List举例,模仿一个不存在的列表,然而返回的列表大小为100。 public class ListTest { @Test public void testSize() { Integer expected = 100; List list = PowerMockito.mock(List.class); PowerMockito.when(list.size()).thenReturn(expected); Integer actual = list.size(); Assert.assertEquals("返回值不相等", expected, actual); }} mock语句========== 2.1. mock办法申明:T PowerMockito.mock(Class clazz);用处:能够用于模仿指定类的对象实例。当模仿非final类(接口、一般类、虚基类)的非final办法时,不用应用@RunWith和@PrepareForTest注解。当模仿final类或final办法时,必须应用@RunWith和@PrepareForTest注解。注解形如:@RunWith(PowerMockRunner.class)@PrepareForTest({TargetClass.class}) 2.1.1. 模仿非final类一般办法@Getter@Setter@ToStringpublic class Rectangle implements Sharp { private double width; private double height; @Override public double getArea() { return width * height; }}public class RectangleTest { @Test public void testGetArea() { double expectArea = 100.0D; Rectangle rectangle = PowerMockito.mock(Rectangle.class); PowerMockito.when(rectangle.getArea()).thenReturn(expectArea); double actualArea = rectangle.getArea(); Assert.assertEquals("返回值不相等", expectArea, actualArea, 1E-6D); }}2.1.2. 模仿final类或final办法@Getter@Setter@ToStringpublic final class Circle { private double radius; public double getArea() { return Math.PI * Math.pow(radius, 2); }}@RunWith(PowerMockRunner.class)@PrepareForTest({Circle.class})public class CircleTest { @Test public void testGetArea() { double expectArea = 3.14D; Circle circle = PowerMockito.mock(Circle.class); PowerMockito.when(circle.getArea()).thenReturn(expectArea); double actualArea = circle.getArea(); Assert.assertEquals("返回值不相等", expectArea, actualArea, 1E-6D); }}2.2. mockStatic办法申明:PowerMockito.mockStatic(Class clazz);用处:能够用于模仿类的静态方法,必须应用“@RunWith”和“@PrepareForTest”注解。 ...

March 11, 2021 · 14 min · jiezi

关于jquery:闲鱼如何建设技术舆情治理体系-多图多代码

简介: 从日志、监控、性能检测几个方面建设了有日志可查、有数据可依的排查体系现状和问题 闲鱼的舆情治理,依靠阿里团体的设施建设,有以下能力: 解体异样、性能在线聚合查问;本地日志:TLog;在线日志:埋点日志(t+1)和用户行为日志(门路和申请)但在应答舆情治理方面仍存在较多的问题: 有相当一部分闪退、黑屏、卡死舆情无 Crash 或 ANR 日志;技术舆情中的业务问题定位艰难;业务问题如图片视频上传失败、内容显示异样、无奈退出、服务器谬误等;日志内容缺失:大部分业务日志被写入控制台,而不是本地日志或在线日志;个别重要业务应用埋点日志,但仍可能存在内容有余和 t+1 不及时问题。本地日志定位问题能力无限本地 TLog 日志有较为具体的团体二方 SDK 日志,但缺失设施根底信息、业务日志、用户行为日志等未知异样问题,如视频绿屏等,无控制台 logcat 日志日志标准不欠缺,日志查看效率低本地日志回捞艰难用户被动反馈时,没有触发本地日志上报闲鱼属于交易 App,用户不会长时间在线,在线命令推送成功率低命令推送在后盾没有缓存机制反馈问题和线上理论状况存在偏差闲鱼反馈入口较深,相比闲鱼上亿用户基数,反馈占比低,存在线上有问题但无反馈的状况舆情治理计划整体设计基于现状问题,从新梳理和补充的舆情治理体系如下图: 基于现状问题,从新梳理和补充的舆情治理体系如下图: 线上舆情问题治理体系上面会重点开展讲述的内容: 如何晋升本地日志定位能力补充线上卡顿监测能力补充被动发现问题能力晋升本地日志定位能力本地控制台日志补充治理后期,大量业务日志进入了控制台日志,即使治理后将大量日志转入 tlog 日志,仍有局部日志流入控制台,如 Android Maven 引入独立模块和 Flutter 插件包模块。此外,局部未知异样问题,如视频绿屏、黑屏等,logcat 日志也提供了定位的可能性。 Android Log 模块提供了多种日志缓存类型,见 Android logging,可通过 logcat 命令获取对应类型的日志。这里,咱们在用户反馈的时候,别离将 LOG_ID_MAIN、LOG_ID_EVENTS 和 LOG_ID_CRASH 类型 logcat 读取并写入到本地文件,而后将 logcat 日志同 tlog 文件一起打包通过 AUS 上传至 OSS。 // LOG_ID_MAIN 主应用程序log,-t 设置日志下限 20000adb logcat -d -v threadtime -t 20000// LOG_ID_EVENTS 零碎事件信息adb logcat -d -b events -v threadtime -t 6666// LOG_ID_CRASH 应用程序 crash 日志adb logcat -d -b crash -v threadtime -t 6666 ...

March 10, 2021 · 3 min · jiezi

关于jquery:三分钟介绍强大方便的前端框架Jquery-MiniUI

jQuery MiniUI - 业余WebUI控件库。 它能缩短开发工夫,缩小代码量,使开发者更专一于业务和服务端,轻松实现界面开发,带来绝佳的用户体验。 应用MiniUI,开发者能够疾速创立Ajax无刷新、B/S疾速录入数据、CRUD、Master-Detail、菜单工具栏、弹出面板、布局导航、数据验证、分页表格、树、树形表格等典型WEB利用零碎界面。 产品定位: 疾速开发WEB界面 应用成果: 缩短开发工夫,缩小代码量,晋升用户体验 技术亮点: 疾速开发:应用Html配置界面,缩小80%界面代码量。 易学易用:简略的API设计,能够独立、组合应用控件。 性能优化:内置数据懒加载、低内存开销、疾速界面布局等机制。 丰盛控件:蕴含表格、树、数据验证、布局导航等超过50个控件。 超强表格:提供锁定列、多表头、分页排序、行过滤、数据汇总、单元格编辑、具体行、Excel导出等性能。 第三方兼容:与ExtJS、jQuery、YUI、Dojo等任意第三方控件无缝集成。 浏览器兼容:反对IE6+、FireFox、Chrome等。 跨平台反对:反对Java、.NET、PHP等。 性能个性: 控件类型: 如何疾速实用 须要从官网下载框架包,通过手册进行学习和实用,很容易上手 下载后文件夹内容 应用步骤: 拖到项目管理中,通过demo中,参照各个控件的案例,拷贝到我的项目中 例如布局代码: 依照示例中的html代码,还有css和js的文件门路 运行展现成果 官网手册根本公众布局构造 例如表单成果: 拷贝html构造,留神css和js的文件门路 按钮示例: 多种款式进行抉择 数据库 还提供了测试数据库,外面有一些表数据,能够关联控件,当做测试数据进行展现,调试更加实在 还提供两种sql语句,能够在sqlserver和mysql数据库中,动静的创立,数据结构 例如数据表格能够间接展现数据表中的数据 所以jQuery MiniUI是一个很弱小而且很不便的前端框架,能够不必写一行代码就实现后盾的整个界面设计,还有相干的动态效果,还能够供各个平台的后盾程序员应用

March 8, 2021 · 1 min · jiezi

关于jquery:day32-jQuery-进阶

jQuery中的Ajax: 在jQuery中,上面6种办法只有load()须要jQueryDom对象打点来调,其余都是$间接调 $.Ajax()办法属于最底层的办法;第2层是load(),$.get(),和$.post();第3层是$.getScript()和$.getJSON()办法;1. load() 办法构造:load(url , [data] , [callback] ) 案例1: load(url)<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <div id="box"> </div> </body></html><script src="myjQuery.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript"> $(function(){ //load办法加载html $("#box").load("test.html"); });</script>test.html 文件 hello world; 后果:将url返回的内容当做该元素的innerHTML。 案例2:页面头部反复援用load.html文件 <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> * { margin: 0; padding: 0; } header { height: 100px; background: yellow; } header ul { height: 100px; width: 800px; position: relative; margin: 0 auto; opacity: 0.5; } header ul li { list-style: none; width: 150px; background: red; text-align: center; line-height: 100px; border: 1px solid black; float: left; } section { height: 300px; background: green; opacity: 0.3; } footer { height: 300px; background: blue; opacity: 0.3; } </style> </head> <body> <header> </header> <section> </section> <footer> </footer> </body></html><script src="jQuery.js"></script><script type="text/javascript"> $('header').load("head.html",function(){ $("li").click(function(){ console.log($(this).html()); }); });</script>head.html文件(间接是代码,不须要写html head body等那些构造) ...

February 23, 2021 · 3 min · jiezi

关于jquery:day-31-jQuery进阶

jQuery中的Ajax: 在jQuery中,$.Ajax()办法属于最底层的办法,第2层是load(),$.get(),和$.post(),第3层是$.getScript()和$.getJSON()办法。 1. load() 办法构造:load(url , [data] , [callback] ) 案例1: load(url)<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <div id="box"> </div> </body></html><script src="myjQuery.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript"> $(function(){ //load办法加载html $("#box").load("test.html"); });</script>test.html 文件 hello world; 后果:将url返回的内容当做该元素的innerHTML。 案例2:页面头部反复援用load.html文件 <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> * { margin: 0; padding: 0; } header { height: 100px; background: yellow; } header ul { height: 100px; width: 800px; position: relative; margin: 0 auto; opacity: 0.5; } header ul li { list-style: none; width: 150px; background: red; text-align: center; line-height: 100px; border: 1px solid black; float: left; } section { height: 300px; background: green; opacity: 0.3; } footer { height: 300px; background: blue; opacity: 0.3; } </style> </head> <body> <header> </header> <section> </section> <footer> </footer> </body></html><script src="jQuery.js"></script><script type="text/javascript"> $('header').load("head.html",function(){ $("li").click(function(){ console.log($(this).html()); }); });</script>head.html文件(间接是代码,不须要写html head body等那些构造) ...

February 22, 2021 · 1 min · jiezi

关于jquery:day-30-jQuery

1. 简介jQuery是一个兼容多浏览器的javascript库(函数库),核心理念是write less, do more(写得更少,做的更多)。 JQuery,顾名思义,就是JavaScript和查问 (Query),即是辅助JavaScript开发的库。 特点:Query 是一个疾速的简洁的javascript框架,能够简化查问DOM对象、处理事件、制作动画、解决Ajax交互过程。 提供了弱小的性能函数解决浏览器兼容性问题纠正错误的脚本常识体积小,应用乖巧(只需引入一个js文件)易扩大、插件丰盛作用:程序员的角度:简化JavaScript和Ajax编程,可能使程序员从设计和书写繁冗的JS利用中解脱进去,将关注点转向性能需要而非实现细节上,从而进步我的项目的开发速度。 用户体验的角度:改善了页面视觉效果,加强了与页面的交互性,体验更壮丽的网页物资。 不便地抉择页面元素(模拟CSS选择器更准确、灵便)动静更改页面款式/页面内容(操作DOM,动静增加、移除款式)管制响应事件(动静增加响应事件)提供根本网页特效(提供已封装的网页特效办法)疾速实现通信(ajax) 如何引入jQuery包:jQuery库文件不须要装置,只需应用 < script >标签引入到HTML文件中,拿到jQuery的库文件后,就跟本人写的JS文件同样的引入形式,即可,以下是几种引入形式: 1) 引入本地的Jquery 2) 引入cdn在线提供的库文件(稳固牢靠高速) 2. 用法$(function(){})$是jQuery外围函数, 是jQuery的简写 jQuery == $jQuery有本人的语法,它和原生是两套语法$办法:是一个工厂模式的函数$()相当于页面初始化函数,当页面加载结束,会执行$(),即jQuery()$(function(){ }) 是$(document).ready(function(){});的简写$(document).ready(function(){})和window.onload 的区别: ready示意文档已加载实现(不蕴含图片等非文字媒体文件)onload 是指页面蕴含图片在内的所有元素都加载实现$(document).ready(function(){})要比 window.onload先执行<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> </head> <body> <div id="box">123123</div> </body></html><script src="js/jQuery.js"></script><script type="text/javascript"> // 相似于提早加载 $(function() { console.log("xixi"); }); //齐全体 $(document).ready(function() { // 原生dom let oBox = document.getElementById("box"); console.log(oBox.innerHTML); //jQueryDom console.log($("#box").html()); });</script>包装集jQuery所获取的所有dom元素无论是一个还是一组,都封装成一个jQuery包装集,即汇合。 jQuery包装集与DOM 对象的互转: 原生Dom -> jQueryDom 将原生对象放入 $(原生Dom) 如:document ---> $(document)let oBox = document.getElementById("box");console.log($(oBox).html());jQueryDom -> 原生Dom ...

February 22, 2021 · 3 min · jiezi

关于jquery:前端面试每日31第669天

明天的知识点 (2021.02.13) —— 第669天 (我也要出题)[html] html5中的meta标签renderer有什么作用?[css] 如何让span在div中垂直居中?[js] 写一个办法找到一维数组里,有且只有两个间断相等的所有元素[软技能] 你平时有关注系DAU(日沉闷用户数量)吗?感觉前端有必要关注吗?《论语》,曾子曰:“吾日三省吾身”(我每天屡次检查本人)。前端面试每日3+1题,以面试题来驱动学习,每天提高一点!让致力成为一种习惯,让奋斗成为一种享受!置信 保持 的力量!!!欢送在 Issues 和敌人们一起探讨学习! 我的项目地址:前端面试每日3+1【举荐】欢送跟 jsliang 一起折腾前端,零碎整顿前端常识,目前正在折腾 LeetCode,打算买通算法与数据结构的任督二脉。GitHub 地址 微信公众号欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个Star, 同时欢送微信扫码关注 前端剑解 公众号,并退出 “前端学习每日3+1” 微信群互相交换(点击公众号的菜单:交换)。 学习不打烊,充电加油只为遇到更好的本人,365天无节假日,每天早上5点纯手工公布面试题(死磕本人,愉悦大家)。心愿大家在这虚夸的前端圈里,放弃沉着,保持每天花20分钟来学习与思考。在这变幻无穷,类库层出不穷的前端,倡议大家不要等到找工作时,才狂刷题,提倡每日学习!(不忘初心,html、css、javascript才是基石!)欢送大家到Issues交换,激励PR,感激Star,大家有啥好的倡议能够加我微信一起交换探讨!心愿大家每日去学习与思考,这才达到来这里的目标!!!(不要为了谁而来,要为本人而来!)交换探讨欢送大家前来探讨,如果感觉对你的学习有肯定的帮忙,欢送点个[Star]

February 14, 2021 · 1 min · jiezi

关于jquery:1小时打造HaaS版小小蛮驴智能车

简介: 2020年云栖大会上,阿里云公布了一款机器人“小蛮驴”,霎时激发千层浪,无人车,智能物流,机器人等一些概念又炽热了一把。 借“小蛮驴”的东风以及炽热的HaaS,咱们推出了更加亲民的“小小蛮驴”,丰盛HaaS的场景打造,全面凋谢的云、端、钉示例也能助力开发者学习全链路常识,吸引更多的开发者和企业来退出HaaS的生态建设。1、认识一下小小蛮驴真面目1.1、组件局部 HaaS100外围板HaaS100是一款物联网场景中的规范硬件,并配套嵌入到硬件中的软件驱动及功能模块,为用户提供物联网设施高效开发服务。 HaaS100外围板有着丰盛的外设接口,如下所示: 智能车底板电路 红外接管头子,实现红外遥控小车5V电源稳压芯片电机驱动芯片,电流可达2A,为小车提供弱小的能源电源指示灯爱护二极管其余丰盛接口 电机接口超声波模块接口舵机模块接口测速模块接口红外避障模块接口电池座接口HaaS连贯接口1.2、重要模块介绍1.2.1、驱动电机驱动电机芯片是小车最重要的模块之一,2A的弱小输入电流为小车提供满满的能源。驱动模块的接口定义 其中,IN1和IN2是管制小车的左电机,IN3和IN4是管制小车的右电机,ENA和ENB引脚为输入使能管脚,高电平无效,IN1、IN2、IN3和IN4能够通过PWM脉冲调速。 电机管制:IN1高电平,IN2低电平,左电机正传;IN1低电平,IN2高电平,左电机反传;IN3高电平,IN4低电平,右电机正传;IN3低电平,IN4高电平,右电机反传。 1.2.2、超声波测距模块 超声波测距个别有4个管脚:GND:接公共地VCC:供5V电源Trigger:触发管制,信号输出引脚Echo:回响信号输入引脚超声波测距原理是当发送的超声波遇到物体被发射回来,被接收端接管,而后通过发送信号到接管到回响的信号工夫距离能够测算出间隔。 测距过程如下:HaaS100给Trigger引脚至多10uS的脉冲触发信号,这时候超声波模块发射8个40KHz的方波,而后模块自动检测是否有信号返回。若检测到回响信号,会通过Echo引脚输入一个高电平脉冲,脉冲的宽度就是超声波从发射到返回的工夫t。假如小车间隔障碍物间隔L,2L=vt,L=vt/2,其中v声音的传播速度340m/s。 1.2.3、红外避障模块 红外避障原理就是当障碍物凑近的时候,红外接管到的发射光强度越来越大,所以增大了输入的模拟信号,模拟信号接入比拟器,通过比拟器解决,输入数字信号。读取数字信号电平,就能够判断后方是否有障碍物。 1.2.4、测速模块 测速模块次要原理是由码盘联合光电传感器,传感器一端为发射光,另一端接管光,通过测量单位工夫内脉冲个数得出小车的速度,本模块采纳施密特触发器输入的信号十分稳固( 去抖)。 2、云端小小蛮驴产品创立参考基于《一步步打造能手机远程管理的HaaS花卉养植零碎》系列文章,一步步在物联网平台创立产品、对应的物模型以及设施。也能够通过载入TSL文件,一键生成物模型。 2.1、云端产品创立展现创立了HaaS电动车的产品名称,而后定义了后退、后退、暂停、左转、右转等物模型属性。 依照一步步操作,云端创立产品、物模型以及设施当前,咱们能够获取对应的四元组信息。 3、HaaS电动小车软件开发3.1、配置初始化HaaS100设施端电动小车参考代码的门路在:/application/example/auto_demo下。从物联网云平台创立的产品时候,能够获取调试设施的四元组信息。如下所示: //四元组信息初始化#define PRODUCT_KEY "*******"#define PRODUCT_SECRET "*******"#define DEVICE_NAME "*******"#define DEVICE_SECRET "*******" 对驱动电机芯片管制引脚配置 int auto_gpio_init(void) { temp_gpio.port = IN1_PIN;temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;hal_gpio_init(&temp_gpio);temp_gpio.port = IN2_PIN;temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;hal_gpio_init(&temp_gpio);temp_gpio.port = IN3_PIN;temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;hal_gpio_init(&temp_gpio);temp_gpio.port = IN4_PIN;temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;hal_gpio_init(&temp_gpio);temp_gpio.port = ENA_PIN;temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;hal_gpio_init(&temp_gpio);temp_gpio.port = ENB_PIN;temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;hal_gpio_init(&temp_gpio);GPIO_Set(ENA_PORT,1); //使能驱动电机左GPIO_Set(ENB_PORT,1);//使能驱动电机右stop_ctl();}3.2、接管云端管制命令承受解决云端的管制命令,包含后退、左转、右转、进行、后退等。 char *auto_temp[5]={"back","left","right","stop","front"};static int user_property_set_event_handler(const int devid, const char *request, const int request_len){int res = 0;char i =0,*auto_c;cJSON *root = cJSON_Parse(request)for(i=0;i<5;i++){ auto_c = auto_temp[i]; cJSON *value = cJSON_GetObjectItem(root,auto_c); if (value == NULL || !cJSON_IsNumber(value)) { EXAMPLE_TRACE("not find %d",i); } else{ goto hass_send; }}cJSON_Delete(root);if(i == 5){ EXAMPLE_TRACE("not find %d",i); return -1;}hass_send: ...

February 9, 2021 · 2 min · jiezi

关于jquery:关于JQuery

简介 JQuery是一个疾速的,小的,丰盛的JavaScript库(类指函数,工具的汇合)。使的HTML文档遍历和操作,事件处理,动画和Ajax等操作更加简略。JQuery官网:https://jquery.com/JQuery文档:https://www.bejson.com/apidoc/jquery/JQuery特点 轻量,开源,收费,易于学习兼容性解决弱小的选择器链式操作便捷的DOM操作牢靠的事件机制封装了简略易用的ajax操作丰盛的插件JQuery筹备工作 下载JQuery的形式:官网下载 npm下载 CDN形式(间接引入,不必下载) JQuery版本:2.0以上的版本不兼容IE8及以下的版本JQuery兼容性引入形式:<!--chrome firefox Safari opera IE9+ --><!--[if gt IE 8]> --><script src='../jquery-3.5.1.min.js'></script><!-- <![endif]--><!-- IE8以及以下 --><!--[if lte IE 8]><script src='../jquery-1.12.4.min.js'></script><![endif]-->JQuery的应用 <script src='../jquery-3.5.1.min.js'></script> <script> JQuery入口 $(document).ready(function(){ ... }) JQuery简写入口 $(function(){ ... }) </script>ready示意页面中DOM加载结束后触发load示意页面中所有所有加载结束后触发JQuery的dom对象 获取dom对象:var xxx=$('xxx')应用JQuery选择器获取的对象,不是原生的DOM对象,称之为JQuery dom对象原生dom转为JQuery dom$(原生dom) --> JQuery domJQuery dom转为原生domJQuery dom[下标] --> 原生domJQuery的全局对象 $ 相当于 JQuery$() 等同于 JQuery()$('xxx'(字符串)):获取对象$('<xxx>'(含<>的字符串)):创建对象JQuery选择器 根本选择器:ID选择器:$('#xxx')class选择器:$('.xxx')标签名选择器:$('xxx')全局选择器:$('*')组合选择器:$('xxx.xxx')多个选择器:$('xxx,xxx')层级选择器:后辈元素:选择器 选择器:$('xxx xxx')子元素:选择器>选择器:$('xxx>xxx')紧邻的兄弟元素:选择器+选择器:$('xxx+xxx')前面所有的兄弟元素:选择器~选择器:$('xxx~xxx')筛选选择器:第一个元素:$('xxx:first')最初一个元素:$('xxx:last')第n个元素:$('xxx:eq(n)')大于/小于n的元素$('xxx:gt/lt(n)') 奇数个的元素:$('xxx:odd')偶数个的元素:$('xxx:even')从xxx中排除掉xx的选择器:$('xxx:not(xx)')题目标签的元素:$(':header')获取焦点的元素:$(':focus')获取根元素:$(':root')锚点正在指向的元素:$(':target')正在执行动画的元素:$(':animated')内容选择器:蕴含文本xx的元素:$('xxx:contains('xx')')含有xx选择器后辈元素的元素(不蕴含xx选择器自身的元素):$('xxx:has('xx')')不能有内容和子元素的元素:$('xxx:empty')要么有内容,要么有子元素的元素(可作为父元素的元素):$('xxx:parent')可见性选择器:可见的元素:$(':visible')不可见的元素:$(':hidden')属性选择器:xxx中xx属性的元素:$('xxx[xx]')xxx中xx属性等于n的元素:$('xxx[xx=n]')xxx中xx属性不等于n的元素:$('xxx[xx!=n]')xxx中xx属性的属性值以n结尾的元素:$('xxx[xx^=n]')xxx中xx属性的属性值以n结尾的元素:$('xxx[xx$=n]')xxx中xx属性的属性值蕴含n的元素:$('xxx[xx*=n]')xxx中含xx属性和n属性的元素:$('xxx[xx][n]')子元素选择器:抉择一个是所有兄弟元素外面第一个的xxx元素:$('xxx:first-child')抉择一个是所有兄弟元素外面最初一个的xxx元素:$('xxx:first-child')抉择一个是所有兄弟元素外面正向数第n个的xxx元素:$('xxx:nth-child(n)')抉择一个是所有兄弟元素外面反向数第n个的xxx元素:$('xxx:nth-last-child(n)')抉择一个没有兄弟元素的xxx元素:$('xxx:only-child')抉择一个是所有兄弟元素外面雷同类型的第一个xxx元素:$('xxx:first-of-type')抉择一个是所有兄弟元素外面雷同类型的第n个xxx元素:$('xxx:nth-of-type(n)')抉择一个是所有兄弟元素外面仅含这一个类型的xxx元素:$('xxx:only-of-type')表单选择器:所有的表单控件:input,select,textarea,button...$(':input')选中表单中的文本框的元素:$(':text')选中表单中的明码框的元素:$(':password')选中表单中的单选框的元素:$(':radio')选中表单中的复选框的元素:$(':checkbox')选中表单中的文件框的元素:$(':file')选中表单中的按钮的元素:$(':button')选中表单中的提交性能按钮的元素:$(':submit')选中表单中的重置性能按钮的元素:$(':reset')表单对象选择器:选中表单中禁用性能的元素:$(':disabled')选中表单中失常性能的元素:$(':enabled')选中表单中被选中的元素:$(':checked')选中表单中被抉择的元素:$(':selected')混同选择器:用于含一些特殊符号的选择器:$.escapeSelector(selector)JQuery属性操作 属性:attr,prop获取属性的值:xxx.attr('xx'); 操作所有的属性(自定义和内置)xxx.prop('xx'); 操作html元素内置的属性批改属性的值:xxx.attr('xx','批改的值')xxx.prop('xx','批改的值')增加属性:xxx.attr('新的属性','新的属性值')xxx.prop('新的属性(内置的属性)','新的属性值')删除属性:xxx.removeAttr('删除的属性值')xxx.removeProp('删除的属性值')(不能删除html元素上的属性)CSS类的属性操作:增加一个class值:addClass()移除一个class值:removeClass()切换一个class值:toggleClass()判断是否有某个class值:hasClass()获取css的属性值:xxx.css('属性名')设置css的属性值:xxx.css('属性名','属性值') / xxx.css({属性名:属性值})获取元素地位的间隔:xxx.offset().left/top:获取元素在页面的坐标(可读可写)xxx.position().left/top:获取元素在第一个定位的先人元素内的坐标(只读)获取滚动条的滑动间隔:xxx.scrollTop():滚动条间隔顶部的滚动间隔xxx.scrollLeft():滚动条间隔右边的滚动间隔HTML的属性操作:html([html]):设置或获取元素外面的html代码(相似JS的innerHTML)text([text]):设置或获取元素外面的文本内容(相似JS的innerText)val([value]):设置或获取表单控件里的值获取尺寸的操作:(括号中写值能够设值)width()/height()(内容的尺寸)innerWidth()/innerHeight() (内容的尺寸+padding)outerWidth()/outerHeight()(盒子的尺寸)JQuery筛选操作 过滤操作:xxx.first()xxx.last()xxx.eq()xxx.not()xxx.filter('xx'):只选中选择器为xx的元素xxx.slice(n) / xxx.slice(x,y):选中从n开始的元素 / 选中从x到y范畴的元素(不包含y)xxx.has()查找操作:选取子元素中为xx的元素:xxx.children('xx')选取后辈元素中为xx的元素:xxx.find('xx')选取xxx的父元素:xxx.parent()选取xxx的所有先人元素:xxx.parents()选取xxx的所有先人元素(范畴是选择器xxx到选择器xx的元素(不包含xx)):xxx.parentsUntil('xx')选取xxx第一个定位的先人元素:xxx.offsetParent()选取后一个兄弟元素 / 选取后一个为xx的兄弟元素:xxx.next() / xxx.next('xx')选取前面所有的兄弟元素:xxx.nextAll()选取前面所有的兄弟元素(直到选择器为xx的元素):xxx.nextUntil('xx')选取前一个兄弟元素:xxx.prev()选取后面所有的兄弟元素:xxx.prevAll()选取后面所有的兄弟元素(直到选择器为xx的元素):xxx.prevUntil('xx')选取所有的兄弟元素(前后):xxx.siblings()从所有的先人元素和自身外面找出第一个合乎xx的元素:xxx.closest('xx')串联:xxx.find('xx').add():把选中的xx元素退出到以后汇合xxx.find('xx').addBack():把选中xx的xxx元素退出到以后汇合end():返回最初一次破坏性操作之前的dom(还原dom之前的状态) (破坏性操作:查找操作,过滤操作...)contents():返回所有子节点的汇合JQuery DOM对象的办法 ...

February 3, 2021 · 3 min · jiezi

关于jquery:Serverless在游戏运营行业进行数据采集分析的最佳实践

简介: 这个架构不光实用于游戏经营行业,其实任何大数据采集传输的场景都是实用的,目前也曾经有很多客户正在基于Serverless的架构跑在生产环境,或者正走在革新Serverless 架构的路上。家喻户晓,游戏行业在当今的互联网行业中算是一棵常青树。在疫情之前的2019年,中国游戏市场营收规模约2884.8亿元,同比增长17.1%。2020年因为疫情,游戏行业更是突飞猛进。玩游戏本就是中国网民最广泛的娱乐形式之一,疫情期间更甚。据不齐全统计,截至2019年,中国移动游戏用户规模约6.6亿人,占中国总网民规模8.47亿的77.92%,可见游戏作为一种低门槛、低成本的娱乐伎俩,已成为大部分人生存中司空见惯的一部分。 对于玩家而言,市面上的游戏数量多如牛毛,那么玩家如何能发现和认知到一款游戏,并且继续的玩上来恐怕是所有游戏厂商须要思考的问题。加之2018年游戏版号停发事件,游戏厂商更加珍惜每一个已取得版号的游戏产品,所以这也使得“深度打磨产品质量”和“进步经营精密水平”这两个游戏产业倒退方向成为宽广游戏厂商的倒退思路,无论是新游戏还是老游戏都在致力落实这两点: • 新游戏:面向玩家须要提供更短缺的推广资源和更残缺的游戏内容。• 老游戏:通过用户行为剖析,投入更多的精力和老本,制作更优质的版本内容。 这里咱们重点来看新游戏。一家游戏企业辛辛苦苦研发三年,等着新游戏发售时一飞冲天。那么问题来了,新游戏如何被宽广玩家看到? 首先来看看游戏行业公司的分类: • 游戏研发商:研发游戏的公司,生产和制作游戏内容。比方王者光荣的所有英雄设计、游戏战斗场景、战斗逻辑等,全副由游戏研发公司提供。• 游戏发行商:游戏发行商的次要工作分三大块:市场工作、经营工作、客服工作。游戏发行商把控游戏命根子,市场工作外围是导入玩家,经营工作外围是将用户价值最大化、赚取更多利益。 • 游戏平台/渠道商:游戏平台和渠道商的外围目标就是曝光游戏,让尽量多的人能发现你的游戏。 这三种类型的业务,有专一于其中某一畛域的独立公司,也有能承接全副业务的公司,但无论那一种,这三者之间的关系是不会变的: 所以不难理解,想让更多的玩家看到你的游戏,游戏发行和经营是要害。艰深来讲,如果你的游戏呈现在目前所有大家熟知的平台广告中,那么最起码游戏的新用户注册数量是很可观的。因而这就引入了一个关键词:买量。 依据数据显示,2019年月均买量手游数达6000+款,而2018年仅为4200款。另一方面,随着抖音、微博等超级APP在游戏买量市场的资源歪斜,也助推手游买量的成果和效率有所晋升,游戏厂商更违心应用买量的形式来吸引用户。 但须要留神的是,在游戏买量的精准化水平一直进步的同时,买量的老本也在节节攀升,唯有合理配置买量、渠道与整合营销之间的关系,能力将宣发资源施展到最大的成果。 艰深来讲,买量其实就是在各大支流平台投放广告,宽广用户看到游戏广告后,有可能会点击广告,而后进入游戏厂商的宣传页面,同时会采集用户的一些信息,而后游戏厂商对采集到的用户信息进行大数据分析,进行进一步的定向推广。 游戏经营外围诉求游戏厂商花钱买量,换来的用户信息以及新用户注册信息是为继续的游戏经营服务的,那么这个场景的外围诉求就是采集用户信息的完整性。比如说,某游戏厂商一天花5000w投放广告,在某平台某时段产生了每秒1w次的广告点击率,那么在这个时段内每一个点击广告的用户信息要残缺的被采集到,而后入库进行后续剖析。这就对数据采集零碎提出了很高的要求。这其中,最外围的一点就是零碎裸露接口的环节要可能安稳承载买量期间不定时的流量脉冲。在买量期间,游戏厂商通常会在多个平台投放广告,每个平台投放广告的工夫是不一样的,所以就会呈现全天不定时的流量脉冲景象。如果这个环节呈现问题,那么相当于买量的钱就打水漂了。 数据采集零碎传统架构 上图是一个绝对传统的数据采集零碎架构,最要害的就是裸露HTTP接口回传数据这部分,这部分如果出问题,那么采集数据的链路就断了。但这部分往往会面临两个挑战: • 当流量脉冲来的时候,这部分是否能够疾速扩容以应答流量冲击。• 游戏经营具备潮汐个性,并非天天都在进行,这就须要思考如何优化资源利用率。 通常状况下,在游戏有经营流动之前,会提前告诉运维同学,对这个环节的服务减少节点,但要减少多少其实是无奈预估的,只能大略拍一个数字。这是在传统架构下常常会呈现的场景,这就会导致两个问题: • 流量太大,节点加少了,导致一部分流量的数据没有采集到。• 流量没有预期那么大,节点加多了,导致资源节约。 数据采集零碎Serverless架构咱们能够通过 函数计算(函数计算的基本概念能够参考这篇文章)来取代传统架构中裸露HTTP回传数据这部分,从而完满解决传统架构中存在问题,先来看架构图: 传统架构中的两个问题均能够通过函数计算百毫秒弹性的个性来解决。咱们并不需要去估算营销流动会带来多大的流量,也不须要去放心和思考对数据采集零碎的性能,运维同学更不须要提前准备ECS。 因为函数计算的极致弹性个性,当没有买量、没有营销流动的时候,函数计算的运行实例是零。有买量流动时,在流量脉冲的状况下,函数计算会疾速拉起实例来承载流量压力;当流量缩小时,函数计算会及时开释没有申请的实例进行缩容。所以Serverless架构带来的劣势有以下三点: • 无需运维染指,研发同学就能够很快的搭建进去。• 无论流量大小,均能够安稳的承接。• 函数计算拉起的实例数量能够紧贴流量大小的曲线,做到资源利用率最优化,再加上按量计费的模式,能够最大水平优化老本。 架构解析从下面的架构图能够看到,整个采集数据阶段,分了两个函数来实现,第一个函数的作用是单纯的裸露HTTP接口接收数据,第二个函数用于解决数据,而后将数据发送至音讯队列Kafka和数据库RDS。 1.接收数据函数咱们关上函数计算控制台,创立一个函数:• 函数类型:HTTP(即触发器为HTTP)• 函数名称:receiveData• 运行环境:Python3 • 函数实例类型:弹性实例• 函数执行内存:512MB• 函数运行超时工夫:60秒• 函数单实例并发度:1 • 触发器类型:HTTP触发器• 触发器名称:defaultTrigger• 认证形式:anonymous(即无需认证)• 申请形式:GET,POST 创立好函数之后,咱们通过在线编辑器编写代码: # -*- coding: utf-8 -*-import loggingimport jsonimport urllib.parseHELLO_WORLD = b'Hello world!n'def handler(environ, start_response): logger = logging.getLogger() context = environ['fc.context'] request_uri = environ['fc.request_uri'] for k, v in environ.items(): if k.startswith('HTTP_'): # process custom request headers pass try: request_body_size = int(environ.get('CONTENT_LENGTH', 0)) except (ValueError): request_body_size = 0 # 接管回传的数据 request_body = environ['wsgi.input'].read(request_body_size) request_body_str = urllib.parse.unquote(request_body.decode("GBK")) request_body_obj = json.loads(request_body_str) logger.info(request_body_obj["action"]) logger.info(request_body_obj["articleAuthorId"]) status = '200 OK' response_headers = [('Content-type', 'text/plain')] start_response(status, response_headers) return [HELLO_WORLD]此时的代码非常简单,就是接管用户传来的参数,咱们能够调用接口进行验证: ...

February 2, 2021 · 3 min · jiezi

关于jquery:分享一款10年前我赚第一桶金的项目

寄语这个我的项目是我在刚入程序员这行时,为了学习 jQuery 而写的一个练手我的项目,随着性能一点点的欠缺,也发现并拓展了一些商业价值。做为一款已经的付费我的项目,它给我带来过不错的收益,其中不乏有BAT中的T厂也曾向我洽购过此我的项目。 但因为技术倒退和业务更新,这个我的项目也逐步不被市场所须要,昨天帮我续费域名的敌人和我说,http://hoorayos.com 这个域名下个月就到期了,是否还要续费。思考过后决定不再续费了,同时也决定将源码齐全开源。 对我集体来说,这个我的项目曾经是一段历史;但对你来说,如果你对该我的项目感兴趣,你齐全能够用于商业或非商业的我的项目中,你能够自由发挥,二次开发,只有遵循 MIT 开源协定即可。 我的项目介绍HoorayOS 是一款 Web 桌面利用框架,你能够用它二次开发出相似 Q+Web 这类的桌面利用网站,也能够开发出实用于各种我的项目的桌面管理系统。 去 Github 下载 去 Gitee 下载 应用阐明举荐应用 WampServer 运行,须要装置 composer 并在我的项目内执行 composer i 装置依赖,而后将 _sql/hoorayos.sql 数据库文件导入到 mysql 中,最初在 inc/config.php 里批改数据库连贯配置即可。 管理员默认帐号/明码均为:hoorayos 技术栈PHP + MySQL + jQuery 毕竟是快10年前的技术,前后端没有拆散,用的也还是 jQuery 预览 最初当然,你可能对这个我的项目不感兴趣,我再提供一个前后端开发都会感兴趣的我的项目,就是 Fantastic-admin ,这是一款开箱即用的 Vue 中后盾管理系统框架。

February 2, 2021 · 1 min · jiezi

关于jquery:十行代码让你的单机影分身分布式训练速度快到飞起

工程师:“在你辉煌的时刻,让我为你唱首歌,我的好兄弟,心里有苦你对我说。” 计算机:“哥啊,那我可就说了,我是真的苦啊,当初一个模型动辄好几亿参数,数据集也是大的吓人,兄弟我内存都快被掏空了,切实训练不动了呀。” 工程师:“后方大路一起走,哪怕是河也一起过…” 计算机:“你怎么还唱啊,兄弟我真的保持不住了。” 工程师:“放心啥,哥有的是方法救你,就这招吧——分布式训练之参数服务器!” 计算机:“分布式训练?参数服务器?真的很好用吗?” 工程师:“好吧,接下来咱们就来看看什么是分布式训练参数服务器性能。” 下载安装命令 什么是分布式训练 何谓分布式训练呢?大家想想《火影忍者》中鸣人搓螺旋丸的办法,要晓得鸣人一个人可搓不进去,他是怎么做的呢?对!影分身,再变出两个分身来帮他一起搓丸子,分布式训练其实用的是雷同的原理。艰深的讲就是把原先交给一台计算机上实现的训练任务改为交由多台计算机实现。每台计算机上都会有一个或多个计算单元,例如CPU、GPU、AI芯片等,单干的计算机越多,参加训练的计算单元也就越多。可想而知那速度必定是噌噌的! 什么是参数服务器 如图1站长交易所示,参数服务器是分布式训练畛域广泛采纳的编程架构,次要蕴含Server和Worker两个局部,其中Server负责参数的存储和更新,而Worker负责训练的参数服务器性能也是基于这种经典的架构进行设计和开发的,同时在这根底上进行了SGD(Stochastic Gradient Descent)算法的翻新(Geometric Stochastic Gradient Descent)。以后通过大量的试验验证,最佳的计划是每台机器上启动Server和Worker两个过程,而一个Worker过程中能够蕴含多个用于训练的线程。 什么是参数服务器 如图1所示,参数服务器是分布式训练畛域广泛采纳的编程架构,次要蕴含Server和Worker两个局部,其中Server负责参数的存储和更新,而Worker负责训练。的参数服务器性能也是基于这种经典的架构进行设计和开发的,同时在这根底上进行了SGD(Stochastic Gradient Descent)算法的翻新(Geometric Stochastic Gradient Descent)。以后通过大量的试验验证,最佳的计划是每台机器上启动Server和Worker两个过程,而一个Worker过程中能够蕴含多个用于训练的线程。 什么是参数服务器 如图1所示,参数服务器是分布式训练畛域广泛采纳的编程架构,次要蕴含Server和Worker两个局部,其中Server负责参数的存储和更新,而Worker负责训练。的参数服务器性能也是基于这种经典的架构进行设计和开发的,同时在这根底上进行了SGD(Stochastic Gradient Descent)算法的翻新(Geometric Stochastic Gradient Descent)。以后通过大量的试验验证,最佳的计划是每台机器上启动Server和Worker两个过程,而一个Worker过程中能够蕴含多个用于训练的线程。 异步训练模式:如图3所示,在训练一个batch的数据后,Worker的每个线程会发送梯度给Server。而Server不会期待接管所有节点的梯度,而是间接基于已收到的梯度进行参数更新。异步训练去除了训练过程中的期待机制,训练速度失去了极大的晋升,然而毛病也很显著,那就是Loss降落不稳固,容易产生抖动。倡议在个性化举荐(召回、排序)、语义匹配等数据量大的场景应用。 尤其是举荐畛域的点击率预估场景,该场景可能会呈现千亿甚至万亿规模的稠密特色,而稠密参数也能够达到万亿数量级,且须要小时级或分钟级流式增量训练。如果应用异步训练模式,能够很好的满足该场景的online-learning需要。

January 31, 2021 · 1 min · jiezi

关于jquery:如何用好云的弹性

简介: 如何用好云的弹性一、弹性为什么这么重要做好弹性让IT能力轻松跟上用户的业务倒退,做到多、快、好、省。 多:抉择多,能够寰球建站、机型抉择也多、配套云服务也多。快:部署快,自建IDC的建设时长以年为单位,云上部署所见即所得。好:好保护,不必思考IT硬件故障培修,工作精力能够全副思考业务倒退。省:依据计算工作按需创立IT资源,解决IT资源的空置问题,IT老本失去空前的优化。二、 弹性怎么搞供应侧的建设次要是云厂商负责,目标是为云用户提供更多的弹性资源同时升高经营老本。如何做到将弹性供应侧建设做到“海纳百川”能够说是每个云厂商的独门内功,也是评估一家云厂商优劣的重要规范。生产侧的建设须要云用户和云厂商独特建设的,云厂商搭台,云用户唱戏。云厂商要为用户提供尽可能不便的弹性创立资源和资源编排的操作界面和API。云用户须要做哪些事件呢? 图1:弹性生产侧和供应侧 三、生产侧弹性怎么搞1.首先抉择一家或几家云厂商作为云供货商 如何筛选云厂商做弹性,次要是思考这个云厂商在市场的占有率和稳定性口碑。因为通常占有率越大的云厂商它在各个地区的库存池子越大,调配库存伎俩更多,供应链更有保障,能够为咱们做弹性提供更短缺的资源。考量稳定性口碑天然是为您的业务稳定性思考。 2.认清哪些资源能够弹性,哪些不能弹性。 图2:可弹性和不可弹性 3.容量评估 不可弹性的资源在做容量评估时要依据业务中长期的布局和峰值预估做评估,因为它们的建设周期个别会很长或者有突发峰值时无奈通过弹性应答。可弹性资源容量评估个别会按日常均匀业务流量时所需的资源作为基线水位,思考到弹性扩容资源交付速度、云厂商资源水位状况稍微调整基线水位。 图3:资源水位线 4.弹性成本核算 云上资源个别有包年包月和按量付费两种常见模式的购买形式,大量云产品反对竞价抢占式实例 按量付费:相似于手机的后付费形式,按理论的应用时长进行付费,这是最灵便的一种购买形式,随来随走,但价格通常也是最高的,适宜于应答暴发业务长期扩大,例如临时性的测试、业务顶峰时段等;包年包月:相似于手机的预付费套餐,绑定了具体的云服务器实例,承诺了应用时长,工夫上的灵活性差一些,但价格比拟优惠,适宜于运行固定的7x24服务,如Web服务、数据库等;竞价抢占式:这是一种十分独特的售卖形式,咱们把临时充裕的资源以极低的价格让用户采取相似于竞价的形式来购买,但当供应状况发生变化时,这些云服务器可能被云厂商“抢占”回去,因而比拟适宜那些随时能够中断、后续再拉起持续的计算工作,例如压测、科学计算、批量计算、视频转码等。弹性基线以内的资源因为利用率高,所以倡议按包年包月模式购买,老本更合算。日常顶峰如果持续时间超过1小时且对数据须要长久保留的倡议按量形式购买。热点峰值比拟短暂在1小时以内的而且对数据长久保留没有要求的能够思考购买竞价抢占式实例。 5.弹性资源调度 定时弹性调度 如果业务流量每天很有法则的话,能够思考应用定时弹性调度形式,在业务顶峰前扩容,在顶峰过是缩容。动静弹性调度 动静资源调度能够依据业务流量走势主动扩容和缩容。做到动静资源须要做如下几步。图4:弹性水位评估 定义扩容、缩容的水位线 图5:弹性水位线 6.高可用角度设计弹性策略 尽量让业务能够适配多个可用区多个机型做弹性部署 多可用区部署能够做到多机房灾备多可用区部署可在多机房并行创立弹性资源,减少弹性速度多机型做弹性能够升高弹性库存保障难度,扩充弹性规模不可弹性资源也要思考高可用 如果有专线尽量思考双线双接入点接入云厂商像缓存这种扩容后须要预热很长时间不适宜做弹性,须要思考弹性峰值时的缓存的水位,做常态部署且思考多可用区部署,能够让弹性资源就近调用缓存,优化调用耗时。作者:SRE团队技术小编-小凌原文链接本文为阿里云原创内容,未经容许不得转载

January 18, 2021 · 1 min · jiezi

关于jquery:Markdown高级使用之流程图

流程图在Markdown中的的表现形式就是代码块,代码块语言标记为mermaid。次要内容大体分为:方向、节点、节点间的连贯关系,上面就围绕这三个点来整顿。mermaid反对流程图、甘特图和时序图,然而通过这次尝试,论断就是画图的话还是应用业余的画图工具,这个只能作为一种简略选项用在简略场景下。所以这里就只总结一下流程图的应用,其它两种就没必要了,不是怎么好用。 流程图方向流程图总体分为横向和纵向两种。总共四个方向:T-上,BD-下;L-左,R-右。应用形式就是横向的两两联合,纵向的两两联合。比方从左到右为LR,从上到下为TB或者TD。 从上到下演示: ~~~mermaidgraph TDA --> B~~~ 从上到下的展现成果: A B 从左到右演示: ~~~mermaidgraph LR A --> B~~~ 从左到右展现成果: A B 流程图节点上面展现的流程图节点有矩形 '[]',圆角矩形 '()',不对称矩形 '>]',菱形 '{}',圆形 '(())'。在每个节点后面须要惟一标识该节点ID。如下示例: ~~~mermaidgraph TD a1[带文本矩形] a2(带文本圆角矩形) a3>带文本不对称矩形] b1{带文本菱形} c1((带文本圆形))~~~ 其展现成果如下: 带文本矩形 带文本圆角矩形 带文本不对称矩形 带文本菱形 带文本圆形 节点间的连贯关系节点之间的连接线分为:实线 '---'、加粗实线 '==='、虚线 '-.-'。带箭头的连接线分为:带箭头实线 '-->'、带箭头加粗实线 '==>',带箭头虚线 '-.->'。如果要在连接线上加上备注,则下面两类加备注的形式如下: 实线备注 '--yes---',加粗实线备注 'yes=',虚线备注 '-.yes.-'。带箭头实线备注 '--yes-->',带箭头加粗实线备注 'yes>',带箭头虚线备注 '-.yes.->'其中,每种连贯符号的右边是开始节点,左边是完结节点,能够由同一个节点指向不同节点,也能够由不同节点指向同一个节点,实现各种指向形式都是通过节点ID标注。 示例如下: ~~~mermaidgraph LR A10[A10] --- A11[A11] A20[A20] === A21[A21] A30[A30] -.- A31[A31] B10[B10] --> B11[B11] B20[B20] ==> B21[B21] B30[B30] -.-> B31[B31] C10[C10] --yes--> C11[C11] C20[C20] ==yes==> C21[C21] C30[C30] -.yes.-> C31[C31]~~~ 其展现成果如下: ...

December 31, 2020 · 2 min · jiezi

关于jquery:阿里云数据库李飞飞云计算推动数据库向云原生快速演进

12月30日,阿里云云原生数据库PolarDB举办年度公布。过来的一年是阿里云数据库硕果累累的一年。11月,Gartner颁布阿里云进入寰球数据库领导者象限,是国产数据库几十年积攒的重大突破;12月,中国电子学会颁布PolarDB取得科学技术奖一等奖。阿里云数据库深耕11年,至今已服务客户10万余。 阿里巴巴团体副总裁、阿里云智能数据库事业部总裁李飞飞示意,云计算正在推动数据库向云原生疾速演进,阿里云数据库已全面布局云原生。 关键词:深耕11年10万余客户2020年11月,“完满日记“上市了。迅速崛起的“完满日记”,从2017年的全新品牌,到现在的 “国货之光”,成为往年创投圈的景象级案例。 疾速的业务倒退背地,是高压力的零碎挑战。“完满日记”找到了阿里云数据库。阿里云服务天猫“双11”多个年头,已具备丰盛的应答大流量教训。 2020年4月,“完满日记”三周年大促,最初一天压测,订单零碎下单速度达到1万笔/每秒,对应PolarDB数据库的写入速度10万TPS,比半年前的零碎吞吐晋升了50倍。在4月14日流动当天,抢购开始霎时零碎涌进了几百万用户。每秒成交的订单数创历史新高,订单峰值比历史最高峰值再次进步了几倍,顶峰业务流量比半年前进步了50倍。 “完满日记”只是阿里云数据库的一个案例,是阿里云数据库11年以来,服务的10万多客户中的其中一个。 阿里云数据库始于2009年。 2009年,阿里巴巴用开源的MySQL代替了Oracle。 2010年,阿里巴巴又基于MySQL着手打造开源数据库AliSQL,并对淘宝商品库进行革新。 2012年,AliSQL撑持了首个“双11”。那是“双11”的第四个年头,已从2009年销售额0.52亿、27家品牌参加,倒退到了2012年销售额132亿、10000家品牌参加。 2013年,曾经妇孺皆知的淘宝下线最初一个Oracle数据库,这不仅是中国云计算倒退的历史性节点,也是数据库技术改革的转折点。 就这样,阿里巴巴实现了从商业传统数据库到开源数据库的转变。 2016年,云计算在国内风起云涌,AlphaGo掀起了人工智能的热潮,在人工智能的助推下,云计算愈发炽热。腾讯发表“将来5年将投入100亿倒退腾讯云”;起初成为云计算守业公司独角兽们的UCloud、青云、七牛云等纷纷拿到融资,各自以不同的姿态,锋芒毕露。 同年,”双11”销售额已达1207亿、98000家品牌参加。这时,阿里云数据库已撑持双11四年。 ”双11”的场景对数据库提出了极高的要求。如果持续在开源数据库根底上进行改良曾经无奈满足业务需要。 于是,阿里巴巴启动了自研数据库。 2017年,阿里云数据库推出首个云原生关系型数据库PolarDB,计算能力最高可扩大至1000核以上,性能比MySQL高6倍。 随后的几年,阿里云数据库飞速发展。 2018年,阿里云数据库进入Gartner数据库魔力象限,是该榜单首次呈现中国公司。 2019年,阿里云数据库再次入选Forrester数据库评估报告,成为国内首个取得两大顶级机构认可的科技公司。 关键词:进入“云原生”时代,全面布局云原生数据库现在,阿里云数据库经验了传统商业数据库,走过了托管数据库,曾经进入了以自研为主的云原生数据库产品阶段,并且开启了全面的云原生布局,进入“云原生”时代。 2020年的Gartner的报告中,“阿里云数据库”赫然呈现在领导者象限中。 这是中国数据库历史上重大突破,也是中国根底软件行业首次进入Gartner魔力象限的寰球领导者。 Gartner用“丰盛和深厚的产品“来评估阿里云数据库。 在这次的发布会上,一张图诠释了阿里云数据库的“丰盛的品种覆盖度和欠缺的产品布局”,这也是阿里云数据库云原生的布局。 阿里云数据库的云原生布局,笼罩了在线交易型数据库、剖析型数据库、NoSQL数据库。以PolarDB为代表的云原生数据库曾经在助力客户从传统数据库降级到云原生数据库;在OLAP畛域,利用云原生数据仓库AnalyticDB(简称ADB)、云原生数据湖剖析DLA帮忙客户实现从传统数据库仓库降级云原生数据仓库,实现数据库大数据一体化、离在线一体化。阿里云推出的云原生多模数据库Lindorm,以及云原生内存数据库Tair是NoSQL方向的代表,帮忙客户在IoT等场景下的数据实现高效存储与解决。 为了简化用户应用云端数据库,阿里云构建了丰盛的云原生数据库生态工具,包含传输、备份到治理,数据传输能够应用DTS,做端到端数据的同步;用DBS数据备份做多云多端的逻辑备份、物理备份;用DMS能够做企业级的开发建模流程;用ADAM则能够做针对基于传统数据库和数据仓库开发的利用评估和迁徙。 此外,基于智能化的技术,阿里云数据库还构建了“自感知、自决策、自优化、自复原”的云原生数据库管控平台。 关键词:下一代数据库的六大关键技术李飞飞认为,云计算的实质是利用分布式技术将资源高效池化,云计算推动数据库向云原生体系疾速演进。数据库大数据库一体化、Serverless、弹性已成为明天数据库的主题。 “从传统结构化数据,到在线数据库的交互式剖析,再到明天多元异构数据处理,咱们见证了数据库从关系型数据处理,演进到多元异构多模数据库等产品状态。”李飞飞谈到。 那么下一代数据库的关键技术有哪些呢? 第一是“HTAP:大数据数据库一体化”,解决剖析一体化、离在线一体化。 第二是云原生+分布式,将云原生的资源解耦,资源池化的能力,和Share-nothing的分布式程度拓展能力联合起来。 第三是智能化,将机器学习和AI技术利用到数据库内核、管控平台,使数据库系统做到自感知、自决策、自优化、自复原。 第四是“多模”,随着数据的多样性一直增长,须要多模系统对多元异构的数据进行解决,包含了传统的结构化数据、日志、文档、K-V数据等。 第五是“软硬件一体化”,须要充分发挥硬件劣势,例如数据库如何施展Intel AEP、RDMA高速网络等。 第六是“平安可信”,在传统可信的根底上,比方日志审计、访问控制、落盘加密,咱们还提供了全加密链路、区块链技术来实现不可篡改的日志等。 这些,就是企业级数据库须要继续去冲破的关键技术。 阿里云云数据库正以云原生在实际此。 以PolarDB为例,首先,是“平安加强”。李飞飞示意,从不同的方面,咱们将PolarDB的平安推到了新的高度:反对了SSL传输、通明数据加密(TDE),从而实现全链路拜访加密。另外,备份数据实现了永恒保留,能够满足各类数据合规保留要求。PolarDB的可用性SLA,也从原来的99.95降级到99.99%。 从引擎反对的角度,阿里云的云原生数据库PolarDB第一个反对MySQL 8.0版本。往年,PolarDB公布了MySQL 5.7的反对,对所有支流的MySQL版本进行全面的笼罩,包含了5.6、5.7和8.0。另外,PolarDB还能够高度反对兼容Oracle,能够帮忙客户疾速、成熟的把传统数据库迁徙到云原生数据库。 往年,PolarDB还公布了一系列的降本增效能力,例如存储包、金融云等都做了大幅提价,最高达降幅达50%。 随着数据量的爆发式增长,阿里云的外围产品企业级云原生分布式数据库PolarDB-X应用Share-Nothing架构,实现程度扩大,底层则应用Paxos协定实现三节点同步,具备金融级高可用、高牢靠能力。PolarDB-X联合了历经多年“双11”考验的X-DB和分布式查问引擎DRDS实现。在往年,PolarDB-X公布全局二级索引与通明分区等能力,向用户提供了通明分布式的能力。具体的:全局二级索引的全新公布,帮忙用户简略的实现多个不同维度的查问,业务零碎则像应用单机零碎一样,通过编写简略的SQL语句就能够实现简单的、多维度的业务逻辑,而不必关怀数据一致性、数据分布等简单问题。通过基于老本的执行门路抉择与流量转发,PolarDB-X的HTAP(混合事务与剖析解决)能力公布使得用户能够更加的简略反对混合负载的业务。 在刚刚过来的“双11”,云原生数据库PolarDB和云原生数据仓库AnalyticDB首次在阿里巴巴大规模利用,PolarDB刷新解决峰值新纪录,TPS高达1.4亿,比去年晋升60%;AnalyticDB解决了7.7万亿行实时数据,相当于5.5个国家图书馆的数据总量。 此外,云原生技术不仅在阿里外部大规模遍及,也通过阿里云服务全社会。以物流行业为例,中国邮政引入PolarDB-X和AnalyticDB,应答“双11”期间超过上亿的订单业务峰值,10万人可同时查问包裹实时状态;申通快递将外围零碎搬到云上,大规模部署阿里云容器,亿级包裹过境,零碎稳如泰山,IT老本升高了30%。 本文为阿里云原创内容,未经容许不得转载。

December 30, 2020 · 1 min · jiezi

关于jquery:装饰者模式动态的包装原有对象的行为

明天来介绍装璜者模式(_Decorator Design Pattern_)。 假如咱们须要给一家火锅店设计一套结账零碎,也就是统计顾客生产的总价格。怎样才能设计出一个好的零碎呢? 1,结账零碎需要剖析既然要设计一个结账零碎,当然须要晓得火锅店都有哪些食品及食品的价格,如果咱们从火锅店老板那里失去以下食品清单: 锅底类: 清汤锅底:5 元麻辣锅底:7 元其它配菜类: 青菜:3 元羊肉:6 元其它饮料类: 可乐:2 元其它能够看到,食品共有三大类,别离是:锅底类,配菜类和饮料类,每个大类下边都有很多具体的食品。 为了设计出一个可保护,可扩大,有弹性的零碎,应该怎么设计呢? 咱们能够这样对待食品之间的关系,将锅底类看作主品,所有其它的都为副品,也就是附加在主品之上的食品。 副品以主品为核心,围绕在主品四周,包裹着主品,一层层的往外扩大。 如下图所表白的一样: 2,装璜者模式像这种,须要在原来(主品)的根底上,附加其它的货色(副品),这样的业务场景都能够应用装璜者模式。 装璜者模式的定义为:动静的给一个对象增加其它性能。从扩展性来说,这种形式比继承更有弹性,更加灵便,可作为代替继承的计划。 装璜者模式的长处在于,它可能更灵便的,动静的给对象增加其它性能,而不须要批改任何现有的底层代码。也就是不须要通过批改代码,而是通过扩大代码,来实现新的业务需要。 这就十分合乎咱们所说的设计准则中的开闭准则:对扩大凋谢,对批改敞开。也就是尽量不要批改原有代码,而是通过扩大代码来实现工作。这样做的益处是能够缩小对原有零碎的批改,从而缩小引入 bug 的危险。 装璜者模式的类图如下: ConcreteComponent 为被装璜者,Decorator 是所有装璜者的超类。 装璜者和被装璜者有着独特的超类型,这一点很重要,因为装璜者必须可能取代被装璜者。这样,装璜者能力在被装璜者的根底上,加上本人的行为,以加强被装璜者的能力。 一个被装璜者能够被多个装璜者顺次包装,这个包装行为是动静的,不限次数的。 3,实现结账零碎那么依据装璜者模式的类图,咱们能够设计出火锅店结账零碎的类图,如下: 火锅的锅底作为被装璜者,配菜和饮料作为装璜者。 每个类都有两个办法: describe:返回以后火锅的形容。cost:返回以后火锅的价格。首先编写 HotPot 类: class HotPot { protected String desc = "HotPot"; protected double price = 0; public String description() { return desc; } public double cost() { return price; } public void printMenu() { System.out.println("菜单:" + description() + " 生产总价:" + cost()); }} HotPot 类中有两个属性 desc 和 price,还有三个办法 description,cost 和 printMenu。printMenu 用于输入菜单和生产总价。 ...

December 30, 2020 · 2 min · jiezi

关于jquery:敏捷史话一用一半的时间做两倍的事Scrum之父Jeff-Sutherland

一般的人生大抵类似,传奇的人生各有各的传奇。Jeff就是这样的传奇人物,年近80的他素来没有“廉颇老矣尚能饭否”的英雄迟暮,不久前还精力矍铄地与好几百名中国学生进行线上交换,踊跃答复中国粉丝对于Scrum的纳闷。 他在某个畛域的成就很可能是很多人一辈子都难以望其项背的存在。 军校和越战Jeff的教育经验丰盛,就从那个赫赫有名的西点军校讲起吧!西点军校成立于1802年,由过后的美国第三届总统托马斯·杰弗逊签订法令成立,造就了麦克阿瑟、艾森豪威尔、巴顿、鲍威尔泛滥军事政治人才。西点军校退学条件严格,需政府高官举荐、考试、体检后择优录取。1960年,Jeff经验了层层筛选,于6月正式退学攻读文科学士学位。 在西点军校的最初一年,Jeff受任训练学校的一支散漫困乏的仪仗队。仪仗队中不乏忽视指挥扰乱队伍的花花公子,Jeff把对每个人的反馈用看板的模式放在学生常常出入的路上,以求每个学生都能“无处可逃”地看到这种可视化的后果。这种透明性治理让所有队员都产生了变动,数周后仪仗队的状态大有改观。继续应用看板治理仪仗队,这个团队由最落后的队伍一跃入选成为护送麦克阿瑟将军的殡仪队。 从西点军校毕业后,Jeff加入了飞行员培训,成为一名航行侦察员。在训练期间,他承受了航行策略专家博伊德的教诲,粗浅地理解到决策速度和效率是一名航行侦察员的必备能力。之后,在敌方的命中率是50%,且Jeff已有许多战友就义在战场的状况下,凭借着察看-定位-决定-口头的作战理念,Jeff驾驶RF-4C在北越执行了100次战斗任务后仍能毫发无损地生还。经验了惊险和平的洗礼,Jeff对决策效率、回路、反馈和调整的了解尤为粗浅。 学术研究1970年,完结了越南战争的军旅生存,Jeff重回校园,在斯坦福大学读了统计学和数学研究生,并在学术方面获得了肯定的成绩。1975年,Jeff进入科罗拉多大学医学院攻读生物统计学博士学位,用几年工夫找出促使一个失常细胞产生癌变的因素。举一反三,他认为团队组织如一个个细胞一样,是自适应的个体,能够依据周边环境做出自我决策的同时也不失去与地方零碎的分割,突破稳固状态,自适应团队会经验凌乱和调整,造成新的状态。而管理者要确保的是,自适应团队的下一个状态是踊跃的,而不是好转为“癌细胞”。 说他的这些传奇经验可不是为了好奇或者吹牛,西点军校的可视化治理、航行侦察的决策和效率、对癌细胞的迁徙学习……Jeff晚期经验的每一颗萤火,都形成了日后人生的浩瀚星河,在麻利开发的大厦上空熠熠生辉。 初入IT做了一段时间医学钻研,获得生物统计学博士学位后,Jeff受中洲计算机服务公司之邀,进入计算机行业从事产品开发。这是一个扭转了Jeff职业生涯乃至扭转计算机行业的决定,此前他并没有计算机相关畛域的工作教训,而中洲公司间接给到了副总裁的职位和难以回绝的待遇,单方的决定在过后看来都是很大胆的。还好,中洲公司慧眼识珠,Jeff也不负众望,在IT畛域展现出了本人的治理能力。 过后中洲公司在应用瀑布办法做ATM的业务,老本比收益高出30%,整个团队加班频繁,压力微小,但仍无奈按期交付。Jeff在这样的气氛中意识到,小修小补无法挽救这个团队,于是进行了大刀阔斧的改革,这就是麻利施行的雏形。他将大团队打散成为各个绝对独立的小团队,按每周交付的工作准则运行,以团队业绩而非集体业绩进行绩效处分。六个月之后,Jeff的起死回生果然让这个团队失去了新生——收益高于老本30%,成了整个公司最赢利的部门,开发出的Nonstop Tandem零碎是最早取得银行信赖并被采纳的在线交易系统,利用到了整个北美地区。 Scrum正式化1993年,Jeff受聘到Easel软件公司,负责主管技术业务的副总裁,面临极具挑战性的工作。在学术研究中养成的好习惯在这里也施展了微小的作用,他率领团队浏览了大量文献。在查找文献的过程中,Jeff读到了一篇1986年公布在《哈佛商业评论》的名为“新新产品开发游戏”的文章。这篇文章的次要观点是:团队所有成员独特为工作做出奉献要比各自为政效率更高,正如在橄榄球球场上大家水乳交融,都为进球这一个指标而全力以赴。文章的观点与Jeff此前的诸多实际不约而同,Jeff好像被打通任督二脉,开始着手将Scrum的流程进行系统化运行。 实际与实践的联合产生了神奇的化学效应,1995年Jeff与Ken Schwaber一起将Scrum正式化,发表《Scrum 指南》。2001年,受Bob邀请,二人作为Scrum的代表来到“凛冽但乏味”的犹他州,缺席雪鸟会议。通过两天的探讨,“麻利”(Agile)这个词为整体团聚者所承受,用以概括一套全新的软件开发价值观,“麻利软件开发宣言”诞生。 “麻利的生存”麻利始终强调的是“Be Agile!Don’t Do Agile!”,麻利并不是只能用在软件开发上,Jeff在生活中也在始终在践行“Be Agile!”。Jeff新的一天从喝防弹咖啡开始,它能够提供短缺的热量并加强推陈出新,长期可放弃生机、维持体重稳固。饮食方面Jeff采纳生酮饮食,摄入高蛋白和高脂肪的食物,升高碳水化合物的比例,放弃精力旺盛、放弃静止习惯。 Jeff还把麻利带到家庭生存中,一家人一起过了一个“麻利感恩节”: 一组人筹备食物, 一组人在安排桌子,还有人在门口迎接来客。“这是咱们有过的最好的感恩节!” Jeff在博客里这样写道。一位另辟蹊径的心理学家Bruce受这个麻利感恩节的启发,学习了Scrum的工作形式,将其利用到多个孩子以至于失控的家庭生存中,比方采纳看板来进行“凌乱的凌晨”的治理,明确每个人早上的工作,颠三倒四地吃早餐、做家务、喂宠物、上学、下班。还有“每日立会”式的家庭会议,每个成员相继答复这个星期家里什么运作良好、 什么不好、下个星期心愿做哪些扭转,Scrum家庭会议的后果喜人——父母的呼啸次数减半、家庭笑声加倍、孩子们也学会了自我管理。 Jeff的书单在一次访谈中,被问到“你最举荐软件工程师必读的三本书是什么”,Jeff举荐了三本书:《人月神话》、《五轮书》以及《如此高尚的愿景:约翰·博伊德、OODA Loop和丹尼尔·福特的美国反恐和平》。从举荐书籍中,也能够看出后期经验对他影响至深。 弗雷德·布鲁克斯的《人月神话》不用多说,为人们治理简单我的项目提供了颇具洞察力的见解。“这在明天和30年前一样实在,令人诧异的是,每个工程经理都没有重复浏览它”。 《五轮书》由日本剑客宫本武藏撰写,论述了剑道与兵法的准则、思维、策略,简略又理论,不仅适于武士,也适宜各种模式的竞争,是危机解决、策略训练的经典之作。软件工作者能够从中学习到如何通过思考来切割代码、宰割阻碍,并始终同时执行短期和长期策略。优良的代码须要优良的架构,平凡的架构须要平凡的设计,平凡的设计须要同时看到全局,以及更改代码所带来的所有副作用。 “《如此高尚的愿景:约翰·博伊德、OODA Loop和丹尼尔·福特的美国反恐和平》是对于世界上最平凡的战斗机飞行员的最优良的书籍。如果你施行了他的策略,无论你是编码还是领导团队,你都肯定会赢。”从这种评估中能够看出,Jeff对越战时给予领导的少校博伊德的评估仍然很高。Jeff举荐的并不是对于代码等硬技能的书籍,而是对于心态的著述。他会定期与应用Scrum的前战斗机飞行员、黑带合气道、空手道和中国功夫专家会面,跟这些人探讨如何将麻利思维引入到一般团队中。麻利所须要的高度专一、纪律和积极主动的口头正是这些团队所须要的。咱们能够和Jeff一起期待麻利在更多畛域的推广。如果你的工作或生存中正经验着什么瓶颈,无妨看看Jeff的经验,用Scrum的办法思考一下,兴许能找到答案,麻利可能就会是你柳暗花明的又一村。https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...http://github.com/hitl837/mlo...https://github.com/hitl837/ml...https://www.github.com/hitl83...

December 28, 2020 · 1 min · jiezi

关于jquery:卷积神经网络CNN学习1

卷积神经网络CNN-学习1 十年磨一剑,霜刃未曾试。 简介:卷积神经网络CNN学习。 CNN中文视频学习链接:卷积神经网络工作原理视频-中文版 CNN英语原文学习链接:卷积神经网络工作原理视频-英文版 一、定义 卷积神经网络(Convolutional Neural Networks)是一种深度学习模型或相似于人工神经网络的多层感知器,罕用来剖析视觉图像。其创始人Yann LeCun是第一个通过卷积神经网络在MNIST数据集上解决手写数字问题的人。 二、CNN灵感起源? 人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步解决(大脑皮层某些细胞发现边缘和方向),而后形象(大脑断定,眼前的物体的形态,是圆形的),而后进一步形象(大脑进一步断定该物体是只气球)。 人脑进行人脸识别示例 对于不同的物体,人类视觉也是通过这样逐层分级,来进行如下认知的。 人类视觉辨认示例** 在最底层特色基本上是相似的,就是各种边缘,越往上,越能提取出此类物体的一些特色(轮子、眼睛、躯干等),到最上层,不同的高级特色最终组合成相应的图像,从而可能让人类精确的辨别不同的物体。于是便模拟人类大脑的这个特点,结构多层的神经网络,较低层的辨认高级的图像特色,若干底层特色组成更上一层特色,最终通过多个层级的组合,最终在顶层做出分类。 三、卷积神经网络解决了什么? 概括来说就是保留图像特色,参数降维,简单参数简单化。 图像像素RGB 家喻户晓,图像是由像素形成的,每个像素又是由色彩形成的。当初随随便便一张图片都是 1000×1000 像素以上的, 每个像素都有RGB 3个参数来示意色彩信息。 如果咱们解决一张 1000×1000 像素的图片,咱们就须要解决3百万个参数!1000×1000×3=3,000,000 这么大量的数据处理起来是十分耗费资源的,卷积神经网络 – CNN 解决的第一个问题就是「将简单问题简化」,把大量参数降维成大量参数,再做解决。 更重要的是:咱们在大部分场景下,降维并不会影响后果。比方1000像素的图片缩小成200像素,并不影响肉眼认出来图片中是一只猫还是一只狗,机器也是如此。 图片数字化的传统形式 图像简略数字化无奈保留图像特色,如上图如果有圆形是1,没有圆形是0,那么圆形的地位不同就会产生齐全不同的数据表白。然而从视觉的角度来看,图像的内容(实质)并没有发生变化,只是地位产生了变动。所以当咱们挪动图像中的物体,用传统的形式的得进去的参数会差别很大!这是不合乎图像处理的要求的。而 CNN 解决了这个问题,他用相似视觉的形式【模拟人类大脑视觉原理,结构多层的神经网络,较低层的辨认高级的图像特色,若干底层特色组成更上一层特色,最终通过多个层级的组合,最终在顶层做出分类】保留了图像的特色,当图像做翻转,旋转或者变换位置时,它也能无效的辨认进去是相似的图像。 四、卷积神经网络的架构 典型的 CNN 由卷积层、池化层、全连贯层3个局部形成: 典型CNN组成部分 更为欠缺的也有分为如下五个层级构造: 1、数据输出层:Input layer 2、卷积计算层:CONV layer 3、ReLU激励层:ReLU layer 4、池化层:Pooling layer 5、全连贯层:FC layer 五、数据输出层 数据输出层次要是对原始图形数据进行数据预处理,包含去均值、归一化、PCA/白化。 去均值: 把输出数据各个维度都核心化为0,如下图所示,其目标就是把样本的核心拉回到坐标系原点上。 归一化: 幅度归一化到同样的范畴,如下所示,即缩小各维度数据取值范畴的差别而带来的烦扰,比方,咱们有两个维度的特色A和B,A范畴是0到10,而B范畴是0到10000,如果间接应用这两个特色是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范畴。 PCA/白化: 用PCA降维度,白化是对数据各个特色轴上的幅度归一化。 ...

December 28, 2020 · 1 min · jiezi

关于jquery:记一次TCP全队列溢出问题排查过程

1. 前言本文排查的问题是经典的TCP队列溢出问题,因TCP队列问题在操作系统层面没有显著的指标异样,容易被疏忽,故把排查过程分享给大家。 2. 问题形容A服务调用B服务接口超时,B服务主机IOWAIT高,具体超时状况分为两种: A服务的申请在B服务日志中可查到,但B服务的响应工夫超过了A服务的期待超时工夫3S。A服务的申请在B服务日志中无奈查到。3. 问题剖析此种超时申请集中在很短的一段时间(通常在2分钟之内),过后便恢复正常,所以很难抓到问题现场剖析起因,只能搭建测试环境,A服务继续申请B服务,在B服务主机上通过DD命令写入大量数据造成主机IOWAIT高,同时通过TCPDUMP在两端抓包剖析。局部服务超时日志: 服务A:Get http://xxx&id=593930: net/http: request canceled (Client.Timeout exceeded while awaiting headers)服务B: "GET xxx&id=593930 HTTP/1.1" 200 64 "-" "Go-http-client/1.1" "-" "-" 165000(单位微秒)服务A发动申请3S后没有收到服务B响应,断开连接,服务B日志显示解决时长为0.165S,远低于3S,服务A侧看服务B的响应工夫为网络传输工夫、TCP队列排队工夫及服务B利用程序处理工夫之和,因为是内网测试,网络传输工夫能够疏忽,次要排查方向应为TCP队列排队工夫。 4. 抓包数据分析情景1:服务A及服务B均有连贯日志打印。服务A端数据包剖析:09:51:43.966553000 服务A发动 GET申请的数据包如下: 图1:服务A发动GET申请 09:51:46.966653000 服务A发动 GET申请3s(即服务A设置的期待超时时长)后,因未收到服务B响应,服务A向服务B发动FIN被动断开连接。 图2:服务A期待超时被动断开连接 09:51:59.958195000 服务A发动http申请16s后收到服务B的http响应报文,因服务A已被动敞开该连贯,故间接回复RST。 图3: 服务B16s后响应 服务B端数据包剖析:09:51:44.062095000 服务B收到服务A发送的http申请包。 图4:服务B收到服务A的申请 09:51:59.936169000 服务B响应服务A,服务B从接管到http申请报文至响应http申请总用时约为15s多,但服务B打印的日志响应时长约为0.165s。 图5:服务B15S后响应 图6:服务B日志显示响应工夫0.165s 情景2:服务A有连贯日志,服务B无连贯日志。服务A端数据包剖析:09:51:43.973791000 服务A向服务B发送一个http申请数据包,随后收到服务B重传的第二次握手的syn+ack包,超过3s未收到服务B的http响应后断开连接。 图7:服务B重传syn+ack 服务B端数据包剖析:服务B重传了第二次握手的syn+ack包,收到服务A的http申请,服务B疏忽,未响应,服务A期待超时后断开了连贯。 图8: 服务B疏忽服务A申请 5. 根因剖析TCP在三次握手过程中内核会保护两个队列: 半连贯队列,即SYN队列全连贯队列,即ACCEPT队列图9:TCP队列 TCP三次握手过程中,第一次握手server收到client的syn后,内核会把该连贯存储到半连贯队列中,同时回复syn+ack给client(第二次握手),第三次握手时server收到client的ack,如果此时全连贯队列未满,内核会把连贯从半连贯队列移除,并将其增加到 accept 队列,期待利用过程调用 accept 函数取出连贯,如果全连贯队列已满,内核的行为取决于内核参数tcp_abort_on_overflow: tcp_abort_on_overflow=0,server会抛弃client的ack。tcp_abort_on_overflow=1,server 会发送 reset 包给 client。默认值是0。情景1的抓包数据显示连贯曾经进入全连贯队列,然而服务B日志显示的连接时间晚了15S多,阐明连贯在队列里期待了15S后才被利用解决。情景2的抓包数据显示全连贯队列已溢出,内核依据tcp_abort_on_overflow的值为0抛弃了服务A的ack,超过了服务A的超时等待时间。论断:服务B主机在IO达到瓶颈的状况下,零碎CPU工夫次要耗费在期待IO响应及解决软中断上,服务B应用程序获取的CPU工夫无限,无奈及时调用 accept 函数把连贯取出并解决,导致TCP全队列溢出或队列等待时间过长,超过了服务A的超时工夫。 ...

December 28, 2020 · 1 min · jiezi

关于jquery:云数据库ClickHouse资源隔离弹性资源队列

引言ClickHouse内核剖析系列文章,本文将为大家深度解读ClickHouse以后的MPP计算模型、用户资源隔离、查问限流机制,在此基础上为大家介绍阿里巴巴云数据库ClickHouse在八月份行将推出的自研弹性资源队列性能。ClickHouse开源版本以后还没有资源队列相干的布局,自研弹性资源队列的初衷是更好地解决隔离和资源利用率的问题。下文将从ClickHouse的MPP计算模型、现有的资源隔离计划开展来看ClickHouse以后在资源隔离上的痛点,最初为大家介绍咱们的自研弹性资源队列性能。 MPP计算模型在深刻到资源隔离之前,这里有必要简略介绍一下ClickHouse社区纯自研的MPP计算模型,因为ClickHouse的MPP计算模型和成熟的开源MPP计算引擎(例如:Presto、HAWQ、Impala)存在着较大的差别(que xian),这使得ClickHouse的资源隔离也有一些独特的要求,同时心愿这部分内容能领导用户更好地对ClickHouse查问进行调优。 ClickHouse的MPP计算模型最大的特点是:它压根没有分布式执行打算,只能通过递归子查问和播送表来解决多表关联查问,这给分布式多表关联查问带来的问题是数据shuffle爆炸。另外ClickHouse的执行打算生成过程中,仅有一些简略的filter push down,column prune规定,齐全没有join reorder能力。对用户来说就是"所写即所得"的模式,要求人人都是DBA,上面将联合简略的查问例子来介绍一下ClickHouse计算模型最大的几个准则。 递归子查问在浏览源码的过程中,我能够感触到ClickHouse后期是一个齐全受母公司Yandex搜寻剖析业务驱动成长起来的数据库。而搜寻业务场景下的Metric剖析(uv / pv ...),对分布式多表关联剖析的并没有很高的需要,绝大部分业务场景都能够通过简略的数据分表剖析而后聚合后果(数据建模比较简单),所以从一开始ClickHouse就注定不善于解决简单的分布式多表关联查问,ClickHouse的内核只是把单机(单表)剖析做到了性能极致。然而任何一个业务场景下都不能完全避免分布式关联剖析的需要,ClickHouse采纳了一套简略的Rule来解决多表关联剖析的查问。 对ClickHouse有所理解的同学应该晓得ClickHouse采纳的是简略的节点对等架构,同时不提供任何分布式的语义保障,ClickHouse的节点中存在着两种类型的表:本地表(实在存放数据的表引擎),分布式表(代理了多个节点上的本地表,相当于"分库分表"的Proxy)。当ClickHouse的节点收到两表的Join关联剖析时,问题比拟收敛,无非是以下几种状况:本地表 Join 分布式表 、本地表 Join 本地表、 分布式表 Join 分布式表、分布式表 Join 本地表,这四种状况会如何执行这里先放一下,等下一大节再介绍。 接下来问题复杂化,如何解决多个Join的关联查问?ClickHouse采纳递归子查问来解决这个问题,如上面的简略例子所示ClickHouse会主动把多个Join的关联查问改写成子查问进行嵌套, 规定非常简单:1)Join的左右表必须是本地表、分布式表或者子查问;2)偏向把Join的左侧变成子查问;3)从最初一个Join开始递归改写成子查问;4)对Join order不做任何改变;5)能够主动依据where条件改写Cross Join到Inner Join。上面是两个具体的例子帮忙大家了解: 例1 select from local_tabA join (select from dist_tabB join local_tabC on dist_tabB.key2 = local_tabC.key2) as sub_Q1 on local_tabA.key1 = sub_Q1.key1 join dist_tabD on local_tabA.key1 = dist_tabD.key1; =============> select from (select from local_tabA join (select * from dist_tabB join local_tabC on dist_tabB.key2 = local_tabC.key2) as sub_Q1 on local_tabA.key1 = sub_Q1.key1) as sub_Q2 join dist_tabD on sub_Q2.key1 = dist_tabD.key1; ...

December 28, 2020 · 4 min · jiezi

关于jquery:HTML-容器标签表格列表和div等

“构造容器”标签是飞哥本人给的一个定义,意思就是这些标签:次要用做: 定义文档构造作为其余标签的容器^_^,大家将就了解一下吧! 列表(List)有序列表<ol> <!--ordered list--> <li>有序列表</li> <!--list item--> <li>无序列表</li> </ol> 无序列表<ul> <!--unordered list--> <li>有序列表</li> <!--list item--> <li>无序列表</li> </ul> 列表还能够: 嵌套<ol> <li>有序列表 <ul> <li>我是嵌套项-1</li> <li>我是嵌套项-1</li> </ul> </li> <li>无序列表</li> </ol> 表格(table)看一下这个表格,3行2列 <!-- row --> h1 <!--table head--> h2 row 1, cell 1 <!--table data cell--> row 1, cell 2 row 2, cell 1 row 2, cell 2 表格的难点在于它的:#### #### 合并单元格合并,是借用的MS Office中的表述,严格来讲,应该是“逾越”“延长”(span),能够在单元格(th/td)中应用属性:* colspan:横向(column列)合并* rowspan:纵向(row行)合并 h1h2 row 1, cell 1 row 1, cell 2 row 2, cell 2 纵向合并了解起来稍稍有点绕,_(__演示__)_表格在晚期被宽泛用于页面布局,但在CSS衰亡之后逐步被div所取代。### ### div和spandiv能够了解为一个“块”,页面中的一大块。比方咱们一个网页,能够被分为这么几大块:* 页头:蕴含了图片logo和导航条* 注释:放入题目、段落、列表、表格等内容* 页脚:友情链接等咱们就能够用三个div予以示意:<div>页头</div> <div>注释</div> <div>页脚</div>而后每个div中再各自放入相应的元素。@想一想@:为什么要这样做?div的一个重要特点是:一个div(默认)就会占一行,不论这个div外面的元素/内容有宽。常常和它绝对比的就是span,比方:<span>我又干啥伤天害理的事了?</span> <span>一脸懵逼</span> <span>。原来他又看到了我以前的一篇文章《为什么我不做培训》(找不到了,难道被我无耻的删了?^_^),而后我马上就想起来了,那篇文章里我写了我的理由,大略就是“怕误人子弟,怕同学们缴了钱学不会……”他们当初在调侃他们也学不会,我晓得他们在和我开玩笑,但啪啪打脸的赶脚,啧啧! </span>其特点是:一个span的长度由其中的内容决定,有多长就是多长;多个span连贯,有余一行的宽度就在一行中拼接,超出一行的宽度就主动换行。(比照演示)具备div这种特色的元素就被称之为块级元素,绝对的,具备span这种特色的元素就被称之为流元素。这在当前学习CSS中十分有用。### ### Html5语义标签大量应用div,导致的一个问题就是:整页都是div,眼睛都看花了……o(╯□╰)o所以,Html5推出了一批(有特定含意的)语义标签,罕用的有:* header:页头* nav:导航栏* main:页面次要局部 * footer:页脚* article:文章* section:区域 * aside:侧边栏* details:细节* mark:标注* …… 更多可参考:MDN:HTML5 sections_and_outlines#### #### 语义化从浏览器的后果来看,上述html5语义标签和div或span相比,并没有什么区别。但HTML5提倡应用有语义的标签,而不是div这种(没有任何含意的)无语义的标签,为什么呢?* 进步代码的可读性。再次强调:代码是写给人看的!开发人员读这些html代码的时候会更难受一些,这很重要。* 语义化标签还能够给浏览器以外的: 1. 搜索引擎爬虫用,有助于SEO 2. 其余设施应用,比方盲人阅读器,这时候通知这一段内容是导航、是文章、是侧边栏……就十分有用标签语义化只是HTML5语义化的一部分,前面咱们还要学习更多的语义化属性,如alt/title等https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...

December 27, 2020 · 1 min · jiezi

关于jquery:面向过程变量声明赋值分支循环函数

变量和类型正文变量常量const 保留关键字,但不可用 final:相似const 强类型语言推导类型var在Java10之后引入。 罕用变量类型String和Object(留神大写)不是内置类型 类型转换函数转换: int g = Integer.valueOf("32"); // String s = g.toString(); / 谬误:primitivetype不能toString() / String s = (new Integer(g)).toString(); 快捷键: syso + alt+shift+s 运算符和表达式赋值/取值/算术/比拟/逻辑/其余字符串没有内插形式 数组一维多维不辨别多维/交织,只有一种格局(同C#中的交织数组): 3行2列的数组int[][] arr = new int3; 3行不定列的数组// 先申明后赋值 int[][] arr = new int[3][]; arr[0] = new int[] { 1, 2 }; arr[1] = new int[] { 1, 2, 3 }; arr[1] = new int[4]; // 申明后立刻赋值 int[][] arr = { { 1, 2 }, { 3, 4, 5 }, { 6, 7, 8, 9 } }; ...

December 27, 2020 · 1 min · jiezi

关于jquery:JQuery表单Ajax其他

表单选择器简写:<inputType> / :submit / :text …… 罕用属性/办法val():value值 和咱们后面所讲的统一_(温习:有参数/无参数;取值/赋值)_ 然而,下拉列表select 是个异类 prop():对应property attr() 文本:text 和 textarea 抉择:check 和 radio 下拉列表:select 取值赋值: 选中::checked 和 is(':checked')只读/禁用$('select').children().eq(1).prop('selected',true) $(':radio').eq(1).prop('check',true) //同时还要把另外一个设为“未选中” $(':radio').eq(1).attr('check',true) 事件触发:click()/select() 代码触发验证 AjaxJQuery成果hide()/show()/toggle() 淡入淡出:fade...() 滑动:slide 自定义动画:animiate validation$form.valid() $.validator.unobtrusive.parse('#yourFormSelector'); 其余办法 动态:$.trim()/$.isNumeric()/…… .data(name):取属性中data-name的值 noConflict() 其余:https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...http://github.com/hdfgfgh546/...https://github.com/hdfgfgh546...https://www.github.com/hdfgfg...

December 27, 2020 · 1 min · jiezi

关于jquery:直播回顾Mars应用与最佳实践

简介: 本文首先对Mars的概念、性能、劣势进行了介绍,随后,对Mars几个典型的利用场景进行介绍,并通过两个Demo展现了在应用Mars后数据迷信性能的晋升,最初总结了Mars的最佳实际,让应用Mars更高效便捷。 本文次要从以下几个方面开展: Mars简介典型场景Demo最佳实际一、Mars简介Mars是对立的数据迷信平台,它用来减速传统的Python数据科学技术栈,在单机中也能够用多核减速,或用分布式来减速。Mars能够部署在单机的分布式集群,或者Kubernetes和Hadoop Yarn上。 Mars整个框架构建在单机的并行和分布式的这两个调度的根底之上,它的数据迷信根底包含三个外围局部,Tensor、DataFrame和Remote。而构建在这个根底之上的,是Mars Learn模块,它能够兼容Scikit-learn API,能简略地进行更大数据规模的分布式解决。此外,Mars还反对深度学习和机器学习的框架,比方能轻松运行TensorFlow、PyTorch等,而且可视化也能够在Mars上实现。除此之外,Mars还反对了丰盛的数据源。 从传统Python技术栈到Mars也非常简单,比方在NumPy和Pandas里要变成Mars,只须要替换import,而后前面变为提早执行即可。 一般的Python函数,在调用的时候变成mr.spawn来提早这个过程,最初通过execute来并发执行,不必放心Mars是运行在单机上还是分布式运行。 而Mars上的TensorFlow大部分也一样,区别在于main函数局部的变动。最初,咱们须要通过run_tensorflow_script的形式把脚本运行到Mars中。 二、典型场景场景1. CPU和GPU混合计算在平安和金融畛域能够用Mars做CPU和GPU的混合计算,减速现有的工作流。 在这个畛域,因为传统大数据平台开掘周期长,资源缓和,须要很久来执行工作,不能达到客户需要。所以能用Mars DataFrame来减速数据处理,它能够做大规模数据排序,并帮忙用户做高阶统计和聚合剖析。 另外在平安畛域有很多无监督学习的算法,Mars learn能减速无监督学习,同时拉起分布式深度学习计算减速现有的深度学习训练。之后,对于某些计算工作也能够利用GPU来减速。 场景2. 可解释性计算在广告畛域,在广告归因和洞察特色的解释算法中,因为自身计算量大,所以耗时很长。这种状况下,单机减速是比拟艰难的,基于传统大数据平台的分布式也不太灵便,然而通过Mars remote,能够很轻松地把计算散布到几十台机器上来减速,达到百倍的性能晋升。 场景3. 大规模K-最邻近算法Mars十分宽泛地利用在K-最邻近算法中,因为Embedding越来越风行,它让向量表述实体十分常见。另外,Mars的NearestNeighbors算法兼容scikit-learn,它外面有暴力算法,而用户也须要暴力算法来进行大规模计算,能够通过多个worker来实现,从而让性能晋升百倍。最初,Mars反对分布式的形式减速Faiss和Proxima,达到千万级别和上亿级别的规模。 三、DemoDemo1. 剖析豆瓣电影数据咱们从这个Demo看一下Mars如何减速pandas数据处理及其可视化。 开始演示之前咱们须要装置Mars。这里曾经创立了Jupyter,而后 pip install pymars。 装置之后,咱们能够到IPython进行验证,能够看到上面的后果没有问题,接下来咱们就能够进入到Jupyter notebook里。 咱们开始demo。这个数据能够在GitHub地址下载,而后咱们用pandas来剖析电影的数据,应用ipython memory usage来查看内存应用。 咱们的数据次要用到4个CSV文件,别离是movies、ratings、users和comments。 接下来依据上映日期统计有多少电影公布。这里先解决一下数据,让发行日期只取到年份,去掉日期,并对年份做聚合。 数据进去后,能够用pandas bokeh把图绘制进去,并通过交互式的形式查看。 接下来看电影评分的统计。首先把有评分的电影筛选进去,而后把豆瓣评分的数值数量从大到小进行排序。能够看到,最多的评分是6.8分。 同样,通过pandas bokeh把它画成柱状图,评分差不多出现正态分布。 接下来做一个标签词云,看电影哪个标签词最多,这里从movies取出tags,用斜杠宰割,而后max words是50。 接下来咱们再对电影的Top K进行剖析。首先按电影ID进行聚合,求出评估的平均值和个数。而后咱们对评估个数进行过滤,从高到低,算出top20的电影。 而后做评论数据分析。因为评论是中文的,所以须要做一个分词,而后对每一句话做切分,在统计的时候进行排序。这里能够加一个进度条,在解决数据的时候不便看到过程。这个过程大略花了20分钟,所以在单机上跑大工作的时候对机器的压力还是比拟大。 这是最终的词云图。 接下来咱们用Mars做同样的剖析工作。首先是对Mars环境进行部署,而后这里有5个worker,每个worker是8个CPU和32G内存。还是一样,咱们关上内存的监控,做一些import,这里把import Pandas替换成import mars.dataframe,而后Numpy是import mars.tensor。 ...

December 23, 2020 · 1 min · jiezi

关于jquery:jQuery-Ajax-Post请求连续多个问号特殊数据异常问题

问题场景jquery ajax,非jsonp申请,post数据中json蕴含多个问号,比方“{“a”:“aa??”}”。申请时前端报错,因为jsonp的参数加到了post数据中的??地位,就无奈通过url传入了。 报错信息(生产环境) "parsererror" SyntaxError: Unexpected token ':' at eval (<anonymous>) at eval (jquery.js:339) at Function.globalEval (jquery.js:340) at text script (jquery.js:9773) at ajaxConvert (jquery.js:8843) at done (jquery.js:9260) at XMLHttpRequest.callback (jquery.js:9720) "{}"或者(开发环境) "parsererror" Error: jQuery111009581711862361235_1597629221274 was not called at Function.error (jquery.js?1157:248) at s.converters.script json (jquery.js?1157:9893) at ajaxConvert (jquery.js?1157:8843) at done (jquery.js?1157:9260) at HTMLScriptElement.script.onload.script.onreadystatechange (jquery.js?1157:9831) "{}"或者(后盾接收数据) 前端发送的含 ?? 的字符变成相似 jQuery183554546_6546423242342 模式的字符。 问题起因咱们找到jquery的这段代码 // Detect, normalize options and install callbacks for jsonp requestsjQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { var callbackName, overwritten, responseContainer, jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? "url" : typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" );看到如果data中存在??这种非凡写法,rjsonp.test( s.data )返回true,最终将"data"赋值给jsonProp。而data中不存在??就会给jsonProp赋值为false。 ...

December 22, 2020 · 2 min · jiezi

关于jquery:Serverless-落地之痛怎么解

传统业务在开发上线的过程中,须要团队单干,每个人开发一部分,合并代码,开发联调,而后进行资源评估,测试环境搭建、线上环境搭建、测试上线、运维。然而在 Serverless 时代下,开发者只须要开发本人那局部性能/函数,而后部署到测试环境、线上环境即可,前期很大一部分运维工作都不必思考和放心。 明天大家对是不是该用 Serverless 存在疑难,很大水平上是因为短少胜利的案例和最佳实际。往年双11,阿里云实现了国内首例 Serverless 在外围业务场景下的大规模落地,扛住了寰球最大规模的流量洪峰,发明了 Serverless 落地利用的里程碑。 如何让更多企业和开发者将 Serverless 利用到业务场景中,也就是让 Serverless 从理念到落地,是一个辣手的问题。 例如传统我的项目如何迁徙到 Serverless,同时保障迁徙过程业务连续性,在 Serverless 架构下如何提供欠缺的开发工具、无效的调试诊断工具,如何利用 Serverless 做更好的节约老本等,每一个都是难题。尤其波及到在支流场景大规模的落地 Serverless ,更是并非易事。正因为这样,业界对于外围业务场景规模化落地 Serverless 最佳实际的召唤更加迫切。 接下来咱们来看看 Serverless 在落地过程中会遇到的痛点。 Serverless 落地之痛痛点1:冷启动耗时长快弹是 Serverless 人造自带的属性,然而快弹的条件是要有极致的冷启动速度去撑持。在非核心业务上,毫秒级别的延时,对业务来说简直不受影响。然而,对于外围业务场景,延时超过 500 毫秒曾经会影响到用户体验。尽管 Serverless 利用轻量化的虚构技术,一直的升高冷启动,甚至某些场景能升高到 200 毫秒以下。 但这也只是现实的独立运行场景,在外围业务链路上,用户不仅是运行本人的业务逻辑,还要依赖中间件、数据库、存储等后端服务,这些服务的连贯都要在实例启动的时候进行建设连贯,这无形中加大了冷启动的工夫,进而把冷启动的工夫加长到秒级别。对于外围在线业务场景来说,秒级别的冷启动是不可承受的。 痛点2:与研发流程割裂Serverless 主打的场景是像写业务函数一样去写业务代码,简略疾速即可上线,让开发者在云上写代码,轻松实现上线。然而在事实中,外围业务的要求把开发者从云上拉回到事实,面对几个灵魂拷问:如何做测试?如何灰度上线?如何做业务的容灾?如何管制权限?当开发者答复完了这些问题,就会变的心灰意冷,原来在外围业务上线中,“函数失常运行”只占了小小的一环,离上线的间隔还有长江那么长。 痛点3:中间件的连通问题外围在线业务不是独立函数孤立运行的,须要连贯存储、中间件、数据中后盾服务,获取数据后再计算,进而输入返回给用户。传统中间件客户端须要买通和客户的网络、初始化建连等一系列操作,往往会使函数启动速度降落很多。Serverless 场景下实例生命周期短、数量多,会导致频繁建连、连接数多的问题,因而针对在线外围利用罕用的中间件的客户端进行网络连通优化,同时对调用链路进行监控数据买通,帮忙 SRE (Site Reliability Engineer )从业者更好的评估函数的上游中间件依赖状况,对于外围利用迁徙上 Serverless 十分重要。 痛点4:可观测性差用户大多数的外围业务利用多采纳微服务架构,看外围业务利用的问题也就会带有微服务的个性,比方用户须要对业务零碎的各种指标进行十分详尽的查看,不仅须要查看业务指标,还须要查看业务所在零碎的资源指标,然而在 Serverless 场景中没有机器资源的概念,那这些指标如何透出?是否只透出申请的错误率和并发度,就能够满足业务方的需要? 实际上,业务方的需要远不止这些。可观测性做的好坏还是源于业务方是否信赖你的技术平台。做好可观测性是博得用户信赖的重要前提。 痛点5:近程调试难度高当外围业务呈现线上问题时,须要立刻进入考察,而考察的第一因素就是:现场的保留,而后登录进行调试。而在 Serverless 场景中没有机器层面的概念,所以如果用户想登录机器,在现有的 Serverless 根底技术之上是很难做到的。当然起因不仅限于此,比方 Vendor-lockin 的放心等。 下面几大类痛点的概括,次要是针对开发者的开发体验,对于理论的开发场景中,是否真的是"提效",而不是新瓶装旧酒。目前仍有大部分外围利用开发者对 Serverless 还是持有张望状态,当然也不乏一些质疑观点,认为 FaaS 只适宜小业务场景以及非核心业务场景。 ...

December 22, 2020 · 2 min · jiezi

关于jquery:揭秘大流量场景下发布如丝般顺滑背后的原因

为什么很多互联网公司不敢在白天公布,都抉择在中午公布。要是能解脱中午公布的困境,它不香吗?抉择在中午公布无非是为了缩小对用户的影响,出了问题影响面可控。 那咱们就来谈谈,发布会有哪些问题。 若您的利用没有高低线的问题,您的任何利用在公布的过程中会造成短暂的服务不可用,短时间内业务监控会呈现大量 io 异样报错,对业务的连续性造成困扰。公布是整个性能更新到线上的最初一个环节,一些研发过程中累计的问题,在最初公布环节才会触发。如果此时是白天大流量的场景,极小的问题因为大流量的因素都会被疾速放大,影响面难以管制。公布若波及到多个利用,如何进行正当地公布并且不会有版本问题导致流量受损。所有公布的问题大抵总结为以上三条,接下来我会分几篇文章具体讲一下为什么会有这些问题,曾经咱们如何解决这些问题。也心愿大家都能够早点上班,解脱中午公布的困境,抽出工夫多陪陪家人。 本文将围绕实例高低线场景,讲述公布过程中的问题。 大流量下的利用公布现状利用 DemoDemo 以 Spring Cloud 为例,咱们筹备了如下demo。流量是阿里云性能测试服务PTS发动,通过开源的Zuul网关流入咱们的零碎 PTS应用文档:https://pts.console.aliyun.com/其中其服务调用链路如下图所示: 图中流量从 Netflix Zuul 对应的 Ingress 进来,会调用 SC-A 利用对应的服务,SC-A 利用外部调用 SC-B 利用的服务,SC-B 利用外部调用 SC-C 利用的服务。 Helm 部署 Demohelm install mse/mse-samplesDemo为纯开源Spring Cloud架构,我的项目地址: https://github.com/aliyun/alibabacloud-microservice-demo/tree/master/microservice-doc-demo/traffic-management部署结束后,阿里云容器服务上的工作负载状况如下: 咱们通过 while true; do curl http://{ip:port}/A/a;echo;done shell 命令一直地去拜访 Spring Cloud 服务,咱们能够看到咱们 demo 的作用仅仅是打印以后服务的ip,咱们能够看到咱们 demo 的作用仅仅是打印以后服务的 ip,咱们能够看到整体调用的链路。 while true; do curl http:_//{ip:port}/A/a;echo;done_A[10.0.0.81] -> B[10.0.0.82] -> C[10.0.0.68]A[10.0.0.179] -> B[10.0.0.82] -> C[10.0.0.50]A[10.0.0.80] -> B[10.0.0.82] -> C[10.0.0.68]A[10.0.0.49] -> B[10.0.0.82] -> C[10.0.0.50]A[10.0.0.81] -> B[10.0.0.175] -> C[10.0.0.68]A[10.0.0.179] -> B[10.0.0.175] -> C[10.0.0.50]A[10.0.0.80] -> B[10.0.0.175] -> C[10.0.0.68]A[10.0.0.49] -> B[10.0.0.175] -> C[10.0.0.50]A[10.0.0.81] -> B[10.0.0.82] -> C[10.0.0.68]...配置压测 500 qps,并在压测的过程中别离进行利用缩容、扩容以及公布,并察看压测的状况。 ...

December 22, 2020 · 1 min · jiezi

关于jquery:直播回顾Mars加速数据科学的新方式

简介: 本文从数据迷信概念、背景和现状切入,引出减速数据迷信的新形式Mars,并介绍了Mars具体能解决的一些问题和背地的逻辑、哲学,同时对Mars整体数据处理流程进行了介绍。 本文分为4个局部: Mars的背景和现状Mars解决了什么问题Mars背地的哲学总结与瞻望一、Mars的背景和现状说到减速数据迷信的新形式,就不得不说什么是数据迷信,以下是维基的定义: 数据迷信通过使用各种相干的数据来帮忙非专业人士来了解问题。第一,它的指标是从数据中提取输出价值的局部,第二,它要生产数据产品,第三它联合了十分多重要的技术,包含数学、统计、机器学习、可视化,最初,它须要真正解决问题。 它蕴含三个方面,计算机科学、数学和统计、畛域和商业常识。它们联合起来别离是机器学习、软件开发和传统钻研,两头是数据迷信。 数据科学技术栈蕴含语言、数据分析、数据工程、机器学习、Web开发、运维和商业智能。每个技术栈都蕴含不同的工具,提供不同的数据服务。 传统Python数据迷信栈的三大底座是NumPy、Pandas和SciPy。NumPy是最外围的局部,它用来做数值计算,简直其余所有Python的数据科学技术栈都建设在NumPy上,因为它有最根底的数据结构,也就是多维数组;另外,Pandas也用NumPy实现,它下面有很多API来进行剖析操作;而SciPy次要负责科学计算。在此基础上,是机器学习和可视化,同时还有丰盛的Python函数。 下面是Python数据科学技术栈整体的情况,他们有几大益处,比方宽泛应用,是事实标准;上手成本低,容易为初学者和学生入门;和语言联合严密,能用Python来组织函数调用。然而它们都是单机的库,不能解决很大的数据量,所以须要用到大数据的数据工程技术栈,比方Hadoop、Hive、Spark等。它们尽管反对多语言,没有强绑定,然而学习门槛比拟平缓,也须要对系统自身有足够的理解。做数据迷信须要把精力放在数据自身,而不是工具,然而这几个库让工作围绕着库开展,而非数据。因而,咱们是否能把这两个工作连接起来,利用传统的技术价值而不是关注大数据系统自身,来解决很多问题。 当初大家说摩尔定律曾经生效,咱们能够回顾一下它的历史。晚期它通过简单指令集和精简指令集的形式让速度晋升,然而随着缩放比例定律和阿姆达尔定律的终结,将来是不是要20年能力达到2倍效率的晋升呢? 另外随着深度学习、机器学习和AI的炽热,机器学习模型也会越来越大,它的训练曾经呈指数级增长,然而摩尔定律并没有追上机器学习模型训练倒退的速度。 另外一个现状就是技术栈的问题,NumPy、Pandas等它们更多只能在单核上来利用计算,然而阿姆达尔定律下的核数是会越来越多,所以并没有很好地进行利用。同时,不论是计算量还是数据规模的增长速度,都超过了摩尔定律的速度,所以也不能用单机解决问题。 基于以上,减速数据迷信次要有两种形式。第一是Scale up,利用多核和更好的硬件,比方GPU、FPGA和TPU等,以及现有的库,包含Modin、CuPy、Rapids等来晋升效率。第二是 Scale out,利用分布式的形式来减速,因为单核的性能总归是无限的,能够利用Ray、Dask和Modin等。而联合Scale up和Scale out,就能够构建一个大规模的更好的硬件集成,比方明天介绍的减速数据迷信的新形式Mars。 二、Mars解决了什么问题Mars就是咱们试图构建的“桥”,能来兼顾小规模和大规模数据处理。大规模数据处理能构建集群,有三种次要形式,第一是在物理机上,第二是kubernetes,第三是Hadoop Yarn的调度器上,拉起Mars的集群。 Mars的外围根底局部对应着传统Python数据技术栈,比方Mars Tensor对应NumPy,DataFrame对应Pandas等。而构建在这个根底之上的,是Mars Learn模块,它能够兼容Scikit-learn API,能简略地进行更大数据规模的分布式解决。此外,Mars还反对深度学习和机器学习的框架,比方能轻松运行TensorFlow、PyTorch等,而且可视化也能够在Mars上发表。除此之外,Mars还反对了丰盛的数据源。 从传统Python技术栈到Mars也非常简单,比方在NumPy和Pandas里要变成Mars,只须要替换import,而后前面变为提早执行即可。 一般的Python函数,在调用的时候变成mr.spawn来提早这个过程,最初通过execute来并发执行,不必放心Mars是运行在单机上还是分布式运行。 而Mars上的TensorFlow大部分也一样,区别在于main函数局部的变动。 三、Mars背地的设计哲学 第一是分而治之,不反复造轮子。比方创立一个Mars的Tensor,对外面所有元素进行求和操作,在触发execute之后,Mars会生成小工作的计算图,它能够将小任务调度到分布式的集群中来运行。此外还做了很多优化,通过算子交融来晋升性能。 第二,在Mars的世界,所有皆可并行。在Mars里实现了并行正则排序算法,比方创立一个cluster,有5个Worker,每个Worker是8核32G,那么相比单机的NumPy函数,它晋升了4倍。 上面看下Mars整体数据的解决流程。咱们通过客户端的代码触发执行,生成一个粗粒度的计算图,而后通过Web服务器提交工作,并将工作转发给Scheduler,而后在这里切分成小工作。随后,Scheduler依据Worker工作负载的状况来把它散发到各个机器上运行,这里会用到调度的策略等等。这个过程中,Mars会主动触发数据传输工作,保障在节点执行的时候它所有输出的数据都在这台机器上。此外Mars还会主动进行Spill操作,当咱们内存不够的时候,它会把不罕用的数据Spill到磁盘上,让Mars能够解决远超过这个内存能放下的数据规模。 四、总结与瞻望 首先Mars是齐全开源的我的项目,齐全遵循开源的标准,而且我的项目的progress都能在GitHub上看到;其次Mars有兼容性,它的API高度兼容NumPy、Pandas和Scikit-learn;同时,它的单机、多核与分布式的解决性能也更高;最初是交互性,Mars Remote能够把以前的代码变成分布式代码,并且外部也能够与第三方库做集成。 Github地址:https://github.com/mars-project/mars 上面是对于Mars将来的瞻望,大家能够拜访专栏。将来咱们的开发计划重心放在晋升Mars learn的接口覆盖率和Mars DataFrame接口覆盖率上,对立单机和分布式执行层等等。 原文链接本文为阿里云原创内容,未经容许不得转载。

December 22, 2020 · 1 min · jiezi

关于jquery:dubbogo-30牵手-gRPC-走向云原生时代

作者 | 李志信  于雨起源|阿里巴巴云原生公众号 自从 2011 年 Dubbo 开源之后,被大量中小公司采纳,始终是国内最受欢迎的 RPC 框架。2014 年,因为阿里外部组织架构调整,Dubbo 暂停保护了一段时间,之后随着 Spring Cloud 的面世,两个体系在交融中一起助推了微服务的炽热。 不过这世界变动快,自从以 docker 为代表的的容器技术和以 K8s 为代表的容器编排技术登上舞台之后,云原生时代到来了。在云原生时代,不可变的基础设施给原有的中间件带来了不可变的中间件基础设施:gRPC 对立了底层通信层;protobuf 对立了序列化协定;以 envoy + istio 为代表的 service mesh 逐步对立了服务的管制面与数据面。 dubbogo 的人造使命是:Bridging the gap between Java and Go。放弃 Go 利用与 Java 利用互联互通的同时,借助 Go 语言(事实上的第一云原生语言)的劣势拥抱云原生时代。dubbogo 社区 2020 年勠力打造三支箭: 曾经公布的对齐 dubbo 2.7 的 dubbogo v1.5 版本;近期将要公布的 sidecar 状态的 dubbo-go-proxy 我的项目;以及处于进行时的 dubbogo 3.0。用一句话概括 dubbogo 3.0 即是:新通信协议、新序列化协定、新利用注册模型以及新的服务治理能力!本文次要着重探讨 dubbogo 3.0 的新通信协议和利用级服务注册发现模型。 ...

December 17, 2020 · 3 min · jiezi

关于jquery:分布式事务框架-seatagolang-通信模型详解

简介: Java 的世界里,大家宽泛应用的一个高性能网络通信框架 netty,很多 RPC 框架都是基于 netty 来实现的。在 golang 的世界里,getty 也是一个相似 netty 的高性能网络通信库。getty 最后由 dubbogo 我的项目负责人于雨开发,作为底层通信库在 dubbo-go 中应用。随着 dubbo-go 募捐给 apache 基金会,在社区小伙伴的共同努力下,getty 也最终进入到 apache 这个小家庭,并改名 dubbo-getty 。 作者 | 刘晓敏 于雨 一、简介Java 的世界里,大家宽泛应用的一个高性能网络通信框架 netty,很多 RPC 框架都是基于 netty 来实现的。在 golang 的世界里,getty 也是一个相似 netty 的高性能网络通信库。getty 最后由 dubbogo 我的项目负责人于雨开发,作为底层通信库在 dubbo-go 中应用。随着 dubbo-go 募捐给 apache 基金会,在社区小伙伴的共同努力下,getty 也最终进入到 apache 这个小家庭,并改名 dubbo-getty 。 18 年的时候,我在公司里实际微服务,过后遇到最大的问题就是分布式事务问题。同年,阿里在社区开源他们的分布式事务解决方案,我也很快关注到这个我的项目,起初还叫 fescar,起初更名 seata。因为我对开源技术很感兴趣,加了很多社区群,过后也很关注 dubbo-go 这个我的项目,在外面默默潜水。随着对 seata 的理解,逐步萌发了做一个 go 版本的分布式事务框架的想法。 ...

December 14, 2020 · 9 min · jiezi

关于jquery:千万商家的智能决策引擎AnalyticDB如何助力生意参谋双十一

作者:算法&健兮,阿里巴巴数据技术及产品部技术专家 生意顾问介绍生意顾问是阿里官网打造的全渠道、全链路、一站式数据平台,致力于为用户提供经营剖析、市场洞察、客群洞察等多样化数据服务,帮忙用户全面晋升商业决策效率。自2011年诞生以来,生意顾问服务过的用户已逾3000万,笼罩了线上线下零售商(淘宝天猫)、品牌商(批发通)、智慧门店、内贸批发商(1688)、内容创作者(微淘等)、东南亚国内商家(LAZADA)等多个业态商业用户。 目前,淘宝天猫商家中,月有交易的商家,99%以上都在应用生意顾问。生意顾问通过将近十年的倒退,曾经撑持了99%淘宝天猫商家的决策经营,在如此宏大的商家群体下,每个商家对于数据的诉求都不一样• 对于中大型商家,有本人的数据分析师团队,更心愿本人对原始数据进行加工与展现,• 对于中小型商家心愿能够提供更加不便的一键式服务• 对于一些品牌商,心愿看到长达数年的历史数据分析多种多样的剖析需要对生意顾问的架构提出了微小的挑战,借助于云原生数据仓库AnalyticDB MySQL的弱小能力,生意顾问与QuickBI团队强强联合,打造了“商家自助剖析”产品,帮忙商家定制本人的数据报表,满足商家对本身各维度数据进行得心应手的剖析需要,帮忙千万商家实现“数据价值在线化”。 商家剖析的业务挑战1)海量数据高并发简单查问生意顾问服务几百万商家,数据量是十分宏大的,如果存储3年数据,仅一个商品维度数据表,就能到千亿条记录。然而咱们要满足商家对这些数据表,进行任意维度的数据查问、筛选、关联、聚合、计算、排序等操作,并且要求毫秒级返回。例双十一期间咱们的简单查问QPS超过300,在这种高并发低延时场景下对数据库带来微小的挑战。 2)在线查问和批处理混合负载为了降低成本,生意顾问“商家自助剖析”产品不能将所有的商家数据全副写入剖析库,须要对订购的商家须要在商家当天回补所有的历史数据,要求单商家6000W数据分钟级实现商家历史数据回补。在数据回补时,高并发查问与写入要求同时运行,互相不影响,对剖析库的混合负载要求很高。 3)任意维度的灵便报表能力生意顾问“商家自助剖析”产品的基本需要是满足商家各式各样的剖析需要,须要为商家能够提供灵便配置报表的能力,这时候一个成熟的BI解决方案必不可少。 4)商家数据安全性要求高商家对于本身的数据安全要求十分高,生意顾问“商家自助剖析”产品既要让商家可能得心应手的进行数据分析,又要防止数据的泄露,也要避免数据被爬取、避免程度越权泄露。 全套成熟BI计划 - AnalyticDB + QuickBI生意顾问抉择了 AnalyticDB(以下简称ADB) + QuickBI 一整套成熟的BI解决方案。 QuickBI介绍Quick BI是阿里云成熟的自助剖析报表平台,是国内首个且惟一入选Gartner魔力象限的BI产品。产品通过几年的积淀已无缝对接各类云上数据库和自建数据库,0代码鼠标拖拽式操作,让业务用户也能一键轻松实现海量数据可视化剖析。并且QuickBI提供弹内部署能力,能够通过生意顾问为入口,对商家提供对立的服务。让商家在产品心智上感触到,一个数据分析平台,没有思考零碎间切换的问题。真正实现一个平台,满足用户数据分析需要。 AnalyticDB云原生数据仓库AnalyticDB是阿里云自研的云原生数仓库,全面兼容MySQL语法,为剖析而生,领有杰出的剖析性能。 1)MySQL兼容,好用是数据库价值真正的体现,AnalyticDB高度兼容MySQL,根本无需批改代码即可像应用MySQL一样应用AnalyticDB,迁徙应用老本极低。对于MySQL社区周边工具也能够无缝接入,因而和QuickBI的配合就像应用MySQL一样简略。2)高性能高并发,AnalyticDB为剖析而生,领有业界最快的查问性能,通过行列混存、自适应索引,联合向量化的分布式执行引擎实现大部分查问简单能够在毫秒级实现;同时通过在线化的调度和云原生的弹性扩大能力,能够反对大量商家的在线并发拜访。3)混合负载,在存储计算拆散的架构下,AnalyticDB能够混合计算负载能力,在经典的在线(online)/交互式(interactive)查问执行模式之外,也反对了离线/批处理(batch)查问执行模式。因而针对在大量商家高并发在线查问的同时,同时能够进行并发的数据写入、加载和回补,实现业务一套零碎的混合负载解决。 4)安全可靠,AnalyticDB基于云原生的VPC网络构建,同时对数据有库、表、列等多级权限爱护,同时还反对通过内容数据的加解密,能够满足商家数据的安全性要求。总结下,AnalyticDB能够从任意维度进行查问、筛选、聚合、计算、排序等操作,性能反对亚秒返回,并且反对实时写入,反对大型ETL与高并发查问混合负载等个性十分符合商家自助剖析业务。并且,QuickBI 完满反对AnalyticDB作为数据源头,与商家自助剖析业务完满符合。 生意顾问业务架构生意顾问自助服务的实质是一套安全可靠,稳固灵便的BI计划。在底层,生意顾问将订购商家数据寄存在AnalyticDB中,依靠于AnalyticDB + QuickBI的生态,建设商家我的项目空间,同时买通生意顾问与QuickBI权限体系,撑持起商家自助剖析需要。 数据同步生意顾问自助剖析,借助AnalyticDB反对高吞吐实时写入的个性,通过订购当天回补历史数据的形式, 解决了客户对于长周期数据的剖析诉求。对于新订阅用户,须要将历史数据按天级别增量同步至AnalyticDB中,这个是零碎设计的一个难点。借助AnalyticDB实时数据写入的能力,咱们设计了自助剖析-数据增量同步计划,无效解决了历史数据的增量同步。 数据安全生意顾问整体数据架构是全副用户共享AnalyticDB存储,不同商家是通过商家ID来辨别,针对此种非凡场景,QuickBI的数据集反对了逻辑隔离,商家开明时,通过后盾接口初始化好商家数据集,注入商家ID参数,即便用户编辑模仿也无奈替换掉,保障了商家数据的安全性。同时通过行级权限,将不同版本的付费商家查看指标做了管控,确保了产品的利益不受损害。 业务价值所有自助剖析自定义配置的报表,都能够抉择配置到生意顾问首页,这样商家的所有子账号,都能在生意顾问首页看到,真正达到了用户定制生意顾问页面能力的成果。其中咱们通过店铺经营剖析,店铺流量剖析,单品深度洞察报告等BI模板,吸引了大量商家自助配置本人的BI报表。 将来瞻望将来咱们心愿能够持续在数据价值上的摸索,心愿继续与AnalyticDB + QuickBI放弃共建,推动数据价值在线化,让商家数据分析更加简略高效。 业务资源隔离在 AnalyticDB MySQL版新推出的弹性状态下实现了资源组性能,通过新建资源组能够从现有实例划分出局部计算节点,这些计算节点资源只归属该资源组。用户可将数据库账号绑定到不同的资源组,SQL查问时依据绑定关系主动路由至对应的资源组执行,满足用户实现外部多租户隔离需要。咱们对于不同的大商家,能够进行隔离,确保大商家业务的稳定性,提供更好的业务体验。 查问负载治理在自助BI的零碎中始终存在一个痛点,单个用户配置了不合理的报表,读取超大量的数据,进行超出预期的计算,影响其余商家的报表展现,为此咱们在零碎中须要做诸多限度,比方用户报表只能基于单表,不能够做多表联结剖析,这样大大限度了商家报表的灵活性。为此咱们冀望AnalyticDB提负载治理的能力,通过咱们指定查问资源耗费,读取数据耗费等维度限度,来对查问进行 KILL,切换资源组等行为,保障数据库稳定性。 智能化诊断须要做好监控和边界问题的发现机制,在呈现问题时可能疾速定位。冀望可能充分利用AnalyticDB的监控能力,在呈现问题前第一工夫预警,躲避问题的产生。为此,AnalyticDB将提供全方位、多维度以及准实时的实例运行状况洞察能力,通过对实例外部的各类运行日志和时序指标进行算法建模,提供出问题前精确预测、出问题时及时告警、解决问题时精准定位的能力,确保不影响用户下层业务。 原文链接本文为阿里云原创内容,未经容许不得转载。

December 14, 2020 · 1 min · jiezi

关于jquery:从搜索引擎到核心交易数据库详解阿里云神龙如何支撑双11

简介: 订单峰值58.3万笔/秒,销售额4982亿,阿里云神龙再次胜利扛住了寰球流量洪峰 2020年的双11,天猫又发明了新的纪录:订单峰值达到创纪录的58.3万笔/秒,销售额达到历史新高4982亿,阿里云神龙再次胜利扛住了寰球流量洪峰。2020年是双11全面云原生化的第一年,也是神龙架构顺利撑持双11的第三年。 往年双11,基于第三代神龙架构,搜寻、广告以及外围交易数据库等存储和网络高负载业务实现全面云化,神龙输入千万核CPU计算能力,实现了阿里巴巴经济体所有业务负载100%在神龙私有云部署。 两年前,阿里云神龙首次撑持双11大促;去年,双11外围零碎全面on神龙;往年,双11所有业务部署在神龙私有云。神龙架构已间断三年顺利撑持双11,每年不变的是判若两人的体现安稳,为用户提供了如丝般顺滑的购物体验,而变动的是神龙架构的一直降级和迭代。 本文将为大家揭秘双11最具挑战的搜寻广告、金融级业务外围交易数据库如何迁徙至第三代神龙架构,再详解神龙架构如何撑持阿里巴巴最大规模云原生实际落地,最初是神龙架构如何通过宕机演练大考、备战双11的背地故事。 最具挑战、没有之一,搜寻广告业务降级至第三代神龙架构对于电商平台来说,搜寻性能是最外围的性能,百微秒的后果展现提早都将间接影响到平台用户最终交易的转化,用户体验至关重要。所以,搜寻广告业务对计算和网络的性能要求是极尽刻薄的,而这也是目前神龙架构面临的最具挑战的业务,没有之一。 往年双11,搜寻广告业务撑持了数以千计的会场场景,日均商品曝光千亿次;日均模型公布上万次,单模型容量1TB+,模型参数达千亿级,实时每分钟更新1亿模型参数;日均样本数据处理达100PB,单次申请超过200亿次浮点运算。这些数据的背地,搜寻业务团队对底层基础设施提出了两大挑战。 1、极致的性能需求,要求双向百G全线速解决网络流量 依据历史数据预测,双11凌晨零点线上搜寻广告业务的网络带宽将达到双向100G极限全线速,所以要求基础设施资源能配合提供双向100G全线速(line speed)流量带宽解决的能力,以确保顺利撑持零点流量峰值。理论在双11当天零点,线上大部分网络流量均来自搜寻广告业务的弹性裸金属实例,网络带宽均如预期达到了极限全线速。 第三代神龙架构,通过网络硬件加速实现了网络带宽全线速解决,能够提供100Gbps网络带宽、2400万PPS网络转发和100万云盘IOPS,极好地满足了搜寻广告业务双向100G全线速流量带宽的解决需要,不仅帮忙搜寻广告业务顺利扛过了双11零点流量洪峰,同时还晋升了资源的利用率。 2、进一步晋升离线搜寻和在线搜寻混部服务质量 搜寻广告业务分为在线搜寻和离线搜寻,这两个系统对资源的需要是人造互斥的:离线搜寻业务要求极高吞吐能力,须要确保数以亿计的数据能够在15分钟内实现解决实现;在线搜寻则是对时延有极高的要求,须要确保1000万数据亚秒级解决的实时性和极高的可用性。 第三代神龙架构引入了高级QoS个性,可多级调度网络和存储QoS,实现多维度精准调度,极好地撑持搜寻广告的离线业务和在线业务混部,最终帮忙搜寻广告业务实现了同时达到在线业务低时延和离线业务高吞吐的混部业务指标。 事实上,在阿里巴巴团体理论的业务场景中发现,在同样的资源配置的状况下,神龙裸金属比一般物理机的QPS能够晋升30%,延时能够升高96.3%,资源利用率也有大幅晋升。 扛住58.3万笔/秒新峰值,外围交易数据库on神龙11月11日零点刚过26秒,天猫双11订单达到58.3万笔/秒的峰值,是2009年首次双11的1457倍,每一笔剁手交易操作都会经验一系列外围交易数据库的解决,如何保障寰球最大规模交易顶峰的海量订单的有序、精确和顺滑成为了外围交易数据库的挑战。 家喻户晓,数据库自身就是一个重存储的业务,外围交易数据库更是对资源的IOPS、时延等性能指标极其敏感。双11外围交易数据库之所以抉择神龙架构,是因其可能满足“高并发、低时延、高稳固”三大需要。 高并发:在双11这样寰球常见的超大规模并发量场景下,计算能力是一个关键因素。降级迭代后的第三代神龙架构,存储和网络性能均达到500%晋升,VPC云网络全线速转发,存储IOPS可达100万,存储每秒吞吐量可达到5GB,齐全能够满足外围交易系统的交易顶峰的订单解决需要。低时延:得益于神龙芯片的减速能力,基于神龙架构的第六代增强型实例读提早最低200 s,写提早能力100s,每一个数据包最低提早为20s。在理论场景中,十分好地满足了外围交易数据库的时延需要。高稳固:与其余无状态业务不同的是,外围交易数据库要求金融级的稳定性和容灾。稳定性恰好也是神龙架构最器重的,神龙架构自研了十分轻量级的Dragonfly Hypervisor,在计算的抖动性方面能够做到百万分之一级别。得益于此,神龙架构顺利帮忙外围交易数据库顺滑地撑持了双11购物季。神龙架构,为寰球最大规模的云原生实际提供撑持2020年双11最重要的是实现了寰球最大规模的云原生实际,发明了诸多的“云原生的第一次”:80%外围业务部署在阿里云容器ACK上,可在1小时内扩大超百万容器;首次大规模利用Serverless,弹性伸缩性能晋升10倍以上;云原生中间件峰值调用量超百亿QPS。 与此同时,计算的纪录也被一直刷新:实时计算Flink解决峰值达40亿条/秒,相当于一秒看完500万本新华字典的所有信息;MaxCompute单日计算数据量达1.7EB,相当于为寰球70多亿人每人解决230张高清照片。 神龙架构是真正为云原生场景打造的计算平台,为这场最大规模的云原生实际提供了松软的底座。神龙架构通过I/O offload芯片减速,对容器等产品适配水平极高,能高效调度和自动化弹性伸缩的容器化产品,具备在3分钟启动50万核vCPU的极速弹性能力。 事实上,从设计到实现,神龙架构都是“为云而生”,不仅使得阿里云服务器比传统物理服务器性能更强劲,还能极大地帮忙客户节俭计算成本。最终,神龙架构为这场云原生化静止带来了磅礴能源和极致效力:每万笔峰值交易的IT老本较四年前降落了80%,规模化利用交付效率晋升了一倍之多。 单实例可用性99.975%的底气,安稳应答“宕机”突袭大考全链路压测演练是备战双11必不可少的环节,咱们为突袭演练专门设计了App,简化成一个“按钮”,串联了阿里巴巴经济体的各种技术架构和业务伎俩。往年的演练多了一些意料之外的实弹突袭,包含断网攻打、集群宕机攻打和数据中心断电攻打等。突袭攻打如此厉害,让技术工程师们没有一丝丝的防范。 10月某个凌晨的2点,“按钮”被按下,神龙云服务器被注入故障代码,一个领有近千台服务器的集群霎时宕机。 不到2分钟,运维监控大屏显示网络数值迅速上涨,技术保障团队迅速锁定故障源头、启动应急预案,紧急开展修复,随后确认主备切换。 10分钟,主备云服务器实现切换,所有复原如常。 这仿佛很疯狂,但能让公司提前为包含宕机在内的各种故障做好筹备,将其影响降至最低,同时倒逼阿里技术继续进化,包含神龙架构。 神龙架构在这次宕机突袭中体现突出,架构健壮性禁受住了大考,这要归功于ECS提供的主机迁徙的性能,其实现依赖于配置可迁徙、资源可迁徙,网络可迁徙,存储可迁徙等关键技术,能够最小化升高客户业务中断。 同时,神龙架构还会集了阿里云十年累积的上百万服务器历史故障数据、异样预测算法以及软硬联合的故障隔离、硬件加速的热迁徙等能力于一身,可能保障70%以上的惯例软硬件故障在产生之前无感打消。这些也是使得阿里云敢将单实例可用性指标晋升至99.975%、多可用区多实例可用性指标定为 99.995%的底气所在,这也是双11所有业务敢上云的起因之一。 作为阿里云根底产品部门最大的跨部门协同我的项目,第三代神龙架构迭代降级波及到神龙计算、ECS、VPC、存储、AIS服务器和AIS物理网络等泛滥团队,更是通过长达两年的预研评估、产品立项、技术研发和灰度测试,最终才实现了阿里巴巴经济体所有业务负载100%在神龙私有云部署。双11是阿里云产品、技术和服务最大的“试炼场”,全量并顺利承载双11大促所有业务就是神龙架构能力最好的证实。 以后,阿里云自研的神龙云服务器撑持了各种流量顶峰:如12306的春运抢票、微博热点的暴涨流量、钉钉2小时扩容10万台云服务器等。将来,历经多年双11实际考验的神龙架构将致力于更好地帮忙客户实现业务的疾速翻新和飞跃。 原文链接本文为阿里云原创内容,未经容许不得转载。

December 3, 2020 · 1 min · jiezi

关于jquery:云原生体系下的技海浮沉与理论探索

简介: 云原生技术的倒退曾经成为不可阻挡的趋势,目前正是云原生技术大幅度使用到商业化产品的最好机会。在技术体系的改革后,必然会迎来业务模式的改革,咱们都晓得将来会变,如何抓住云原生这个契机,找到属于时代的重要风口呢? 作者 | 王银利(芸峥) 1 . 概述攻技者,短之;实践者,长之;践行者,胜之。能够这么说,一座城市的良心就体现在下水道上,不管这座城市有多少高楼大厦,建设得有如许雄伟,只有是下雨天,雨水就变成了城市良心的测验者。如果由城市建设来类比云原生体系的建设,那么云原生的良心又应该是什么?谁是云原生的暴风雨?谁又是云原生良心的测验者? 云原生带来的业务价值十分多,次要有如下几条:1)疾速迭代:天下文治,唯快不破。咱们想要在残暴的市场竞争中争得一席之地,就必须后发制人。云原生的实质就是帮忙业务疾速迭代,外围因素就是继续交付。2)安全可靠:云原生通过可观测机制,能够疾速让咱们从谬误中复原,同时通过逻辑多租和物理多租等多种隔离形式,限度非法应用。3)弹性扩大:通过将传统的利用革新为云原生利用,做到弹性扩缩容,可能更好地应答流量峰值和低谷,并且达到降本提效的目标。4)开源共建:云原生通过技术开源可能更好地帮忙云厂商关上云的市场,并且吸引更多的开发者共建生态,从一开始就抉择了一条“飞轮进化”式的路线,通过技术的易用性和开放性实现快速增长的正向循环,又通过一直壮大的利用实例来推动了企业业务全面上云和本身技术幅员的不断完善。 接下来,本文将由浅入深,从云原生的方方面面进行剖析,包含根底的概念、罕用的技术、一个残缺的平台建设体系,让大家对云原生有个初步的理解。 2 . 什么是云原生2.1 云原生的定义云原生的定义始终在发生变化,不同的组织也有不同的了解,比拟闻名的有 CNCF 和 Pivotal 。上面是 CNCF 的最新定义: 云原生技术有利于各组织在私有云、公有云和混合云等新型动静环境中,构建和运行可弹性扩大的利用。云原生的代表技术包含容器、服务网格、微服务、不可变基础设施和申明式API。 这些技术可能构建容错性好、易于治理和便于察看的松耦合零碎。联合牢靠的自动化伎俩,云原生技术使工程师可能轻松地对系统作出频繁和可预测的重大变更。 云原生计算基金会(CNCF)致力于培养和保护一个厂商中立的开源生态系统,来推广云原生技术。通过将最前沿的模式民主化,让这些翻新为公众所用。 另外,作为云计算领导者,Heroku 的创始人 Adam Wiggins 整顿了驰名的云原生十二因素(The Twelve-Factor App:https://12factor.net/zh_cn/))。之后,同样作为云计算领导者,Pivotal (已被VMWare收买)的 Kevin Hoffman 出版了 Beyond the 12 factor App 一书,基于原十二因素新增了三个新因素,即云原生十五因素 。 十五因素综合了他们对于 SaaS 利用简直所有的教训和智慧,是开发此类利用的现实实际规范。十五因素实用于任何语言开发的后端应用服务,将流程自动化和标准化,升高新员工的学习老本;并且划清了与底层操作系统间的界线,以保障最大的可移植性。 下图可概览云原生所有的定义和特色: 2.2 云原生实质从字面意思上来看,云原生能够分成云和原生两个局部。 云是和本地绝对的,传统的利用必须跑在本地服务器上,当初风行的利用都跑在云端,云蕴含了 IaaS、PaaS 和 SaaS 。 原生就是土生土长的意思,咱们在开始设计利用的时候就思考到利用未来是运行在云环境上,要充分利用云资源的长处,比方️云服务的弹性和分布式劣势。 云原生既蕴含技术(微服务、麻利基础设施),也蕴含治理(DevOps、继续交付、康威定律、重组等)。云原生也能够说是一系列云技术、企业治理办法的汇合。 一、云原生不是业务自身 好几个人问我云原生是什么,我会反诘他们,如果你想本人的业务疾速迭代,你心愿云原生是什么。云原生肯定不是一个具体的货色,而是代表了如何谋求问题的实质,它原本是什么,就是什么,它是一套方法论。 云原生的实质是帮忙业务疾速迭代,不是业务自身,不是技术重叠,不是生吞活剥。咱们不应该看咱们有什么,而要看客户原本要的是什么。 那么云原生其实就是代表了科技的提高,咱们不光要进步新业务的迭代效率,还要打破旧业务的迭换效率。一个好的架构个别会兼容人类的愚昧,所以这里的旧业务可能是历史包袱,可能是常识瓶颈带来的偏见。 咱们无时无刻都在变成旧,无时无刻都在发明新。人要敢于质疑本人,质疑过来,质疑权威,才有创立新的能源和洞见。 二、云原生不是云计算 云计算(Cloud Computing)和云原生(Cloud Native)有很大区别,次要体现在以下六个方面: 起源云原生应用程序源于云原生。如前所述,它们构建并部署在云中,真正地拜访了云基础设施的弱小性能。云计算应用程序通常是在外部应用传统基础设施开发的,并且通过调整后能够在云中近程拜访。设计 云原生应用程序被设计为多租户实例托管(微服务架构)。云计算应用程序在外部服务器上运行,因而它们没有任何多租户实例。 便捷性云原生应用程序是高度可扩展性,能够对单个模块进行实时更改,而不会对整个应用程序造成烦扰。云计算应用程序须要手动降级,从而会导致应用程序中断和敞开。 价格云原生应用程序不须要任何硬件或软件上的投资,因为它们是在云上进行的,通常能够在被许可方取得,因而应用起来绝对便宜。云计算应用程序通常比拟低廉,因为它们须要进行根底降级以适应一直变动的需要。 ...

December 2, 2020 · 7 min · jiezi

关于jquery:从Gartner报告看中国数据库崛起

简介: 阿里云,在Gartner颁布2020年度寰球数据库魔力象限评估后果,作为中国科技公司代表,首次挺进寰球数据库第一营垒——领导者(LEADERS)象限,这也是中国数据库40年来首次进入寰球顶级数据库行列。 近日,多篇新闻引起数据库圈子的宽泛关注。随着11月国内权威机构Gartner报告的披露,多家国内厂商入围。以阿里、腾讯、华为等公司,获得了长足的提高。特地是阿里云,在Gartner颁布2020年度寰球数据库魔力象限评估后果,作为中国科技公司代表,首次挺进寰球数据库第一营垒——领导者(LEADERS)象限,这也是中国数据库40年来首次进入寰球顶级数据库行列。本文将从Gartner报告动手,谈谈中国数据库力量的崛起。 01解读数据库魔力象限1).何为魔力象限 魔力象限,是由Gartner公司于2006年提出,用以形容特定畛域寰球最权威和最具影响力的厂商综合能力评估报告,是头部厂商产品能力的对标。个别状况下,企业IT决策者可通过这一剖析报告甄别厂商能力,为洽购、投标等提供肯定的根据佐证。其评比规范包含寰球市场份额、产品能力、客户反馈等。在魔力象限中,按横纵坐标分为两个维度剖析。横坐标(Completeness of vision),代表厂商产品的残缺度、覆盖性;纵坐标(Ability to execute),代表厂商的执行力。依据这两个维度,魔力象限划分为四个象限,别离是领导者(Leaders)、挑战者(Challengers)、有远见者(Visionaries)和利基者(Niche Players)。Gartner 公司示意,所谓领导者,其提供的产品应蕴含额定的性能,且能进步市场对这些性能的重要性的意识,从而显示出对市场的影响能力。Gartner 心愿一个领导者可能一直进步其市场份额、甚至霸占整个市场,并且它所提供的解决方案可能引起越来越多企业的共鸣。所谓领导者还必须有能力在寰球范畴内发展销售并提供反对。当然,Gartner也不倡议技术用户只抉择那些位于“领导者”象限里的厂商,对于挑战者、有远见者、乃至利基者也是能够抉择的。哪怕是利基者,也是在某个细分畛域市场有本人独特劣势的厂商。 2).解读往年报告 在最新披露的2020年Gartner报告(如上图)中,出现如下几个特点: 领导者:巨头们的战场在领导者象限,星散了较多的厂商。这外面蕴含了以Oracle、IBM、SAP、Teradata为代表的传统厂商,也包含了AWS、MicroSoft、Google、Alibaba为代表的云厂商。其中,这外面一个标志性事件就是Alibaba第一次跻身领导者象限,这是国内厂商的一大冲破,也是对国内数据库倒退的一种必定。 挑战者:小而美的玩家在挑战者象限的两个厂商,都很具备代表性。一个是Snowflake,云原生数仓的代表性厂商,刚上市就达到700亿美元的估值,正堪称是当红炸子鸡。另一个则是Redis,KV产品的事实代表厂商。这两个玩家,在本人的垂直畛域,都有着十分不错的体现,因此跻身挑战者象限。 有远见者:扩张的小巨头位于远见者象限的厂商,是具备肯定产品覆盖度,但执行力尚有欠缺不足以进入领导者象限厂商。这外面比拟典型的如:Databricks(Spark生态的引领者)、MarkLogic(NoSQL、文档性数据库的代表)、InterSystems(利用开发、数据分析、数据管理方向) 利基者:奋进的追赶者在利基者象限,看到两个国内市场的次要玩家:腾讯、华为。尽管他们在方方面面较领导者仍有差距,但其追赶速度惊人。这两者与阿里,独特形成的中国军团,正在疾速拉近与国内先进厂商的差距。一方面国内宏大的市场为其提供了丰腴的土壤,另一方面其产品、技术实力也通过本身多年积攒已逐渐成熟。 02解读中国力量之崛起数据库,作为外围根底软件之一,在整个IT架构上施展着重要的作用。但长久以来,国外传统大型商业数据库占据国内次要市场。近些年来,咱们欣慰地发现随着云、国产化数据库为代表的新型数据库不断涌现。从下面Gartner的报告到国内企业数据库市场变动可见,中国力量正逐渐崛起。上面从若干景象,看这一趋势。 1).参加国内评估与测试 从下面谈到的Gartner寰球数据库魔力象限,到近些年来Gartner收录的其余分类产品剖析。有越来越多的中国厂商,被提及。从阿里、腾讯、华为等云厂商,到南大通用、巨杉、星环等数据库厂商。更多的中国产品被国外所理解。与Gartner相似的Forrester报告,也呈现出这一特点。除了参加到国内权威机构评估外,国内厂商也积极参与到国际标准的评测之中。这其中以阿里Oceanbase突破TPC-C、AnalyticDB突破TPC-H、TPC-DS为代表。这不仅是一种实力的代表,也是积极参与到国际标准的制订标准之中,让中国声音更多参加到全球化中。 2).迈出国门参加全球化 作为进入Gartner象限领导者的考查要点,是否有海内市场也很要害。作为国内云厂商的代表,阿里云此次进入领导者象限正是基于其近些年参加多海内市场之中。随着更多的海内Region的部署、更多的客户案例,曾经有越来越多的国外用户应用到了中国的数据库产品。特地是在亚太市场,国内云厂商产品领有很强的竞争力,并且放弃了疾速的倒退,正向寰球市场进行冲破。当然,咱们也看到,海内云产品的推广也受到地缘政治的影响,这条路同样任重而道远。 3).产品技术成熟通过大考 以阿里双11为例,这不仅是一场购物狂欢节,也是一次技术大考。通过构建在阿里云的数据库产品,给出了完满的答案。与此同时,正有着更多的企业客户,将本人的外围业务构建在云端,这也标记着云数据库产品的成熟。在线下,以数据库技术洼地著称的金融客户,也开始尝试应用国产数据库。从阿里的OB、PorlaDB、ADB,华为的GaussDB,腾讯的TDSQL等云产品,到TiDB、SequoiaDB、GoldenDB等,在金融客户中逐步推广。 4).产品生态已渐成体系 作为进入领导者象限的一个重要标记,厂商是否具备多种产品,笼罩不同的客户场景,成为一个要害指标。上面以阿里云为例(下图取自阿里云官网) 从传统的关系型数据库、到NoSQL、数据仓库、生态工具,仍然造成了残缺的数据库生态。这个完整性,咱们能够从多种角度去掂量。 数据类型方面,笼罩了从关系模型、文档、键值、宽表、时序、图、可信数据、多模等。 业务场景方面,笼罩了从在线交易、离线剖析、混合负载等。技术架构方面,笼罩了单机、主备、集群、分布式、云原生等。数据应用方面,笼罩从数据生产、加工、集成、迁徙、优化、备份、自治等。产品状态方面,笼罩了托管开源、托管商业、定制开源、自研商业等状态。5).自研产品成为策略洼地 据理解,超90%入选Gartner报告的数据库都为从零自研产品,这既有技术倒退可持续性的考量,也是技术产品商业化的一个重要前提。此次入选Gartner的国内厂商,都具备其外围的自研数据库产品。通过多年的技术投入,这些产品曾经逐渐成熟,并开始在数据库产品的整体占比中,占据肯定份额。置信,这也将成为各大厂竞争的策略洼地。 写在最初作为一个标志性事件,阿里云进入寰球数据库领导者象限是值得庆贺的。同样值得庆贺的,是看到国内更多的厂商退出其中,积极参与到全球化竞争之中。作为重要的根底软件,数据库在IT架构中起着至关重要的作用。心愿国内的数据库,可能再接再厉,持续前行! 让咱们独特为中国数据库欢呼! 原文链接本文为阿里云原创内容,未经容许不得转载。

December 2, 2020 · 1 min · jiezi

关于jquery:HologresFlink流批一体首次落地4982亿背后的营销分析大屏

简介: 本篇将重点介绍Hologres在阿里巴巴淘宝营销流动剖析场景的最佳实际,揭秘Flink+Hologres流批一体首次落地阿里双11营销剖析大屏背地的技术考验。 概要:刚刚完结的2020天猫双11中,MaxCompute交互式剖析(下称Hologres)+实时计算Flink搭建的云原生实时数仓首次在外围数据场景落地,为大数据平台创下一项新纪录。借此之际,咱们将陆续推出云原生实时数仓双11实战系列内容,本篇将重点介绍Hologres在阿里巴巴淘宝营销流动剖析场景的最佳实际,揭秘Flink+Hologres流批一体首次落地阿里双11营销剖析大屏背地的技术考验。 一、背景介绍在淘系业务经营中,大促是业务经营和用户增长中十分重要的场景,而营销流动剖析产品作为大促期间用来服务决策、领导经营的外围数据产品,笼罩流动前、中、后全链路的剖析,其中须要满足不同角色小二在不同阶段下,对数据时效性和数据灵活性的不同要求,整体产品大图如下: 老版营销流动剖析是基于惯例的实时离线数据体系&FW的产品架构,在之前的各类大大小小的流动中,也裸露了比拟多的问题,其中外围的问题能够演绎为三类: 实时和离线数据不统一:雷同口径的数据实时和离线不统一,包含数据逻辑口径不对立、数据接口不对立,因为实时和离线数据开发割裂(开发人员和接口),不仅仅减少了整体数据的运维老本,同时产品搭建层面的累赘也大幅度晋升。保护老本高:随着业务量的减少,原有数据库不能疾速、灵便的反对简单且多变的利用场景。惯例的Hbase、Mysql、ADB数据库,都只能单点满足海量数据、高并发存储点查、OLAP查问,因而面对极其简单的业务,须要依赖多个数据库,整体保护老本和依赖老本会十分高。扩展性差:在FW框架下的产品搭建逻辑复杂度高、可扩展性都比拟差,在流动期间保护的老本十分大因而,如何可能疾速应答频繁变动的业务诉求,以及更高效的解决流动期间的数据问题变得越来越重要,降级的新一代营销流动剖析架构因此须要满足以下几个长处:1. 实时数仓与离线数仓可能模型对立(实时离线逻辑对立)、接口对立(数据存储、取数对立),真正做到流批一体2. 须要有更弱小的数仓,既可能满足海量数据的并发写入查问,还可能满足业务的及时查问性能3. 简化现有的产品搭建逻辑、升高产品实现复杂度 基于上诉背景,咱们须要重构以后架构并寻找另外的代替产品来解决业务痛点。通过长时间的调用和尝试,最终咱们抉择了基于实时计算Flink+Hologres+FBI(阿里外部的一款可视化剖析工具)的技术计划来实现天猫营销流动剖析的架构重构。 二、 流批一体技术计划通过深度分析业务对数据的要求,以及多方位数据模型摸索和数仓的调研,最终确定了营销流动剖析产品重构的整体技术框架,如下图所示,其中的外围要点有: 通过流批一体架构降级,实现了流批SQL逻辑&计算引擎层面对立通过Hologres实现了数据存储和查问的对立利用FBI产品能力,在升高搭建老本的同时满足业务的高灵活性,同时满足不同角色对于报表的需要**上面,咱们将具体介绍整个技术计划中外围的几大技术计划:流批一体、Hologres、FBI 1. 流批一体技术框架传统数仓架构图如下图所示,传统数仓架构外围问题: 流批间的存储层割裂,集群、表、字段都是离开的,导致应用层对接时须要写不同的取数逻辑。流批间的解决逻辑不能复用,SQL规范不一样,计算引擎不一样,导致实时和离线须要别离开发,其实很多状况下,逻辑大同小异,但零碎之前不能灵便转换,导致工作量反复计算层集群离开,实时和离线对资源的应用时间段顶峰不一样,导致资源利用率不够高,波峰波谷非常明显流批一体数仓架构图如下图所示,降级后的架构次要有以下外围点须要关注: 首先,数仓DWD层尽管在存储介质上不同,但须要保障数据模型的等价,而后进行逻辑表封装(一个逻辑表映射两个物理表,即实时DWD和离线DWD),数据计算代码的撰写都是基于该逻辑表开发其次,基于逻辑表的代码开发、流、批计算模式的个性化配置、以及不同的调度策略等,须要有开发平台(Dataphin流批对立开发平台)作为撑持,造成便捷的开发、运维一体化最初,基于OneData标准的存储层对立,不仅是模型标准对立,还是存储介质的对立,做到了无缝的连接往年双11,实时计算Flink解决的流量洪峰创纪录地达到了每秒40亿条的记录,数据体量也达到了惊人的每秒7TB,基于Flink的流批一体数据利用在营销流动剖析场景中锋芒毕露,并在稳定性、性能和效率方面都禁受住了严苛的生产考验整体Flink流和Flink batch工作在流动期间都体现了极强的稳定性,全程0链路容量、机器单点、网络带宽等问题的产生 2. Hologres流批一体落地流批一体数据架构实现了整体的数据层面的对立,还须要选用一款产品让整体的存储对立,这款产品须要即反对高并发写入,又可能满足及时查问,同时还可能反对OLAP剖析。 在老版本的架构中每个页面模块会波及到一个或多个数据库的数据查问,如Mysql、Hbase、ADB3.0「老版本HybridDB」等。因为Hbase的高并发写入、高性能点查等个性,所以大多数实时数据就会放在Hbase中;而因为Mysql表治理便捷、查问繁难等益处,维表数据、离线数据通常会抉择寄存在其中;另外,产品的一些模块波及到的数据,具备数据量小、维度多等特色「如营销玩法数据」,则会抉择ADB作为OLAP多维分析的数据库。如此,就会存在两个痛点:实时数据与离线数据的割裂、多数据库多实例的芜杂治理。新版营销流动剖析产品的建设,一个指标是要做到存储对立,升高运维老本和进步研发效力;另外一个指标是高性能、高稳固、低成本。 咱们通过与多方位的产品对标之后,选用了Hologres作为整个营销流动剖析的对立产品。Hologres作为一款兼容PostgreSQL 11协定的一站式实时数仓,与大数据生态无缝买通,反对PB级数据高并发、低延时的剖析解决,能够轻松而经济地应用现有BI工具对数据进行多维分析透视和业务摸索,在这样简单的业务场景中Hologres的劣势就体现得极为突出了。 通过对整体营销流动剖析个模块的深度剖析,以及联合业务侧对数据时效性的要求,整体将营销流动剖析的几大模块的数据制订了具体的实时链路计划: 流动直播、预售、加购、流量监控等外围模块,咱们选用了Hologres的实时点查能力,面对复杂多变的营销玩法场景,咱们选用了Hologres的OLAP即时查问能力针对营销流动剖析须要的点查能力和OLAP剖析能力,天猫营销流动剖析别离建了dt-camp和dt-camp-olap库,其中dt_camp点查库因为须要将流动期间的一些历史数据长期寄存用来做流动的比照,整体数据量级在近40TB;营销玩法的OLAP库中,寄存的是玩法的一些明细数据,整体数据量级在近百TB,因为营销玩法对整体数据的准确度要求十分高,因而没有采纳有损精度的查问形式,对整体数仓的查问性能提出了更高的要求。 为了晋升Hologres的整体性能,针对营销流动剖析数仓次要做了一下几类优化策略: 设置distribution key:对于count(distinct user_id)的状况将user_id设置为distribution key在hologres中每一个shard做count distinct,防止大量的数据shuffle,大大晋升查问性能。尽量减少count distinct 次数:通过多层group by 操作转换SQL缩小count distinct老本shard prunning:在一些场景中,查问会指定某个表的pk中的一些key进行查问,如果将这些场景的key组合设置为distribution key,能够在解决查问的时候就确定本次查问会命中那几个shard,缩小RPC申请数,对于高QPS场景至关重要生成最优的plan:营销流动剖析有基于汇总数据的点查或者范畴查问,有基于原始数据的OLAP查问,还有单表的聚合之后取topn的查问,对于不同的查问类型,Hologres可能依据收集的统计信息,生成最优的执行打算,保障查问的QPS和Latency写入优化:营销流动剖析的写入都是基于列存表UPDATE操作,该操作在hologres中会首先依据指定的pk找到对应的uniqueid,而后依据uniqueid找到对应的记录标记删除,而后再查问一条新纪录,这种状况如果可能设置一个递增的segment key,查问的时候就能够依据segment key疾速定位到文件,晋升依据pk定位到记录的速度,晋升写入性能,营销流动剖析零碎压测时写入峰值能够达到800W/s的更新小文件合并:某些写入不是很频繁的表因为一段时间更新的key比拟固定,这导致memory table flush的时候是一个比拟小的文件,而Hologres默认的compaction策略并没有对这些文件做compaction,导致存在比拟多的小文件,通过深刻优化compaction参数,减少compaction的频率,缩小小文件,对于查问性能有较显著的晋升Hologres在双十一期间体现,点查场景的写入峰值达几十w/s,服务能力几百w/s,OLAP写入峰值400w/s,服务能力500w/s。同时单点查问&OLAP查问简直都可能满足单条查问小于ms的查问比例高达99.7%以上,因而在整个流动期间,Hologres整体体现十分安稳,可能很好的同时反对疾速点查和疾速OLAP剖析。 3. FBI剖析大屏FBI作为阿里生态内的首选数据可视化平台,即能疾速反对搭建各类报表进行数据分析,也能反对多种数据集的疾速接入与扩大,还有反对各种剖析型数据产品建设的高级性能【产品搭建】。 在FBI产品搭建的外围流程中,能够通过4个外围性能大幅升高搭建老本: 1)实时离线一体的“实时小时分钟模型”,主动实现实时数据的准确趋势和比照针对营销流动定义的批流一体的底层数据,为了满足用户剖析实时数据,实时比照,小时比照的灵活性,FBI形象出一套实时离线一体的规范数据模型,创立该模型后就能够实现实时数据的准确比照,趋势剖析主动路由分钟表,小时趋势间接路由到小时表的能力。2)FBI原创的FAX函数,极简定义输入各种简单指标针对简单的指标:如通道占比,类目占比,同比贡献度,流动累计成交额,上个版本中均是用sql套sql进行定义,不仅导致SQL长度保障,同时产品的稳定性和可维护性都大大降低。为了解决这类问题,FBI构建了一套易于学习和了解的剖析DSL,名为 FAX函数(同比差额、贡献率、流动累计等20+剖析函数),简略的一行语句能够定义出营销流动剖析中用到的各种简单指标。3)通过剖析能力配置化和专有逻辑插件化,大幅节约页面构建工夫产品页面构建是一个十分外围的环节,如何节约用户的配置,FBI的办法就是:a、通用剖析能力配置化:对于最罕用到的穿插表、流动比照,日期变量传参等剖析场景,形象降级为简略的配置项,即可实现相应的同期比照和同比差额等剖析。b、专有逻辑插件化:对于流动参数,显示暗藏,后果排序等作用于区块的定制能力,能够通过数据插件的形式笼罩。4、打造积淀FBI的高保障体系,降级了公布管控,监控预警,变更提醒等,反对1-5-10 三、测试端的保驾护航为了进一步保障营销流动剖析产品质量,测试端从明细->汇总->产品端都做了严格的数据比对和校验,同时针对大促的外围数据,进行了全方位的监控在流动期间测试巡检性能大大晋升了被动发现数据问题的能力,以及及时发现外围问题的能力,大大的晋升了流动期间整个数据产品的品质和稳定性 四、业务反馈&价值整个双十一期间,基于实时计算Flink+Hologres流批一体的营销流动剖析产品不仅反对了天猫事业群上千+小二的人均上百PV高频拜访,更实现了0 P1/P2故障的指标,同时整个产品在流动期间体现了相比今年更有劣势的几大方面: 丰盛:实时数据在营销流动剖析产品中大规模铺开,外围维度能够down到流动商品、商家标签分层等多个维度,同时加购和预售都新增了商家、商品维度的实时数据,更加敌对的反对了业务侧进行商家的BD稳固:基于Hologres继续高稳固的输入,整体双十一期间不论是实时数据写入、还是数据的读取都体现出了极强的稳定性;同时工程端实时监控用户拜访和数据响应效率,实时剖析解决业务问题;产品巡检涵盖了产品的外围数据,进一步的保障了整个产品的稳定性高效:流批技术的利用,以及Hologres的对立对接,不仅大幅度的晋升了流动期间的需要接入效率(往年双十一期间整体需要承接能力是去年的3倍),同时整体的晋升了问题反馈和解决的时效(相比以往流动晋升了3-4倍)五、将来瞻望尽管曾经经验了一次大促大考验,然而技术的摸索永无止境,咱们须要一直的欠缺来应答更加简单的业务场景:1)Dataphin流批一体的产品进一步欠缺,缩小人工干预老本,同时进一步保证数据品质2)Hologres资源隔离,读写资源隔离,更好地保障查问的SLA;买通Hologres与MaxCompute,反对元数据的互通,为产品元数据提供更高的保障;动静扩容,可能灵便应答峰值及日常的业务须要。3)FBI产品工具,可能晋升产品版本治理性能,同一页面反对多人编辑不笼罩,更加高效的反对产品搭建 原文链接本文为阿里云原创内容,未经容许不得转载。

December 1, 2020 · 1 min · jiezi