总结

简介: 总结

HTML

HTML语义化

  • 让人更容易读懂(增加代码可读性)
  • 让搜索引擎更容易读懂( SEO )

    块级,内联元素

  • display: block/table;有div h1 h2 table ul ol p等
  • display: inline/inline-block;有span img input button等

    CSS

    相邻元素的margin-top和margin-bottom会发生重叠

    BFC

image.png

margin负值

image.png

左右固定,中间自适应

    <style>
      .contain {
   
   
        padding-left: 150px;
        padding-right: 100px;
      }
      .center {
   
   
        float: left;
        width: 100%;
        background-color: aqua;
      }
      .left {
   
   
        position: relative;
        float: left;
        width: 150px;
        background-color: brown;
        margin-left: -100%; //移动相当于父元素的宽度
        right: 150px;
      }
      .right {
   
   
        float: left;
        width: 100px;
        background-color: blueviolet;
        margin-right: -100px; //相当于元素不占据位置,自然就排在第一行
      }
    </style>
  <div class="contain">
      <div class="center">center</div>//最重要的放在前面
      <div class="left">left</div>
      <div class="right">right</div>
    </div>

水平,垂直居中

image.png

image.png
第三种要加上top:50%,left:50%,第三第四种不需要知道子元素宽高

line-height继承

image.png

body{
   
   
font-size:20px;
line-height:200%
}
p{
   
   
  font-size:16px
}//p line-height:40px

JS

函数内所有自由变量的查找是在函数定义的地方,向上级作用域查找,不是在执行的地方

闭包的两种情况

image.png

点击都弹出10 只有点击后才执行函数,i早就变成10了

image.png

Map set

map与object的区别

  • map任意类型可以是key
  • 有序
  • 操作快
    set和数组的区别
  • 无序
  • 不能重复

    DOM

    渲染过程

  • 根据html生成Domtree,css生成cssom,整合成render Tree
  • 根据render tres渲染页面,遇到script暂停渲染,执行完再渲染

    document load/ready

    DOMContentLoaded DOM:dom渲染完,图片视频可能没有加载完,即可执行
    window.onload:dom渲染完,图片视频加载完

    attribute property

image.png

image.png

插入多个子元素考虑性能

image.png

ajax

手写ajax

const xhr = new XMLHttpRequest()
xhr.open('GET', 'data/test', true)
xhr.onreadystatechange = function () {
   
   
  if (xhr.readyState === 4) {
   
   
    if (xhr.status === 200) {
   
   
      alert(xhr.responseText)
    } else {
   
   
      console.log('其他情况')
    }
  }
}
xhr.send(null)

const xhr = new XMLHttpRequest()
xhr.open('POST', '、login', true)
xhr.onreadystatechange = function () {
   
   
  if (xhr.readyState === 4) {
   
   
    if (xhr.status === 200) {
   
   
      alert(xhr.responseText)
    } else {
   
   
      console.log('其他情况')
    }
  }
}
const postData = {
   
   
    username:'zhang',
    password:'xxx'
}
xhr.send(JSON.stringify(postData))

promise

function ajax(url) {
   
   
  const p = new Promise((resolve, reject) => {
   
   
    const xhr = new XMLHttpRequest()
    xhr.open('GET', url, true)
    xhr.onreadystatechange = function () {
   
   
      if (xhr.readyState === 4) {
   
   
        if (xhr.status === 200) {
   
   
          resolve(JSON.parse(xhr.responseText))
        } else if (xhr.status === 404) {
   
   
          reject(new Error('404 not found'))
        }
      }
    }
    xhr.send(null)
  })
  return p
}
const url = '/login'
ajax(url)
  .then((res) => console.log(res))
  .catch((err) => console.error(err))

image.png

同源

image.png

image.png

image.png

防抖和节流

防抖和节流本质是不一样的。防抖是将多次执行变为最后一次执行,节流是将
多次执行变成每隔一段事件执行,封装函数使用闭包

防抖

例如输入框的input事件,一输入就会触发事件,要等n秒后执行

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <style></style>
  <body>
    <input type="text" id="input1" />
  </body>
  <script>
    function debounce(fn, delay) {
   
   
      let timer = null
      return function () {
   
   
        if (timer) {
   
   
          clearTimeout(timer)
        }
        timer = setTimeout(() => {
   
   
          fn.apply(this, arguments)
          timer = null
        }, delay)
      }
    }
    const input1 = document.getElementById('input1')
    input1.addEventListener(
      'keyup',
      debounce(function () {
   
   //这里不能写箭头函数
        console.log(input1.value)
      }, 1000)
    )
  </script>
</html>

节流

例如拖拽drapDOM元素,每次移动就会触发函数,要求每n秒监听一次
apply,call调用后会立即执行目标函数。bind不会执行

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <style>
    #blue {
   
   
      width: 200px;
      height: 200px;
      background-color: blue;
    }
  </style>
  <body>
    <div id="blue" draggable="true"></div>
  </body>
  <script>
    function throttle(fn, delay) {
   
   
      let timer = null
      return function () {
   
   
        if (timer) {
   
   
          return
        }//有定时器就退出
        timer = setTimeout(() => {
   
   
     //e传给的是throttle函数,而不是里面的fn函数,因此需要把arguments参数传到fn函数里,this代表那个绑定的DOM元素。否则e就是undefined.
          fn.apply(this, arguments)
          timer = null
        }, delay)
      }
    }
    const div1 = document.getElementById('blue')
    div1.addEventListener(
      'drag',
      throttle(function (e) {
   
   
        console.log(e.offsetX, e.offsetY)
      },1000)
    )
  </script>
</html>

nodejs与前端js的区别

image.png

image.png

事件循环

  • 微任务DON渲染前触发
  • 宏任务DON渲染后触发
    任务分为了同步任务和异步任务;而异步任务又可以分为微任务和宏任务。
  • 执行一个宏任务(栈中没有就从事件队列中获取)

  • 宏任务执行完毕后,立即执行当前微任务队列中的所有微任务(依次执行)

  • 开始下一个宏任务(从事件队列中获取)

  • 宏任务:

setTimeout

setInterval

js主代码

setImmediate(Node)

requestAnimationFrame(浏览器)

  • 微任务:

process.nextTick

Promise的then方法

Promise和async中的立即执行

我们知道Promise中的异步体现在then和catch中,所以写在Promise中的代码是被当做同步任务立即执行的。而在async/await中,在await出现之前包括await,其中的代码也是立即执行的

async function async1() {
   
   
  console.log('async1 start')
  await async2()
  setTimeout(() => {
   
   
    console.log('setTimeout1')
  }, 0)
}
async function async2() {
   
   
  setTimeout(() => {
   
   
    console.log('setTimeout2')
  }, 0)
}
console.log('script start')
setTimeout(() => {
   
   
  console.log('setTimeout3')
}, 0)
async1()
new Promise((resolve) => {
   
   
  console.log('promise1')
  resolve()
}).then(() => {
   
   
  console.log('promise2')
})
console.log('script end')

```先执行所以同步任务,把setTimeout3放到宏任务队列,执行anync1,async1 start,执行async2,把setTimeout2放到宏任务队列,await后面的放到微任务队列,输出promise1,then后面的放到微任务队列,输出script end,按顺序执行微任务,发现第一个微任务里是个宏任务,把setTimeout1放到宏任务队列,输出promise2,按顺序执行宏任务。
script start
async1 start
promise1
script end
promise2
setTimeout3
setTimeout2
setTimeout1

http

状态码

200 301 302 304(协商)404 403(客户端) 500 504(服务端)

请求响应头

请求头

  • Accept:浏览器可接受的数据格式
  • Accept-Encoding:浏览器可接受的压缩算法
  • Accept-Languange:浏览器可接受的语言
  • Connection:keep-alive 一次Tcp连接重复使用
  • User-Agent:浏览器信息
  • content-type:返回数据格式
  • content-length:返回数据大小
  • content-Encoding:返回数据的压缩算法

响应头

  • content-type:发送数据格式

    缓存

    先强后协商,强缓存过期在判断协商缓存

    强缓存

    初次请求返回资源和Cache-Control,Cache-Control都值,max-age,过期时间,no-cache不用强缓存,no-store两种缓存都不用。expires已被该替代。

    协商缓存

    服务端缓存策略,服务器判断客户端是否和服务端资源一样,一致返回304,否则返回200和最新资源,资源标识,第一次访问返回资源和资源标识。
    在响应头中有两种:last-Modified资源的最后修改时间,Etag资源的唯一标识。
  • 初次请求返回资源和last-modified,再次请求,请求头带上If-Modified-Since,返回304或资源和新的last-Modified。
  • Etag差不多,根据文件内容生成,请求头带上If-None-Match,可以与last-Modified共存,优先级比last-Modified高

    刷新

  • 手动刷新:强制缓存失效,协商缓存有效
  • 强制刷新:都失效

    https证书

    解决中间人攻击,里面有公钥和私钥,https有对称算法,非对称算法结合,首先使用公钥加密一个随机数,使用私钥解密随机数,使用这个随机数对传输数据进行对称加密,作为对称加密的公钥。

    xss xsrf

  • xss 比如写一篇博客里面写上script,那么其他人点击进来会执行script,获取到用户cookie
    ,解决方法将<>转义
  • xsrf 比如你登录的一个购物网站,此时打开一封包含image的邮件,因为图片不受同源策略影响,就可以拿到用户登录生成的cookie发送请求。解决方法是再次输入密码验证
相关文章
|
21天前
|
人工智能 C++ iOS开发
ollama + qwen2.5-coder + VS Code + Continue 实现本地AI 辅助写代码
本文介绍在Apple M4 MacOS环境下搭建Ollama和qwen2.5-coder模型的过程。首先通过官网或Brew安装Ollama,然后下载qwen2.5-coder模型,可通过终端命令`ollama run qwen2.5-coder`启动模型进行测试。最后,在VS Code中安装Continue插件,并配置qwen2.5-coder模型用于代码开发辅助。
1375 5
|
开发框架 前端开发 网络协议
服务器开发- Asp.Net Core中的websocket,并封装一个简单的中间件
服务器开发- Asp.Net Core中的websocket,并封装一个简单的中间件
509 10
|
XML Java 程序员
WPF使用AvalonEdit实现代码高亮显示、搜索、替换功能
很多工程软件拥有自己定义的脚本语言,作为程序员用惯了具有高亮显示和智能提示功能的编辑器,所以针对特定的脚本自己开发一个编辑器。主要采用WPF、C#语言以及AvalonEdit控件。
WPF使用AvalonEdit实现代码高亮显示、搜索、替换功能
|
1天前
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
2024年11月29日,阿里云在上海举办金融量化策略回测Workshop,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。活动特别设计了动手实践环节,帮助参会者亲身体验阿里云产品功能,涵盖EHPC量化回测和Argo Workflows量化回测两大主题,旨在提升量化投研效率与安全性。
云上金融量化策略回测方案与最佳实践
|
15天前
|
人工智能 自动驾驶 大数据
预告 | 阿里云邀您参加2024中国生成式AI大会上海站,马上报名
大会以“智能跃进 创造无限”为主题,设置主会场峰会、分会场研讨会及展览区,聚焦大模型、AI Infra等热点议题。阿里云智算集群产品解决方案负责人丛培岩将出席并发表《高性能智算集群设计思考与实践》主题演讲。观众报名现已开放。
|
7天前
|
自然语言处理 数据可视化 API
Qwen系列模型+GraphRAG/LightRAG/Kotaemon从0开始构建中医方剂大模型知识图谱问答
本文详细记录了作者在短时间内尝试构建中医药知识图谱的过程,涵盖了GraphRAG、LightRAG和Kotaemon三种图RAG架构的对比与应用。通过实际操作,作者不仅展示了如何利用这些工具构建知识图谱,还指出了每种工具的优势和局限性。尽管初步构建的知识图谱在数据处理、实体识别和关系抽取等方面存在不足,但为后续的优化和改进提供了宝贵的经验和方向。此外,文章强调了知识图谱构建不仅仅是技术问题,还需要深入整合领域知识和满足用户需求,体现了跨学科合作的重要性。
|
1月前
|
存储 人工智能 弹性计算
阿里云弹性计算_加速计算专场精华概览 | 2024云栖大会回顾
2024年9月19-21日,2024云栖大会在杭州云栖小镇举行,阿里云智能集团资深技术专家、异构计算产品技术负责人王超等多位产品、技术专家,共同带来了题为《AI Infra的前沿技术与应用实践》的专场session。本次专场重点介绍了阿里云AI Infra 产品架构与技术能力,及用户如何使用阿里云灵骏产品进行AI大模型开发、训练和应用。围绕当下大模型训练和推理的技术难点,专家们分享了如何在阿里云上实现稳定、高效、经济的大模型训练,并通过多个客户案例展示了云上大模型训练的显著优势。
|
3天前
|
人工智能 容器
三句话开发一个刮刮乐小游戏!暖ta一整个冬天!
本文介绍了如何利用千问开发一款情侣刮刮乐小游戏,通过三步简单指令实现从单个功能到整体框架,再到多端优化的过程,旨在为生活增添乐趣,促进情感交流。在线体验地址已提供,鼓励读者动手尝试,探索编程与AI结合的无限可能。
|
3天前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
3511 15