- 博客(122)
- 资源 (20)
- 收藏
- 关注
原创 electron-api-gateway
ApiGateway 设计1.项目说明这是一个基于electron主进程的api管理框架。我们项目组对electron技术的使用较多,这个也算是经验的总结,经历过生产环境的考验。本项目的所有代码和文档都是我个人完成,只是将框架的核心思想提取出来实现并开源。1.1 框架要解决的问题首先说一下项目的组成,我们是一个以electron为核心的PC端项目,以安装包的形式发布版本。1.1.1 项目现状进程数量多:其中带UI进程窗口40个以上,还有一些无UI的进程。进程实现的语言多:有electron
2021-05-05 13:37:46
412
原创 语音助手
语音助手前言:相信大家都听过语音助手,虽然比较鸡肋,但确实有一部分人用过,比如苹果的Siri,微软的小娜。本次要做的业务也是跟这个功能类似,通过语音操作自己的软件中的部分功能。1.项目简介先讲一下项目的大体框架,这是一个基于electron实现的pc端应用程序,前端技术栈主要是node+vue+electron。一开始,这个语音助手功能是使用electron渲染进程实现的一个窗口,当时在这个窗口中处理语音交互,以及用户语音动作的执行。后来,考虑到助手功能以后会对接其他业务,所以选择将助手功能独立
2021-05-05 13:06:41
1101
原创 js树操作,层级遍历,先序序列化与反序列化
js树操作,层级遍历,先序序列化与反序列化class TreeNode { /** * 树节点 * @param value */ constructor(value) { this.value = value; this.left = null; this.right = null; }...
2019-03-10 17:14:10
1044
原创 border-box宽度计算方式
css3 box-sizing定义了两种盒模型:content-boxborder-box没有padding-box哦,别瞎猜。二者区别就是容器的宽度计算方式不同:content-box是块级默认属性,宽度计算方式为:boxWidth=padding-left+padding-right+border-left+border-right+width;border-box这种盒...
2019-01-05 20:59:26
2969
原创 es6 实现拖拽类Drag
1.es6 class的使用之前在Jquery时代,实现拖拽功能都是使用函数直接搞,有了es6中的class,可以很好的封装相关的功能,只要给个ID就可以,想拖谁就拖谁!不过步骤还是老一套。先在拖拽元素DOM上添加onmousedown事件,获取鼠标点击位置,并添加document的onmousemove事件和onmouseup事件只要鼠标不弹起,就会执行onmousemove事件,然后事...
2019-01-04 10:44:39
1190
原创 Redux官网Counter最基本示例的思考
1.不使用redux实现如果不使用redux,仅仅依靠react去实现Counter功能是极其简单的。代码如下:index.jsimport React from 'react';import ReactDOM from 'react-dom';import Counter from './components/Counter';const render = ()=> Rea...
2019-01-03 11:10:45
561
原创 rest接口如何适应jsonp的方案
rest接口如何适应jsonp的方案我的要做的事很简单,在html中,跨域调用一个rest接口,后端接口实现使用Node(语言无关),rest接口都是返回json数据的,如果不在页面上进行任何处理,是不可以在页面是使用的。直接给出方案,前端使用jquery,只需要将dataType改成jsonp,其他的就和普通的axaj无差别了。前端代码如下:let url = "http://loca...
2018-12-17 16:39:30
807
1
原创 字节跳动2019届校招笔试题二
2.为了提高文章质量,每一篇文章(假设全部都是英文)都会有m民编辑进行审核,每个编辑独立工作,会把觉得有问题的句子通过下表记录下来,比如[1,10],1表示病句的第一个字符,10表示病句的最后一个字符。也就是从1到10着10个字符组成的句子,是有问题的。现在需要把多名编辑有问题的句子合并起来,送个总编辑进行最终的审核。比如编辑A指出的病句是[1,10],[32,45];编辑B指出的病句是[5,1...
2018-10-18 21:20:50
3667
原创 字节跳动2019届校招笔试题
1.世界杯开幕式会在球场C举行,球场C的球迷看台可以容纳M*N个球迷。在球场售票完成后,现官方想统计此次开幕式一共有多少个球队球迷群体,最大的球队球迷群体有多少人。经调研发现,球迷群体在选座时有以下特性:同球队的球迷群体会选择相邻座位,不同球队的球迷群体会选择不相邻的座位(注解:相邻包括前后相邻,左右相邻,斜对角相邻)给定一个M*N的二维球场,0代表该位置没有坐人,1代表该位置已有选择,希望...
2018-10-18 19:41:16
7300
1
转载 HTTP请求行、请求头、请求体详解
原文地址:https://blog.youkuaiyun.com/u010256388/article/details/68491509引用学习Web开发不好好学习HTTP报文,将会“打拳不练功,到老一场空”,你花在犯迷糊上的时间比你沉下心来学习HTTP的时间肯定会多很多。HTTP请求报文解剖 HTTP请求报文由3部分组成(请求行+请求头+请求体): 下面是一个实际...
2018-10-08 11:23:54
596
原创 shell处理HBase命令的执行结果
shell处理HBase命令的执行结果方法1生成文件 优点:可以更加详细的处理输出结果文件; 缺点:形成很多结果文件,需要有写入权限current=`date "+%Y-%m-%d %H:%M:%S"` timeStamp=`date -d "$current" +%s` currentTimeStamp=$((timeStamp*1000+`date "+%N"`/1...
2018-08-13 15:17:53
1974
原创 使用BlockingQueue查找某个文件夹下的所有文本文件中是否包含文字
阻塞队列的使用:public class FileCrawler implements Runnable { private final BlockingQueue<File> fileQueue = new LinkedBlockingQueue<>(10); final List<String> result = new ArrayList<>(16); private
2018-01-09 17:35:00
414
原创 使用原生NIO实现一个echo服务器
tcp的拆包处理使用的是定长解码的方式。 服务器端:public class EchoServer { public static final int port = 8888; public static void main(String[] args) throws IOException { Selector selector = Selector.open();
2018-01-07 16:42:30
550
原创 最新版Spark2.2读取多种文件格式数据
Spark2.0+的文件读取Spark可以读取多种格式文件,csv,json,parque。因此对应就有很多函数与之对应。在Spark2.0以后一般使用SparkSession来操作DataFrame、Dataset来完成数据分析。这些读取不同格式文件的函数就是SparkSession的成员DataFrameReader的方法。该类就是将文件系统(HDFS,LocalFileSystem(一定要在每
2017-12-19 11:35:50
4502
原创 java常用位操作
public class TestIndex { /** * 数组越界 * 这个方法是java源码中常用的一个数组越界的判断检测 * 顺便复习一下位操作 */ public static int read(byte[] b, int off, int len) throws Exception { // parameter ch
2017-12-10 20:42:16
389
原创 jvm 判断对象是否已经死亡
如何判断java对象已经死亡?容易想到的就是引用计数算法,就说的是给对象添加一个引用计数器,每当有一个地方引用到他,就加1;引用失效就减1。但是这样做是有问题的。 看下例子:public class ReferenceCountingGC { public Object instace = null;// 一个200M的对象 private byte[] bigSize = n
2017-12-08 21:23:21
912
1
原创 使用netty+zookeeper+protobuf实现一个RPC过程
上次实现了一个基于java序列化和阻塞IO模型的RPC过程,效率很低,这次换用NIO来实现。代码有点多,尽量写清楚一点。 这是maven的版本依赖,先放在前面,接下来就可以复制了。。。 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId>
2017-12-08 16:40:45
2309
原创 用java序列化和阻塞IO模型实现RPC
RPC是远程过程调用,对于java而言,就是两个JVM通信,一个JVM a想要调用另一个JVM b中的类。b把执行结果在发送给a的过程。好,我们就是要来实现这个过程。 两个接口:public interface IDiff { double diff(double a,double b);}public interface ISum { public int sum(int a,
2017-12-04 16:14:07
625
原创 遇到一个比较有意思的NIO问题!
关于NIO的ByteBuffer操作很多人都会,但有时候稍不注意就会犯错。比如:private void doWrite(SocketChannel sc, String response) throws IOException { if (response != null && response.trim().length() > 0) { ByteBuff
2017-11-30 22:47:36
368
原创 使用java解压GZip文件
Java中有可以直接解压gzip文件的输入流。/** * 获取文件名(去掉.gz后缀) * @param path * @return */ public static String getPrefix(String path) { int index = path.lastIndexOf('.'); return pa
2017-11-29 19:24:00
4625
1
原创 java解归档tar文件
首先要在maven上找到https://mvnrepository.com/artifact/javatar/javatar jar包,下面是坐标:<dependency> <groupId>javatar</groupId> <artifactId>javatar</artifactId> <version>2.5</version></dependency>解归档代码
2017-11-29 19:18:42
530
原创 使用python下载NCDC数据
#!/usr/bin/python# -*- coding: utf-8 -*-import osfrom ftplib import FTP# ftp 服务器链接def ftpconnect(): ftp_server = 'ftp.ncdc.noaa.gov' username = '' password = '' ftp = FTP() ftp.
2017-11-27 13:28:38
897
原创 二元分类中精确度precision和召回率recall的理解
精确度(precision) 是二元分类问题中一个常用的指标。二元分类问题中的目标类 别只有两个可能的取值, 而不是多个取值,其中一个类代表正,另一类代表负,精确度就 是被标记为“正”而且确实是“正”的样本占所有标记为“正”的样本的比例。和精确度 一起出现的还有另一个指标召回率(recall)。召回率是被分类器标记为“正”的所有样本 与所有本来就是“正”的样本的比率。比如,假设数据集有 50
2017-11-27 13:26:51
2252
转载 Cloudera的CDH和Apache的Hadoop的区别
Cloudera的CDH和Apache的Hadoop的区别 目前而言,不收费的Hadoop版本主要有三个(均是国外厂商),分别是:Apache(最原始的版本,所有发行版均基于这个版本进行改进)、Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,简称CDH)、Hortonworks版本(Hortonworks Data Platf
2017-11-21 15:01:02
781
转载 Spark中repartition和coalesce的用法
repartition(numPartitions:Int):RDD[T]和coalesce(numPartitions:Int,shuffle:Boolean=false):RDD[T]他们两个都是RDD的分区进行重新划分,repartition只是coalesce接口中shuffle为true的简易实现,(假设RDD有N个分区,需要重新划分成M个分区)1)、N2)如果N
2017-11-20 21:44:01
478
转载 Spark2.10中使用累加器、注意点以及实现自定义累加器
累加器(accumulator)是Spark中提供的一种分布式的变量机制,其原理类似于mapreduce,即分布式的改变,然后聚合这些改变。累加器的一个常见用途是在调试时对作业执行过程中的事件进行计数。累加器简单使用Spark内置的提供了Long和Double类型的累加器。下面是一个简单的使用示例,在这个例子中我们在过滤掉RDD中奇数的同时进行计数,最后计算剩下整数的和。
2017-11-18 18:49:06
1552
转载 hbase二级索引
二级索引与索引Join是多数业务系统要求存储引擎提供的基本特性,RDBMS早已支持,NOSQL阵营也在摸索着符合自身特点的最佳解决方案。这篇文章会以HBase做为对象来讨论如何基于Hbase构建二级索引与实现索引join。文末同时会列出目前已知的包括0.19.3版secondary index, ITHbase, Facebook方案和官方Coprocessor的介绍。理论目标在H
2017-11-18 18:47:41
9017
转载 Spark中Task,Partition,RDD、节点数、Executor数、core数目的关系
作者:王燚光链接:http://www.zhihu.com/question/33270495/answer/93424104来源:知乎梳理一下Spark中关于并发度涉及的几个概念File,Block,Split,Task,Partition,RDD以及节点数、Executor数、core数目的关系。输入可能以多个文件的形式存储在HDFS上,每个File都包含了
2017-11-17 16:35:18
669
原创 scala 的密封类
在使用case 类来做模式匹配时,你可能想让编译器帮你确保已经列出了所有可能的选择。那么通常就要将通用超类声明为sealed:sealed abstract class Amount case class Dollar(value:Double) extends Amountcase class Rnb(value:Double) extends Amountcase class Currency(
2017-11-13 22:47:15
795
1
原创 scala中的隐式类型转换
写一个类测试一下Scala中的隐式转换的用法:class Fraction(n: Int, d: Int) {// def den = d private val den = d;// def num = n 类参数定义为方法或字段都可以 private val num = n;// 定义乘法 def *(other: Fraction) = Fraction(ot
2017-11-13 22:20:40
642
转载 深刻理解HDFS工作机制
一个技术的工作机制是灵活运用和快速解决问题的根本方法,也是唯一途径。对于HDFS来说除了要明白它的应用场景和用法以及通用分布式架构之外更重要的是理解关键步骤的原理和实现细节。在看这篇博文之前需要对HDFS以及分布式系统有一些了解。请参考这篇博客。本篇博文首先对HDFS的重要特性和使用场景做一个简要说明,之后对HDFS的数据读写、元数据管理以及NameNode、SecondaryNamenode的工
2017-11-13 21:06:12
586
原创 Linux下统计当前文件夹下的文件个数、目录个数
1) 统计当前文件夹下文件的个数:ls -l |grep "^-"|wc -l2) 统计当前文件夹下目录的个数:ls -l |grep "^d"|wc -l3) 统计当前文件夹下文件的个数,包括子文件夹里的 :ls -lR|grep "^-"|wc -l 4) 统计文件夹下目录的个数,包括子文件夹里的:ls -lR|gre
2017-11-13 21:04:11
18546
2
转载 Receiver 分发详解
我们前面在 DStream, DStreamGraph 详解 讲到,整个 DStreamGraph 是由 output stream 通过 dependency 引用关系,索引到上游 DStream 节点。而递归的追溯到最上游的 InputDStream 节点时,就没有对其它 DStream节点的依赖了,因为InputDStream 节点本身就代表了最原始的数据集。我们对 模块
2017-11-13 14:09:31
419
转载 JobScheduler, Job, JobSet 详解
前面在 Spark Streaming 实现思路与模块概述 和 DStream 生成 RDD 实例详解 里我们分析了 DStreamGraph和 DStream 具有能够实例化 RDD 和 RDD DAG 的能力,下面我们来看 Spark Streaming 是如何将其动态调度的。在 Spark Streaming 程序的入口,我们都会定义一个 batchDuration,就是需要每隔
2017-11-12 22:24:04
532
转载 DStream, DStreamGraph 详解
我们在前面的文章讲过,Spark Streaming 的 模块 1 DAG 静态定义 要解决的问题就是如何把计算逻辑描述为一个 RDD DAG 的“模板”,在后面 Job 动态生成的时候,针对每个 batch,都将根据这个“模板”生成一个 RDD DAG 的实例。在 Spark Streaming 里,这个 RDD “模板”对应的具体的类是 DStream,RDD DAG
2017-11-12 21:44:06
690
转载 Spark Streaming 实现思路与模块概述
一、基于 Spark 做 Spark Streaming 的思路Spark Streaming 与 Spark Core 的关系可以用下面的经典部件图来表述:在本节,我们先探讨一下基于 Spark Core 的 RDD API,如何对 streaming data 进行处理。理解下面描述的这个思路非常重要,因为基于这个思路详细展开后,就能够充分理解整个 Spark Stre
2017-11-12 20:44:55
599
转载 DStream 生成 RDD 实例详解
我们在前面的文章讲过,Spark Streaming 的 模块 1 DAG 静态定义 要解决的问题就是如何把计算逻辑描述为一个 RDD DAG 的“模板”,在后面 Job 动态生成的时候,针对每个 batch,都将根据这个“模板”生成一个 RDD DAG 的实例。在 Spark Streaming 里,这个 RDD “模板”对应的具体的类是 DStream,RDD DAG
2017-11-12 20:42:51
771
转载 深入分析Parquet列式存储格式
Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目,最新的版本是1.8.0。列式存储列式存储和行式存储相比有哪些优势呢?可以跳过不符合条件的数据,只读取需要的数据,降低IO数据量。压缩编码可以降低磁盘存储空间。由于同一列的数据类型是一样的,可以使用更高效的压缩编
2017-11-09 09:40:17
505
转载 java与mysql的日期类型对应
MySQL(版本:5.1.50)的时间日期类型如下:datetime 8bytes xxxx-xx-xx xx:xx:xx 1000-01-01 00:00:00到9999-12-31 23:59:59timestamp 4bytes xxxx-xx-xx xx:xx:xx 1970-01-01 00:00:01到2038date 3bytes xxxx-xx-xx 1000-01
2017-11-07 11:08:06
2944
原创 spark启动过程sparkconf实例化
SparkConf 的构造很简单,主要是通过 ConcurrentHashMap 来维护各种 Spark 的配置属性。 Spark 的配置属性都是以“spark.”开头的字符串。 现在开始介绍 SparkContext。 SparkContext 的初始化步骤如下: 1)创建 Spark 执行环境 SparkEnv; 2)创建 RDD 清理器 metadataCleaner; 3)创建
2017-10-31 17:45:01
988
spark机器学习
2017-12-18
hadoop入门介绍
2017-09-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人