【算法】手写题

news2024/11/26 0:29:28

文章目录

  • 画一个三角形
  • 实现三栏布局
    • 通过position和margin
    • 通过float和margin
    • 通过flex实现
  • 变量提升题
  • 实现边框0.5px
  • 深拷贝
  • 快速排序
  • 手写发布订阅/事件总线

画一个三角形

  .box1 {
        width: 0;
        height: 0;
        border: 10px solid;
        border-color: red transparent transparent transparent;
      }

实现三栏布局

  • 三栏布局是两边固定,中间自适应

通过position和margin

<!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>
    <style>
      .container {
        position: relative;
      }
      .left,
      .right {
        position: absolute;
        height: 100%;
        top: 0;
        background-color: #ff69b4;
      }
      .left {
        left: 0;
        width: 100px;
      }
      .right {
        right: 0;
        width: 200px;
      }
      .main {
        height: 100%;
        margin: 0 200px 0 100px;
        background-color: #659;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="left">left</div>
      <div class="right">right</div>
      <div class="main">main</div>
    </div>
  </body>
</html>

通过float和margin

<!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>
    <style>
      .container {
        width: 100%;
        height: 100%;
      }
      .left {
        float: left;
        height: 100%;
        width: 100px;
        background-color: pink;
      }

      .right {
        float: right;
        height: 100%;
        width: 200px;
        background-color: pink;
      }

      .main {
        height: 100%;
        margin: 0 200px 0 100px;
        background-color: green;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="left">left</div>
      <div class="right">right</div>
      <div class="main">main</div>
    </div>
  </body>
</html>

通过flex实现

<!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>
    <style>
      .container {
        display: flex;
      }
      .left {
        width: 200px;
        background-color: red;
      }
      .main {
        flex: 1;
        background-color: pink;
      }
      .right {
        width: 200px;
        background-color: red;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="left">left</div>
      <div class="main">main</div>
      <div class="right">right</div>
    </div>
  </body>
</html>

变量提升题

  • 变量提升,声明式函数比var的优先级更高,后创建的函数覆盖前面的函数
  • 当JavaScript代码执行时,会进行两个阶段的处理:编译阶段和执行阶段。在编译阶段,JavaScript会将函数声明和变量声明(但是还没有赋值)提升到作用域的顶部。这意味着无论函数声明和变量声明在代码中的位置如何,它们都会在执行阶段之前被处理。
  • 函数声明的优先级高于变量声明
  • 输出fn(){console.log(400)},100,100,300,400

实现边框0.5px

原理:
方法1:高度1px,背景渐变,一半有颜色,一半没颜色
linear-gradient(0deg, #f00 50%, transparent 50%);
方法2:通过transform:scaleY(.5)进行缩放垂直尺寸

深拷贝

 <!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>
  <body>
    <script>
      //判断是不是对象
      function isObject(value) {
        const valueType = typeof value; // null,object,function,array
        return (
          value !== null && (valueType === "object" || valueType === "function")
        );
      }
      function deepCopy(originValue, map = new WeakMap()) {
        //通过map解决循环引用,
        //1.如果是原始类型,直接返回
        if (!isObject(originValue)) {
          return originValue;
        }
        //2.如果是对象类型,才需要创建对象
        if (map.get(originValue)) {
          return map.get(originValue);
        }
        const newObj = Array.isArray(originValue) ? [] : {};
        map.set(originValue, newObj);
        for (const key in originValue) {
          newObj[key] = deepCopy(originValue[key], map);
        }

        return newObj;
      }
      const info = {
        name: "why",
        age: 18,
        friend: {
          name: "kobe",
          address: {
            name: "洛杉矶",
            detail: "lmp",
          },
        },
      };
      info.self = info;
      const newObj = deepCopy(info);
      console.log(newObj);
    </script>
  </body>
</html>


快速排序

/**
 * LeetCode 912: 排序数组
 * @param {number[]} nums 数组
 * @return {number[]} 排序后的数组
 */
const sortArray = function(nums) {
  // 使用内置的快速排序算法进行排序
  const quickSort = (nums, start, end) => {
    if (start >= end) {
      return;
    }
    // 选择基准元素
    const pivot = nums[start];
    let left = start + 1;
    let right = end;

    while (left <= right) {
      // 找到左侧大于等于基准元素的值
      while (left <= right && nums[left] < pivot) {
        left++;
      }
      // 找到右侧小于等于基准元素的值
      while (left <= right && nums[right] > pivot) {
        right--;
      }
      // 交换左侧和右侧的值
      if (left <= right) {
        [nums[left], nums[right]] = [nums[right], nums[left]];
        left++;
        right--;
      }
    }
    // 将基准元素放到正确的位置
    [nums[start], nums[right]] = [nums[right], nums[start]];
    // 递归排序左右两部分
    quickSort(nums, start, right - 1);
    quickSort(nums, right + 1, end);
  };

  // 调用快速排序函数进行排序
  quickSort(nums, 0, nums.length - 1);

  return nums;
};

// 测试用例
const nums = [5, 2, 3, 1];
console.log(sortArray(nums)); // 输出 [1, 2, 3, 5]

手写发布订阅/事件总线

<!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>
  <body>
    <button class="nav-btn">nav button</button>
    <script>
      class HYEventBus {
        constructor() {
          this.eventMap = {};
        }
        on(eventName, eventFn) {
          let eventFns = this.eventMap[eventName];
          if (!eventFns) {
            eventFns = [];
            this.eventMap[eventName] = eventFns;
          }
          eventFns.push(eventFn);
        }
        emit(eventName, ...args) {
          let eventFns = this.eventMap[eventName];
          if (!eventFns) return;
          eventFns.forEach((fn) => {
            fn(...args);
          });
        }

        off(eventName, eventFn) {
          let eventFns = this.eventMap[eventName];
          if (!eventFns) return;
          for (let i = 0; i < eventFns.length; i++) {
            const fn = eventFns[i];
            if (fn === eventFn) {
              eventFns.splice(i, 1);
              break;
            }
          }
          //如果eventFns已经清空了
          if (eventFns.length === 0) {
            delete this.eventMap[eventName];
          }
        }
      }
      const eventBus = new HYEventBus();

      eventBus.on("navclick", (name, age, height) => {
        console.log("navclick listener 01", name, age, height);
      });
      const click = () => {
        console.log("navclick listener 02");
      };
      eventBus.on("navclick", click);
      setTimeout(() => {
        eventBus.off("navclick", click);
      }, 5000);
      eventBus.on("asideclick", () => {
        console.log("asideclick listener");
      });

      const navBtnEl = document.querySelector(".nav-btn");
      navBtnEl.onclick = () => {
        console.log("自己监听到");
        eventBus.emit("navclick", "why", 18, 1.88);
      };
    </script>
  </body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/629961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

window编写redis服务启动脚本

日常工作中&#xff0c;每次启动项目总会忘记开启redis服务&#xff0c;并收货一天中的第一个项目报错&#xff0c;然后经历繁琐的文件查找redis所在目录&#xff0c;并点击redis-server.exe&#xff0c;启动服务&#xff0c;于是笔者在想&#xff0c;如果在桌面写个脚本一键启…

新项目,不妨采用这种架构分层,很优雅

在专栏开篇提到过DDD&#xff08;Domain-Driven Design&#xff0c;领域驱动设计&#xff09;学习起来较为复杂&#xff0c;一方面因为其自身涉及的概念颇多&#xff0c;另一方面&#xff0c;我们往往缺乏实战经验和明确的代码模型指导。今天&#xff0c;我们将专注于DDD的分层…

机器学习笔记 - EANet 外部注意论文简读及代码实现

一、论文简述 论文作者提出了一种新的轻量级注意力机制&#xff0c;称之为外部注意力。如图所示&#xff0c;计算自注意力需要首先通过计算自查询向量和自关键字向量之间的仿射关系来计算注意力图&#xff0c;然后通过用该注意力图加权自值向量来生成新的特征图。外部关注的作用…

条款29:假定移动操作不存在、成本高、未使用

移动语义可以说在C11的所有语言特性中占据着首要中的首要地位。“移动容器现在和复制指针一样成本低廉了&#xff01;”这是你很可能听说过的&#xff0c;类似说法还有“复制临时对象现在已经如此高效&#xff0c;如果刻意在撰写代码总避免它&#xff0c;就无异于犯了过早优化的…

java SSM 程序在线评判系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM 程序在线评判系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采…

PDCA循环

PDCA循环 由美国质量管理专家沃特阿曼德休哈特&#xff08;Walter A. Shewhart&#xff09;首先提出的&#xff0c;由戴明采纳、宣传&#xff0c;获得普及&#xff0c;所以又称戴明环。 模型介绍 戴明是一位美国的质量管理大师&#xff0c;却成名于日本。在他的帮助下&#xf…

JQuery 操作Class实现前段交互方案(推荐)

一、JQuery基础控制图片宽度实现动画交互 1.html页面声明周期 //页面生命周期 //页面的数据html&#xff0c;加载完成&#xff0c; 图片ajax视频 在异步加载中 //document.ready---DOMContentLoaded ----小程序onload ---Vue created() //页面加载完成 //window.onload…

二叉树的相关操作

一.二叉树 本文的数据结构基于C语言练习。 C语言中的二叉树是一种数据结构&#xff0c;用于表示具有层次关系的数据集合。它由一个根节点开始&#xff0c;每个节点最多有两个子节点&#xff0c;分别称为左子节点和右子节点。 二叉树有许多相关性质&#xff0c;其中一些重要的包…

记录一下idea黄色警戒线问题

记录一下idea黄色警戒线问题 一、通用文件中解决黄色波浪线问题1.选中File中的Settings进入2.点击Editor&#xff0c;选中Inspections&#xff0c;找到General&#xff0c;找到Dulicated code fragment点击取消 二、SQL文件中黄色警告线 一、通用文件中解决黄色波浪线问题 1.选…

jvm之7种垃圾回收器解读(下)

目录 G1回收器&#xff1a;区域化分代式 G1回收器的特点&#xff08;优势&#xff09; 空间整合 可预测的停顿时间模型&#xff08;即&#xff1a;软实时soft real-time&#xff09; G1垃圾收集器的缺点 G1回收器的参数设置 G1收集器的常见操作步骤 G1收集器的适用场景 分…

Spring SpringMVC Mybatis 整合 SSM整合 一篇就够了!

SSM详细整合教程 因为XML注解方式实现更加方便&#xff0c;所以我门选用它 文章目录 SSM详细整合教程一、整合思路二、整合步骤0. 前期准备引入Jar包与Web目录创建1. Spring框架编写1.1 创建Application配置文件 2. SpringMvc框架编写2.1 创建Springmvc-config文件2. 2 配置前端…

用栈模拟实现队列(c语言版)

前言 用"栈实现队列",力扣中一道oj题,可以帮助刚接触"栈"和"队列"的新手更好的理解栈和队列这两种结构. 题目来源于力扣: 题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/ 难度:简单 目录 前言一、队列的各接口:1.1 类型…

机器学习实战六步法之数据收集方法(四)

要落地一个机器学习的项目&#xff0c;是有章可循的&#xff0c;通过这六个步骤&#xff0c;小白也能搞定机器学习。 看我闪电六连鞭&#xff01;&#x1f923; 数据收集 数据是机器学习的基础&#xff0c;没有数据一切都是空谈&#xff01;数据集的数据量和数据的质量往往决…

潮牌搭配APP的设计与实现

摘 要&#xff1a;本文开发过程以android为中心&#xff0c;通过数据库进行的数据访问操作。软件以面向对象的思维进行开发和设计&#xff0c;针对于广大群众进行下载使用&#xff0c;对用户提供了时尚的搭配&#xff0c;带领用户形成自己的一套搭配系统&#xff0c;做自己搭配…

C++ std::thread 与Qt qthread多线程混合编程

C与Qt深度融合&#xff1a;高效设计多线程应用框架 1. C与Qt线程的混合使用1.1 C线程与Qt线程的基本概念1.2 线程间的相互依赖关系1.3 设计合理的代码框架 二、深入理解C和Qt线程模型2.1 C线程模型2.2 Qt线程模型2.3 C和Qt线程模型的比较 三、C和Qt线程间的互操作性3.1 std::th…

Web应用技术(第十六周/END)

本次练习基于how2j的教程完成对SpringBoot的初步学习。 初识Springboot 学习导入&#xff1a;1.第一个基于SpringBoot的项目&#xff1a;&#xff08;1&#xff09;application.java&#xff1a;该文件中的核心代码&#xff1a; &#xff08;2&#xff09;HelloController.java…

浅结代码混淆2

文章目录 SMC 自解码什么是SMC&#xff1f;原理示例动调 &#xff4d;ov混淆 SMC 自解码 什么是SMC&#xff1f; 简而言之&#xff0c;就是程序中的部分代码在运行之前被加密成一段数据&#xff0c;不可反编译&#xff0c;通过程序运行后执行相关的解码功能&#xff0c;对加密…

Nginx搭建Https反向代理,使用阿里云免费SSL证书 - Docker

Docker安装Nginx - 需要有域名 没有docker需提前安装docker&#xff0c;不知怎么安装的请自行百度。 1、拉取镜像 docker pull nginx2、去阿里云或者其他云服务提供商申请免费证书&#xff0c;申请到之后下载下来&#xff0c;上传到服务器 # 创建nginx-proxy目录 mkdir ngi…

软考A计划-系统架构师-官方考试指定教程-(13/15)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

IP签名档PHP开源版:轻松打造网站个性签名档

今天&#xff0c;我们将为大家介绍一个有趣的IP签名档项目。通过将源代码部署在服务器上&#xff0c;您可以轻松地为自己的社交媒体、论坛等地创建一个独特的签名档&#xff0c;使您的网站更加出彩&#xff01; 接下来&#xff0c;我们将详细向大家展示如何搭建PHP开源版IP签名…