怪兽

怪兽 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

怪兽 发布了文章 · 2019-05-28

Mac软件记录

软件包管理

  • Homebrew

终端 Terminal

  • securecrt mac版
  • iterm2 + zsh + oh my zsh

转码

  • xld

视频

  • vlc

数据库

  • Oracle
  • MySQL (MariaDB)
  • SQL ServerWindows NT平台
  • PostgreSQL
  • MongoDB

数据库管理工具

  • navicat
  • datagrip 推荐

编辑工具

  • macvim
  • sublime text由sublime text转移到VS code
  • Visual Studio Code 推荐

diff 工具

  • BeyondCompare

版本控制

  • git
  • mercurial 未使用过

Java反编译

  • jd-gui

IDE

  • eclipse
  • myeclipse
  • IntelliJ IDEA 推荐,需购买

数据建模

  • power designer

原型设计(页面设计)

  • AxureRP Pro
  • BalsamiqMockups

虚拟机,客户端

  • VMware Fusion
  • VMware workstation
  • vmware vsphere client
  • VirtualBox

编程娱乐

  • 树莓派
  • arduino
  • masm

解压软件

  • The Unarchiver

工具

  • Alfred
  • CheatSheet
  • Dash

构建工具

  • MAVEN 私服仓库nexus
  • Gradle
查看原文

赞 0 收藏 0 评论 0

怪兽 发布了文章 · 2019-04-17

Java 缩短UUID为22位

参考

思路

UUID为128位,取高低64位分别处理,转为64制字符,我没有按照Base64的字符表来,随着自己的性子惯了,也没有3字节转为4字节,参考别人直接64位每低6位转为int对应一个64制字符数组(这样其实最后一组只有4位转为64制字符)

public class GenerateShortUUID {
    private final static char[] DIGITS64 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_".toCharArray();
    
    public static String next() {
        UUID u = UUID.randomUUID();
//        return u.toString();
        return toIDString(u.getMostSignificantBits()) + toIDString(u.getLeastSignificantBits());
    }

    private static String toIDString(long l) {
        char[] buf = "00000000000".toCharArray(); // 限定11位长度
        int length = 11;
        long least = 63L; // 0x0000003FL
        do {
            buf[--length] = DIGITS64[(int) (l & least)]; // l & least取低6位
            /* 无符号的移位只有右移,没有左移
             * 使用“>>>”进行移位
             */
            l >>>= 6;
        } while (l != 0);
        return new String(buf);
    }

    public static void main(String[] args) {
        long time = System.currentTimeMillis();
        for (int i=0; i<1000000L; i++) {
            next();
        }
        System.out.println(System.currentTimeMillis() - time);
    }
}

效率之前有测试过忘记了,应该还可以,你们测试过的话可以告诉我。

查看原文

赞 0 收藏 0 评论 0

怪兽 发布了文章 · 2019-04-04

Storm安装笔记

Storm安装笔记

安装环境

三台服务器10.223.138.[141-143]

  • CentOS release 6.7 (Final) 64位
  • JDK 1.7.0_80

    It is strongly recommended to use Oracle JDK rather than OpenJDK.
  • CDH 5.7.0

本次安装Storm版本为1.1.0
官网地址 请点击我
官方文档 Version: 1.1.0
安装文档 Setting up a Storm Cluster

安装Zookeeper集群

CDH安装Zookeeper服务,此处略
Zookeeper version:zookeeper-3.4.5-cdh5.7.0

  • 10.223.138.141:2181
  • 10.223.138.142:2181
  • 10.223.138.143:2181

官方建议:

A few notes about Zookeeper deployment:

  1. It's critical that you run Zookeeper under supervision, since Zookeeper is fail-fast and will exit the process if it encounters any error case. See here for more details.
  2. It's critical that you set up a cron to compact Zookeeper's data and transaction logs. The Zookeeper daemon does not do this on its own, and if you don't set up a cron, Zookeeper will quickly run out of disk space. See here for more details.
  • 进程监控以避免任何错误导致的程序退出
  • 定时压缩数据和日志以避免可能引发的磁盘空间不足

安装依赖

安装Storm所需要的依赖

  1. Java 7
  2. Python 2.6.6

JDK 7 下载地址 请点击我
CenOS 6.7自带Python 2.6.6

# python -V
Python 2.6.6

以上安装方法此处不再赘述,可自行网上查阅。

下载Storm包

下载地址 apache-storm-1.1.0.tar.gz
将压缩包解压到指定目录tar -zxvf apache-storm-1.1.0.tar.gz -C /your/path/

配置storm.yaml

The Storm release contains a file at conf/storm.yaml that configures the Storm daemons. You can see the default configuration values here. storm.yaml overrides anything in defaults.yaml.

配置文件位置conf/storm.yaml,以下是用以启动集群的必要配置

  • storm.zookeeper.servers:Zookeeper集群配置
storm.zookeeper.servers:
  - "10.223.138.141"
  - "10.223.138.142"
  - "10.223.138.143"

如果端口不是默认的2181还需要配置storm.zookeeper.port参数

  • storm.local.dir:存储目录用以保存运行环境,比如jar包、配置文件等,在每台机器上手动创建目录并赋权限
storm.local.dir: "/home/storm"
  • nimbus.seeds:master节点,官方建议配置machine's FQDN,即全域名。维基百科Fully_qualified_domain_name。本机查看命令hostname -f,修改方法请自行网上查阅。(配置多个Nimbus角色的机器可以启动Nimbus H/A。)
nimbus.seeds: ["cdh-1"]

原来我使用的是10.223.138.141,但是storm ui上Nimbus Summary出现了两行数据,一个是cdh-1,一个是10.223.138.141这种奇怪的问题,但是换成了全域名的这种形式就没问题了。

  • supervisor.slots.ports:对应每一台Worker机器,定义一台机器上跑几个worker就配置几个端口,比如我这边一个机器上跑三个worker,配置如下
supervisor.slots.ports:
- 6700
- 6701
- 6702
  • 健康度监控
# 脚本相关文件的存放目录
storm.health.check.dir: "/home/storm/healthchecks"
# 脚本执行的超时时间
storm.health.check.timeout.ms: 5000

配置第三方库和环境变量

如果需要扩展第三方库或自定义插件,把jar包放入extlib/或者extlib-daemon/目录,extlib-daemon/这个里面只能被Storm的程序所使用,比如(Nimbus, Supervisor, DRPC, UI, Logviewer)这些,也可以通过环境变量STORM_EXT_CLASSPATHSTORM_EXT_CLASSPATH_DAEMON去配置扩展库classpath目录。

启动

  1. Nimbus: Nimbus角色的机器执行命令bin/storm nimbus &
  2. Supervisor: Worker角色的机器执行命令bin/storm supervisor &,它用于启停Worker进程。
  3. UI: 某一台机器执行命令bin/storm ui &,然后可以通过浏览器访问http://{ui host}:8080。

logs/ 此目录下可查看运行日志。

进程监控

在Setting up a Storm Cluster这份官方安装文档中强烈建议run under supervision,引用官方文档的原话(原文地址:Daemon-Fault-Tolerance

What happens when Nimbus or Supervisor daemons die?
The Nimbus and Supervisor daemons are designed to be fail-fast (process self-destructs whenever any unexpected situation is encountered) and stateless (all state is kept in Zookeeper or on disk). As described in Setting up a Storm cluster, the Nimbus and Supervisor daemons must be run under supervision using a tool like daemontools or monit. So if the Nimbus or Supervisor daemons die, they restart like nothing happened.

当Nimbus或者Supervisor daemon进程挂了会怎样?
Nimbus和Supervisor daemon进程设计成快速失败(无论何时遇到任何异常情况执行自毁)和无状态(所有状态保存在Zookeeper或者磁盘上)。正如Setting up a Storm Cluster中描述的,Nimbus和Supervior daemon进程必须在监控下运行,如使用daemontools或者monit工具。所以如果Nimbus或者Supervisor daemon进程挂了,它可以像什么异常也没有发生似的重新启动。

这里我使用monit,详细介绍请参阅官网。(官网地址请点击我

安装monit

安装命令yum install monit,如果没有找到的话,需要先安装epel源yum install epel-release
配置文件位置 /etc/monit.conf,分为Global section和Services两个部分

  • 配置Global section,以下是我个人的Global配置:(邮件功能暂略)
set daemon  60                    #每60秒检查一次服务
    with start delay 240        #Monit启动后第一次检查延迟240秒
set logfile /var/log/monit.log    #日志输出到单独的文件
set pidfile /var/run/.monit.pid    #pid文件位置
set idfile /var/.monit.id        #id文件位置
set statefile /var/.monit.state    #state文件位置
#配置web页面访问
set httpd port 2812 and            #端口2812
    use address 10.223.138.141    #如果配置localhost只能本地访问
    allow localhost                #允许本地访问
    allow 10.223.138.141        #若不配置,monit status命令不可用,后台报错
                                #error    : Denied connection from non-authorized client
                                #error    : Cannot read status from the monit daemon
    allow 10.223.132.0/24        #允许10.223.132网段访问,即我的电脑所在网段
    allow admin:monit              #用户名与密码

中间插一下:如果使用防火墙,要访问的话还需要把2812端口加入防火墙配置,编辑防火墙配置文件/etc/sysconfig/iptables增加一行配置:-A INPUT -m state --state NEW -m tcp -p tcp --dport 2812 -j ACCEPT
注意:需要在相应的配置段中加入,其他位置不生效

.
.
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2812 -j ACCEPT
.
.

重启服务service iptables restart

  • 配置Services

这里把Services的配置和全局配置分开,在/etc/monit.d/下面新建文件nimbus和supervisor作为监控nimbus和supervisor的配置。
这里主要是监控nimbus和supervisor的进程,我们只看monit监控进程的语法
CHECK PROCESS <unique name> <PIDFILE <path> | MATCHING <regex>>
有两种方式,一个是pidfile,一个是正则匹配进程名,因为storm的deamon没写pid文件,这里我用第二种方法,使用monit procmatch命令验证是否可以匹配相应的进程,例如nimbus的进程,Command里面最后有org.apache.storm.daemon.nimbus

#monit procmatch org.apache.storm.daemon.nimbus
List of processes matching pattern "org.apache.storm.daemon.nimbus":
------------------------------------------
...此处省略...
------------------------------------------
Total matches: 1

匹配到nimbus的进程,表示OK。

#vi /etc/monit.d/nimbus
check process nimbus matching org.apache.storm.daemon.nimbus
  start program = "/bin/bash -c '/home/storm/apache-storm-1.1.0/bin/nimbus.sh &>/tmp/nimbus.out'" with timeout 60 seconds
  stop program = "/bin/kill -9 `ps -ef|grep daemon.nimbus|grep -v grep|awk '{print $2}'`"
  if 3 restarts within 5 cycles then unmonitor
  group storm

关于monit更为详细的说明请参见官方手册 Monit manual

以上设置的很简单,这里得好好说说这个start program,就是启动的命令,它可是实现进程挂掉后重启,但是我一开始试了好几种方式都不行

  • 直接执行,/home/storm/apache-storm-1.1.0/bin/storm nimbus,启动超时
  • 放入后台,/home/storm/apache-storm-1.1.0/bin/storm nimbus &,程序会自行终结
  • 创建脚本文件/home/storm/apache-storm-1.1.0/bin/nimbus.sh

    /home/storm/apache-storm-1.1.0/bin/storm nimbus &

    脚本“&”符号还是要的,不然PPID是monit的。
    给执行权限chmod 755 /home/storm/apache-storm-1.1.0/bin/nimbus.sh

    不管是/home/storm/apache-storm-1.1.0/bin/nimbus.sh还是/bin/bash /home/storm/apache-storm-1.1.0/bin/nimbus.sh都不能实现自动重启。

  • 参考monit的FAQ(请点击我)使用/bin/bash -c执行但是后面必须要有一个输出的文件,没有会报错:

    error    : 'nimbus' failed to start (exit status 0) -- no output

所以经过好一番折腾,最终 start program = "/bin/bash -c '/home/storm/apache-storm-1.1.0/bin/nimbus.sh &>/tmp/nimbus.out'",nimbus.sh就是上面提到的那个脚本文件。我觉得这应该不是最正确的配置,但是至少可以实现重启了。

supervisor同理

#vi /etc/monit.d/supervisor
check process supervisor matching org.apache.storm.daemon.supervisor.Supervisor
  start program = "/bin/bash -c '/home/storm/apache-storm-1.1.0/bin/supervisor.sh &>/tmp/supervisor.out'" with timeout 60 seconds
  stop program = "/bin/kill -9 `ps -ef|grep daemon.supervisor|grep -v grep|awk '{print $2}'`"
  if 3 restarts within 5 cycles then unmonitor
  group storm

这样就算配置完成了。141配置nimbus,然后141-143配置supervisor,三台机器都装了Monit,虽然M/Monit可以统一管理集群,但是需要收费,这边就没有考虑了。后面再尝试使用其他监控工具试试。

接下来就是启动monit,先熟悉monit的基本命令

  • monit 启动
  • monit -t 校验配置文件正确性
  • monit reload 重新加载配置
  • monit status 查看状态
  • monit quit 退出

所以当修改完配置文件之后,第一步执行monit -t查看配置是否正确,然后monit reload重新加载配置。

monit启动之后可以登录web查看,根据Global里面的配置,我的页面地址是:http://10.223.138.141:2812/
Monit-UI

启动storm的UI后查看,我在10.223.138.141上启动的,访问地址为:10.223.138.141:8080不要忘记防火墙!
Storm-UI

至此,Storm安装完毕!

参考

查看原文

赞 1 收藏 1 评论 0

怪兽 发布了文章 · 2019-04-04

Storm安装笔记

Storm安装笔记

安装环境

三台服务器10.223.138.[141-143]

  • CentOS release 6.7 (Final) 64位
  • JDK 1.7.0_80

    It is strongly recommended to use Oracle JDK rather than OpenJDK.
  • CDH 5.7.0

本次安装Storm版本为1.1.0
官网地址 请点击我
官方文档 Version: 1.1.0
安装文档 Setting up a Storm Cluster

安装Zookeeper集群

CDH安装Zookeeper服务,此处略
Zookeeper version:zookeeper-3.4.5-cdh5.7.0

  • 10.223.138.141:2181
  • 10.223.138.142:2181
  • 10.223.138.143:2181

官方建议:

A few notes about Zookeeper deployment:

  1. It's critical that you run Zookeeper under supervision, since Zookeeper is fail-fast and will exit the process if it encounters any error case. See here for more details.
  2. It's critical that you set up a cron to compact Zookeeper's data and transaction logs. The Zookeeper daemon does not do this on its own, and if you don't set up a cron, Zookeeper will quickly run out of disk space. See here for more details.
  • 进程监控以避免任何错误导致的程序退出
  • 定时压缩数据和日志以避免可能引发的磁盘空间不足

安装依赖

安装Storm所需要的依赖

  1. Java 7
  2. Python 2.6.6

JDK 7 下载地址 请点击我
CenOS 6.7自带Python 2.6.6

# python -V
Python 2.6.6

以上安装方法此处不再赘述,可自行网上查阅。

下载Storm包

下载地址 apache-storm-1.1.0.tar.gz
将压缩包解压到指定目录tar -zxvf apache-storm-1.1.0.tar.gz -C /your/path/

配置storm.yaml

The Storm release contains a file at conf/storm.yaml that configures the Storm daemons. You can see the default configuration values here. storm.yaml overrides anything in defaults.yaml.

配置文件位置conf/storm.yaml,以下是用以启动集群的必要配置

  • storm.zookeeper.servers:Zookeeper集群配置
storm.zookeeper.servers:
  - "10.223.138.141"
  - "10.223.138.142"
  - "10.223.138.143"

如果端口不是默认的2181还需要配置storm.zookeeper.port参数

  • storm.local.dir:存储目录用以保存运行环境,比如jar包、配置文件等,在每台机器上手动创建目录并赋权限
storm.local.dir: "/home/storm"
  • nimbus.seeds:master节点,官方建议配置machine's FQDN,即全域名。维基百科Fully_qualified_domain_name。本机查看命令hostname -f,修改方法请自行网上查阅。(配置多个Nimbus角色的机器可以启动Nimbus H/A。)
nimbus.seeds: ["cdh-1"]

原来我使用的是10.223.138.141,但是storm ui上Nimbus Summary出现了两行数据,一个是cdh-1,一个是10.223.138.141这种奇怪的问题,但是换成了全域名的这种形式就没问题了。

  • supervisor.slots.ports:对应每一台Worker机器,定义一台机器上跑几个worker就配置几个端口,比如我这边一个机器上跑三个worker,配置如下
supervisor.slots.ports:
- 6700
- 6701
- 6702
  • 健康度监控
# 脚本相关文件的存放目录
storm.health.check.dir: "/home/storm/healthchecks"
# 脚本执行的超时时间
storm.health.check.timeout.ms: 5000

配置第三方库和环境变量

如果需要扩展第三方库或自定义插件,把jar包放入extlib/或者extlib-daemon/目录,extlib-daemon/这个里面只能被Storm的程序所使用,比如(Nimbus, Supervisor, DRPC, UI, Logviewer)这些,也可以通过环境变量STORM_EXT_CLASSPATHSTORM_EXT_CLASSPATH_DAEMON去配置扩展库classpath目录。

启动

  1. Nimbus: Nimbus角色的机器执行命令bin/storm nimbus &
  2. Supervisor: Worker角色的机器执行命令bin/storm supervisor &,它用于启停Worker进程。
  3. UI: 某一台机器执行命令bin/storm ui &,然后可以通过浏览器访问http://{ui host}:8080。

logs/ 此目录下可查看运行日志。

进程监控

在Setting up a Storm Cluster这份官方安装文档中强烈建议run under supervision,引用官方文档的原话(原文地址:Daemon-Fault-Tolerance

What happens when Nimbus or Supervisor daemons die?
The Nimbus and Supervisor daemons are designed to be fail-fast (process self-destructs whenever any unexpected situation is encountered) and stateless (all state is kept in Zookeeper or on disk). As described in Setting up a Storm cluster, the Nimbus and Supervisor daemons must be run under supervision using a tool like daemontools or monit. So if the Nimbus or Supervisor daemons die, they restart like nothing happened.

当Nimbus或者Supervisor daemon进程挂了会怎样?
Nimbus和Supervisor daemon进程设计成快速失败(无论何时遇到任何异常情况执行自毁)和无状态(所有状态保存在Zookeeper或者磁盘上)。正如Setting up a Storm Cluster中描述的,Nimbus和Supervior daemon进程必须在监控下运行,如使用daemontools或者monit工具。所以如果Nimbus或者Supervisor daemon进程挂了,它可以像什么异常也没有发生似的重新启动。

这里我使用monit,详细介绍请参阅官网。(官网地址请点击我

安装monit

安装命令yum install monit,如果没有找到的话,需要先安装epel源yum install epel-release
配置文件位置 /etc/monit.conf,分为Global section和Services两个部分

  • 配置Global section,以下是我个人的Global配置:(邮件功能暂略)
set daemon  60                    #每60秒检查一次服务
    with start delay 240        #Monit启动后第一次检查延迟240秒
set logfile /var/log/monit.log    #日志输出到单独的文件
set pidfile /var/run/.monit.pid    #pid文件位置
set idfile /var/.monit.id        #id文件位置
set statefile /var/.monit.state    #state文件位置
#配置web页面访问
set httpd port 2812 and            #端口2812
    use address 10.223.138.141    #如果配置localhost只能本地访问
    allow localhost                #允许本地访问
    allow 10.223.138.141        #若不配置,monit status命令不可用,后台报错
                                #error    : Denied connection from non-authorized client
                                #error    : Cannot read status from the monit daemon
    allow 10.223.132.0/24        #允许10.223.132网段访问,即我的电脑所在网段
    allow admin:monit              #用户名与密码

中间插一下:如果使用防火墙,要访问的话还需要把2812端口加入防火墙配置,编辑防火墙配置文件/etc/sysconfig/iptables增加一行配置:-A INPUT -m state --state NEW -m tcp -p tcp --dport 2812 -j ACCEPT
注意:需要在相应的配置段中加入,其他位置不生效

.
.
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2812 -j ACCEPT
.
.

重启服务service iptables restart

  • 配置Services

这里把Services的配置和全局配置分开,在/etc/monit.d/下面新建文件nimbus和supervisor作为监控nimbus和supervisor的配置。
这里主要是监控nimbus和supervisor的进程,我们只看monit监控进程的语法
CHECK PROCESS <unique name> <PIDFILE <path> | MATCHING <regex>>
有两种方式,一个是pidfile,一个是正则匹配进程名,因为storm的deamon没写pid文件,这里我用第二种方法,使用monit procmatch命令验证是否可以匹配相应的进程,例如nimbus的进程,Command里面最后有org.apache.storm.daemon.nimbus

#monit procmatch org.apache.storm.daemon.nimbus
List of processes matching pattern "org.apache.storm.daemon.nimbus":
------------------------------------------
...此处省略...
------------------------------------------
Total matches: 1

匹配到nimbus的进程,表示OK。

#vi /etc/monit.d/nimbus
check process nimbus matching org.apache.storm.daemon.nimbus
  start program = "/bin/bash -c '/home/storm/apache-storm-1.1.0/bin/nimbus.sh &>/tmp/nimbus.out'" with timeout 60 seconds
  stop program = "/bin/kill -9 `ps -ef|grep daemon.nimbus|grep -v grep|awk '{print $2}'`"
  if 3 restarts within 5 cycles then unmonitor
  group storm

关于monit更为详细的说明请参见官方手册 Monit manual

以上设置的很简单,这里得好好说说这个start program,就是启动的命令,它可是实现进程挂掉后重启,但是我一开始试了好几种方式都不行

  • 直接执行,/home/storm/apache-storm-1.1.0/bin/storm nimbus,启动超时
  • 放入后台,/home/storm/apache-storm-1.1.0/bin/storm nimbus &,程序会自行终结
  • 创建脚本文件/home/storm/apache-storm-1.1.0/bin/nimbus.sh

    /home/storm/apache-storm-1.1.0/bin/storm nimbus &

    脚本“&”符号还是要的,不然PPID是monit的。
    给执行权限chmod 755 /home/storm/apache-storm-1.1.0/bin/nimbus.sh

    不管是/home/storm/apache-storm-1.1.0/bin/nimbus.sh还是/bin/bash /home/storm/apache-storm-1.1.0/bin/nimbus.sh都不能实现自动重启。

  • 参考monit的FAQ(请点击我)使用/bin/bash -c执行但是后面必须要有一个输出的文件,没有会报错:

    error    : 'nimbus' failed to start (exit status 0) -- no output

所以经过好一番折腾,最终 start program = "/bin/bash -c '/home/storm/apache-storm-1.1.0/bin/nimbus.sh &>/tmp/nimbus.out'",nimbus.sh就是上面提到的那个脚本文件。我觉得这应该不是最正确的配置,但是至少可以实现重启了。

supervisor同理

#vi /etc/monit.d/supervisor
check process supervisor matching org.apache.storm.daemon.supervisor.Supervisor
  start program = "/bin/bash -c '/home/storm/apache-storm-1.1.0/bin/supervisor.sh &>/tmp/supervisor.out'" with timeout 60 seconds
  stop program = "/bin/kill -9 `ps -ef|grep daemon.supervisor|grep -v grep|awk '{print $2}'`"
  if 3 restarts within 5 cycles then unmonitor
  group storm

这样就算配置完成了。141配置nimbus,然后141-143配置supervisor,三台机器都装了Monit,虽然M/Monit可以统一管理集群,但是需要收费,这边就没有考虑了。后面再尝试使用其他监控工具试试。

接下来就是启动monit,先熟悉monit的基本命令

  • monit 启动
  • monit -t 校验配置文件正确性
  • monit reload 重新加载配置
  • monit status 查看状态
  • monit quit 退出

所以当修改完配置文件之后,第一步执行monit -t查看配置是否正确,然后monit reload重新加载配置。

monit启动之后可以登录web查看,根据Global里面的配置,我的页面地址是:http://10.223.138.141:2812/
Monit-UI

启动storm的UI后查看,我在10.223.138.141上启动的,访问地址为:10.223.138.141:8080不要忘记防火墙!
Storm-UI

至此,Storm安装完毕!

参考

查看原文

赞 1 收藏 1 评论 0

怪兽 关注了专栏 · 2019-04-03

终身学习者

我要先坚持分享20年,大家来一起见证吧。

关注 51386

怪兽 关注了专栏 · 2019-04-03

更了不起的前端

学习过程中的一些总结和沉淀,欢迎关注公众号「更了不起的前端」

关注 3661

怪兽 关注了专栏 · 2019-04-03

前端周刊

薄荷前端周刊,每周至少一篇技术分享

关注 3193

怪兽 关注了专栏 · 2019-04-03

前端小册子

冷哥哥的前端小册子。

关注 1440

怪兽 关注了用户 · 2019-04-03

hfhan @hfhan

砥砺前行

关注 19568

怪兽 关注了标签 · 2019-04-03

javascript

JavaScript 是一门弱类型的动态脚本语言,支持多种编程范式,包括面向对象和函数式编程,被广泛用于 Web 开发。

一般来说,完整的JavaScript包括以下几个部分:

  • ECMAScript,描述了该语言的语法和基本对象
  • 文档对象模型(DOM),描述处理网页内容的方法和接口
  • 浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口

它的基本特点如下:

  • 是一种解释性脚本语言(代码不进行预编译)。
  • 主要用来向HTML页面添加交互行为。
  • 可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离。

JavaScript常用来完成以下任务:

  • 嵌入动态文本于HTML页面
  • 对浏览器事件作出响应
  • 读写HTML元素
  • 在数据被提交到服务器之前验证数据
  • 检测访客的浏览器信息

《 Javascript 优点在整个语言中占多大比例?

关注 171748

认证与成就

  • 获得 1 次点赞
  • 获得 1 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 1 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2019-04-03
个人主页被 166 人浏览