设计模式手册之迭代器模式
1. 什么是迭代器模式?
迭代器模式是指提供一种方法顺序访问一个集合对象的各个元素,使用者不需要了解集合对象的底层实现。
2. 内部迭代器和外部迭代器内部迭代器:封装的方法完全接手迭代过程,外部只需要一次调用。
外部迭代器:用户必须显式地请求迭代下一元素。熟悉 C++的朋友,可以类比 C++内置对象的迭代器的 end()、next()等方法。
3. 代码实现3.1 python3 实现python3 的迭代器可以用作for()循环和next()方法的对象。同时,在实现迭代器的时候,可以在借助生成器yield。python 会生成传给yeild的值。
12345678910111213141516171819def my_iter(): yield 0, "first" yield 1, "second" yield 2, "third"if __name__ == "__main__": # 方法1: Iterator可以用for循环 for (index, item) in my_iter() ...
Vuex使用
待写….
设计模式手册之代理模式
1. 什么是代理模式?
代理模式的定义:为一个对象提供一种代理以方便对它的访问。
代理模式可以解决避免对一些对象的直接访问,以此为基础,常见的有保护代理和虚拟代理。保护代理可以在代理中直接拒绝对对象的访问;虚拟代理可以延迟访问到真正需要的时候,以节省程序开销。
2. 代理模式优缺点代理模式有高度解耦、对象保护、易修改等优点。
同样地,因为是通过“代理”访问对象,因此开销会更大,时间也会更慢。
3. 代码实现3.1 python3 实现12345678910111213141516171819202122232425262728293031323334class Image: def __init__(self, filename): self.filename = filename def load_img(self): print("finish load " + self.filename) def display(self): print("display " + self.filename)# 借助继承来实现代理 ...
设计模式手册之策略模式
1. 什么是策略模式?
策略模式定义:就是能够把一系列“可互换的”算法封装起来,并根据用户需求来选择其中一种。
策略模式实现的核心就是:将算法的使用和算法的实现分离。算法的实现交给策略类。算法的使用交给环境类,环境类会根据不同的情况选择合适的算法。
2. 策略模式优缺点在使用策略模式的时候,需要了解所有的“策略”(strategy)之间的异同点,才能选择合适的“策略”进行调用。
3. 代码实现3.1 python3 实现12345678910111213141516171819202122232425262728293031323334353637class Stragegy(): # 子类必须实现 interface 方法 def interface(self): raise NotImplementedError()# 策略Aclass StragegyA(): def interface(self): print("This is stragegy A")# 策略Bclass StragegyB(): def interface(self ...
canvas学习和滤镜实现
最近学习了 HTML5 中的重头戏–canvas。利用 canvas,前端人员可以很轻松地、进行图像处理。其 API 繁多,这次主要学习常用的 API,并且完成以下两个代码:
实现去色滤镜:
实现负色(反色)滤镜
1 了解 canvas?1.1 什么是 canvas?这个 HTML 元素是为了客户端矢量图形而设计的。它自己没有行为,但却把一个绘图 API 展现给客户端 JavaScript 以使脚本能够把想绘制的东西都绘制到一块画布上。
1.2 canvas 和 svg、vml 的区别?<canvas> 标记和 SVG 以及 VML 之间的一个重要的不同是,<canvas> 有一个基于 JavaScript 的绘图 API,而 SVG 和 VML 使用一个 XML 文档来描述绘图。
2 canvas 绘图学习大多数 Canvas 绘图 API 都没有定义在 <canvas> 元素本身上,而是定义在通过画布的getContext()方法获得的一个“绘图环境”对象上。而<canvas>元素本身默认的宽高分别是 300px、150px。 ...
设计模式手册之单例模式
1. 什么是单例模式?
单例模式定义:保证一个类仅有一个实例,并提供访问此实例的全局访问点。
2. 单例模式用途如果一个类负责连接数据库的线程池、日志记录逻辑等等,此时需要单例模式来保证对象不被重复创建,以达到降低开销的目的。
3. 代码实现
需要指明的是,以下实现的单例模式均为“惰性单例”:只有在用户需要的时候才会创建对象实例。
3.1 python3 实现1234567891011121314151617181920212223242526class Singleton: # 将实例作为静态变量 __instance = None @staticmethod def get_instance(): if Singleton.__instance == None: # 如果没有初始化实例,则调用初始化函数 # 为Singleton生成 instance 实例 Singleton() return Singleton.__instance def __init__(self): if Singleton.__instance ...
XSS攻击实战
什么是XSS?为了与层叠样式表css区分,将跨站脚本简写为XSS。
XSS攻击原理XSS(Cross Site Scripting)攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。
XSS,两个层次是服务器端和浏览器端。协议就是HTML/CSS/JavaScript。对于服务器端来说,html是数据(字符串);对于浏览器端来说,html是指令。XSS的原理,就是破坏html/css/js的构造。
主要危害
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号 2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力 3、盗窃企业重要的具有商业价值的资料 4、非法转账 5、强制发送电子邮件 6、网站挂马 7、控制受害者机器向其它网站发起攻击
XSS根据效果不同可以分为三类
反射型XSS(reflected)
...
canvas离屏技术与放大镜实现
利用canvas除了可以实现滤镜,还可以利用离屏技术放大镜功能。
为了方便讲解,本文分为 2 个应用部分:
实现水印和中心缩放
实现放大镜
1. 什么是离屏技术?canvas 学习和滤镜实现介绍过drawImage接口。除了绘制图像,这个接口还可以:将一个canvas对象绘制到另一个canvas对象上。这就是离屏技术。
2. 实现水印和中心缩放在代码中,有两个 canvas 标签。分别是可见与不可见。不可见的 canvas 对象上的 Context 对象,就是我们放置图像水印的地方。
更多详解,请看代码注释:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091<!DOCTYPE html><html lang="en"> <head&g ...
前端面试中常考的源码实现
👇 内容速览 👇
手动实现call/apply/bind
实现深拷贝函数
基于ES5/ES6实现双向绑定
instanceof原理与实现
实现支持绑定、解绑和派发的事件类
手动撸个 call/apply/bind实现 call来看下call的原生表现形式:
12345678910111213function test(arg1, arg2) { console.log(arg1, arg2); console.log(this.a, this.b);}test.call( { a: "a", b: "b" }, 1, 2);
好了,开始手动实现我们的call2。在实现的过程有个关键:
如果一个函数作为一个对象的属性,那么通过对象的.运算符调用此函数,this就是此对象
1234567891011let obj = { a: "a", b: "b", test: function(arg1, arg2) { ...
非技术面试问答
面试三大黄金法总的来说,回答问题时遵循这三大黄金法则准没错:
1.你要承担起80%的谈话,留给面试官20%。
2.不要表现得不自信,也不要说空话、说大话。
3.凡事要结合自身,举例子+列数字会让你更接地气、更加分哦!
面试是求职过程中至关重要的一环,无论你简历多么优秀、笔试成绩多高,面试没过,就无法进入心仪的企业。面试题花样虽多,但万变不离其宗,如何把“送命题”变成“送分题”,这就要看你的自我修炼了。
请你自我介绍一下你自已你可能会疑惑:“简历上明明写得很清楚,为什么还要我介绍自己?是 HR 没看简历吗?”
其实,企业最希望知道的是求职者能否胜任工作,而不是学校那点流水账,可以按照下面这两步去阐述,而且用时不超过 3 分钟。
① 简单开场:教育经历、基本信息,一到两句就可以了。② 进入这个行业的原因:做过什么实习,参加过什么比赛,有过什么相关实习经历。
回答提示:大家好,我是 xxx 我是一名 xxx 开发工程师,我毕业于哪所学校,学的是什么专业,在校期间获得了哪些奖项。假期曾在哪家公司的何种岗位实习,帮助公司在 2 个月内取得了什么成果。通过实习发现,这是最适合我的岗位,我也想迎接新 ...