Codog

关注微信公众号:Codog代码狗

0%

首先,要知道总共有几种数据类型,截至今日,共分7种基本数据类型:string, number, bigint, boolean, null, undefined, symbol和object类型,总共8种。

常见的方式是使用typeof方法,基本数据类型都可以返回,还可以判断方法,其余统一返回”object”,注意,其中typeof null === ‘object’

数据 输出值
Undefined “undefined”
Null “object”
Boolean “boolean”
Number “number”
BigInt “bigint”
String “string”
Symbol “symbol”
宿主对象 取决于具体实现
Function 对象 “function”
其他任何对象 “object”

这种方式很便捷,但不能检测出数组类型。

ES6中数组新增isArray方法也可以用来检测

那有没有更普适的方法呢?答案是有的,使用Object.prototype.toString()方法:

示例:

image

此方法会返回形如[object XXX]格式的字符串,其中XXX可以用来判断我们的数据类型

MDN参考

GET和POST是什么?HTTP协议中的两种发送请求的方法。

HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。

HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。

GET产生一个TCP数据包;POST产生两个TCP数据包。

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

参考自w3schools:

  • GET在浏览器回退时是无害的,而POST会再次提交请求。

  • GET产生的URL地址可以被Bookmark,而POST不可以。

  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。

  • GET请求只能进行url编码,而POST支持多种编码方式。

  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

  • GET请求在URL中传送的参数是有长度限制的,而POST么有。

  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

  • GET参数通过URL传递,POST放在Request body中。

GET和POST最大的区别主要是GET请求是幂等性的,POST请求不是。

什么是幂等性?幂等性是指一次和多次请求某一个资源应该具有同样的副作用。简单来说意味着对同一URL的多个请求应该返回同样的结果。

https://www.oschina.net/news/77354/http-get-post-different

https://juejin.im/entry/597ca6caf265da3e301e64db

leetcode206题: https://leetcode-cn.com/problems/reverse-linked-list/submissions/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var reverseList = function(head) {
if (!head || !head.next) {
return head
}

let pre = null
let cur = head
let next
// 借助临时变量,按层次依次赋值,实现变量移动
while (cur) {
next = cur.next
cur.next = pre
pre = cur
cur = next
}
return pre
};

自我介绍要突出工作经历,学历、背景突出的话也可以说一句,介绍项目可以简单说一下业务,主要围绕使用技术栈、个人负责内容、以及做了哪些额外工作,比如优化了多少代码、达到了什么效果,抽离了多少组件,提高了开发效率。

介绍最后可以简单说下换工作的原因,有一次介绍完之后面试官直接问我换工作的原因,我回答除了业务开发,也想参与技术项目,使用的技术栈也可以更丰富些,然而经过一些交流发现对方和我目前的处境类似,所以就没有再进行下去了。(当然如果对换工作比较急、或者手上没有满意的offer时慎重,面试官可能觉得你对工作内容比较“挑剔”,面试本来就是双向选择的过程)

开放性题目,回答首先要说出业内默认会做的;然后再说出几条个人比较了解的

常见的推荐雅虎35条军规:https://www.cnblogs.com/xianyulaodi/p/5755079.html

或者精简版14条:https://www.jianshu.com/p/a6f197934cf5。

上面提到的多而全,可能有的平时已经在做了但没感觉到而已;

(1) 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。
(2) 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数
(3) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。
(4) 当需要设置的样式很多时设置className而不是直接操作style。
(5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。
(6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。
(7) 图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。
(8) 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢。
对普通的网站有一个统一的思路,就是尽量向前端优化、减少数据库操作、减少磁盘IO。向前端优化指的是,在不影响功能和体验的情况下,能在浏览器执行的不要在服务端执行,能在缓存服务器上直接返回的不要到应用服务器,程序能直接取得的结果不要到外部取得,本机内能取得的数据不要到远程取,内存能取到的不要到磁盘取,缓存中有的不要去数据库查询。减少数据库操作指减少更新次数、缓存结果减少查询次数、将数据库执行的操作尽可能的让你的程序完成(例如join查询),减少磁盘IO指尽量不使用文件系统作为缓存、减少读写文件次数等。程序优化永远要优化慢的部分,换语言是无法“优化”的。

一般情况可以满足面试官要求了,但这些都是普适的,还要根据自身经历说出几点。

image

JS优化

image

图片优化

网站最开始都是多页的,每个页面都对应一个完整结构的HTML文件,这样每次操作都会重新请求数据,造成资源浪费。

Ajax技术兴起,慢慢出现了SPA(单页应用),整个应用都在一个HTML文件上,大大减少数据请求,交互体验也变得更加流畅。

单页也有它的弊端,无法保留用户状态,页面刷新又恢复初始状态。这时就需要前端路由了。

阅读全文 »

深度优先搜索

基本原理就是不断对子节点进行深度优先搜索,递归思想:

1
2
3
4
5

function dfs(root) {
console.log(root.val);
root.children.forEach(dfs);
}

image

广度优先搜索

借助队列数据结构,现将根结点入队,然后出队,访问节点并入队所有子节点。然后重复入队这些子节点,知道队列为空

1
2
3
4
5
6
7
8
9
function bfs(root) {
let p = [root];
while(p.length) {
const t = p.shift();
console.log(t.val)
// 将当前节点的所有子节点入队,保证下一层的子节点顺序
t.children.forEach(m => p.push(m))
}
}

image

https://www.geeksforgeeks.org/inorder-tree-traversal-without-recursion/

https://stackoverflow.com/questions/5278580/non-recursive-depth-first-search-algorithm

例如,树结构是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

var tree = {
val: 1,
left: {
val: 2,
left: {
val: 4,
left: null,
right: null
},
right: {
val: 5,
left: null,
right: null
}
},
right: {
val: 3,
left: null,
right: null
}
}

DFS输出:

https://www.geeksforgeeks.org/iterative-postorder-traversal-using-stack/?ref=rp

https://www.techiedelight.com/postorder-tree-traversal-iterative-recursive/

MDN定义:

块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域。

阅读全文 »