从后端走向前端 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回归。
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
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>.
防抖和节流是两种常见的前端性能优化技术,它们都可以用来减少函数执行的次数,提高页面性能。 防抖 防抖(Debounce)是指在一定时间内多次触发同一个事件,只执行最后一次触发事件的函数。 总之,防抖和节流是前端开发中常用的性能优化技术,可以有效地减少函数执行次数,提高页面性能。
文章目录 一、泛型类 二、泛型参数 三、泛型函数 四、多泛型参数 五、泛型类型约束 一、泛型类 ---- 定义一个 泛型类 , 将 泛型参数 T 放在 尖括号 <T> 中 , 该泛型参数放在 类名后 下面的代码中 , 声明了 Student 泛型类 , 该泛型类 接收 T 类型的泛型参数 , 在主构造函数中接收 T 类型的参数 , 在该泛型类中声明了 T 类型的成员属性 ; class Student ---- 通常情况下 , 泛型参数 都使用 T 表示 , 使用其它字母 或者 字符串 都可以表示 泛型参数 , 但是 约定俗成 都使用 T 来表示泛型 ; 在下面的代码中 , 使用 M 作为 泛型参数 ---- 泛型函数 中 如果涉及到 匿名函数 参数 , 匿名函数 的 参数返回值 都是泛型 的话 , 在该泛型函数 中可能需要使用多个泛型 , 使用不同的字母表示不同的泛型 ; 如果函数中 引入了新的泛型类型 R 的类型是 Boolean 类型 ; 3.14 true 五、泛型类型约束 ---- 在 泛型类 , 泛型函数 中 , 使用泛型前 , 需要声明 泛型参数 : 泛型类 泛型参数 声明 : 如果类中
文章目录 一、泛型类用法 二、泛型方法用法 三、泛型通配符 <? > 四、泛型安全检查 五、完整代码示例 1、泛型类 / 方法 2、main 函数 一、泛型类用法 ---- 泛型类用法 : 使用时先声明泛型 , 如果不声明泛型 , 则表示该类的泛型是 Object : 指定 泛型类 的泛型为 String 类型 , 那么在该类中凡是使用到 T 类型的位置 , 必须是 String 类型 , 泛型类的 泛型声明 , 使用时在 类名后面 声明 ; / getData2(T arg){ T data = arg; return data; } 指定泛型的方法 : 指定 泛型方法 的泛型类 , 泛型方法 的泛型声明 泛型个数 , 泛型的个数可以有很多个 * 多个泛型之间 , 使用逗号隔开 * * 泛型方法指定的泛型 T 与类中的泛型 T 没有任何关系 *
泛型 什么是泛型: 泛型就相当于标签 形式:<> jdk1.5之后,用泛型来解决元素类型不确定的数据保存操作, 例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型 泛型对应的类型都是引用类型不能是基本类型 泛型类和泛型接口 声明泛型类时传入类型实参 创建泛型类对象时,传入类型实参 类型实参为空时,默认为Object类型 继承泛型类: 1.泛型父类不传入类型实参 ,默认为Object类型 2.泛型父类传入类型实参,子类既可以是泛型类,也可以不是 3.泛型父类传入类型实参,则子类必须是泛型类,且子类的类型形参列表必须包含父类的类型形参列表 泛型类的定义和实例化 泛型类的构造器写法: 不同泛型的引用类型不可以互相赋值 泛型如果不指定,就会被擦除,例子就是 泛型类中的静态方法不能使用类的泛型 不能直接使用泛型数组的创建,如果非要创建 泛型方法 什么是泛型方法 ,不是带泛型的方法就是泛型方法,泛型方法有要求:这个方法的泛型参数类型要和当前类的泛型方法的泛型无关 换个角度:泛型方法对应的那个泛型参数类型和当前所在的这个类,是否为泛型类,泛型是啥,无关 泛型方法定义的时候
文章目录 一、泛型简介 二、泛型类 三、泛型方法 四、静态方法的泛型 五、泛型类与泛型方法完整示例 一、泛型简介 ---- 泛型 可以 简单理解为 参数化类型 , 主要作用在 类 , 方法 , 接口 上 ; java 泛型 与 C++ 模板 : Java 中的泛型 , 是仿照 C++ 中的 模板 开发的 , 目的是让开发者可以写出 通用 , 灵活 的代码 ; 伪泛型 : Java 中的泛型 , 是 伪泛型 , Java 泛型开发好之后 , 在 编译阶段 就 将泛型相关的信息消除 了 , 不会泛型留到运行时 ; 泛型类型 : 泛型方法 : 方法有参数 , 方法的参数 可以指定成一些 泛型 ; 泛型类 : ---- 泛型方法 : 在方法的 返回值前 , 使用 <T> 声明泛型的方法 , 是泛型方法 ; 将某个类型作为参数传入 ; 泛型个数 : 该方法是泛型方法 , 且指定了 2 个泛型 , 泛型的个数可以有很多个 , 多个泛型之间 , 使用逗号隔开 ; 泛型方法 与 泛型类 中的泛型 : 泛型不同 : 泛型方法指定的泛型 T 与 类中的泛型 T 没有任何关系 , 这两个 T 可以是不同的类型 ; 泛型相同
掌握8条泛型规则,打造优雅通用的Java代码在Java开发中泛型以类型安全和代码复用的特性扮演着关键角色掌握好泛型能够确保类型安全、提升代码复用、降低维护成本,打造出优雅通用的代码本文基于 Effective Java 泛型章节汇总出8条泛型相关习惯不要使用原生态类型在早期的JDK中,从集合中获取对象时都需要强制转换如果在添加对象时,不小心将不同类型的对象加入集合,那么获取对象强制转换时会发生报错这种报错并不会在编译期间提示 ,使用泛型可以指定对象的类型,在编译期将泛型擦除并完成强制转换在编译期间当发生这种情况时会在编译期间报错,从而尽早的发现错误为了对历史版本兼容,也可以不需要指定泛型,这种情况称为原生态泛型原生态泛型只是为了兼容历史版本 super X>在某些情况下只能使用原生态泛型:兼容历史版本获取Class对象时只能使用原生态泛型(由于泛型运行时会擦除,因此不能通过泛型获取Class对象) //合法 Class ,因为它能够得到使用泛型的好处优先考虑泛型部分情况下是无法使用列表的而必须使用数组的,比如实现列表时需要使用数组在这种情况下为了通用性也会选择使用泛型,但需要注意无法创建泛型数组第一种方案:定义泛型数组
泛型接口和泛型类 泛型接口的定义,public interface man<T>{...}。在接口名后面加上泛型类型参数T,这样就定义了一个泛型接口。 ? ,在类名后面加上泛型类型参数T,这样就定义了一个泛型类。 ? 泛型类 和泛型接口不同,类有构造器,并且构造器也可以使用泛型类型参数。 2.再看另一个问题,如果父类是泛型类型,如何定义子类? ? 泛型类的子类 如果将一个类定义为泛型类,那么在创建该泛型类的子类的时候不能将子类直接继承该泛型类,而是需要指定父类泛型的类型。 使用泛型 由于方法中的泛型需要在定义类的时候就指定,所以如果需要使用含有泛型的方法,必须在创建该泛型类对象的时候就需要指定泛型类型,因为使用的时候必须指定类型,不论是普通参数还是泛型参数。 泛型提供了一个泛型通配符用于接收所有类型的泛型类型。 泛型的通配符 ? 通配符 泛型的通配符可以很好的解决所有泛型类型父类的问题,使用<?>来作为类或接口的泛型参数,这样就可以抽象出泛型类的父类。
简介 泛型是JDK 5引入的概念,泛型的引入主要是为了保证java中类型的安全性,有点像C++中的模板。 但是Java为了保证向下兼容性,它的泛型全部都是在编译期间实现的。 本文将会详细讲解泛型在java中的使用,以避免进入误区。 接下来我们考虑泛型的情况,List<Number> 是不是 List<Integer>的父类呢?很遗憾,并不是。 我们得出这样一个结论:泛型不是协变的。 为什么呢? 刚刚我们讲到Array是协变的,如果在Array中带入泛型,则会发生编译错误。比如new List<String>[10]是不合法的,但是 new List<?>[10]是可以的。因为在泛型中? 所以我们在使用泛型时候的一些操作会遇到问题。 假如我们有一个泛型的类,类中有一个方法,方法的参数是泛型,我们想在这个方法中对泛型参数进行一个拷贝操作。
width: calc(5px + 100px) width: calc(6em * 8) width: calc(100% - 5px) 3.in 运算符 in 运算符可以检查是否在数组中存在的索引, <mi>c</mi> <mn>2</mn> </msup> </mrow> </math> 8.
2.再用两张图理解“前端路由” 在WebAPP的世界里,单页系统比较常见。 单页系统的好处?快、动效多,超不多就这些优势吧。 这样给用户一个困扰,怎么在界面上点了半天,浏览器的地址为啥没变呢? 3.三坨代码,学会实战 STEP1.在Vue的入口函数——main.js,注入router对象 STEP2.在Vue工程中新建router文件夹,编写index.js,用于描述前端路由 新增一个路由, 就在这个文件里面加一条 STEP3.封装一个自己产品的路由工具类 例如:获取URL地址的参数 例如:通过API的形式进行API跳转 关键代码就是下图红框标出来的Vue原生API 4.总结 前端路由是