整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

CSS3:为内容设置样式

CSS3:为内容设置样式
本样式对齐文本text-align属性用于指定文本块的对齐方式,可选值包括: 1)start:内容对齐开始边界,默认; 2)end:内容对齐结束边界; 3)left:内容左对齐; 4)right:内容右对齐; 5)center:内容居中对齐; 6)justify:内容两端对齐。当text-align属性使用了justify值时,可以使用text-justify属性指定文本添加空白的方式,这个属性...
了解了包的概念,就可以系统的介绍Java中的访问控制级别。在Java中,针对类、成员方法和属性提供了四种访问级别,分别是private、default、protected和public。 权限访问修饰符(权限从大到小依次往右排) public(公共) protected(受保护) default(缺省) private(私有) 同一个类 √ √...
Rust 提供了代码封装的机制。可以通过crate (等同于Java中的package)创建相对独立的module模块,模块中封装了可以重复使用的功能函数。当创建了自己的 lib 库或者要使用第三方的库的时候(这些库就是一些事先写好的crate)需要将这些库中的module 模块引用到当前的环境中。Rust提供了以下几种引用方式:一、使用 extern crate在使用这些Module的文件中,通过...
填空题: 他______牺牲生命_______出卖组织? 据数据统计,不同年代的同学回复的最多的是….. 60后,他宁可牺牲生命,也不出卖组织。 70后,他害怕牺牲生命,所以出卖组织。 80后,他与其牺牲生命,不如出卖组织。 90后,他即使牺牲生命,也要出卖组织。 00后,他白白牺牲了生命,忘了出卖组织。 上边的案例,引发了大家对”自我与企业关系的思考”. 能力与欲望...
历届试题 国王的烦恼 时间限制:1.0s 内存限制:256.0MB 问题描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛。两个小岛间可能存在多座桥连接。然而,由于海水冲刷,有一些大桥面临着不能使用的危险。 如果两个小岛间的所有大桥都不能使用,则这两座小岛就不能直接到达了。然而,只要这两座...
go test命令参数问题在使用go test对go代码进行单元测试的时候,遇到关于命令参数的问题,google了一下,没有找到很好的说明,其实就是一些细节而已。问题是这样的,在进行单元测试的时候,我希望输入一些命令行参数来控制程序的运行。 参考go官方文档,只需要在go test后面加上-args和参数就可以了 例如 go test -args -classpath E:\testcase...
阿里云OSS-使用经验总结,存储,账号-权限,分页,缩略图,账号切换最近项目中,需要使用云存储,最后选择了阿里云-对象存储服务OSS。总的来说,比较简单,但是仍然遇到了几个问题,需要总结下。1.OSS总的使用介绍 https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_object.html?spm=5176.docoss/...
WEB应用图片的格式,以及各自的特点和优化(一) by FungLeo前言12年前我入行三天.用table布局做了一个非常粗糙的网页.我说了一句话,”网页就是表格加文字加图片,图片分两种,插入图片和背景图片”.这句话在今天看来,当然是一个笑话.但是当时我说出这句话的时候,当时的那些前辈都非常认可我的总结,并且认为我很有从事网络发展的潜力啊.哎,要不是他们的鼓励,说不定我早转行了……扯远了.说回正题,...
1. 单表数据的导出针对单表数据的导出操作,MongoDB 提供了 mongoexport 命令。mongoexport 既可以将数据导出为 CSV 格式的文件,也可以导出 JSON 格式的文件。这两者之间的区别是:JSON 是 mongoexport 默认的导出格式,不需要指定,而要导出 CSV 格式的话需要明确指定;导出 CSV 格式必须显式指定各属性名,而导出 JSON 格式不需要。由此可见...
商业智能对于中小企业来说,由于其高昂的费用和运行维护技术水平要求高,往往难以承受,商业智能SAAS系统平台+模块的创新模式的出现能帮助中小企业走上商业智能之路。...
stack.sh给出了一个非常好的例子,关于学习openstack创建 1.检查devstack文件,检查bash4.2以上,检查用户,不能是root2.准备环境,导入函数3.检查local.conf和localrc是否都存在,如果存在使用localrc4.检查是否已经运行devstack5.代理设置和禁用无效服务6.配置sudo7.配置distro库8.配置目标目录,创建目标目录9.配置主机、日...
博客地址:http://blog.csdn.net/FoxDave本文介绍如何利用SharePoint客户端对象模型(.NET)逐级获取Office 365网站中List的内容,仅仅是示例,没有讲究太多东西。代码如下:ClientContext ctx=new ClientContext(""); ctx.Credentials=new SharePointOn...
题外话Atom,风风雨雨走过一年多了.,目前最新版本是V1.7.0 .社区还是相当活跃;体验也改善了很多;但是性能上还是欠缺;今天我再来介绍自己常用的一款插件git-control插件介绍 官方介绍页面 作者: jacogr Github地址 我的介绍 就是命令行的GUI版本,,有些类似sourcetree,但是不如它强大,日用满足使用在编辑器下加载git版本的工作目录;工具默认启用快捷键...
安装devstack后,如果没有设置参数,执行openstack命令是不成功的。1.登录到horizon页面,使用admin登入,进入project->compute-> Access&Security -> API Access,记录下Service Endpoint。或选择download OpenStack RC File按钮,下载demo-openrc.sh文件2.将demo-openrc...
对于这样的问题,看到第一眼就是暴力破解,所以也就递归找到所有情况,再筛选出合格的小明被劫持到X赌城,被迫与其他3人玩牌。 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?思路: 首先无论怎么取,手牌为13张的时候结束.也就是递归结束标...
网红和粉丝经济,是最近几年流行起来的概念。 截至目前,有一些初步的认识,整理成文。 粉丝,最早是明星的跟随者比较多。 我的理解是,对于一个人物、动物、运动等,有着共同的兴趣,从而建立多个人和一个人之间的关系,比如粉丝和明星。 粉丝经济,大获成功的标志是,雷军和小米科技。在创业早期,就把粉丝经济和社交传播结合在一起,低成本地实现了全网营销。从此以后,各大手机厂商等很多领域的企业,都...
关于android端apk退出方式的设计,现在大体只有下面几种:1,有退出和取消按钮;2,一定时间内两次返回为退出;3,一次返回就是退出。首先可以看到这两个用按钮的,退出都在左侧,设计者肯定没有看过十年前雅虎研究院出的web端设计指导,下一步的操作一定是在右侧,而返回上一步的操作是在左侧。但是到了移动端应该考虑用户是左手还是右手使用,也就是说,如果是左手使用,这个位置设计没有问题,反之就不用说了。...
写在最前:本文主要描述在网站的不同的并发访问量级下,Mysql架构的演变可扩展性架构的可扩展性往往和并发是息息相关,没有并发的增长,也就没有必要做高可扩展性的架构,这里对可扩展性进行简单介绍一下,常用的扩展手段有以下两种Scale-up : 纵向扩展,通过替换为更好的机器和资源来实现伸缩,提升服务能力Scale-out : 横向扩展, 通过加节点(机器)来实现伸缩,提升服务能力对于互联网的高并...
angular.js中,指令是最基础的也是最重要的工具之一。angular.js指令指的是以ng为前缀的HTML属性。在之前的ng-app、ng-model等,都属于指令。 angular.js中的基本指令包括如下内容: · 1.ng-app/ng-model ng-app指令用于声明angular,js的作用范围,ng-model用于声明模型。这些在之前都已经进行过详细介绍。 2.ng-...
java编码 当你的字节序列是某种编码时,这个时候想把字节序列变成 字符串,也需要用这种编码方式,否则会出现乱码 文本文件就是字节序列 可以是任意编码的序列,如果在中文机器上直接创建文本文件,那么该文本文件 只认识ANSI编码 案例: public class Bianma { public static void main(Strin...
调试JDK源码-一步一步看HashMap怎么Hash和扩容调试JDK源码-ConcurrentHashMap实现原理调试JDK源码-HashSet实现原理调试JDK源码-调试JDK源码-Hashtable实现原理以及线程安全的原因 ConcurrentHashMap线程安全的总结是我从源码分析出来的:ConcurrentHashMap所谓线程安全是哈希冲突的时候新增的节点是线程安全的,而 Conc...
对于后台系统的搜索进行UI自动化,主要是比对页面查询结果是否与预期一致(即数据库查询结果) search.py# -*- coding:utf8 -*- import HTMLTestRunner import time import unittest import public from selenium import webdriver class Search(unittest.TestCa...
ajax 的全称是Asynchronous(异步的意思) JavaScript and XML,是一种创建交互式网页应用的网页开发技术 ajax技术的流行得益于google的大力推广,正是由于google产品对ajax技术的广泛应用,使得ajax流行起来了。 Ajax其核心有JavaScript、XMLHTTPRequest、DOM对象组成,通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用JavaScript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请...
一、SpringMVChttp://blog.csdn.net/evankaka/article/details/45501811Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简...
概念: 优化策略:字段选择性 选择性较低索引 可能带来的性能问题索引选择性=索引列唯一值/表记录数;选择性越高索引检索价值越高,消耗系统资源越少;选择性越低索引检索价值越低,消耗系统资源越多;查询条件含有多个字段时,不要在选择性很低字段上创建索引可通过创建组合索引来增强低字段选择性和避免选择性很低字段创建索引带来副作用;尽量减少possible_keys,正确索引会提高sql查询速度,过多索引...
一. 什么是Spark? Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需...
相比之前的增改查,删除就显得简单的多了。 这里的request的type为delete,删除成功的status为204,404则是要删除的记录不存在 var id='BAD90A95-7FEA-E511-9414-ADA183AB6249'; $.ajax({ async: false, type: "DELETE ", co...
关于JPush极光推送是国内的服务厂商提供的一站式push服务(同时支持iOS、android),后面也加入了即时通讯的能力供app使用。致力于打造简单、可靠、价格有竞争力的服务(简单功能全免费,高级版才收费),让应用开发商可以聚焦业务开发,push相关的技术实现全部通过极光推送来解决,仅需调用极光推送的api即可。正因为如此,开发者小伙伴们对其的评价相当不错。笔者的app新增了从服务器往移动客户端...
Mapreduce初析 Mapreduce是一个计算框架,既然是做计算的框架,那么表现形式就是有个输入(input),mapreduce操作这个输入(input),通过本身定义好的计算模型,得到一个输出(output),这个输出就是我们所需要的结果。 重点就是这个计算模型的运行规则。在运行一个mapreduce计算任务时候,任务过程被分为两个阶段:map阶段...
Jquery对象常用的方法:$(”p”).addClass(css中定义的样式类型); 给某个元素添加样式 $(”img”).attr({src:”test.jpg”,alt:”test Image”}); 给某个元素添加属性/值,参数是map $(”img”).attr(”src”,”test.jpg”); 给某个元素添加属性/值 $(”img”).attr(”title”, function(...

pring-Boot-Admin是什么

先看看,官网给其定义:

简单来说,Spring Boot Admin是一个管理和监控Spring Boot应用程序的开源软件。每个应用都认为是一个客户端,通过HTTP或者服务注册发现Spring Cloud(Eureka、Consul等等)注册到admin server中进行展示,Spring Boot Admin UI部分使用AngularJs将数据展示在前端。

Spring Boot Admin是一个针对spring-boot的actuator接口进行UI美化封装的监控工具。它可以:在列表中浏览所有被监控spring-boot项目的基本信息,详细的Health信息、内存信息、JVM信息、垃圾回收信息、各种配置信息(比如数据源、缓存列表和命中率)等,还可以直接修改logger的level。

监控实例

Spring Boot Admin包含admin-server与admin-client两个组件,admin-server通过采集actuator端点数据,显示在spring-boot-admin-ui上。

**提醒:为了演示服务端和客户端,本实例创建了一个maven多模块项目。 **

admin-server端

admin-server端主要是数据展现功能,包含了一个ui页面。

创建一个spring-boot-admin-server工程。

0.引入pom依赖

 <dependency>
 <groupId>de.codecentric</groupId>
 <artifactId>spring-boot-admin-starter-server</artifactId>
 </dependency>
 <dependencyManagement>
 <dependencies>
 <dependency>
 <groupId>de.codecentric</groupId>
 <artifactId>spring-boot-admin-dependencies</artifactId>
 <version>1.5.7</version>
 <type>pom</type>
 <scope>import</scope>
 </dependency>
 </dependencies>
 </dependencyManagement>

注意:由于使用的SprinBoot为1.5.15版本,所以选用的Spring Boot Admin版本为1.5.7版本。同时为了版本依赖,使用dependencyManagement加入了spring-boot-admin-dependencies进行版本管理。

1.启动类,加入注解@EnableAdminServer。

@SpringBootApplication
@EnableAdminServer
@Slf4j
public class Chapter28AdminServerApplication {
 public static void main(String[] args) throws Exception {
 SpringApplication.run(Chapter28AdminServerApplication.class, args);
 log.info("Chapter28AdminServer启动!");
 }
}

一个服务端就基本配置结束了,启动应用,访问:http://127.0.0.1:8080 ,即可看见监控页面了:

由于现在还没有加入客户端,所以应用列表都是空的。

admin-client端

被监控的应用只需要加入相关依赖和服务端配置即可。

创建一个spring-boot-admin-client项目

0.引入pom依赖

 <dependency>
 <groupId>de.codecentric</groupId>
 <artifactId>spring-boot-admin-starter-client</artifactId>
 </dependency>

1.配置文件加入服务端地址等信息。

application.properties

# 应用名称 便于识别
spring.application.name=spring-boot-admin-client
server.port=8081
#服务端地址
spring.boot.admin.url=http://127.0.0.1:8080
# 关闭安全认证
management.security.enabled=false
# 利用info端点,加入版本等信息 
info.version=@project.version@
info.name=@project.artifactId@
# 可自定义信息
info.author=oKong
info.blog=http://blog.lqdev.cn/

注意:为了能获取maven的配置内容,需要在pom文件中加入以下配置:

<build>
 <plugins>
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 <executions>
 <execution>
 <goals>
 <goal>build-info</goal>
 </goals>
 </execution>
 </executions>
 </plugin>
 </plugins>
</build>

只需要这两部,客户端就配置完了,启动下,访问http://127.0.0.1:8080 ,即可看见监控页面已经包含了此应用数据了:

此时,我们点击详情,即可看见各类监控数据了。

环境变量:

线程信息:

日志相关:

若需要动态的修改日志级别,按官网的提示,需要加入logback-spring.xml文件,具体的可查看官网文档吧,写的很详细了。

其他监控指标,大家可以自行查看下。


注意:在生产环境中,为了数据的安全,还是需要加上安全认证的,具体的可以查看官方文档:securing-spring-boot-admin,相对比较简单,简单来说就是加入spring-boot-starter-security进行安全认证,这里可以直接引入spring-boot-admin-server-ui-login进行登录安全认证。本文就不阐述了。


监控通知

虽然我们可以通过界面进行可视化监控,但不可能实时去盯着屏幕的,我们希望在服务有问题,比如下线、CPU异常等情况时,能通过邮件等形式及时通知对应责任人,这样就能做到预警效果了。

在SpingBootAdmin中,提供了多种通知机制,来实现监控告警功能。

可以看见,其集成了国外的一些通讯软件,而对于我们而言,还是使用邮件通知比较靠谱。当然也能自定义通知,进行个性化消息通知功能,比如钉钉机器人通知等。

发送邮件通知

这里简单以邮件通知为例。具体邮件发送相关知识点,可查看:第二十六章:邮件发送,这里不在阐述了。

以下配置都是在服务端spring-boot-admin-server进行添加。

0.引入pom依赖

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

1.配置邮箱信息。

# 邮件相关
# SMTP服务器地址
spring.mail.host=smtp.qq.com
# SMTP服务器端口号 默认-1
# spring.mail.port=-1
# 发送方帐号
spring.mail.username=邮箱
# 发送方密码(授权码)
spring.mail.password=邮箱密码
#javaMailProperties 配置
# 开启用户身份验证
spring.mail.properties.mail.smtp.auth=true
# 发送给谁
spring.boot.admin.notify.mail.to=499452441@qq.com
# 谁发的
spring.boot.admin.notify.mail.from=499452441@qq.com

再次启动服务端应用和客户端,之后停止客户端,就可以收到下线通知邮件了。

同时,我们还能自定义发送邮件的主题和内容,配置文件加入

# 主题格式
# 使用中文会乱码,可使用yml文件格式解决
# 之类直接unicode编码了
# 应用#{application.name}(#{application.id}) 状态为:#{to.status}
spring.boot.admin.notify.mail.subject=\u5e94\u7528#{application.name}(#{application.id}) \u72b6\u6001\u4e3a\uff1a#{to.status}
# 邮件内容
#应用#{application.name} (#{application.id})\n状态从 #{from.status} 变为 #{to.status}\n\n 应用健康地址:#{application.healthUrl}
spring.boot.admin.notify.mail.text=\u5e94\u7528#{application.name} (#{application.id})\n\u72b6\u6001\u4ece #{from.status} \u53d8\u4e3a #{to.status}\n\n \u5e94\u7528\u5065\u5eb7\u5730\u5740\uff1a#{application.healthUrl}

多说几句:这里的subject和text都支持SpEL(Spring Expression Language)表达式的,关于SpEL表达式,有兴趣的同学可以自行搜索下,是一个支持运行时查询和操作对象图的强大的表达式语言,类似于EL表达式,定界符为#{},一种简化开发的表达式,通过使用表达式来简化开发,减少一些逻辑、配置的编写。

而此次,发送邮件的参数,通过跟踪源码获悉,入口的参数为ClientApplicationEvent,对应路径为:de.codecentric.boot.admin.event.ClientApplicationEvent,即应用信息。其继承的类如下:

当应用发送状态变更时,就会触发ClientApplicationStatusChangedEvent事件了,对应的参数如下所示:

所以,需要额外一些参数时,可以根据de.codecentric.boot.admin.model.Application的属性获取更加详细的信息,如metadata、info等等。

之后,发送的邮件内如如下:

自定义通知

除了使用自带的一些通知机制外,我们还能通过自定义,来进行个性化通知的创建,比如在一些场景下,我们会把消息推送到MQ服务器上或者手机上等等。实现通知比较简单,就是实现Notifier接口,而官方提供给了一个抽象类AbstractStatusChangeNotifier,我们直接继承此类就好了。

0.创建一个自定义通知类

CustomNotifier.java

/**
 * 自定义通知
 * @author oKong
 *
 */
@Component
@ConfigurationProperties("okong.custom.notify")
@Setter
@Getter
@Slf4j
public class CustomNotifier extends AbstractStatusChangeNotifier{
 String name;
 @Override
 protected void doNotify(ClientApplicationEvent event) throws Exception {
 //这里只是为了示例 ,直接输出到控制台了。
 log.info("{}-自定义通知:应用-{}", name,event.getApplication().getName());
 }
}

1.配置文件配置属性name的值

# 自定义通知类型
okong.custom.notify.name=oKong

再次,启动应用,当监控的应用状态发生变动时,可以看见邮件和自定义通知都生效了,控制台可以看见自定义输出内容了。

大家可以结合实际的业务需求,编写不同的自定义通知类的,比如利用小程序或者微信公众号,发送微信信息;或者发送短信;或者其他的通讯工具都可以的,自由发挥~

参考资料

  1. http://codecentric.github.io/spring-boot-admin/1.5.7/

总结

本章节主要讲解了利用Spring Boot Admin这个web监控工具进行可视化的监控应用各指标信息。关于使用Spring Cloud注册中心来进行客户端自动注册与发现的,本系列就不阐述了,因为涉及到一些Eureka的相关知识点,后期会在白话SpringCloud的实施监控里面进行详细阐述,而且基于Spring Boot2的界面风格也有大变动,使用Vue.js来进行构建了,同时很会集成Hystrix和turbine的集成监控,会更加方便。

最后

目前互联网上很多大佬都有SpringBoot系列教程,如有雷同,请多多包涵了。原创不易,码字不易,还希望大家多多支持。若文中有所错误之处,还望提出,谢谢。

、前端代码一些要注意的问题:

  • 不要轻易改动全站级CSS和通用CSS库,改动后,要经过全面测试
  • 避免使用filter
  • 避免在CSS中使用expression
  • 避免过小的背景图片平铺
  • 尽量不要在CSS中使用!important
  • 绝对不要在CSS中使用"*"选择符
  • 层级(z-index)必须清晰明确,页面弹窗、气泡为最高级(最高级为999),不同弹窗气泡之间可在三位数之间调整,普通区块为10-90内10的倍数;区块展开、弹出为当前父层级上个位增加,禁止层级间盲目攀比
  • 背景图片在情况允许,尽可能使用sprite技术,减小http请求,考虑到多人协作开发,sprite按照模块、业务、页面来划分
  • 页面内部尽量避免使用style属性,CSS放在head标签中,由link标签引入,使页面的结构与表现分离
  • 尽量减少使用float、position等影响性能的属性,这样可以避免新手在布局时出现的混乱
  • 尽量少使用<br />来断行
  • 不要连续出现多个 (空格),也尽量少使用全角空格(英文字符集下,全角空格会变成乱码),空白应该尽量使用text-indent、maring/padding等方法来实现
  • 排版如果遇到需要首行缩进的处理,可以使用text-indent:2em;
  • 图片如果需要加载就在页面上用img标签写出,并指明宽高,重要的图片必须加上alt属性,给重要的元素和截断的元素上加上title
  • 如果有跳转的地方,统一使用a标签,<a href="#"></a>,需要跳转到新页面,则还需要加上targent="_blank"属性,如果点击的是空链接(#),则会自动将当前页面重置到首端,可以使用"javascript:void()"来替代原来的"#"
  • 分清楚什么情况下jpg/gif/png图片

二、前端自学网站,提升前端技能的26个网站,人手必备:

  1. CSS battle【在线比拼 CSS】 : https://cssbattle.dev
  2. Learn CSS layout【学习 CSS 布局】:http://learnlayout.com
  3. Flexbox Froggy【学习 Flex 布局的小游戏】:http://flexboxfroggy.com
  4. EnjoyCSS【在线CSS代码可视化工具】:https://enjoycss.com
  5. CSS-Tricks 【CSS 技巧】:https://css-tricks.com
  6. Neumorphism【实现新拟态效果】:https://neumorphism.io
  7. uiGradients【分享渐变色】:https://uigradients.com
  8. JavaScript【一个一直更新的JavaScript 的语法文档,主要会写如何去避免一些常见的错误】:https://bonsaiden.github.io/JavaScript-Garden/zh/
  9. JS Tips【JS 技巧】:https://www.jstips.co
  10. JSweekly【技术周刊 】:https://javascriptweekly.com
  11. CDNJS【JavaScript 资料库】:https://cdnjs.com/libraries
  12. Beautiful Open 【开源 JS 库集合】:https://beautifulopen.com
  13. JavaScript Fun【代码库集合】:https://www.javascript.fun
  14. Stack Overflow【编程人员问答网】:https://stackoverflow.com
  15. 掘金【高质量技术社区】:https://juejin.im
  16. Codrops【网页设计开发博客】:https://tympanus.net
  17. CodePen【一个网站前端设计开发平台,针对网站前端代码的一个工具,上面有各种效果的案例特效(炫技),可以在他们的 demo 基础上开发自己的前端设计。】
    https://codepen.io
  18. CodeSandBox【提供一个在线开发环境的“沙盒”,主流的框架如 React、Vue、Angular 等,都可即开即用、实时编译预览,非常方便。】
    https://codesandbox.io
  19. JS Bin【轻量级在线编辑器网站】:https://jsbin.com
  20. ICONSVG【在线自定义设计SVG图标素材】:https://iconsvg.xyz
  21. OpenMoji【免费表情符号库】:https://www.openmoji.org
  22. Share Icon 【免费矢量素材图库】:https://www.shareicon.net
  23. tableconvert 【在线表格编辑器】:https://tableconvert.com
  24. Feathericons【极简 ICON 图标集】:https://feathericons.com
  25. HTML5UP 【提供大量的HTML5模版】:https://html5up.net/
  26. 趣IT【一个会更新面试题和练习题的宝藏王】https://www.funit.cn/

三、前端学习路线图概览:黑马程序员web前端视频教程从入门到精通Web前端视频教程完整版_Web前端视频教程从入门到精通_黑马程序员

HTML+CSS-->移动web->JavaScript基础-->Web APIs->数据交互&异步编程-->Node.js-->Vue2+Vue3-->React核心技术-->微信小程序

新手不要光看,学完基础就可以写静态页面学完特性就可以独立搞一个商城首页。可以独立完成之后再去学习JavaScript。

JavaScript个非常重要

  • JavaScript本身属于抽象的,尤其是闭包、内置对象、DOM这里都有难度;
  • 而且要学习的内容非常多,比如函数库,对象库也是很多很多;
  • 不仅涉及面向过程的编程思想,还有面向对象的编程思想;
  • 好不容易都学习完了之后会有一种脱离实际应用的感觉,这些都算是javascript的难点。

一条清晰的学习路线了很重要,基础部分定义变量、函数、数组、字符串、内置函数、内置对象)——>面向过程的编程思想在这里可以试着用自定义按钮、自定义播放器练习)——>面向过程编程思想封装一些我们自己想的对象,提供有意义的接口

最后想说的最简单的方法就是找到官方帮助手册,所有的方法属性,都读。读到自己我安全理解了,这些文档可以帮我们夯实基础学习,起码有一个帮助,就是优化了我们不规范的代码。很多人上来就建议看文档学习,个人感觉没必要。学完基础知识之后,夯实基础看官方文档会让大家更受益。