当前位置: 首页 > news >正文

字节面试问题

实现三列布局的方法

第一种:可以使用浮动+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

相关文章:

字节面试问题

实现三列布局的方法 第一种&#xff1a;可以使用浮动margin 第二种&#xff1a;浮动BFC <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, in…...

弹窗内容由后端返回,如何让点击按钮的事件交由前端控制?

一、场景 背景&#xff1a;因为系统里经常有新活动或者公告需要通知所有用户&#xff0c;希望前端维护的这个弹窗里的内容可以由后端接口返回。这样就不需要每次上新活动的时候&#xff0c;前端项目都发版了。因此&#xff0c;前端维护了这个弹窗和它的关闭事件&#xff0c;至…...

[数据结构 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&#xff08;超文本传输协议&…...

【QT+QGIS跨平台编译】之五十七:【QGIS_CORE跨平台编译】—【VECTOR_TILE生成】

文章目录 一、protoc二、生成来源三、构建过程一、protoc Protocol Buffers(简称 protobuf)是一种轻量级、高效的数据序列化框架,它可以将结构化数据序列化为二进制格式,同时还可以进行反序列化和数据压缩。相比于 XML 和 JSON 等传统的文本序列化格式,protobuf 采用二进制…...

2024年腾讯云优惠政策_腾讯云TOP10优惠活动

腾讯云服务器多少钱一年&#xff1f;62元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器218元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网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项目&#xff0c;坑很多。一是本身就麻烦&#xff0c;二是&#xff0c;确实坑&#xff0c;因为不同的qtcreator版本&#xff0c;选了不同的kits&#xff08;套件&#xff09; 生成的CMakeList.txt文件也不一样。 如果可以的话都选择Qt6的相关选项&…...

【计算机网络】一些乱七八糟内容

MAC Media Access Control 用于在局域网&#xff08;LAN&#xff09;或广域网&#xff08;WAN&#xff09;中实现设备自动接入网络 "载波侦听多路访问"(Carrier Sense Multiple Access) CSMA/CD 是CSMA的升级版本&#xff0c;加入了序列号检测机制。 CSMA/CA 是CSM…...

基于ESP32的MicroPython项目量产烧写指南

背景 前段时间用MicroPython开发了一个项目&#xff0c;硬件是ESP32-C3&#xff0c;目前准备量产&#xff0c;我需要提供固件以供加工厂批量烧录&#xff0c;需要把我有程序的板子里的程序读出来&#xff0c;然后下到别的板子上&#xff0c;以下做这件事情的过程记录。 1.固件…...

线性规划的标准型转换

对于任意给定的线性规划的问题&#xff0c;其实其本身可能是不符合线性规划标准型的需求的&#xff0c;但是如果通过一系列的等价变化的话&#xff0c;是可以将该问题转换为标准型的线性规划问题&#xff0c;例如如下的线性规划问题: 添加图片注释&#xff0c;不超过 140 字&am…...

机器学习:探寻智能化时代的科技奇迹

在数字化浪潮席卷全球的今天&#xff0c;机器学习已然成为科技领域的一颗璀璨明星&#xff0c;引领着人工智能不断向前发展。那么&#xff0c;机器学习究竟是什么&#xff1f;它为何能在众多科技中脱颖而出&#xff0c;成为改变世界的力量&#xff1f;本文将带您一探究竟&#…...

《Flask入门教程》学习笔记

《Flask入门教程》官网&#xff1a;https://tutorial.helloflask.com/ 目录 第一章&#xff1a;准备工作第二章&#xff1a;Hello, Flask!第三章&#xff1a;模板第四章&#xff1a;静态文件第五章&#xff1a;数据库第六章&#xff1a;模板优化第七章&#xff1a;表单第八章&a…...

go语言基础 -- map的定义与使用

map的定义与使用 map声明基础语法map的基本使用map的遍历map切片map排序 map声明基础语法 // map的声明 var xxx_map map[key_type]value_typemap的key可以是基本数据类型&#xff0c;channel&#xff0c;接口&#xff0c;结构体&#xff0c;数组&#xff0c;但不能是slice&am…...

讯方·智汇云校第五期名师班火热报名中!

第三期名师班回顾 授课情况 课堂上&#xff0c;同学们热情高涨&#xff0c;积极参与互动。他们紧跟名师的步伐&#xff0c;深入探索云服务的奥秘。张梁老师在为同学们讲述完知识点后&#xff0c;会根据所讲知识给同学们布置对应的实验&#xff0c;由同学们分组讨论练习。 每…...

为什么企业需要使用云电子邮箱?

作为一家机构的负责人&#xff0c;您比大多数人都清楚&#xff0c;您的工作日不会在下午5点就结束。很可能&#xff0c;当您的员工已经打卡下班回家很久之后&#xff0c;您还在以这样或那样的方式继续工作。作为一名企业主&#xff0c;埋头苦干对您来说并不是什么新鲜事&#x…...

[DEBUG] spring boot-如何处理链接中的空格等特殊字符

问题&#xff1a; get或者post中提交的内容可能有空格、#等特殊字符&#xff0c;不做处理的话可能解析错误。 解决&#xff1a; html中&#xff1a; <a th:href"{/listSgrna(id${item.getGeneId()},geneName${item.getGeneName()},genome${genome},sgrnaNum${sgrnaN…...

通过配置数据库事件(Event)来实现定时导出 MySQL 数据库

首先&#xff0c;确保 MySQL 服务器已启用事件调度器功能。你可以通过以下 SQL 语句查询&#xff1a; SHOW VARIABLES LIKE event_scheduler; 如果 event_scheduler 的值为 ON&#xff0c;则表示事件调度器已启用&#xff1b;如果为 OFF&#xff0c;则可以使用以下语句启用&…...

基于x86架构的OpenHarmony应用生态挑战赛等你来战!

为了更快速推进OpenHarmony在PC领域的进一步落地&#xff0c;加快x86架构下基于OpenHarmony的应用生态的繁荣&#xff0c;为北向应用开发者提供一个更加便捷的开发环境&#xff0c;推动OpenHarmony北向应用开发者的增加&#xff0c;助力OpenHarmony在PC领域实现新的突破&#x…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...