字节面试问题
实现三列布局的方法
第一种:可以使用浮动+margin
第二种:浮动+BFC
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div class="box"><div class="left"></div><div class="right"></div><div class="main"></div></div>
</body>
</html><style>.left {float: left;width: 200px;height: 200px;background: red;}.right {float: right;width: 200px;height: 200px;background: green;}// 通过margin.main {margin-left: 200px;margin-right: 200px;height: 200px;background: darkblue;}// 通过BFC.main {ovflow: hidden;height: 200px;background: darkblue;}
</style>
第三种:flex布局
flex: 1的实现:代表了子项目将会占据所有的空闲空间
flex: 1其实是代表三个属性的简写,flex-grow、flex-shirnk、flex-basis
flex-grow: 该属性定义项目放大的比例,取值越大,代表向父级索取的宽度越大,默认值是1
flex-shirnk: 该属性代表项目缩小的比例,取值越大,代表缩小的比例越大,默认值是1
flex-basis: 该属性代表每个弹性盒子在主轴方向上所占用的空间大小,默认值0%
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div class="box"><div class="left"></div><div class="main"></div><div class="right"></div></div>
</body>
</html><style>.box {display: flex;}.left {width: 200px;height: 200px;background: red;}.right {width: 200px;height: 200px;background: green;}.main {flex: 1;height: 200px;background: rgb(194, 12, 139);}
</style>
第四种:定位+margin
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div class="box"><div class="left"></div><div class="right"></div><div class="main"></div></div>
</body>
</html><style>.box {position: relative;}.left {position: absolute;left: 0;width: 200px;height: 200px;background: red;}.right {position: absolute;right: 0;width: 200px;height: 200px;background: green;}.main {margin-left: 200px;margin-right: 200px;height: 200px;background: rgb(194, 12, 139);}
</style>
第五种:table布局
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div class="box"><div class="left"></div><div class="main"></div><div class="right"></div></div>
</body>
</html><style>.box {display: table;width: 100%;}.left {display: table-cell;width: 200px;height: 200px;background: red;}.right {display: table-cell;width: 200px;height: 200px;background: green;}.main {display: table-cell;height: 200px;background: rgb(194, 12, 139);}
</style>
第六种:flex+calc
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div class="box"><div class="left"></div><div class="main"></div><div class="right"></div></div>
</body>
</html><style>.box {display: flex;width: 100%;}.left {width: 200px;height: 200px;background: red;}.right {width: 200px;height: 200px;background: green;}.main {width: calc(100% - 400px);height: 200px;background: rgb(194, 12, 139);}
</style>
JSON转化函数时的方法
浏览器缓存
什么是缓存?
缓存的原理是在首次缓存之后保存一份请求资源的响应副本,当用户再次发起相同请求时,如果判断缓存命中则拦截请求,将之前存储的响应副本返回给用户,从而避免从新向服务器发送请求
浏览器缓存主要分为两块,协商缓存和强制缓存
强制缓存
不会向服务器发送请求,直接从缓存中读取资源
使用强制缓存在响应头中的配置
express:响应头中设置过期时间,如果在过期时间之内,则命中缓存
cache-control:有以下几个值的选项
max-age:在设置的时间之内,不会再次发起请求
-no-cache:可以在本地进行缓存,但每次发请求时,都要向服务器进行验证,如果服务器允许,才能使用本地缓存。
-no-store:禁止浏览器缓存数据
-public:可以被所有用户缓存资源,包括终端用户和中间的代理服务器
-private:只能被终端的浏览器用户缓存
注:
1、express设置以分钟为单位的过期时间,max-age指明以秒为单位的过期时间
2、express优先级比cache-control低
协商缓存
需要向服务器发送请求,服务器会根据请求头中的参数来判断是否命中缓存,如果命中则返回304,通知浏览器从缓存中读取数据,如果没有命中,则重新请求资源,协商缓存可以解决强制缓存下资源不更新的问题
第一种方式:Last-Modify/If-Modify-Scene
浏览器第一次请求服务器时,服务器会在响应头中返回一个Last-Modify,是资源最后的修改时间标识,单位是秒,当浏览器再次向服务器发送请求时,会在请求头中加上If-Modify-Scene,如果If-Modify-Scene等于服务器中文件最后的修改时间,则返回给浏览器304,使用缓存,否则重新返回资源
第二种方式:Etag/If-None-Match
浏览器第一次请求服务器时,服务器会在响应头中返回一个Etag,是资源文件的hash值,当浏览器再次向服务器发送请求时,会在请求头中加上If-None-Match,如果If-None-Match等于服务器中文件中的hash,则返回给浏览器304,使用缓存,否则重新返回资源
Etag和If-None-Match的区别?
1、在精度上,Etag要优于If-None-Match,If-None-Match的时间单位是秒,如果在一秒内多次改动文件,那么他们的Last-Modify并没有体现出修改,而Etag每次都会改变,确保了精度
2、在性能上,If-None-Match要优于Etag,If-None-Match只需要记录时间,Etag则需要根据算法算出hash
3、在优先级上,服务器会优先考虑Etag
浏览器渲染
推荐看这位同学的总结,很全面:浏览器渲染流程 - 知乎
渲染器的核心就是把HTML、css、js转换为用户可以与之交互的网页,
按照渲染时间的顺序,流水线可以分为以下几个步骤:构建DOM树、样式计算、布局、分层、绘制、分块、光栅化、合成
1、构建DOM树
痛过HTML渲染器将HTML字节流转换为DOM树

2、解析css,生成cssom树
3、根据生成的DOM树和cssom构建一个渲染树
4、接下来是布局(回流),来计算每个模块的大小、颜色和位置
5、最后一步就是绘制,根据计算得出来的页面绘制到浏览器上
通过渲染过程可做的性能优化
1、减少http请求的次数
2、资源合并压缩
3、减少dom操作,否则会引起回流和重构,多操作js
inline-block会有什么问题
1、使用display: inline-block布局块级元素,会使元素之间有空隙
解决方法:
1、可以使元素写在一行,解决空隙
2、或者在父元素中将字号设置为0
2、也有可能会出现上下错位的问题
解决办法:
1、让两个div高度相同
2、使用vertical-align: top进行对齐
content-type的值
异步任务的执行时间可能会超过所设置的时间
借鉴博文:setTimeout不准时?你大意了_onmessage时间不稳定-CSDN博客
解决超时第一种方法:
思路:获取最开始的时间,然后轮询去查看,如果时间符合就执行
const loop = (delay, cb, startTime) => {const now = Date.now()if (now - startTime > delay) {cb()return} else {loop(delay, cb, startTime)}}const startTime = Date.now()loop(5000, cb, startTime)
解决超时第二种方法:Web Worker
解决超时第三种方法:window.requestAnimationFrame()
思路:告诉浏览器你需要执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数,回调函数执行次数一般是每秒60次,也就是16.8ms执行一次
const loop = (delay, cb, startTime) => {const now = Date.now()if (now - startTime > delay) {cb()return} else {requestAnimationFrame(loop(delay, cb, startTime))}}const startTime = Date.now()loop(5000, cb, startTime)
cookie设置以及哪个属性可以不让js修改

name:cookie的名字,一旦创建,无法修改
value:cookie的值
Domain:设置cookie在哪个域名下是有效的
Path:设置域名后的子路径
Expiress/Max-age:cookie的超时时间,当到达此时间后,cookie失效,不设置的话,默认值是session,当网页关闭后就失效
Size:cookie的大小,单位是字节,谷歌浏览器限制cookie最多150条,最大4096字节
HttpOnly:设置为true,不允许修改cookie,也不能获取cookie的值,但发送请求时还是会带上
Secure:设置为true,浏览器只会在https等安全协议下进行传输
Partition Key:限制第三方的cookie
设置为strict:完全限制第三方的cookie
设置为Lax:get请求可以携带cookie,设置Lax或者strict基本可以杜绝CSRF攻击,是谷歌浏览器的默认设置
设置为None:不限制
Priority:定义了low/medium/high三种优先级,当cookie的存入超出限制后,会清除掉低优先级的cookie
前端项目的安全问题
快速排序
核心思想:
1、会先找到一个对比值,一般可选中数组的第一个元素,也就是下标为0的
2、需要连个下标值,即最左端的下标和最右端的下标
3、拿出最右侧的值和对比值进行对比,若是大于,此值不移动,将右侧的下标减减进行移动,然后再次对比,若是还大于就继续减减,否则将值移动到左端下标处
4、经过第三个步骤,开始移动左侧的下表,和中心值进行对比,若是小于,将小标加加向右移动,然后再次对比,若是还小于就继续加加,否则将值移动到右端下表处
5、后面的步骤也是依旧进行递归比对,直到比对的长度为1
时间复杂度
推荐看这个视频,讲解的很好懂:小学生也能看懂的时间复杂度(大概吧)_哔哩哔哩_bilibili
相关文章:
字节面试问题
实现三列布局的方法 第一种:可以使用浮动margin 第二种:浮动BFC <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, in…...
弹窗内容由后端返回,如何让点击按钮的事件交由前端控制?
一、场景 背景:因为系统里经常有新活动或者公告需要通知所有用户,希望前端维护的这个弹窗里的内容可以由后端接口返回。这样就不需要每次上新活动的时候,前端项目都发版了。因此,前端维护了这个弹窗和它的关闭事件,至…...
[数据结构 C++] AVL树的模拟实现
文章目录 1、AVL树1.1 AVL树的概念 2、AVL树节点的定义3、AVL树的插入和旋转3.1 左单旋左旋代码实现 3.2 右单旋右旋代码实现 3.3 右左双旋右左双旋的代码实现 3.4 左右双旋左右双旋的代码实现 3.5 insert接口实现 4、判断是否为AVL树判断AVL树的代码实现 5、AVL树的性能 问题引…...
深入理解ngx_http_proxy_connect_module模块(下)
目录 5. 源码分析5.1 模块的初始化代码5.2 请求入口点函数分析5.2.1 ngx_http_proxy_connect_post_read_handler5.2.2 ngx_http_proxy_connect_handler5.3 域名解析回调5.4 向上游服务器发起连接5.4.1 ngx_http_proxy_connect_process_connect5.4.2 ngx_http_proxy_connect_wri…...
HTTP详解(HTTP的特点,状态码,工作原理,GET和POST的区别,如何解决无状态通信)!!!
文章目录 一、HTTP协议简介二、HTTP的主要特点三、HTTP之URL四、Request和Respons五、HTTP的状态码六、HTTP工作原理七、GET和POST请求的区别八、解决HTTP无状态通信——Cookie和Session 一、HTTP协议简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议&…...
【QT+QGIS跨平台编译】之五十七:【QGIS_CORE跨平台编译】—【VECTOR_TILE生成】
文章目录 一、protoc二、生成来源三、构建过程一、protoc Protocol Buffers(简称 protobuf)是一种轻量级、高效的数据序列化框架,它可以将结构化数据序列化为二进制格式,同时还可以进行反序列化和数据压缩。相比于 XML 和 JSON 等传统的文本序列化格式,protobuf 采用二进制…...
2024年腾讯云优惠政策_腾讯云TOP10优惠活动
腾讯云服务器多少钱一年?62元一年起,2核2G3M配置,腾讯云2核4G5M轻量应用服务器218元一年、756元3年,4核16G12M服务器32元1个月、312元一年,8核32G22M服务器115元1个月、345元3个月,腾讯云服务器网txyfwq.co…...
SpringMVC 学习(二)之第一个 SpringMVC 案例
目录 1 通过 Maven 创建一个 JavaWeb 工程 2 配置 web.xml 文件 3 创建 SpringMVC 配置文件 spring-mvc.xml 4 创建控制器 HelloController 5 创建视图 index.jsp 和 success.jsp 6 运行过程 7 参考文档 1 通过 Maven 创建一个 JavaWeb 工程 可以参考以下博文&#x…...
qt5与qt6的cmake区别
文章目录 使用cmake构建qt项目,坑很多。一是本身就麻烦,二是,确实坑,因为不同的qtcreator版本,选了不同的kits(套件) 生成的CMakeList.txt文件也不一样。 如果可以的话都选择Qt6的相关选项&…...
【计算机网络】一些乱七八糟内容
MAC Media Access Control 用于在局域网(LAN)或广域网(WAN)中实现设备自动接入网络 "载波侦听多路访问"(Carrier Sense Multiple Access) CSMA/CD 是CSMA的升级版本,加入了序列号检测机制。 CSMA/CA 是CSM…...
基于ESP32的MicroPython项目量产烧写指南
背景 前段时间用MicroPython开发了一个项目,硬件是ESP32-C3,目前准备量产,我需要提供固件以供加工厂批量烧录,需要把我有程序的板子里的程序读出来,然后下到别的板子上,以下做这件事情的过程记录。 1.固件…...
线性规划的标准型转换
对于任意给定的线性规划的问题,其实其本身可能是不符合线性规划标准型的需求的,但是如果通过一系列的等价变化的话,是可以将该问题转换为标准型的线性规划问题,例如如下的线性规划问题: 添加图片注释,不超过 140 字&am…...
机器学习:探寻智能化时代的科技奇迹
在数字化浪潮席卷全球的今天,机器学习已然成为科技领域的一颗璀璨明星,引领着人工智能不断向前发展。那么,机器学习究竟是什么?它为何能在众多科技中脱颖而出,成为改变世界的力量?本文将带您一探究竟&#…...
《Flask入门教程》学习笔记
《Flask入门教程》官网:https://tutorial.helloflask.com/ 目录 第一章:准备工作第二章:Hello, Flask!第三章:模板第四章:静态文件第五章:数据库第六章:模板优化第七章:表单第八章&a…...
go语言基础 -- map的定义与使用
map的定义与使用 map声明基础语法map的基本使用map的遍历map切片map排序 map声明基础语法 // map的声明 var xxx_map map[key_type]value_typemap的key可以是基本数据类型,channel,接口,结构体,数组,但不能是slice&am…...
讯方·智汇云校第五期名师班火热报名中!
第三期名师班回顾 授课情况 课堂上,同学们热情高涨,积极参与互动。他们紧跟名师的步伐,深入探索云服务的奥秘。张梁老师在为同学们讲述完知识点后,会根据所讲知识给同学们布置对应的实验,由同学们分组讨论练习。 每…...
为什么企业需要使用云电子邮箱?
作为一家机构的负责人,您比大多数人都清楚,您的工作日不会在下午5点就结束。很可能,当您的员工已经打卡下班回家很久之后,您还在以这样或那样的方式继续工作。作为一名企业主,埋头苦干对您来说并不是什么新鲜事&#x…...
[DEBUG] spring boot-如何处理链接中的空格等特殊字符
问题: get或者post中提交的内容可能有空格、#等特殊字符,不做处理的话可能解析错误。 解决: html中: <a th:href"{/listSgrna(id${item.getGeneId()},geneName${item.getGeneName()},genome${genome},sgrnaNum${sgrnaN…...
通过配置数据库事件(Event)来实现定时导出 MySQL 数据库
首先,确保 MySQL 服务器已启用事件调度器功能。你可以通过以下 SQL 语句查询: SHOW VARIABLES LIKE event_scheduler; 如果 event_scheduler 的值为 ON,则表示事件调度器已启用;如果为 OFF,则可以使用以下语句启用&…...
基于x86架构的OpenHarmony应用生态挑战赛等你来战!
为了更快速推进OpenHarmony在PC领域的进一步落地,加快x86架构下基于OpenHarmony的应用生态的繁荣,为北向应用开发者提供一个更加便捷的开发环境,推动OpenHarmony北向应用开发者的增加,助力OpenHarmony在PC领域实现新的突破&#x…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)
cd /home 进入home盘 安装虚拟环境: 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境: virtualenv myenv 3、激活虚拟环境(激活环境可以在当前环境下安装包) source myenv/bin/activate 此时,终端…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...
统计学(第8版)——统计抽样学习笔记(考试用)
一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征(均值、比率、总量)控制抽样误差与非抽样误差 解决的核心问题 在成本约束下,用少量样本准确推断总体特征量化估计结果的可靠性(置…...
【系统架构设计师-2025上半年真题】综合知识-参考答案及部分详解(回忆版)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20~21题】【第…...
Python 解释器安装全攻略(适用于 Linux / Windows / macOS)
目录 一、Windows安装Python解释器1.1 下载并安装Python解释1.2 测试安装是否成功1.3 设置pip的国内镜像------永久配置 二、macOS安装Python解释器三、Linux下安装Python解释器3.1 Rocky8.10/Rocky9.5安装Python解释器3.2 Ubuntu2204/Ubuntu2404安装Python解释器3.3 设置pip的…...
