0%

浅拷贝与深拷贝

  • 浅拷贝

    1
    2
    3
    4
    5
    6
    7
    8
    function extendCopy(p, c) {
    var c = c || {};
    for (var i in p) {
    c[i] = p[i];
    }
    c.uber = p;
    return c;
    }
    1
    2
    3
    // ES2015 的语法,性能良好
    var a = {};
    var b = Object.assign({}, a);
  • 深拷贝

    • 递归方法

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      function deepCopy(p, c) {
      var c = c || {};
      for (var i in p) {
      if (typeof p[i] == 'object') {
      c[i] = p[i].constructor === Array ? [] : {};
      deepCopy(p[i], c[i]);
      } else {
      c[i] = p[i];
      }
      }
      return c;
      }
    • JSON 对象的提供的方法,性能不太理想

      1
      2
      var a = {};
      var b = JSON.parse(JSON.stringify(a));

      能够处理JSON格式的所有数据类型,但是对于正则表达式类型、函数类型等无法进行深拷贝,而且会直接丢失相应的值,还有就是它会抛弃对象的constructor。也就是深拷贝之后,不管这个对象原来的构造函数是什么,在深拷贝之后都会变成Object。

什么是跨域

拥有相同的协议、端口和主机,那么就属于同一个源(origin)。反之,不符合条件的都是跨域。

GET 和 POST 的区别

  • GET 和 POST 长度的限制问题
    GET 是通过 URL 提交数据,因此 GET 可提交的数据量就跟 URL 所能达到的最大长度有直接关系。实际上 HTTP 协议对 URL 长度是没有限制的;限制 URL 长度大多数是浏览器或者服务器的配置参数;同样的,HTTP 协议没有对 POST 进行任何限制,一般是受服务器配置限制或者内存大小。

  • GET 和 POST 的安全性
    GET 是通过 URL 方式请求,可以直接看到,明文传输。POST 是通过请求 header 请求,可以开发者工具或者抓包可以看到,同样也是明文的。GET 请求会保存在浏览器历史纪录中,还可能会保存在 Web 的日志中。

  • 对服务器状态的影响
    根据 http 的设计,GET 应该对服务器状态没有修改,而 POST 应该对服务器状态做修改。

  • 幂等
    幂等是指同一个请求方法执行多次和仅执行一次的效果完全相同。按照 RFC 规范,PUT,DELETE 和安全方法都是幂等的,POST 语义不是幂等的。

  • 总结

    改变服务器状态 不改变服务器状态
    幂等 PUT GET
    不幂等 POST
阅读全文 »

Markdown是什么

Markdown是一种轻量级标记语言,它以纯文本形式(易读、易写、易更改)编写文档,并最终以 HTML 格式发布。
Markdown也可以理解为将以 MARKDOWN 语法编写的语言转换成 HTML 内容的工具。

谁创造了它

它由Aaron SwartzJohn Gruber共同设计,Aaron Swartz就是那位于去年(_2013 年 1 月 11 日_)自杀,有着开挂一般人生经历的程序员。维基百科对他的介绍是:软件工程师、作家、政治组织者、互联网活动家、维基百科人

他有着足以让你跪拜的人生经历:

  • 14 岁参与 RSS 1.0 规格标准的制订。
  • 2004年入读斯坦福,之后退学。
  • 2005年创建Infogami,之后与Reddit合并成为其合伙人。
  • 2010年创立求进会(Demand Progress),积极参与禁止网络盗版法案(SOPA)活动,最终该提案被撤回。
  • 2011年 7 月 19 日,因被控从 MIT 和 JSTOR 下载 480 万篇学术论文并以免费形式上传于网络被捕。
  • 2013年 1 月自杀身亡。
阅读全文 »

MySQL的连接

正常使用中直接通过 TCP/IP 协议连接 MySQL Server,公司的连接好像是用 ssh 连接服务器,而这台服务器有权限去连接线上的 MySQL Server。所以在使用 workbench 的时候新建连接时采用了 standard TCP/IP over SSH。连接细节技术总监大概交代过后,自己试了下就 success connection 了。应该没什么难的,网上也应该会有很多文章,文档。

连接遇到的一些问题

  • navicat SSH 连接报错expected key exchange group packet from server

    解决方法,在服务器的ssh配置文件里添加下面的代码

    # Add this to /etc/ssh/sshd_config
    KexAlgorithmsncurve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521diffie-hellman-group14-sha1
    # systemctl restart sshd
    参考链接

  • navicat 连接报错2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(../Frameworks/caching_sha2_password.so, 2): image not found

原因,在电脑上新装的mysql是8.0.x版本的,默认root用户的密码加密使用了plugin caching_sha2_password,而navicat不支持。把插件设置改回默认的 mysql_native_password

1
2
3
4
brew list mysql #查询mysql的配置文件my.cnf的路径
vi /....../my.cnf #my.cnf的绝对路径
#新一行添加 default_authentication_plugin=mysql_native_password
brew services restart mysql
阅读全文 »

vue-cli 集成 flexible

链接:基于 vue-cli 配置移动端自适应 | Hzzly

vue-cli 构建项目在 index.html 中使用静态文件

在 src 同一个目录下建立 static 文件夹(vue-cli 自身就有),所有的静态文件都必须在这个文件夹下,才能在 html 文件中调用到。因为 cli 启用了静态文件功能,在dev-server.js中可以看到这段代码

1
2
3
4
5
6
// serve pure static assets
var staticPath = path.posix.join(
config.dev.assetsPublicPath,
config.dev.assetsSubDirectory,
)
app.use(staticPath, express.static('./static'))

config/index.js中找到配置代码如下:

阅读全文 »

Symbol

MDN 关于 Symbol 的介绍

The Symbol() function returns a value of type symbol, has static properties that expose several members of built-in objects, has static methods that expose the global symbol registry, and resembles a built-in object class but is incomplete as a constructor because it does not support the syntax “new Symbol()”.
Every symbol value returned from Symbol() is unique. A symbol value may be used as an identifier for object properties; this is the data type’s only purpose. Some further explanation about purpose and usage can be found in the glossary entry for Symbol.
The data type symbol is a primitive data type.
Symbol

语法

Symbol([description])

  • description 可选的字符串
阅读全文 »

参数标记

  • -v 或者 –version #显示全局安装和本地项目安装的 gulp 版本号
  • –require module_path #在执行之前 require 一个或多个模块
  • –gulpfile gulpfile_path #指定一个 gulpfile 的路径,这也会将 CWD 设置到这个 gulpfile 所在目录
  • –cwd dir_path #定义 gulpfile 查找的位置,所有的相应的依赖(require)会从这里开始计算相对路径
  • –color 强制 gulp 和 gulp 插件显示颜色,即便没有颜色支持
  • –no-color 强制不显示颜色,即便检测到有颜色支持
  • –silent 禁止所有的 gulp 日志
  • –tasks-simple 会以纯文本的方式显示所载入的 gulpfile 中的 task 列表
  • -T 或 –tasks 会显示所指定 gulpfile 的 task 依赖树

参考文章:唐霜的 gulp 中文文档

API

  • gulp.src 获得所有符合条件的文件信息
    gulp.src(globs[, options])
  • gulp.dest 将信息输出到某个文件
    gulp.dest(path[, options])
  • gulp.task 注册一个 gulp 任务
    gulp.task(name[, deps], fn)
  • gulp.watch 监听文件变化
1
2
gulp.watch(glob [, opts], tasks)
gulp.watch(glob [, opts, cb])
阅读全文 »

app.json

这个作为配置文件入口,记录了页面组成,配置小程序的窗口背景色,配置导航条样式,配置默认标题。

属性 类型 必填 描述
pages Array 设置页面路径
window Object 设置默认页面的窗口表现
tabBar Object 设置底部tab的表现
networkTimeout Obiect 设置网络超时时间
debug Boolean 设置是否开启debug模式

window设置项:

属性 类型 默认值 描述
navigationBarBackgroundColor HexColor #000000 导航栏背景颜色
navigationBarTextStyle String white 导航栏标题颜色,仅支持white/black
navigationBarTitleText String 导航栏标题文字内容

app.js

阅读全文 »

基本数据类型

布尔值

布尔值是最基础的数据类型,在 typescript 中,使用 boolean 定义布尔值类型:
let isDone: boolean = false;

数值

使用 number 定义数值类型:

1
2
3
4
5
6
7
8
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
// ES6 中的二进制表示法
let binaryLiteral: number = 0b1010;
// ES6 中的八进制表示法
let octalLiteral: number = 0o744;
let notANumber: number = NaN;
let infinityNumber: number = Infinity;
阅读全文 »