自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 资源 (3)
  • 收藏
  • 关注

原创 Typescript类型实践的void与symbol

void in JavaScriptlet i = void 2; // i === undefinedwhy 为什么需要void?因为早期js里,人们可以重写undefined,然后赋予真正的值给它,而void总是返回真正的undefined。void在JS里是一个类似单目运算符的存在。void提供了一种立即执行函数的方式,可以不需要借助函数表达式。void function(...

2019-11-02 23:23:13 1241

原创 阿里前端笔试题

按面向对象实现数据的删除:注意splice(index,1) 第一个参数是第i个位置注意list删除后要重新更新lists数组面向对象,以类的形式抽象这个问题<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta content="width=device-width, initial-scal

2017-08-18 12:10:57 938

原创 今日头条血槽已空

小结今日头条的面试不是一般的难. 前面两面还好。一面JS基本数据类型说说ES6新规范,我说了 let const 箭头函数 还有promise, ES6 Module 。怎么实现ES6 Module,我说了用闭包实现一个模块。项目用到React,说说React。React性能优化算法 问题之前笔试 ,求两个整型数组的相同数,当时想到了用哈希表去扫描,然后比较下一个数组

2017-04-29 19:41:53 1312

原创 margin+float实现自适应二等分布局

前言有时候觉得对浮动布局,定位这些思考得其实还不够深入。 网上的说法很多,它们很多掺杂各种浏览器兼容或者一些清除浮动等等的hack。但是我觉得还是应该从简入深,理解一下它的本质。两列布局所谓的两列布局,首先是左边栏是定宽,右边主栏是自适应的。 一般看到自适应我们可很容易想到就是百分数,浮动布局。<!DOCTYPE html><html lang="en"><head> <meta c

2017-04-23 16:50:32 1570

转载 HTTPS相关原理

HTTPS相关原理2016年12月11日19:49 在互联网安全通信方式上,目前用的最多的就是HTTPS配合SSL和数字证书来保证传输和认证安全了。本文追本溯源围绕这个模式谈一谈。 1 名词解释首先解释一下上面的几个名词:· HTTPS:在HTTP(超文本传输协议)基础上提出的一种安全的HTTP协议,因此可以称为安全的超文本传输协议。HTTP协议直接放置在TCP协议

2017-03-22 19:25:53 914

原创 基于Canvas和React极简游戏(二)

暂停处理游戏业务逻辑是与React组件联系比较紧的。 暂停处理的React组件如下所示: import React from 'react';import './Pause.scss';import * as MiniGame from '../../miniGame';//only divconst s={ toast:'pauseToast', toastOrigin

2017-03-22 14:57:19 1890

原创 基于Canvas和React极简游戏(一)

游戏设计思路游戏引擎:游戏循环,游戏原型 我把这个 miniGame的实现看作是业务逻辑的实现。 因为我希望我的react组件可以复用,而不是嵌入太多业务逻辑的代码。 所以import 这个miniGame中的某几个函数给我用就行了。定义精灵行为精灵行为 重力gravity行为, 二次弹跳, 上抛的行为。 底部矩形:矩形的主颜色作为 精灵的属性,这个属性是一个数组,当精灵与这个数组包

2017-03-19 11:13:37 5402

原创 基于Canvas的JS游戏引擎(二)

接着上一节,我们来讲一下引擎后面的部分碰撞检测碰撞检测分事前检测和事后检测: priori collision detection / posteriori collision detection 提前探知是否会发生碰撞 或 事发之后才检测到碰撞事前碰撞可能会失效,因为计算小球在下一帧的位置来检测碰撞,容易出错。它是根据当前速率估算的,而帧速率突然改变,估算的结果就不准了。 事前的准确度不

2017-03-17 14:36:28 4089

原创 2017实习生今日头条前端面经

typeof判断有几个结果 typeof a结果: string number boolean undefined object function一定要记住typeof null 是object怎么判断数组if(Object.prototype.toString.call(arr)==='[object array]')或者 ES5 Array.isArray()bind call

2017-03-16 17:33:05 2268

原创 React框架解释及组件间通信

生命周期hooks lifecycle hooks组件生命周期: 三个 状态 Mounting Updating Unmouting 把GetInitialState 换成 constructor Mounting:当一个组件的实例被创建和插入的DOM的时候被调用 constructor() //componentWillMount() render() componentDi

2017-03-14 16:12:38 1059

原创 归并排序(Java&&JavaScript)

分析归并排序就是两步,第一步是递归左右两部分,第二部就是合并两个已排序的数组(表)。 两个数组已经是有序的了,那么算法可以通过一趟排序来完成。核心思想合并就是合并两个数组,很简单,我们只需要使用3个指针,一个是指向第一个有序数组,另一个是有序数组,还有一个指向新的数组。 不断比较两个数组中,取出较小的一个然后存到新数组中,如果其中一个数组已经全部被复制到新数组了, 那么就把剩下的直接复制到新数

2017-03-14 13:38:44 315

原创 基于Canvas的JS游戏引擎(一)

介绍这是一个非常精简的游戏引擎,它仅仅包含了一般游戏所必须拥有的功能。游戏引擎主要功能如下 1. 游戏循环 2. 绘制精灵 3. 基于时间运动 4. 碰撞检测 5. 帧速率更新 4. 暂停游戏 5. 事件处理 6. 图片加载动画循环 /游戏循环其实游戏循环就是依赖动画循环实现的。 window.requestAnimationFrame() 传统的是window

2017-03-14 01:41:05 5814

原创 Canvas适配手机端

Canvas适配困境最近做了个H5小游戏,它的主页的html代码如下:<<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">

2017-03-13 22:46:34 18566

原创 解决webpack打包文件过大的问题

最近做了一个H5小游戏,用React实现UI,基于canvas实现动画的逻辑。 用webpack -p 打包发现输出的index.bundle.js文件体积非常大。以下是我的webpack的配置文件:var webpack=require('webpack');var path=require('path'), node_modules=path.resolve(__dirname,'n

2017-03-13 19:34:52 10191 1

原创 Ajax XHR2详解

AJAX原生ajax的四个过程: 实例化,open,send,onreadystatechange,然后是req,readyState和status。 那么问题是通过哪个属性得到data? jquery里是success回调里面的形参。 responseText和responseXML,后者是XML解析了的。Ajax的定义Ajax是一种技术方案,不是一种新技术。 它依赖浏览器提供的XMLHt

2017-03-13 14:59:54 8067

原创 二叉树遍历非递归实现

二叉树的遍历关于二叉树遍历,先序,中序,后序其实都是很简单了。 二叉树一般定义:public class Node{ public int value; public Node left; public Node right; public Node(int val){ this.val=val; }}递归实现先序遍历public void

2017-03-13 02:06:28 271

原创 选择排序

核心思想选择排序 ,也是将数组分成两部分,前面部分是有序的,后面部分每趟排序,从i到N-1的部分中 选择出一个最小的元素,然后交换到前面部分的后面。 第一趟排序比较长度是N,因为从N个元素中找出最小的,第二次就是N-1了,….依次递减比较的长度。 所以经过了这几趟排序就可以把数组排序好。 我们选择排序其实就是选择无序中的最小,然后与有序序列的后一个元素交换!思考步骤1.首先要有一个比较基准也

2017-03-12 16:29:52 415

原创 插入排序

核心思想插入排序是一种通过移动整个数组来交换元素的算法 假设有N个元素,那么它由N-1趟排序组成。 它基于这样的事实: 它将数组分成两个部分,第0~ P-1 个元素是有序的,第P到N-1是无序的。 每一趟排序,我们选择第P个位置的元素,即右边部分取出一个数放到0-~P-1中的一个正确位置。 我们比较这个元素和第0~P-1的元素,在一个循环中一个一个比较,比它大的就后移,遇到比它小的就跳出循

2017-03-12 15:45:43 251

原创 JavaScript垃圾回收机制

垃圾回收机制JS具有垃圾回收机制, 执行环境会负责管理代码执行过程中使用的内存。 基本原理: 隔一段时间或者按照固定的时间间隔,找出那些不再继续使用的变量,然后释放其占用的内存。 分析函数局部变量 局部变量只在执行函数的过程中存在,这个过程中会为局部变量在栈内存上分配相应的空间,以便存储它们的值。 然后在函数中使用这些变量,直至函数执行结束。 结束后这些局部变量就没用了,因此可以释放它们的内

2017-03-11 20:16:44 336

原创 JavaScript变量对象、执行环境和作用域链

首先不管是变量对象、执行环境或作用域链都是内部对象你无法直接用js访问。 JS两种变量类型的访问和内存问题基本数据类型是按值访问的引用类型的值是保存在内存中的对象。JS不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。 操作对象的时候实质是操作对象的引用而不是实际的对象。 严谨地说: var a={v:2,c:3};var b=a //这种情况操作的是引用a.x=23; //这种

2017-03-09 14:42:03 541

原创 闭包Closure

理解闭包的最重要前提理解作用域链,如何创建作用域链和作用域链中有什么细节。闭包示例function createComparisonFunction(propertyName){ return function(object1,object2){ var value1=object1[propertyName]; var value2=object2[prop

2017-03-09 12:24:48 400

原创 重建二叉树

对于一颗二叉树来说,有了前序和中序或者中序和后序就可以确定这颗二叉树,我们就可以重建它了。 一般先考虑前序的序列,它的第一个数就是这个二叉树的根节点,然后我们遍历中序序列,找到这个根节点后;在它左边的序列就构成了根节点的左子树,右边的序列就构成了根节点的右子树。 下面的事情就好办了,我们只需要递归左边的序列和右边序列,注意我们还是需要回到前序序列来确定左边序列的根节点和右边序列的根节点。这样才能

2017-03-09 00:49:12 270

原创 判断一个链表是否为回文结构

题目:给定一个链表的头结点head,判断该链表是否为回文结构例如: 1->2->1 ,true 1->2->2->1, true 1->2->3, false使用栈来解决最直接的想法应该就是利用栈来解决这个问题了。 判断回文结构的最核心思想: 从左到右读的顺序和从右到左读的顺序是一样的,这实际上暗示了使用栈,因为如果压栈序列和出栈序列是一样的,那么这就肯定是一个回文结构了! //此处定义

2017-03-08 02:37:46 382

原创 CSS水平垂直居中

水平居中水平居中这个问题首先要搞清楚存在两个条件才能够称之为水平居中, 即父元素必须是块级盒子容器,父元素宽度必须已经被设定好以下讨论 参考这个结构<div class="wrap"> <div class="non-child"> non-child </div></div>Scene1 : 子元素是块级元素而且宽度没有设定这种情况下不存在水平居中的说法,因为子元素是块

2017-03-04 20:12:41 333

原创 CSS清除浮动原理(涉及BFC)和方法

为什么要清除浮动??首先理解浮动框:浮动的框可以左右移动,直至它的外边缘遇到包含框或者另一个浮动框的边缘。 浮动框不属于文档中的普通流,当一个元素浮动之后,不会影响到块级框的布局而只会影响内联框(通常是文本)的排列, 文档中的普通流就会表现得和浮动框不存在一样,当浮动框高度超出包含框的时候,也就会出现包含框不会自动伸高来闭合浮动元素(“高度塌陷”现象)。 顾名思义,就是漂浮于普通流之上,像浮云

2017-03-03 21:36:44 2986 1

原创 JS数组去重

一 利用 数组indexOf方法维护一个暂存数组,将数据存进去function unique(arr){ vartemp=[]; for(var i=0;i<arr.length;i++){ if(temp.indexOf(arr[i])===-1){ temp.push(arr[i]); } } return

2017-03-03 13:22:55 250

原创 异步解决方案Promise

回调地狱callback hell最大的问题不是因为缩进。它引起的问题比缩进要大得多。根本它真正的问题是剥夺了程序员使用return和throw等捕捉错误和返回值的能力。 程序的执行流程是基于一个函数在执行过程中调用另一个函数时候会产生函数调用栈,而回调函数不是运行在栈上的,因此不能使用return和throw。举例function A(){ setTimeout(req,5000);

2017-03-02 22:34:16 1221

原创 快速排序

快速排序核心思想核心:在于选主元pivot和partition过程 以及 二分的思想。一般的快速排序是选取第一个元素作为主元,然后通过一趟排序将要排序的数据进行分组,比主元小的分到左边,比主元大的分到右边。 然后再分别对左边和右边的部分进行递归。快速排序三个步骤选择基准:在待排序列中,按照某种方式挑出一个元素,作为pivot划分操作:将数组中比主元小的交换到左边,比主元大的交换到右边递归对两

2017-03-02 16:34:34 327

原创 JavaScript异步初探

异步编程的核心程序中现在运行的部分和将来运行的部分之间的关系。异步概念同步的Ajaxvar data=ajax(url);console.log(data)任何时候都不应该使用同步的方式,因为它会锁定浏览器的UI线程将来执行的块 任何时候只要把一段代码包装成一个函数,并指定它在响应某个事件时执行,你就创建了一个将来执行的块,这就是异步。事件循环JS引擎运行在宿主环境中,比如浏览器,比如OS(NO

2017-03-02 02:36:59 235

原创 堆排序

先说说堆堆分为大根堆和小根堆,都是完全二叉树。 大根堆:要求每个节点不大于其父节点 小根堆 : 要求每个节点不小于其父节点复习一下完全二叉树:除了最后一层外,其他各层都达到该层节点的最大数,最后一层如果不满,该层所有节点都全部靠左排一颗二叉树,深度为k,对这棵树编号,如果所有的编号都和满二叉树的编号对应,则这棵树是完全二叉树堆排序思想堆排序的话,最重要还是建立堆,然后调整堆,使得堆满足大根

2017-03-01 23:43:22 443

原创 正则表达式(二)

正则的高级规则元字符元字符是在正则表达式中有特殊含义的字符。 如英文字符. 方括号 [ 也是,标志着一个字符集合的开始。 元字符在正则中有特殊的含义,这些字符不表示本身。 前面用到的 \b \f \n 都是元字符 具体可以自己看 ,例如 空白元字符 (\b \f \n) 数字元字符 (\d \D) 贪婪与非贪婪贪婪模式修饰匹配次数的时候,刚才介绍到了如{m,n} ? * +这

2017-03-01 21:39:57 391

原创 正则表达式

正则表达式是前端中比较重要的部分。正则规则一. 普通字符字母、数字、汉字、下划线以及没有特殊定义的标点符号都是”普通字符”。 表达式中的普通字符,匹配时就正常匹配。二.简单转义一般不便于书写的,我们用/来表示 /r /n 回车和换行符 /t 制表符 \/ \ 符号表示转义。 表示该符号本身。因为正则中的符号是有特殊意义的。 表达式 可匹配 \^ 匹配 ^ 符号本身

2017-03-01 21:30:12 719

原创 HTTPS/数字证书/数字签名

HTTPS所有的HTTP请求和响应数据都需要加密。 一个传输级的安全密码层:SSL 后继者:TLS。 我们不严格的用SSL表示SSL和TLS HTTPS是位于安全层之上的HTTP,这个安全层位于TCP之上。为什么用HTTPS (必要性) 服务器认证 :客户端知道它是在与真正的而不是伪造的服务器通话 客户端认证:服务器知道他们是在与真正的而不是伪造的客户端通话 完整性: 客户端和服务器的数据

2017-03-01 17:40:50 7053

原创 基数排序

基本思想将待排数据中的每组关键字依次进行桶分配。具体示例:278、109、063、930、589、184、505、269、008、083我们将每个数值的个位,十位,百位分成三个关键字: 278 -> k1(个位)=8,k2(十位)=7,k3=(百位)=2。然后从最低位个位开始(LSD),对所有数据的k1关键字进行桶分配(因为,每个数字都是 0-9的,因此桶大小为10),再依

2017-02-28 23:56:44 388

原创 模板引擎

模板引擎发展史模板引擎实现方式很多,最简单是“置换型”模板引擎,这类模板引擎只是将指定模板内容(字符串)中的特定标记(子字符串)替换一下便生成了最终需要的业务数据。 还有解释型 模板引擎 ,编译型模板引擎等。Side区分客户端模板引擎 主要结合JS实现HTML,例如handlebarjs mustache,实现方式为拼接字符串。 另一种React,使用Virtual DOM 服务端模板引擎

2017-02-28 20:36:46 1287

原创 WEB安全 CSRF/XSS

XSS定义跨站脚本攻击,网站应用程序的安全漏洞攻击,代码注入的一种。把恶意代码注入到网页上,使得用户在观看网页的时候受到影响。 XSS 跨站脚本攻击 Cross site Scipting原因 主要原因是多数用户的输入没有被转义,而直接执行。 XSS可以获取到用户cookie或隐私客户端信息。比如通过location.hash假设某个网站有一段脚本:$('#box').html(location

2017-02-28 17:17:34 964

原创 前端模块化

简介JS模块化主要这几种AMD CMD CommonJS ES6 Module跟Commjs非常像。为什么需要模块化?最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了。后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载。下面的网页代码,相信很多人都见过。<script src="1.js"></script><script src="2.js">

2017-02-28 15:45:28 425

原创 桶排序

桶排序Bucket Sort桶排序是计数排序的一个变种,同样也是非常快的时间复杂度,计数排序最快是O(N),它不是比较类型的算法。时间复杂度为O(N+M)。而桶排序则看下面:(最好的情况能到O(N))。思路/做法把计数排序中相邻的m个“小桶”放到一个”大桶”中,在分完桶后,对每个桶进行排序(一般用快排),然后合并最后的结果基本思想一组长度为N的待排关键字序列K[1…n]。 首先将这个序列划分为M个子

2017-02-28 14:41:17 332

原创 计数排序

基本介绍当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。 好处 由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量内存。计数排序是用来排序0到100之间的数字的最好的算法,但是它不适合按字母顺序排序人名。但是,计

2017-02-28 13:14:42 205

原创 Express实现Session+Cookie认证

ExpressExpress 并非真正的 MVC 它是工作流的思想:水->净化->调配->装瓶->质检->饮用可乐var express=require('express');var app=express();app.get('/',function(req,res){ res.send('Hello World');});var server=app.listen(3000,

2017-02-28 00:11:27 529

ExpressInAction源码

ExpressInAction的源码,如果看了这本书可以下载整个源码看看。 能看到Express的API的基本使用,这是在官网没有说明的,官网没有demo。 主要是一些api其实是有坑的,比如res.json() res.send() 这些是不能同时用的。不然会有重复set header的报错

2016-11-16

zxing_cpp_linux_二维码识别

在github上的zxing C++库,二维码解码,用CMAKE进行编译 可用于嵌入式平台。

2016-02-23

BLE4.0_profile_说明文档

TI官方BLE_profile的说明文档,可用于理解官方提供的每个demo application的意义

2014-07-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除