从后端走向前端 Web 发展初期 在 Web 发展初期,前后端是如何协作的呢? 纵观 Web 发展史,从模板引擎到 ajax、从后端路由到前端路由,这一路走来,技术重心已逐渐转移到前端。 小程序 这几年来,随着各种 小程序 的问世,Web 前端技术早已超脱了浏览器和 Hybrid 应用的范围。前端工程师很容易基于已有技术栈快速上手和开发小程序类微应用。 快应用 2018年3月20日,业内传出一则消息,小米、中兴、华为、金立、联想、魅族、OPPO、vivo、一加、努比亚十大手机生成厂商联合,开始共建快应用开发平台。 electron 在移动端进行布局的同时,前端工作者们还把目光放到了桌面客户端上。
比如说思考一下这个问题:前端到底是个什么神仙工作,说起来也从事前端开发好几年了,但是真正在这里面收获的有什么东西么? 好像有,又好像没有。 再后来,移动互联网兴起之后,又出现了大前端的概念。 而泛前端是我早上出门的时候忽然想起来的一个词。刚才搜索了一下,其实网上也有这个概念,这里只谈一下我对它的理解。 前端的概念不在仅仅局限于我们日常开发中的网站,管理后台,小程序,游戏等等,其他的软件以及硬件设备,都可以称之为前端。 从而沉淀出一些对项目的日后的发展有借鉴意义的技术,这个也可以理解为前端的范畴。 前端只是前端,大前端可以理解为全端,而泛前端则是对前端以及大前端的深化。
例如:0,1,1,2,3,5... 1 def fib(n: Int): Int = { 2 @annotation.tailrec 3 def go(cnt: Int, prev 我们可以试着约化: 1 fib(5) 2 go(5,0,1) 3 go(4,1,0+1) = go(4,1,1) 4 go(3,(0+1),1+(0+1)) = go(3,1,2) 5 go(2,1+(0+1),(0+1)+(1+(0+1))) = go(2,2,3) 6 go(1,(0+1)+(1+(0+1)),(1+(0+1))+(0+1)+(1+(0+1))) = go(1,3,5) x + 1)) 5 println(formatResult("increment2", 7, (x) => x + 1)) 6 println(formatResult("increment3"
文章目录介绍接口泛型自定义类型接口、泛型、自定义相对比结论介绍在Vue3中,我们不仅可以利用其强大的响应式系统和组件化开发来构建灵活的前端应用程序,还可以利用TypeScript(简称TS)的特性来增强代码的可读性 在本文中,我们将深入探讨Vue3中接口、泛型和自定义类型的使用,以便更好地利用这些功能来构建优秀的Vue应用接口首先我们介绍一下接口接口在Vue3中是一种定义对象结构的方式,它可以用来描述对象的形状,包括属性和方法 、自定义相对比接口 vs 泛型:接口用于描述对象的形状,泛型用于增强代码的灵活性。 接口在定义对象结构时更为直观,而泛型适用于编写通用的、适用于多种类型的代码。泛型 vs 自定义类型:泛型用于增强代码的灵活性,而自定义类型用于提高代码的可读性和类型安全性。 泛型可以用于编写通用的代码,而自定义类型用于定义具体的类型结构。结论在Vue3中,接口、泛型和自定义类型是强大的工具,可以帮助我们编写更加健壮、灵活和可维护的代码。
3、泛型集合 示例:结合泛型与集合编写一个案例实现图书信息输出 1)创建一个Book类(图书编号、图书名称、价格) public class Book { // 定义Book类 (完整javabean } } } 运行结果 泛型Map存储的图书信息如下: 1001——1 唐诗三百首 18 1002——2 小星星 12 1003——3 成语大全 22 泛型List存储的图书信息如下: 1 唐诗三百首 4.2 示例 创建一个学生的泛型类,包含姓名、年龄和性别3个属性 1)创建一个学生的泛型类 public class Stu<N,A,S> { //定义学生泛型类 private N name // 1) 定义一个Book类,代码同3、泛型集合示例第一个 // 2) 定义Book泛型方法的测试类 public class BookDemo { //创建book泛型方法的实现类 public //继承泛型类 public class FatherClass<T1>{} public class SonClass<T1,T2,T3> extents FatherClass<T1>{} //在泛型中实现接口
入门类 地址 前端入门教程 http://www.cnblogs.com/jikey/p/3613082.html 瘳雪峰的Javascript教程 www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000 jQuery基础教程 http://www.imooc.com/view/11 前端工程师必备的 PS技能——切图篇 http://www.imooc.com/view/506 结合个人经历总结的前端入门方法 https://github.com/qiu-deqing/FE-learning 工具类 地址 前端人的俱乐部 http://f2er.club/ 真可以解放你的收藏夹 如何优雅地使用Sublime Text http://www.jeffjade.com/2015/12/15/2015 雪碧图制作 http://www.imooc.com/learn/93 版本控制入门 – 搬进 Github http://www.imooc.com/learn/390 Grunt-beginner前端自动化工具
> </body> </html> css代码 :root { /** 白天样式 **/ --blue-background: #C2E9F6; --blue-border: #72cce3;
由此可见,CommonJS 最初是服务于服务端的,所以我说 CommonJS 不是前端,但它的载体是前端语言 JavaScript,为后面前端模块化的盛行产生了深远的影响,奠定了结实的基础。 CommonJS:不是前端却革命了前端! 当一个前端应用业务规模足够大后,这种依赖关系又变得异常难以维护。 综上所述,前端需要模块化,并且模块化不光要处理全局变量污染、数据保护的问题,还要很好的解决模块之间依赖关系的维护。 如果一个模块的对外接口,就是一个单一的值,可以使用 module.exports 导出 // a.js var name = 'morrain' var age = 18 module.exports = name 3、 的代码,找到 require 这个关键字,提取所有的依赖项,然后加载,等到依赖的所有模块加载完成后,执行回调函数,此时再执行到 require('a.js') 这行代码时,a.js 已经加载好在内存中了 3、
由此可见,CommonJS 最初是服务于服务端的,所以我说 CommonJS 不是前端,但它的载体是前端语言 JavaScript,为后面前端模块化的盛行产生了深远的影响,奠定了结实的基础。 CommonJS:不是前端却革命了前端! 当一个前端应用业务规模足够大后,这种依赖关系又变得异常难以维护。 综上所述,前端需要模块化,并且模块化不光要处理全局变量污染、数据保护的问题,还要很好的解决模块之间依赖关系的维护。 如果一个模块的对外接口,就是一个单一的值,可以使用 module.exports 导出 // a.js var name = 'morrain' var age = 18 module.exports = name 3、 的代码,找到 require 这个关键字,提取所有的依赖项,然后加载,等到依赖的所有模块加载完成后,执行回调函数,此时再执行到 require('a.js') 这行代码时,a.js 已经加载好在内存中了 3、
list: List }; data = { myNum: 50, syncNum: 100, items: [1, 2, 3, $emit('some-event', 1, 2, 3) // 触发组件中的自定义事件 this. $emit('childFun', 1, 2, 3) //$invoke 父组件向子组件发送事件: 使用import导入子组件后,在使用时可以直接通过 this. $invoke('子组件,必须要单引号括起来', '子组件方法名称', param1,param2,param3.......); 子组件间发送事件: this. $invoke('子组件的相对路径', '子组件方法名称', param1,param2,param3.......); 子组件的相对路径的理解: 当设置'./'即当前组件,'..
> 四、泛型安全检查 五、完整代码示例 1、泛型类 / 方法 2、main 函数 一、泛型类用法 ---- 泛型类用法 : 使用时先声明泛型 , 如果不声明泛型 , 则表示该类的泛型是 Object // 推荐写法 Student<String> student3 = new Student<>("Tom", 16, "Cat"); // 不推荐写法 * * @param arg * @return */ public static <T> T getData3(T arg){ T data // 推荐写法 Student<String> student3 = new Student<>("Tom", 16, "Cat"); // 不推荐写法 // 如果给传入参数设置 String , 隐含将泛型 T 设置为 String 类型 String data3 = student.getData2("Mouse");
单页应用不仅仅是在页面交互是无刷新的,连页面跳转都是无刷新的,为了实现单页应用,所以就有了前端路由。 前端路由 1. hash 模式 改变 url 的情况下,保证页面的不刷新。 通过这些就能用另一种方式来实现前端路由了,但原理都是跟 hash 实现相同的。 服务端渲染实现原理机制:在服务端拿数据进行解析渲染,直接生成 html 片段返回给前端。 然后前端可以通过解析后端返回的 html 片段到前端页面,大致有以下两种形式: 1、服务器通过模版引擎直接渲染整个页面,例如 java 后端的 vm 模版引擎,php 后端的 smarty 模版引擎。 2、服务渲染生成 html 代码块, 前端通过 AJAX 获取然后使用 js 动态添加。
vue3新特性:组合式API;更好支持TypeScript;状态存储框架Pinia1.package.json运行scripts脚本,里面的build打包文件2.都是在index.html这一个单页面进行交互 main.ts通过createApp函数创建一个应用实例,在实例中构建各种应用(.vue)文件是组件 / 页面(包含\</ template>模板,\</ script>脚本,\</ style>样式)3.
文章目录 一、泛型简介 二、泛型类 三、泛型方法 四、静态方法的泛型 五、泛型类与泛型方法完整示例 一、泛型简介 ---- 泛型 可以 简单理解为 参数化类型 , 主要作用在 类 , 方法 , 接口 上 , Java 泛型开发好之后 , 在 编译阶段 就 将泛型相关的信息消除 了 , 不会泛型留到运行时 ; 泛型类型 : 泛型方法 : 方法有参数 , 方法的参数 可以指定成一些 泛型 ; 泛型类 : ---- 泛型方法 : 在方法的 返回值前 , 使用 <T> 声明泛型的方法 , 是泛型方法 ; 将某个类型作为参数传入 ; 泛型个数 : 该方法是泛型方法 , 且指定了 2 个泛型 , 泛型的个数可以有很多个 , 多个泛型之间 , 使用逗号隔开 ; 泛型方法 与 泛型类 中的泛型 : 泛型不同 : 泛型方法指定的泛型 T 与 类中的泛型 T 没有任何关系 , 这两个 T 可以是不同的类型 ; 泛型相同 * * @param arg * @return */ public static <T> T getData3(T arg){ T data
3、:hover表示,用户鼠标悬停的时候链接的样式,是英文“悬停”的意思。 4、:active表示,用户用鼠标点击这个链接,但是不松手,此刻的样式,是英文“激活”的意思。 但是前端开发工程师在大量的实线中,发现不写link、visited浏览器也挺兼容,所以把a标签简化了。 a:link、a:visited都是可以省略的,简写在a标签里面。 purple; color:white; } .nav ul li a:hover{ background-color: orange; } 3 red url(1.jpg) no-repeat 100px 100px fixed; 等价于: 1background-color:red; 2background-image:url(1.jpg); 3background-repeat 3、z-index值没有单位,就是一个整数值。默认的z-index值为0。 4、定位了的元素,永远能够压住没有定位的元素。
了解display:inline-block; 会用display:inline-block;进行布局 了解用display:inline-block;进行布局时,出现的元素高低不平的解决方案(ver
文章目录 一、泛型类 二、泛型参数 三、泛型函数 四、多泛型参数 五、泛型类型约束 一、泛型类 ---- 定义一个 泛型类 , 将 泛型参数 T 放在 尖括号 <T> 中 , 该泛型参数放在 类名后 下面的代码中 , 声明了 Student 泛型类 , 该泛型类 接收 T 类型的泛型参数 , 在主构造函数中接收 T 类型的参数 , 在该泛型类中声明了 T 类型的成员属性 ; class Student ---- 通常情况下 , 泛型参数 都使用 T 表示 , 使用其它字母 或者 字符串 都可以表示 泛型参数 , 但是 约定俗成 都使用 T 来表示泛型 ; 在下面的代码中 , 使用 M 作为 泛型参数 ---- 泛型函数 中 如果涉及到 匿名函数 参数 , 匿名函数 的 参数返回值 都是泛型 的话 , 在该泛型函数 中可能需要使用多个泛型 , 使用不同的字母表示不同的泛型 ; 如果函数中 引入了新的泛型类型 R 的类型是 Boolean 类型 ; 3.14 true 五、泛型类型约束 ---- 在 泛型类 , 泛型函数 中 , 使用泛型前 , 需要声明 泛型参数 : 泛型类 泛型参数 声明 : 如果类中
不然 泛型集合和ArrayList的装箱拆箱 常见的泛型类型 泛型类和泛型方法 泛型约束 泛型委托 ###泛型很难理解? 2.创建泛型类,可在编译时创建类型安全的集合 3.避免装箱和拆箱操作降低性能,在大型集合中装箱和拆箱的影响非常大. list1 = new System.Collections.ArrayList(); list1.Add(3); list1.Add(105); 例如 System.Collections.ArrayList list1 = new System.Collections.ArrayList(); list1.Add(3) interface GenericInterface<T> { void GenericMethod(T t); } 3.泛型方法
泛型 什么是泛型: 泛型就相当于标签 形式:<> jdk1.5之后,用泛型来解决元素类型不确定的数据保存操作, 例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型 泛型对应的类型都是引用类型不能是基本类型 泛型类和泛型接口 声明泛型类时传入类型实参 创建泛型类对象时,传入类型实参 类型实参为空时,默认为Object类型 继承泛型类: 1.泛型父类不传入类型实参 ,默认为Object类型 2.泛型父类传入类型实参,子类既可以是泛型类,也可以不是 3.泛型父类传入类型实参,则子类必须是泛型类,且子类的类型形参列表必须包含父类的类型形参列表 泛型类的定义和实例化 泛型类的构造器写法: 不同泛型的引用类型不可以互相赋值 泛型如果不指定,就会被擦除,例子就是 泛型类中的静态方法不能使用类的泛型 不能直接使用泛型数组的创建,如果非要创建 泛型方法 什么是泛型方法 ,不是带泛型的方法就是泛型方法,泛型方法有要求:这个方法的泛型参数类型要和当前类的泛型方法的泛型无关 换个角度:泛型方法对应的那个泛型参数类型和当前所在的这个类,是否为泛型类,泛型是啥,无关 泛型方法定义的时候
Java泛型是使用类型擦除来实现的。这表示在运行过程中任何和类型有关的信息都会被擦除,所有在运行中 ArrayList和ArrayList的具体信息都被擦除成它们的原生类型即ArrayList类型。 由于擦除机制,泛型不能用于显示地引用运行时类型的操作之中,例如转型、new表达式和instanceof操作。 若在泛型内部必须使用类型操作时,可以在运行时采用反射的方法将正在运行的类信息添加到泛型内部,这种方法称为补偿。