使用Electron打造跨平台桌面应用

前言 早期桌面应用的开发主要借助原生 C/C++ API 进行,由于需要反复经历编译过程,且无法分离界面 UI 与业务代码,开发调试极为不便。后期出现的 QT 和 WPF 在一定程度上解决了界面代码分离和跨平台的问题,却依然无法避免较长时间的编译过程。近几年伴随互联网行业的迅猛发展,尤其是 NodeJS、Chromium 这类基于 W3C 标准开源应用的不断涌现,原生代码与 Web 浏览器开发逐步走向融合,Electron 正是在这种背景下诞生的。 electron Electron 是由 Github 开发,通过将Chromium和NodeJS整合为一个运行时环境,实现使用 HTML、CS

什么是electron - javascript,html和CSS 构建跨平台桌面应用

开源地址 https://github.com/electron/electron 关于Electron Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。 核心团队和贡献者 Electron由Github上的一支团队和一群活跃的贡献者维护。 有些贡献者是独立开发者,有些则在用Electron构建应用的大型公司里工作。 版本 Electron的版本发布很频繁。 每当Chro

vscode天赋异禀-2018年开发者调查中最受欢迎-比较sublime和webstorm

Visual Studio Code(简称VS Code)是一个由微软开发,同时支持Windows 、 Linux和macOS等操作系统且开放源代码的代码编辑器[4],它支持测试,并内置了Git 版本控制功能,同时也具有开发环境功能,例如代码补全(类似于 IntelliSense)、代码片段和代码重构等。该编辑器支持用户个性化配置,例如改变主题颜色、键盘快捷方式等各种属性和参数,同时还在编辑器中内置了扩展程序管理的功能. -- 维基百科 2015 年 4 月 29 日的 Build 大会上,微软发布了 Visual Studio Code 第一个预览版本。短短四年时间里,VS Co

react入门示例,最简单的页面使用 react

如何引用react 单页面直接使用react.js文件很简单,只需要像引入普通js文件一样,通过script标签引入即可 <script src="https://unpkg.com/react@16/umd/react.development.js"></script> <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script> <script src="https://unpkg.com/babel-standalone@6.1

go 语言中的 Timers Tickers 的使用

go语言中的 Timers 和 Tickers go语言中对某段业务逻辑在未来某一时刻执行或以一定时间间隔周期性执行的需求提供了支持; timer 可以在未来某一时间发生; ticker 可以指定时间间隔周期发生. Timers的使用 Timer表示在未来某一刻执行仅一次的事件 一旦时间到达预设时期,触发程序执行并且 timer 会调用 Stop() 函数停止再次运行. /* * @Author: your name * @Date: 2021-01-14 16:29:13 * @LastEditTime: 2021-01-14 17:03:54 * @LastEditors: P

leveldb&levelup中文文档简介

levelup LevelDB是一个Google构建的简单的k-v数据库. 在Google Chrome和其他产品中被使用. LevelDB支持抽象字节数组作为键和值,单一get, put 和delete操作,批处理的put 和delete操作,双向迭代和使用快速Snappy 算法进行简单压缩. LevelDB存储按照键的字母顺序进行排序的条目. 这种构造levelup的流接口, 奠定了levelup作为可读流的迭代器一个十分有效的查询机制. leveldown是提供了存C++链接到LevelDB的存储器. 有很多交替存储是可用的, 如在浏览器中的level.js,或者是内存存储的mem

electron 使用tcp套接字

前言 electron由于集成Node.js和Chromium,所以它具有桌面GUI应用程序的开发的能力. 今天我们在electron环境下实现tcp连接示例. 使用node.js获得tcp能力 浏览器在js层是不能使用原生的tcp套接字的, 但是electron使用了node作为中间层, 所以我们可以依托node从而获得tcp能力. net模块 Node.js Net 模块提供了一些用于底层的网络通信的小工具,包含了创建服务器/客户端的方法,我们可以通过以下方式引入该模块. var net = require("net") nodejs中的socket, 即可作为server, 也可以作

react , vue 的实现原理比较

react vue 相同点 以虚拟dom和diff算法为核心,通过操作数据来操作dom。 虚拟dom将2次数据改变的dom树结构生成2个js对象,以diff算法比较2个对象的异同点,若相同,则不更新dom; 若遍历到某一个节点时,发现异同点,则停止diff算法,更新该节点的所有子节点的dom结构. 1,都是用了Virtual DOM。 2,都提供了响应式和组件化的视图组件。 3,都将注意力集中保持在核心库,而将其他功能如路由和全局状态管理交给相关库。 react vue 不同点 vue通过getter、setter监听数据数据变化,react通过比较引用的方式监听数据变化,需要使用Pure

使用 IDEA 创建java项目

什么是 IDEA IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境; IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的; IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主; 它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Java,Kotlin等少数语言. 如何安装 IDEA 破解版 本文有

强大的java 开发IDE idea 2018 mac版 破解版本 百度网盘下载

下载地址 百度网盘链接: https://pan.baidu.com/s/1TvMYmO0BvKE-tr-VMRkyTg 密码: gpot 打开镜像文件 打开dmg镜像文件,将“IntelliJ IDEA”拖入到“Applications”应用文件夹中进行安装; 安装完成不要运行 回到安装镜像文件的界面; 打开“Crack”文件夹,将文件夹目录下的“JetbrainsCrack.jar”复制到软件的安装目录下, mac默认目录为 【Application/IntelliJ IDEA.app/Contents/bin】 编辑idea.vmoptions文件 在【Application/In

nano 编辑器使用说明

一、复制、剪切和粘贴文本 1、行复制、剪切和粘贴 Alt+6:复制光标所在行。 Ctrl+K:剪切光标所在行。 Ctrl+U:粘贴。 2、自由复制、剪切和粘贴 自由复制: Ctrl+6:设置复制文本的起始位置。 Alt+6:设置复制文本的结束位置。 首先按Ctrl+6组合键,然后使用方向键选择复制区域,选好区域后按Alt+6实现对该区域的复制。 自由剪切: Alt+A:设置剪切文本的起始位置。 Ctrl+K:设置剪切文本的结束位置。 首先按Alt+A组合键,然后使用方向键选择剪切区域,选好后按Ctrl+K实现对该区域的剪切。 Ctrl+U:粘贴。 二、查找和替换 1、查找文本 首先按下Ctrl

vscode markdownlint插件让你的markdown更加规范 -- Rules规则提示信息

前言 我们在书写代码的时候, 经常会用到eslint来约束代码规范, 这样团队开发或者后期维护都省了很多烦恼. markdown书写时一样有这样的问题, 那么我们如何来约束markdown的书写规范呢. 今天介绍一款 vscode 的插件 markdownlint https://github.com/DavidAnson/markdownlint vscode 直接搜索安装插件 markdownlint 当你在vscode中书写markdown文本时,不符合规范的内容就会有黄色波浪线来提示及时修正. 语法规范提示内容 MD001 - Heading levels should only i

mac 安装jdk后 IDEA 配置jdk

下载安装jdk 官网去下载jdk: https://www.oracle.com/index.html 进入官网,按照如下步骤进行下载 本文以jdk11为例 选择下载 mac 版本 双击安装 配置环境变量 查看是否安装成功: java --version 显示如下,表示安装成功. $ java --version java 11.0.3 2019-04-16 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.3+12-LTS) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.3

如何提升技术团队效率并宣泄负面情绪

工程师的效率差异 对工程师来说经常会有明显的效率差异,有时一天能搞定好几个模块,顺带加了好几个新的技能点,而有时一个简单的功能投入了两三天还和之前没什么区别。 虽然任务并不复杂,但忍不住会聊微信,刷微博,上QQ,即使硬着头皮去做,往往效率也不如意,甚至引入一些新的低级 Bug。 这个差异与技能水平和工作态度无关,在绝大多数工程师身上都会看到. 什么因素影响效率 执行力崩溃 当任务单一时大家的效率往往很高,集中精力一天的时间把登录模块写出来,这个对绝大多数同学没有太大的心理负担。 但是现实情况并不尽如人意,尤其创业公司前期; 需求不断变化,数据结构来回改动,人员紧张,正在开发一个紧急模块,线上

docker 实践:如何构建自己的镜像

创建自己的项目 我们用简单的 node.js web项目输出 helloworld 为例. 项目目录: npm start app.js 启动项目; app.js 代码 const Koa = require('koa'); const app = new Koa(); const main = ctx => { ctx.response.body = 'Hello World'; }; app.use(main); app.listen(3000); 编写dockerfile FROM node:8.4 COPY . /app WORKDIR /app RUN ["n

Devops实践:Docker 概述及基本使用

什么是Docker 如今的云计算就好比大货轮,docker就是集装箱,一个个封闭式的箱体可以堆放再货轮上,我们不关心箱体里装的是什么货物; 我们这实际开发中,不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,很麻烦,还会造成一些冲突. 比如IIS和Apache访问端口冲突,这个时候你就要隔离.net开发的网站和php开发的网站. 常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高. docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小

java 的内置类型

#内置数据类型 java语言提供了八种基本类型; 六种数字类型(四个整数型,两个浮点型); 一种字符类型,还有一种布尔型. byte: byte 数据类型是8位、有符号的,以二进制补码表示的整数; 最小值是 -128(-2^7); 最大值是 127(2^7-1); 默认值是 0; byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一; 例子:byte a = 100,byte b = -50。 short: short 数据类型是 16 位、有符号的以二进制补码表示的整数 最小值是 -32768(-2^15); 最大值是 32767(

java 中的 ArrayList 介绍

什么是 ArrayList ArrayList 类位于 java.util 包中; 是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素; 它继承了 AbstractList ,并实现了 List 接口. 语法格式 import java.util.ArrayList; // 引入 ArrayList 类 ArrayList<E> objectName =new ArrayList<>();  // 初始化 E为泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型 objectName:

brew install时一直卡在Updating怎么办

前言 当你通过brew安装软件的时候, 发现一只卡在Updating Updating Homebrew... 这个时候有俩种办法来应对 找国内的源Updating Homebrew brew install 时不要 update 切换国内的源 //替换brew源 cd "$(brew --repo)" git remote set-url origin https://mirrors.ustc.edu.cn/brew.git //替换homebrew-core.git cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core" gi

java 中 final 关键字的使用

final 保留字概述 final关键字在java中非常重要,它可以应用于类、方法以及变量; final经常和static一起使用来声明常量,你也会看到final是如何改善应用性能的。 final 的含义 final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量; 一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误. final 定义的变量 凡是对成员变量或者本地变量(在方法中的或者代码块中的变量称为本地变量)声明为final的都叫作final变量; final变量经常和static关键字一起使用

陌生域名解析到服务器ip - 这种异常流量对你的站点不一定是好事

前言 当你在百度统计/google统计平台发偶然发现一些关键词来源的站点和自己站点一点不相关时. 这时你要注意了,可能你的内容正在养着别人的域名. 如果你点击这些异常站点,打开的原来是你自己的站. 偶尔你也会收到云服务器平台发来的通知邮件: 大概是说解析到你服务器上的 xxx.com 域名, 违反了国家有关法规,请您尽快处理! 处理方式: 1.停止域名解析 ,完成域名备案后可重新恢复解析; 停止网站服务, 完成备案后可重新开启业务; 为什么有人要怎么做 陌生人把自己的域名解析到你的 IP ,就相当于原样复制了一个内容丰富的站点,这个域名被搜索引擎收录后,就能够短时间内得到和你的站点相同

redis 缓存造成穿透怎么办

什么是redis 穿透 前面我们有一篇文章介绍了 redis 下的雪崩已经一些解决办法 redis缓存造成雪崩怎么办,点击查看 今天我们再来看下redis下的穿透是什么? 顾名思义:穿透就是把一个容器或者保护罩击穿. 当一个请求过来,我们会根据参数去匹配redis缓存数据; 如果没有找到缓存结果,我们才会接着去请求DB. 那么问题来了: 当成批的并发请求过来,同时去请求一个 redis 缓存中不存在的数据,会发生什么要的效果? 是不是想到了雪崩? 当缓存不能命中,说明我们要去DB上查找数据,而这个并发直接去打DB,真的有点雪崩的意思. 会出现什么要的效果,我们基本想到了. 为什么会有批量并

java 中 static 关键字的使用方法

static 概述 在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,只要程序在运行,那么这块内存就会一直存在; static 定义的类成员 可以直接访问 在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是用static修饰的成员可以通过类名加“.”进行直接访问. static 独立于类的其他成员 任何实例共享 static修饰的成员变量和成员方法独立于该类的任何对象; 它不依赖类

go 语言中的channel

channel Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)。 它的操作符是箭头 <- ch <- v // 发送值v到Channel ch中 v := <-ch // 从Channel ch中接收数据,并将数据赋值给v (箭头的指向就是数据的流向) 就像 map 和 slice 数据类型一样, channel必须先创建再使用: ch := make(chan int) 类型 Channel类型的定义格式如下: ChannelType = ( "chan" | "ch

redis 如何造成缓存雪崩

什么是redis雪崩 redis 缓存在同一时间失效,导致请求直接从物理数据库中读取数据,而针对一些热门并发数据, 如果在同一时间缓存全部失效,导致并发过来,物理数据库承担不住大并发请求而导致系统崩溃,就是redis雪崩. 什么情景下会出现这种情况 比如微博热搜,app首页数据已经电商秒杀活动商品等等..... 而这些数据一般情况下是定时任务来创建redis缓存; 比如定时任务执行一次,把热门数据缓存起来,并且设置统一生效时间2小时; 而2小时后,正好面临一场秒杀活动; 我们试想一下, 2小时后的缓存全部失效,这时突然一个高并发请求进来,本来redis能抵抗80%并发请求,结果因为全部失效导

mac 版 IDEA 常用快捷键

Mac 键盘符号和修饰键 ⌘ ——> Command ⇧ ——> Shift ⌥ ——> Option ⌃ ——> Control ↩︎ ——> Return/Enter ⌫ ——> Delete ⌦ ——> 向前删除键(Fn + Delete) ↑ ——> 上箭头 ↓ ——> 下箭头 ← ——> 左箭头 → ——> 右箭头 ⇞ ——> Page Up(Fn + ↑) ⇟ ——> Page Down(Fn + ↓) ⇥ ——> 右制表符(Tab键) ⇤ ——> 左制表符(Shift + Tab) ⎋ —

react 到底符合mvvm模式吗

什么是mvvm模式 m => model 模型 ,也就是数据 v => view 视图, 也就是页面dom vm => view and model ,这可以理解成我们常说的 双向绑定, 视图可以影响数据(v -> m) ,数据也可以影响视图 (m -> v) 所以我们可以很明显的看到mvvm的特性 数据双向绑定 react 是什么 react 本身只是一个函数, ui = render(data) 一个 dom 拼接工具,把数据拼成新 dom 替换旧 dom . 这样看来 react 只有视图,连状态都不存在,更不会有双向数据绑定. react 结合状态管理

go 标准库 container list

list 个双链表(doubly linked list) 如何遍历链表, 其中 l 为 *List : for e := l.Front(); e != nil; e = e.Next() { //链表的每一个元素中通过Next()指针指向下一个元素,直至遍历完成 } 代码: package main import ( "fmt" "container/list" ) func main() { l := list.New() l.PushFront(1) l. PushBack(2) l. PushBack(3

java.lang.String 类定义的方法

char charAt(int index) 返回给定位置的代码单元。除非对底层的代码单元感兴趣, 否则不需要调用这个 方法。 int codePointAt( int Index) 5.0 返回从给定位置开始的码点。 int offsetByCodePoints(int startlndex, int cpCount) 5.0 返回从 startlndex 代码点开始, 位移 cpCount 后的码点索引。 int compareTo(String other) 按照字典顺序, 如果字符串位于 other 之前, 返回一个负数; 如果字符串位于 other 之 后, 返回一个正数; 如果两

浅谈 java 中的集合类 Collection

java中的集合类Collection Collection是最基本的集合接口; 一个Collection代表一组Object,即Collection的元素; 它是一个接口,是高度抽象出来的集合,它包含了集合的基本操作: 添加、删除、清空、遍历(读取)、是否为空、获取大小等,如下语法. 语法 public interface Collection<E> extends Iterable<E> {} iterator接口 不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中

回到顶部