peek

【软工】[技术博客] 用Monaco Editor打造接近vscode体验的浏览器IDE

梦想的初衷 提交于 2020-08-12 05:54:14
[技术博客] 用Monaco Editor打造接近vscode体验的浏览器IDE 官方文档与重要参考资料 官方demo 官方API调用样例 Playground 官方API Doc ,但其搜索框不支持模糊匹配 官方GitHub Issues ,可搜索相关问题 CSDN优秀博客 带主题颜色选择的demo 依赖与配置 在浏览器中搭建Monaco Editor,推荐使用 ESModule版本+WebPack+npm插件 的形式,比较简单。链接中即为官方给出的部署样例。 需要注意的是,经过笔者踩坑,推荐的node.js包版本为: "dependencies": { "monaco-editor": "=0.19.3", "monaco-editor-webpack-plugin": "=1.9.0", "webpack": "^3.6.0", "webpack-dev-server": "^2.9.1", } 其中, monaco-editor <= 0.19.1 时无换行自动缩进, monaco-editor = 0.20.0 时编辑器有概率在网页布局中只占高度5px。因此推荐使用版本0.19.2或0.19.3。对应的, monaco-editor-webpack-plugin 使用版本1.8.2(对应editor的0.19.2)或1.9.0(对应editor的0.19.3+)。

万字图文 | 学会Java中的线程池,这一篇也许就够了!

霸气de小男生 提交于 2020-08-12 00:47:38
作者:一枝花算不算浪漫 来源:https://mp.weixin.qq.com/s/b9zF6jcZQn6wdjzo8C-TmA 线程池原理思维导图.png 前言 Java中的线程池已经不是什么神秘的技术了,相信在看的读者在项目中也都有使用过。关于线程池的文章也是数不胜数,我们站在巨人的肩膀上来再次梳理一下。 本文还是保持原有的风格,图文解析,尽量做到多画图!全文共20000+字,建议收藏后细细品读,阅读期间搭配源码食用效果更佳! 读完此文你将学到: ThreadPoolExecutor 中常用参数有哪些? ThreadPoolExecutor 中线程池状态和线程数量如何存储的? ThreadPoolExecutor 有哪些状态,状态之间流转是什么样子的? ThreadPoolExecutor 任务处理策略? ThreadPoolExecutor 常用的拒绝策略有哪些? Executors 工具类提供的线程池有哪些?有哪些缺陷? ThreadPoolExecutor 核心线程池中线程预热功能? ThreadPoolExecutor 中创建的线程如何被复用的? ThreadPoolExecutor 中关闭线程池的方法 shutdown 与 shutdownNow 的区别? ThreadPoolExecutor 中存在的一些扩展点? ThreadPoolExecutor

Stack: 栈

久未见 提交于 2020-08-11 18:31:49
栈是Vector的一个子类,它实现了一个标准的后进先出的栈。 堆栈只定义了默认构造函数,用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。 boolean empty() 测试堆栈是否为空。 Object peek( ) 查看堆栈顶部的对象,但不从堆栈中移除它。 Object pop( ) 移除堆栈顶部的对象,并作为此函数的值返回该对象。 Object push(Object element) 把项压入堆栈顶部。 int search(Object element) 返回对象在堆栈中的位置,以 1 为基数。 (1)Vector 继承了AbstractList,实现了List接口。 (2)Vector实现了RandmoAccess接口,即提供了随机访问功能。 (3)Vector 实现了Cloneable接口,即实现克隆功能。 (4)Vector 实现Serializable接口,表示支持序列化。 Vector实现的这些接口,表示会有这样的能力。但是还有一点,就是Vector是线程安全的。下面我们从源码的角度来分析一下Vector是如何实现这些接口和保持线程安全的特性的。 来源: oschina 链接: https://my.oschina.net/u/3971821/blog/4304703

java8 新特性Stream流的应用

泪湿孤枕 提交于 2020-08-11 10:17:53
作为一个合格的程序员,如何让代码更简洁明了,提升编码速度尼。 今天跟着我一起来学习下java 8 stream 流的应用吧。 废话不多说,直入正题。 考虑以下业务场景,有四个人员信息,我们需要根据性别统计人员的姓名。 package com; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Test { public static void main(String[] args) { List<Map<String, String>> list = new ArrayList<>(); Map<String, String> map = new HashMap<>(); map.put("userName", "张三"); map.put("age", "18"); map.put("sex", "男"); list.add(map); Map<String, String> map1 = new HashMap<>(); map1.put("userName", "李四"); map1.put("age", "20"); map1.put("sex", "女"); list.add(map1); Map

Gson 解决Number类型处理问题

╄→гoц情女王★ 提交于 2020-08-10 09:40:02
Gson中默认类型是通过ObjectTypeAdapter来处理的 public final class ObjectTypeAdapter extends TypeAdapter<Object> { public static final TypeAdapterFactory FACTORY = new TypeAdapterFactory() { @SuppressWarnings("unchecked") @Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) { if (type.getRawType() == Object.class) { return (TypeAdapter<T>) new ObjectTypeAdapter(gson); } return null; } }; private final Gson gson; ObjectTypeAdapter(Gson gson) { this.gson = gson; } @Override public Object read(JsonReader in) throws IOException { JsonToken token = in.peek(); switch (token) { case BEGIN_ARRAY

运用设计模式告别项目中大量臃肿的if else

回眸只為那壹抹淺笑 提交于 2020-08-08 14:33:23
前言 以前写过的一个老项目中,有这样一个业务场景,比喻:一个外卖系统需要接入多家餐馆,在外卖系统中返回每个餐馆的菜单列表 ,每个餐馆的菜单价格都需要不同的算法计算。 代码中使用了大量的if else嵌套连接,一个类中数千行代码(眼睛快看瞎...),而且随着业务的扩展,接入的餐馆会越来越多,每接入一个餐馆都要增加一个 if else,满屏幕密密麻麻的逻辑代码,毫无可读性。然后前段时间进行了代码重构,使用了策略模式+工厂模式+反射代替了这整片的臃肿代码,瞬间神清气爽。 模拟原业务代码 原代码的简单模拟实现,根据传入的不同餐馆编码获取对应的餐馆类集合,每个餐馆菜单价格的算法都不同。每当需要新接入一家餐馆时,都需要在此增加一个if else,中间加入一大长串的处理逻辑,当餐馆越来越多的时候,代码就变得越来越沉重,维护成本高。 public List server(String hotelCode) { if ("HotelA" .equals(hotelCode)) { // 获取数据 List<HotelA> hotelList = new ArrayList<HotelA> () { { add( new HotelA("爆炒腰子", 100d, 0.8, null )); add( new HotelA("红烧腰子", 200d, 0.8, null )); add( new

JUC—DelayQueue源码深度解析

不羁的心 提交于 2020-08-08 12:52:04
  基于JDK1.8详细介绍了DelayQueue的底层源码实现,包括延迟出队的原理,以及入队列、出队列等操作的源码。 文章目录 1 DelayQueue的概述 2 DelayQueue的原理 2.1 主要属性 2.2 构造器 2.2.1 DelayQueue() 2.2.2 DelayQueue(c) 2.3 入队操作 2.3.1 offer(e)方法 2.3.2 add(e)方法 2.3.3 put(e)方法 2.3.4 offer(e, timeout, unit)方法 2.4 出队操作 2.4.1 take()方法 2.4.2 poll()方法 2.4.3 poll(timeout, unit)方法 2.4.4 remove()方法 2.4.5 remove(o)方法 2.5 检查操作 2.5.1 peek()方法 2.5.2 element()方法 2.6 size操作 2.7 迭代操作 3 DelayQueue的应用 3.1 案例 4 DelayQueue的总结 1 DelayQueue的概述 public class DelayQueue< E extends Delayed >   extends AbstractQueue< E >   implements BlockingQueue< E >   DelayQueue来自于JDK1.5的JUC包

队列与栈

这一生的挚爱 提交于 2020-08-08 11:12:41
队列 概念 队列一个线性结构,特点是在某一端添加数据,在另一端删除数据,遵循先进先出的原则 实现 class Queue { constructor() { this.queue = [] } enQueue(item) { this.queue.push(item) } deQueue() { return this.queue.shift() } getHeader() { return this.queue[0] } getLength() { return this.queue.length } isEmpty() { return this.getLength() === 0 } } 栈 概念 栈是一个线性结构,在计算机中是一个相当常见的数据结构。 栈的特点是只能在某一端添加或删除数据,遵循先进后出的原则 实现 class Stack { constructor() { this.stack = [] } push(item) { this.stack.push(item) } pop() { this.stack.pop() } peek() { return this.stack[this.getCount() - 1] } getCount() { return this.stack.length } isEmpty() { return this.getCount

搞机:ubuntu18 上值得安装的软件及安装方法

淺唱寂寞╮ 提交于 2020-08-08 10:14:57
ubuntu 上值得安装的软件及安装方法 重装了一下ubuntu系统,整理了一下正在使用的好用的软件以及安装方法,备忘 文章目录 ubuntu 上值得安装的软件及安装方法 shutter Typora Chrome xmind vscode Terminator 终端终结者 peek 搜狗输入法 百度输入法 网易云音乐 docker miniconda gnome-screenshot NVIDIA显卡驱动 Postman shutter 比较好用的截图软件 安装方法: sudo add-apt-repository ppa:shutter/ppa sudo apt-get update sudo apt-get install shutter 设置快捷键 Typora 官网 最好用的markdown编辑器,功能齐全并有多款主题可以选择: 安装方法: wget -qO - https://typora.io/linux/public-key.asc | sudo apt-key add - # add Typora's repository sudo add-apt-repository 'deb https://typora.io/linux ./' sudo apt-get update # install typora sudo apt-get install typora

【并发编程系列8】阻塞队列之ArrayBlockingQueue,LinkedBlockingQueue,LinkedBlockingDeque原理分析

拈花ヽ惹草 提交于 2020-08-08 10:07:16
ArrayBlockingQueue,LinkedBlockingQueue,LinkedBlockingDeque原理分析 什么是阻塞队列 队列Queue接口核心方法 阻塞队列BlockigQueue接口核心方法 ArrayBlockingQueue 模拟实现生产者消费者 初始化队列 添加元素(生产者) 获取元素(消费者) LinkedBlockingQueue 初始化队列 添加元素(生产者) 获取元素(消费者) LinkedBlockingDeque 初始化队列 添加元素(生产者) 从First添加 从Last添加 获取元素(消费者) 从First获取 从Last获取 总结 什么是阻塞队列 阻塞队列有两个特点: 当队列中没有元素时,从队列中获取元素会被阻塞 当队列满了时,添加元素会被阻塞 阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素,消费者则从队列里取元素。 队列Queue接口核心方法 阻塞队列,本质上来说还是属于队列,也就是说阻塞队列继承了队列的功能,这里我们先来看看Queue接口中的几个核心方法: 方法 功能 add(e) 添加一个元素,成功返回true,如果空间满了则抛出异常 offer(e) 添加一个元素,成功返回true,如果空间满了则返回false,处理有界队列时优于add方法 remove() 检索并移除队列头元素,成功则返回移除的元素