清除浮动
在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的现象。这个现象叫浮动溢出,为了防止这个现象的出现而进行的CSS处理,就叫CSS清除浮动。清除浮动的本质:主要是为了解决父级元素因为子级浮动引起的内部高度为0的问题。
示例
方法
示例12345678910111213141516171819202122232425<style> .container { background-color: gray; border: solid 1px black; } .container .content { background-color: darksalmon; float: left; margin-left: 10px; } .container p { background-color: aquamari ...
压缩算法
题目描述
思路
代码
题目描述小Q想要给他的朋友发送一个神秘字符串,但是他发现字符串的过于长了,于是小Q发明了一种压缩算法对字符串中重复的部分进行了压缩,对于字符串中连续的m个相同字符串S将会压缩为m|S,例如字符串ABCABCABC将会被压缩为[3|ABC],现在小Q的同学收到了小Q发送过来的字符串,你能帮助他进行解压缩么?
输入描述输入第一行包含一个字符串s,代表压缩后的字符串。S的长度<=1000;S仅包含大写字母、[、]、|;解压后的字符串长度不超过100000;压缩递归层数不超过10层;
输出描述
输出一个字符串,代表解压后的字符串。
输入
HG[3|B[2|CA]]F
输出
HGBCACABCACABCACAFHG[3|B[2|CA]]F−>HG[3|BCACA]F−>HGBCACABCACABCACAF
思路可以通过递归的方法实现,每次寻找最内层的[n|xx]通过截取n和xx字符串,将[n|xx]解压并替换,再将当前的字符串递归,直至字符串没有[n|xx],输出字符串。
代码12345678910111213141516var reg = /\ ...
数组扁平化
数组扁平化是指将一个多维数组变为一维数组[1, [2, 3, [4, 5]]] ——> [1, 2, 3, 4, 5]
递归法
reduce 实现
split法
正则匹配
ES6
递归法通过判断当前是否是数组,然后通过递归实现
1234567891011unction flatten (arr) {let res = []arr.map((item) => {if(Array.isArray(item)){res = res.concat(flatten(item))} else {res.push(item)}})return res}
reduce 实现1234567891011function flatten (arr) {let res = []arr.map((item) => {if(Array.isArray(item)){res = res.concat(flatten(item))} else {res.push(it ...
js实现最优打字策略
这是一道京东校招的笔试题目,有两种实现方式,最好的实现方式是通过贪心算法,本篇还未通过贪心算法实现,后续会继续实现。
题目描述
思路
代码
题目描述在英文的输入中,我们经常会遇到大小写切换的问题,频繁切换大小写会增加我们的按键次数,也会降低我们的打字效率。 众所周知,切换大小写有两种方式:
一种是按下”caps locks”,也就是大写锁定键,这样一来,之后的输入模式都会被切换。
另一种是同时按下shift和需要打印的字母,可以临时切换大小写(算作按下两个键)。已知初始状态下,打字模式是小写,现在给出需要打印的字符串(区分大小写),请你计算出最少需按键多少次才能打印出来。
输入:
输入第一行仅包含一个正整数n,表示字符串的长度(1<=n<=1000000)输入第二行包含一个长度为n的字符串,仅包含大小写字母
输出:
输出仅包含一个正整数,即最少的按键次数。
样例输入:
6AaAAAA
样例输出:
8
思路这是一道值得思考的题
如果当前是小写模式,并且当前字母是小写,那么直接加一,这样最省事。
如果当前是小写模式,而当前字母是大写,这样就有两种选择了。
...
作用域var和let和const的区别
ES6 之前 JavaScript没有块级作用域,只有全局作用域和函数作用域。ES6的到来,为我们提供了‘块级作用域’,可通过新增命令let和const来体现。
作用域(Scope)
var和let和const的区别
作用域(Scope)作用域是可访问变量的集合。
示例12345function Fun() { var value = "内层变量";}Fun();console.log(value);
从上面的例子中可以看出,因在全局作用域里没有声明value变量,所以在全局作用域下取值会报错。简单理解:作用域就像一个独立的区域,让变量不会外泄。
全局作用域和函数作用域123456789101112131415// --全局作用域的变量声明--var value = "外层变量1"var outVariable = '外层变量2'//函数作用域 function Fun() { var value = "内层变量1"; var inVariable = ...
JS获取URL中参数值
当你进行表单提交用到get的方式的时候,经常会需要在跳转页面中获取URL中的参数,所以本篇就介绍获取URL参数的两种方法:
正则法
split拆分法
正则法通过正则表达式对URL进行匹配
函数代码12345678function GetQueryString(name) { var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i'); var r = window.location.search.substr(1).match(reg);//匹配URL的'?'符之后的正则表达式 if (r != null) { return unescape(r[2]); } return null;}
部分函数解析
RegExp()RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具。substr()在字符串中抽取从 start 下标开 ...
Vue生命周期
Vue生命周期是指vue实例对象从创建之初到销毁的过程,vue所有功能的实现都是围绕其生命周期进行的,在生命周期的不同阶段调用对应的钩子函数可以实现组件数据管理和DOM渲染两大重要功能。
vue生命周期
代码详解
vue生命周期每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不 同阶段添加自己的代码的机会。如下是Vue生命周期的所有钩子函数
beforeCreate(创建前)created(创建后)beforeMount(挂载前)mounted(挂载后)beforeUpdate(更新前)uptaded(更新后)beforeDestory(销毁前)destoryed(销毁后)
代码详解测试代码
12345678910111213141516171819202122232425262728293031323334<!DOCTYPE html><html><head><meta cha ...
JS快速排序算法
为什么选择快速排序?
实现思路
代码实现
总结
为什么选择快速排序?相比传统的排序算法(for循环嵌套),时间复杂度由**O(n²) => O(logn)**。当数据量大的时候就会体现出快排与传统的排序速度的差异,下面我来实现快排的一种方法。
各大排序算法比较
类别
排序方法
时间复杂度
空间复杂度
稳定性
平均情况
最好情况
最坏情况
辅助存储
插入排序
直接插入
O(n²)
O(n)
O(n²)
O(1)
稳定
Shell排序
O(n^1.3)
O(n)
O(n²)
O(1)
不稳定
选择排序
直接选择
O(n²)
O(n²)
O(n²)
O(1)
不稳定
堆排序
O(nlogn)
O(nlogn)
O(nlogn)
O(1)
不稳 ...
js数组去重-ES6
数组去重是面试经常会遇到的问题,解决的方案有很多,本篇着重通过es6提供的新的数据结构来解决。
Map对象解决去重
Set对象解决去重
Map对象解决去重Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
Map对象
方法
描述
clear
删除所有的键/值对,没有返回值
delete
删除某个键,返回true。如果删除失败,返回false。
forEach
对每个元素执行指定操作。
get
返回Map对象key相对应的value值。
has
返回一个布尔值,表示某个键是否在当前Map对象之中。
set
给Map对象设置key/value键/值对。
数组去重1234function unique(arr) { const res = new Map(); return arr.filter((a) => !res.has(a) && res.set(a, 1))}
Array.filter()
创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
...
http和https
http和https的概念
http常见的状态码
http和https的区别
https相对于http的改进
https的工作原理
http和https的概念HTTP协议是一种使用明文数据传输的网络协议。HTTPS协议可以理解为HTTP协议的升级,就是在HTTP的基础上增加了数据加密。在数据进行传输之前,对数据进行加密,然后再发送到服务器。
http常见的状态码
状态码
响应类别
原因
1XX
信息性状态码(Informational)
服务器正在处理请求
2XX
成功状态码(Success)
请求已正常处理完毕
3XX
重定向状态码(Redirection)
需要进行额外操作以完成请求
4XX
客户端错误状态码(Client Error)
客户端原因导致服务器无法处理请求
5XX
服务器错误状态码(Server Error)
服务器原因导致处理请求出错
1xx(信息)
100 Continue继续。客户端应继续其请求101 Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的 ...