LeetCode 003:无重复字符的最长子串
题目地址
https://leetcode.com/problems/longest-substring-without-repeating-characters/description/
题目描述123456789101112131415161718给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
解法 滑动窗口+双指针思路
因为需要找无重复的子串,我们可以定义初始化的子串是第一个字符,也就是 let newS ...
https的图片在移动端展示问题
问题描述引入的 src 图片地址是 https 时,在 pc 端和 h5 均正常显示,但在手机端均无法显示,并且图片链接在微信里面也无法打开;
解决方案123456789<meta name="referrer" content="never" />// 或<img src="https://example.com/images/myimage.jpg" alt="Some image" referrerpolicy="no-referrer"/>
12345678910111213当网站使用refresh字段进行跳转的时候,大多数浏览器不发送referer;从用户从一个HTTPS的网站点击链接到另一个HTTP的网站时,不发送referer;html5中,a标签的rel = “noreferrer”, 可以让浏览器不发送referer;使用Data URI scheme链接的,浏览器也不发送referer;使用Content Security Policy ...
JavaScript面试汇总
前言日常 js 面试题积累汇总。持续更新!
1.JavaScript 的基本数据类型
答案:Number、String、Boolean、Null、Undefined、Symbel(ES6 新增)、BigInt(ES10 新增)Object 是 JavaScript 中所有对象的父对象数据封装类对象:Object、Array、Boolean、Number、和String其他对象:Function、Arguments、Math、Date、RegExp、Errorjs 数据类型
2.JavaScript 的引用类型
答案:
Object
Function
Array
Date
RegExp
3.Javascript 基本数据类型和引用类型的特点
答案:1.基本数据类型:值不可变;数据存放在栈区。2.引用数据类型:值是可变的;同时保存在栈内存和堆内存。
4.检验 JavaScript 的数据类型的方法有哪些,以及使用它们的缺点
答案:
1.typeof:不能判断 null 和区分 Array/Date/RegExp
2.instanc ...
【浏览器】之同源策略
什么是浏览器同源策略?同源:如果两个 URL 的协议、域名(主机名)和端口都相同,我们就称这两个 URL 同源。这两个 URL 是同源的
12https://time.geekbang.org/?category=1https://time.geekbang.org/?category=0
源:就是协议、域名和端口号。
同源策略:SOP(Same origin policy)是由 Netscape 公司 1995 年引入浏览器的一种约定,是浏览器最核心、最基本的安全功能,若缺少了同源策略,浏览器很容易受到 XSS、CSFR 等攻击。所谓同源是指”协议+域名+端口”三者相同,若两个 URL 的协议、域名、端口号都相同,则两者为同源,有一个不同则非同源,即便两个不同的域名指向同一个 ip 地址,也是非同源的
非同源的 URL 在没有明确授权的情况下,不能读写对方资源(不能相互通信)
具体来讲,同源策略主要表现在 DOM、Web 数据和网络这三个层面。
第一个,DOM 层面。同源策略限制了来自不同源的 JavaScript 脚本对当前 DOM 对象读和写的操作。
第二个,数据层面。 ...
【ES6学习笔记】之 解构赋值
概览
解构只是意味着将复杂的结构分解成更简单的部分。在 JavaScript 中,这种复杂的结构通常是一个对象或一个数组。使用解构语法,您可以从数组和对象中提取更小的片段。解构语法可用于变量声明或变量赋值。您还可以使用嵌套解构语法来处理嵌套结构。
123456789101112131415161718192021222324// oldconst student = { name: 'John Doe', age: 16, scores: { maths: 74, english: 63, science: 85, },}function displaySummary(student) { console.log('Hello, ' + student.name) console.log('Your Maths score is ' + (student.scores.maths || 0)) console.log('Your En ...
【ES6学习笔记】之 变量
概览ES6 新增了两个定义变量的关键字:let 与 const,它们几乎取代了 ES5 定义变量的方式:var。let是新的var,const简单的常量声明。
12345678910111213function f() { { let x { // okay, block scoped name const x = 'sneaky' // error, const x = 'foo' } // error, already declared in block let x = 'inner' }}
ES6 之前变量之前存在两个问题:
JS 没有块级作用域。在 JS 函数中的 var 声明,其作用域是函数体的全部。
循环内变量过度共享
块级作用域let,const创建的变量都是块级作用域:它们只存在包围它们的最深代码块中。
作用域有哪些?
块级作用域
函数作用域
全局作用域
1234567 ...
js去除中括号
12345var str = '这是一个字符串[html]语句;[html]字符串很常见';<br>alert(str.replace(/\[|]/g,''));//移除字符串中的所有[]括号(不包括其内容)//输出:这是一个字符串html语句;html字符串很常见<br>alert(str.replace(/\[.*?\]/g,''));//移除字符串中的所有[]括号(包括其内容)//输出:这是一个字符串语句;字符串很常见
移除所有中括号,不包括其内容123let str = '[1,2,3,4,5,6,7,8]'let newStr = str.replace(/\[|]/g, '')console.log(newStr) //1,2,3,4,5,6,7,8
移除所有中括号,包括其内容123let str = '[1,2,3,4,5,6,7,8]'let newStr = str.replace(/\[.*?\]/g, ' ...
【跟着大佬学JavaScript】之数组去重(结果对比)
前言数组去重在面试和工作中都是比较容易见到的问题。
这篇文章主要是来测试多个方法,对下面这个数组的去重结果进行分析讨论。如果有不对的地方,还请大家指出。
1const arr = [ 1, 1, "1", "1", 0, 0, "0", "0", true, false, "true", "false", "a", "A", undefined, undefined, "undefined", null, null, 'null', NaN, NaN, +0, -0, new String("1"), new String("1"), Symbol(1), Symbol(1), {}, {}, /a/, /a/, [], [] ];
特殊类型1234567891011121314151617181920212 ...
【跟着大佬学JavaScript】之lodash防抖节流合并
前言前面已经对防抖和节流有了介绍,这篇主要看 lodash 是如何将防抖和节流合并成一个函数的。
初衷是深入 lodash,学习它内部的好代码并应用,同时也加深节流防抖的理解。这里会先从防抖开始一步步往后,由简入繁,直到最后实现整个函数。
这里纯粹自己的理解,以及看了很多篇优质文章,希望能加深对节流防抖的理解,如果有不同意见或者看法,欢迎大家评论。
原理前面虽然已经介绍过防抖和节流原理,这里为了加深印象,再搬过来。
防抖的原理:在 wait 时间内,持续触发某个事件。第一种情况:如果某个事件触发 wait 秒内又触发了该事件,就应该以新的事件 wait 等待时间为准,wait 秒后再执行此事件;第二种情况:如果某个事件触发 wait 秒后,未再触发该事件,则在 wait 秒后直接执行该事件。
通俗点说:定义 wait=3000,持续点击按钮,前后点击间隔都在 3 秒内,则在最后一次点击按钮后,等待 3 秒再执行 func 方法。如果点击完按钮,3 秒后未再次点击按钮,则 3 秒后直接执行 func 方法。
节流的原理:持续触发某事件,每隔一段时间,只执行一次。
通俗点 ...
【跟着大佬学JavaScript】之节流
前言js 的典型的场景
监听页面的 scroll 事件
拖拽事件
监听鼠标的 mousemove 事件…
这些事件会频繁触发会影响性能,如果使用节流,降低频次,保留了用户体验,又提升了执行速度,节省资源。
原理
节流的原理:持续触发某事件,每隔一段时间,只执行一次。
通俗点说,3 秒内多次调用函数,但是在 3 秒间隔内只执行一次,第一次执行后 3 秒 无视后面所有的函数调用请求,也不会延长时间间隔。3 秒间隔结束后则开始执行新的函数调用请求,然后在这新的 3 秒内依旧无视后面所有的函数调用请求,以此类推。
简单来说:每隔单位时间( 3 秒),只执行一次。
实现方式目前比较主流的实现方式有两种:时间戳、定时器。
时间戳实现使用时间戳实现:首先初始化执行事件的时间 previous 为 0,然后将当前的时间戳减去上次执行时间(now - previous),如果大于 wait,则直接执行函数,并且将此时的执行时间 now 赋给 previous(previous = now)。
由于首次 previous = 0,则此时函数第一次触发就会立即执行。
后续则每隔 w ...