从后端走向前端 Web 发展初期 在 Web 发展初期,前后端是如何协作的呢? 纵观 Web 发展史,从模板引擎到 ajax、从后端路由到前端路由,这一路走来,技术重心已逐渐转移到前端。 从前端走向全端 Node.js 2009年2月,一位名叫 Ryan Dahl 的开发者在博客上宣布准备基于 Google V8 引擎创建一个轻量级的 Web 服务,并为之提供一套组件库。 开发者很容易使用 Node.js 搭建一个后端服务,实现从前端到全栈的升级。 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 小程序 这几年来,随着各种 小程序 的问世,Web 前端技术早已超脱了浏览器和 Hybrid 应用的范围。前端工程师很容易基于已有技术栈快速上手和开发小程序类微应用。
第8章 泛型 通常情况的类和函数,我们只需要使用具体的类型即可:要么是基本类型,要么是自定义的类。 在这一点上,泛型跟我们第3章中所讲到的“可空类型”实现的空指针安全,在思想上有着异曲同工之妙。 8.2 在类、接口和函数上使用泛型 泛型类、泛型接口和泛型方法具备可重用性、类型安全和高效等优点。 在集合类API中大量地使用了泛型。在Java 中我们可以为类、接口和方法分别定义泛型参数,在Kotlin中也同样支持。本节我们分别介绍Kotlin中的泛型接口、泛型类和泛型函数。 8.2.1 泛型接口 我们举一个简单的Kotlin泛型接口的例子。 在泛型接口和泛型类中,我们都在类名和接口名后面声明了泛型参数。
比如说思考一下这个问题:前端到底是个什么神仙工作,说起来也从事前端开发好几年了,但是真正在这里面收获的有什么东西么? 好像有,又好像没有。 再后来,移动互联网兴起之后,又出现了大前端的概念。 而泛前端是我早上出门的时候忽然想起来的一个词。刚才搜索了一下,其实网上也有这个概念,这里只谈一下我对它的理解。 前端的概念不在仅仅局限于我们日常开发中的网站,管理后台,小程序,游戏等等,其他的软件以及硬件设备,都可以称之为前端。 从而沉淀出一些对项目的日后的发展有借鉴意义的技术,这个也可以理解为前端的范畴。 前端只是前端,大前端可以理解为全端,而泛前端则是对前端以及大前端的深化。
泛型 为什么需要泛型? getValue() { return value; } } Pair<String, Integer> p1 = new OrderedPair<String, Integer>("Even", 8) ; // 这里的int类型8,自动装箱为了I Pair<String, String> p2 = new OrderedPair<String, String>("hello", "world"); 简写为diamond: OrderedPair<String, Integer> p1 = new OrderedPair<>("Even", 8); OrderedPair<String, String 'a'); // compile-time error 只能使用包装类: Pair<Integer, Character> p = new Pair<>(8, 'a'); 2、不能创建泛型实例: public
上节介绍了泛函数据结构List及相关的泛函编程函数设计使用,还附带了少许多态类型(Polymorphic Type)及变形(Type Variance)的介绍。 为了更多了解泛函数据结构(Functional Data Structure),想在这个章节把另一个我们熟悉的数据结构-Tree做些简单介绍。 先创建一个Tree实例(Tree Instance): 1 val tree = Branch(Branch(Leaf(1),Leaf(2)),Branch(Branch(Leaf(10),Leaf(8) Leaf(1),Leaf(2)),Branch(Branch( 3 //| Leaf(10),Leaf(8) Int = this match { 6 case Leaf(_) => 0 7 case Branch(l,r) => 1 + l.size + r.size 8
此时得到均方误差值为1.32,比前面使用线性回归得到的均方误差167.94好太多了,这就是模型正则化的威力,模型正则化能够让整个模型泛化能力得到大大的提高,而模型正则化的原理其实就是因为对于过拟合而言, 当然最终的结果也不是我们想要的,我们需要的是是整个模型泛化能力达到最佳的中间某个状态。 下一小节会介绍另一种模型正则化的方法~LASSO回归。
js 的基本数据类型的赋值,就是值传递。引用类型对象的赋值是将对象地址的引用赋值。这时候修改对象中的属性或者值,会导致所有引用这个对象的值改变。如果想要真的复制一个新的对象,而不是复制对象的引用,就要用到对象的深拷贝。
= "0" + i; } return i; } </script> function formatTime(ms) { ms = new Date("2018/8/ 8 14:20:00").getTime() - Date.now(); if(ms <= 0){ document.getElementById("showTime").innerHTML image.png <head> <meta charset="UTF-<em>8</em>"> <title>简单时长倒计时</title> <SCRIPT type="text/javascript"> image.png <head> <meta charset="UTF-<em>8</em>"> <title>js简单时分秒倒计时</title> <script type="text export function encryptByDES(message) { var key = '$7%9R5Hh&yGDt' var keyHex = CryptoJS.enc.Utf<em>8</em>.
方案一:思想 首先对数组进行排序(小 》大),第一项为最小值,最后一项为最大值
1.泛型接口 我们举个例子,以前来看一下JPA定义的写法: Specification接口为: public interface Specification<T> { Predicate toPredicate return criteriaBuilder.and(predicates.toArray(new Predicate[]{})); }; } 2.谓词链(讨论在Java 8中链接 5.结合谓词 接下来,如果我们不想使用按位运算构建复杂的谓词,Java 8 Predicate可以使用有用的方法来组合谓词我们将使用Predicate.and(),Predicate.or()和Predicate.negate
文章目录 一、泛型类用法 二、泛型方法用法 三、泛型通配符 <? > 四、泛型安全检查 五、完整代码示例 1、泛型类 / 方法 2、main 函数 一、泛型类用法 ---- 泛型类用法 : 使用时先声明泛型 , 如果不声明泛型 , 则表示该类的泛型是 Object : 指定 泛型类 的泛型为 String 类型 , 那么在该类中凡是使用到 T 类型的位置 , 必须是 String 类型 , 泛型类的 泛型声明 , 使用时在 类名后面 声明 ; / getData2(T arg){ T data = arg; return data; } 指定泛型的方法 : 指定 泛型方法 的泛型类 , 泛型方法 的泛型声明 泛型个数 , 泛型的个数可以有很多个 * 多个泛型之间 , 使用逗号隔开 * * 泛型方法指定的泛型 T 与类中的泛型 T 没有任何关系 *
防抖和节流是两种常见的前端性能优化技术,它们都可以用来减少函数执行的次数,提高页面性能。 防抖 防抖(Debounce)是指在一定时间内多次触发同一个事件,只执行最后一次触发事件的函数。 总之,防抖和节流是前端开发中常用的性能优化技术,可以有效地减少函数执行次数,提高页面性能。
文章目录 一、泛型类 二、泛型参数 三、泛型函数 四、多泛型参数 五、泛型类型约束 一、泛型类 ---- 定义一个 泛型类 , 将 泛型参数 T 放在 尖括号 <T> 中 , 该泛型参数放在 类名后 下面的代码中 , 声明了 Student 泛型类 , 该泛型类 接收 T 类型的泛型参数 , 在主构造函数中接收 T 类型的参数 , 在该泛型类中声明了 T 类型的成员属性 ; class Student ---- 通常情况下 , 泛型参数 都使用 T 表示 , 使用其它字母 或者 字符串 都可以表示 泛型参数 , 但是 约定俗成 都使用 T 来表示泛型 ; 在下面的代码中 , 使用 M 作为 泛型参数 ---- 泛型函数 中 如果涉及到 匿名函数 参数 , 匿名函数 的 参数返回值 都是泛型 的话 , 在该泛型函数 中可能需要使用多个泛型 , 使用不同的字母表示不同的泛型 ; 如果函数中 引入了新的泛型类型 R 的类型是 Boolean 类型 ; 3.14 true 五、泛型类型约束 ---- 在 泛型类 , 泛型函数 中 , 使用泛型前 , 需要声明 泛型参数 : 泛型类 泛型参数 声明 : 如果类中
不然 泛型集合和ArrayList的装箱拆箱 常见的泛型类型 泛型类和泛型方法 泛型约束 泛型委托 ###泛型很难理解? 可能大多数人刚学习泛型的时候觉得很难理解,当然我也是这样的,所以便写下这篇文章加深一下对泛型的印象。 第一次接触泛型那还是在大二上学期的时候,那会是学c#面向对象的时候接触过泛型集合,但尴尬的是那会还没有“泛型”这个概念,仅仅只停留在泛型集合的使用。 :这个泛型类常用api通用接口的泛型类。 ,声明的时候还是和泛型类、泛型方法一样加个<坑> 站个坑,其实泛型委托使用的时候不是很多,要慎用。
文章目录 一、泛型简介 二、泛型类 三、泛型方法 四、静态方法的泛型 五、泛型类与泛型方法完整示例 一、泛型简介 ---- 泛型 可以 简单理解为 参数化类型 , 主要作用在 类 , 方法 , 接口 上 ; java 泛型 与 C++ 模板 : Java 中的泛型 , 是仿照 C++ 中的 模板 开发的 , 目的是让开发者可以写出 通用 , 灵活 的代码 ; 伪泛型 : Java 中的泛型 , 是 伪泛型 , Java 泛型开发好之后 , 在 编译阶段 就 将泛型相关的信息消除 了 , 不会泛型留到运行时 ; 泛型类型 : 泛型方法 : 方法有参数 , 方法的参数 可以指定成一些 泛型 ; 泛型类 : ---- 泛型方法 : 在方法的 返回值前 , 使用 <T> 声明泛型的方法 , 是泛型方法 ; 将某个类型作为参数传入 ; 泛型个数 : 该方法是泛型方法 , 且指定了 2 个泛型 , 泛型的个数可以有很多个 , 多个泛型之间 , 使用逗号隔开 ; 泛型方法 与 泛型类 中的泛型 : 泛型不同 : 泛型方法指定的泛型 T 与 类中的泛型 T 没有任何关系 , 这两个 T 可以是不同的类型 ; 泛型相同
泛型 什么是泛型: 泛型就相当于标签 形式:<> jdk1.5之后,用泛型来解决元素类型不确定的数据保存操作, 例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型 泛型对应的类型都是引用类型不能是基本类型 泛型类和泛型接口 声明泛型类时传入类型实参 创建泛型类对象时,传入类型实参 类型实参为空时,默认为Object类型 继承泛型类: 1.泛型父类不传入类型实参 ,默认为Object类型 2.泛型父类传入类型实参,子类既可以是泛型类,也可以不是 3.泛型父类传入类型实参,则子类必须是泛型类,且子类的类型形参列表必须包含父类的类型形参列表 泛型类的定义和实例化 泛型类的构造器写法: 不同泛型的引用类型不可以互相赋值 泛型如果不指定,就会被擦除,例子就是 泛型类中的静态方法不能使用类的泛型 不能直接使用泛型数组的创建,如果非要创建 泛型方法 什么是泛型方法 ,不是带泛型的方法就是泛型方法,泛型方法有要求:这个方法的泛型参数类型要和当前类的泛型方法的泛型无关 换个角度:泛型方法对应的那个泛型参数类型和当前所在的这个类,是否为泛型类,泛型是啥,无关 泛型方法定义的时候
掌握8条泛型规则,打造优雅通用的Java代码在Java开发中泛型以类型安全和代码复用的特性扮演着关键角色掌握好泛型能够确保类型安全、提升代码复用、降低维护成本,打造出优雅通用的代码本文基于 Effective Java 泛型章节汇总出8条泛型相关习惯不要使用原生态类型在早期的JDK中,从集合中获取对象时都需要强制转换如果在添加对象时,不小心将不同类型的对象加入集合,那么获取对象强制转换时会发生报错这种报错并不会在编译期间提示 ,使用泛型可以指定对象的类型,在编译期将泛型擦除并完成强制转换在编译期间当发生这种情况时会在编译期间报错,从而尽早的发现错误为了对历史版本兼容,也可以不需要指定泛型,这种情况称为原生态泛型原生态泛型只是为了兼容历史版本 super X>在某些情况下只能使用原生态泛型:兼容历史版本获取Class对象时只能使用原生态泛型(由于泛型运行时会擦除,因此不能通过泛型获取Class对象) //合法 Class ,因为它能够得到使用泛型的好处优先考虑泛型部分情况下是无法使用列表的而必须使用数组的,比如实现列表时需要使用数组在这种情况下为了通用性也会选择使用泛型,但需要注意无法创建泛型数组第一种方案:定义泛型数组
1.3 泛型定义(泛型类、泛型方法(泛型方法返回值是泛型的,泛型方法在普通类和泛型类里)): 1.4特点: 对于泛型特点(1)举个例子 : 没有使用泛型时的异常抛出 对于泛型特点(2)访问时不需要类型转换 2.1泛型类 2.2泛型接口与泛型类相似,不举例子了 2.3泛型方法 2.4.疑惑,为什么有泛型类了,还要有泛型方法,泛型类与泛型方法有什么区别,泛型方法有什么好处? 3.为什么要使用泛型,泛型的好处: 3.1泛型的好处 3.2泛型类的好处 4.使用泛型注意点: 4.1不同泛型之间不能相互赋值,泛型不存在多态((检查机制)泛型特点(3)) 4.2要注意泛型擦除 //访问时不需要类型转换 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package MyGenerics; import java.util.ArrayList (所以人家的真心不允许被辜负,就没多态了) 2.泛型类、泛型接口、泛型方法 2.1泛型类 语法:类名<T,……..> 举例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
泛型接口和泛型类 泛型接口的定义,public interface man<T>{...}。在接口名后面加上泛型类型参数T,这样就定义了一个泛型接口。 ? ,在类名后面加上泛型类型参数T,这样就定义了一个泛型类。 ? 泛型类 和泛型接口不同,类有构造器,并且构造器也可以使用泛型类型参数。 2.再看另一个问题,如果父类是泛型类型,如何定义子类? ? 泛型类的子类 如果将一个类定义为泛型类,那么在创建该泛型类的子类的时候不能将子类直接继承该泛型类,而是需要指定父类泛型的类型。 使用泛型 由于方法中的泛型需要在定义类的时候就指定,所以如果需要使用含有泛型的方法,必须在创建该泛型类对象的时候就需要指定泛型类型,因为使用的时候必须指定类型,不论是普通参数还是泛型参数。 泛型提供了一个泛型通配符用于接收所有类型的泛型类型。 泛型的通配符 ? 通配符 泛型的通配符可以很好的解决所有泛型类型父类的问题,使用<?>来作为类或接口的泛型参数,这样就可以抽象出泛型类的父类。
Java泛型是使用类型擦除来实现的。这表示在运行过程中任何和类型有关的信息都会被擦除,所有在运行中 ArrayList和ArrayList的具体信息都被擦除成它们的原生类型即ArrayList类型。 由于擦除机制,泛型不能用于显示地引用运行时类型的操作之中,例如转型、new表达式和instanceof操作。 若在泛型内部必须使用类型操作时,可以在运行时采用反射的方法将正在运行的类信息添加到泛型内部,这种方法称为补偿。