精选列表

搜索[初体验],共233篇文章
优秀的个人博客,低调大师

MaxCompute用户初体验

作为一名初次使用MaxCompute的用户,我体会颇深。MaxCompute 开箱即用,拥有集成化的操作界面,你不必关心集群搭建、配置和运维工作。仅需简单的点击鼠标,几步操作,就可以在MaxCompute中上传数据,分析数据并得到分析结果。 作为一种快速、完全托管的 TB/PB 级数据仓库解决方案,MaxCompute不仅为我们提供了传统的命令行操作,而且提供了丰富的web端操作界面。对于数据开发,测试,发布,数据流,数据权限管理都非常好用,支持python,java的udf,对于复杂的逻辑查询也支持传统的MapReduce,同时也支持多种机器学习算法,非常好用。 MaxCompute为我们提供了统一的项目管理。实际开发中各个团队都有自己的项目,自己管理自己的项目, 通过项目隔离,有效的防止数据和任务被其他团队修改和删除等问题。除非是pro项目任务出错,否则不会影响到其他业务线的任务,最大程度降低各业务间的影响。 同时,大数据开发套件和 MaxCompute关系紧密,大数据开发套件为 MaxCompute 提供了一站式的数据同步,任务开发,数据工作流开发,数据管理和数据运维等功能。 当需要处理的数据变得非常多,并且数据发展到足够复杂的时候,这些数据往往需要用不同的模式进行处理,除此之外,当作业出现问题的时候也需要有足够好的工具进行分析和管理。这些其实都是对于开发者而言需要面对的问题,与此同时阿里云为我们提供了DATA IDE环境来解决上述的问题。 在进行数据分析的过程中DATA IDE可以支持SQL的语法以及语法的高亮,同时实现代码补全等功能。开发者即使对于SQL的语法并不熟悉,但是根据DATA IDE给出的关键词提示也可以轻松的进行操作。另外在DATA IDE中可以集成元数据,从而在开发人员进行SQL语句编写时,给予表格、字段以及函数的提示。 在任务执行过程中,我们通过IDE可以看到作业的执行状态以及详细信息,即便是作业出现问题IDE也可以很方便地对于问题进行定位,帮助开发者发现作业中哪一个是瓶颈。 Max Compute还为我们提供了一个基于云计算的灵活的轻量级的自助 BI 工具服务平台-----Quick BI。 Quick BI可以支持多种数据源的添加,以便于我们对不同的数据源进行实时在线分析。 Quick BI为我们提供了丰富的可视化图表,根据行业的不同需求我们可以随意选取,以便于给决策曾提供更清晰准确的报表。而其基于 WEB 页面的工作环境,拖拽式、类似于 EXCEL 的操作方式,一键导入、实时分析,可以灵活切换数据分析的视角,更是锦上添花。 对于完成后的报表图表,可以以接口方式将制作的报表嵌入到第三方软件,从而方便自己的分析查询。 总之,无论是用来学习,还是用来工作MaxCompute都是一个不错的选择。时代在进步,科技在发展,大数据的脚步已经离我们越来越近,更多是知识需要我们去学习,去实践,赶快行动起来加入其中吧。 作者:王艾军 北京青苔数据科技有限公司 大数据研发经理

优秀的个人博客,低调大师

Android DataBinding使用(一):DataBinding初体验

目录 前言 MVVM ( Model — View — ViewModel )最初是在2005年由微软提出的一个UI架构概念 。 相比MVP模式,MVVM将Presenter改为了 ViewModel,同时实现View和VievvModel的双向绑定。 View层的变化会自动导致ViewMmlel发生变化,ViewModel的数据变化也会自动实现View的 刷新,开发者可以不用直接处理View和数据的更新操作,MVVM框架会完成这一切,MVVM 模式不同层之间关系如图所示。 在Google I/O 2015大会上,Android幵发闭队发布了官方 的MVVM模式支持函数库 Data Binding Library。Data Binding Library 是一个兼容函数库,可以在 Android 2.1 ( API Level 7 )及之 后的Android系统上面使用在使用Data Binding之前 , 需要确保Gradle的Android Studio插 件 版本大于或等于1.5.0-alphal,而且Amlmid Studio的版本号应该大于或等于1.3。 使用步骤 首先需要在module的build.gradle文件中添加如下代码,Android Studio会自动为我们集成需要的依赖库。 android { ... dataBinding { enabled = true } } 新建一个JavaBean对象,这里我把它命名为UserBean。 public class UserBean { private String userName; private int age; public UserBean(String userName, int age) { this.userName = userName; this.age = age; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 编辑使用了DataBinding的Activity布局文件(这里是activity_main.xml),它与普通的布局文件有些不同,它的根标签是layout里面包含了data和以前常用的布局,其中data标签是用来实现数据绑定的,在data标签内定义了一个名为user的属性变量,类型是UserBean,并在控件中使用@{user.userName}的方式将数据绑定到控件上。 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <data> <variable name="user" type="com.itfitness.databindingdemo.bean.UserBean"/> </data> <LinearLayout android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:text="@{user.userName}" android:layout_gravity="center_horizontal" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:text='@{user.age+""}' android:layout_gravity="center_horizontal" android:layout_height="wrap_content" /> </LinearLayout> </layout> 在Activity中添加数据 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); binding.setUser(new UserBean("<张三>",18)); } } 这里的ActivityMainBinding是自动生成的,它是根据布局文件的名字来生成的:如activity_main-->ActivityMainBinding 、fragment-->FragmentBinding。 运行结果 技术博客:https://myml666.github.io

优秀的个人博客,低调大师

JAVA 11 初体验

随着JAVA每半年发布一次新版本,前几天JAVA 11隆重登场。在JAVA 11中,增加了一些新的特性和api,同时也删除了一些特性和api,还有一些性能和垃圾回收的改进。 作为一名一线的开发人员,JAVA 11给我们带来哪些便利之处呢?下面我们来体验一下。 在Lambda表达式中使用var 本地变量类型var是java 10提出的新概念,它可以从上下文中推断出本地变量的类型,从而提高代码可读性。我们看看下面的例子: public class Main { public static void main(String[] args) throws Exception { URL url = new URL("http://www.oracle.com/"); URLConnection conn = url.openConnection(); Reader reader = new BufferedReader( new InputStreamReader(conn.getInputStream())); } } 使用var声明后,上面的代码可以改写成: public class Main { public static void main(String[] args) throws Exception { var url = new URL("http://www.oracle.com/"); var conn = url.openConnection(); var reader = new BufferedReader( new InputStreamReader(conn.getInputStream())); } } 我们使用var代替了URL、URLConnection、Reader,提高了代码的可读性,也方便了开发。但是在JAVA 10中,var变量不能在lambda表达式中声明,在JAVA 11中,解决了这个问题。我们可以在lambda表达式中使用var,如下: (var x, var y) -> x.process(y) 上面的例子等同于 (x, y) -> x.process(y) 但是我们不能混合使用,下面的两个例子都是错误的: //含蓄型的lambda表达式中,要么全使用var,要么全不使用var (var x, y) -> x.process(y) //在lambda表达式中,不能即使用含蓄型,又使用明确型 (var x, int y) -> x.process(y) 标准化HTTP Client API 以前我们在程序中使用HttpClient时,通常会引入apache的HttpClient工具包。在JAVA 11中,我们可以使用JDK原生的HttpClient了。 public class HttpTest { public static void main(String[] args) throws Exception { String uri = "http://www.baidu.com"; HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(uri)) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); } } 上面的例子是同步的get请求,还有其他的方法HttpClient也是提供的,例如: 异步get post提交 并发请求 Get Json Post Json 这些例子这里不做详细介绍了,如有需要请参考官方例子。功能很强大吧,我们不用再引入其他的HttpClient的jar包了。 总结 对于一线开发者而言,JAVA 11的体验就这么多,如有遗漏,会在以后补充。

优秀的个人博客,低调大师

从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十六 ║ Vue前篇:ES6初体验 & 模块化编程

缘起 昨天说到了《[从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十五 ║ Vue前篇:JS对象&字面量&this](https://www.cnblogs.com/laozhang-is-phi/p/9580807.html)》,通过总体来看,好像大家对这一块不是很感兴趣,嗯~~这一块确实挺枯燥的,不能直接拿来代码跑一下那种,不过还是得说下去,继续加油吧!如果大家对昨天的小demo练习的话,相信现在已经对JS的面向对象写法很熟悉了,如果嵌套字面量定义函数,如何使用this关键字指向。今天呢,主要说一下ES6中的一些特性技巧,然后简单说一下模块化的问题,好啦,开始今天的讲解~ 还是老规矩,一言不合就是上代码 str1 = 'Hello JS!'; function fun1() { var str1 = 'Hello C#!'; } fun1(); alert(str1); 大家猜猜,最后会弹出来哪一句话? 零、今天要完成浅紫色的部分 一、什么是传说中的ES6 这些定义网上一大堆,不过还是粘出来,大家可以统一看一下,简单了解了解: 1、定义 ECMAScript 6是JavaScript语言的下一代标准,在2015年6月正式发布。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 标准的制定者有计划,以后每年发布一次标准,使用年份作为标准的版本。因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015。也就是说,ES6就是ES2015,下一年应该会发布小幅修订的ES2016。 2、有哪些新的变化 编程语言JavaScript是ECMAScript的实现和扩展,由ECMA(一个类似W3C的标准组织)参与进行标准化。ECMAScript定义了: 语言语法– 语法解析规则、关键字、语句、声明、运算符等。 类型– 布尔型、数字、字符串、对象等。 原型和继承 内建对象和函数的标准库–JSON、Math、数组方法、对象自省方法等。 ECMAScript标准不定义HTML或CSS的相关功能,也不定义类似DOM(文档对象模型)的Web API,这些都在独立的标准中进行定义。ECMAScript涵盖了各种环境中JS的使用场景,无论是浏览器环境还是类似node.js的非浏览器环境。 3、ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这种语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScript,这个版本就是1.0版。 该标准从一开始就是针对JavaScript语言制定的,但是之所以不叫JavaScript,有两个原因。一是商标,Java是Sun公司的商标,根据授权协议,只有Netscape公司可以合法地使用JavaScript这个名字,且JavaScript本身也已经被Netscape公司注册为商标。二是想体现这门语言的制定者是ECMA,不是Netscape,这样有利于保证这门语言的开放性和中立性。 因此,ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现 二、var、let 与 const 块作用域 这里先说下,作用域的问题 1、ES6之前,JavaScript 并没有块级作用域,所谓的块,就是大括号里面的语句所组成的代码块,比如 function blog(bl) { if (bl) { var foo = "Blog"; } console.log(foo); } blog(true); //=> Blog 2、虽然变量变量foo位于if语句的代码块中,但是 JavaScript 并没有块级作用域的概念,因此被添加到了当前的执行环境 - 即函数中,在函数内都可以访问到。 因此:var 定义的变量是函数级作用域,作用范围是在函数开始阶段和函数执行完成之前内都是存在的; 并且如果该函数内部还存在匿名函数等特殊函数,这个 var 出的变量在匿名函数中任然可以用; 3、在ES出现后,定义了一个新的命名方式 let function Blog(bool) { if (bool) { let foo = "Blog"; } else { console.log(foo); } } Blog(false); //这里会报错 Uncaught ReferenceError: foo is not defined 因此,使用 let,上述问题完全解决,let出的变量作用域是块作用域,在离开某一代码块,该变量就会被销毁不存在 应当尽可能的避免用 var,用 let 来代替,除非你需要用到变量提升。 4、随着面向对象思维的出现,JS也出现了常量的定义 const const 与 let 的基本用法相同,定义的变量都具有块级作用域,也不会发生变量提升。不同的地方在于,const 定义的变量,只能赋值一次。 const foo='Blog'; function Blog(bool) { if (bool) { foo = "Vue"; } else { console.log(foo); } } Blog(true); //这里会报错 Identifier 'foo' has already been declared 因此const多用作不发生变化的变量定义,比如定义月份,或者,星期等:constmonths = []; 三、箭头函数 还记得昨天的那个小demo么,今天再说一个地方 var obj = { data: { books: "", price: 0, bookObj: null }, bind() {//**注意!**ES6 中,可以使用这种方法简写函数,等价于 bind: function () { var that = this; //普通函数 //$(".ok").click(function () { // console.log(this);//这个时候,this,就是 .ok 这个Html标签 // var bookItem = that.data.bookObj; // var _parice = $(bookItem).data("price"); // var _book = $(bookItem).data("book"); // that.data.books += _book + ","; // that.data.price += parseInt(_parice); // that.show(); //}); //箭头函数 $(".ok").click(() => { var bookItem = this.data.bookObj;//在箭头函数中,this指向的是定义函数时所在的对象 var _parice = $(bookItem).data("price"); var _book = $(bookItem).data("book"); this.data.books += _book + ","; this.data.price += parseInt(_parice); this.show(); $(".bg,.popupbox").hide(); }); }, } 在普通的click函数中 this 指向对象 $(".ok") ,因此,我们如果想要获取定义的对象中的数据(obj.data),那我们只能在 click 方法前,就去用一个 that 自定义变量来保存这个 this , 但是在箭头函数中就不一样了,this始终指向定义函数时所在的对象(就是 obj 对象); 是不是更方便些! 在Vue中,也经常使用 vue实例,或者this来获取相应的值 var vm = new Vue({ el:'#root', data:{ tasks:[] }, mounted(){ axios.get('/tasks') .then(function (response) { vm.tasks = response.data;//使用Vue实例 }) }, mounted2(){ axios.get('/tasks') .then(response => this.tasks = response.data);//箭头函数 this } }); 四、参数默认值 && rest参数 1、 在ES6中,可以像C#那样定义默认参数 function buyBook(price, count = 0.9){ return price * count; } buyBook(100); //甚至可以将方法的值赋给参数 function buyBook(price, count =GetCount()){ return price * count; } function GetCount(){ return 100; } buyBook(200); 2、不仅如此,还可以快速获取参数值 //ES6之前是这样的 function add(a,b,c){ let total = a + b + c; return total; } add(1, 2, 3); //ES6你可以这么操作,提供了 rest 参数来访问多余变量 function sum(...num) { let total = 0; for (let i = 0; i < num.length; i++) { total = total + num[i]; } return total; } sum(1, 2, 3, 4, 6); 五、ES6中的表达式 1、字符串表达式 在之前我们都是这样使用字符串表达式 var name = 'id is ' + bid+ ' ' + aid + '.' var url = 'http://localhost:5000/api/values/' + id 在ES6中我们有了新语法,在反引号包裹的字符串中,使用${NAME}语法来表示模板字符: var name = `id is ${aid} ${bid}` var url = `http://localhost:5000/api/values/${id}`//注意是反引号,英文输入下下的,Tab键上边的那个 2、还有就是多行表达式的写法 //之前我们都是这么写的 var roadPoem = '这个是一个段落' + '换了一行' + '增加了些内容' + 'dddddddddd' //但是在ES6中,可以使用反引号 var roadPoem = `这个是一个段落 换了一行 增加了些内容, dddddddddd 结尾,` 六、模块化定义 1、什么是模块化开发 模块化开发是基于一定的语法规范,通过代码书写设计,使代码耦合度降低,模块化的意义在于最大化的设计重用,以最少的模块、零部件,更快速的满足更多的个性化需求。因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。 用阮一峰大神的说法就是: 今天的Web网页越来越像桌面程序,网页上加载的javascript也越来越复杂,前端工程师不得不开始用软件工程的思维去管理自己的代码。Javascript模块化编程,已经成为一个非常迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。但是,Javascript不是一种模块化编程语言,它不支持"类"(class),更别提"模块"(module)了。(正在制定中的ECMAScript标准第六版将正式支持"类"和"模块",但还需要很长时间才能投入实用 就这样,Node.js 就出现了,一个用来开发服务器端的js框架,基于commonJs的模块化。当然中间还有CMD,AMD(这个东西我还需要慢慢研究下); 2、模块化在代码中是如何体现的呢 1、首先我们先看看普通的定义一个类是如何写的 新建一个index.js 文件 class Student { constructor(homework= []) { this.homework= homework; } study() { console.log(this.homework); } } const st = new Student ([ 'blog', 'api', 'vue' ]); st.study(); 然后新建一个index.html页面,引用该js文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script src="index.js"></script> </body> </html> 然后就可以得到结果: 这是一个很简单的,定义一个Student 类,然后定义一个方法,通过传递一个数组参数,来实例化。 这样虽然很简单,但是却无法复用,无法作为一个零件来使用。而且如果有一个地方要修改,多处都需要修改,这个面向对象的思想,没有发挥出来; 这个时候你可能会说,把这个拆成两个问题,就可以复用了,嗯~试试 2、我们把这两个文件分开 新建一个Student.js ,定义处理Student类;然后新建一个main.js方法,来调用实例化该类,就可以使用 然后在 index.html 页面里去引用这两个文件 <body> <script src="Student.js"></script> <script src="main.js"></script> </body> 当然结果是一样的,这样虽然实现了分隔开,也可以去不同的地方调用; 但是,从上文中你也看的出,如果不是自己写的代码,一般不太容易看的明白,到底是什么意思,直观性不是很好,我们将无法看到彼此间的关联(main.js 加载 Student.js), 3、我们用模块的写法设计这个调用 ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入。 我们直接修改之前的代码 然后在 index.html 页面中,只需要引用 就行 4、因为浏览器现在还不能直接运行模块化代码,所以我们需要打包,打包工具有很多,比如webpack 注意:这里用到打包概念,之后会讲到,这里就先略过,以后会讲到,步骤是 首先安装npm,或者阿里镜像cnpm(npm其实是Node.js的包管理工具,这个在我们之后的Node.js环境配置中,自动随带安装)全局安装 rollup.js $ cnpm install --global rollup cd 当前文件夹$ rollup main.js --format iife --output bundle.js 然后只需要引用生成的 5、这里我因为测试,已经生成好了,打包出来的bundle.js 是这样的,是不是兜兜转转又回到了之前的写法,其实ES6的模块开发,就是导入的代码块儿 (function () { 'use strict'; class TaskCollection { constructor(tasks = []) { this.tasks = tasks; } dump() { console.log(this.tasks); } } const tc = new TaskCollection([ 'blog', 'api', 'vue' ]); tc.dump(); }()); 总结来说:模块化的好处和问题 可维护性 灵活架构,焦点分离 方便模块间组合、分解 方便单个模块功能调试、升级 多人协作互不干扰 可测试性,可分单元测试; 性能损耗 系统分层,调用链会很长 模块间通信,模块间发送消息会很耗性能 其实说白了,就是JS在作为一个开发语言来说,越来越靠近了后端服务器语言。 七、每天一个小Demo 这里是一个特别特别简单的关于ES6的留言板,大家可以看一看 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>简易留言板</h2> <input type="text" placeholder="请输入内容" size="30" id="msg"> <input type="button" value="留言" id="btn"> <div id="msg-div"></div> <script> //let 定义块级变量 let oBtn = document.getElementById('btn'); let msg = document.getElementById('msg'); let content = document.getElementById('msg-div'); oBtn.onclick = () => { let ovalue = msg.value; let ali = document.createElement('p'); //ES6模板字符串 //多行表达式 ali.innerHTML = `${ovalue}<span style="color:red;"> 删除</span>`; var aspan = content.getElementsByTagName('p'); if (aspan.length > 0) { content.insertBefore(ali, aspan[0]); } else { content.appendChild(ali); } msg.value = ''; var oSpan = content.getElementsByTagName('span'); for (let i = 0; i < oSpan.length; i++) { //ES6箭头函数 oSpan[i].onclick = function () { content.removeChild(this.parentNode);//注意this的指向 }; } }; </script> </body> </html> 八、结语 通过这两天的学习,大家了解到了,JS的一些特性和变化:嵌套字面量的定义,面向对象的封装,类和模块化的使用,ES6的日益成熟,通过打包进行发布等等,都能表现出JS在向一个服务器端语言快速迈进的冲动,也是极大的推动了,MVVM的到来,从而实现像Node.js 这种,可以脱离浏览器环境也能运行的不一样视角。好啦,关于JS高阶,这两讲已经差不多了,当然还有其他的,大家可以自行学习了解,其实这两篇都懂的化,已经差不多了,明天咱们就开始正式进入Vue入门篇,通过引用Vue.js 实现栗子。

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。