简介

Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。

一个Electron包含一个主进程和一个或多个渲染进程。主进程管理Windows窗口、应用升级等,渲染进程管理页面展示。

初始化

  • 系统:Windows7 x64
  • 因为使用Vue开发业务,所以使用Electron-Vue模板,并且使用Electron-Builder打包,使用Electron-Updater更新应用,下面的讲述会针对于此。

- 阅读剩余部分 -

electron_docker

Docker简介

docker官网地址

Docker使用go语言开发,是实现轻量级的操作系统虚拟化解决方案。跨平台,可以帮助开发者在不同的设备之间快速创建、部署、发布应用。主要包含以下三个概念:

  • 镜像:可以理解为library(三方库),其实就是DockerFile文件
  • 容器:镜像的运行实例,每个容器都是相互隔离的,可以把容器看做是一个简易版的 Linux 环境
  • 仓库:存储镜像的仓库,如Docker Hub

使用

初始化

在Windows7 x64上初始化

下载

安装Docker

默认请全部勾选。

  • 如果已经安装过git可不安装,不过会导致Docker Quickstart Terminal打不开,需要右击编辑属性,修改快捷方式中的git地址。
  • 如果出现Failed to instantiate CLSID_VirtualBox w/ IVirtualBox, CLSID_VirtualBox w/ IUnknown works.错误,需要修改注册表。需要将HKEY_CLASSES_ROOT\CLSID\{00020420-0000-0000-C000-000000000046}\InprocServer32HKEY_CLASSES_ROOT\CLSID\{00020424-0000-0000-C000-000000000046}\InprocServer32的默认值修改为C:\Windows\system32\oleaut32.dll

安装完成后,请打开Docker Quickstart Terminal输入docker,查看docker是否安装成功。

- 阅读剩余部分 -

背景

java或android源码中经常会使用移位运算来代替乘除运算,因为移位运算的性能比乘除运算的高(PS:对于计算机而言,移位运算只是移了个位置),所以了解移位运算的计算过程对于我们阅读源码会有一定的帮助。

原码、反码、补码

原码是人脑最容易理解和计算的表示方式

第一位表示符号, 其余位表示值

-1的原码是10000000 00000000 00000000 00000001

反码是人脑无法直观看出其数值的. 通常需要转换成原码在计算其数值

正数的反码是其本身

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反

-1的反码是11111111 11111111 11111111 11111110

补码是人脑无法直观看出其数值的. 通常需要转换成原码在计算其数值

正数的补码就是其本身

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

-1的补码是11111111 11111111 11111111 11111111

- 阅读剩余部分 -

来源:https://github.com/Snailclimb/JavaGuide

什么是字节码 采用字节码的最大好处是什么

什么是字节码

编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在 Java 中,这种供虚拟机理解的代码叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。

采用字节码的最大好处是什么

Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。

- 阅读剩余部分 -

常用工具方法

实现数组去重

参考地址:https://github.com/mqyqingfeng/Blog/issues/27

非通用方法,需要知道object中的主键,可避免object中key顺序变化而导致的异常情况,下面以id为例

unique (array) {
  // res用来存储结果
  let res = []
  for (let i = 0, arrayLen = array.length; i < arrayLen; i++) {
    let j = 0
    let resLen = res.length
    for (; j < resLen; j++) {
      if (array[i].id === res[j].id) {
        break
      }
    }
    if (j === resLen) {
      res.push(array[i])
    }
  }
  return res
}
unique (array) {
  let hash = {}
  array.forEach((v, i) => hash[[JSON.stringify(v)]] = i)
  let keys = Object.keys(hash)
  let list = keys.sort((a, b) => hash[a] > hash[b]).map(item => JSON.parse(item))
  return list
}

- 阅读剩余部分 -