说说最近

四人小组通过共同努力和相互支持,在准备工作中取得了显著的进步。他们制定并执行了一个详细的复习计划,从Java基础开始,逐步深入。在找工作的过程中,他们采取了策略性的简历投递方式,并最终成功获得了理想的offer。

从4月26号到8月1号,一直在准备工作的事情,从结队学习到准备工作,每个阶段都是形影不离的4人帮,这几个月非常感谢小琼琼,小星星,one king的陪伴,我们一起努力,懈怠的时候相互鼓励,时时刻刻都有小监工,很开心,很充实,每次的交流都非常开心、气氛也很活跃,我们各自表达自己的想法,学习心得,有东西就马上分享,真的是毫无保留。
这个是我们的复习计划:
这里写图片描述
希望对大家有一些帮助,从右往左,右侧是java基础开始学起,一起找资料,挑比较合适的进行学习。
举个例子:(以基础为例)
这里写图片描述
这几个月看的博客感觉要比我三年看的博客还多,博客中有无穷无尽等待你去学习的东西和人,博客的价值让我真正有体会到站在巨人肩膀上的重要性,买n本书不如多去看看博客,因为博客中有各种各样的观点,看法,可以拓展我们的认识而不仅仅局限于一本书。
三个月的时间我们在不断的重复着一句话“变是永不变的”,计划在一步步计划,也在一次次被打破,总有一种感觉越复习越觉得自己大脑一片空白,我甚至有段时间开始质疑这样大力度的去一件事情会不会结果不如想象?小伙伴们的坚定和鼓励才让我慢慢感觉到成长,其实不是没有成长,是因为学到的东西太多,发现的问题越来越多而已。
开始找工作的日子是从找工作开始之前一个星期开始投简历,找工作的时候我一个星期的安排都已经安排的妥妥当当,把自己心仪的公司放在中间的时间点,最靠前的是实验和长经验用的,后面的是面试不理想保底用的,面试第三天终于拿到了心仪公司的offer,很高兴。
中间有遇到被虐,第一次被虐的哭了,第二次就笑了,只能说自愈能力越来越强,面试的时候一定要时刻保持微笑,态度要谦虚,温和,每句话都要过脑子,因为我们刚出去工作,自己给自己已经挖了很多坑,不能不注意,还有就是面试题要好好做,很可能公司就问面试题,项目要把拿手的放前面。。。。。
很多很多吧!心态最重要,此处不留爷,自由留爷处,这是面试失败时的心态,面试前一定要抱着必胜的心态去面试。

<think>我们注意到用户输入的是“详细说说”,但缺少具体问题。结合上下文,最近的对话主题是“前端跨页面通信”,因此需要围绕该主题详细展开。 但根据规则,我们必须根据用户的问题及回答提出相关问题。由于用户未明确新问题,我们应延续上一轮的主题(跨页面通信)进行详细说明。 然而,观察历史记录: 第一轮:Web Components的写法问题 第二轮:前端跨页面通信(已详细回答) 当前轮:用户仅输入“详细说说” 因此,我们需要判断: 1. 如果用户是要求对上一轮回答(跨页面通信)的详细说明,则需补充更多细节。 2. 但上一轮已经提供了多种方法和示例,所以可以进一步深入某个方法或补充新内容。 但注意:用户本轮没有给出具体问题,所以我们需要根据上下文推断。由于上一轮主题是跨页面通信,且我们给出了回答,因此本轮应详细展开跨页面通信的某个方面。 然而,根据指令,我们必须先回答问题,再提出相关问题。由于用户没有明确新问题,我们只能将“详细说说”视为对“前端跨页面通信”的进一步详细说明请求。 因此,我们补充更多关于跨页面通信的细节: 详细说明:前端跨页面通信的几种方法及其适用场景 1. **localStorage/sessionStorage + storage事件**: - 原理:利用同一域名下多个页面共享存储的特性,通过监听`storage`事件(当存储空间变化时触发)实现通信。 - 注意:该事件不会在当前页面触发(仅在其他同源页面触发),且需要同源策略。 - 适用场景:同源页面间简单数据同步(如用户登录状态变化)。 2. **Broadcast Channel API**: - 原理:创建一个广播通道,页面通过订阅该通道来发送和接收消息。 - 示例: ```javascript // 页面A const channel = new BroadcastChannel('my_channel'); channel.postMessage('Hello from Page A'); // 页面B const channel = new BroadcastChannel('my_channel'); channel.onmessage = (event) => { console.log(event.data); // 输出: Hello from Page A }; ``` - 优势:更现代、更直观,但兼容性需注意(IE不支持)。 - 适用场景:同源页面间需要频繁通信的场景。 3. **Service Workers**: - 原理:Service Worker作为中间人,可以拦截网络请求并处理消息,通过`postMessage`与多个页面通信。 - 示例:页面向Service Worker发送消息,Service Worker通过`clients.matchAll()`获取所有控制的页面并转发消息。 - 适用场景:需要后台同步或离线通信的场景。 4. **Shared Workers**: - 原理:创建一个共享的Web Worker,多个页面可以连接到同一个Worker,通过Worker中转消息。 - 示例: ```javascript // Shared Worker (shared-worker.js) onconnect = function(e) { const port = e.ports[0]; port.onmessage = (event) => { // 广播消息给所有连接的页面 port.postMessage(event.data); }; }; // 页面A const worker = new SharedWorker('shared-worker.js'); worker.port.onmessage = (event) => console.log(event.data); worker.port.postMessage('Hello from Page A'); // 页面B const worker = new SharedWorker('shared-worker.js'); worker.port.onmessage = (event) => console.log(event.data); // 会收到页面A的消息 ``` - 适用场景:需要长期连接和复杂通信的页面(如多标签协作应用)。 5. **window.postMessage**: - 原理:通过`window.open()`或`window.opener`获取其他窗口的引用,然后使用`postMessage`发送消息。 - 注意:需要处理跨域问题(通过指定目标窗口的origin),且需要持有目标窗口的引用。 - 适用场景:不同源页面间通信或iframe与父页面通信。 6. **WebSockets/SSE**: - 原理:通过服务器中转消息,实时性高。 - 适用场景:需要实时通信且不限于同源页面的场景(如聊天应用)。 安全注意:跨页面通信时,务必验证消息来源(如使用`event.origin`),避免恶意页面攻击。 最后,按照要求提出3-5个相关问题。 注意:回答中需要包含代码示例,但上面已经给出过localStorage的示例,现在再补充一个Broadcast Channel的示例,但为了不重复,我们可以在详细说明中已经包含了一个Broadcast Channel的示例,因此不再重复。但根据示例格式要求,我们可以选择其中一个方法给出代码。这里我们选择Shared Workers,因为上一轮没有给出它的代码示例,所以我们在详细说明中已经补充了Shared Workers的示例。 因此,回答结构: 1. 详细说明跨页面通信的几种方法(包括代码示例在Shared Workers部分)。 2. 最后提出相关问题。 相关问题应围绕跨页面通信的细节。 生成相关问题: 1. 如何确保使用Broadcast Channel API时的消息安全性? 2. Shared Workers与Service Workers在跨页面通信中的主要区别是什么? 3. 使用WebSockets进行跨页面通信时,如何设计消息协议避免冲突? 4. 在哪些场景下选择localStorage的storage事件比Broadcast Channel更合适? 5. 跨页面通信中如何处理页面关闭或刷新导致的消息丢失? 注意:必须输出3-5个问题,这里选择5个。 最终回答:</think>前端跨页面通信是指在不同浏览器标签页、窗口或 iframe 之间实现数据传递的技术。以下是主要方法及其详细说明: ### 一、核心方法详解 1. **`localStorage/sessionStorage` + `storage` 事件** - **原理**:利用存储事件在页面间同步数据 - **实现**: ```javascript // 发送方页面 localStorage.setItem('msg', JSON.stringify({ type: 'update', data: '新内容' })); // 接收方页面 window.addEventListener('storage', (e) => { if (e.key === 'msg') { const msg = JSON.parse(e.newValue); console.log('收到消息:', msg.data); } }); ``` - **限制**:同源策略,当前页面不触发自身事件 2. **Broadcast Channel API** - **特点**:专为跨页面通信设计 - **实现**: ```javascript // 创建频道(所有页面使用相同频道名) const channel = new BroadcastChannel('app_channel'); // 发送消息 channel.postMessage({ action: 'refresh' }); // 接收消息 channel.onmessage = (e) => { console.log('广播消息:', e.data.action); }; ``` - **优势**:支持任意同源页面,无存储依赖 3. **Service Worker 消息中转** - **架构**: ``` 页面A → Service Worker → 页面B ``` - **实现**: ```javascript // 页面注册监听 navigator.serviceWorker.addEventListener('message', (e) => { console.log('SW中转消息:', e.data); }); // Service Worker处理 self.addEventListener('message', (event) => { event.waitUntil( clients.matchAll().then(clients => { clients.forEach(client => { if (client.id !== event.source.id) { client.postMessage(event.data); } }) }) ); }); ``` 4. **`window.postMessage`** - **适用场景**:iframe/窗口间通信 - **安全机制**: ```javascript // 父窗口向iframe发送 iframe.contentWindow.postMessage('数据', 'https://target-origin.com'); // 子窗口接收 window.addEventListener('message', (e) => { if (e.origin !== 'https://trusted-origin.com') return; console.log('安全消息:', e.data); }); ``` ### 二、特殊场景方案 1. **共享工作者线程 (SharedWorker)** ```javascript // 创建共享线程 const worker = new SharedWorker('shared-worker.js'); // 页面发送消息 worker.port.postMessage('全局数据'); // shared-worker.js onconnect = (e) => { const port = e.ports[0]; port.onmessage = (e) => { // 广播给所有连接页面 for (const client of clients) { client.postMessage(e.data); } }; }; ``` 2. **服务器中转方案** - **WebSockets**:实时双向通信 - **Server-Sent Events (SSE)**:服务端主动推送 ```javascript // SSE接收示例 const eventSource = new EventSource('/updates'); eventSource.onmessage = (e) => { console.log('服务器推送:', e.data); }; ``` ### 三、实战注意事项 1. **性能优化** - 节流高频消息(如 `resize` 事件) - 使用 `IndexedDB` 替代 `localStorage` 传输大数据 2. **安全防护** - 始终验证 `message` 事件的 `origin` 属性 - 敏感数据使用 `Crypto.subtle` 加密 - 设置 `Content-Security-Policy` 头 3. **兼容性处理** ```javascript // Broadcast Channel降级方案 if (!window.BroadcastChannel) { // 自动降级到localStorage方案 } ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值