外包对我怀恨在心,处处给我使绊子,有什么办法能让他彻底疯狂?

文摘   2024-11-24 10:12   四川  

最近看到一个帖子:外包对楼主怀恨在心,处处使绊子,还问有什么办法能让对方彻底疯狂。看得我一愣,这年头,工作不仅要技术过硬,还得有点“职场哲学”啊。

说实话,我觉得这种情况首先还是要冷静处理。外包的人也不容易,大部分时候他们的“使绊子”可能是出于误解或者工作压力。

要么试着多沟通,要么用专业技能把问题解决掉。再不济,找到领导反馈,让问题停留在工作层面,不要升级到“职场战争”。

不过说到底,我觉得大家都在同一条船上,最好还是能和平共处。毕竟一个项目跑到一半,内部矛盾搞得鸡飞狗跳,不仅影响工作效率,还让自己的日子更难过。

今日面试题


好了,吃完瓜,我们言归正传,今天跟大家聊聊 JavaScript 本地存储的方式以及它们的区别和应用场景。这个问题可是前端面试中常见的考点,理解透了不仅能应对面试,还能在实际开发中用得得心应手。

在 JavaScript 中,本地存储的方式主要有以下几种:cookiesessionStoragelocalStorageindexedDB。我们从基础到高级,挨个来聊聊这些存储方式的特点、用法、优缺点和适合的场景。

cookie

cookie 是最古老的本地存储方式,它的原始设计是为了解决 HTTP 的无状态问题,用来存储会话信息。它的存储本质是一个小型文本文件,由 name=value 的键值对组成,并可以通过 HTTP 请求头自动传递到服务器。

// 设置 cookie
document.cookie = "username=John; expires=Fri, 31 Dec 2024 23:59:59 GMT; path=/";

// 获取所有 cookie
console.log(document.cookie);

// 删除 cookie (通过设置过期时间)
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/";

cookie的特点:

  1. 存储大小限制:每个域名下的 cookie 大小不能超过 4KB。
  2. 生命周期:可以通过 expiresmax-age 属性设置过期时间,否则为会话级别(浏览器关闭即失效)。
  3. 安全性:标记 Secure 属性可以保证 cookie 仅通过 HTTPS 发送,标记 HttpOnly 属性可防止 JavaScript 访问。
  4. 服务器交互:每次 HTTP 请求都会携带 cookie,增加了请求体积。

通常用于存储需要在客户端和服务器之间交互的少量信息,比如会话标识、用户偏好等。

localStorage

localStorage 是 HTML5 引入的一种本地存储方式,支持更大的存储容量,主要用于长期存储数据。

// 设置数据
localStorage.setItem("username""John");

// 获取数据
const username = localStorage.getItem("username");
console.log(username); // John

// 删除数据
localStorage.removeItem("username");

// 清空所有数据
localStorage.clear();

localStorage的特点:

  1. 存储大小限制:大约 5MB(视浏览器而定)。
  2. 生命周期:除非手动删除,否则数据会永久存储。
  3. 同源策略:同一域名下的页面可以共享数据。
  4. 数据格式:只能存储字符串,如果需要存储对象,需要先使用 JSON.stringify
// 存储对象
localStorage.setItem("user"JSON.stringify({ name"John"age30 }));

// 获取对象
const user = JSON.parse(localStorage.getItem("user"));
console.log(user.name); // John

localStorage的缺点:

  1. 数据持久性可能会带来隐私风险。
  2. 不支持设置过期时间。

适合存储长期数据,比如用户设置、身份令牌等。

sessionStorage

sessionStoragelocalStorage 类似,但生命周期更短。

// 设置数据
sessionStorage.setItem("username""John");

// 获取数据
const username = sessionStorage.getItem("username");
console.log(username); // John

// 删除数据
sessionStorage.removeItem("username");

// 清空所有数据
sessionStorage.clear();

sessionStorage的特点:

  1. 存储大小限制:约 5MB。
  2. 生命周期:仅在页面会话期间有效,浏览器标签页关闭后数据被清除。
  3. 同源策略:仅限同一页面的脚本访问。

用于存储临时数据,比如用户在单个页面会话中的操作状态。

indexedDB

indexedDB 是一种浏览器内置的低级数据库,用于存储大量结构化数据。

// 打开数据库
const request = indexedDB.open("myDatabase"1);

// 创建对象存储
request.onupgradeneeded = function (event{
  const db = event.target.result;
  db.createObjectStore("users", { keyPath"id" });
};

// 存储数据
request.onsuccess = function (event{
  const db = event.target.result;
  const transaction = db.transaction("users""readwrite");
  const store = transaction.objectStore("users");
  store.add({ id1name"John" });
};

indexedDB的特点

  1. 存储容量:理论上无限制(受设备存储限制)。
  2. 支持数据类型:原生支持 JS 对象、二进制文件等。
  3. 异步操作:不会阻塞主线程,性能优于 localStorage
  4. 操作复杂:API 相对繁琐,需要事件回调。

适合存储大量数据,比如离线应用、富文本编辑器中的文档历史等。

好了,我们来总结一下透明的区别:

特性cookielocalStoragesessionStorageindexedDB
存储容量≤ 4KB≈ 5MB≈ 5MB无限
生命周期可设置过期时间永久页面会话永久
与服务器交互每次请求携带不与服务器通信不与服务器通信不与服务器通信
数据类型字符串字符串字符串任意类型

最后,面试官问你:JavaScript 本地存储的方式有哪些?它们的区别和应用场景?

你可以参考一下回答:

JavaScript 本地存储的方式主要有 cookielocalStoragesessionStorageindexedDB。它们的区别如下:

  1. cookie 用于客户端和服务器通信,每次 HTTP 请求都会携带数据,适合存储少量会话信息,但存储容量有限(≤ 4KB)。
  2. localStorage 是持久化存储,数据永久有效,适合存储长期数据(≈ 5MB)。
  3. sessionStorage 是会话级存储,浏览器标签页关闭后数据清除,适合存储临时数据(≈ 5MB)。
  4. indexedDB 是浏览器内置数据库,适合存储大量复杂结构数据,支持高性能查询。

选择存储方式时,应根据数据大小、生命周期和是否需要与服务器交互来决定。例如:

  • cookie:标记用户身份,存储少量信息。
  • localStorage:保存令牌、用户设置等长期数据。
  • sessionStorage:保存临时会话数据。
  • indexedDB:存储大数据量,如离线缓存或文档历史。

目前,对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。

虎哥私藏精品 热门推荐

虎哥作为一名老码农,整理了全网最前端资料合集

资料包含了《前端面试题PDF合集》、《前端学习视频》、《前端项目及源码》,总量高达108GB。

全部免费领取全面满足各个阶段程序员的学习需求!

web前端专栏
回复 javascript,获取前端面试题。分享前端教程,AI编程,AI工具,Tailwind CSS,Tailwind组件,javascript教程,webstorm教程,html教程,css教程,nodejs教程,vue教程。
 最新文章