- 博客(57)
- 资源 (5)
- 问答 (1)
- 收藏
- 关注
原创 浏览器面试题整理
浏览器网页生成过程构建 dom 树解析 CSS,构建 CSSOM 树结合 CSS 和 CSSOM 树,生成一棵渲染树(Render Tree)布局阶段生成 LayoutTree分层生成 LayerTreePaint 绘制阶段栅格化(raster)操作合成与展示什么是重排和重绘?重排(也称回流)当 DOM 的变化影响了元素的几何信息(DOM 对象的位置和大小),浏览器需要重新计算的几何属性,将其安放在界面中的正确位置,这个过程叫做重排。触发条件:添加或者删除可见的 DOM
2022-03-13 21:31:58 1680
原创 前端工程化
webpack 配置基本使用:entry、plugin、output、module常见 webpack loaderfile-loaderbabel-loaderurl-loadersass-loadercss-loaderstyle-loader常见 webpack pluginplugin 是插件,在 webpack 允许的生命周期中会广播出许多事件,plugin 可以监听这些事件。html-webpack-plugin: 简化 html 创建clean-webpack-pl
2022-03-13 21:31:25 1017
原创 手写系列面试题整理
防抖函数防抖关注一定时间连续触发,只在最后执行一次,而函数节流侧重于一段时间内只执行一次。//定义:触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。//搜索框搜索输入。只需用户最后一次输入完,再发送请求//手机号、邮箱验证输入检测 onchange oninput 事件//窗口大小 Resize。只需窗口调整完成后,计算窗口大小。防止重复渲染。const debounce = (fn, time) => { let timer = nul
2022-03-13 21:30:54 897 1
原创 网络协议面试题整理
TCP 三次握手客户端发送 SYN 报文到服务端服务端接收到客户端的报文,发送 SYN 报文到客户端,ACK+1客户端接收到服务端的 SYN 报文,ACK+1,发送给服务端。TCP 四次挥手客户端发送一个 FIN 报文,状态 Fin_wait1服务端收到 FIN 报文,会发送 ACK 报文,客户端序号加 1. 服务端处于 close_wait 状态。服务端断开连接,发送 Fin 报文,处于 last_ack 状态。客户端收到 Fin 报文,发送 ack,处于 time_wait 状态。
2022-03-13 21:30:14 4312
原创 CSS面试题目整理
CSS 盒模型CSS 盒模型是一个盒子,盒子包裹 HTML 元素,盒子由 4 个属性组成,content、padding、border、margin。标准模型:width、height 是 content。IE 模型:border+padding+content 构成 width 和 height。设置方式:box-sizing 属性。CSS 样式优先级!impotant > style > id > class什么是 BFCBFC 是 Block Format Conte
2022-03-13 21:29:42 199
原创 js面试题目整理
for in 和 for of 的区别for in 是 es5 的标准,用来遍历的是 key,仅适用于数组。for of 是 es6 的标准,用力遍历可迭代对象的 value。js 的数据类型null、undefined、boolean、object、number、string、BigInt、Symbol。typeof 返回值用于判断数据类型,返回值主要有 string、boolean、number、function、object、undefinedinstanceofinstanceof
2022-03-13 21:28:52 1454
原创 React
react 中的 key 的作用Keys 是 React 用于追踪哪些列表中元素被修改、被添加或者被移除的辅助标识。你对虚拟 dom 和 diff 算法的理解,实现 render 函数虚拟 DOM 本质上是 JavaScript 对象,是对真实 DOM 的抽象表现。 状态变更时,记录新树和旧树的差异 最后把差异更新到真正的 dom 中 render 函数:根据 tagName 生成父标签,读取 props,设置属性,如果有 content,设置 innerHtml 或 innerText,如果存在
2022-03-13 21:27:55 1326 1
原创 01背包问题详解
01背包问题详解1. 01背包1.1 题目有N件物品和一个容量为V的背包。放入第i件物品占用空间大小Ci,产生的价值是Wi。求解将哪些物品装入背包可使价值总和最大。1.2 基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或者不放。用子问题来定义状态:即F[i,j]表示前 i 件物品放入一个容量为 j 的背包可以获得的最大价值。那么其状态转移方程是:F[i,j]...
2020-02-28 09:52:01 341
原创 浅入浅出跨域问题
浅入浅出跨域跨域很神秘,如果没有业务需求,可能永远都不会去接触这个知识。但是有了业务需求,这个问题就必须要深入理解。下面就详细介绍下跨域。1. 浏览器安全机制Web 浏览器遵循(同源策略)不会允许访问其他窗口中的文档内容。同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互,这是一个用于隔离潜在恶意文件的重要安全机制。具体来说就是,浏览器可以加载和显示来自多个站点的...
2019-11-08 13:44:03 279
原创 深入浅出Rxjs核心概念
深入浅出Rxjs1. RxJS 是什么?RxJS 是用于 JavaScript 的 ReactiveX 库,RxJS 是 Observables 的响应式编程库,它使编写异步或基于回调的代码更容易从这个官方描述来看,功能很明显,使得编写异步或者基于回调的代码更容易。既然是方便编写异步代码的,没有 rxjs 的异步代码是什么样的呢?2. 编写异步或回调的代码异步编程是相对于同步的编程方...
2019-08-22 10:31:17 626
原创 纵横字谜的答案(Uva232)
纵横字谜的答案(Uva232)题目UVa232,题目考察点时二维数组的使用。注意点是需要读懂题目意思,关键点是起始格需要用额外用一个数组存储。然后根据横向和纵向单词的定义,结合起始格,循环遍历打印输出即可。纵向输出需要额外注意,是先从行开始,找出一个纵向单词,然后转到下一列,直到最后一列,然后再从第二行开始,重复以上步骤。为了防止重复输出,需要把遍历过的位置置0。#include <c...
2019-05-11 16:44:23 568
原创 2019年工作总结
毕业接近一年了,今天没有刷题的兴趣,就打算看看趁着打折买的积灰已久的技术书籍,突然间翻到了一本《程序员修炼之道——从小工到专家》,看了书的前言,想着对自己一年的工作进行一个阶段性总结,深刻认识自己,以便更好地规划未来。从最近很火的一个事说起把,杨振宁在国科大开讲座的时候,有个搞高能的学生问,为什么反对建大型电子对撞机(CEPC)?杨先生的回答中有一句话很是触动, “The party i...
2019-05-06 23:48:31 1068
原创 JavaScript Date类型与时区同步
JavaScript Date类型场景问题:场景 在做SPA单页面应用时,有个时间展示的问题。应用的很多方面都是基于时间来做的,比如报表、记录、日志等很多跟时间有关的内容。 如果想要实现windows的系统中修改时间的功能,包括时区的话。 主要的需求是这样的,首先是应用页面的右上角展示时间,是动态的改变的。其次,有一个修改系统时间的模块,该模块可以修改时间、并且修改系统的时区。...
2018-03-08 16:51:40 19930 1
原创 朴树歌词分析--python爬虫
朴树的歌到底都在唱些什么?前言朴树去年新出了一张专辑《猎户星座》,其中出了几首个人非常欣赏的曲子。朴树这个人很奇怪,不走寻常路。对他的个人不做过多评价,就想看看能不能通过他的音乐来了解一下它。旋律什么的都不是很懂,我只决定好听就行了。那么,剩下的只能分析歌词了。所以我爬取了朴树的所有歌曲的歌词。以下就爬取过程和爬下来的结果进行一波分析。结果分析总共爬取了80首歌,总共14张
2018-01-23 22:31:36 1007
原创 fortan笔记
fortran基础知识语句结构fortran语句分为两种: 可执行语句、不可执行语句fortran语句可以书写行的任意位置,语句间行间的衔接用&符号,类似c/c++语言中的\语句标号是fortran语句的名字,可以使用1~99999之间的任何一个数字,使用标号可以在程序的其他部分引用这条语句。感叹号是注释程序分为3个部分: 声明部分:定义程序名和程序引用的数据以及变量的类型 progr
2017-09-19 09:45:01 6095
原创 C语言注意点
写c犯过的错误scanf("%d",&x);写这个输入的格式化操作符,忘记&符号,在刷pat的时候会出现段错误。一定要注意#define,这个预处理仅仅是完整的代入,一定加个括号保险起见,否则结果出错查半天。
2017-06-02 09:46:24 381
翻译 pytube——下载YouTube视频的python库
pytube的翻译文档描述Youtube是世界上非常流行的视频分享平台,并且作为一个极客,你可能会遇到这样一种情形,就是你想去写点东西下载视频。鉴于此情况,我推荐pytube给你。 pytube是用python写的轻量级库,它没有第三方的依赖并且目的是为了变得高度可靠。 pytube没有假定,意思是没有内建的方法获得‘最’高质量的视频。pytube仅仅给出了所有可以获得的形式和方法,给开发者自己
2017-05-22 13:39:33 10287 1
原创 as86汇编语法
as86汇编语言程序.global begtext,begdata,begbss,endtext,enddata,endbss 是全局标识符,供ld86链接用的.text 是正文段 .data是数据段,.bss是未初始化数据段entry start 告诉链接程序,程序是从start标号处开始执行jmpi go,BOOTSEG 段间跳转.org 510表示以后语句从地址510开始存放在a
2017-05-19 21:17:02 2748
原创 零散的汇编知识整理
汇编知识CS:IP寄存器8086CPU的寄存器都是16位的,可以存放两个字节,AX,BX,CX,DX这四个寄存器通常用来存放一般的数据,称为通用寄存器CS为代码段寄存器,IP为指令指针寄存器,在8086PC机中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M*16+N单元开始,在8086机中,任何时刻,CPU将CS:IP指向的内容当作指令执行8086CPU加电启动或
2017-05-19 18:35:19 470
原创 8086汇编
8086汇编整理学习汇编过程中资料片段的整理,并没有很完整的注解,很零碎8086处理器内部的8个16位的通用寄存器: AX、BX、CX、DX、SI、DI、BP、SP 其中AX,BX,CX,DX,可以拆分为两个8位的寄存器来使用分别为AH,AL,BH,BL,CH,CL,DH和DL为了在硬件一级提供对“段地址:偏移地址”内存访问模式的支持,处理器至少要提供两个段寄存器,分别是代码段寄存器CS和数
2017-05-19 18:33:47 752
原创 Linux源码分析笔记1 (bootsect.s文件分析)
linux0.11源码分析1 bootsect.s文件分析从开机加电到执行main函数的过程由于linux0.11系统当时存储在软盘上,所以其加电过程主要目的就是从启动盘加载操作系统程序,完成执行main函数的准备工作。从开机到mian函数的启动共分三部分: 第一部分是启动bios,准备实模式下的中断向量表和中断服务程序。 第二部分是从启动盘加载操作系统到内存第三部分为执行32位的main
2017-05-19 18:32:00 757
原创 latex数学公式
Latex 数学公式4.1 数学公式概说Tex有两种数学公式,一种是夹在行文段落中的公式,称为行内数学公式,或正文数学公式。另一种是单独占据整行中展示出来的,称为显示数学公式或行间公式,列表公式。在Tex中,行内公式一般在前后单个美元符号......表示。除了使用单个美元符号,还可以使用(和)或是\begin{math}...\end{math}\begin{math}...\end{math}
2017-04-02 18:39:34 2757
原创 算法导论 二叉搜索树
第12章 二叉搜索树12.1 什么是二叉搜索树二叉搜索树是以一棵二叉树来组织的,可用链表结构表示,每个结点是一个对象,包含属性key和卫星数据,还有结点指针left、right、parent,分别指向左孩子、右孩子和双亲。对任何结点x,其左子树的关键字最大不超过x.key,其右子树的关键字最小不小于x.key。不同的二叉搜索树可以代表同一组值的集合大部分搜索树的最坏运行时间与树的高度成正比
2017-03-24 21:28:26 827
原创 算法导论 开放寻址法
散列表11.4 开放寻址法开放寻址法中,所有的元素都存放在散列表里,每个表项或包含动态集合的一个元素或者NIL。当查找某个元素时,要系统的检查所有表项,直到找到所有的元素或者最终查明元素不在表中。为了使用开放寻址法插入一个元素,需要连续的检查散列表,或称为探查(probe),直到找到一个空槽来放置待插入的关键字为止。检查的顺序不一定是0,1,2…m的顺序序列,而是依赖于待插入的关键字。将散列函
2017-03-22 20:57:41 2749
原创 散列函数
散列表11.3 散列函数好的散列函数的特点:一个好的散列函数应满足简单均与假设,每个关键字被等可能的散列到m个槽位中的任何一个,并与其他关键字已散列到哪个槽位无关。将关键字转化为自然函数 多数关键字都假定关键字的全域为自然数集N={0,1,2…},如果所给关键字不是自然数,需要找到一种方法来将它们转换为自然数。一个字符串可以被转换为适当的基数符号表示的整数。如将pt表示为十进制整数对(112
2017-03-22 16:52:26 1864
原创 散列表
第11章 散列表11.2 散列表直接寻址表的缺点:全域U很大时,存储U的表占用空间太大,计算机内存可能存储不了这个,并且实际的关键字集合很小,可能用不了这么多的空间,造成浪费。如果用散列表来存储,虽然查找一个元素的时间是O(1),但是这个界的前提是在简单均匀假设下成立的平均性能界,对于直接寻址表来说,O(1)是最差寻址时间。运用散列表存储可能产生一个问题:由于关键字全集大,而存储集合小,可能出
2017-03-22 15:17:25 516
原创 算法导论 直接寻址表
算法导论 第11章 散列表11.1 直接寻址表如果某应用要用到一个动态集合,其中每个元素都是全域U={0,1….,m}中的一个关键字 为表示动态集合,使用数组。称为直接寻址表,记为T[m],其中每个位置称为一个槽slot,对应于全域中的一个关键字 槽k指向集合中一个关键字为k的元素。如果该集合中没有关键字为k的元素,则T[k]=NIL;程序实现思路:可以用静态数组实现,因为数组的下标等于关键字
2017-03-19 19:39:53 2252
原创 操作系统 进程的描述与控制
本系列是计算机操作系统的笔记 采用的书是《计算机操作系统》汤子瀛第二章 进程的描述与控制2.1前驱图和程序执行2.1.1前驱图1. 所谓前驱图,是指一个有向无循环图,可记为DAG(Directed Acyclic Graph),它用于描述进程之间执行的先后顺序。2.1.2程序顺序执行程序的顺序执行程序顺序执行时的特征 顺序性封闭性可再现性 2.1.3 程序并发执行程序的并发执行程序并发
2017-03-19 13:43:00 3693 1
原创 CLRS第10章 基本数据结构——栈和队列
算法导论的第10章内容—基本数据结构的总结和习题的解答。10.1 栈和队列栈和队列都是动态集合,且在其上进行的DELETE操作所移除的元素都是预先设定的。栈上DELETE的元素是最近插入的元素,队列是在集合中存在时间最长的元素。栈是一种后进先出的策略(LIFO),队列是一种先进先出的策略(FIFO)。 栈上的INSERT操作为PUSH,DELETE操作为POP。 队
2017-03-10 19:37:42 540
原创 Fibonacci数列算法的几种实现方式与比较
斐波那契数列1,1,2,3,5,8…,对于该数列的求解又如下几种方式。version1//version1int Fibonacci(int n,int* f){ f[0]=1; f[1]=1; for(int i=2;i<n;i++) f[n]=f[n-1]+f[n-2]; return f[n-1]; }分析:输入参数是一个存储斐波那契数列的数组,返回第n个数
2017-03-06 18:31:24 1371
原创 变步长辛普森求数值积分
先贴代码:整理好了在给出介绍/*变步长辛普森公式*double simp(double a,double b,double eps,double (*f)(double))*double a:区间的左端点*double b:区间的右端点*double eps:误差精度*double (*f)(double):积分函数*返回值为double**/#include<iostream>#
2016-12-26 12:01:02 9941
原创 龙贝格求解数值积分
龙贝格求解数值积分,将梯形公式求解线性组合,得到龙贝格求积分。先贴代码:/*龙贝格求积分*double romb(double a,double b,double eps,double(*f)(double))*double a:给出积分区间下限*double b:积分区间上限*double eps:误差精度*double (*f)(double) :被积函数*函数返回double*/
2016-12-26 11:59:13 3373
原创 变步长梯形求数值积分
数值积分中,插值求积公式可以近似求积函数。对于插值函数,可以用梯形公式来近似,为了满足一定的精度,需要将求积区间分成很多个小的区间,分别用于梯形公式,但是由于某些时候步长不能很好的控制,所以需要变步长。本算法给出变步长求积公式,该算法的具体形式可以在数值分析的书籍中找到,下面直接给出c++代码/;/*变步长梯形求积法*该函数double tarp_form(double a,double b,do
2016-12-24 18:01:06 7965
原创 多项式求值的秦九韶算法
多项式求值算法,如果仅用普通的多项式的求法,对于n次多项式,需要n/(n+1)次的乘法,n次加法,计算量大,改用秦九韶算法,能有效的降低时间复杂度,并且该算法还能顺便给出多项式在该点的导数值,一举多得。秦九韶算法在国外又称Hernor算法。下面贴代码:/**多项式求值的秦九韶算符(国外称Hernor算法)*该算符将一个多项式求值,原本进行n(n+1)/2次乘法,和n次加法运算*简化成n次乘法运
2016-12-22 11:45:37 4768
原创 试位法求解非线性方程的根
本次实现试位法的算法,该算法的背景如下: 该算法的详细解释如下: 该算法的实现如下:/**试位法*方程f(x)=0在区间[a,b]上连续,且f(a)f(b)<0,则方程f(x)=0在区间[a,b]上必有实根。*函数接口:double false_pos(double a,double b,double eps,double f(double))*a:求根区间的左端点*b:求根区间的右端
2016-12-20 14:27:40 4239
原创 对分法求非线性方程的根
对于非线性方程的求解,有时候很难找到解的解析函数,所以只能才用数值求解。常见的一些非线性方程为基本原理:如果非线性方程f(x)=0,的左端函数f(x)在区间[a,b]上连续,并满足f(a)f(b)<0,则方程至少有一个实根。 基本思想:逐步缩小这个有根的区间,当这个区间减少到一定程序时,就取这个中点作为根的近似值。如果在区间[a,b]内有多个实根,则单独利用对分法只能得到其一个实根。所以,将对分法
2016-12-16 13:44:22 4398
原创 全区间厄米特插值算法
在某些插值问题中,不仅给出了插值点的值,也给出了插值点的导数值,这便可以运用厄米特插值公式进行插值。厄米特插值公式如下:下面给出代码://Hermite插值/* *函数声明double Hermit(double* x,double* y,double* dy,int n,double t) *x为存放给定n个结点的指针 *y为存放n个节点上的值的指针 *dy为n个结点的导数的指针 *n
2016-12-05 23:06:54 2690
原创 艾特肯逐步插值法
艾特肯(Aitken)逐步插值法是代数插值中一个较为普遍的方法,对于拉格朗日插值,误差的余项并不能判断大小,而艾特肯插值法解决了余项的精度问题,该方法可以通过精度的要求逐步提高插值的阶,在插值过程中只需要通过两个低阶的插值结果进行线性拟合即可,并且计算方便。 具体实现过程就不多说了,我在代码里面注释的很清楚了! 代码如下://全区间艾特肯插值//函数接口说明:/* double Aitke
2016-12-04 18:39:53 5109
C++编译报错,写入内存错误
2016-09-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人