• 前端知识部分整理


    web标准的理解

    • web标准是由网页有结构,表现,行为构成!
    • 结构的标准
    • XML+XHTML到目前的html5都有差异
    • 表现的标准行为
      • css2标准到现在css3的新属性,兼容
    • dom+javascript

    浏览器的内核差异

    • 目前市场上基本有4大内核

    • Trident 典型代表IE浏览器,网页的标准兼容性不好

    • Gecko 典型代表火狐浏览器 功能强大

    • Webkit 典型代表谷歌浏览器,基本安卓和苹果手机上都是这个

    • Presto Opera浏览器,这个在市场上份额很少,但是linux系统上很完美

    hack

    • 针对所有IE:
    • 针对IE9及以下版本:
    • 我们可以给浏览器每个版本的写上css的类,然后通过类来在特定的浏览器版本生效
    • -例如 .ie7 .content{}

    css布局

    • 我们可以把结构和表现分离开,
    • 便于我们后期维护

    盒子模型

    • 盒子模型有4个属性
      • 外边距 margin
      • 内边距 padding
      • 边框 border
      • 内容部分 content
    • IE盒子
      • 内容content的width包括了内边距和边框

    选择器的优先级

    • !important 这个最高级

    • color:blue !important;

    • style 优先级第二

    • style="color:red"

    • id 优先级第三

    • #color{color:red}

    • :nth-child(3)选择符 优先级第四

    • p:nth-child(3)

    • 类选择符 优先级第五

    • .color{color:red}

    • 标签选择符 优先级第六

    • div{color:red}

    • 通配符选择符 优先级第七

    • *{margin:0;padding:0}

    html5

    • html5新增加的标签,很语义化

      • header
      • footer
      • nav
      • section
      • aside 不重要
      • atrical 不重要
    • 重要的标签

      • video 视频
      • audio 音乐
      • canvas 画布
    • 新增加的表单新属性

    • placehplder 提示

    • required 必填

    • tel 电话

    • date 日期

    • number 数字

    • color 颜色

    css3

    • 样式

    • border-radius 圆角

    • box-shadow 阴影

    • background-size 北京图片尺寸

    • text-shadow 文本阴影

    • linear-gradient 线性渐变

    • 动画

    transform 变形

    • 单位deg

    • rotate(x) 旋转

      • 参数x必须是以deg结尾的角度数或0,可为负数表示反向。
    • scale 缩放

      • 单位是数字

      • 元素x和y方向均缩放a倍

      • transform: scale(a);

      • 元素x方向缩放a倍,y方向不变

      • transform: scaleX(a);

      -x方向不变,元素y方向缩放b倍

      • transform: scaleY(b);
    • translate 平移

      • 单位px

      • 元素x方向位移a,y方向位移b

      • transform: translate(a, b);

      • 元素x方向位移a,y方向不变

      • transform: translateX(a);

      • 元素y方向位移b,x方向不变

      • transform: translateY(b);

    • skew() 倾斜

    • 单位 deg

      • 元素x方向倾斜角度a
      • transform:skew(a,b)

    ####transition 过渡

    • transition-property

      • 作用与css样式 也可以all
    • transition-duration

      • 过渡运行总时间
      • 10s
    • transition-delay

      • 过渡推迟多少秒执行

    animation 动画

    • animation-name

    • 动画名字

    • animation-duration

    • 动画运行总时间

    • animation-delay

    • 动画延迟多长时间

    • animation-iteration-count

    • 动画执行次数,也可以循环执行 infinite

    • 定义一个动画 ,最后动画完成一定要100%

    • @-webkit-keyframes 动画名字{0%{}50%{}100%{}}

    flex布局

    • display: flex;

    • flex

      • 1 占当前比例的1份
      • 2 占当前比例的2份
    • flex-direction 项目的排列方向

      • row 从下往上排
      • row-reverse 从上往下排
      • column 从左往右排
      • column-reverse 从右往左排
    • flex-wrap 决定换不换行

      • wrap 换行
      • nowrap 不换行
    • justify-content 对齐方式

      • center 横向居中对齐
      • flex-start 左边对齐
      • flex-end 右边对齐
    • align-items 对齐方式

      • center 纵向对齐方式
      • flex-start 上边对齐
      • flex-end 下边对齐

    js数据类型

    • null 不存在,连声明变量都没有
    • undefined 未定义,声明变量了却没有值
    • number 数字
    • string 字符串
    • boolean 布尔
    • object 对象

    js运算

    • 基本运算符
    • / 除
    • = 赋值
    • ++ 累加
    • -- 累减
    • % 求余
    • += 每次赋值累加
    • -= 每次赋值累减

    js对象

    • 定义一个对象
    • let obj={}

    js 原型

    • 每一个函数上都有一个属性叫prototype
    • prototype

    js 闭包

    • 函数执行都会形成一个私有作用域,保护里面的私有变量不受外界干扰,这种保护叫闭包
    var a=10;
    function fe(){
       var a=666; //私有变量
       console.log(a);
    }
    a=10000; //全局
    fe() //666 私有的变量受保护,没有被全局影响
    console.log(a) //10000
    

    继承

    • es5 继承就是修改原型链

    • es6 a继承b的一些属性和方法

    • class a extends b{ constructor(props){ //调用实现父类的构造函数 super(props); } }

    作用域

    • 作用就是保护变量
    • {}

    原型链

    • _proto_是任何对象都有的属性

    常用事件

    • onclick

    • 点击事件

    • onmouseover

    • 鼠标滑进

    • onmouseoute

    • 鼠标划出

    • onload

    • 页面加载完成

    • onkeydown

    • 键盘按下

    • onkeyup

    • 键盘弹起

    • onfocus

    • 获取焦点

    • onblur

    • 失去焦点

    • onchange

    • 用户改变input输入或者select下拉框改变

    • oninput

    • 文本框中输入就执行

    • ondblclick

    • 双击

    • onscroll

    • 滚动

    • onresize

    • 浏览器的窗口重置大小就发生

    • onselect

    • 文本被选中

    事件对象

    • onclick(event)

    • 触发事件的元素节点

    • event.target

    • 阻止当前事件 e.cancelBubble=true;

    • event.stopPropagation()

    • 阻止默认行为

    • e.preventDefault()

    正则表达式

    • RegExp

    • 匹配三个数字

    • new RegExp("/d{3}$/")

    • search()

    • 检索字符串开始的位置

    -match()

    • value值.match(正则表达式)

    • test()

    • 正则表达式.test(value值)

    json

    • json格式

    • {},{'':[{},{}]},[{},{}]等

    • 将字符串转为json对象

    • JSON.parse()

    • 将json对象转为字符串

    • JSON.stringify()

    DOM操作

    • 创建一个标签

    • document.createElement('div')

    • 获取元素 -根据id或者class获取元素

      • document.querySelector("#id"或者".class")
      • 根据id获取元素
        • document.getElementById()
      • 根据class名字获取
        • document.getElementsByClassName('class')
      • 根据标签获取
        • document.getElementsByTagName('table')
    • 获取父元素

    • ele.parentNode

    • 获取子元素

    • ele.children

    • 兼容写法

    • var ele.firstElementChild||ele.children[0];

    • 获取当前元素的第一个子元素

    • ele.firstChild

    • 获取当前元素的最后一个子元素

      • ele.firstElementChild
    • 头部添加子元素

      • appendChild()
    • 删除子元素

      • removeChild()
    • 属性操作

    • 判断有没有这个类

    • ele.hasAttribute('class')

    • 移除属性

    • ele.removeAttribte('class')

    -获取属性

    • ele.getAttribte('class')

    -设置属性

    • ele.setAttribute('class','值')

    • 设置值

    • innerHTML 内部html

    • innerText 内部文本

    • outerHTML 外部HTML

    • outerText 外部文本

    BOM 浏览器对象

    • window.history.go(-1) 返回上一个窗口页面

    • setInterval 循环执行计时器

    • clearInterval 暂停执行

    • setTimeout 定时执行一次

    • clearTimeout 暂停执行

    • location.href 跳转页面

    跨域

    • 同源策略

    • 域名

    • 协议

    • 端口

    • 违法上面的一个不同,就叫跨域

    • jsonp

    • 动态创建script请求,src写链接

    • jquery的$ajax

      • dataType:'jsonp'
    • fetch ,跨域和不跨域都不用设置

    let myHeaders = new Headers({
        'Access-Control-Allow-Origin': '*',
        'Content-Type': 'text/plain'
    });
    fetch(url, {
        method: 'GET',
        headers: myHeaders,
        mode: 'cors'
    }) .then((res) => {
        // TODO 
    })
    

    异步加载

    动态创建标签,然后插到body结束标签后

    (function() { 
    var s = document.createElement('script'); 
    s.type = 'text/javascript'; 
    s.async = true; 
    s.src = 'http://yourdomain.com/script.js'; 
    var x = document.getElementsByTagName('script')[0]; 
     x.parentNode.insertBefore(s, x); 
    })();
    

    mvvm框架

    • vue.js
    • vue-router 路由
    • vuex 状态管理

    mac框架

    • react
    • angular

    响应式

    • all代表所有设备
    • screen 电脑显示器
    • handled 便携设备
    • media all and(min-1200px)

    自动化构建工具

    • webpack
    • 以前老版的grunt,gulp没有必要细琢磨

    http状态码

    • 200:'ok', //成功
    • 206:'', //部分类容
    • 301:'', //永久重定向
    • 302:'', //临时重定向
    • 304:'', //缓存发现
    • 400:'', //客户端请求错误
    • 401:'', // 未授权
    • 403:'', // 登录之后,无权访问
    • 404:'', //资源没有找到
    • 500:'', //服务器端内部错误
    • 503:'' //服务暂时不可用

    html5本地存储

    • localStorage 永久化本地存储,只要不主动删除 就会一直存在
    • sessionStoage 会话级存储,关闭浏览器客户端,销毁存储
    设置存储
    • localStorage.setItem('存储名字', 存储类容);
      • 将对象转为string再存储
      • localStorage.setItem('user',JSON.stringify({username:'老王',ID:1}));
      • 获取存储
        • localStorage.getItem('user');
    • 根据指定的key删除一个元素清空存储 localStoage.clear();
      • localStorage.removeItem('username');

    web安全

    • XSS
    • CSRF 跨站伪造

    可维护性

    • 重复写的代码封装成一个,重复的功能模块化
    • 结构样式必须分离开,整洁干净
    • 重复操作构建工具去做
    • 代码风格一致,可读性好,别人接手毫不费力

    易用性

    • 个人推崇页面简洁,操作简单,直观可见,重点突出
    • 一种主调色彩,搭配少了的辅助相近色,合理布局,轻易突出需要表现的东西

    职业生涯、快速学习能力

    • 学习职业生涯不是每天重复你毫不费力的事情,

    • 学会沟通,明确描述自己的问题,并大胆说出自己解决的思路, 调试现象,沟通和请教的时候态度谦虚点不是错,这是基本礼貌,学会 聆听别人的看法。

    • 学会梳理自己技术结构,前端不止页面,后端也属于前端的一种技术,说 这句话不过分,前端越来越复杂,现在应该是全端了,后端不在局限于后端人员 学会接受市场变化,多学习对你职业发展有利的技术

    • 学习应该是一种习惯,自主不讨厌的进行,这不应该是一种 逼迫,应该是一种习惯,不应该有任何埋怨,因为学习是提高你更多了一种认知 ,工作不是应付完成就行,多思考性能优化问题,多重方案的优缺点

    css布局

    • 左边100px,右边100px,中间自适应
    • flex布局
    • flex:0 0 100px
      .content{
                display: flex;
                height: 20px;
                border:1px solid #eeeeee;
    
            }
            .left{
                 100px;
                height: 20px;
                flex-grow: 0;
                flex-shrink: 0;
                flex-basis: 100px;
                background: red;
            }
            .center{
                flex: 1;
            }
            .right{
                 100px;
                height: 20px;
                flex-grow: 0;
                flex-shrink: 0;
                flex-basis: 100px;
                background: red;
            }
    
    • calc 计算
     .content{
                 100%;
                height: 20px;
                border:1px solid #eeeeee;
    
            }
            .content:after{
                display: block;
                height: 0;
                clear: both;
            }
            .left{
                 100px;
                height: 20px;
                float: left;
                background: red;
            }
            .center{
               -webkit-calc(100% - 200px);
                -moz-calc(100% - 200px);
                calc(100% - 200px);
                height: 20px;
                float: left;
    
            }
            .right{
                 100px;
                height: 20px;
                float: left;
                background: red;
    
            }
    
    • 浮动
    <div style="100%; margin:0 auto;"> 
    
           <div style="200px; float:right; background-color:#960">这是右侧的内容 固定宽度</div>
    
           <div style="150px; float:left; background:#6FF">这是左侧的内容 固定宽度</div>
    
           <div style="margin-left:150px;margin-right:200px; background-color:#9F3">中间内容,自适应宽度</div>
    
        </div>
    
    • 定位
          .left,.right{
                position: absolute;
                top:0;
                 200px;
                height: 20px;
                background: red;
            }
            .left{
                left: 0;
    
            }
            .center{
              margin: 0 200px;
                 100%;
            }
            .right{
               right: 0;
    
            }
    

    左侧菜单栏占300px,右侧内容可以根据浏览器自适应

    • 解决思路现在提供两个
    • flex 和calc
     .content{
                 100%;
                height: 20px;
                border:1px solid #eeeeee;
                display: flex;
            }
            .left{
                100px;
                height: 20px;
                flex: 0 0 100px;
                background: red;
    
            }
            .right{
                flex:1;
            }
    
    

    CSS选择器又哪些?有哪些新特性?有哪些伪类?

    • id选择器 (#myid)

    • 类选择器 (.className)

    • 标签选择器 (div)

    • 相邻选择器 (h1+p)

    • 子选择器 (ul>li)

    • 后代选择器 (li a)

    • 通配符选择器 (*)

    • 属性选择器 (input[type="text"])

    • 伪类选择器 (a:hover,li:nth-child())

    • 伪类

      • :active

      • 鼠标点击,增加特效,鼠标松开,特效消失,多用在按钮上

      • :hover

      • 鼠标划入标签,增加特效,鼠标松开,特效消失

      • :focus

      • 我们点击元素后想一直拥有某些样式,多用于input标签有焦点时候

      • :first-child

      • 对元素第一个子元素添加样式

      • :nth-child(index)

      • 对元素第几个添加样式

      • :before和after

      • 多用于消除元素浮动

    清除浮动

    • clear:both

    • 结尾处加空div标签设置clear:both

    • 父级标签定义伪类:after给样式来消除

    .clearfloat:after{
    display:block;
    clear:both;
    content:"";
    visibility:hidden;
    height:0;
    }
    //针对IE
    .clearfloat{
    zoom:1
    }
    
    • 父级div设置overflow:hidden

    • 父级div定义display:table

    div里面图片设置垂直居中

    • 首先设置div为table-cell
    div{
        100%;
        height:100%:
        position: fixed;
        display:table-cell;
        vertical-align:center;
    }
    img{
        100px;
        height:100px
    }
    
    • 第二种定位设置
    div {
        100%;
        height:500px;
        position:relative;
    }
    img{
         100px;
         height:100px;
         position:absolute;
         top:50%;
         left:50%;
         margin-top:-50px;
         margin-left:-50%;
    }
    
    • 第三中transform: translate(-50%.-50%)
     .div{
        100%;
        height:100%;
        border:1px solid black;
        position: fixed;
        background-color: rgba(0,0,0,0.5); 
        }
     img{
         position:absolute;
         50px;
         height:50px;
         top:50%;
         left:50%;     
         -webkit-transform: translate(-50%,-50%);
         -ms-transform: translate(-50%,-50%);
         -o-transform: translate(-50%,-50%);
         transform: translate(-50%,-50%);
          background:#22B14C;
    }        
    

    2级DOM

    • addEventListener():可以为元素添加多个事件处理程序,触发时会按照添加顺序依次调用。
    • removeEventListener() 移除事件

    ##DOM事件捕获和冒泡的具体流程

    • 事件捕获阶段

      • 事件从最上一级标签开始往下找,直到捕获到事件目标(target)
    • 事件冒泡阶段

      • 事件从事件目标(target)开始,往上冒泡到页面最上一级标签
    • 阻止冒泡

    • IE下设置cancelBubble = true;

    • event.stopPropagation()

    • 一般也就点击事件冒泡多一点

    Event对象的常见应用场景

    • 一个完整的事件系统,一般存在3个角色

      • 事件对象 用来储存事件状态
      • 事件源对象 当前事件在操作的对象
      • 事件监听 当一个事件源生成一个事件对象时,它会调用相应的回调函数进行操作
    • event.target 当前事件目标元素

    • preventDefault() 不要执行与事件关联的默认动作

    • stopPropagation() 阻止事件冒泡

    • 获取event对象兼容写法

    • event || (event = window.event);

    • 获取target兼容写法

    • event.target || event.srcElement

    • 阻止浏览器默认行为兼容写法

    • event.preventDefault ? event.preventDefault() : (event.returnValue = false);

    • 阻止冒泡写法

    • event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true);

    事件委托

    • 事件委托就是利用事件冒泡,指定一个事件处理程序,管理 某一类型相同的所有事件
    // 利用事件委托 比一个一个绑定事件 性能提高多倍
        var oUl = document.getElementById('oUl');
        var list = oUl.getElementsByTagName('li');
       
           // 利用事件委托 比一个一个绑定事件 性能提高多倍
           oUl.onclick = function (e) {
               e = e || window.event;
               var tar = e.target || e.srcElement;
               //tar 当前节点 <li></li>
               //tar.tagName当前标签名字li
               //toUpperCase()转为大写
               if(tar.tagName.toUpperCase() === 'LI'){
                  console.log(tar.innerHTML);
               }
           }
    

    JS中常遇到的浏览器兼容问题

    • 网页可见区域宽和高

    • document.body.clientWidth||document.docuemntElement.clientWidth;

    • document.body.clientHeight||document.docuemntElement.clientHeight;

    • event事件对象

      document.onclick=function(ev){//兼容写法;
            var e=ev||window.event;
            var mouseX=e.clientX;//鼠标X轴的坐标
            var mouseY=e.clientY;//鼠标Y轴的坐标
        }
    
    • event中的target
      document.onmouseover=function(e){
            var e=e||window.event;
            var Target=e.target||e.srcElement;//获取target的兼容写法,后面的为IE
            var from=e.relatedTarget||e.formElement;//鼠标来的地方,同样后面的为IE...
            var to=e.relatedTarget||e.toElement;//鼠标去的地方
        }
    

    js创建对象三种方式

    • var obj={}
    • var obj=new 函数名()
    • var obj=new Object()

    js 继承的几种方式

    • 原型链继承 ,私有,公有都继承
      • 将父类实例化后绑定在子类的原型上
      • 然后实例化子类,可以调用父类的方法
    function Parent(name) {
        this.name = name
    }
    Parent.prototype.home = '北京';
    function Child() {
        this.age = 8;
    }
    //将父类的实例绑定在子类的原型上
    Child.prototype = new Parent('aa');
    //实例化子类
    let child = new Child();
    //这时候继承父类的公有私有属性
    console.log(child.home+child.name);
    // 结果 北京 + aa
    
    • 构造函数继承 ,私有继承,公有不继承
      • 在子类里面,call改变父类this
    function Parent(name) {
        this.name = name
    }
    //父类的公有属性
    Parent.prototype.home = '北京';
    
    function Child(name) {
        this.age = 8;
        Parent.call(this,...arguments);
    
    }
    let child = new Child('hello');
    console.log(child.home+child.name);
    
    //结果是 undefined +hello
    
    • 组合继承 公有继承,私有不继承
    function Parent(name) {
        this.name = name
    }
    Parent.prototype.home = '北京';
    function Child() {
        this.age = 8;
    }
    Child.prototype = Object.create(Parent.prototype);
    let child = new Child();
    //这时候继承只继承父类的公有属性 父类的私有属性没有继承
    console.log(child.home+child.name);
    // 结果 北京 + indefined
    
    • es6继承
    class Person {
        //控制器
        constructor(name,age){
            this.name=name;
            this.age=age;
        }
        eat(){
            console.log("吃饭");
        }
    }
    //关键字 extends 公私有都会继承
    class Girl extends  Person{
        constructor(name,age){
            super(name,age); //默认调用父类,并且this就是girl实例
        }
    }
    let g=new Girl('aa',18);
    console.log(g.name,g.age);
    g.eat();
    //结果aa 18
    // 吃饭
    

    js合并两个对象

    • Object.assign
    var o1 = { a: 1 };
    var o2 = { b: 2 };
    var obj = Object.assign(o1, o2);
    
    • jquery合并两个对象
    • $extend
    a = {'a': 1};
    b = {'b': 1};
    c = $.extend(a, b)
    
    • 事件绑定和普通事件的区别

      • 普通添加事件的方法不支持添加多个事件,最下面的事件会覆盖上面的,而事件绑定(addEventListener)方式添加事件可以添加多个。
    • 高性能动态向一个div中插入1000个div标签

    • document.createdocumentfragment 文档碎片

    • 一次性拼接完字符串,最后一次插入节点,减少dom操作

      //先创建文档碎片
    
        var oFragmeng = document.createDocumentFragment();
    
    
        for(var i=0;i<1000;i++)
    
        {
    
            var op = document.createElement("div");
    
            var oText = document.createTextNode(i);
    
            op.appendChild(oText);
    
            //先附加在文档碎片中
    
            oFragmeng.appendChild(op);
    
        }
    
    
        //最后一次性添加到document中
    
        document.body.appendChild(oFragmeng);
    

    jquery.extend , jquery.fn.extend的区别

    • jquery.extend 为jquery的扩展类
    • jquery.fn.extend 给jquery对象添加方法
    • 大部分插件都用jquery.fn.extend

    jquery中的bind,live,delegate,on区别

    • bind() 是直接绑定在元素上,如果没有设置阻止冒泡stopPropagatio 很有可能他所有父元素,祖宗元素都会受影响

    • unbind() 解除绑定

    • live() 通过冒泡方式绑定到元素上

    • 基本淘汰了,阻止冒泡都不管用

    • on() 这个最好

    • off() 解除绑定

    document.ready和document.load和$(function(){})有什么区别

    • ready比load先执行

    • ready事件在DOM结构绘制完成之后就绘执行。这样能确保就算有大量的媒体文件没加载出来,JS代码一样可以执行

    • load事件必须等到网页中所有内容全部加载完毕之后才被执行

    • 如果一个网页中有大量的图片的话,则就会出现这种情况:网页文档已经呈现出来,但由于网页数据还没有完全加载完毕,导致load事件不能够即时被触发。

    $(function(){}) 匿名函数,你可以当成$(document).ready(function(){})的简写

    $.data()和$('#aaa').data()各自作用是什么?有什么区别

    • $('#aaa').data()向元素附加数据,或从元素中获取数据
    //向元素中附加数据greeting
    $("#btn1").click(function(){
      $("div").data("greeting", "Hello World");
    });
    //从元素中获取数据
    $("#btn2").click(function(){
      alert($("div").data("greeting"));
    });
    

    es6 箭头函数

    • 首先箭头函数没有自己的this
    • 如果你要当前函数的this,那么箭头函数不行

    async/await 解决回调函数嵌套问题

    如何在项目中解析处理es6和es7代码

    • babel

    promise方法

    • Promise 类
    • 两个参数提供then()回调方法
      • resolve成功
      • reject失败
    • Promise.all()并发执行方法
    function buypack(){
        return new Promise((resolve,reject)=>{
            setTimeout(()=>{
                if(Math.random()>0.5){
                    resolve('买')
                }else{
                    reject('不买,被打死');
                }
            },Math.random()*10*1000)
        })
    };
    buypack().then((data)=>{
        console.log(data);
    },(err)=>{
        console.log(err);
    })
    

    async和await异步操作

    • async 和 await解决异步问题,基于primise

    • 主要解决promise的then方法嵌套

    • async和await这两个关键字一起使用

    • await后面智能跟promise对象

    Promise.all()并发读取

    //es7
    
    let fs=require('fs');
    function read(url) {
        //new Promise 需要传入一个executor 执行器
        //executor需要传入两个函数 resolve reject
        return new Promise((resolve,reject)=>{
            //异步读取文件
            fs.readFile(url,'utf8',function (err,data) {
                if(err){
                    reject(err)
                }else{
                    resolve(data);
                }
            })
        })
    };
    
    //async await 解决异步问题,基于promise
    //async await这两个关键字一起使用
    //await 后面只能跟promise对象
    async function getData(){
        try{
            //Promise.all()并发读取
            let result =await Promise.all([read('name.txt'),read('age.txt')]);
            console.log(result);
        }catch (e){
            console.log(e);
        }
    }
    getData();
    
    //Promise 解决多层嵌套,回调地狱
    // 解决异步请求,同步结果的问题
    

     

  • 相关阅读:
    CF1253F Cheap Robot(神奇思路,图论,最短路,最小生成树/Kruskal 重构树/并查集)
    [算法模版]子序列DP
    [Codeforces1250E] The Coronation
    Comet OJ
    [算法模版]种类并查集
    浅析容斥和DP综合运用
    FWT-快速沃尔什变换
    [算法模版]同余最短路
    卡特兰数
    [算法模版]同余最短路
  • 原文地址:https://www.cnblogs.com/null11/p/7570814.html
Copyright © 2020-2023  润新知