script标签中的defer和async
浏览器中script标签中的defer和async有什么区别,优缺点是什么,应用场景是什么?在 HTML 中,<script> 标签的 defer 和 async 属性用于控制脚本的加载和执行方式,尤其是在处理 JavaScript 文件时。它们之间的主要区别和应用场景如下:
1. defer
功能:脚本在文档解析完成后执行,但在 DOMContentLoaded 事件之前执行。
加载顺序:defer 脚本会按照它们在文档中的出现顺序加载并执行。
应用场景:适用于依赖于 DOM 完全加载的脚本,或者需要按顺序执行多个脚本的情况。
优点:
确保 DOM 元素在脚本执行时已存在,避免了因元素未加载而导致的错误。
不会阻塞 HTML 的解析,可以提高页面加载性能。
示例:12<script src="script1.js" defer></script><script src="script2.js" defer></script>
2. async
功能:脚本会在下载完成后立即执行,而 ...
css的模拟面试
css变量是什么CSS 变量(也称为自定义属性)是 CSS 中用于定义可重用值的特性。它们使用 -- 前缀定义,可以在整个样式表中被引用和复用,从而提高代码的灵活性和可维护性。
1. 定义 CSS 变量CSS 变量通常在 :root 选择器中定义,这样它们可以在整个文档中使用:
12345:root { --primary-color: #3498db; --font-size: 16px; --spacing: 1rem;}
以上定义的 --primary-color、--font-size 和 --spacing 就是 CSS 变量。
2. 使用 CSS 变量CSS 变量使用 var() 函数进行引用:
12345button { background-color: var(--primary-color); font-size: var(--font-size); padding: var(--spacing);}
在这里,var(--primary-color) 引用了之前定义的变量 --primary-color 的 ...
nodejs的模拟面试
CommonJS是什么CommonJS(简称CJS)是一种JavaScript模块化规范,最初为在服务端(如Node.js)实现模块化而设计。在CommonJS中,每个文件都被视为一个独立的模块,并通过module.exports导出和require引入其他模块,形成清晰的模块依赖结构。以下是CommonJS的几个关键点:
模块导出和导入:CommonJS使用module.exports导出内容,其他文件使用require导入。例如:
12345678910// 导出模块// math.jsmodule.exports = { add: (a, b) => a + b, subtract: (a, b) => a - b,};// 导入模块const math = require("./math");console.log(math.add(2, 3)); // 输出5
同步加载:CommonJS模块是同步加载的,这在服务端环境中是合理的,因为文件系统通常是本地的,读取速度快。但在浏览器端不适用,因为网络加载是异步的,Co ...
Angular的模拟面试
前言本文是针对angular前端的模拟面试
问题前端CSS的优先级在 CSS 中,选择器用于选择 HTML 元素并应用样式。不同选择器的优先级(权重)决定了样式的应用顺序。以下是常用选择器类型及其优先级规则:
CSS 选择器类型
元素选择器:直接选择 HTML 元素,如 div、p、h1。
类选择器:通过类名选择元素,使用 . 前缀,如 .box。
ID 选择器:通过 ID 名称选择元素,使用 # 前缀,如 #header。
属性选择器:通过元素属性选择元素,如 [type=”text”]。
伪类选择器:选择特定状态的元素,如 :hover、:focus。
伪元素选择器:选择元素的一部分,如 ::before、::after。
组合选择器:通过多种选择器的组合,选择满足特定条件的元素。常见的组合符有:
后代选择器:div p,选择 div 中的所有 p 元素。
子选择器:div > p,选择 div 的直接子元素 p。
相邻兄弟选择器:h1 + p,选择紧跟在 h1 之后的 p 元素。
通用兄弟选择器:h1 ~ p,选择 h1 之后的所有 p 元素。
...
记录一下2024年10月18号和前同事的一次模拟面试
敏捷开发敏捷开发是一种以迭代和增量的方式来开发软件的流程,它注重团队协作、快速反馈以及应对变化的能力。在敏捷开发中,Sprint(冲刺) 是一个核心概念。下面我为你总结了敏捷开发流程中的Sprint、迭代节奏、和时间周期:
1. Sprint(冲刺)
Sprint 是敏捷开发的基础单位,通常是一个固定时间周期,通常为1到4周。
每个 Sprint 都是一个小型迭代周期,在这个周期中,团队需要完成一定数量的工作(通常是具体的功能、用户故事或任务)。
目标是在每个 Sprint 结束时交付一个可工作的产品增量,即使不一定是完整产品,也应该是能够演示或发布的可用功能。
2. 迭代节奏敏捷开发的迭代节奏是基于 Sprint 的。团队会按照以下步骤循环进行开发:
Sprint 计划会议(Sprint Planning):
在每个 Sprint 开始时,团队会召开计划会议,确定当前 Sprint 的目标和待完成的任务。这些任务一般从产品待办事项列表(Product Backlog)中选取,并拆分成更小的用户故事(User Stories)或任务(Tasks)。
团队会评估每个任务的工作量,并 ...
JavaScript中的闭包
定义闭包(closure)是一个函数以及其捆绑的周边环境状态(lexical environment,词法环境)的引用的组合。换而言之,闭包让开发者可以从内部函数访问外部函数的作用域。在 JavaScript 中,闭包就是能够读取其他函数内部变量的, 闭包会随着函数的创建而被同时创建。
作用
本部分例子来自chatgpt
创建私有变量
1234567891011function createCounter() { let count = 0; return function() { count++; return count; };}const counter = createCounter();console.log(counter()); // 输出 1console.log(counter());
保持函数执行上下文
12345678910function outer() { let name = "John"; return functio ...
使用docker-compose备份Postgres Docker容器的解决方案
使用docker-compose备份Postgres Docker容器的解决方案备份使用pg_dumpall命令备份Postgres数据库。
1docker-compose exec <postgres_service> pg_dumpall -U postgres > dump_`date +%Y-%m-%d"_"%H_%M_%S`.sql
docker-compose exec <postgres_service> 在名为<postgres_service>的Postgres容器上执行命令。
-U postgres 指定数据库的用户名。Docker的默认用户名是postgres,如果你使用不同的用户名,请进行修改。
恢复将dump_date +%Y-%m-%d”“%H%M_%S.sql文件放置在backup文件夹中。
然后使用Docker卷将backup文件夹绑定到Postgres容器上:
12volumes: - ./backup:/backup
删除现有的Postgres容器并创建一个新的容器:
1do ...
如何在10分钟内使用LangChain
如何在10分钟内使用LangChainLangChain是一个强大的Python和Javascript/Typescript库,它可以让你快速地原型化大型语言模型应用。它允许你将LLM任务链在一起(因此得名),甚至可以让你快速轻松地运行自主代理(autonomous agents)。今天,我们将介绍chain的基础知识,这样你就可以立即开始你最新的LLM项目。
前言本文主要讨论了LangChain的使用和优势。LangChain是一个对于希望快速创建大型语言模型应用的人来说非常有用的工具。它可以在几分钟内创建链、定义提示,甚至将多个LLM调用链接在一起以创建动态的TikTok脚本。
LangChain的优势在于其简单性和灵活性。无论你是经验丰富的开发者还是刚刚起步,LangChain的直观设计都让你能够像从未有过的那样利用大型语言模型的能力。从生成创意内容到运行自主代理,可能性是无穷无尽的。
此外,如果你正在寻找将AI集成到你现有的工作流程或产品中,TimeSurge Labs可以提供帮助。他们专注于AI咨询、开发、内部工具和LLM托管,他们的团队致力于构建AI的未来,并帮助 ...
使用bazel构建spring boot项目
前言根据官网的定义,Bazel是类似于Make,Maven和Gradle的开源构建和测试工具。它使用人类可读的高级构建语言Starlark(一种基于python的方言)。 Bazel支持多种语言的项目,并为多种平台构建输出。
从我个人角度来看,bazel是一个强大且复杂的构建系统,通过build rule的概念,支持多种语言、不同平台,支持构建C/C++,Java,Android,IOS,Golang,Nodejs,Docker项目
本文的目的是使用bazel去构建并运行一个spring boot项目。
配置bazel编译java项目在项目根目录中创建.bazelrc文件,设置bazel使用java17构建:
12build --java_language_version=17 --java_runtime_version=17 --tool_java_language_version=17 --tool_java_runtime_version=17test --java_language_version=17 --java_runtime_version=17 --t ...
Podman的hello world入门
前言Podnam是一个符合OCI,用于在 Linux® 系统上开发、提供了与 Docker 等类似的功能来管理容器。管理和运行容器开源工具。 Podman 最初由 Red Hat® 工程师与开源社区一起开发。Podman使用 libpod 库管理整个容器生态系统。
安装如果你使用Macos, 可以使用homebrew安装:
1brew install podman
安装之后就可以创建和启动Podnam虚拟机:
12podman machine initpodman machine start
如果你使用Debian 或者 ubuntu, 可以使用apt-get命令安装:
12sudo apt-get install runc -ysudo apt-get -y install podman
其他系统可能参考podman安装页面
注意:对于 Windows 和 Mac,podman 需要一个虚拟机来部署容器。
配置默认情况下,Podman 配置有两个容器注册表。
quay.io
docker.io
我们可以在·/etc/containers/ ...